[boinc] 01/04: Imported Upstream version 7.3.19+dfsg
Gianfranco Costamagna
locutusofborg-guest at moszumanska.debian.org
Thu May 22 12:43:58 UTC 2014
This is an automated email from the git hooks/post-receive script.
locutusofborg-guest pushed a commit to annotated tag debian/7.3.19+dfsg-1
in repository boinc.
commit c2d9cf64590e70c8e6ef83d44956753a458ba5a5
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date: Wed May 21 16:24:49 2014 +0200
Imported Upstream version 7.3.19+dfsg
---
Makefile.am | 3 +
Makefile.incl | 3 +
android/.android2po | 2 +-
android/BOINC/AndroidManifest.xml | 166 +-
android/BOINC/assets/all_projects_list.xml | 1045 +-
android/BOINC/assets/ca-bundle.crt | 10112 +------------------
android/BOINC/assets/cc_config.xml | 1 -
android/BOINC/project.properties | 3 +-
android/BOINC/res/drawable-hdpi/acctmgrw.png | Bin 0 -> 871 bytes
android/BOINC/res/drawable-hdpi/bugb.png | Bin 0 -> 4449 bytes
android/BOINC/res/drawable-hdpi/chartb.png | Bin 0 -> 4249 bytes
android/BOINC/res/drawable-hdpi/cogsb.png | Bin 0 -> 4418 bytes
android/BOINC/res/drawable-hdpi/cogw.png | Bin 0 -> 3824 bytes
.../BOINC/res/drawable-hdpi/connectchargerb.png | Bin 0 -> 4088 bytes
android/BOINC/res/drawable-hdpi/copyw.png | Bin 3573 -> 3413 bytes
android/BOINC/res/drawable-hdpi/desktopb.png | Bin 0 -> 3553 bytes
android/BOINC/res/drawable-hdpi/helpb.png | Bin 0 -> 3964 bytes
android/BOINC/res/drawable-hdpi/ic_drawer.png | Bin 0 -> 2842 bytes
android/BOINC/res/drawable-hdpi/infob.png | Bin 0 -> 3812 bytes
android/BOINC/res/drawable-hdpi/magnifierb.png | Bin 0 -> 3999 bytes
android/BOINC/res/drawable-hdpi/mailsmallw.png | Bin 0 -> 3415 bytes
android/BOINC/res/drawable-hdpi/mailw.png | Bin 3996 -> 3616 bytes
android/BOINC/res/drawable-hdpi/nextb.png | Bin 0 -> 4099 bytes
android/BOINC/res/drawable-hdpi/offb.png | Bin 0 -> 4056 bytes
android/BOINC/res/drawable-hdpi/offw.png | Bin 4002 -> 3688 bytes
android/BOINC/res/drawable-hdpi/pausew.png | Bin 3113 -> 3105 bytes
android/BOINC/res/drawable-hdpi/playw.png | Bin 3481 -> 3319 bytes
android/BOINC/res/drawable-hdpi/plusw.png | Bin 1181 -> 902 bytes
android/BOINC/res/drawable-hdpi/previousb.png | Bin 0 -> 4163 bytes
android/BOINC/res/drawable-hdpi/refreshw.png | Bin 3747 -> 3397 bytes
android/BOINC/res/drawable-hdpi/screenb.png | Bin 0 -> 3244 bytes
android/BOINC/res/drawable-hdpi/speechbubbleb.png | Bin 0 -> 3964 bytes
android/BOINC/res/drawable-hdpi/sqplusb.png | Bin 0 -> 3341 bytes
android/BOINC/res/drawable-hdpi/wirelessb.png | Bin 0 -> 3584 bytes
android/BOINC/res/drawable-ldpi/acctmgrw.png | Bin 0 -> 619 bytes
android/BOINC/res/drawable-ldpi/bugb.png | Bin 0 -> 3903 bytes
android/BOINC/res/drawable-ldpi/chartb.png | Bin 0 -> 3767 bytes
android/BOINC/res/drawable-ldpi/cogsb.png | Bin 0 -> 3653 bytes
android/BOINC/res/drawable-ldpi/cogw.png | Bin 0 -> 3380 bytes
.../BOINC/res/drawable-ldpi/connectchargerb.png | Bin 0 -> 3525 bytes
android/BOINC/res/drawable-ldpi/copyw.png | Bin 3321 -> 3203 bytes
android/BOINC/res/drawable-ldpi/desktopb.png | Bin 0 -> 3484 bytes
android/BOINC/res/drawable-ldpi/helpb.png | Bin 0 -> 3434 bytes
android/BOINC/res/drawable-ldpi/infob.png | Bin 0 -> 3467 bytes
android/BOINC/res/drawable-ldpi/magnifierb.png | Bin 0 -> 3505 bytes
android/BOINC/res/drawable-ldpi/mailsmallw.png | Bin 0 -> 3201 bytes
android/BOINC/res/drawable-ldpi/mailw.png | Bin 3424 -> 3297 bytes
android/BOINC/res/drawable-ldpi/nextb.png | Bin 0 -> 3708 bytes
android/BOINC/res/drawable-ldpi/offb.png | Bin 0 -> 3563 bytes
android/BOINC/res/drawable-ldpi/offw.png | Bin 3526 -> 3340 bytes
android/BOINC/res/drawable-ldpi/pausew.png | Bin 3110 -> 3049 bytes
android/BOINC/res/drawable-ldpi/playw.png | Bin 3255 -> 3173 bytes
android/BOINC/res/drawable-ldpi/plusw.png | Bin 832 -> 665 bytes
android/BOINC/res/drawable-ldpi/previousb.png | Bin 0 -> 3727 bytes
android/BOINC/res/drawable-ldpi/refreshw.png | Bin 3228 -> 3027 bytes
android/BOINC/res/drawable-ldpi/screenb.png | Bin 0 -> 3165 bytes
android/BOINC/res/drawable-ldpi/speechbubbleb.png | Bin 0 -> 3434 bytes
android/BOINC/res/drawable-ldpi/sqplusb.png | Bin 0 -> 3160 bytes
android/BOINC/res/drawable-ldpi/wirelessb.png | Bin 0 -> 3152 bytes
android/BOINC/res/drawable-mdpi/acctmgrw.png | Bin 0 -> 727 bytes
android/BOINC/res/drawable-mdpi/bugb.png | Bin 0 -> 4091 bytes
android/BOINC/res/drawable-mdpi/chartb.png | Bin 0 -> 3933 bytes
android/BOINC/res/drawable-mdpi/cogsb.png | Bin 0 -> 3858 bytes
android/BOINC/res/drawable-mdpi/cogw.png | Bin 0 -> 3652 bytes
.../BOINC/res/drawable-mdpi/connectchargerb.png | Bin 0 -> 3754 bytes
android/BOINC/res/drawable-mdpi/copyw.png | Bin 3413 -> 3321 bytes
android/BOINC/res/drawable-mdpi/desktopb.png | Bin 0 -> 3503 bytes
android/BOINC/res/drawable-mdpi/helpb.png | Bin 0 -> 3605 bytes
android/BOINC/res/drawable-mdpi/ic_drawer.png | Bin 0 -> 2837 bytes
android/BOINC/res/drawable-mdpi/infob.png | Bin 0 -> 3565 bytes
android/BOINC/res/drawable-mdpi/magnifierb.png | Bin 0 -> 3649 bytes
android/BOINC/res/drawable-mdpi/mailsmallw.png | Bin 0 -> 3297 bytes
android/BOINC/res/drawable-mdpi/mailw.png | Bin 3662 -> 3415 bytes
android/BOINC/res/drawable-mdpi/nextb.png | Bin 0 -> 3877 bytes
android/BOINC/res/drawable-mdpi/offb.png | Bin 0 -> 3716 bytes
android/BOINC/res/drawable-mdpi/offw.png | Bin 3688 -> 3526 bytes
android/BOINC/res/drawable-mdpi/pausew.png | Bin 3105 -> 3110 bytes
android/BOINC/res/drawable-mdpi/playw.png | Bin 3319 -> 3255 bytes
android/BOINC/res/drawable-mdpi/plusw.png | Bin 902 -> 832 bytes
android/BOINC/res/drawable-mdpi/previousb.png | Bin 0 -> 3878 bytes
android/BOINC/res/drawable-mdpi/refreshw.png | Bin 3397 -> 3228 bytes
android/BOINC/res/drawable-mdpi/screenb.png | Bin 0 -> 3179 bytes
android/BOINC/res/drawable-mdpi/speechbubbleb.png | Bin 0 -> 3605 bytes
android/BOINC/res/drawable-mdpi/sqplusb.png | Bin 0 -> 3191 bytes
android/BOINC/res/drawable-mdpi/wirelessb.png | Bin 0 -> 3324 bytes
android/BOINC/res/drawable-xhdpi/ic_drawer.png | Bin 0 -> 1056 bytes
.../acctmgrb.png => drawable/acctmgrb48.png} | Bin
android/BOINC/res/drawable/boinc_logo_large.png | Bin 0 -> 45314 bytes
.../res/drawable/navlist_counter_background.xml | 33 +
.../BOINC/res/drawable/navlist_item_background.xml | 26 +
.../drawable/navlist_item_focussed_background.xml | 26 +
...avlist_item_pressed_and_focussed_background.xml | 26 +
.../drawable/navlist_item_pressed_background.xml | 26 +
android/BOINC/res/drawable/navlist_selector.xml | 26 +
.../res/drawable/navlist_selector_pressed.xml | 26 +
android/BOINC/res/drawable/notconnectedb48.png | Bin 4006 -> 4088 bytes
android/BOINC/res/drawable/projectsb48.png | Bin 0 -> 1287 bytes
android/BOINC/res/drawable/screen48b.png | Bin 0 -> 3244 bytes
android/BOINC/res/drawable/shape_button_grey.xml | 22 +
.../shape_dark_blue_background_wo_stroke.xml | 22 +
.../BOINC/res/drawable/shape_dark_blue_border.xml | 22 +
.../res/drawable/shape_dark_blue_gradient_2.xml | 23 +
.../shape_dark_blue_gradient_background.xml | 4 +-
.../shape_light_blue_background_wo_stroke.xml | 2 +-
.../BOINC/res/drawable/shape_light_blue_border.xml | 22 +
.../shape_light_red_background_wo_stroke.xml | 22 +
android/BOINC/res/layout/activity_splash.xml | 36 +
.../res/layout/attach_project_acctmgr_dialog.xml | 115 +
.../res/layout/attach_project_acctmgr_layout.xml | 166 -
.../attach_project_batch_conflicts_layout.xml | 73 +
.../attach_project_batch_conflicts_listitem.xml | 79 +
.../attach_project_batch_processing_layout.xml | 130 +
.../attach_project_credential_input_dialog.xml | 139 +
.../attach_project_credential_input_layout.xml | 127 +
.../res/layout/attach_project_failed_layout.xml | 50 -
.../attach_project_hint_contribution_layout.xml | 116 +
.../attach_project_hint_platforms_layout.xml | 40 +
.../attach_project_hint_projectwebsite_layout.xml | 115 +
.../res/layout/attach_project_info_layout.xml | 113 +
.../res/layout/attach_project_list_layout.xml | 104 +-
.../layout/attach_project_list_layout_listitem.xml | 45 +-
.../attach_project_list_layout_manual_dialog.xml | 58 -
.../res/layout/attach_project_login_layout.xml | 386 -
.../attach_project_manual_url_input_dialog.xml | 62 +
.../res/layout/attach_project_ongoing_layout.xml | 47 -
.../layout/attach_project_registration_layout.xml | 218 -
.../res/layout/attach_project_success_layout.xml | 49 -
.../res/layout/attach_project_working_layout.xml | 69 -
android/BOINC/res/layout/dialog_about.xml | 31 +-
android/BOINC/res/layout/dialog_list_cbitem.xml | 31 -
.../BOINC/res/layout/eventlog_client_layout.xml | 31 +
android/BOINC/res/layout/eventlog_gui_layout.xml | 31 +
android/BOINC/res/layout/eventlog_layout.xml | 70 -
android/BOINC/res/layout/main.xml | 163 +-
android/BOINC/res/layout/main_loading.xml | 54 +
android/BOINC/res/layout/main_tab_layout.xml | 11 +-
android/BOINC/res/layout/navlist_listitem.xml | 58 +
.../BOINC/res/layout/navlist_listitem_subitem.xml | 57 +
.../BOINC/res/layout/notices_layout_listitem.xml | 3 +-
android/BOINC/res/layout/prefs_layout_dialog.xml | 3 +-
.../BOINC/res/layout/prefs_layout_dialog_pct.xml | 3 +-
.../res/layout/prefs_layout_dialog_selection.xml | 3 +-
android/BOINC/res/layout/prefs_layout_listitem.xml | 47 +-
.../res/layout/prefs_layout_listitem_bool.xml | 31 +-
.../BOINC/res/layout/project_details_layout.xml | 189 +
.../project_details_slideshow_image_layout.xml | 26 +
android/BOINC/res/layout/projects_layout.xml | 27 +-
android/BOINC/res/layout/status_layout.xml | 56 +-
android/BOINC/res/layout/tasks_layout_listitem.xml | 26 +-
android/BOINC/res/layout/title_bar.xml | 57 -
android/BOINC/res/menu/eventlog_menu.xml | 8 +-
android/BOINC/res/menu/main_menu.xml | 24 +-
android/BOINC/res/menu/project_details_menu.xml | 42 +
android/BOINC/res/menu/projects_menu.xml | 15 +-
android/BOINC/res/values-pl/strings.xml | 183 -
android/BOINC/res/values-v11/styles.xml | 15 +
android/BOINC/res/values-v14/theme.xml | 44 +
android/BOINC/res/values/Color.xml | 5 +
android/BOINC/res/values/colors.xml | 5 +
android/BOINC/res/values/configuration.xml | 31 +-
android/BOINC/res/values/strings.xml | 377 +-
android/BOINC/res/values/theme.xml | 44 +-
.../src/edu/berkeley/boinc/AppPreferences.java | 146 -
.../boinc/AttachProjectAcctMgrActivity.java | 111 -
.../berkeley/boinc/AttachProjectListActivity.java | 179 -
.../berkeley/boinc/AttachProjectLoginActivity.java | 456 -
.../boinc/AttachProjectRegistrationActivity.java | 143 -
.../boinc/AttachProjectWorkingActivity.java | 487 -
.../src/edu/berkeley/boinc/BOINCActivity.java | 471 +-
.../src/edu/berkeley/boinc/EventLogActivity.java | 327 +-
.../boinc/EventLogActivityTabListener.java | 81 +
.../edu/berkeley/boinc/EventLogClientFragment.java | 183 +
.../edu/berkeley/boinc/EventLogGuiFragment.java | 100 +
.../src/edu/berkeley/boinc/ForwardDialog.java | 54 +
.../src/edu/berkeley/boinc/NoticesActivity.java | 174 -
.../src/edu/berkeley/boinc/NoticesFragment.java | 105 +
.../src/edu/berkeley/boinc/PrefsActivity.java | 673 --
.../src/edu/berkeley/boinc/PrefsFragment.java | 695 ++
.../edu/berkeley/boinc/ProjectDetailsFragment.java | 384 +
.../src/edu/berkeley/boinc/ProjectsActivity.java | 550 -
.../src/edu/berkeley/boinc/ProjectsFragment.java | 497 +
.../src/edu/berkeley/boinc/SplashActivity.java | 184 +
.../src/edu/berkeley/boinc/StatusActivity.java | 415 -
.../src/edu/berkeley/boinc/StatusFragment.java | 294 +
.../src/edu/berkeley/boinc/TasksActivity.java | 332 -
.../src/edu/berkeley/boinc/TasksFragment.java | 287 +
.../boinc/adapter/AttachProjectListAdapter.java | 68 -
.../edu/berkeley/boinc/adapter/GalleryAdapter.java | 2 +-
.../boinc/adapter/NavDrawerListAdapter.java | 272 +
.../berkeley/boinc/adapter/NoticesListAdapter.java | 29 +-
.../berkeley/boinc/adapter/PrefsListAdapter.java | 53 +-
.../boinc/adapter/PrefsListItemWrapperValue.java | 4 +
.../adapter/PrefsSelectionDialogListAdapter.java | 34 +-
.../boinc/adapter/ProjectControlsListAdapter.java | 2 +-
.../boinc/adapter/ProjectsListAdapter.java | 67 +-
.../berkeley/boinc/adapter/TasksListAdapter.java | 15 +-
.../edu/berkeley/boinc/attach/AcctMgrFragment.java | 266 +
.../boinc/attach/BatchConflictListActivity.java | 226 +
.../boinc/attach/BatchConflictListAdapter.java | 127 +
.../boinc/attach/BatchProcessingActivity.java | 263 +
.../boinc/attach/CredentialInputActivity.java | 144 +
.../edu/berkeley/boinc/attach/HintFragment.java | 61 +
.../attach/IndividualCredentialInputFragment.java | 159 +
.../boinc/attach/ManualUrlInputFragment.java | 95 +
.../boinc/attach/ProjectAttachService.java | 636 ++
.../berkeley/boinc/attach/ProjectInfoFragment.java | 152 +
.../boinc/attach/SelectionListActivity.java | 221 +
.../boinc/attach/SelectionListAdapter.java | 89 +
.../edu/berkeley/boinc/client/AppPreferences.java | 173 +
.../client/ClientInterfaceImplementation.java | 292 +-
.../berkeley/boinc/client/ClientNotification.java | 197 +-
.../berkeley/boinc/client/ClientRemoteService.java | 134 -
.../edu/berkeley/boinc/client/ClientStatus.java | 366 +-
.../edu/berkeley/boinc/client/DeviceStatus.java | 35 +-
.../boinc/client/IClientRemoteService.aidl | 88 -
.../src/edu/berkeley/boinc/client/IMonitor.aidl | 111 +
.../src/edu/berkeley/boinc/client/Monitor.java | 720 +-
.../berkeley/boinc/client/NoticeNotification.java | 149 +
.../berkeley/boinc/client/PersistentStorage.java | 67 +
.../edu/berkeley/boinc/receiver/BootReceiver.java | 2 +-
.../boinc/receiver/PackageReplacedReceiver.java | 13 +-
.../boinc/receiver/PowerConnectedReceiver.java | 38 +
.../src/edu/berkeley/boinc/rpc/AccountIn.aidl | 21 +
.../src/edu/berkeley/boinc/rpc/AccountIn.java | 57 +-
.../src/edu/berkeley/boinc/rpc/AccountOut.aidl | 18 +
.../src/edu/berkeley/boinc/rpc/AcctMgrInfo.aidl | 21 +
.../src/edu/berkeley/boinc/rpc/AcctMgrInfo.java | 46 +-
android/BOINC/src/edu/berkeley/boinc/rpc/App.java | 38 +-
.../src/edu/berkeley/boinc/rpc/AppVersion.java | 49 +-
.../src/edu/berkeley/boinc/rpc/CcStatusParser.java | 4 +
.../edu/berkeley/boinc/rpc/GlobalPreferences.aidl | 21 +
.../edu/berkeley/boinc/rpc/GlobalPreferences.java | 92 +-
.../BOINC/src/edu/berkeley/boinc/rpc/GuiUrl.java | 33 +-
.../BOINC/src/edu/berkeley/boinc/rpc/HostInfo.aidl | 21 +
.../BOINC/src/edu/berkeley/boinc/rpc/HostInfo.java | 70 +-
.../src/edu/berkeley/boinc/rpc/ImageWrapper.aidl | 21 +
.../src/edu/berkeley/boinc/rpc/ImageWrapper.java | 37 +
.../BOINC/src/edu/berkeley/boinc/rpc/Message.aidl | 21 +
.../BOINC/src/edu/berkeley/boinc/rpc/Message.java | 39 +-
.../BOINC/src/edu/berkeley/boinc/rpc/Notice.aidl | 21 +
.../BOINC/src/edu/berkeley/boinc/rpc/Notice.java | 56 +-
.../src/edu/berkeley/boinc/rpc/PlatformInfo.java | 35 +-
.../BOINC/src/edu/berkeley/boinc/rpc/Project.aidl | 21 +
.../BOINC/src/edu/berkeley/boinc/rpc/Project.java | 136 +-
.../src/edu/berkeley/boinc/rpc/ProjectConfig.aidl | 21 +
.../src/edu/berkeley/boinc/rpc/ProjectConfig.java | 80 +-
.../boinc/rpc/ProjectConfigReplyParser.java | 8 +-
.../src/edu/berkeley/boinc/rpc/ProjectInfo.aidl | 21 +
.../src/edu/berkeley/boinc/rpc/ProjectInfo.java | 51 +-
.../edu/berkeley/boinc/rpc/ProjectInfoParser.java | 4 +-
.../BOINC/src/edu/berkeley/boinc/rpc/Result.aidl | 21 +
.../BOINC/src/edu/berkeley/boinc/rpc/Result.java | 130 +-
.../src/edu/berkeley/boinc/rpc/RpcClient.java | 54 +-
.../edu/berkeley/boinc/rpc/TimePreferences.java | 91 +-
.../BOINC/src/edu/berkeley/boinc/rpc/Transfer.aidl | 21 +
.../BOINC/src/edu/berkeley/boinc/rpc/Transfer.java | 58 +-
.../BOINC/src/edu/berkeley/boinc/rpc/Workunit.java | 47 +-
.../src/edu/berkeley/boinc/util/SystemUiHider.java | 178 +
.../edu/berkeley/boinc/util/SystemUiHiderBase.java | 62 +
.../boinc/util/SystemUiHiderHoneycomb.java | 133 +
.../src/edu/berkeley/boinc/utils/BOINCErrors.java | 5 +
.../src/edu/berkeley/boinc/utils/BOINCUtils.java | 20 +-
android/build_libraries_arm.sh | 4 +-
android/build_libraries_mips.sh | 4 +-
android/build_libraries_x86.sh | 12 +-
android/build_wrapper_arm.sh | 60 +
android/build_wrapper_mips.sh | 60 +
android/build_wrapper_x86.sh | 60 +
api/Makefile.am | 15 +-
api/boinc_api.cpp | 50 +-
api/boinc_api_fortran.cpp | 11 +-
api/boinc_opencl.cpp | 23 +-
api/graphics2.cpp | 3 +
api/graphics2_util.cpp | 6 +-
api/ttfont.cpp | 39 +-
api/ttfont.h | 54 +-
build_pos | 37 +
client/Makefile.am | 43 +-
client/acct_mgr.cpp | 22 +-
client/acct_setup.cpp | 2 +-
client/app.cpp | 92 +-
client/app.h | 32 +-
client/app_config.cpp | 12 +-
client/app_config.h | 1 +
client/app_control.cpp | 139 +-
client/app_start.cpp | 115 +-
client/async_file.cpp | 2 +-
client/boinc.xml | 7 -
client/boinc_cmd.cpp | 45 +-
client/build_po | 2 +-
client/check_security.cpp | 14 -
client/client_msgs.cpp | 15 +-
client/client_msgs.h | 2 +-
client/client_state.cpp | 59 +-
client/client_state.h | 17 +-
client/client_types.cpp | 3 +-
client/client_types.h | 5 +
client/coproc_sched.cpp | 460 +
client/coproc_sched.h | 22 +
client/cpp.h | 2 +-
client/cpu_sched.cpp | 504 +-
client/cs_account.cpp | 27 +-
client/cs_apps.cpp | 4 +
client/cs_benchmark.cpp | 38 +-
client/cs_cmdline.cpp | 34 +-
client/cs_files.cpp | 12 +-
client/cs_notice.cpp | 46 +-
client/cs_notice.h | 11 +-
client/cs_platforms.cpp | 12 +-
client/cs_prefs.cpp | 23 +-
client/cs_scheduler.cpp | 47 +-
client/cs_statefile.cpp | 15 +-
client/current_version.cpp | 10 +-
client/file_xfer.cpp | 10 +
client/gpu_amd.cpp | 36 +-
client/gpu_detect.cpp | 43 +-
client/gpu_nvidia.cpp | 109 +-
client/gpu_opencl.cpp | 2 +
client/gui_rpc_server.cpp | 71 +-
client/gui_rpc_server.h | 3 +-
client/gui_rpc_server_ops.cpp | 30 +-
client/hostinfo_network.cpp | 11 +-
client/hostinfo_network.h | 19 -
client/hostinfo_unix.cpp | 196 +-
client/hostinfo_win.cpp | 369 +-
client/http_curl.cpp | 43 +-
client/http_curl.h | 2 +-
client/log_flags.cpp | 50 +-
client/log_flags.h | 2 +-
client/mac_address.cpp | 62 +-
client/mac_address.h | 2 +-
client/main.cpp | 13 +-
client/makefile_sim | 1 +
client/net_stats.cpp | 6 +-
client/net_stats.h | 2 -
client/pers_file_xfer.cpp | 6 +-
client/project.cpp | 59 +-
client/project.h | 11 +-
client/result.cpp | 48 +-
client/result.h | 5 +
client/rr_sim.cpp | 6 +-
client/scheduler_op.cpp | 11 +-
client/sim_util.cpp | 1 -
client/sysmon_win.cpp | 74 +-
client/sysmon_win.h | 66 +-
client/thread.cpp | 4 +
client/whetstone.h | 20 -
client/work_fetch.cpp | 185 +-
client/work_fetch.h | 46 +-
clientctrl/boincsvcctrl.xml | 11 -
clientgui/AccountInfoPage.cpp | 4 +-
clientgui/AccountManagerInfoPage.cpp | 119 +-
clientgui/AccountManagerInfoPage.h | 50 +-
clientgui/AccountManagerProcessingPage.cpp | 8 +-
clientgui/AccountManagerPropertiesPage.cpp | 6 +-
clientgui/AdvancedFrame.cpp | 132 +-
clientgui/AdvancedFrame.h | 6 +-
clientgui/AsyncRPC.cpp | 240 +-
clientgui/AsyncRPC.h | 10 +-
clientgui/BOINCBaseFrame.cpp | 35 +-
clientgui/BOINCBaseFrame.h | 5 +-
clientgui/BOINCBaseView.cpp | 599 +-
clientgui/BOINCBaseView.h | 41 +-
clientgui/BOINCBaseWizard.cpp | 1 +
clientgui/BOINCBitmapComboBox.cpp | 122 -
clientgui/BOINCBitmapComboBox.h | 66 -
clientgui/BOINCClientManager.cpp | 36 +-
clientgui/BOINCGUIApp.cpp | 466 +-
clientgui/BOINCGUIApp.h | 46 +-
clientgui/BOINCGUIApp.rc | 19 +-
clientgui/BOINCHtmlLBox.cpp | 89 -
clientgui/BOINCHtmlLBox.h | 83 -
clientgui/BOINCInternetFSHandler.cpp | 675 --
clientgui/BOINCInternetFSHandler.h | 48 -
clientgui/BOINCListCtrl.cpp | 66 +-
clientgui/BOINCListCtrl.h | 25 +-
clientgui/BOINCTaskBar.cpp | 104 +-
clientgui/BOINCTaskBar.h | 26 +-
clientgui/BOINCTaskCtrl.cpp | 76 +-
clientgui/BOINCTaskCtrl.h | 8 +
clientgui/CompletionPage.cpp | 2 +-
clientgui/DlgAbout.cpp | 2 +-
clientgui/DlgAdvPreferences.cpp | 118 +-
clientgui/DlgAdvPreferences.h | 2 +-
clientgui/DlgAdvPreferencesBase.cpp | 208 +-
clientgui/DlgDiagnosticLogFlags.cpp | 271 +
clientgui/DlgDiagnosticLogFlags.h | 73 +
clientgui/DlgEventLog.cpp | 41 +-
clientgui/DlgEventLog.h | 6 +
clientgui/DlgEventLogListCtrl.cpp | 10 +-
clientgui/DlgEventLogListCtrl.h | 12 +-
clientgui/DlgExitMessage.cpp | 2 +-
clientgui/DlgGenericMessage.cpp | 6 +-
clientgui/DlgItemProperties.cpp | 23 +-
clientgui/DlgOptions.cpp | 87 +-
clientgui/DlgSelectComputer.cpp | 21 +-
clientgui/DlgSelectComputer.h | 6 +
clientgui/Events.h | 11 +
clientgui/LogBOINC.cpp | 8 +-
clientgui/LogBOINC.h | 2 +-
clientgui/MainDocument.cpp | 74 +-
clientgui/Makefile.am | 31 +-
clientgui/NoticeListCtrl.cpp | 586 +-
clientgui/NoticeListCtrl.h | 143 +-
clientgui/ProjectInfoPage.cpp | 28 +-
clientgui/ProjectListCtrl.cpp | 604 --
clientgui/ProjectListCtrl.h | 237 -
clientgui/ProjectProcessingPage.cpp | 32 +-
clientgui/ProjectPropertiesPage.cpp | 9 +-
clientgui/SkinManager.cpp | 69 +-
clientgui/SkinManager.h | 2 +-
clientgui/TermsOfUsePage.cpp | 2 +-
clientgui/ValidateURL.cpp | 2 +-
clientgui/ViewMessages.cpp | 2 +-
clientgui/ViewNotices.cpp | 118 +-
clientgui/ViewNotices.h | 11 +-
clientgui/ViewProjects.cpp | 2 +-
clientgui/ViewStatistics.cpp | 48 +-
clientgui/ViewStatistics.h | 15 +-
clientgui/ViewTransfers.cpp | 2 +-
clientgui/ViewWork.cpp | 18 +-
clientgui/WelcomePage.cpp | 4 +-
clientgui/WizardAttach.cpp | 32 +-
clientgui/WizardAttach.h | 1 +
clientgui/browser.cpp | 18 +-
clientgui/build_po | 3 +-
clientgui/common/wxFNBDropTarget.h | 86 -
clientgui/common/wxFlatNotebook.cpp | 2295 -----
clientgui/common/wxFlatNotebook.h | 875 --
clientgui/common/wxFlatNotebookImages.h | 466 -
clientgui/common/wxPieCtrl.cpp | 4 +
clientgui/common/wxPieCtrl.h | 5 +-
clientgui/gtk/taskbarex.cpp | 4 +-
clientgui/gtk/taskbarex.h | 4 +-
clientgui/msw/taskbarex.cpp | 12 +-
clientgui/msw/taskbarex.h | 4 +-
.../icons/Design Template/Design Notes.txt | 2 +-
clientgui/resource.h | 3 +-
clientgui/sg_BoincSimpleFrame.cpp | 187 +-
clientgui/sg_BoincSimpleFrame.h | 17 +-
clientgui/sg_BoincSimpleGUI.cpp | 712 --
clientgui/sg_BoincSimpleGUI.h | 150 -
clientgui/sg_ClientStateIndicator.cpp | 328 -
clientgui/sg_ClientStateIndicator.h | 76 -
clientgui/sg_CustomControls.cpp | 20 +-
clientgui/sg_CustomControls.h | 8 +-
clientgui/sg_DlgMessages.cpp | 160 +-
clientgui/sg_DlgMessages.h | 15 +-
clientgui/sg_DlgPreferences.cpp | 80 +-
clientgui/sg_ImageButton.cpp | 144 -
clientgui/sg_ImageButton.h | 59 -
clientgui/sg_ImageLoader.cpp | 64 -
clientgui/sg_ImageLoader.h | 41 -
clientgui/sg_PanelBase.cpp | 2 +
clientgui/sg_PanelBase.h | 12 +-
clientgui/sg_ProgressBar.cpp | 118 -
clientgui/sg_ProgressBar.h | 52 -
clientgui/sg_ProjectCommandPopup.cpp | 21 +-
clientgui/sg_ProjectCommandPopup.h | 4 +-
clientgui/sg_ProjectPanel.cpp | 10 +-
clientgui/sg_ProjectPanel.h | 2 +
clientgui/sg_ProjectWebSitesPopup.cpp | 20 +-
clientgui/sg_ProjectWebSitesPopup.h | 4 +-
clientgui/sg_ProjectsComponent.cpp | 752 --
clientgui/sg_ProjectsComponent.h | 105 -
clientgui/sg_StatImageLoader.cpp | 288 -
clientgui/sg_StatImageLoader.h | 58 -
clientgui/sg_TaskCommandPopup.cpp | 22 +-
clientgui/sg_TaskCommandPopup.h | 4 +-
clientgui/sg_TaskPanel.cpp | 116 +-
clientgui/sg_TaskPanel.h | 8 +-
clientgui/sg_ViewTabPage.cpp | 847 --
clientgui/sg_ViewTabPage.h | 161 -
clientgui/skins/Charity Engine/skin.xml | 12 +-
clientgui/skins/GridRepublic/skin.xml | 10 +-
clientgui/skins/ProgressThruProcessors/skin.xml | 12 +-
clientgui/stdwx.h | 16 +-
clientgui/wizardex.cpp | 4 +-
clientgui/wizardex.h | 8 +-
clientscr/Mac_Saver_ModuleView.m | 77 +-
clientscr/mac_saver_module.cpp | 27 +-
clientscr/screensaver.cpp | 24 +-
clientscr/screensaver_win.cpp | 16 +-
clientscr/ss_app.cpp | 16 +-
clienttray/tray_win.cpp | 4 +-
configure.ac | 164 +-
db/Makefile.am | 4 +-
db/boinc_db.cpp | 97 +-
db/boinc_db.h | 4 +
db/boinc_db_types.h | 44 +-
db/constraints.sql | 6 +
db/db_base.cpp | 8 +-
db/db_base.h | 2 +-
db/schema.sql | 50 +-
db/schema_condor.sql | 10 +
dcapi/.gitattributes | 25 +
dcapi/COPYING | 119 +
dcapi/INSTALL | 234 +
dcapi/Makefile.am | 25 +
dcapi/README-MinGW32 | 71 +
dcapi/_autosetup.sh | 4 +
dcapi/boinc/Makefile.am | 39 +
dcapi/boinc/client.C | 712 ++
dcapi/boinc/common_defs.h | 40 +
dcapi/boinc/config.C | 80 +
dcapi/boinc/db.C | 224 +
dcapi/boinc/dc.c | 348 +
dcapi/boinc/dc_boinc.h | 219 +
dcapi/boinc/dcapi-boinc-client.pc.in | 11 +
dcapi/boinc/dcapi-boinc-master.pc.in | 12 +
dcapi/boinc/events.C | 453 +
dcapi/boinc/local.conf | 21 +
dcapi/boinc/result.c | 248 +
dcapi/boinc/wu.C | 2016 ++++
dcapi/cf/boinc.m4 | 108 +
dcapi/cf/java.m4 | 96 +
dcapi/common/Makefile.am | 29 +
dcapi/common/cfg-client.c | 189 +
dcapi/common/cfg-master.c | 312 +
dcapi/common/logger.c | 175 +
dcapi/common/master.sym | 42 +
dcapi/common/util.c | 217 +
dcapi/condor/Makefile.am | 60 +
dcapi/condor/condor_common.c | 111 +
dcapi/condor/condor_common.h | 73 +
dcapi/condor/condor_defs.h | 126 +
dcapi/condor/condor_event.c | 85 +
dcapi/condor/condor_event.h | 37 +
dcapi/condor/condor_log.cc | 279 +
dcapi/condor/condor_log.h | 35 +
dcapi/condor/condor_managewu.c | 240 +
dcapi/condor/condor_master.c | 1356 +++
dcapi/condor/condor_master.h | 37 +
dcapi/condor/condor_result.c | 36 +
dcapi/condor/condor_result.h | 33 +
dcapi/condor/condor_slave.c | 365 +
dcapi/condor/condor_slave.h | 31 +
dcapi/condor/condor_utils.c | 474 +
dcapi/condor/condor_utils.h | 54 +
dcapi/condor/condor_wu.c | 628 ++
dcapi/condor/condor_wu.h | 59 +
dcapi/condor/dcapi-condor-client.pc.in | 11 +
dcapi/condor/dcapi-condor-master.pc.in | 11 +
dcapi/condor/ls_lR.sh | 2 +
dcapi/condor/t.conf | 40 +
dcapi/condor/tc.c | 58 +
dcapi/condor/tc.h | 18 +
dcapi/condor/test_input.txt | 2 +
dcapi/condor/tm.c | 355 +
dcapi/condor/tmpl.txt | 16 +
dcapi/condor/ts.c | 165 +
dcapi/condor/tss.c | 163 +
dcapi/configure.ac | 154 +
dcapi/dcapi-deploy | 166 +
dcapi/dcapi.m4 | 109 +
dcapi/doc/Makefile.am | 106 +
dcapi/doc/boinc.xml | 728 ++
dcapi/doc/concepts.xml | 202 +
dcapi/doc/condor.xml | 440 +
dcapi/doc/config.xml | 267 +
dcapi/doc/customize.xsl | 7 +
dcapi/doc/dc-api-docs.xml | 32 +
dcapi/doc/dc-api-overrides.txt | 0
dcapi/doc/dc-api-sections.txt | 108 +
dcapi/doc/intro.xml | 45 +
dcapi/doc/local.xml | 188 +
dcapi/doc/states.fig | 108 +
dcapi/doc/tmpl/dc-unused.sgml | 0
dcapi/doc/tmpl/dc.sgml | 608 ++
dcapi/doc/tmpl/dc_client.sgml | 238 +
dcapi/doc/tmpl/dc_common.sgml | 207 +
dcapi/doc/using.xml | 48 +
dcapi/doc/windows.xml | 233 +
dcapi/examples/message-example/Makefile.am | 45 +
dcapi/examples/message-example/client.c | 155 +
dcapi/examples/message-example/common.h | 12 +
dcapi/examples/message-example/configure.ac | 35 +
dcapi/examples/message-example/dc-api.conf | 39 +
dcapi/examples/message-example/input.txt | 5 +
dcapi/examples/message-example/master.c | 184 +
.../message-example/message-example-client.xml.in | 27 +
.../message-example/message-example-master.xml.in | 41 +
dcapi/examples/serialize-example/Makefile.am | 45 +
dcapi/examples/serialize-example/client.c | 130 +
dcapi/examples/serialize-example/common.h | 12 +
dcapi/examples/serialize-example/configure.ac | 35 +
dcapi/examples/serialize-example/dc-api.conf | 39 +
dcapi/examples/serialize-example/input.txt | 1 +
dcapi/examples/serialize-example/master.c | 216 +
.../serialize-example-client.xml.in | 27 +
.../serialize-example-master.xml.in | 41 +
dcapi/examples/uppercase-with-callback/Makefile.am | 45 +
dcapi/examples/uppercase-with-callback/client.c | 258 +
dcapi/examples/uppercase-with-callback/common.h | 12 +
.../examples/uppercase-with-callback/configure.ac | 35 +
dcapi/examples/uppercase-with-callback/dc-api.conf | 39 +
dcapi/examples/uppercase-with-callback/input.txt | 233 +
dcapi/examples/uppercase-with-callback/master.c | 283 +
.../uppercase-example-client.xml.in | 27 +
.../uppercase-example-master.xml.in | 41 +
dcapi/gtk-doc.make | 173 +
dcapi/include/Makefile.am | 2 +
dcapi/include/dc.h | 217 +
dcapi/include/dc_client.h | 96 +
dcapi/include/dc_common.h | 148 +
dcapi/include/dc_internal.h | 82 +
dcapi/include/dc_win32.h | 40 +
dcapi/java/Makefile.am | 181 +
dcapi/java/client.c | 483 +
dcapi/java/example/boinc-java-launcher | 17 +
dcapi/java/example/compile | 5 +
dcapi/java/example/manifest | 1 +
dcapi/java/example/uppercase.java | 157 +
dcapi/java/hu/sztaki/lpds/dc/DCException.java | 45 +
dcapi/java/hu/sztaki/lpds/dc/FileMode.java | 29 +
dcapi/java/hu/sztaki/lpds/dc/FileType.java | 29 +
.../java/hu/sztaki/lpds/dc/RuntimeDCException.java | 42 +
dcapi/java/hu/sztaki/lpds/dc/client/DCClient.java | 43 +
dcapi/java/hu/sztaki/lpds/dc/client/Event.java | 37 +
.../java/hu/sztaki/lpds/dc/client/Version.java.in | 30 +
dcapi/java/hu/sztaki/lpds/dc/client/package.html | 6 +
dcapi/java/hu/sztaki/lpds/dc/overview.html | 23 +
dcapi/java/hu/sztaki/lpds/dc/package.html | 6 +
dcapi/java/jre-boinc/jre_for_boinc_guide.txt | 41 +
dcapi/java/util.c | 350 +
dcapi/java/util.h | 155 +
dcapi/local/Makefile.am | 38 +
dcapi/local/dcapi-local-client.pc.in | 11 +
dcapi/local/dcapi-local-master.pc.in | 11 +
dcapi/local/local_client.c | 373 +
dcapi/local/local_common.c | 62 +
dcapi/local/local_common.h | 119 +
dcapi/local/local_events.c | 532 +
dcapi/local/local_master.c | 845 ++
dcapi/local/local_master.h | 147 +
dcapi/local/local_result.c | 217 +
dcapi/local/local_result.h | 33 +
dcapi/local/local_utils.c | 479 +
dcapi/local/local_utils.h | 52 +
dcapi/local/local_wu.c | 45 +
dcapi/local/local_wu.h | 33 +
dcapi/python/DCAPI/BOINC_Backend.py | 27 +
dcapi/python/DCAPI/Condor_Backend.py | 19 +
dcapi/python/DCAPI/DCAPI_Backend.py | 17 +
dcapi/python/DCAPI/__init__.py | 3 +
dcapi/python/DCAPI/local_Backend.py | 16 +
dcapi/tmp/dc_client_fortran.c | 251 +
doc/addon_data.php | 12 +-
doc/boinc_news.php | 2 +-
doc/build_po.php | 6 +-
doc/download.php | 84 +-
doc/download_all.php | 33 +-
doc/get_platforms.inc | 143 +-
doc/index.php | 51 +-
doc/links.php | 11 +
doc/logo.php | 4 +
doc/poll_my_result.php.old | 26 -
doc/project_list.php | 18 +-
doc/projects.inc | 321 +-
doc/projects.php | 16 +-
doc/set_language.php | 11 +
doc/update_translations.php | 4 +-
doc/versions.inc | 249 +-
doc/white.css | 26 +-
html/inc/boinc_db.inc | 145 +-
html/inc/bossa_db.inc | 23 +-
html/inc/cache.inc | 16 -
html/inc/common_defs.inc | 30 +
html/inc/db.inc | 31 +-
html/inc/db_conn.inc | 177 +-
html/inc/db_ops.inc | 68 +-
html/inc/email.inc | 22 +-
html/inc/forum.inc | 69 +-
html/inc/forum_db.inc | 41 +-
html/inc/forum_rss.inc | 32 +-
html/inc/host.inc | 27 +-
html/inc/language_names.inc | 111 +-
html/inc/news.inc | 8 +-
html/inc/prefs.inc | 38 +-
html/inc/profile.inc | 7 +-
html/inc/recaptchalib.php | 2 +-
html/inc/result.inc | 180 +-
html/inc/sandbox.inc | 23 +-
html/inc/submit.inc | 29 +-
html/inc/submit_db.inc | 6 +
html/inc/submit_util.inc | 12 +-
html/inc/team.inc | 29 +-
html/inc/translation.inc | 55 +-
html/inc/uotd.inc | 16 +-
html/inc/user.inc | 34 +-
html/inc/util.inc | 92 +-
html/inc/util_basic.inc | 14 +-
html/inc/util_ops.inc | 181 +-
html/inc/web_rpc_api.inc | 85 +
html/inc/xml.inc | 5 +-
html/languages/translations/ca.po | 262 +-
html/languages/translations/cs.po | 256 +-
html/languages/translations/de.po | 262 +-
html/languages/translations/es.po | 256 +-
html/languages/translations/fi.po | 264 +-
html/languages/translations/fr.po | 436 +-
html/languages/translations/hu.po | 339 +-
html/languages/translations/it.po | 717 +-
html/languages/translations/ja.po | 256 +-
html/languages/translations/lt.po | 295 +-
html/languages/translations/nl.po | 260 +-
html/languages/translations/pl.po | 256 +-
html/languages/translations/sl.po | 256 +-
html/languages/translations/tr.po | 260 +-
html/languages/translations/zh_CN.po | 299 +-
html/ops/app_select_edit.php | 148 +
html/ops/assign.php | 2 +-
html/ops/badge_admin.php | 143 +
html/ops/badge_assign.php | 101 +
html/ops/build_po_boinc.php | 4 +-
html/ops/cancel_wu_action.php | 24 +-
html/ops/cancel_wu_form.php | 29 +-
html/ops/cancel_wus.php | 2 +-
html/ops/create_forums.php | 18 +-
html/ops/credit_study.php | 2 +-
html/ops/db_update.php | 87 +
html/ops/delete_job_files | 0
html/ops/delete_spammers.php | 116 +
html/ops/expire_batches | 2 +-
html/ops/failure_result_summary_by_host.php | 6 +-
html/ops/failure_result_summary_by_platform.php | 9 +-
html/ops/forum_repair.php | 9 +-
html/ops/index.php | 71 +-
html/ops/list_new_users.php | 2 +-
html/ops/login_action.php | 4 +-
html/ops/logout.php | 2 +
html/ops/main.css | 435 +
html/ops/manage_app_versions.php | 4 +-
html/ops/manage_apps.php | 21 +-
html/ops/manage_special_users.php | 2 +-
html/ops/manage_user.php | 420 +-
html/ops/mass_email.php | 18 +-
html/ops/mass_email_script.php | 2 +-
html/ops/problem_host.php | 24 +-
html/ops/remind.php | 2 +-
html/ops/remove_zombie_hosts.php | 42 +
html/ops/size_census.php | 31 +-
html/ops/team_export.php | 13 +-
html/ops/team_import.php | 20 +-
html/ops/update_translations.php | 8 +-
html/project.sample/project.inc | 27 +
html/user/account_finish.php | 2 +-
html/user/add_venue.php | 4 -
html/user/am_get_info.php | 8 +-
html/user/am_set_host_info.php | 4 +-
html/user/am_set_info.php | 12 +-
html/user/apps.php | 12 +-
html/user/cert_team.php | 4 +-
html/user/cpu_list.php | 122 +
html/user/create_account.php | 21 +-
html/user/create_account_action.php | 31 +-
html/user/create_account_form.php | 33 +-
html/user/create_profile.php | 2 +
html/user/create_team.php | 8 +-
html/user/delete_profile.php | 2 +
html/user/edit_email_action.php | 4 +-
html/user/edit_email_form.php | 2 -
html/user/edit_forum_preferences_action.php | 13 +-
html/user/edit_forum_preferences_form.php | 2 +
html/user/edit_passwd_action.php | 4 +-
html/user/edit_passwd_form.php | 3 -
html/user/edit_user_info_form.php | 2 -
html/user/ffmail_form.php | 3 +-
html/user/forum_banishment_vote.php | 4 +-
html/user/forum_banishment_vote_action.php | 4 +-
html/user/forum_forum.php | 7 +-
html/user/forum_get_data.php | 12 +-
html/user/forum_help_desk.php | 2 +
html/user/forum_index.php | 7 +-
html/user/forum_moderate_post.php | 31 +-
html/user/forum_moderate_post_action.php | 22 +-
html/user/forum_moderate_thread.php | 30 +-
html/user/forum_moderate_thread_action.php | 16 +-
html/user/forum_post.php | 4 +
html/user/forum_rate.php | 4 +-
html/user/forum_reply.php | 5 +-
html/user/forum_report_post.php | 5 +-
html/user/forum_rss.php | 19 +-
html/user/forum_search.php | 4 +-
html/user/forum_search_action.php | 4 +-
html/user/forum_subscribe.php | 4 +-
html/user/forum_thread.php | 19 +-
html/user/forum_thread_status.php | 7 +-
html/user/forum_thread_vote.php | 4 +-
html/user/forum_user_posts.php | 6 +-
html/user/get_output.php | 4 +-
html/user/get_project_config.php | 63 +-
html/user/gpu_list.php | 14 +-
html/user/gpu_ratios.php | 8 +
html/user/host_app_versions.php | 7 +-
html/user/host_update_credit.php | 5 +-
html/user/hosts_user.php | 4 +-
html/user/img/bronze.jpg | Bin 0 -> 3998 bytes
html/user/img/bronze.png | Bin 0 -> 25286 bytes
html/user/img/gold.png | Bin 0 -> 23661 bytes
html/user/img/pct_1.png | Bin 0 -> 25621 bytes
html/user/img/pct_25.png | Bin 0 -> 27756 bytes
html/user/img/pct_5.png | Bin 0 -> 24966 bytes
html/user/img/silver.png | Bin 0 -> 23273 bytes
html/user/job_file.php | 14 +-
html/user/language_select.php | 2 +-
html/user/login_action.php | 4 +-
html/user/login_form.php | 19 +-
html/user/lookup_account.php | 5 +-
html/user/mail_passwd.php | 4 +-
html/user/manage_project.php | 14 +-
html/user/merge_by_name.php | 2 -
html/user/notices.php | 5 +-
html/user/openid_login.php | 21 +-
html/user/opt_out.php | 4 +-
html/user/pending.php | 4 +-
html/user/pm.php | 6 +-
html/user/prefs.php | 3 -
html/user/prefs_edit.php | 2 +-
html/user/prefs_remove.php | 3 -
html/user/profile_menu.php | 13 +-
html/user/profile_rate.php | 2 +
html/user/profile_search_action.php | 6 +-
html/user/result.php | 15 +-
html/user/results.php | 7 +-
html/user/sample_index.php | 69 +-
html/user/sandbox.php | 64 +-
html/user/server_status.php | 190 +-
html/user/show_user.php | 16 +-
html/user/stats.php | 21 +-
html/user/submit.php | 63 +-
html/user/submit_example.php | 34 +-
html/user/submit_rpc_handler.php | 161 +-
html/user/team.php | 4 +-
html/user/team_admins.php | 4 +-
html/user/team_change_founder_action.php | 4 +-
html/user/team_change_founder_form.php | 10 +-
html/user/team_create_action.php | 4 +-
html/user/team_create_form.php | 4 +-
html/user/team_delta.php | 5 +-
html/user/team_display.php | 4 +-
html/user/team_edit_action.php | 4 +-
html/user/team_edit_form.php | 4 +-
html/user/team_email_list.php | 21 +-
html/user/team_forum.php | 4 +-
html/user/team_founder_transfer_action.php | 6 +-
html/user/team_founder_transfer_form.php | 4 +-
html/user/team_join.php | 4 +-
html/user/team_join_action.php | 4 +-
html/user/team_join_form.php | 6 +-
html/user/team_lookup.php | 6 +-
html/user/team_manage.php | 4 +-
html/user/team_members.php | 6 +-
html/user/team_quit_action.php | 6 +-
html/user/team_quit_form.php | 6 +-
html/user/team_remove_inactive_action.php | 4 +-
html/user/team_remove_inactive_form.php | 4 +-
html/user/team_search.php | 17 +-
html/user/top_teams.php | 4 +-
html/user/uotd.php | 6 +-
html/user/validate_email_addr.php | 4 +-
html/user/view_profile.php | 2 +
html/user/white.css | 8 +-
lib/Makefile.am | 51 +-
lib/Makefile.mingw | 2 +
lib/boinc_win.h | 102 +-
lib/cc_config.cpp | 46 +-
lib/cc_config.h | 5 +-
lib/cl_boinc.h | 2 +
lib/common_defs.h | 18 +-
lib/coproc.cpp | 14 +-
lib/coproc.h | 3 +
lib/diagnostics.cpp | 60 +-
lib/diagnostics.h | 6 +-
lib/diagnostics_win.cpp | 448 +-
lib/diagnostics_win.h | 97 +-
lib/error_numbers.h | 2 +
lib/gui_rpc_client.cpp | 29 +-
lib/gui_rpc_client.h | 12 +-
lib/gui_rpc_client_ops.cpp | 36 +-
lib/gui_rpc_client_print.cpp | 17 +-
lib/hostinfo.cpp | 18 +-
lib/hostinfo.h | 4 +-
lib/md5_file.cpp | 16 +-
lib/md5_file.h | 5 +-
lib/miofile.cpp | 3 -
lib/network.cpp | 6 +-
lib/network.h | 6 +-
lib/proc_control.cpp | 9 +-
lib/procinfo.cpp | 54 +-
lib/procinfo_mac.cpp | 2 +-
lib/procinfo_unix.cpp | 11 +-
lib/procinfo_win.cpp | 2 +-
lib/remote_submit.cpp | 334 +-
lib/remote_submit.h | 115 +-
lib/run_app_windows.cpp | 26 +-
lib/stackwalker_win.cpp | 35 +-
lib/str_util.cpp | 24 +
lib/str_util.h | 6 +
lib/util.cpp | 23 +-
lib/util.h | 18 +-
lib/win_util.cpp | 311 +-
lib/win_util.h | 4 -
locale/Makefile.am | 2 +-
locale/bg/BOINC-Manager.mo | Bin 97482 -> 96737 bytes
locale/bg/BOINC-Manager.po | 942 +-
locale/bg/BOINC-Project-Generic.po | 256 +-
locale/bg/BOINC-Setup.mo | Bin 3602 -> 3602 bytes
locale/bg/BOINC-Setup.po | 34 +-
locale/bg/BOINC-Web.mo | Bin 45689 -> 45590 bytes
locale/bg/BOINC-Web.po | 213 +-
locale/ca/BOINC-Android.po | 9 +-
locale/ca/BOINC-Manager.mo | Bin 76248 -> 76980 bytes
locale/ca/BOINC-Manager.po | 963 +-
locale/ca/BOINC-Project-Generic.po | 262 +-
locale/ca/BOINC-Setup.mo | Bin 2803 -> 3220 bytes
locale/ca/BOINC-Setup.po | 43 +-
locale/ca/BOINC-Web.mo | Bin 35473 -> 36904 bytes
locale/ca/BOINC-Web.po | 236 +-
locale/cs/BOINC-Android.po | 529 +-
locale/cs/BOINC-Manager.mo | Bin 74649 -> 74099 bytes
locale/cs/BOINC-Manager.po | 942 +-
locale/cs/BOINC-Project-Generic.po | 256 +-
locale/cs/BOINC-Setup.mo | Bin 2842 -> 2842 bytes
locale/cs/BOINC-Setup.po | 34 +-
locale/cs/BOINC-Web.mo | Bin 34154 -> 34076 bytes
locale/cs/BOINC-Web.po | 213 +-
locale/da/BOINC-Android.po | 11 +-
locale/de/BOINC-Android.po | 14 +-
locale/de/BOINC-Manager.mo | Bin 77511 -> 77645 bytes
locale/de/BOINC-Manager.po | 946 +-
locale/de/BOINC-Project-Generic.po | 262 +-
locale/de/BOINC-Setup.mo | Bin 3019 -> 3243 bytes
locale/de/BOINC-Setup.po | 40 +-
locale/de/BOINC-Web.mo | Bin 36997 -> 37187 bytes
locale/de/BOINC-Web.po | 225 +-
locale/el/BOINC-Android.po | 487 +-
locale/el/BOINC-Manager.mo | Bin 78442 -> 78271 bytes
locale/el/BOINC-Manager.po | 924 +-
locale/el/BOINC-Project-Generic.po | 256 +-
locale/el/BOINC-Setup.mo | Bin 2164 -> 2164 bytes
locale/el/BOINC-Setup.po | 34 +-
locale/el/BOINC-Web.mo | Bin 10086 -> 10086 bytes
locale/el/BOINC-Web.po | 206 +-
locale/es/BOINC-Android.po | 532 +-
locale/es/BOINC-Manager.mo | Bin 75689 -> 75134 bytes
locale/es/BOINC-Manager.po | 941 +-
locale/es/BOINC-Project-Generic.po | 256 +-
locale/es/BOINC-Setup.mo | Bin 930 -> 930 bytes
locale/es/BOINC-Setup.po | 34 +-
locale/es/BOINC-Web.mo | Bin 21366 -> 21366 bytes
locale/es/BOINC-Web.po | 215 +-
locale/fi/BOINC-Android.po | 150 +-
locale/fi/BOINC-Manager.mo | Bin 72912 -> 73083 bytes
locale/fi/BOINC-Manager.po | 955 +-
locale/fi/BOINC-Project-Generic.po | 264 +-
locale/fi/BOINC-Setup.mo | Bin 2886 -> 3097 bytes
locale/fi/BOINC-Setup.po | 40 +-
locale/fi/BOINC-Web.mo | Bin 33750 -> 34795 bytes
locale/fi/BOINC-Web.po | 224 +-
locale/fr/BOINC-Android.po | 573 +-
locale/fr/BOINC-Manager.mo | Bin 77203 -> 78489 bytes
locale/fr/BOINC-Manager.po | 1039 +-
locale/fr/BOINC-Project-Generic.po | 436 +-
locale/fr/BOINC-Setup.mo | Bin 554 -> 3355 bytes
locale/fr/BOINC-Setup.po | 88 +-
locale/fr/BOINC-Web.mo | Bin 30100 -> 38148 bytes
locale/fr/BOINC-Web.po | 355 +-
locale/he/BOINC-Android.po | 3 +-
locale/he/BOINC-Manager.mo | Bin 71163 -> 70927 bytes
locale/he/BOINC-Manager.po | 929 +-
locale/he/BOINC-Project-Generic.po | 256 +-
locale/he/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/he/BOINC-Setup.po | 34 +-
locale/he/BOINC-Web.mo | Bin 7604 -> 7604 bytes
locale/he/BOINC-Web.po | 206 +-
locale/hr/BOINC-Manager.mo | Bin 8055 -> 8055 bytes
locale/hr/BOINC-Manager.po | 916 +-
locale/hr/BOINC-Project-Generic.po | 256 +-
locale/hr/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/hr/BOINC-Setup.po | 34 +-
locale/hr/BOINC-Web.mo | Bin 643 -> 643 bytes
locale/hr/BOINC-Web.po | 206 +-
locale/hu/BOINC-Android.po | 141 +-
locale/hu/BOINC-Manager.mo | Bin 74154 -> 74176 bytes
locale/hu/BOINC-Manager.po | 967 +-
locale/hu/BOINC-Project-Generic.po | 339 +-
locale/hu/BOINC-Setup.mo | Bin 798 -> 1023 bytes
locale/hu/BOINC-Setup.po | 46 +-
locale/hu/BOINC-Web.mo | Bin 30329 -> 30238 bytes
locale/hu/BOINC-Web.po | 213 +-
locale/ja/BOINC-Android.po | 573 +-
locale/ja/BOINC-Manager.mo | Bin 73271 -> 72978 bytes
locale/ja/BOINC-Manager.po | 929 +-
locale/ja/BOINC-Project-Generic.po | 256 +-
locale/ja/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/ja/BOINC-Setup.po | 34 +-
locale/ja/BOINC-Web.mo | Bin 32818 -> 32818 bytes
locale/ja/BOINC-Web.po | 215 +-
locale/ko/BOINC-Android.po | 8 +-
locale/ko/BOINC-Manager.mo | Bin 79190 -> 79278 bytes
locale/ko/BOINC-Manager.po | 1398 +--
locale/ko/BOINC-Setup.mo | Bin 3174 -> 3224 bytes
locale/ko/BOINC-Setup.po | 84 +-
locale/ko/BOINC-Web.mo | Bin 38693 -> 38856 bytes
locale/ko/BOINC-Web.po | 818 +-
locale/lt/BOINC-Android.po | 31 +-
locale/lt/BOINC-Client.mo | Bin 4681 -> 4899 bytes
locale/lt/BOINC-Client.po | 8 +-
locale/lt/BOINC-Manager.mo | Bin 43847 -> 43767 bytes
locale/lt/BOINC-Manager.po | 921 +-
locale/lt/BOINC-Project-Generic.po | 295 +-
locale/lt/BOINC-Setup.mo | Bin 554 -> 1814 bytes
locale/lt/BOINC-Setup.po | 68 +-
locale/lt/BOINC-Web.mo | Bin 8225 -> 8225 bytes
locale/lt/BOINC-Web.po | 215 +-
locale/lv/BOINC-Android.po | 539 +-
locale/lv/BOINC-Client.mo | Bin 417 -> 4826 bytes
locale/lv/BOINC-Client.po | 73 +-
locale/lv/BOINC-Manager.mo | Bin 52960 -> 75675 bytes
locale/lv/BOINC-Manager.po | 1517 ++-
locale/lv/BOINC-Project-Generic.po | 256 +-
locale/lv/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/lv/BOINC-Setup.po | 34 +-
locale/lv/BOINC-Web.mo | Bin 643 -> 643 bytes
locale/lv/BOINC-Web.po | 206 +-
locale/ms/BOINC-Android.po | 1114 ++
locale/ms/BOINC-Client.po | 160 +
locale/ms/BOINC-Manager.po | 3706 +++++++
locale/ms/BOINC-Project-Generic.po | 6470 ++++++++++++
locale/ms/BOINC-Setup.po | 120 +
locale/ms/BOINC-Web.po | 1073 ++
locale/nb/BOINC-Manager.mo | Bin 42927 -> 42831 bytes
locale/nb/BOINC-Manager.po | 924 +-
locale/nb/BOINC-Project-Generic.po | 256 +-
locale/nb/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/nb/BOINC-Setup.po | 34 +-
locale/nb/BOINC-Web.mo | Bin 1679 -> 1679 bytes
locale/nb/BOINC-Web.po | 215 +-
locale/nl/BOINC-Android.po | 6 +-
locale/nl/BOINC-Manager.mo | Bin 74057 -> 74048 bytes
locale/nl/BOINC-Manager.po | 789 +-
locale/nl/BOINC-Project-Generic.po | 260 +-
locale/pl/BOINC-Android.po | 191 +-
locale/pl/BOINC-Manager.mo | Bin 72480 -> 71886 bytes
locale/pl/BOINC-Manager.po | 941 +-
locale/pl/BOINC-Project-Generic.po | 256 +-
locale/pl/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/pl/BOINC-Setup.po | 34 +-
locale/pl/BOINC-Web.mo | Bin 23567 -> 23567 bytes
locale/pl/BOINC-Web.po | 215 +-
locale/pt_BR/BOINC-Android.po | 551 +-
locale/pt_BR/BOINC-Manager.mo | Bin 32878 -> 32774 bytes
locale/pt_BR/BOINC-Manager.po | 926 +-
locale/pt_BR/BOINC-Project-Generic.po | 256 +-
locale/pt_BR/BOINC-Setup.mo | Bin 557 -> 557 bytes
locale/pt_BR/BOINC-Setup.po | 34 +-
locale/pt_BR/BOINC-Web.mo | Bin 615 -> 615 bytes
locale/pt_BR/BOINC-Web.po | 206 +-
locale/pt_PT/BOINC-Android.po | 223 +-
locale/pt_PT/BOINC-Manager.mo | Bin 76779 -> 76940 bytes
locale/pt_PT/BOINC-Manager.po | 1004 +-
locale/pt_PT/BOINC-Project-Generic.po | 260 +-
locale/pt_PT/BOINC-Setup.mo | Bin 3046 -> 3270 bytes
locale/pt_PT/BOINC-Setup.po | 40 +-
locale/pt_PT/BOINC-Web.mo | Bin 36805 -> 37043 bytes
locale/pt_PT/BOINC-Web.po | 217 +-
locale/ro/BOINC-Android.po | 13 +-
locale/ro/BOINC-Manager.mo | Bin 75917 -> 76073 bytes
locale/ro/BOINC-Manager.po | 948 +-
locale/ro/BOINC-Project-Generic.po | 287 +-
locale/ro/BOINC-Setup.mo | Bin 3102 -> 3344 bytes
locale/ro/BOINC-Setup.po | 40 +-
locale/ro/BOINC-Web.mo | Bin 36758 -> 36788 bytes
locale/ro/BOINC-Web.po | 215 +-
locale/ru/BOINC-Android.po | 13 +-
locale/sk/BOINC-Android.po | 542 +-
locale/sk/BOINC-Manager.mo | Bin 79974 -> 80015 bytes
locale/sk/BOINC-Manager.po | 7 +-
locale/sl/BOINC-Android.po | 57 +-
locale/sl/BOINC-Manager.mo | Bin 55289 -> 55070 bytes
locale/sl/BOINC-Manager.po | 929 +-
locale/sl/BOINC-Project-Generic.po | 256 +-
locale/sl/BOINC-Setup.mo | Bin 554 -> 554 bytes
locale/sl/BOINC-Setup.po | 34 +-
locale/sl/BOINC-Web.mo | Bin 7041 -> 7041 bytes
locale/sl/BOINC-Web.po | 206 +-
locale/templates/BOINC-Android.pot | 88 +-
locale/templates/BOINC-Client.pot | 33 +-
locale/templates/BOINC-Manager.pot | 3020 +++---
locale/templates/BOINC-Project-Generic.pot | 1533 +--
locale/templates/BOINC-Setup.pot | 56 +-
locale/templates/BOINC-Web.pot | 1063 +-
locale/tr/BOINC-Android.po | 11 +-
locale/tr/BOINC-Client.mo | Bin 4985 -> 4995 bytes
locale/tr/BOINC-Client.po | 8 +-
locale/tr/BOINC-Manager.mo | Bin 78114 -> 78251 bytes
locale/tr/BOINC-Manager.po | 958 +-
locale/tr/BOINC-Project-Generic.po | 260 +-
locale/tr/BOINC-Setup.mo | Bin 1074 -> 1074 bytes
locale/tr/BOINC-Setup.po | 34 +-
locale/tr/BOINC-Web.mo | Bin 24774 -> 24698 bytes
locale/tr/BOINC-Web.po | 211 +-
locale/uk/BOINC-Manager.mo | Bin 100901 -> 101132 bytes
locale/uk/BOINC-Manager.po | 947 +-
locale/uk/BOINC-Project-Generic.po | 262 +-
locale/uk/BOINC-Setup.mo | Bin 3792 -> 4052 bytes
locale/uk/BOINC-Setup.po | 42 +-
locale/uk/BOINC-Web.mo | Bin 48844 -> 48855 bytes
locale/uk/BOINC-Web.po | 219 +-
locale/updatetrans.sh | 65 +-
locale/zh_CN/BOINC-Android.po | 587 +-
locale/zh_CN/BOINC-Manager.mo | Bin 70046 -> 71202 bytes
locale/zh_CN/BOINC-Manager.po | 977 +-
locale/zh_CN/BOINC-Project-Generic.po | 299 +-
locale/zh_CN/BOINC-Setup.mo | Bin 2591 -> 2973 bytes
locale/zh_CN/BOINC-Setup.po | 46 +-
locale/zh_CN/BOINC-Web.mo | Bin 29526 -> 33428 bytes
locale/zh_CN/BOINC-Web.po | 253 +-
locale/zh_TW/BOINC-Android.po | 177 +-
locale/zh_TW/BOINC-Manager.mo | Bin 69705 -> 69813 bytes
locale/zh_TW/BOINC-Manager.po | 948 +-
locale/zh_TW/BOINC-Project-Generic.po | 264 +-
locale/zh_TW/BOINC-Setup.mo | Bin 2745 -> 2951 bytes
locale/zh_TW/BOINC-Setup.po | 40 +-
locale/zh_TW/BOINC-Web.mo | Bin 32711 -> 32921 bytes
locale/zh_TW/BOINC-Web.po | 217 +-
m4/ax_check_glut.m4 | 9 +-
m4/ax_pthread.m4 | 38 +
m4/ax_winsock.m4 | 2 +-
m4/boinc_platform.m4 | 7 +
m4/sah_select_bitness.m4 | 12 +-
py/Boinc/boinc_db.py | 10 +-
py/Boinc/setup_project.py | 3 +-
samples/condor/boinc_gahp.cpp | 176 +-
samples/condor/request_gen | 4 +-
samples/condor/request_gen2 | 25 +
samples/example_app/Makefile | 7 +-
samples/example_app/uc2.cpp | 49 +-
samples/example_app/uc2.h | 10 +
samples/example_app/uc2_dll.cpp | 62 +
samples/example_app/uc2_graphics.cpp | 4 +-
samples/example_app/ucn.cpp | 129 +
samples/nvcuda/cuda.cpp | 19 +-
samples/vboxmonitor/Makefile | 30 +
samples/vboxmonitor/vboxmonitor.cpp | 75 +
samples/vboxwrapper/vbox.cpp | 3173 ++++--
samples/vboxwrapper/vbox.h | 102 +-
samples/vboxwrapper/vboxwrapper.cpp | 681 +-
samples/vboxwrapper/vboxwrapper.h | 1 +
samples/wrapper/Makefile | 5 +-
samples/wrapper/Makefile_android | 18 -
samples/wrapper/build_android.sh | 26 -
samples/wrapper/job.xml | 1 -
samples/wrapper/wrapper.cpp | 94 +-
sched/Makefile.am | 16 +-
sched/credit.cpp | 37 +-
sched/credit.h | 12 +-
sched/db_purge.cpp | 8 +
sched/feeder.cpp | 9 +-
sched/file_deleter.cpp | 26 +-
sched/file_upload_handler.cpp | 9 +-
sched/get_file.cpp | 1 +
sched/handle_request.cpp | 21 +-
sched/make_work.cpp | 11 +-
sched/plan_class_spec.cpp | 19 +-
sched/plan_class_spec.h | 1 +
sched/plan_class_spec.xml.sample | 2 +-
sched/sample_bitwise_validator.cpp | 34 +-
sched/sample_substr_validator.cpp | 64 +
sched/sample_trivial_validator.cpp | 6 +-
sched/sample_work_generator.cpp | 28 +-
sched/sched_array.cpp | 6 +-
sched/sched_assign.cpp | 90 +-
sched/sched_assign.h | 4 +-
sched/sched_config.cpp | 14 +-
sched/sched_customize.cpp | 142 +-
sched/sched_files.cpp | 3 +-
sched/sched_limit.cpp | 7 +-
sched/sched_limit.h | 50 +-
sched/sched_locality.cpp | 2 +-
sched/sched_main.cpp | 4 +-
sched/sched_result.cpp | 20 +-
sched/sched_score.cpp | 316 +-
sched/sched_score.h | 42 +-
sched/sched_send.cpp | 152 +-
sched/sched_shmem.cpp | 2 +
sched/sched_timezone.cpp | 1 +
sched/sched_types.cpp | 72 +-
sched/sched_types.h | 51 +-
sched/sched_util.cpp | 44 +-
sched/sched_util.h | 6 +-
sched/sched_version.cpp | 6 +-
sched/single_job_assimilator.cpp | 2 +-
sched/target_batch.cpp | 4 +-
sched/transitioner.cpp | 5 +-
sched/trickle_deadline.cpp | 139 +
sched/trickle_handler.cpp | 9 +-
sched/validate_util.cpp | 2 -
sched/validator.cpp | 13 +-
sched/validator.h | 10 +-
sched/wu_check.cpp | 1 +
tools/Makefile.am | 15 +-
tools/backend_lib.cpp | 46 +-
tools/backend_lib.h | 31 +-
tools/compare_pot | 38 +
tools/create_work.cpp | 343 +-
tools/dir_hier_move.cpp | 2 +-
tools/dir_hier_path.cpp | 5 +-
tools/make_project | 16 +-
tools/process_input_template.cpp | 162 +-
tools/process_input_template.h | 6 +-
tools/process_result_template.cpp | 2 +-
tools/remote_submit | 15 +-
tools/remote_submit_test.cpp | 62 +
tools/stage_file | 8 +-
tools/update_versions | 5 +
xcompile/xcompile.MinGW32_on_cygwin.sh | 200 +
zip/Makefile.am | 79 +-
zip/aclocal.m4 | 948 --
zip/zip/unix/z_unix.c | 2 +-
1221 files changed, 92073 insertions(+), 65479 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 6322db1..3287187 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -13,6 +13,9 @@ if ENABLE_LIBRARIES
if ENABLE_SERVER
API_SUBDIRS += zip
endif
+if ENABLE_BOINCZIP
+ API_SUBDIRS += zip
+endif
endif
if ENABLE_SERVER
diff --git a/Makefile.incl b/Makefile.incl
index 45b3749..6c4cca6 100644
--- a/Makefile.incl
+++ b/Makefile.incl
@@ -1,6 +1,9 @@
## -*-Makefile -*-
## $Id$
+# For debugging purposes
+#AM_DEFAULT_VERBOSITY=1
+
# Note: MYSQL_CFLAGS and MYSQL_LIBS set by configure from mysql_config
# ignore any LIBS set by configure
diff --git a/android/.android2po b/android/.android2po
index 6fccd08..50febe0 100644
--- a/android/.android2po
+++ b/android/.android2po
@@ -2,7 +2,7 @@
--gettext ../locale
--groups strings
--domain BOINC-Android
---template ../locale/templates/%(domain)s.pot
+--template ./%(domain)s.pot
--layout %(locale)s/%(domain)s.po
--ignore-fuzzy
diff --git a/android/BOINC/AndroidManifest.xml b/android/BOINC/AndroidManifest.xml
index ee89c1d..e4e15a1 100644
--- a/android/BOINC/AndroidManifest.xml
+++ b/android/BOINC/AndroidManifest.xml
@@ -19,75 +19,127 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.berkeley.boinc"
-
- android:versionCode="52"
- android:versionName="7.2.41"
-
- android:installLocation="internalOnly" > <!-- installation on SD card would break boot receiver -->
+ android:installLocation="internalOnly"
+ android:versionCode="72"
+ android:versionName="7.3.19" > <!-- installation on SD card would break boot receiver -->
+
<!-- Add Google Play store metadata informing the store we can run on tablets and other large screen devices -->
<supports-screens
android:anyDensity="true"
- android:smallScreens="true"
- android:normalScreens="true"
android:largeScreens="true"
+ android:normalScreens="true"
+ android:smallScreens="true"
android:xlargeScreens="true" />
- <!-- CAUTION: increasing targetSDK to >9 removes menu button on new devices -->
+ <!-- CAUTION: increasing targetSDK to >9 removes menu button on new devices -->
<uses-sdk
android:minSdkVersion="9"
- android:targetSdkVersion="9" />
-
- <!-- Required Permissions -->
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- <uses-permission android:name="android.permission.WAKE_LOCK"/>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permission android:name="android.permission.READ_LOGS"/>
- <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
+ android:targetSdkVersion="19" />
- <application
- android:icon="@drawable/boinc"
- android:label="@string/app_name"
- android:theme="@style/Theme"
- android:allowBackup="true">
- <!-- android:largeHeap="true" , possible api level > 10. grants application larger dalvik vm heap. better performance when showing many slideshow pictures. -->
+ <!-- Required Permissions -->
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.READ_LOGS" />
+ <uses-permission android:name="android.permission.RESTART_PACKAGES" />
- <activity
- android:name="edu.berkeley.boinc.BOINCActivity"
+ <application
+ android:allowBackup="true"
+ android:debuggable="true"
+ android:icon="@drawable/boinc"
android:label="@string/app_name"
- android:launchMode="singleTop">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".AttachProjectListActivity"/>
- <activity android:name=".AttachProjectAcctMgrActivity"/>
- <activity android:name=".AttachProjectLoginActivity"
- android:configChanges="orientation"/>
- <activity android:name=".AttachProjectRegistrationActivity"/>
- <activity android:name=".AttachProjectWorkingActivity"
- android:configChanges="orientation"/>
- <activity android:name=".StatusActivity" />
- <activity android:name=".TasksActivity" />
- <activity android:name=".NoticesActivity" />
- <activity android:name=".PrefsActivity" />
- <activity android:name=".ProjectsActivity" />
- <activity android:name=".EventLogActivity" />
- <service android:name=".client.Monitor"></service>
- <receiver android:name=".receiver.BootReceiver">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED"/>
- </intent-filter>
- </receiver>
- <receiver android:name=".receiver.PackageReplacedReceiver">
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_REPLACED"/>
- <data android:scheme="package" android:path="edu.berkeley.boinc" />
- </intent-filter>
- </receiver>
+ android:theme="@style/Theme.Styled" > <!-- android:largeHeap="true" , possible api level > 10. grants application larger dalvik vm heap. better performance when showing many slideshow pictures. -->
+
+
+ <activity
+ android:name="edu.berkeley.boinc.SplashActivity"
+ android:configChanges="orientation|keyboardHidden|screenSize"
+ android:screenOrientation="portrait"
+ android:label="@string/app_name"
+ android:theme="@style/Theme.Styled.NoActionBar"
+ android:noHistory="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.BOINCActivity"
+ android:label="@string/app_name"
+ android:launchMode="singleTop"
+ android:exported="true" >
+ </activity>
+ <activity android:name="edu.berkeley.boinc.attach.AcctMgrFragment" >
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value="edu.berkeley.boinc.BOINCActivity" />
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.attach.SelectionListActivity"
+ android:theme="@style/Theme.Styled.NoActionBar"
+ android:screenOrientation="portrait" >
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.attach.CredentialInputActivity"
+ android:theme="@style/Theme.Styled.NoActionBar"
+ android:screenOrientation="portrait"
+ android:windowSoftInputMode="adjustPan" >
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.attach.BatchProcessingActivity"
+ android:theme="@style/Theme.Styled.NoActionBar"
+ android:screenOrientation="portrait" >
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.attach.BatchConflictListActivity"
+ android:theme="@style/Theme.Styled.NoActionBar"
+ android:screenOrientation="portrait" >
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.attach.IndividualAttachActivity"
+ android:theme="@style/Theme.Styled.NoActionBar"
+ android:screenOrientation="portrait" >
+ </activity>
+ <activity android:name="edu.berkeley.boinc.attach.AttachProjectRegistrationActivity" >
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value="edu.berkeley.boinc.AttachProjectListActivity" />
+ </activity>
+ <activity
+ android:name="edu.berkeley.boinc.attach.AttachProjectWorkingActivity"
+ android:configChanges="orientation"
+ android:noHistory="true" />
+ <activity android:name="edu.berkeley.boinc.EventLogActivity" >
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value="edu.berkeley.boinc.BOINCActivity" />
+ </activity>
+
+ <service android:name="edu.berkeley.boinc.client.Monitor" android:process=":remote">
+ </service>
+ <service android:name="edu.berkeley.boinc.attach.ProjectAttachService">
+ </service>
- </application>
+ <receiver android:name="edu.berkeley.boinc.receiver.BootReceiver" >
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
+ </intent-filter>
+ </receiver>
+ <receiver android:name="edu.berkeley.boinc.receiver.PowerConnectedReceiver" >
+ <intent-filter>
+ <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
+ </intent-filter>
+ </receiver>
+ <receiver android:name="edu.berkeley.boinc.receiver.PackageReplacedReceiver" >
+ <intent-filter>
+ <action android:name="android.intent.action.PACKAGE_REPLACED" />
+ <data android:path="edu.berkeley.boinc" android:scheme="package" />
+ </intent-filter>
+ </receiver>
+ <activity android:name=".ForwardDialog" android:theme="@android:style/Theme.Dialog">
+ </activity>
+ </application>
</manifest>
diff --git a/android/BOINC/assets/all_projects_list.xml b/android/BOINC/assets/all_projects_list.xml
index 49c1a42..546e3e4 100644
--- a/android/BOINC/assets/all_projects_list.xml
+++ b/android/BOINC/assets/all_projects_list.xml
@@ -11,250 +11,348 @@
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>x86_64-apple-darwin</name>
+ <name>windows_intelx86[sse2]</name>
+ <name>x86_64-apple-darwin[sse2]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[sse2]</name>
</platforms>
<image>http://boinc.berkeley.edu/images/mmlogo.gif</image>
</project>
<project>
- <name>FreeHAL</name>
- <url>http://www.freehal.net/freehal_at_home/</url>
- <general_area>Cognitive science and artifical intelligence</general_area>
- <specific_area>Artificial intelligence</specific_area>
- <description><![CDATA[Parse and convert semantic nets for use in FreeHAL, an artificial intelligence that uses semantic networks, stemmers, part of speech databases, and part of speech taggers in order to imitate human behavior in conversations.]]></description>
- <home>Private</home>
+ <name>SubsetSum at Home</name>
+ <url>http://volunteer.cs.und.edu/subset_sum/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Computer Science</specific_area>
+ <description><![CDATA[Research in computational complexity]]></description>
+ <home>University of North Dakota, Computer Science Department</home>
<platforms>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
+ <name>x86_64-apple-darwin</name>
+ <name>x86_64-pc-linux-gnu</name>
</platforms>
+ <image>http://boinc.berkeley.edu/images/</image>
</project>
<project>
- <name>eOn</name>
- <url>http://eon.ices.utexas.edu/eon2/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Chemistry</specific_area>
- <description><![CDATA[A common problem in theoretical chemistry, condensed matter physics and materials science is the calculation of the time evolution of an atomic scale system where, for example, chemical reactions and/or diffusion occur. Generally the events of interest are quite rare (many orders of magnitude slower than the vibrational movements of the atoms), and therefore direct simulations, tracking every movement of the atoms, would take thousands of years of computer c [...]
- <home>University of Texas at Austin</home>
+ <name>Collatz Conjecture</name>
+ <url>http://boinc.thesonntags.com/collatz/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[Study the Collatz Conjecture, an unsolved conjecture in mathematics]]></description>
+ <home>Private</home>
<platforms>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[cuda40]</name>
+ <name>i686-pc-linux-gnu[opencl_amd_cpu]</name>
+ <name>i686-pc-linux-gnu[opencl_amd_gpu]</name>
+ <name>i686-pc-linux-gnu[opencl_intel_cpu]</name>
+ <name>i686-pc-linux-gnu[opencl_intel_gpu]</name>
+ <name>i686-pc-linux-gnu[opencl_nvidia_gpu]</name>
<name>windows_intelx86</name>
- <name>x86_64-apple-darwin</name>
+ <name>windows_intelx86[ati14]</name>
+ <name>windows_intelx86[cuda55]</name>
+ <name>windows_intelx86[opencl_amd_cpu]</name>
+ <name>windows_intelx86[opencl_amd_gpu]</name>
+ <name>windows_intelx86[opencl_intel_gpu]</name>
+ <name>windows_intelx86[opencl_nvidia_gpu]</name>
+ <name>windows_x86_64</name>
+ <name>windows_x86_64[ati14]</name>
+ <name>windows_x86_64[cuda55]</name>
+ <name>windows_x86_64[opencl_amd_cpu]</name>
+ <name>windows_x86_64[opencl_amd_gpu]</name>
+ <name>windows_x86_64[opencl_intel_cpu]</name>
+ <name>windows_x86_64[opencl_intel_gpu]</name>
+ <name>windows_x86_64[opencl_nvidia_gpu]</name>
+ <name>x86_64-apple-darwin[opencl_amd_cpu]</name>
+ <name>x86_64-apple-darwin[opencl_amd_gpu]</name>
+ <name>x86_64-apple-darwin[opencl_intel_cpu]</name>
+ <name>x86_64-apple-darwin[opencl_intel_gpu]</name>
+ <name>x86_64-apple-darwin[opencl_nvidia_gpu]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[cuda40]</name>
+ <name>x86_64-pc-linux-gnu[opencl_amd_cpu]</name>
+ <name>x86_64-pc-linux-gnu[opencl_amd_gpu]</name>
+ <name>x86_64-pc-linux-gnu[opencl_intel_cpu]</name>
+ <name>x86_64-pc-linux-gnu[opencl_intel_gpu]</name>
+ <name>x86_64-pc-linux-gnu[opencl_nvidia_gpu]</name>
</platforms>
</project>
<project>
- <name>Leiden Classical</name>
- <url>http://boinc.gorlaeus.net/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Chemistry</specific_area>
- <description><![CDATA[Surface science calculations using Classical Dynamics. Leiden Classical allows volunteers, students and other scientist to submit their personal calculations to the grid. Each user has his own personal queue for Classical Dynamics jobs. In this way students have used the grid to simulate liquid argon, or to test the validity of the ideal gas law by actually doing the simulations through the grid.]]></description>
- <home>Leiden University, The Netherlands</home>
+ <name>primaboinca</name>
+ <url>http://www.primaboinca.com/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[Search for counterexamples to two conjectures related to the identification of prime numbers]]></description>
+ <home>Hochschule RheinMain University of Applied Sciences</home>
<platforms>
+ <name>i686-apple-darwin</name>
+ <name>i686-pc-linux-gnu</name>
+ <name>windows_intelx86</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/leiden_classical.png</image>
+ <image>http://boinc.berkeley.edu/images/logo_primaboinca.gif</image>
</project>
<project>
- <name>Asteroids at home</name>
- <url>http://asteroidsathome.net/boinc/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Astrophysics</specific_area>
- <description><![CDATA[The aim of the project is to derive shapes and spin for a significant part of the asteroid population. As input data, we use any asteroid photometry that is available. The results are asteroid convex shape models with the direction of the spin axis and the rotation period.]]></description>
- <home>Charles University in Prague</home>
+ <name>ABC at home</name>
+ <url>http://abcathome.com/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b < c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the product of the distinct prime factors of n. The ABC conjecture says that there are only finitely many a,b,c such that log(c)/log(rad(abc)) > h for any real h > 1. The ABC conjecture is currently one of the greatest open problems in mathematics. If it is proven to be true, a lot of other open problems can be a [...]
+ <home>Mathematical Institute of Leiden University / Kennislink</home>
<platforms>
- <name>arm-android-linux-gnu</name>
- <name>arm-unknown-linux-gnueabihf</name>
- <name>armv6l-unknown-linux-gnueabihf</name>
<name>i686-apple-darwin</name>
- <name>i686-pc-freebsd</name>
<name>i686-pc-linux-gnu</name>
+ <name>powerpc-apple-darwin</name>
+ <name>powerpc-linux-gnu</name>
<name>windows_intelx86</name>
<name>windows_x86_64</name>
<name>x86_64-apple-darwin</name>
- <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/asteroids_logo.jpg</image>
+ <image>http://boinc.berkeley.edu/images/abclogo.jpg</image>
</project>
<project>
- <name>LHC at home</name>
- <url>http://lhcathomeclassic.cern.ch/sixtrack/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Physics</specific_area>
- <description><![CDATA[The Large Hadron Collider (LHC) is a particle accelerator at CERN, the European Organization for Nuclear Research, the world's largest particle physics laboratory. It is the most powerful instrument ever built to investigate on particles proprieties. LHC at home runs simulations to improve the design of LHC and its detectors.]]></description>
- <home>CERN (European Organization for Nuclear Research)</home>
+ <name>NumberFields at home</name>
+ <url>http://numberfields.asu.edu/NumberFields/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[NumberFields at home searches for fields with special properties. The primary application of this research is in the realm of algebraic number theory. Number theorists can mine the data for interesting patterns to help them formulate conjectures about number fields. Ultimately, this research will lead to a deeper understanding of the profound properties of numbers, the basic building blocks of all mathematics.]]></description>
+ <home>Arizona State University, school of Mathematics</home>
<platforms>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>windows_x86_64</name>
<name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/lhc.jpg</image>
+ <image>http://boinc.berkeley.edu/images/nf_banner_10.jpg</image>
</project>
<project>
- <name>Spinhenge at home</name>
- <url>http://spin.fh-bielefeld.de/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Chemical engineering and nanotechnology</specific_area>
- <description><![CDATA[The study of molecular magnets and controlled nanoscale magnetism. These magnetic molecules may be used to develop tiny magnetic switches, with applications in medicine (such as local tumor chemotherapy) and biotechnology.]]></description>
- <home>Bielefeld University of Applied Sciences</home>
+ <name>SAT at home</name>
+ <url>http://sat.isa.ru/pdsat/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Computer Science</specific_area>
+ <description><![CDATA[Solve hard and practically important problems (discrete functions inversion problems, discrete optimization, bioinformatics, etc.) that can be effectively reduced to Boolean satisfiability problem.]]></description>
+ <home>Institute for System Dynamics and Control Theory and Institute for Information Transmission Problems, Russian Academy of Science</home>
<platforms>
+ <name>i686-pc-linux-gnu</name>
+ <name>windows_intelx86</name>
+ <name>windows_x86_64</name>
+ <name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/rotating-fe30-h90px.gif</image>
+ <image>http://boinc.berkeley.edu/images/sat_logo.png</image>
</project>
<project>
- <name>SETI at home</name>
- <url>http://setiathome.berkeley.edu/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Astrophysics, astrobiology</specific_area>
- <description><![CDATA[SETI (Search for Extraterrestrial Intelligence) is a scientific area whose goal is to detect intelligent life outside Earth. One approach, known as radio SETI, uses radio telescopes to listen for narrow-bandwidth radio signals from space. Such signals are not known to occur naturally, so a detection would provide evidence of extraterrestrial technology.]]></description>
- <home>University of California, Berkeley</home>
+ <name>Enigma at Home</name>
+ <url>http://www.enigmaathome.net/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Cryptography</specific_area>
+ <description><![CDATA[Attempt to decode 3 original Enigma messages. The signals were intercepted in the North Atlantic in 1942 and are believed to be unbroken.]]></description>
+ <home>Private</home>
<platforms>
+ <name>arm-android-linux-gnu</name>
+ <name>arm-unknown-linux-gnueabi</name>
+ <name>arm-unknown-linux-gnueabihf</name>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[ati]</name>
- <name>windows_intelx86[cuda]</name>
- <name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
- <name>x86_64-pc-linux-gnu[ati]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/seti_logo.png</image>
</project>
<project>
- <name>Constellation</name>
- <url>http://aerospaceresearch.net/constellation/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Aerospace-related science and engineering</specific_area>
- <description><![CDATA[Constellation is a platform for aerospace-related simulations, including trajectory optimization of launchers, satellites and probes, simulation of Moon's near-surface exosphere, and analysis of dynamic systems of exploration-rovers]]></description>
- <home><a href='http://rechenkraft.net'>Rechenkraft.net</a>, <a href='http://stuttgart.dglr.de'>DGLR</a>, <a href='http://selfnet.de'>Selfnet</a>, and <a href='http://shackspace.de'>shack</a></home>
+ <name>sudoku at vtaiwan</name>
+ <url>http://sudoku.nctu.edu.tw/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[Sudoku at vtaiwan seeks to solve the minimum Sudoku problem, a well-known problem in mathematics and computer science.]]></description>
+ <home>National Chiao Tung University, Taiwan</home>
+ <platforms>
+ </platforms>
+ <image>http://boinc.berkeley.edu/images/sudoku.png</image>
+ </project>
+ <project>
+ <name>NFS at home</name>
+ <url>http://escatter11.fullerton.edu/nfs/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Factorization of large integers</specific_area>
+ <description><![CDATA[NFS at Home is a research project that uses Internet-connected computers to do the lattice sieving step in the Number Field Sieve factorization of large integers. As a young school student, you gained your first experience at breaking an integer into prime factors, such as 15 = 3 * 5 or 35 = 5 * 7. NFS at Home is a continuation of that experience, only with integers that are hundreds of digits long.]]></description>
+ <home>California State University Fullerton</home>
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>windows_x86_64</name>
+ <name>windows_x86_64[notphenomiix6]</name>
<name>x86_64-apple-darwin</name>
+ <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/constellation2.png</image>
+ <image>http://boinc.berkeley.edu/images/NFS_Logo.jpg</image>
</project>
<project>
- <name>Cosmology at Home</name>
- <url>http://www.cosmologyathome.org/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Astronomy</specific_area>
- <description><![CDATA[The goal of Cosmology at Home is to search for the model that best describes our Universe and to find the range of models that agree with the available astronomical particle physics data.]]></description>
- <home>University of Illinois at Urbana-Champaign</home>
+ <name>OProject at Home</name>
+ <url>http://oproject.info/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics, Physics, Artificial Intelligence</specific_area>
+ <description><![CDATA[Simulation of quantum computing; Goldbach's conjecture.]]></description>
+ <home>Private</home>
<platforms>
+ <name>arm-android</name>
+ <name>arm-android-linux-gnu</name>
+ <name>arm-unknown-linux-gnu</name>
+ <name>arm-unknown-linux-gnueabi</name>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-solaris</name>
+ <name>powerpc64-ps3-linux-gnu</name>
+ <name>ppc64-linux-gnu</name>
<name>windows_intelx86</name>
+ <name>windows_x86_64</name>
+ <name>x86_64-apple-darwin</name>
+ <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/cosmo.jpg</image>
+ <image>http://boinc.berkeley.edu/images/oproject_logo.png</image>
</project>
<project>
- <name>Einstein at home</name>
- <url>http://einstein.phys.uwm.edu/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Astrophysics</specific_area>
- <description><![CDATA[Search for spinning neutron stars (also called pulsars) using data from the LIGO and GEO gravitational wave detectors, and from the Arecibo radio observatory. Einstein at Home is a World Year of Physics 2005 project supported by the American Physical Society (APS) and by a number of international organizations.]]></description>
- <home>Univ. of Wisconsin - Milwaukee, Max Planck Institute</home>
+ <name>DistrRTgen</name>
+ <url>http://boinc.freerainbowtables.com/distrrtgen/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Cryptography</specific_area>
+ <description><![CDATA[To give the world's security experts the best tools available for detecting weak hashes. This can help them to force developers to use more secure methods of password protection.]]></description>
+ <home>Private</home>
<platforms>
- <name>arm-android-linux-gnu</name>
- <name>arm-unknown-linux-gnueabihf</name>
- <name>i686-apple-darwin</name>
- <name>i686-apple-darwin[cuda]</name>
- <name>i686-apple-darwin[ati]</name>
+ <name>i386-pc-freebsd</name>
<name>i686-pc-linux-gnu</name>
- <name>i686-pc-linux-gnu[cuda]</name>
- <name>i686-pc-linux-gnu[ati]</name>
- <name>powerpc-apple-darwin</name>
- <name>sparc-sun-solaris2.7</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[cuda]</name>
- <name>windows_intelx86[ati]</name>
- <name>windows_x86_64[ati]</name>
+ <name>windows_intelx86[cuda23]</name>
+ <name>windows_intelx86[cuda40]</name>
+ <name>windows_intelx86[opencl_ati_101]</name>
<name>windows_x86_64</name>
+ <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
- <name>x86_64-pc-linux-gnu[ati]</name>
+ <name>x86_64-pc-linux-gnu[cuda23]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/einstein.jpg</image>
+ <image>http://boinc.berkeley.edu/images/freerainbowtables_logo.png</image>
</project>
<project>
- <name>theSkyNet POGS</name>
- <url>http://pogs.theskynet.org/pogs/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Astronomy</specific_area>
- <description><![CDATA[We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby Universe. We will measure physical parameters (such as stellar mass surface density, star formation rate surface density, attenuation, and first-order star formation history) on a resolved pixel-by-pixel basis using spectral energy distribution (SED) fitting techniques in a distributed computing mode.]]></description>
- <home>The International Centre for Radio Astronomy Research (Perth, Australia)</home>
+ <name>SZTAKI Desktop Grid</name>
+ <url>http://szdg.lpds.sztaki.hu/szdg/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[Find all the generalized binary number systems (in which bases are matrices and digits are vectors) up to dimension 11.]]></description>
+ <home>MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)</home>
<platforms>
- <name>arm-android-linux-gnu</name>
+ <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
+ <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
- <name>windows_x86_64</name>
+ <name>windows_intelx86_64</name>
<name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/</image>
+ <image>http://boinc.berkeley.edu/images/szdg1_small.jpg</image>
</project>
<project>
- <name>Milkyway at home</name>
- <url>http://milkyway.cs.rpi.edu/milkyway/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Astronomy</specific_area>
- <description><![CDATA[The goal of Milkyway at Home is to create a highly accurate three dimensional model of the Milky Way galaxy using data gathered by the Sloan Digital Sky Survey.]]></description>
- <home>Rensselaer Polytechnic Institute</home>
+ <name>VTU at home</name>
+ <url>http://boinc.vgtu.lt/vtuathome/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Software testing</specific_area>
+ <description><![CDATA[The aim of this project is to provide a powerful distributed computing platform for scientists of Vilnius Gediminas Technical University (VGTU) as well as others Lithuanian academic institutions. Current applications involve the study of Monte-Carlo based software testing.]]></description>
+ <home>Vilnius Gediminas Technical University and Kaunas University of Technology (Lithuania)</home>
<platforms>
- <name>amd64-pc-freebsd</name>
- <name>amd64-unknown-freebsd</name>
- <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
- <name>i686-pc-linux-gnu[ati]</name>
- <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[ati]</name>
<name>windows_x86_64</name>
- <name>windows_x86_64[ati]</name>
- <name>x86_64-apple-darwin</name>
- <name>x86_64-apple-darwin[ati]</name>
- <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[ati]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/mw.png</image>
+ <image>http://boinc.berkeley.edu/images/vtuathome-white.gif</image>
</project>
<project>
- <name>LHC at home Test4Theory</name>
- <url>http://lhcathome2.cern.ch/test4theory/</url>
- <general_area>Astronomy, Physics, and Chemistry</general_area>
- <specific_area>Physics</specific_area>
- <description><![CDATA[This project uses CERN-developed virtual machine technology for full-fledged LHC event physics simulation on volunteer computers. Requires that you install VirtualBox on your computer]]></description>
- <home>CERN (European Organization for Nuclear Research)</home>
+ <name>PrimeGrid</name>
+ <url>http://www.primegrid.com/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Mathematics</specific_area>
+ <description><![CDATA[Primegrid has multiple projects searching for different forms of very large prime numbers, including searching for the largest known prime number.]]></description>
+ <home>Private</home>
<platforms>
+ <name>arm-android-linux-gnu</name>
<name>i686-apple-darwin</name>
+ <name>i686-apple-darwin[cpuPPSsieve]</name>
+ <name>i686-apple-darwin[cudaGFN]</name>
+ <name>i686-apple-darwin[cudaGFNWR]</name>
+ <name>i686-apple-darwin[cudaPPSsieve]</name>
+ <name>i686-apple-darwin[OCLcudaGFN]</name>
+ <name>i686-apple-darwin[OCLcudaGFNWR]</name>
+ <name>i686-apple-darwin[openclGFNMAC]</name>
+ <name>i686-apple-darwin[openclGFNWRMAC]</name>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[atiGFN]</name>
+ <name>i686-pc-linux-gnu[atiGFNWR]</name>
+ <name>i686-pc-linux-gnu[atiPPSsieve]</name>
+ <name>i686-pc-linux-gnu[cpuPPSsieve]</name>
+ <name>i686-pc-linux-gnu[cudaGFN]</name>
+ <name>i686-pc-linux-gnu[cudaGFNWR]</name>
+ <name>i686-pc-linux-gnu[cudaPPSsieve]</name>
+ <name>i686-pc-linux-gnu[OCLcudaGFN]</name>
+ <name>i686-pc-linux-gnu[OCLcudaGFNWR]</name>
<name>windows_intelx86</name>
+ <name>windows_intelx86[atiGFN]</name>
+ <name>windows_intelx86[atiGFNWR]</name>
+ <name>windows_intelx86[atiPPSsieve]</name>
+ <name>windows_intelx86[cpuPPSsieve]</name>
+ <name>windows_intelx86[cudaGFN]</name>
+ <name>windows_intelx86[cudaGFNWR]</name>
+ <name>windows_intelx86[cudaPPSsieve]</name>
+ <name>windows_intelx86[OCLcudaGFN]</name>
+ <name>windows_intelx86[OCLcudaGFNWR]</name>
+ <name>windows_intelx86[openclGFN]</name>
<name>windows_x86_64</name>
+ <name>windows_x86_64[cpuGFN]</name>
+ <name>windows_x86_64[cpuPPSsieve]</name>
+ <name>windows_x86_64[forceAVXGFN]</name>
+ <name>windows_x86_64[SSE3cpuGFN]</name>
<name>x86_64-apple-darwin</name>
+ <name>x86_64-apple-darwin[AVX10GFN]</name>
+ <name>x86_64-apple-darwin[cpuPPSsieve]</name>
+ <name>x86_64-apple-darwin[cudaPPSsieve]</name>
+ <name>x86_64-apple-darwin[openclPPSsieveMAC]</name>
+ <name>x86_64-apple-darwin[SSE3cpuGFNMAC]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[atiPPSsieve]</name>
+ <name>x86_64-pc-linux-gnu[AVXGFN]</name>
+ <name>x86_64-pc-linux-gnu[cpuGFN]</name>
+ <name>x86_64-pc-linux-gnu[cpuPPSsieve]</name>
+ <name>x86_64-pc-linux-gnu[cudaPPSsieve]</name>
+ <name>x86_64-pc-linux-gnu[SSE3cpuGFN]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/t4t.png</image>
+ <image>http://boinc.berkeley.edu/images/primegrid_logo.png</image>
</project>
<project>
- <name>Climateprediction.net</name>
- <url>http://climateprediction.net/</url>
- <general_area>Earth Sciences</general_area>
- <specific_area>Climate study</specific_area>
- <description><![CDATA[Investigate the approximations that have to be made in state-of-the-art climate models. By running the model thousands of times we hope to find out how the model responds to slight tweaks to these approximations - slight enough to not make the approximations any less realistic. This will allow us to improve our understanding of how sensitive our models are to small changes and also to things like changes in carbon dioxide and the sulphur cycle. This will all [...]
- <home>Oxford University</home>
+ <name>VolPEx</name>
+ <url>http://volpex.cs.uh.edu/VCP/</url>
+ <general_area>Mathematics, computing, and games</general_area>
+ <specific_area>Computer science</specific_area>
+ <description><![CDATA[Creating effective parallel computing on multiple volatile nodes. Apply research on REMD Protein Folding.]]></description>
+ <home>University of Houston</home>
<platforms>
- <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
+ <name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/cpn_logo_world_1.jpg</image>
+ <image>http://boinc.berkeley.edu/images/</image>
+ </project>
+ <project>
+ <name>GPUGrid.net</name>
+ <url>http://www.gpugrid.net/</url>
+ <general_area>Biology and Medicine</general_area>
+ <specific_area>Molecular simulations of proteins</specific_area>
+ <description><![CDATA[GPUGrid.net opens novel computational scenarios by the first full-atom molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. New biomedical applications suddenly become possible giving a new role to computational biology for biomedical research.]]></description>
+ <home>Barcelona Biomedical Research Park (PRBB)</home>
+ <platforms>
+ <name>arm-android-linux-gnu</name>
+ <name>windows_intelx86[cuda42]</name>
+ <name>windows_intelx86[cuda55]</name>
+ <name>x86_64-pc-linux-gnu[cuda42]</name>
+ <name>x86_64-pc-linux-gnu[cuda55]</name>
+ </platforms>
+ <image>http://boinc.berkeley.edu/images/gpugrid.png</image>
</project>
<project>
<name>POEM at HOME</name>
@@ -267,54 +365,66 @@
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[ati]</name>
+ <name>windows_intelx86[opencl_ati_100]</name>
+ <name>windows_intelx86[opencl_nvidia_100]</name>
<name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[ati]</name>
+ <name>x86_64-pc-linux-gnu[opencl_ati_100]</name>
+ <name>x86_64-pc-linux-gnu[opencl_nvidia_100]</name>
</platforms>
<image>http://boinc.berkeley.edu/images/poem.jpg</image>
</project>
<project>
- <name>FightMalaria at Home</name>
- <url>http://boinc.ucd.ie/fmah/</url>
+ <name>Malariacontrol.net</name>
+ <url>http://www.malariacontrol.net/</url>
<general_area>Biology and Medicine</general_area>
- <specific_area>Antimalarial drug discovery</specific_area>
- <description><![CDATA[The parasite that causes malaria continues to evolve resistance to available medication. We therefore urgently need to discover new drugs to replace existing drugs. Importantly, these new drugs need to target NEW proteins in the parasite. The FightMalaria at Home project is aimed at finding these new targets.]]></description>
- <home>University College Dublin</home>
+ <specific_area>Epidemiology</specific_area>
+ <description><![CDATA[Simulation models of the transmission dynamics and health effects of malaria are an important tool for malaria control. They can be used to determine optimal strategies for delivering mosquito nets, chemotherapy, or new vaccines which are currently under development and testing. Such modeling is extremely computer intensive, requiring simulations of large human populations with a diverse set of parameters related to biological and social factors that influe [...]
+ <home>The Swiss Tropical Institute</home>
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
+ <name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-unknown-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/FMAH_banner3_wt.png</image>
+ <image>http://boinc.berkeley.edu/images/africaathome.gif</image>
</project>
<project>
- <name>Superlink at Technion</name>
- <url>http://cbl-boinc-server2.cs.technion.ac.il/superlinkattechnion/</url>
+ <name>Simulation One</name>
+ <url>http://mmgboinc.unimi.it/</url>
<general_area>Biology and Medicine</general_area>
- <specific_area>Genetic linkage analysis</specific_area>
- <description><![CDATA[Superlink at Technion helps geneticists all over the world find disease-provoking genes causing some types of diabetes, hypertension (high blood pressure), cancer, schizophrenia and many others.]]></description>
- <home>Technion, Israel</home>
+ <specific_area>Molecular biology</specific_area>
+ <description><![CDATA[The project studies osmoprotectants - small molecules that protect proteins, for example by thermal stress. Thanks to these molecules in nature we can find plants able to survive without water, or bacteria able to survive in extreme environmental conditions. And how is this possible? Answering this question could have a major impact in agriculture, e.g. developing plants that require less water intake.]]></description>
+ <home>Universita degli Studi, Milan, Italy</home>
<platforms>
+ <name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[mt]</name>
+ <name>windows_intelx86</name>
+ <name>windows_intelx86[mt]</name>
+ <name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[mt]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/superlink_logo.gif</image>
+ <image>http://boinc.berkeley.edu/images/SimOne_logo.png</image>
</project>
<project>
- <name>Rosetta at home</name>
- <url>http://boinc.bakerlab.org/rosetta/</url>
+ <name>SIMAP</name>
+ <url>http://boincsimap.org/boincsimap/</url>
<general_area>Biology and Medicine</general_area>
<specific_area>Biology</specific_area>
- <description><![CDATA[Determine the 3-dimensional shapes of proteins in research that may ultimately lead to finding cures for some major human diseases. By running Rosetta at home you will help us speed up and extend our research in ways we couldn't possibly attempt without your help. You will also be helping our efforts at designing new proteins to fight diseases such as HIV, Malaria, Cancer, and Alzheimer's]]></description>
- <home>University of Washington</home>
+ <description><![CDATA[Calculate similarities between proteins. SIMAP provides a public database of the resulting data, which plays a key role in many bioinformatics research projects.]]></description>
+ <home>University of Vienna</home>
<platforms>
+ <name>arm-android-linux-gnu</name>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
<name>windows_x86_64</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-unknown-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/rosetta_at_home_logo.jpg</image>
+ <image>http://boinc.berkeley.edu/images/simaplogo.jpg</image>
</project>
<project>
<name>Docking at Home</name>
@@ -335,51 +445,23 @@
<image>http://boinc.berkeley.edu/images/docking.png</image>
</project>
<project>
- <name>GPUGrid.net</name>
- <url>http://www.gpugrid.net/</url>
- <general_area>Biology and Medicine</general_area>
- <specific_area>Molecular simulations of proteins</specific_area>
- <description><![CDATA[GPUGrid.net opens novel computational scenarios by the first full-atom molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. New biomedical applications suddenly become possible giving a new role to computational biology for biomedical research.]]></description>
- <home>Barcelona Biomedical Research Park (PRBB)</home>
- <platforms>
- <name>windows_intelx86[cuda]</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
- </platforms>
- <image>http://boinc.berkeley.edu/images/gpugrid.png</image>
- </project>
- <project>
- <name>Malariacontrol.net</name>
- <url>http://www.malariacontrol.net/</url>
- <general_area>Biology and Medicine</general_area>
- <specific_area>Epidemiology</specific_area>
- <description><![CDATA[Simulation models of the transmission dynamics and health effects of malaria are an important tool for malaria control. They can be used to determine optimal strategies for delivering mosquito nets, chemotherapy, or new vaccines which are currently under development and testing. Such modeling is extremely computer intensive, requiring simulations of large human populations with a diverse set of parameters related to biological and social factors that influe [...]
- <home>The Swiss Tropical Institute</home>
- <platforms>
- <name>i686-apple-darwin</name>
- <name>i686-pc-linux-gnu</name>
- <name>windows_intelx86</name>
- <name>x86_64-pc-linux-gnu</name>
- <name>x86_64-unknown-linux-gnu</name>
- </platforms>
- <image>http://boinc.berkeley.edu/images/africaathome.gif</image>
- </project>
- <project>
- <name>SIMAP</name>
- <url>http://boincsimap.org/boincsimap/</url>
+ <name>RNA World</name>
+ <url>http://www.rnaworld.de/rnaworld/</url>
<general_area>Biology and Medicine</general_area>
- <specific_area>Biology</specific_area>
- <description><![CDATA[Calculate similarities between proteins. SIMAP provides a public database of the resulting data, which plays a key role in many bioinformatics research projects.]]></description>
- <home>University of Vienna</home>
+ <specific_area>Molecular biology</specific_area>
+ <description><![CDATA[RNA World seeks to identify, analyze, structurally predict and design RNA molecules on the basis of established bioinformatics software.]]></description>
+ <home>Rechenkraft.net e.V.</home>
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
- <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
<name>windows_x86_64</name>
+ <name>windows_x86_64[vbox64]</name>
+ <name>x86_64-apple-darwin[vbox64]</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-unknown-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[vbox64]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/simaplogo.jpg</image>
+ <image>http://boinc.berkeley.edu/images/rna4.png</image>
</project>
<project>
<name>The Lattice Project</name>
@@ -398,47 +480,46 @@
<image>http://boinc.berkeley.edu/images/lattice.gif</image>
</project>
<project>
- <name>RNA World</name>
- <url>http://www.rnaworld.de/rnaworld/</url>
+ <name>FightMalaria at Home</name>
+ <url>http://boinc.ucd.ie/fmah/</url>
<general_area>Biology and Medicine</general_area>
- <specific_area>Molecular biology</specific_area>
- <description><![CDATA[RNA World seeks to identify, analyze, structurally predict and design RNA molecules on the basis of established bioinformatics software.]]></description>
- <home>Rechenkraft.net e.V.</home>
+ <specific_area>Antimalarial drug discovery</specific_area>
+ <description><![CDATA[The parasite that causes malaria continues to evolve resistance to available medication. We therefore urgently need to discover new drugs to replace existing drugs. Importantly, these new drugs need to target NEW proteins in the parasite. The FightMalaria at Home project is aimed at finding these new targets.]]></description>
+ <home>University College Dublin</home>
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>windows_x86_64</name>
- <name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/rna4.png</image>
+ <image>http://boinc.berkeley.edu/images/FMAH_banner3_wt.png</image>
</project>
<project>
- <name>Simulation One</name>
- <url>http://mmgboinc.unimi.it/</url>
+ <name>Rosetta at home</name>
+ <url>http://boinc.bakerlab.org/rosetta/</url>
<general_area>Biology and Medicine</general_area>
- <specific_area>Molecular biology</specific_area>
- <description><![CDATA[The project studies osmoprotectants - small molecules that protect proteins, for example by thermal stress. Thanks to these molecules in nature we can find plants able to survive without water, or bacteria able to survive in extreme environmental conditions. And how is this possible? Answering this question could have a major impact in agriculture, e.g. developing plants that require less water intake.]]></description>
- <home>Universita degli Studi, Milan, Italy</home>
+ <specific_area>Biology</specific_area>
+ <description><![CDATA[Determine the 3-dimensional shapes of proteins in research that may ultimately lead to finding cures for some major human diseases. By running Rosetta at home you will help us speed up and extend our research in ways we couldn't possibly attempt without your help. You will also be helping our efforts at designing new proteins to fight diseases such as HIV, Malaria, Cancer, and Alzheimer's]]></description>
+ <home>University of Washington</home>
<platforms>
+ <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
+ <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
+ <name>windows_x86_64</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/SimOne_logo.png</image>
+ <image>http://boinc.berkeley.edu/images/rosetta_at_home_logo.jpg</image>
</project>
<project>
- <name>Radioactive at Home</name>
- <url>http://radioactiveathome.org/boinc/</url>
- <general_area>Distributed sensing</general_area>
- <specific_area>Environmental research</specific_area>
- <description><![CDATA[This project is creating a free and continuously updated map of radiation levels by using sensors connected to volunteers' computers. You must buy a sensor to participate.]]></description>
- <home>BOINC Poland Foundation</home>
+ <name>Superlink at Technion</name>
+ <url>http://cbl-boinc-server2.cs.technion.ac.il/superlinkattechnion/</url>
+ <general_area>Biology and Medicine</general_area>
+ <specific_area>Genetic linkage analysis</specific_area>
+ <description><![CDATA[Superlink at Technion helps geneticists all over the world find disease-provoking genes causing some types of diabetes, hypertension (high blood pressure), cancer, schizophrenia and many others.]]></description>
+ <home>Technion, Israel</home>
<platforms>
- <name>i686-pc-linux-gnu</name>
- <name>windows_intelx86</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/radioactive.jpg</image>
+ <image>http://boinc.berkeley.edu/images/superlink_logo.gif</image>
</project>
<project>
<name>Quake Catcher Network</name>
@@ -448,312 +529,443 @@
<description><![CDATA[The Quake-Catcher Network is developing the world's largest seismic network using sensors attached to Internet-connected computers. You must buy a sensor to participate.]]></description>
<home>Stanford University</home>
<platforms>
- <name>armv5tel-unknown-linux-gnueabi</name>
- <name>armv6l-unknown-linux-gnueabihf</name>
- <name>i686-apple-darwin</name>
- <name>i686-pc-linux-gnu</name>
- <name>powerpc-apple-darwin</name>
- <name>windows_intelx86</name>
- <name>windows_x86_64</name>
- <name>x86_64-apple-darwin</name>
+ <name>arm-android-linux-gnu[nci]</name>
+ <name>armv5tel-unknown-linux-gnueabi[nci]</name>
+ <name>armv6l-unknown-linux-gnueabihf[nci]</name>
+ <name>i686-apple-darwin[nci]</name>
+ <name>i686-pc-linux-gnu[nci]</name>
+ <name>powerpc-apple-darwin[nci]</name>
+ <name>windows_intelx86[nci]</name>
+ <name>windows_x86_64[nci]</name>
+ <name>x86_64-apple-darwin[nci]</name>
</platforms>
<image>http://boinc.berkeley.edu/images/</image>
</project>
<project>
- <name>Enigma at Home</name>
- <url>http://www.enigmaathome.net/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Cryptography</specific_area>
- <description><![CDATA[Attempt to decode 3 original Enigma messages. The signals were intercepted in the North Atlantic in 1942 and are believed to be unbroken.]]></description>
- <home>Private</home>
+ <name>Radioactive at Home</name>
+ <url>http://radioactiveathome.org/boinc/</url>
+ <general_area>Distributed sensing</general_area>
+ <specific_area>Environmental research</specific_area>
+ <description><![CDATA[This project is creating a free and continuously updated map of radiation levels by using sensors connected to volunteers' computers. You must buy a sensor to participate.]]></description>
+ <home>BOINC Poland Foundation</home>
<platforms>
- <name>arm-android-linux-gnu</name>
+ <name>windows_intelx86</name>
+ <name>i686-pc-linux-gnu[nci]</name>
<name>arm-unknown-linux-gnueabi</name>
+ <name>armv6l-unknown-linux-gnueabihf</name>
<name>arm-unknown-linux-gnueabihf</name>
+ <name>mipsel-unknown-linux-gnu</name>
+ </platforms>
+ <image>http://boinc.berkeley.edu/images/radioactive.jpg</image>
+ </project>
+ <project>
+ <name>Climateprediction.net</name>
+ <url>http://climateprediction.net/</url>
+ <general_area>Earth Sciences</general_area>
+ <specific_area>Climate study</specific_area>
+ <description><![CDATA[Investigate the approximations that have to be made in state-of-the-art climate models. By running the model thousands of times we hope to find out how the model responds to slight tweaks to these approximations - slight enough to not make the approximations any less realistic. This will allow us to improve our understanding of how sensitive our models are to small changes and also to things like changes in carbon dioxide and the sulphur cycle. This will all [...]
+ <home>Oxford University</home>
+ <platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
- <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
</platforms>
+ <image>http://boinc.berkeley.edu/images/cpn_logo_world_1.jpg</image>
</project>
<project>
- <name>OProject at Home</name>
- <url>http://oproject.info/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics, Physics, Artificial Intelligence</specific_area>
- <description><![CDATA[Simulation of quantum computing; Goldbach's conjecture.]]></description>
- <home>Private</home>
+ <name>Spinhenge at home</name>
+ <url>http://spin.fh-bielefeld.de/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Chemical engineering and nanotechnology</specific_area>
+ <description><![CDATA[The study of molecular magnets and controlled nanoscale magnetism. These magnetic molecules may be used to develop tiny magnetic switches, with applications in medicine (such as local tumor chemotherapy) and biotechnology.]]></description>
+ <home>Bielefeld University of Applied Sciences</home>
<platforms>
- <name>arm-android</name>
- <name>arm-android-linux-gnu</name>
- <name>arm-unknown-linux-gnu</name>
- <name>arm-unknown-linux-gnueabi</name>
- <name>i686-pc-linux-gnu</name>
- <name>i686-pc-solaris</name>
- <name>powerpc64-ps3-linux-gnu</name>
- <name>ppc64-linux-gnu</name>
- <name>windows_intelx86</name>
- <name>windows_x86_64</name>
- <name>x86_64-apple-darwin</name>
- <name>x86_64-pc-freebsd</name>
- <name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/oproject_logo.png</image>
+ <image>http://boinc.berkeley.edu/images/rotating-fe30-h90px.gif</image>
</project>
<project>
- <name>SAT at home</name>
- <url>http://sat.isa.ru/pdsat/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Computer Science</specific_area>
- <description><![CDATA[Solve hard and practically important problems (discrete functions inversion problems, discrete optimization, bioinformatics, etc.) that can be effectively reduced to Boolean satisfiability problem.]]></description>
- <home>Institute for Systems Analysis and Institute for System Dynamics and Control Theory, Russian Academy of Science</home>
+ <name>LHC at home</name>
+ <url>http://lhcathomeclassic.cern.ch/sixtrack/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Physics</specific_area>
+ <description><![CDATA[The Large Hadron Collider (LHC) is a particle accelerator at CERN, the European Organization for Nuclear Research, the world's largest particle physics laboratory. It is the most powerful instrument ever built to investigate on particles proprieties. LHC at home runs simulations to improve the design of LHC and its detectors.]]></description>
+ <home>CERN (European Organization for Nuclear Research)</home>
<platforms>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[pni]</name>
+ <name>i686-pc-linux-gnu[sse2]</name>
+ <name>i686-pc-linux-gnu[sse3]</name>
<name>windows_intelx86</name>
+ <name>windows_intelx86[pni]</name>
+ <name>windows_intelx86[sse2]</name>
+ <name>windows_intelx86[sse3]</name>
<name>windows_x86_64</name>
+ <name>windows_x86_64[pni]</name>
+ <name>windows_x86_64[sse2]</name>
+ <name>windows_x86_64[sse3]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[pni]</name>
+ <name>x86_64-pc-linux-gnu[sse2]</name>
+ <name>x86_64-pc-linux-gnu[sse3]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/sat_logo.png</image>
+ <image>http://boinc.berkeley.edu/images/lhc.jpg</image>
</project>
<project>
- <name>VolPEx</name>
- <url>http://volpex.cs.uh.edu/VCP/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Computer science</specific_area>
- <description><![CDATA[Creating effective parallel computing on multiple volatile nodes. Apply research on REMD Protein Folding.]]></description>
- <home>University of Houston</home>
+ <name>Einstein at home</name>
+ <url>http://einstein.phys.uwm.edu/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Astrophysics</specific_area>
+ <description><![CDATA[Search for spinning neutron stars (also called pulsars) using data from the LIGO and GEO gravitational wave detectors, and from the Arecibo radio observatory. Einstein at Home is a World Year of Physics 2005 project supported by the American Physical Society (APS) and by a number of international organizations.]]></description>
+ <home>Univ. of Wisconsin - Milwaukee, Max Planck Institute</home>
<platforms>
+ <name>arm-android-linux-gnu[NEON]</name>
+ <name>arm-android-linux-gnu[VFP]</name>
+ <name>arm-unknown-linux-gnueabihf</name>
+ <name>arm-unknown-linux-gnueabihf[NEON]</name>
+ <name>i686-apple-darwin</name>
+ <name>i686-apple-darwin[ABP2cuda23]</name>
+ <name>i686-apple-darwin[BRP3cuda32OSX5]</name>
+ <name>i686-apple-darwin[BRP3SSE]</name>
+ <name>i686-apple-darwin[BRP4G-cuda32-OSX]</name>
+ <name>i686-apple-darwin[BRP4G-opencl-ati-lion]</name>
+ <name>i686-apple-darwin[BRP5-cuda32-OSX]</name>
+ <name>i686-apple-darwin[BRP5-opencl-ati-lion]</name>
+ <name>i686-apple-darwin[FGRPopencl-ati-lion]</name>
+ <name>i686-apple-darwin[FGRPopencl-nvidia-lion]</name>
+ <name>i686-apple-darwin[SSE2]</name>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[ABP1cuda23]</name>
+ <name>i686-pc-linux-gnu[ABP2cuda23]</name>
+ <name>i686-pc-linux-gnu[BRP3cuda32fullCPU]</name>
+ <name>i686-pc-linux-gnu[BRP3cuda32nv270]</name>
+ <name>i686-pc-linux-gnu[BRP3SSE]</name>
+ <name>i686-pc-linux-gnu[BRP4G-cuda32-nv270]</name>
+ <name>i686-pc-linux-gnu[BRP4G-opencl-ati]</name>
+ <name>i686-pc-linux-gnu[BRP5-cuda32-nv270]</name>
+ <name>i686-pc-linux-gnu[BRP5-opencl-ati]</name>
+ <name>i686-pc-linux-gnu[FGRPopencl-ati]</name>
+ <name>i686-pc-linux-gnu[FGRPopencl-nvidia]</name>
+ <name>i686-pc-linux-gnu[S5GCESSE]</name>
+ <name>i686-pc-linux-gnu[S5GCESSE2]</name>
+ <name>i686-pc-linux-gnu[SSE]</name>
+ <name>i686-pc-linux-gnu[SSE2]</name>
+ <name>powerpc-apple-darwin</name>
+ <name>powerpc-apple-darwin[ALTIVEC]</name>
+ <name>sparc-sun-solaris2.7</name>
<name>windows_intelx86</name>
+ <name>windows_intelx86[ABP1cuda23]</name>
+ <name>windows_intelx86[ABP2cuda23]</name>
+ <name>windows_intelx86[BRP3cuda32]</name>
+ <name>windows_intelx86[BRP3SSE]</name>
+ <name>windows_intelx86[BRP4G-cuda32]</name>
+ <name>windows_intelx86[BRP4G-cuda32-nv301]</name>
+ <name>windows_intelx86[BRP4G-opencl-ati]</name>
+ <name>windows_intelx86[BRP5-cuda32]</name>
+ <name>windows_intelx86[BRP5-cuda32-nv301]</name>
+ <name>windows_intelx86[BRP5-opencl-ati]</name>
+ <name>windows_intelx86[FGRPopencl-ati]</name>
+ <name>windows_intelx86[FGRPopencl-nvidia]</name>
+ <name>windows_intelx86[opencl-intel_gpu]</name>
+ <name>windows_intelx86[S5GCESSE]</name>
+ <name>windows_intelx86[S5GCESSE2]</name>
+ <name>windows_intelx86[S5R6sse]</name>
+ <name>windows_intelx86[S5R6sse2]</name>
+ <name>windows_intelx86[SSE]</name>
+ <name>windows_intelx86[SSE2]</name>
+ <name>windows_x86_64[BRP4G-opencl-ati]</name>
+ <name>windows_x86_64[BRP5-opencl-ati]</name>
+ <name>windows_x86_64[FGRPopencl-ati]</name>
+ <name>windows_x86_64[FGRPopencl-nvidia]</name>
+ <name>windows_x86_64[opencl-intel_gpu]</name>
+ <name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[BRP4G-cuda32-nv270]</name>
+ <name>x86_64-pc-linux-gnu[BRP4G-opencl-ati]</name>
+ <name>x86_64-pc-linux-gnu[BRP5-cuda32-nv270]</name>
+ <name>x86_64-pc-linux-gnu[BRP5-opencl-ati]</name>
+ <name>x86_64-pc-linux-gnu[FGRPopencl-ati]</name>
+ <name>x86_64-pc-linux-gnu[FGRPopencl-nvidia]</name>
+ <name>x86_64-pc-linux-gnu[X64]</name>
+ <name>x86_64-pc-linux-gnu[X8664]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/</image>
+ <image>http://boinc.berkeley.edu/images/einstein.jpg</image>
</project>
<project>
- <name>sudoku at vtaiwan</name>
- <url>http://sudoku.nctu.edu.tw/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[Sudoku at vtaiwan seeks to solve the minimum Sudoku problem, a well-known problem in mathematics and computer science.]]></description>
- <home>National Chiao Tung University, Taiwan</home>
+ <name>Constellation</name>
+ <url>http://aerospaceresearch.net/constellation/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Aerospace-related science and engineering</specific_area>
+ <description><![CDATA[Constellation is a platform for aerospace-related simulations, including trajectory optimization of launchers, satellites and probes, simulation of Moon's near-surface exosphere, and analysis of dynamic systems of exploration-rovers]]></description>
+ <home><a href='http://rechenkraft.net'>Rechenkraft.net</a>, <a href='http://stuttgart.dglr.de'>DGLR</a>, <a href='http://selfnet.de'>Selfnet</a>, and <a href='http://shackspace.de'>shack</a></home>
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
<name>windows_x86_64</name>
+ <name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-unknown-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/sudoku.png</image>
+ <image>http://boinc.berkeley.edu/images/constellation2.png</image>
</project>
<project>
- <name>NumberFields at home</name>
- <url>http://numberfields.asu.edu/NumberFields/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[NumberFields at home searches for fields with special properties. The primary application of this research is in the realm of algebraic number theory. Number theorists can mine the data for interesting patterns to help them formulate conjectures about number fields. Ultimately, this research will lead to a deeper understanding of the profound properties of numbers, the basic building blocks of all mathematics.]]></description>
- <home>Arizona State University, school of Mathematics</home>
+ <name>SETI at home</name>
+ <url>http://setiathome.berkeley.edu/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Astrophysics, astrobiology</specific_area>
+ <description><![CDATA[SETI (Search for Extraterrestrial Intelligence) is a scientific area whose goal is to detect intelligent life outside Earth. One approach, known as radio SETI, uses radio telescopes to listen for narrow-bandwidth radio signals from space. Such signals are not known to occur naturally, so a detection would provide evidence of extraterrestrial technology.]]></description>
+ <home>University of California, Berkeley</home>
<platforms>
+ <name>arm-android-linux-gnu[armv6-neon]</name>
+ <name>arm-android-linux-gnu[armv6-vfp]</name>
+ <name>arm-android-linux-gnu[armv7-neon]</name>
+ <name>arm-android-linux-gnu[armv7-vfpv3d16]</name>
+ <name>arm-android-linux-gnu[armv7-vfpv4]</name>
+ <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
+ <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
- <name>x86_64-apple-darwin</name>
+ <name>windows_intelx86[ati_opencl_100]</name>
+ <name>windows_intelx86[cal_ati]</name>
+ <name>windows_intelx86[cuda]</name>
+ <name>windows_intelx86[cuda22]</name>
+ <name>windows_intelx86[cuda23]</name>
+ <name>windows_intelx86[cuda32]</name>
+ <name>windows_intelx86[cuda42]</name>
+ <name>windows_intelx86[cuda50]</name>
+ <name>windows_intelx86[cuda_opencl_100]</name>
+ <name>windows_intelx86[opencl_ati5_cat132]</name>
+ <name>windows_intelx86[opencl_ati5_sah]</name>
+ <name>windows_intelx86[opencl_ati_100]</name>
+ <name>windows_intelx86[opencl_ati_cat132]</name>
+ <name>windows_intelx86[opencl_ati_sah]</name>
+ <name>windows_intelx86[opencl_intel_gpu_sah]</name>
+ <name>windows_intelx86[opencl_nvidia_100]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[cuda_opencl_100]</name>
+ <name>x86_64-pc-linux-gnu[opencl_ati5_linux]</name>
+ <name>x86_64-pc-linux-gnu[opencl_ati5_linux_cat132]</name>
+ <name>x86_64-pc-linux-gnu[opencl_ati_100]</name>
+ <name>x86_64-pc-linux-gnu[opencl_ati_linux]</name>
+ <name>x86_64-pc-linux-gnu[opencl_ati_linux_cat132]</name>
+ <name>x86_64-pc-linux-gnu[opencl_nvidia_100]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/nf_banner_10.jpg</image>
+ <image>http://boinc.berkeley.edu/images/seti_logo.png</image>
</project>
<project>
- <name>Collatz Conjecture</name>
- <url>http://boinc.thesonntags.com/collatz/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[Study the Collatz Conjecture, an unsolved conjecture in mathematics]]></description>
- <home>Private</home>
+ <name>theSkyNet POGS</name>
+ <url>http://pogs.theskynet.org/pogs/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Astronomy</specific_area>
+ <description><![CDATA[We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby Universe. We will measure physical parameters (such as stellar mass surface density, star formation rate surface density, attenuation, and first-order star formation history) on a resolved pixel-by-pixel basis using spectral energy distribution (SED) fitting techniques in a distributed computing mode.]]></description>
+ <home>The International Centre for Radio Astronomy Research (Perth, Australia)</home>
<platforms>
- <name>i686-apple-darwin</name>
- <name>i686-apple-darwin[cuda]</name>
+ <name>arm-android-linux-gnu</name>
<name>i686-pc-linux-gnu</name>
- <name>i686-pc-linux-gnu[cuda]</name>
- <name>i686-pc-linux-gnu[ati]</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[ati]</name>
- <name>windows_intelx86[cuda]</name>
<name>windows_x86_64</name>
- <name>windows_x86_64[ati]</name>
- <name>windows_x86_64[cuda]</name>
<name>x86_64-apple-darwin</name>
- <name>x86_64-apple-darwin[cuda]</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
- <name>x86_64-pc-linux-gnu[ati]</name>
</platforms>
+ <image>http://boinc.berkeley.edu/images/</image>
</project>
<project>
- <name>ABC at home</name>
- <url>http://abcathome.com/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b < c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the product of the distinct prime factors of n. The ABC conjecture says that there are only finitely many a,b,c such that log(c)/log(rad(abc)) > h for any real h > 1. The ABC conjecture is currently one of the greatest open problems in mathematics. If it is proven to be true, a lot of other open problems can be a [...]
- <home>Mathematical Institute of Leiden University / Kennislink</home>
+ <name>Milkyway at home</name>
+ <url>http://milkyway.cs.rpi.edu/milkyway/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Astronomy</specific_area>
+ <description><![CDATA[The goal of Milkyway at Home is to create a highly accurate three dimensional model of the Milky Way galaxy using data gathered by the Sloan Digital Sky Survey.]]></description>
+ <home>Rensselaer Polytechnic Institute</home>
<platforms>
+ <name>amd64-pc-freebsd</name>
+ <name>amd64-unknown-freebsd</name>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[ati14]</name>
+ <name>i686-pc-linux-gnu[mt]</name>
+ <name>i686-pc-linux-gnu[opencl_amd_ati]</name>
+ <name>i686-pc-linux-gnu[opencl_nvidia]</name>
<name>powerpc-apple-darwin</name>
- <name>powerpc-linux-gnu</name>
<name>windows_intelx86</name>
+ <name>windows_intelx86[ati14]</name>
+ <name>windows_intelx86[opencl_amd_ati]</name>
+ <name>windows_intelx86[opencl_nvidia]</name>
<name>windows_x86_64</name>
+ <name>windows_x86_64[ati14]</name>
+ <name>windows_x86_64[mt]</name>
+ <name>windows_x86_64[opencl_amd_ati]</name>
+ <name>windows_x86_64[opencl_nvidia]</name>
<name>x86_64-apple-darwin</name>
+ <name>x86_64-apple-darwin[mt]</name>
+ <name>x86_64-apple-darwin[opencl_amd_ati]</name>
+ <name>x86_64-apple-darwin[opencl_nvidia]</name>
+ <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[ati14]</name>
+ <name>x86_64-pc-linux-gnu[mt]</name>
+ <name>x86_64-pc-linux-gnu[opencl_amd_ati]</name>
+ <name>x86_64-pc-linux-gnu[opencl_nvidia]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/abclogo.jpg</image>
+ <image>http://boinc.berkeley.edu/images/mw.png</image>
</project>
<project>
- <name>SZTAKI Desktop Grid</name>
- <url>http://szdg.lpds.sztaki.hu/szdg/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[Find all the generalized binary number systems (in which bases are matrices and digits are vectors) up to dimension 11.]]></description>
- <home>MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)</home>
+ <name>Cosmology at Home</name>
+ <url>http://www.cosmologyathome.org/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Astronomy</specific_area>
+ <description><![CDATA[The goal of Cosmology at Home is to search for the model that best describes our Universe and to find the range of models that agree with the available astronomical particle physics data.]]></description>
+ <home>University of Illinois at Urbana-Champaign</home>
<platforms>
- <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
- <name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
- <name>windows_intelx86_64</name>
- <name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/szdg1_small.jpg</image>
+ <image>http://boinc.berkeley.edu/images/cosmo.jpg</image>
</project>
<project>
- <name>VTU at home</name>
- <url>http://boinc.vgtu.lt/vtuathome/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Software testing</specific_area>
- <description><![CDATA[The aim of this project is to provide a powerful distributed computing platform for scientists of Vilnius Gediminas Technical University (VGTU) as well as others Lithuanian academic institutions. Current applications involve the study of Monte-Carlo based software testing.]]></description>
- <home>Vilnius Gediminas Technical University and Kaunas University of Technology (Lithuania)</home>
+ <name>LHC at home Test4Theory</name>
+ <url>http://lhcathome2.cern.ch/test4theory/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Physics</specific_area>
+ <description><![CDATA[This project uses CERN-developed virtual machine technology for full-fledged LHC event physics simulation on volunteer computers. Requires that you install VirtualBox on your computer]]></description>
+ <home>CERN (European Organization for Nuclear Research)</home>
<platforms>
+ <name>i686-apple-darwin</name>
+ <name>i686-apple-darwin[mt]</name>
+ <name>i686-apple-darwin[vbox32]</name>
<name>i686-pc-linux-gnu</name>
+ <name>i686-pc-linux-gnu[mt]</name>
+ <name>i686-pc-linux-gnu[vbox32]</name>
<name>windows_intelx86</name>
+ <name>windows_intelx86[mt]</name>
+ <name>windows_intelx86[vbox32]</name>
<name>windows_x86_64</name>
+ <name>windows_x86_64[mt]</name>
+ <name>windows_x86_64[vbox64]</name>
+ <name>x86_64-apple-darwin</name>
+ <name>x86_64-apple-darwin[mt]</name>
+ <name>x86_64-apple-darwin[vbox64]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[mt]</name>
+ <name>x86_64-pc-linux-gnu[vbox64]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/vtuathome-white.gif</image>
+ <image>http://boinc.berkeley.edu/images/t4t.png</image>
</project>
<project>
- <name>NFS at home</name>
- <url>http://escatter11.fullerton.edu/nfs/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Factorization of large integers</specific_area>
- <description><![CDATA[NFS at Home is a research project that uses Internet-connected computers to do the lattice sieving step in the Number Field Sieve factorization of large integers. As a young school student, you gained your first experience at breaking an integer into prime factors, such as 15 = 3 * 5 or 35 = 5 * 7. NFS at Home is a continuation of that experience, only with integers that are hundreds of digits long.]]></description>
- <home>California State University Fullerton</home>
+ <name>Leiden Classical</name>
+ <url>http://boinc.gorlaeus.net/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Chemistry</specific_area>
+ <description><![CDATA[Surface science calculations using Classical Dynamics. Leiden Classical allows volunteers, students and other scientist to submit their personal calculations to the grid. Each user has his own personal queue for Classical Dynamics jobs. In this way students have used the grid to simulate liquid argon, or to test the validity of the ideal gas law by actually doing the simulations through the grid.]]></description>
+ <home>Leiden University, The Netherlands</home>
<platforms>
- <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>windows_x86_64</name>
- <name>x86_64-apple-darwin</name>
- <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-unknown-linux-gnu</name>
+ <name>i686-apple-darwin</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/NFS_Logo.jpg</image>
+ <image>http://boinc.berkeley.edu/images/leiden_classical.png</image>
</project>
<project>
- <name>DistrRTgen</name>
- <url>http://boinc.freerainbowtables.com/distrrtgen/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Cryptography</specific_area>
- <description><![CDATA[To give the world's security experts the best tools available for detecting weak hashes. This can help them to force developers to use more secure methods of password protection.]]></description>
- <home>Private</home>
+ <name>eOn</name>
+ <url>http://eon.ices.utexas.edu/eon2/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Chemistry</specific_area>
+ <description><![CDATA[A common problem in theoretical chemistry, condensed matter physics and materials science is the calculation of the time evolution of an atomic scale system where, for example, chemical reactions and/or diffusion occur. Generally the events of interest are quite rare (many orders of magnitude slower than the vibrational movements of the atoms), and therefore direct simulations, tracking every movement of the atoms, would take thousands of years of computer c [...]
+ <home>University of Texas at Austin</home>
<platforms>
- <name>i386-pc-freebsd</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[cuda]</name>
- <name>windows_intelx86[ati]</name>
- <name>windows_x86_64</name>
- <name>x86_64-pc-freebsd</name>
+ <name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/freerainbowtables_logo.png</image>
</project>
<project>
- <name>PrimeGrid</name>
- <url>http://www.primegrid.com/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[Primegrid has multiple projects searching for different forms of very large prime numbers, including searching for the largest known prime number.]]></description>
- <home>Private</home>
+ <name>Asteroids at home</name>
+ <url>http://asteroidsathome.net/boinc/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Astrophysics</specific_area>
+ <description><![CDATA[The aim of the project is to derive shapes and spin for a significant part of the asteroid population. As input data, we use any asteroid photometry that is available. The results are asteroid convex shape models with the direction of the spin axis and the rotation period.]]></description>
+ <home>Charles University in Prague</home>
<platforms>
<name>arm-android-linux-gnu</name>
+ <name>arm-unknown-linux-gnueabihf</name>
+ <name>armv6l-unknown-linux-gnueabihf</name>
<name>i686-apple-darwin</name>
- <name>i686-apple-darwin[cuda]</name>
+ <name>i686-apple-darwin[sse3_osx]</name>
+ <name>i686-pc-freebsd</name>
<name>i686-pc-linux-gnu</name>
- <name>i686-pc-linux-gnu[ati]</name>
- <name>i686-pc-linux-gnu[cuda]</name>
+ <name>i686-pc-linux-gnu[avx]</name>
+ <name>i686-pc-linux-gnu[sse2]</name>
+ <name>i686-pc-linux-gnu[sse3]</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[ati]</name>
- <name>windows_intelx86[cuda]</name>
+ <name>windows_intelx86[avx]</name>
+ <name>windows_intelx86[cuda55]</name>
+ <name>windows_intelx86[sse2]</name>
+ <name>windows_intelx86[sse3]</name>
<name>windows_x86_64</name>
+ <name>windows_x86_64[avx]</name>
+ <name>windows_x86_64[cuda55]</name>
+ <name>windows_x86_64[sse2]</name>
+ <name>windows_x86_64[sse3]</name>
<name>x86_64-apple-darwin</name>
- <name>x86_64-apple-darwin[cuda]</name>
+ <name>x86_64-apple-darwin[avx_osx]</name>
+ <name>x86_64-apple-darwin[sse3_osx]</name>
+ <name>x86_64-pc-freebsd</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[ati]</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
+ <name>x86_64-pc-linux-gnu[avx]</name>
+ <name>x86_64-pc-linux-gnu[cuda55]</name>
+ <name>x86_64-pc-linux-gnu[sse2]</name>
+ <name>x86_64-pc-linux-gnu[sse3]</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/primegrid_logo.png</image>
+ <image>http://boinc.berkeley.edu/images/asteroids_logo.jpg</image>
</project>
<project>
- <name>primaboinca</name>
- <url>http://www.primaboinca.com/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Mathematics</specific_area>
- <description><![CDATA[Search for counterexamples to two conjectures related to the identification of prime numbers]]></description>
- <home>Hochschule RheinMain University of Applied Sciences</home>
+ <name>CONVECTOR</name>
+ <url>http://convector.fsv.cvut.cz/</url>
+ <general_area>Physical Science</general_area>
+ <specific_area>Mechanical engineering</specific_area>
+ <description><![CDATA[Currently we are calculating the optimum design of a structure call the 52 bar truss]]></description>
+ <home>Czech Technical University in Prague</home>
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
+ <name>windows_x86_64</name>
+ <name>x86_64-apple-darwin</name>
+ <name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/logo_primaboinca.gif</image>
+ <image>http://boinc.berkeley.edu/images/convector.jpg</image>
</project>
<project>
- <name>SubsetSum at Home</name>
- <url>http://volunteer.cs.und.edu/subset_sum/</url>
- <general_area>Mathematics, computing, and games</general_area>
- <specific_area>Computer Science</specific_area>
- <description><![CDATA[Research in computational complexity]]></description>
- <home>University of North Dakota, Computer Science Department</home>
+ <name>CAS at home</name>
+ <url>http://casathome.ihep.ac.cn/</url>
+ <general_area>Multiple applications</general_area>
+ <specific_area>Physics, biochemistry, and others</specific_area>
+ <description><![CDATA[The objective of CAS at home is to encourage and assist scientists in China to adopt the technologies of volunteer computing and volunteer thinking for their research.]]></description>
+ <home>Chinese Academy of Sciences</home>
<platforms>
<name>i686-pc-linux-gnu</name>
<name>windows_intelx86</name>
- <name>x86_64-apple-darwin</name>
- <name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/</image>
+ <image>http://boinc.berkeley.edu/images/cas_at_home.jpg</image>
</project>
<project>
- <name>Yoyo at home</name>
- <url>http://www.rechenkraft.net/yoyo/</url>
+ <name>EDGeS at Home</name>
+ <url>http://home.edges-grid.eu/home/</url>
<general_area>Multiple applications</general_area>
- <specific_area>Mathematics, physics, evolution</specific_area>
- <description><![CDATA[Yoyo at home is an adapter between BOINC and several existing volunteer computing projects: ECM, Muon, Evolution at home, and distributed.net]]></description>
- <home>Private</home>
+ <specific_area>European research projects</specific_area>
+ <description><![CDATA[The EDGeS at Home Beta project integrates volunteer computing into the service grid network of Europe by allowing service grids to send workunits to be processed by the volunteers of this project. The scientific projects covered by the project include math, physics, biology, etc.]]></description>
+ <home>MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)</home>
<platforms>
- <name>arm-android-linux-gnu</name>
- <name>arm-linux-gnu</name>
- <name>arm-unknown-linux-gnueabi</name>
- <name>arm-unknown-linux-gnueabihf</name>
- <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
- <name>powerpc-apple-darwin</name>
- <name>powerpc64-ps3-linux-gnu</name>
- <name>sparc-sun-solaris</name>
<name>windows_intelx86</name>
- <name>windows_x86_64</name>
- <name>x86_64-apple-darwin</name>
+ <name>windows_intelx86[vbox32]</name>
+ <name>windows_intelx86[vbox64]</name>
<name>x86_64-pc-linux-gnu</name>
+ <name>x86_64-pc-linux-gnu[vbox64]</name>
</platforms>
+ <image>http://boinc.berkeley.edu/images/logo_edges.png</image>
</project>
<project>
<name>Ibercivis</name>
@@ -765,28 +977,36 @@
<platforms>
<name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
- <name>i686-pc-linux-gnu[cuda]</name>
<name>windows_intelx86</name>
+ <name>windows_intelx86[cuda42i]</name>
<name>windows_x86_64</name>
<name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
- <name>x86_64-pc-linux-gnu[cuda]</name>
</platforms>
<image>http://boinc.berkeley.edu/images/cabecera2.jpg</image>
</project>
<project>
- <name>EDGeS at Home</name>
- <url>http://home.edges-grid.eu/home/</url>
+ <name>Yoyo at home</name>
+ <url>http://www.rechenkraft.net/yoyo/</url>
<general_area>Multiple applications</general_area>
- <specific_area>European research projects</specific_area>
- <description><![CDATA[The EDGeS at Home Beta project integrates volunteer computing into the service grid network of Europe by allowing service grids to send workunits to be processed by the volunteers of this project. The scientific projects covered by the project include math, physics, biology, etc.]]></description>
- <home>MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)</home>
+ <specific_area>Mathematics, physics, evolution</specific_area>
+ <description><![CDATA[Yoyo at home is an adapter between BOINC and several existing volunteer computing projects: ECM, Muon, Evolution at home, and distributed.net]]></description>
+ <home>Private</home>
<platforms>
+ <name>arm-android-linux-gnu</name>
+ <name>arm-linux-gnu</name>
+ <name>arm-unknown-linux-gnueabi</name>
+ <name>arm-unknown-linux-gnueabihf</name>
+ <name>i686-apple-darwin</name>
<name>i686-pc-linux-gnu</name>
+ <name>powerpc-apple-darwin</name>
+ <name>powerpc64-ps3-linux-gnu</name>
+ <name>sparc-sun-solaris</name>
<name>windows_intelx86</name>
+ <name>windows_x86_64</name>
+ <name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
</platforms>
- <image>http://boinc.berkeley.edu/images/logo_edges.png</image>
</project>
<project>
<name>World Community Grid</name>
@@ -800,8 +1020,8 @@
<name>i686-pc-linux-gnu</name>
<name>powerpc-apple-darwin</name>
<name>windows_intelx86</name>
- <name>windows_intelx86[ati]</name>
- <name>windows_intelx86[cuda]</name>
+ <name>windows_intelx86[ati14_opencl]</name>
+ <name>windows_intelx86[cuda_opencl]</name>
<name>windows_x86_64</name>
<name>x86_64-apple-darwin</name>
<name>x86_64-pc-linux-gnu</name>
@@ -809,19 +1029,6 @@
</platforms>
<image>http://boinc.berkeley.edu/images/wcg.jpg</image>
</project>
- <project>
- <name>CAS at home</name>
- <url>http://casathome.ihep.ac.cn/</url>
- <general_area>Multiple applications</general_area>
- <specific_area>Physics, biochemistry, and others</specific_area>
- <description><![CDATA[The objective of CAS at home is to encourage and assist scientists in China to adopt the technologies of volunteer computing and volunteer thinking for their research.]]></description>
- <home>Chinese Academy of Sciences</home>
- <platforms>
- <name>i686-pc-linux-gnu</name>
- <name>windows_intelx86</name>
- </platforms>
- <image>http://boinc.berkeley.edu/images/cas_at_home.jpg</image>
- </project>
<account_manager>
<name>BAM!</name>
<url>http://bam.boincstats.com/</url>
diff --git a/android/BOINC/assets/ca-bundle.crt b/android/BOINC/assets/ca-bundle.crt
index 72f9716..f123a06 100644
--- a/android/BOINC/assets/ca-bundle.crt
+++ b/android/BOINC/assets/ca-bundle.crt
@@ -1,7 +1,7 @@
##
## ca-bundle.crt -- Bundle of CA Root Certificates
##
-## Converted at: 7/11/2013 2:53:08 PM
+## Converted at: 1/29/2014 12:18:19 PM
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@@ -18,39 +18,6 @@
GTE CyberTrust Global Root
==========================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number: 421 (0x1a5)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root
- Validity
- Not Before: Aug 13 00:29:00 1998 GMT
- Not After : Aug 13 23:59:00 2018 GMT
- Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17:
- 0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06:
- c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28:
- 73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af:
- 8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c:
- 72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac:
- 8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87:
- 45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15:
- c7:79:b4:1f:05:2f:3b:62:99
- Exponent: 65537 (0x10001)
- Signature Algorithm: md5WithRSAEncryption
- 6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3:
- a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33:
- 81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55:
- 7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95:
- 4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7:
- a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c:
- 85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b:
- 7a:7f
-----BEGIN CERTIFICATE-----
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
@@ -69,42 +36,6 @@ lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
Thawte Server CA
================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs at thawte.com
- Validity
- Not Before: Aug 1 00:00:00 1996 GMT
- Not After : Dec 31 23:59:59 2020 GMT
- Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs at thawte.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c:
- 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da:
- 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06:
- 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2:
- 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b:
- 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90:
- 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f:
- 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36:
- 3a:c2:b5:66:22:12:d6:87:0d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: md5WithRSAEncryption
- 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9:
- a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48:
- 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88:
- 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9:
- 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5:
- e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9:
- b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e:
- 70:47
-----BEGIN CERTIFICATE-----
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
@@ -127,42 +58,6 @@ qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
Thawte Premium Server CA
========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server at thawte.com
- Validity
- Not Before: Aug 1 00:00:00 1996 GMT
- Not After : Dec 31 23:59:59 2020 GMT
- Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server at thawte.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f:
- 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18:
- 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af:
- 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2:
- 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93:
- cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44:
- 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73:
- b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07:
- 8d:f4:42:4d:e7:40:9d:1c:37
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: md5WithRSAEncryption
- 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7:
- c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5:
- 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb:
- c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59:
- 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9:
- a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92:
- 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07:
- 14:42
-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
@@ -185,56 +80,6 @@ pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
Equifax Secure CA
=================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 903804111 (0x35def4cf)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
- Validity
- Not Before: Aug 22 16:41:51 1998 GMT
- Not After : Aug 22 16:41:51 2018 GMT
- Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d:
- 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3:
- d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95:
- 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02:
- 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd:
- 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f:
- 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b:
- af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f:
- 3a:88:e7:bf:14:fd:e0:c7:b9
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 CRL Distribution Points:
- DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1
-
- X509v3 Private Key Usage Period:
- Not After: Aug 22 16:41:51 2018 GMT
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
-
- X509v3 Subject Key Identifier:
- 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
- X509v3 Basic Constraints:
- CA:TRUE
- 1.2.840.113533.7.65.0:
- 0...V3.0c....
- Signature Algorithm: sha1WithRSAEncryption
- 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0:
- 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a:
- 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71:
- 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f:
- a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14:
- 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21:
- 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07:
- 77:38
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
@@ -257,59 +102,6 @@ A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
Digital Signature Trust Co. Global CA 1
=======================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 913315222 (0x36701596)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1
- Validity
- Not Before: Dec 10 18:10:23 1998 GMT
- Not After : Dec 10 18:40:23 2018 GMT
- Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de:
- 83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c:
- a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5:
- 62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb:
- 43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8:
- bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00:
- cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3:
- be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d:
- 13:74:76:36:b5:7a:b4:2d:71
- Exponent: 3 (0x3)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 CRL Distribution Points:
- DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1
-
- X509v3 Private Key Usage Period:
- Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8
-
- X509v3 Subject Key Identifier:
- 6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8
- X509v3 Basic Constraints:
- CA:TRUE
- 1.2.840.113533.7.65.0:
- 0
-..V4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f:
- e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42:
- c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b:
- 31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c:
- a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97:
- 8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c:
- e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3:
- 8a:65
-----BEGIN CERTIFICATE-----
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
@@ -332,59 +124,6 @@ gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
Digital Signature Trust Co. Global CA 3
=======================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 913232846 (0x366ed3ce)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
- Validity
- Not Before: Dec 9 19:17:26 1998 GMT
- Not After : Dec 9 19:47:26 2018 GMT
- Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16:
- bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03:
- b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8:
- 63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce:
- 1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f:
- ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef:
- de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6:
- 17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da:
- 0c:9d:e7:91:5b:80:cd:94:9d
- Exponent: 3 (0x3)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 CRL Distribution Points:
- DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1
-
- X509v3 Private Key Usage Period:
- Not Before: Dec 9 19:17:26 1998 GMT, Not After: Dec 9 19:17:26 2018 GMT
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B
-
- X509v3 Subject Key Identifier:
- 1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B
- X509v3 Basic Constraints:
- CA:TRUE
- 1.2.840.113533.7.65.0:
- 0
-..V4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38:
- 72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5:
- d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e:
- a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec:
- b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83:
- 73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0:
- 78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3:
- a2:03
-----BEGIN CERTIFICATE-----
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
@@ -407,40 +146,6 @@ B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
Verisign Class 3 Public Primary Certification Authority
=======================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf
- Signature Algorithm: md2WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
- Validity
- Not Before: Jan 29 00:00:00 1996 GMT
- Not After : Aug 1 23:59:59 2028 GMT
- Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40:
- db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9:
- 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03:
- 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2:
- 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f:
- 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23:
- 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85:
- e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2:
- 71:64:4c:65:2e:81:68:45:a7
- Exponent: 65537 (0x10001)
- Signature Algorithm: md2WithRSAEncryption
- bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84:
- 8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f:
- 6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57:
- 81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c:
- 9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45:
- 4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6:
- 62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64:
- 0d:64
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
@@ -456,154 +161,8 @@ lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
-----END CERTIFICATE-----
-Verisign Class 1 Public Primary Certification Authority - G2
-============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 4c:c7:ea:aa:98:3e:71:d3:93:10:f8:3d:3a:89:91:92
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
- Validity
- Not Before: May 18 00:00:00 1998 GMT
- Not After : Aug 1 23:59:59 2028 GMT
- Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76:
- 31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52:
- 36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e:
- 8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35:
- eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5:
- e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d:
- 8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b:
- 51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea:
- 09:40:be:73:92:3d:6b:e7:75
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- a9:4f:c3:0d:c7:67:be:2c:cb:d9:a8:cd:2d:75:e7:7e:15:9e:
- 3b:72:eb:7e:eb:5c:2d:09:87:d6:6b:6d:60:7c:e5:ae:c5:90:
- 23:0c:5c:4a:d0:af:b1:5d:f3:c7:b6:0a:db:e0:15:93:0d:dd:
- 03:bc:c7:76:8a:b5:dd:4f:c3:9b:13:75:b8:01:c0:e6:c9:5b:
- 6b:a5:b8:89:dc:ac:a4:dd:72:ed:4e:a1:f7:4f:bc:06:d3:ea:
- c8:64:74:7b:c2:95:41:9c:65:73:58:f1:90:9a:3c:6a:b1:98:
- c9:c4:87:bc:cf:45:6d:45:e2:6e:22:3f:fe:bc:0f:31:5c:e8:
- f2:d9
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G2
-============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
- Validity
- Not Before: May 18 00:00:00 1998 GMT
- Not After : Aug 1 23:59:59 2028 GMT
- Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c:
- 0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be:
- 5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99:
- 1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08:
- 2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4:
- 42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f:
- 99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9:
- 86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff:
- 0d:6c:f5:2d:0e:6d:ce:7f:77
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8:
- 68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4:
- ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0:
- d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30:
- 17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a:
- 54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4:
- 12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44:
- b4:ae
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority - G2
============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
- Validity
- Not Before: May 18 00:00:00 1998 GMT
- Not After : Aug 1 23:59:59 2028 GMT
- Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99:
- 1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20:
- 84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9:
- 25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b:
- 33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8:
- 6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43:
- 91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97:
- 37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69:
- 61:f8:9b:1d:1c:89:4f:5c:67
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67:
- 70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b:
- 64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27:
- 3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01:
- ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69:
- 92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59:
- 57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69:
- 91:fd
-----BEGIN CERTIFICATE-----
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
@@ -626,63 +185,6 @@ oJ2daZH9
GlobalSign Root CA
==================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 04:00:00:00:00:01:15:4b:5a:c3:94
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
- Validity
- Not Before: Sep 1 12:00:00 1998 GMT
- Not After : Jan 28 12:00:00 2028 GMT
- Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:
- 83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0:
- 63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89:
- 8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c:
- 70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50:
- 15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0:
- 6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2:
- 89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7:
- 54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c:
- 92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2:
- 75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9:
- c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b:
- bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91:
- ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51:
- 63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa:
- 48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a:
- 07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93:
- 90:cf
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
- Signature Algorithm: sha1WithRSAEncryption
- d6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5:
- 7c:fc:6c:9c:2c:2b:bd:09:9e:53:bf:6b:5e:aa:11:48:b6:e5:
- 08:a3:b3:ca:3d:61:4d:d3:46:09:b3:3e:c3:a0:e3:63:55:1b:
- f2:ba:ef:ad:39:e1:43:b9:38:a3:e6:2f:8a:26:3b:ef:a0:50:
- 56:f9:c6:0a:fd:38:cd:c4:0b:70:51:94:97:98:04:df:c3:5f:
- 94:d5:15:c9:14:41:9c:c4:5d:75:64:15:0d:ff:55:30:ec:86:
- 8f:ff:0d:ef:2c:b9:63:46:f6:aa:fc:df:bc:69:fd:2e:12:48:
- 64:9a:e0:95:f0:a6:ef:29:8f:01:b1:15:b5:0c:1d:a5:fe:69:
- 2c:69:24:78:1e:b3:a7:1c:71:62:ee:ca:c8:97:ac:17:5d:8a:
- c2:f8:47:86:6e:2a:c4:56:31:95:d0:67:89:85:2b:f9:6c:a6:
- 5d:46:9d:0c:aa:82:e4:99:51:dd:70:b7:db:56:3d:61:e4:6a:
- e1:5c:d6:f6:fe:3d:de:41:cc:07:ae:63:52:bf:53:53:f4:2b:
- e9:c7:fd:b6:f7:82:5f:85:d2:41:18:db:81:b3:04:1c:c5:1f:
- a4:80:6f:15:20:c9:de:0c:88:0a:1d:d6:66:55:e2:fc:48:c9:
- 29:26:69:e0
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
@@ -707,69 +209,6 @@ HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
GlobalSign Root CA - R2
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 04:00:00:00:00:01:0f:86:26:e6:0d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign
- Validity
- Not Before: Dec 15 08:00:00 2006 GMT
- Not After : Dec 15 08:00:00 2021 GMT
- Subject: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a6:cf:24:0e:be:2e:6f:28:99:45:42:c4:ab:3e:
- 21:54:9b:0b:d3:7f:84:70:fa:12:b3:cb:bf:87:5f:
- c6:7f:86:d3:b2:30:5c:d6:fd:ad:f1:7b:dc:e5:f8:
- 60:96:09:92:10:f5:d0:53:de:fb:7b:7e:73:88:ac:
- 52:88:7b:4a:a6:ca:49:a6:5e:a8:a7:8c:5a:11:bc:
- 7a:82:eb:be:8c:e9:b3:ac:96:25:07:97:4a:99:2a:
- 07:2f:b4:1e:77:bf:8a:0f:b5:02:7c:1b:96:b8:c5:
- b9:3a:2c:bc:d6:12:b9:eb:59:7d:e2:d0:06:86:5f:
- 5e:49:6a:b5:39:5e:88:34:ec:bc:78:0c:08:98:84:
- 6c:a8:cd:4b:b4:a0:7d:0c:79:4d:f0:b8:2d:cb:21:
- ca:d5:6c:5b:7d:e1:a0:29:84:a1:f9:d3:94:49:cb:
- 24:62:91:20:bc:dd:0b:d5:d9:cc:f9:ea:27:0a:2b:
- 73:91:c6:9d:1b:ac:c8:cb:e8:e0:a0:f4:2f:90:8b:
- 4d:fb:b0:36:1b:f6:19:7a:85:e0:6d:f2:61:13:88:
- 5c:9f:e0:93:0a:51:97:8a:5a:ce:af:ab:d5:f7:aa:
- 09:aa:60:bd:dc:d9:5f:df:72:a9:60:13:5e:00:01:
- c9:4a:fa:3f:a4:ea:07:03:21:02:8e:82:ca:03:c2:
- 9b:8f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E
- X509v3 CRL Distribution Points:
- URI:http://crl.globalsign.net/root-r2.crl
-
- X509v3 Authority Key Identifier:
- keyid:9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E
-
- Signature Algorithm: sha1WithRSAEncryption
- 99:81:53:87:1c:68:97:86:91:ec:e0:4a:b8:44:0b:ab:81:ac:
- 27:4f:d6:c1:b8:1c:43:78:b3:0c:9a:fc:ea:2c:3c:6e:61:1b:
- 4d:4b:29:f5:9f:05:1d:26:c1:b8:e9:83:00:62:45:b6:a9:08:
- 93:b9:a9:33:4b:18:9a:c2:f8:87:88:4e:db:dd:71:34:1a:c1:
- 54:da:46:3f:e0:d3:2a:ab:6d:54:22:f5:3a:62:cd:20:6f:ba:
- 29:89:d7:dd:91:ee:d3:5c:a2:3e:a1:5b:41:f5:df:e5:64:43:
- 2d:e9:d5:39:ab:d2:a2:df:b7:8b:d0:c0:80:19:1c:45:c0:2d:
- 8c:e8:f8:2d:a4:74:56:49:c5:05:b5:4f:15:de:6e:44:78:39:
- 87:a8:7e:bb:f3:79:18:91:bb:f4:6f:9d:c1:f0:8c:35:8c:5d:
- 01:fb:c3:6d:b9:ef:44:6d:79:46:31:7e:0a:fe:a9:82:c1:ff:
- ef:ab:6e:20:c4:50:c9:5f:9d:4d:9b:17:8c:0c:e5:01:c9:a0:
- 41:6a:73:53:fa:a5:50:b4:6e:25:0f:fb:4c:18:f4:fd:52:d9:
- 8e:69:b1:e8:11:0f:de:88:d8:fb:1d:49:f7:aa:de:95:cf:20:
- 78:c2:60:12:db:25:40:8c:6a:fc:7e:42:38:40:64:12:f7:9e:
- 81:e1:93:2e
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
@@ -795,39 +234,6 @@ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
ValiCert Class 1 VA
===================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
- Validity
- Not Before: Jun 25 22:23:48 1999 GMT
- Not After : Jun 25 22:23:48 2019 GMT
- Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e:
- a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3:
- 4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03:
- 12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a:
- 26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8:
- 58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0:
- 3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e:
- e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76:
- 72:a0:1d:9d:1d:c0:dd:3f:71
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f:
- 71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2:
- 07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23:
- cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9:
- fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee:
- e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5:
- ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d:
- 72:c8
-----BEGIN CERTIFICATE-----
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
@@ -849,39 +255,6 @@ nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
ValiCert Class 2 VA
===================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
- Validity
- Not Before: Jun 26 00:19:54 1999 GMT
- Not After : Jun 26 00:19:54 2019 GMT
- Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74:
- 0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb:
- 98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed:
- 25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4:
- d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f:
- b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91:
- 1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64:
- 73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1:
- b3:43:bb:ef:7b:6e:2e:69:f7
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e:
- a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d:
- bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21:
- 81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99:
- 6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32:
- 3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72:
- 0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f:
- 43:dd
-----BEGIN CERTIFICATE-----
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
@@ -903,39 +276,6 @@ W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
RSA Root Certificate 1
======================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
- Validity
- Not Before: Jun 26 00:22:33 1999 GMT
- Not After : Jun 26 00:22:33 2019 GMT
- Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72:
- 75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35:
- 44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7:
- ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92:
- 97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30:
- 5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b:
- 9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04:
- 5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7:
- 43:62:61:f3:d3:e2:d0:55:3f
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d:
- f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42:
- d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f:
- 45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f:
- 89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67:
- c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d:
- 82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c:
- 15:ee
-----BEGIN CERTIFICATE-----
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
@@ -955,212 +295,8 @@ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
-----END CERTIFICATE-----
-Verisign Class 1 Public Primary Certification Authority - G3
-============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3
- Validity
- Not Before: Oct 1 00:00:00 1999 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d:
- dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d:
- ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8:
- de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e:
- f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6:
- 6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10:
- 78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3:
- 55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca:
- 14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff:
- c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e:
- 54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27:
- a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb:
- 30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29:
- bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12:
- 5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81:
- 15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7:
- a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76:
- d1:3d
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a:
- aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9:
- fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c:
- b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7:
- b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0:
- 97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f:
- 04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54:
- 73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8:
- 1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec:
- a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38:
- dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f:
- b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50:
- ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef:
- 86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f:
- a4:ef:3f:ee
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
-
-Verisign Class 2 Public Primary Certification Authority - G3
-============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3
- Validity
- Not Before: Oct 1 00:00:00 1999 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd:
- a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd:
- 3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1:
- a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10:
- ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02:
- 37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7:
- 3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56:
- 69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3:
- 48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32:
- dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7:
- 20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2:
- ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8:
- 16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5:
- 1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb:
- 1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2:
- ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11:
- 60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8:
- 3e:89
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7:
- de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5:
- fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4:
- e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33:
- 3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55:
- a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4:
- 1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63:
- 63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf:
- 7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64:
- 48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46:
- 23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45:
- aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43:
- e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33:
- 5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf:
- 4b:4b:df:2a
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority - G3
============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3
- Validity
- Not Before: Oct 1 00:00:00 1999 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd:
- f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5:
- 17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20:
- c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad:
- 2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04:
- 58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0:
- 58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32:
- 6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88:
- e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96:
- 55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79:
- 65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8:
- 46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46:
- b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c:
- 1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76:
- ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63:
- d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e:
- 1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9:
- 57:97
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de:
- db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f:
- 37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09:
- 5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5:
- 23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f:
- d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8:
- ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38:
- 62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe:
- 7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69:
- 17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00:
- cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2:
- c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af:
- 0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e:
- 81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b:
- f1:7d:dd:11
-----BEGIN CERTIFICATE-----
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
@@ -1188,56 +324,6 @@ TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
Verisign Class 4 Public Primary Certification Authority - G3
============================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3
- Validity
- Not Before: Oct 1 00:00:00 1999 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56:
- ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59:
- de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4:
- e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09:
- fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2:
- 9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86:
- 52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e:
- d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46:
- 33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1:
- 89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88:
- 02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d:
- a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea:
- c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0:
- ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2:
- 3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7:
- 45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34:
- 66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97:
- ef:03
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5:
- 0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be:
- 3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3:
- 05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02:
- 00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1:
- 32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b:
- 00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52:
- e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14:
- 5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc:
- d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83:
- 46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0:
- a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0:
- 21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01:
- a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3:
- 35:60:91:ce
-----BEGIN CERTIFICATE-----
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
@@ -1265,60 +351,6 @@ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
Entrust.net Secure Server CA
============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 927650371 (0x374ad243)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
- Validity
- Not Before: May 25 16:09:40 1999 GMT
- Not After : May 25 16:39:40 2019 GMT
- Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff:
- af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1:
- 0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81:
- 26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71:
- d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24:
- da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29:
- 92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8:
- ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81:
- b1:16:19:61:b9:54:b6:e6:43
- Exponent: 3 (0x3)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 CRL Distribution Points:
- DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1
- URI:http://www.entrust.net/CRL/net1.crl
-
- X509v3 Private Key Usage Period:
- Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A
-
- X509v3 Subject Key Identifier:
- F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A
- X509v3 Basic Constraints:
- CA:TRUE
- 1.2.840.113533.7.65.0:
- 0
-..V4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb:
- 47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d:
- f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31:
- c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb:
- a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58:
- 0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54:
- 73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06:
- f9:b2
-----BEGIN CERTIFICATE-----
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
@@ -1350,65 +382,6 @@ hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
Entrust.net Premium 2048 Secure Server CA
=========================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 946059622 (0x3863b966)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
- Validity
- Not Before: Dec 24 17:50:51 1999 GMT
- Not After : Dec 24 18:20:51 2019 GMT
- Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64:
- 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7:
- 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76:
- 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf:
- e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1:
- 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29:
- b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64:
- ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c:
- e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89:
- a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90:
- 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2:
- cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a:
- fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55:
- 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86:
- 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26:
- 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e:
- 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0:
- 07:e1
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 Authority Key Identifier:
- keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
-
- X509v3 Subject Key Identifier:
- 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
- 1.2.840.113533.7.65.0:
- 0...V5.0:4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c:
- 4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61:
- 7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73:
- ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5:
- da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4:
- 03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4:
- 15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68:
- c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c:
- 7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33:
- db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18:
- b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2:
- de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c:
- e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e:
- c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1:
- d2:69:7c:c5
-----BEGIN CERTIFICATE-----
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
@@ -1438,62 +411,6 @@ vUxFnmG6v4SBkgPR0ml8xQ==
Baltimore CyberTrust Root
=========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 33554617 (0x20000b9)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=IE, O=Baltimore, OU=CyberTrust, CN=Baltimore CyberTrust Root
- Validity
- Not Before: May 12 18:46:00 2000 GMT
- Not After : May 12 23:59:00 2025 GMT
- Subject: C=IE, O=Baltimore, OU=CyberTrust, CN=Baltimore CyberTrust Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a3:04:bb:22:ab:98:3d:57:e8:26:72:9a:b5:79:
- d4:29:e2:e1:e8:95:80:b1:b0:e3:5b:8e:2b:29:9a:
- 64:df:a1:5d:ed:b0:09:05:6d:db:28:2e:ce:62:a2:
- 62:fe:b4:88:da:12:eb:38:eb:21:9d:c0:41:2b:01:
- 52:7b:88:77:d3:1c:8f:c7:ba:b9:88:b5:6a:09:e7:
- 73:e8:11:40:a7:d1:cc:ca:62:8d:2d:e5:8f:0b:a6:
- 50:d2:a8:50:c3:28:ea:f5:ab:25:87:8a:9a:96:1c:
- a9:67:b8:3f:0c:d5:f7:f9:52:13:2f:c2:1b:d5:70:
- 70:f0:8f:c0:12:ca:06:cb:9a:e1:d9:ca:33:7a:77:
- d6:f8:ec:b9:f1:68:44:42:48:13:d2:c0:c2:a4:ae:
- 5e:60:fe:b6:a6:05:fc:b4:dd:07:59:02:d4:59:18:
- 98:63:f5:a5:63:e0:90:0c:7d:5d:b2:06:7a:f3:85:
- ea:eb:d4:03:ae:5e:84:3e:5f:ff:15:ed:69:bc:f9:
- 39:36:72:75:cf:77:52:4d:f3:c9:90:2c:b9:3d:e5:
- c9:23:53:3f:1f:24:98:21:5c:07:99:29:bd:c6:3a:
- ec:e7:6e:86:3a:6b:97:74:63:33:bd:68:18:31:f0:
- 78:8d:76:bf:fc:9e:8e:5d:2a:86:a7:4d:90:dc:27:
- 1a:39
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- E5:9D:59:30:82:47:58:CC:AC:FA:08:54:36:86:7B:3A:B5:04:4D:F0
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:3
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 85:0c:5d:8e:e4:6f:51:68:42:05:a0:dd:bb:4f:27:25:84:03:
- bd:f7:64:fd:2d:d7:30:e3:a4:10:17:eb:da:29:29:b6:79:3f:
- 76:f6:19:13:23:b8:10:0a:f9:58:a4:d4:61:70:bd:04:61:6a:
- 12:8a:17:d5:0a:bd:c5:bc:30:7c:d6:e9:0c:25:8d:86:40:4f:
- ec:cc:a3:7e:38:c6:37:11:4f:ed:dd:68:31:8e:4c:d2:b3:01:
- 74:ee:be:75:5e:07:48:1a:7f:70:ff:16:5c:84:c0:79:85:b8:
- 05:fd:7f:be:65:11:a3:0f:c0:02:b4:f8:52:37:39:04:d5:a9:
- 31:7a:18:bf:a0:2a:f4:12:99:f7:a3:45:82:e3:3c:5e:f5:9d:
- 9e:b5:c8:9e:7c:2e:c8:a4:9e:4e:08:14:4b:6d:fd:70:6d:6b:
- 1a:63:bd:64:e6:1f:b7:ce:f0:f2:9f:2e:bb:1b:b7:f2:50:88:
- 73:92:c2:e2:e3:16:8d:9a:32:02:ab:8e:18:dd:e9:10:11:ee:
- 7e:35:ab:90:af:3e:30:94:7a:d0:33:3d:a7:65:0f:f5:fc:8e:
- 9e:62:cf:47:44:2c:01:5d:bb:1d:b5:32:d2:47:d2:38:2e:d0:
- fe:81:dc:32:6a:1e:b5:ee:3c:d5:fc:e7:81:1d:19:c3:24:42:
- ea:63:39:a9
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
@@ -1518,49 +435,6 @@ R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
Equifax Secure Global eBusiness CA
==================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1
- Validity
- Not Before: Jun 21 04:00:00 1999 GMT
- Not After : Jun 21 04:00:00 2020 GMT
- Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:ba:e7:17:90:02:65:b1:34:55:3c:49:c2:51:d5:
- df:a7:d1:37:8f:d1:e7:81:73:41:52:60:9b:9d:a1:
- 17:26:78:ad:c7:b1:e8:26:94:32:b5:de:33:8d:3a:
- 2f:db:f2:9a:7a:5a:73:98:a3:5c:e9:fb:8a:73:1b:
- 5c:e7:c3:bf:80:6c:cd:a9:f4:d6:2b:c0:f7:f9:99:
- aa:63:a2:b1:47:02:0f:d4:e4:51:3a:12:3c:6c:8a:
- 5a:54:84:70:db:c1:c5:90:cf:72:45:cb:a8:59:c0:
- cd:33:9d:3f:a3:96:eb:85:33:21:1c:3e:1e:3e:60:
- 6e:76:9c:67:85:c5:c8:c3:61
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C
-
- X509v3 Subject Key Identifier:
- BE:A8:A0:74:72:50:6B:44:B7:C9:23:D8:FB:A8:FF:B3:57:6B:68:6C
- Signature Algorithm: md5WithRSAEncryption
- 30:e2:01:51:aa:c7:ea:5f:da:b9:d0:65:0f:30:d6:3e:da:0d:
- 14:49:6e:91:93:27:14:31:ef:c4:f7:2d:45:f8:ec:c7:bf:a2:
- 41:0d:23:b4:92:f9:19:00:67:bd:01:af:cd:e0:71:fc:5a:cf:
- 64:c4:e0:96:98:d0:a3:40:e2:01:8a:ef:27:07:f1:65:01:8a:
- 44:2d:06:65:75:52:c0:86:10:20:21:5f:6c:6b:0f:6c:ae:09:
- 1c:af:f2:a2:18:34:c4:75:a4:73:1c:f1:8d:dc:ef:ad:f9:b3:
- 76:b4:92:bf:dc:95:10:1e:be:cb:c8:3b:5a:84:60:19:56:94:
- a9:55
-----BEGIN CERTIFICATE-----
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
@@ -1580,49 +454,6 @@ Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
Equifax Secure eBusiness CA 1
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 4 (0x4)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure eBusiness CA-1
- Validity
- Not Before: Jun 21 04:00:00 1999 GMT
- Not After : Jun 21 04:00:00 2020 GMT
- Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure eBusiness CA-1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:ce:2f:19:bc:17:b7:77:de:93:a9:5f:5a:0d:17:
- 4f:34:1a:0c:98:f4:22:d9:59:d4:c4:68:46:f0:b4:
- 35:c5:85:03:20:c6:af:45:a5:21:51:45:41:eb:16:
- 58:36:32:6f:e2:50:62:64:f9:fd:51:9c:aa:24:d9:
- f4:9d:83:2a:87:0a:21:d3:12:38:34:6c:8d:00:6e:
- 5a:a0:d9:42:ee:1a:21:95:f9:52:4c:55:5a:c5:0f:
- 38:4f:46:fa:6d:f8:2e:35:d6:1d:7c:eb:e2:f0:b0:
- 75:80:c8:a9:13:ac:be:88:ef:3a:6e:ab:5f:2a:38:
- 62:02:b0:12:7b:fe:8f:a6:03
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:4A:78:32:52:11:DB:59:16:36:5E:DF:C1:14:36:40:6A:47:7C:4C:A1
-
- X509v3 Subject Key Identifier:
- 4A:78:32:52:11:DB:59:16:36:5E:DF:C1:14:36:40:6A:47:7C:4C:A1
- Signature Algorithm: md5WithRSAEncryption
- 75:5b:a8:9b:03:11:e6:e9:56:4c:cd:f9:a9:4c:c0:0d:9a:f3:
- cc:65:69:e6:25:76:cc:59:b7:d6:54:c3:1d:cd:99:ac:19:dd:
- b4:85:d5:e0:3d:fc:62:20:a7:84:4b:58:65:f1:e2:f9:95:21:
- 3f:f5:d4:7e:58:1e:47:87:54:3e:58:a1:b5:b5:f8:2a:ef:71:
- e7:bc:c3:f6:b1:49:46:e2:d7:a0:6b:e5:56:7a:9a:27:98:7c:
- 46:62:14:e7:c9:fc:6e:03:12:79:80:38:1d:48:82:8d:fc:17:
- fe:2a:96:2b:b5:62:a6:a6:3d:bd:7f:92:59:cd:5a:2a:82:b2:
- 37:79
-----BEGIN CERTIFICATE-----
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
@@ -1642,56 +473,6 @@ WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
Equifax Secure eBusiness CA 2
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 930140085 (0x3770cfb5)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Equifax Secure, OU=Equifax Secure eBusiness CA-2
- Validity
- Not Before: Jun 23 12:14:45 1999 GMT
- Not After : Jun 23 12:14:45 2019 GMT
- Subject: C=US, O=Equifax Secure, OU=Equifax Secure eBusiness CA-2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:e4:39:39:93:1e:52:06:1b:28:36:f8:b2:a3:29:
- c5:ed:8e:b2:11:bd:fe:eb:e7:b4:74:c2:8f:ff:05:
- e7:d9:9d:06:bf:12:c8:3f:0e:f2:d6:d1:24:b2:11:
- de:d1:73:09:8a:d4:b1:2c:98:09:0d:1e:50:46:b2:
- 83:a6:45:8d:62:68:bb:85:1b:20:70:32:aa:40:cd:
- a6:96:5f:c4:71:37:3f:04:f3:b7:41:24:39:07:1a:
- 1e:2e:61:58:a0:12:0b:e5:a5:df:c5:ab:ea:37:71:
- cc:1c:c8:37:3a:b9:97:52:a7:ac:c5:6a:24:94:4e:
- 9c:7b:cf:c0:6a:d6:df:21:bd
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 CRL Distribution Points:
- DirName:/C=US/O=Equifax Secure/OU=Equifax Secure eBusiness CA-2/CN=CRL1
-
- X509v3 Private Key Usage Period:
- Not After: Jun 23 12:14:45 2019 GMT
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:50:9E:0B:EA:AF:5E:B9:20:48:A6:50:6A:CB:FD:D8:20:7A:A7:82:76
-
- X509v3 Subject Key Identifier:
- 50:9E:0B:EA:AF:5E:B9:20:48:A6:50:6A:CB:FD:D8:20:7A:A7:82:76
- X509v3 Basic Constraints:
- CA:TRUE
- 1.2.840.113533.7.65.0:
- 0...V3.0c....
- Signature Algorithm: sha1WithRSAEncryption
- 0c:86:82:ad:e8:4e:1a:f5:8e:89:27:e2:35:58:3d:29:b4:07:
- 8f:36:50:95:bf:6e:c1:9e:eb:c4:90:b2:85:a8:bb:b7:42:e0:
- 0f:07:39:df:fb:9e:90:b2:d1:c1:3e:53:9f:03:44:b0:7e:4b:
- f4:6f:e4:7c:1f:e7:e2:b1:e4:b8:9a:ef:c3:bd:ce:de:0b:32:
- 34:d9:de:28:ed:33:6b:c4:d4:d7:3d:12:58:ab:7d:09:2d:cb:
- 70:f5:13:8a:94:a1:27:a4:d6:70:c5:6d:94:b5:c9:7d:9d:a0:
- d2:c6:08:49:d9:66:9b:a6:d3:f4:0b:dc:c5:26:57:e1:91:30:
- ea:cd
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
@@ -1714,67 +495,6 @@ E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
AddTrust Low-Value Services Root
================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Class 1 CA Root
- Validity
- Not Before: May 30 10:38:31 2000 GMT
- Not After : May 30 10:38:31 2020 GMT
- Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Class 1 CA Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:96:96:d4:21:49:60:e2:6b:e8:41:07:0c:de:c4:
- e0:dc:13:23:cd:c1:35:c7:fb:d6:4e:11:0a:67:5e:
- f5:06:5b:6b:a5:08:3b:5b:29:16:3a:e7:87:b2:34:
- 06:c5:bc:05:a5:03:7c:82:cb:29:10:ae:e1:88:81:
- bd:d6:9e:d3:fe:2d:56:c1:15:ce:e3:26:9d:15:2e:
- 10:fb:06:8f:30:04:de:a7:b4:63:b4:ff:b1:9c:ae:
- 3c:af:77:b6:56:c5:b5:ab:a2:e9:69:3a:3d:0e:33:
- 79:32:3f:70:82:92:99:61:6d:8d:30:08:8f:71:3f:
- a6:48:57:19:f8:25:dc:4b:66:5c:a5:74:8f:98:ae:
- c8:f9:c0:06:22:e7:ac:73:df:a5:2e:fb:52:dc:b1:
- 15:65:20:fa:35:66:69:de:df:2c:f1:6e:bc:30:db:
- 2c:24:12:db:eb:35:35:68:90:cb:00:b0:97:21:3d:
- 74:21:23:65:34:2b:bb:78:59:a3:d6:e1:76:39:9a:
- a4:49:8e:8c:74:af:6e:a4:9a:a3:d9:9b:d2:38:5c:
- 9b:a2:18:cc:75:23:84:be:eb:e2:4d:33:71:8e:1a:
- f0:c2:f8:c7:1d:a2:ad:03:97:2c:f8:cf:25:c6:f6:
- b8:24:31:b1:63:5d:92:7f:63:f0:25:c9:53:2e:1f:
- bf:4d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B
- DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Class 1 CA Root
- serial:01
-
- Signature Algorithm: sha1WithRSAEncryption
- 2c:6d:64:1b:1f:cd:0d:dd:b9:01:fa:96:63:34:32:48:47:99:
- ae:97:ed:fd:72:16:a6:73:47:5a:f4:eb:dd:e9:f5:d6:fb:45:
- cc:29:89:44:5d:bf:46:39:3d:e8:ee:bc:4d:54:86:1e:1d:6c:
- e3:17:27:43:e1:89:56:2b:a9:6f:72:4e:49:33:e3:72:7c:2a:
- 23:9a:bc:3e:ff:28:2a:ed:a3:ff:1c:23:ba:43:57:09:67:4d:
- 4b:62:06:2d:f8:ff:6c:9d:60:1e:d8:1c:4b:7d:b5:31:2f:d9:
- d0:7c:5d:f8:de:6b:83:18:78:37:57:2f:e8:33:07:67:df:1e:
- c7:6b:2a:95:76:ae:8f:57:a3:f0:f4:52:b4:a9:53:08:cf:e0:
- 4f:d3:7a:53:8b:fd:bb:1c:56:36:f2:fe:b2:b6:e5:76:bb:d5:
- 22:65:a7:3f:fe:d1:66:ad:0b:bc:6b:99:86:ef:3f:7d:f3:18:
- 32:ca:7b:c6:e3:ab:64:46:95:f8:26:69:d9:55:83:7b:2c:96:
- 07:ff:59:2c:44:a3:c6:e5:e9:a9:dc:a1:63:80:5a:21:5e:21:
- cf:53:54:f0:ba:6f:89:db:a8:aa:95:cf:8b:e3:71:cc:1e:1b:
- 20:44:08:c0:7a:b6:40:fd:c4:e4:35:e1:1d:16:1c:d0:bc:2b:
- 8e:d6:71:d9
-----BEGIN CERTIFICATE-----
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
@@ -1802,67 +522,6 @@ WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
AddTrust External Root
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
- Validity
- Not Before: May 30 10:48:38 2000 GMT
- Not After : May 30 10:48:38 2020 GMT
- Subject: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b7:f7:1a:33:e6:f2:00:04:2d:39:e0:4e:5b:ed:
- 1f:bc:6c:0f:cd:b5:fa:23:b6:ce:de:9b:11:33:97:
- a4:29:4c:7d:93:9f:bd:4a:bc:93:ed:03:1a:e3:8f:
- cf:e5:6d:50:5a:d6:97:29:94:5a:80:b0:49:7a:db:
- 2e:95:fd:b8:ca:bf:37:38:2d:1e:3e:91:41:ad:70:
- 56:c7:f0:4f:3f:e8:32:9e:74:ca:c8:90:54:e9:c6:
- 5f:0f:78:9d:9a:40:3c:0e:ac:61:aa:5e:14:8f:9e:
- 87:a1:6a:50:dc:d7:9a:4e:af:05:b3:a6:71:94:9c:
- 71:b3:50:60:0a:c7:13:9d:38:07:86:02:a8:e9:a8:
- 69:26:18:90:ab:4c:b0:4f:23:ab:3a:4f:84:d8:df:
- ce:9f:e1:69:6f:bb:d7:42:d7:6b:44:e4:c7:ad:ee:
- 6d:41:5f:72:5a:71:08:37:b3:79:65:a4:59:a0:94:
- 37:f7:00:2f:0d:c2:92:72:da:d0:38:72:db:14:a8:
- 45:c4:5d:2a:7d:b7:b4:d6:c4:ee:ac:cd:13:44:b7:
- c9:2b:dd:43:00:25:fa:61:b9:69:6a:58:23:11:b7:
- a7:33:8f:56:75:59:f5:cd:29:d7:46:b7:0a:2b:65:
- b6:d3:42:6f:15:b2:b8:7b:fb:ef:e9:5d:53:d5:34:
- 5a:27
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A
- DirName:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
- serial:01
-
- Signature Algorithm: sha1WithRSAEncryption
- b0:9b:e0:85:25:c2:d6:23:e2:0f:96:06:92:9d:41:98:9c:d9:
- 84:79:81:d9:1e:5b:14:07:23:36:65:8f:b0:d8:77:bb:ac:41:
- 6c:47:60:83:51:b0:f9:32:3d:e7:fc:f6:26:13:c7:80:16:a5:
- bf:5a:fc:87:cf:78:79:89:21:9a:e2:4c:07:0a:86:35:bc:f2:
- de:51:c4:d2:96:b7:dc:7e:4e:ee:70:fd:1c:39:eb:0c:02:51:
- 14:2d:8e:bd:16:e0:c1:df:46:75:e7:24:ad:ec:f4:42:b4:85:
- 93:70:10:67:ba:9d:06:35:4a:18:d3:2b:7a:cc:51:42:a1:7a:
- 63:d1:e6:bb:a1:c5:2b:c2:36:be:13:0d:e6:bd:63:7e:79:7b:
- a7:09:0d:40:ab:6a:dd:8f:8a:c3:f6:f6:8c:1a:42:05:51:d4:
- 45:f5:9f:a7:62:21:68:15:20:43:3c:99:e7:7c:bd:24:d8:a9:
- 91:17:73:88:3f:56:1b:31:38:18:b4:71:0f:9a:cd:c8:0e:9e:
- 8e:2e:1b:e1:8c:98:83:cb:1f:31:f1:44:4c:c6:04:73:49:76:
- 60:0f:c7:f8:bd:17:80:6b:2e:e9:cc:4c:0e:5a:9a:79:0f:20:
- 0a:2e:d5:9e:63:26:1e:55:92:94:d8:82:17:5a:7b:d0:bc:c7:
- 8f:4e:86:04
-----BEGIN CERTIFICATE-----
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
@@ -1891,67 +550,6 @@ mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
AddTrust Public Services Root
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Public CA Root
- Validity
- Not Before: May 30 10:41:50 2000 GMT
- Not After : May 30 10:41:50 2020 GMT
- Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Public CA Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e9:1a:30:8f:83:88:14:c1:20:d8:3c:9b:8f:1b:
- 7e:03:74:bb:da:69:d3:46:a5:f8:8e:c2:0c:11:90:
- 51:a5:2f:66:54:40:55:ea:db:1f:4a:56:ee:9f:23:
- 6e:f4:39:cb:a1:b9:6f:f2:7e:f9:5d:87:26:61:9e:
- 1c:f8:e2:ec:a6:81:f8:21:c5:24:cc:11:0c:3f:db:
- 26:72:7a:c7:01:97:07:17:f9:d7:18:2c:30:7d:0e:
- 7a:1e:62:1e:c6:4b:c0:fd:7d:62:77:d3:44:1e:27:
- f6:3f:4b:44:b3:b7:38:d9:39:1f:60:d5:51:92:73:
- 03:b4:00:69:e3:f3:14:4e:ee:d1:dc:09:cf:77:34:
- 46:50:b0:f8:11:f2:fe:38:79:f7:07:39:fe:51:92:
- 97:0b:5b:08:5f:34:86:01:ad:88:97:eb:66:cd:5e:
- d1:ff:dc:7d:f2:84:da:ba:77:ad:dc:80:08:c7:a7:
- 87:d6:55:9f:97:6a:e8:c8:11:64:ba:e7:19:29:3f:
- 11:b3:78:90:84:20:52:5b:11:ef:78:d0:83:f6:d5:
- 48:90:d0:30:1c:cf:80:f9:60:fe:79:e4:88:f2:dd:
- 00:eb:94:45:eb:65:94:69:40:ba:c0:d5:b4:b8:ba:
- 7d:04:11:a8:eb:31:05:96:94:4e:58:21:8e:9f:d0:
- 60:fd
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 81:3E:37:D8:92:B0:1F:77:9F:5C:B4:AB:73:AA:E7:F6:34:60:2F:FA
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:81:3E:37:D8:92:B0:1F:77:9F:5C:B4:AB:73:AA:E7:F6:34:60:2F:FA
- DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Public CA Root
- serial:01
-
- Signature Algorithm: sha1WithRSAEncryption
- 03:f7:15:4a:f8:24:da:23:56:16:93:76:dd:36:28:b9:ae:1b:
- b8:c3:f1:64:ba:20:18:78:95:29:27:57:05:bc:7c:2a:f4:b9:
- 51:55:da:87:02:de:0f:16:17:31:f8:aa:79:2e:09:13:bb:af:
- b2:20:19:12:e5:93:f9:4b:f9:83:e8:44:d5:b2:41:25:bf:88:
- 75:6f:ff:10:fc:4a:54:d0:5f:f0:fa:ef:36:73:7d:1b:36:45:
- c6:21:6d:b4:15:b8:4e:cf:9c:5c:a5:3d:5a:00:8e:06:e3:3c:
- 6b:32:7b:f2:9f:f0:b6:fd:df:f0:28:18:48:f0:c6:bc:d0:bf:
- 34:80:96:c2:4a:b1:6d:8e:c7:90:45:de:2f:67:ac:45:04:a3:
- 7a:dc:55:92:c9:47:66:d8:1a:8c:c7:ed:9c:4e:9a:e0:12:bb:
- b5:6a:4c:84:e1:e1:22:0d:87:00:64:fe:8c:7d:62:39:65:a6:
- ef:42:b6:80:25:12:61:01:a8:24:13:70:00:11:26:5f:fa:35:
- 50:c5:48:cc:06:47:e8:27:d8:70:8d:5f:64:e6:a1:44:26:5e:
- 22:ec:92:cd:ff:42:9a:44:21:6d:5c:c5:e3:22:1d:5f:47:12:
- e7:ce:5f:5d:fa:d8:aa:b1:33:2d:d9:76:f2:4e:3a:33:0c:2b:
- b3:2d:90:06
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
@@ -1979,67 +577,6 @@ XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
AddTrust Qualified Certificates Root
====================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Qualified CA Root
- Validity
- Not Before: May 30 10:44:50 2000 GMT
- Not After : May 30 10:44:50 2020 GMT
- Subject: C=SE, O=AddTrust AB, OU=AddTrust TTP Network, CN=AddTrust Qualified CA Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e4:1e:9a:fe:dc:09:5a:87:a4:9f:47:be:11:5f:
- af:84:34:db:62:3c:79:78:b7:e9:30:b5:ec:0c:1c:
- 2a:c4:16:ff:e0:ec:71:eb:8a:f5:11:6e:ed:4f:0d:
- 91:d2:12:18:2d:49:15:01:c2:a4:22:13:c7:11:64:
- ff:22:12:9a:b9:8e:5c:2f:08:cf:71:6a:b3:67:01:
- 59:f1:5d:46:f3:b0:78:a5:f6:0e:42:7a:e3:7f:1b:
- cc:d0:f0:b7:28:fd:2a:ea:9e:b3:b0:b9:04:aa:fd:
- f6:c7:b4:b1:b8:2a:a0:fb:58:f1:19:a0:6f:70:25:
- 7e:3e:69:4a:7f:0f:22:d8:ef:ad:08:11:9a:29:99:
- e1:aa:44:45:9a:12:5e:3e:9d:6d:52:fc:e7:a0:3d:
- 68:2f:f0:4b:70:7c:13:38:ad:bc:15:25:f1:d6:ce:
- ab:a2:c0:31:d6:2f:9f:e0:ff:14:59:fc:84:93:d9:
- 87:7c:4c:54:13:eb:9f:d1:2d:11:f8:18:3a:3a:de:
- 25:d9:f7:d3:40:ed:a4:06:12:c4:3b:e1:91:c1:56:
- 35:f0:14:dc:65:36:09:6e:ab:a4:07:c7:35:d1:c2:
- 03:33:36:5b:75:26:6d:42:f1:12:6b:43:6f:4b:71:
- 94:fa:34:1d:ed:13:6e:ca:80:7f:98:2f:6c:b9:65:
- d8:e9
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 39:95:8B:62:8B:5C:C9:D4:80:BA:58:0F:97:3F:15:08:43:CC:98:A7
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:39:95:8B:62:8B:5C:C9:D4:80:BA:58:0F:97:3F:15:08:43:CC:98:A7
- DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Qualified CA Root
- serial:01
-
- Signature Algorithm: sha1WithRSAEncryption
- 19:ab:75:ea:f8:8b:65:61:95:13:ba:69:04:ef:86:ca:13:a0:
- c7:aa:4f:64:1b:3f:18:f6:a8:2d:2c:55:8f:05:b7:30:ea:42:
- 6a:1d:c0:25:51:2d:a7:bf:0c:b3:ed:ef:08:7f:6c:3c:46:1a:
- ea:18:43:df:76:cc:f9:66:86:9c:2c:68:f5:e9:17:f8:31:b3:
- 18:c4:d6:48:7d:23:4c:68:c1:7e:bb:01:14:6f:c5:d9:6e:de:
- bb:04:42:6a:f8:f6:5c:7d:e5:da:fa:87:eb:0d:35:52:67:d0:
- 9e:97:76:05:93:3f:95:c7:01:e6:69:55:38:7f:10:61:99:c9:
- e3:5f:a6:ca:3e:82:63:48:aa:e2:08:48:3e:aa:f2:b2:85:62:
- a6:b4:a7:d9:bd:37:9c:68:b5:2d:56:7d:b0:b7:3f:a0:b1:07:
- d6:e9:4f:dc:de:45:71:30:32:7f:1b:2e:09:f9:bf:52:a1:ee:
- c2:80:3e:06:5c:2e:55:40:c1:1b:f5:70:45:b0:dc:5d:fa:f6:
- 72:5a:77:d2:63:cd:cf:58:89:00:42:63:3f:79:39:d0:44:b0:
- 82:6e:41:19:e8:dd:e0:c1:88:5a:d1:1e:71:93:1f:24:30:74:
- e5:1e:a8:de:3c:27:37:7f:83:ae:9e:77:cf:f0:30:b1:ff:4b:
- 99:e8:c6:a1
-----BEGIN CERTIFICATE-----
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
@@ -2068,69 +605,6 @@ xqE=
Entrust Root Certification Authority
====================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1164660820 (0x456b5054)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
- Validity
- Not Before: Nov 27 20:23:42 2006 GMT
- Not After : Nov 27 20:53:42 2026 GMT
- Subject: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b6:95:b6:43:42:fa:c6:6d:2a:6f:48:df:94:4c:
- 39:57:05:ee:c3:79:11:41:68:36:ed:ec:fe:9a:01:
- 8f:a1:38:28:fc:f7:10:46:66:2e:4d:1e:1a:b1:1a:
- 4e:c6:d1:c0:95:88:b0:c9:ff:31:8b:33:03:db:b7:
- 83:7b:3e:20:84:5e:ed:b2:56:28:a7:f8:e0:b9:40:
- 71:37:c5:cb:47:0e:97:2a:68:c0:22:95:62:15:db:
- 47:d9:f5:d0:2b:ff:82:4b:c9:ad:3e:de:4c:db:90:
- 80:50:3f:09:8a:84:00:ec:30:0a:3d:18:cd:fb:fd:
- 2a:59:9a:23:95:17:2c:45:9e:1f:6e:43:79:6d:0c:
- 5c:98:fe:48:a7:c5:23:47:5c:5e:fd:6e:e7:1e:b4:
- f6:68:45:d1:86:83:5b:a2:8a:8d:b1:e3:29:80:fe:
- 25:71:88:ad:be:bc:8f:ac:52:96:4b:aa:51:8d:e4:
- 13:31:19:e8:4e:4d:9f:db:ac:b3:6a:d5:bc:39:54:
- 71:ca:7a:7a:7f:90:dd:7d:1d:80:d9:81:bb:59:26:
- c2:11:fe:e6:93:e2:f7:80:e4:65:fb:34:37:0e:29:
- 80:70:4d:af:38:86:2e:9e:7f:57:af:9e:17:ae:eb:
- 1c:cb:28:21:5f:b6:1c:d8:e7:a2:04:22:f9:d3:da:
- d8:cb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Private Key Usage Period:
- Not Before: Nov 27 20:23:42 2006 GMT, Not After: Nov 27 20:53:42 2026 GMT
- X509v3 Authority Key Identifier:
- keyid:68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
-
- X509v3 Subject Key Identifier:
- 68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
- 1.2.840.113533.7.65.0:
- 0...V7.1:4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 93:d4:30:b0:d7:03:20:2a:d0:f9:63:e8:91:0c:05:20:a9:5f:
- 19:ca:7b:72:4e:d4:b1:db:d0:96:fb:54:5a:19:2c:0c:08:f7:
- b2:bc:85:a8:9d:7f:6d:3b:52:b3:2a:db:e7:d4:84:8c:63:f6:
- 0f:cb:26:01:91:50:6c:f4:5f:14:e2:93:74:c0:13:9e:30:3a:
- 50:e3:b4:60:c5:1c:f0:22:44:8d:71:47:ac:c8:1a:c9:e9:9b:
- 9a:00:60:13:ff:70:7e:5f:11:4d:49:1b:b3:15:52:7b:c9:54:
- da:bf:9d:95:af:6b:9a:d8:9e:e9:f1:e4:43:8d:e2:11:44:3a:
- bf:af:bd:83:42:73:52:8b:aa:bb:a7:29:cf:f5:64:1c:0a:4d:
- d1:bc:aa:ac:9f:2a:d0:ff:7f:7f:da:7d:ea:b1:ed:30:25:c1:
- 84:da:34:d2:5b:78:83:56:ec:9c:36:c3:26:e2:11:f6:67:49:
- 1d:92:ab:8c:fb:eb:ff:7a:ee:85:4a:a7:50:80:f0:a7:5c:4a:
- 94:2e:5f:05:99:3c:52:41:e0:cd:b4:63:cf:01:43:ba:9c:83:
- dc:8f:60:3b:f3:5a:b4:b4:7b:ae:da:0b:90:38:75:ef:81:1d:
- 66:d2:f7:57:70:36:b3:bf:fc:28:af:71:25:85:5b:13:fe:1e:
- 7f:5a:b4:3c
-----BEGIN CERTIFICATE-----
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
@@ -2161,66 +635,6 @@ eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
RSA Security 2048 v3
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 0a:01:01:01:00:00:02:7c:00:00:00:0a:00:00:00:02
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: O=RSA Security Inc, OU=RSA Security 2048 V3
- Validity
- Not Before: Feb 22 20:39:23 2001 GMT
- Not After : Feb 22 20:39:23 2026 GMT
- Subject: O=RSA Security Inc, OU=RSA Security 2048 V3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b7:8f:55:71:d2:80:dd:7b:69:79:a7:f0:18:50:
- 32:3c:62:67:f6:0a:95:07:dd:e6:1b:f3:9e:d9:d2:
- 41:54:6b:ad:9f:7c:be:19:cd:fb:46:ab:41:68:1e:
- 18:ea:55:c8:2f:91:78:89:28:fb:27:29:60:ff:df:
- 8f:8c:3b:c9:49:9b:b5:a4:94:ce:01:ea:3e:b5:63:
- 7b:7f:26:fd:19:dd:c0:21:bd:84:d1:2d:4f:46:c3:
- 4e:dc:d8:37:39:3b:28:af:cb:9d:1a:ea:2b:af:21:
- a5:c1:23:22:b8:b8:1b:5a:13:87:57:83:d1:f0:20:
- e7:e8:4f:23:42:b0:00:a5:7d:89:e9:e9:61:73:94:
- 98:71:26:bc:2d:6a:e0:f7:4d:f0:f1:b6:2a:38:31:
- 81:0d:29:e1:00:c1:51:0f:4c:52:f8:04:5a:aa:7d:
- 72:d3:b8:87:2a:bb:63:10:03:2a:b3:a1:4f:0d:5a:
- 5e:46:b7:3d:0e:f5:74:ec:99:9f:f9:3d:24:81:88:
- a6:dd:60:54:e8:95:36:3d:c6:09:93:9a:a3:12:80:
- 00:55:99:19:47:bd:d0:a5:7c:c3:ba:fb:1f:f7:f5:
- 0f:f8:ac:b9:b5:f4:37:98:13:18:de:85:5b:b7:0c:
- 82:3b:87:6f:95:39:58:30:da:6e:01:68:17:22:cc:
- c0:0b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:07:C3:51:30:A4:AA:E9:45:AE:35:24:FA:FF:24:2C:33:D0:B1:9D:8C
-
- X509v3 Subject Key Identifier:
- 07:C3:51:30:A4:AA:E9:45:AE:35:24:FA:FF:24:2C:33:D0:B1:9D:8C
- Signature Algorithm: sha1WithRSAEncryption
- 5f:3e:86:76:6e:b8:35:3c:4e:36:1c:1e:79:98:bf:fd:d5:12:
- 11:79:52:0e:ee:31:89:bc:dd:7f:f9:d1:c6:15:21:e8:8a:01:
- 54:0d:3a:fb:54:b9:d6:63:d4:b1:aa:96:4d:a2:42:4d:d4:53:
- 1f:8b:10:de:7f:65:be:60:13:27:71:88:a4:73:e3:84:63:d1:
- a4:55:e1:50:93:e6:1b:0e:79:d0:67:bc:46:c8:bf:3f:17:0d:
- 95:e6:c6:90:69:de:e7:b4:2f:de:95:7d:d0:12:3f:3d:3e:7f:
- 4d:3f:14:68:f5:11:50:d5:c1:f4:90:a5:08:1d:31:60:ff:60:
- 8c:23:54:0a:af:fe:a1:6e:c5:d1:7a:2a:68:78:cf:1e:82:0a:
- 20:b4:1f:ad:e5:85:b2:6a:68:75:4e:ad:25:37:94:85:be:bd:
- a1:d4:ea:b7:0c:4b:3c:9d:e8:12:00:f0:5f:ac:0d:e1:ac:70:
- 63:73:f7:7f:79:9f:32:25:42:74:05:80:28:bf:bd:c1:24:96:
- 58:15:b1:17:21:e9:89:4b:db:07:88:67:f4:15:ad:70:3e:2f:
- 4d:85:3b:c2:b7:db:fe:98:68:23:89:e1:74:0f:de:f4:c5:84:
- 63:29:1b:cc:cb:07:c9:00:a4:a9:d7:c2:22:4f:67:d7:77:ec:
- 20:05:61:de
-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
@@ -2245,63 +659,6 @@ rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
GeoTrust Global CA
==================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 144470 (0x23456)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
- Validity
- Not Before: May 21 04:00:00 2002 GMT
- Not After : May 21 04:00:00 2022 GMT
- Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df:
- 3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8:
- 43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29:
- bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4:
- 60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3:
- ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92:
- 2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d:
- 80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14:
- 15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd:
- d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6:
- d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5:
- 5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39:
- 19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05:
- 9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2:
- fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32:
- eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07:
- 36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b:
- e4:f9
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
- X509v3 Authority Key Identifier:
- keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
-
- Signature Algorithm: sha1WithRSAEncryption
- 35:e3:29:6a:e5:2f:5d:54:8e:29:50:94:9f:99:1a:14:e4:8f:
- 78:2a:62:94:a2:27:67:9e:d0:cf:1a:5e:47:e9:c1:b2:a4:cf:
- dd:41:1a:05:4e:9b:4b:ee:4a:6f:55:52:b3:24:a1:37:0a:eb:
- 64:76:2a:2e:2c:f3:fd:3b:75:90:bf:fa:71:d8:c7:3d:37:d2:
- b5:05:95:62:b9:a6:de:89:3d:36:7b:38:77:48:97:ac:a6:20:
- 8f:2e:a6:c9:0c:c2:b2:99:45:00:c7:ce:11:51:22:22:e0:a5:
- ea:b6:15:48:09:64:ea:5e:4f:74:f7:05:3e:c7:8a:52:0c:db:
- 15:b4:bd:6d:9b:e5:c6:b1:54:68:a9:e3:69:90:b6:9a:a5:0f:
- b8:b9:3f:20:7d:ae:4a:b5:b8:9c:e4:1d:b6:ab:e6:94:a5:c1:
- c7:83:ad:db:f5:27:87:0e:04:6c:d5:ff:dd:a0:5d:ed:87:52:
- b7:2b:15:02:ae:39:a6:6a:74:e9:da:c4:e7:bc:4d:34:1e:a9:
- 5c:4d:33:5f:92:09:2f:88:66:5d:77:97:c7:1d:76:13:a9:d5:
- e5:f1:16:09:11:35:d5:ac:db:24:71:70:2c:98:56:0b:d9:17:
- b4:d1:e3:51:2b:5e:75:e8:d5:d0:dc:4f:34:ed:c2:05:66:80:
- a1:cb:e6:33
-----BEGIN CERTIFICATE-----
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
@@ -2325,65 +682,6 @@ hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
GeoTrust Global CA 2
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA 2
- Validity
- Not Before: Mar 4 05:00:00 2004 GMT
- Not After : Mar 4 05:00:00 2019 GMT
- Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA 2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ef:3c:4d:40:3d:10:df:3b:53:00:e1:67:fe:94:
- 60:15:3e:85:88:f1:89:0d:90:c8:28:23:99:05:e8:
- 2b:20:9d:c6:f3:60:46:d8:c1:b2:d5:8c:31:d9:dc:
- 20:79:24:81:bf:35:32:fc:63:69:db:b1:2a:6b:ee:
- 21:58:f2:08:e9:78:cb:6f:cb:fc:16:52:c8:91:c4:
- ff:3d:73:de:b1:3e:a7:c2:7d:66:c1:f5:7e:52:24:
- 1a:e2:d5:67:91:d0:82:10:d7:78:4b:4f:2b:42:39:
- bd:64:2d:40:a0:b0:10:d3:38:48:46:88:a1:0c:bb:
- 3a:33:2a:62:98:fb:00:9d:13:59:7f:6f:3b:72:aa:
- ee:a6:0f:86:f9:05:61:ea:67:7f:0c:37:96:8b:e6:
- 69:16:47:11:c2:27:59:03:b3:a6:60:c2:21:40:56:
- fa:a0:c7:7d:3a:13:e3:ec:57:c7:b3:d6:ae:9d:89:
- 80:f7:01:e7:2c:f6:96:2b:13:0d:79:2c:d9:c0:e4:
- 86:7b:4b:8c:0c:72:82:8a:fb:17:cd:00:6c:3a:13:
- 3c:b0:84:87:4b:16:7a:29:b2:4f:db:1d:d4:0b:f3:
- 66:37:bd:d8:f6:57:bb:5e:24:7a:b8:3c:8b:b9:fa:
- 92:1a:1a:84:9e:d8:74:8f:aa:1b:7f:5e:f4:fe:45:
- 22:21
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 71:38:36:F2:02:31:53:47:2B:6E:BA:65:46:A9:10:15:58:20:05:09
- X509v3 Authority Key Identifier:
- keyid:71:38:36:F2:02:31:53:47:2B:6E:BA:65:46:A9:10:15:58:20:05:09
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 03:f7:b5:2b:ab:5d:10:fc:7b:b2:b2:5e:ac:9b:0e:7e:53:78:
- 59:3e:42:04:fe:75:a3:ad:ac:81:4e:d7:02:8b:5e:c4:2d:c8:
- 52:76:c7:2c:1f:fc:81:32:98:d1:4b:c6:92:93:33:35:31:2f:
- fc:d8:1d:44:dd:e0:81:7f:9d:e9:8b:e1:64:91:62:0b:39:08:
- 8c:ac:74:9d:59:d9:7a:59:52:97:11:b9:16:7b:6f:45:d3:96:
- d9:31:7d:02:36:0f:9c:3b:6e:cf:2c:0d:03:46:45:eb:a0:f4:
- 7f:48:44:c6:08:40:cc:de:1b:70:b5:29:ad:ba:8b:3b:34:65:
- 75:1b:71:21:1d:2c:14:0a:b0:96:95:b8:d6:ea:f2:65:fb:29:
- ba:4f:ea:91:93:74:69:b6:f2:ff:e1:1a:d0:0c:d1:76:85:cb:
- 8a:25:bd:97:5e:2c:6f:15:99:26:e7:b6:29:ff:22:ec:c9:02:
- c7:56:00:cd:49:b9:b3:6c:7b:53:04:1a:e2:a8:c9:aa:12:05:
- 23:c2:ce:e7:bb:04:02:cc:c0:47:a2:e4:c4:29:2f:5b:45:57:
- 89:51:ee:3c:eb:52:08:ff:07:35:1e:9f:35:6a:47:4a:56:98:
- d1:5a:85:1f:8c:f5:22:bf:ab:ce:83:f3:e2:22:29:ae:7d:83:
- 40:a8:ba:6c
-----BEGIN CERTIFICATE-----
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
@@ -2408,96 +706,6 @@ I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
GeoTrust Universal CA
=====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA
- Validity
- Not Before: Mar 4 05:00:00 2004 GMT
- Not After : Mar 4 05:00:00 2029 GMT
- Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:a6:15:55:a0:a3:c6:e0:1f:8c:9d:21:50:d7:c1:
- be:2b:5b:b5:a4:9e:a1:d9:72:58:bd:00:1b:4c:bf:
- 61:c9:14:1d:45:82:ab:c6:1d:80:d6:3d:eb:10:9c:
- 3a:af:6d:24:f8:bc:71:01:9e:06:f5:7c:5f:1e:c1:
- 0e:55:ca:83:9a:59:30:ae:19:cb:30:48:95:ed:22:
- 37:8d:f4:4a:9a:72:66:3e:ad:95:c0:e0:16:00:e0:
- 10:1f:2b:31:0e:d7:94:54:d3:42:33:a0:34:1d:1e:
- 45:76:dd:4f:ca:18:37:ec:85:15:7a:19:08:fc:d5:
- c7:9c:f0:f2:a9:2e:10:a9:92:e6:3d:58:3d:a9:16:
- 68:3c:2f:75:21:18:7f:28:77:a5:e1:61:17:b7:a6:
- e9:f8:1e:99:db:73:6e:f4:0a:a2:21:6c:ee:da:aa:
- 85:92:66:af:f6:7a:6b:82:da:ba:22:08:35:0f:cf:
- 42:f1:35:fa:6a:ee:7e:2b:25:cc:3a:11:e4:6d:af:
- 73:b2:76:1d:ad:d0:b2:78:67:1a:a4:39:1c:51:0b:
- 67:56:83:fd:38:5d:0d:ce:dd:f0:bb:2b:96:1f:de:
- 7b:32:52:fd:1d:bb:b5:06:a1:b2:21:5e:a5:d6:95:
- 68:7f:f0:99:9e:dc:45:08:3e:e7:d2:09:0d:35:94:
- dd:80:4e:53:97:d7:b5:09:44:20:64:16:17:03:02:
- 4c:53:0d:68:de:d5:aa:72:4d:93:6d:82:0e:db:9c:
- bd:cf:b4:f3:5c:5d:54:7a:69:09:96:d6:db:11:c1:
- 8d:75:a8:b4:cf:39:c8:ce:3c:bc:24:7c:e6:62:ca:
- e1:bd:7d:a7:bd:57:65:0b:e4:fe:25:ed:b6:69:10:
- dc:28:1a:46:bd:01:1d:d0:97:b5:e1:98:3b:c0:37:
- 64:d6:3d:94:ee:0b:e1:f5:28:ae:0b:56:bf:71:8b:
- 23:29:41:8e:86:c5:4b:52:7b:d8:71:ab:1f:8a:15:
- a6:3b:83:5a:d7:58:01:51:c6:4c:41:d9:7f:d8:41:
- 67:72:a2:28:df:60:83:a9:9e:c8:7b:fc:53:73:72:
- 59:f5:93:7a:17:76:0e:ce:f7:e5:5c:d9:0b:55:34:
- a2:aa:5b:b5:6a:54:e7:13:ca:57:ec:97:6d:f4:5e:
- 06:2f:45:8b:58:d4:23:16:92:e4:16:6e:28:63:59:
- 30:df:50:01:9c:63:89:1a:9f:db:17:94:82:70:37:
- c3:24:9e:9a:47:d6:5a:ca:4e:a8:69:89:72:1f:91:
- 6c:db:7e:9e:1b:ad:c7:1f:73:dd:2c:4f:19:65:fd:
- 7f:93:40:10:2e:d2:f0:ed:3c:9e:2e:28:3e:69:26:
- 33:c5:7b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- DA:BB:2E:AA:B0:0C:B8:88:26:51:74:5C:6D:03:D3:C0:D8:8F:7A:D6
- X509v3 Authority Key Identifier:
- keyid:DA:BB:2E:AA:B0:0C:B8:88:26:51:74:5C:6D:03:D3:C0:D8:8F:7A:D6
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 31:78:e6:c7:b5:df:b8:94:40:c9:71:c4:a8:35:ec:46:1d:c2:
- 85:f3:28:58:86:b0:0b:fc:8e:b2:39:8f:44:55:ab:64:84:5c:
- 69:a9:d0:9a:38:3c:fa:e5:1f:35:e5:44:e3:80:79:94:68:a4:
- bb:c4:9f:3d:e1:34:cd:30:46:8b:54:2b:95:a5:ef:f7:3f:99:
- 84:fd:35:e6:cf:31:c6:dc:6a:bf:a7:d7:23:08:e1:98:5e:c3:
- 5a:08:76:a9:a6:af:77:2f:b7:60:bd:44:46:6a:ef:97:ff:73:
- 95:c1:8e:e8:93:fb:fd:31:b7:ec:57:11:11:45:9b:30:f1:1a:
- 88:39:c1:4f:3c:a7:00:d5:c7:fc:ab:6d:80:22:70:a5:0c:e0:
- 5d:04:29:02:fb:cb:a0:91:d1:7c:d6:c3:7e:50:d5:9d:58:be:
- 41:38:eb:b9:75:3c:15:d9:9b:c9:4a:83:59:c0:da:53:fd:33:
- bb:36:18:9b:85:0f:15:dd:ee:2d:ac:76:93:b9:d9:01:8d:48:
- 10:a8:fb:f5:38:86:f1:db:0a:c6:bd:84:a3:23:41:de:d6:77:
- 6f:85:d4:85:1c:50:e0:ae:51:8a:ba:8d:3e:76:e2:b9:ca:27:
- f2:5f:9f:ef:6e:59:0d:06:d8:2b:17:a4:d2:7c:6b:bb:5f:14:
- 1a:48:8f:1a:4c:e7:b3:47:1c:8e:4c:45:2b:20:ee:48:df:e7:
- dd:09:8e:18:a8:da:40:8d:92:26:11:53:61:73:5d:eb:bd:e7:
- c4:4d:29:37:61:eb:ac:39:2d:67:2e:16:d6:f5:00:83:85:a1:
- cc:7f:76:c4:7d:e4:b7:4b:66:ef:03:45:60:69:b6:0c:52:96:
- 92:84:5e:a6:a3:b5:a4:3e:2b:d9:cc:d8:1b:47:aa:f2:44:da:
- 4f:f9:03:e8:f0:14:cb:3f:f3:83:de:d0:c1:54:e3:b7:e8:0a:
- 37:4d:8b:20:59:03:30:19:a1:2c:c8:bd:11:1f:df:ae:c9:4a:
- c5:f3:27:66:66:86:ac:68:91:ff:d9:e6:53:1c:0f:8b:5c:69:
- 65:0a:26:c8:1e:34:c3:5d:51:7b:d7:a9:9c:06:a1:36:dd:d5:
- 89:94:bc:d9:e4:2d:0c:5e:09:6c:08:97:7c:a3:3d:7c:93:ff:
- 3f:a1:14:a7:cf:b5:5d:eb:db:db:1c:c4:76:df:88:b9:bd:45:
- 05:95:1b:ae:fc:46:6a:4c:af:48:e3:ce:ae:0f:d2:7e:eb:e6:
- 6c:9c:4f:81:6a:7a:64:ac:bb:3e:d5:e7:cb:76:2e:c5:a7:48:
- c1:5c:90:0f:cb:c8:3f:fa:e6:32:e1:8d:1b:6f:a4:e6:8e:d8:
- f9:29:48:8a:ce:73:fe:2c
-----BEGIN CERTIFICATE-----
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
@@ -2532,96 +740,6 @@ bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
GeoTrust Universal CA 2
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA 2
- Validity
- Not Before: Mar 4 05:00:00 2004 GMT
- Not After : Mar 4 05:00:00 2029 GMT
- Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Universal CA 2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:b3:54:52:c1:c9:3e:f2:d9:dc:b1:53:1a:59:29:
- e7:b1:c3:45:28:e5:d7:d1:ed:c5:c5:4b:a1:aa:74:
- 7b:57:af:4a:26:fc:d8:f5:5e:a7:6e:19:db:74:0c:
- 4f:35:5b:32:0b:01:e3:db:eb:7a:77:35:ea:aa:5a:
- e0:d6:e8:a1:57:94:f0:90:a3:74:56:94:44:30:03:
- 1e:5c:4e:2b:85:26:74:82:7a:0c:76:a0:6f:4d:ce:
- 41:2d:a0:15:06:14:5f:b7:42:cd:7b:8f:58:61:34:
- dc:2a:08:f9:2e:c3:01:a6:22:44:1c:4c:07:82:e6:
- 5b:ce:d0:4a:7c:04:d3:19:73:27:f0:aa:98:7f:2e:
- af:4e:eb:87:1e:24:77:6a:5d:b6:e8:5b:45:ba:dc:
- c3:a1:05:6f:56:8e:8f:10:26:a5:49:c3:2e:d7:41:
- 87:22:e0:4f:86:ca:60:b5:ea:a1:63:c0:01:97:10:
- 79:bd:00:3c:12:6d:2b:15:b1:ac:4b:b1:ee:18:b9:
- 4e:96:dc:dc:76:ff:3b:be:cf:5f:03:c0:fc:3b:e8:
- be:46:1b:ff:da:40:c2:52:f7:fe:e3:3a:f7:6a:77:
- 35:d0:da:8d:eb:5e:18:6a:31:c7:1e:ba:3c:1b:28:
- d6:6b:54:c6:aa:5b:d7:a2:2c:1b:19:cc:a2:02:f6:
- 9b:59:bd:37:6b:86:b5:6d:82:ba:d8:ea:c9:56:bc:
- a9:36:58:fd:3e:19:f3:ed:0c:26:a9:93:38:f8:4f:
- c1:5d:22:06:d0:97:ea:e1:ad:c6:55:e0:81:2b:28:
- 83:3a:fa:f4:7b:21:51:00:be:52:38:ce:cd:66:79:
- a8:f4:81:56:e2:d0:83:09:47:51:5b:50:6a:cf:db:
- 48:1a:5d:3e:f7:cb:f6:65:f7:6c:f1:95:f8:02:3b:
- 32:56:82:39:7a:5b:bd:2f:89:1b:bf:a1:b4:e8:ff:
- 7f:8d:8c:df:03:f1:60:4e:58:11:4c:eb:a3:3f:10:
- 2b:83:9a:01:73:d9:94:6d:84:00:27:66:ac:f0:70:
- 40:09:42:92:ad:4f:93:0d:61:09:51:24:d8:92:d5:
- 0b:94:61:b2:87:b2:ed:ff:9a:35:ff:85:54:ca:ed:
- 44:43:ac:1b:3c:16:6b:48:4a:0a:1c:40:88:1f:92:
- c2:0b:00:05:ff:f2:c8:02:4a:a4:aa:a9:cc:99:96:
- 9c:2f:58:e0:7d:e1:be:bb:07:dc:5f:04:72:5c:31:
- 34:c3:ec:5f:2d:e0:3d:64:90:22:e6:d1:ec:b8:2e:
- dd:59:ae:d9:a1:37:bf:54:35:dc:73:32:4f:8c:04:
- 1e:33:b2:c9:46:f1:d8:5c:c8:55:50:c9:68:bd:a8:
- ba:36:09
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 76:F3:55:E1:FA:A4:36:FB:F0:9F:5C:62:71:ED:3C:F4:47:38:10:2B
- X509v3 Authority Key Identifier:
- keyid:76:F3:55:E1:FA:A4:36:FB:F0:9F:5C:62:71:ED:3C:F4:47:38:10:2B
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 66:c1:c6:23:f3:d9:e0:2e:6e:5f:e8:cf:ae:b0:b0:25:4d:2b:
- f8:3b:58:9b:40:24:37:5a:cb:ab:16:49:ff:b3:75:79:33:a1:
- 2f:6d:70:17:34:91:fe:67:7e:8f:ec:9b:e5:5e:82:a9:55:1f:
- 2f:dc:d4:51:07:12:fe:ac:16:3e:2c:35:c6:63:fc:dc:10:eb:
- 0d:a3:aa:d0:7c:cc:d1:d0:2f:51:2e:c4:14:5a:de:e8:19:e1:
- 3e:c6:cc:a4:29:e7:2e:84:aa:06:30:78:76:54:73:28:98:59:
- 38:e0:00:0d:62:d3:42:7d:21:9f:ae:3d:3a:8c:d5:fa:77:0d:
- 18:2b:16:0e:5f:36:e1:fc:2a:b5:30:24:cf:e0:63:0c:7b:58:
- 1a:fe:99:ba:42:12:b1:91:f4:7c:68:e2:c8:e8:af:2c:ea:c9:
- 7e:ae:bb:2a:3d:0d:15:dc:34:95:b6:18:74:a8:6a:0f:c7:b4:
- f4:13:c4:e4:5b:ed:0a:d2:a4:97:4c:2a:ed:2f:6c:12:89:3d:
- f1:27:70:aa:6a:03:52:21:9f:40:a8:67:50:f2:f3:5a:1f:df:
- df:23:f6:dc:78:4e:e6:98:4f:55:3a:53:e3:ef:f2:f4:9f:c7:
- 7c:d8:58:af:29:22:97:b8:e0:bd:91:2e:b0:76:ec:57:11:cf:
- ef:29:44:f3:e9:85:7a:60:63:e4:5d:33:89:17:d9:31:aa:da:
- d6:f3:18:35:72:cf:87:2b:2f:63:23:84:5d:84:8c:3f:57:a0:
- 88:fc:99:91:28:26:69:99:d4:8f:97:44:be:8e:d5:48:b1:a4:
- 28:29:f1:15:b4:e1:e5:9e:dd:f8:8f:a6:6f:26:d7:09:3c:3a:
- 1c:11:0e:a6:6c:37:f7:ad:44:87:2c:28:c7:d8:74:82:b3:d0:
- 6f:4a:57:bb:35:29:27:a0:8b:e8:21:a7:87:64:36:5d:cc:d8:
- 16:ac:c7:b2:27:40:92:55:38:28:8d:51:6e:dd:14:67:53:6c:
- 71:5c:26:84:4d:75:5a:b6:7e:60:56:a9:4d:ad:fb:9b:1e:97:
- f3:0d:d9:d2:97:54:77:da:3d:12:b7:e0:1e:ef:08:06:ac:f9:
- 85:87:e9:a2:dc:af:7e:18:12:83:fd:56:17:41:2e:d5:29:82:
- 7d:99:f4:31:f6:71:a9:cf:2c:01:27:a5:05:b9:aa:b2:48:4e:
- 2a:ef:9f:93:52:51:95:3c:52:73:8e:56:4c:17:40:c0:09:28:
- e4:8b:6a:48:53:db:ec:cd:55:55:f1:c6:f8:e9:a2:2c:4c:a6:
- d1:26:5f:7e:af:5a:4c:da:1f:a6:f2:1c:2c:7e:ae:02:16:d2:
- 56:d0:2f:57:53:47:e8:92
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
@@ -2654,156 +772,8 @@ OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
-----END CERTIFICATE-----
-UTN-USER First-Network Applications
-===================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:be:0c:8b:50:00:24:b4:11:d3:36:30:4b:c0:33:77
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Network Applications
- Validity
- Not Before: Jul 9 18:48:39 1999 GMT
- Not After : Jul 9 18:57:49 2019 GMT
- Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Network Applications
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b3:fb:91:a1:e4:36:55:85:ac:06:34:5b:a0:9a:
- 58:b2:f8:b5:0f:05:77:83:ae:32:b1:76:92:68:ec:
- 23:4a:c9:76:3f:e3:9c:b6:37:79:03:b9:ab:69:8d:
- 07:25:b6:19:67:e4:b0:1b:18:73:61:4a:e8:7e:cd:
- d3:2f:64:e3:a6:7c:0c:fa:17:80:a3:0d:47:89:4f:
- 51:71:2f:ee:fc:3f:f9:b8:16:80:87:89:93:25:20:
- 9a:43:82:69:24:76:28:59:35:a1:1d:c0:7f:83:06:
- 64:16:20:2c:d3:49:a4:85:b4:c0:61:7f:51:08:f8:
- 68:15:91:80:cb:a5:d5:ee:3b:3a:f4:84:04:5e:60:
- 59:a7:8c:34:72:ee:b8:78:c5:d1:3b:12:4a:6f:7e:
- 65:27:b9:a4:55:c5:b9:6f:43:a4:c5:1d:2c:99:c0:
- 52:a4:78:4c:15:b3:40:98:08:6b:43:c6:01:b0:7a:
- 7b:f5:6b:1c:22:3f:cb:ef:ff:a8:d0:3a:4b:76:15:
- 9e:d2:d1:c6:2e:e3:db:57:1b:32:a2:b8:6f:e8:86:
- a6:3f:70:ab:e5:70:92:ab:44:1e:40:50:fb:9c:a3:
- 62:e4:6c:6e:a0:c8:de:e2:80:42:fa:e9:2f:e8:ce:
- 32:04:8f:7c:8d:b7:1c:a3:35:3c:15:dd:9e:c3:ae:
- 97:a5
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage:
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- FA:86:C9:DB:E0:BA:E9:78:F5:4B:A8:D6:15:DF:F0:D3:E1:6A:14:3C
- X509v3 CRL Distribution Points:
- URI:http://crl.usertrust.com/UTN-USERFirst-NetworkApplications.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- a4:f3:25:cc:d1:d4:91:83:22:d0:cc:32:ab:9b:96:4e:34:91:
- 54:20:25:34:61:5f:2a:02:15:e1:8b:aa:ff:7d:64:51:cf:0a:
- ff:bc:7d:d8:21:6a:78:cb:2f:51:6f:f8:42:1d:33:bd:eb:b5:
- 7b:94:c3:c3:a9:a0:2d:df:d1:29:1f:1d:fe:8f:3f:bb:a8:45:
- 2a:7f:d1:6e:55:24:e2:bb:02:fb:31:3f:be:e8:bc:ec:40:2b:
- f8:01:d4:56:38:e4:ca:44:82:b5:61:20:21:67:65:f6:f0:0b:
- e7:34:f8:a5:c2:9c:a3:5c:40:1f:85:93:95:06:de:4f:d4:27:
- a9:b6:a5:fc:16:cd:73:31:3f:b8:65:27:cf:d4:53:1a:f0:ac:
- 6e:9f:4f:05:0c:03:81:a7:84:29:c4:5a:bd:64:57:72:ad:3b:
- cf:37:18:a6:98:c6:ad:06:b4:dc:08:a3:04:d5:29:a4:96:9a:
- 12:67:4a:8c:60:45:9d:f1:23:9a:b0:00:9c:68:b5:98:50:d3:
- ef:8e:2e:92:65:b1:48:3e:21:be:15:30:2a:0d:b5:0c:a3:6b:
- 3f:ae:7f:57:f5:1f:96:7c:df:6f:dd:82:30:2c:65:1b:40:4a:
- cd:68:b9:72:ec:71:76:ec:54:8e:1f:85:0c:01:6a:fa:a6:38:
- ac:1f:c4:84
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
-ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
-TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
-NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
-VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
-Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
-N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
-iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
-YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
-axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
-yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
-ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
-VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
-BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
-QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
-ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
-YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
-QErNaLly7HF27FSOH4UMAWr6pjisH8SE
------END CERTIFICATE-----
-
America Online Root Certification Authority 1
=============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=America Online Inc., CN=America Online Root Certification Authority 1
- Validity
- Not Before: May 28 06:00:00 2002 GMT
- Not After : Nov 19 20:43:00 2037 GMT
- Subject: C=US, O=America Online Inc., CN=America Online Root Certification Authority 1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a8:2f:e8:a4:69:06:03:47:c3:e9:2a:98:ff:19:
- a2:70:9a:c6:50:b2:7e:a5:df:68:4d:1b:7c:0f:b6:
- 97:68:7d:2d:a6:8b:97:e9:64:86:c9:a3:ef:a0:86:
- bf:60:65:9c:4b:54:88:c2:48:c5:4a:39:bf:14:e3:
- 59:55:e5:19:b4:74:c8:b4:05:39:5c:16:a5:e2:95:
- 05:e0:12:ae:59:8b:a2:33:68:58:1c:a6:d4:15:b7:
- d8:9f:d7:dc:71:ab:7e:9a:bf:9b:8e:33:0f:22:fd:
- 1f:2e:e7:07:36:ef:62:39:c5:dd:cb:ba:25:14:23:
- de:0c:c6:3d:3c:ce:82:08:e6:66:3e:da:51:3b:16:
- 3a:a3:05:7f:a0:dc:87:d5:9c:fc:72:a9:a0:7d:78:
- e4:b7:31:55:1e:65:bb:d4:61:b0:21:60:ed:10:32:
- 72:c5:92:25:1e:f8:90:4a:18:78:47:df:7e:30:37:
- 3e:50:1b:db:1c:d3:6b:9a:86:53:07:b0:ef:ac:06:
- 78:f8:84:99:fe:21:8d:4c:80:b6:0c:82:f6:66:70:
- 79:1a:d3:4f:a3:cf:f1:cf:46:b0:4b:0f:3e:dd:88:
- 62:b8:8c:a9:09:28:3b:7a:c7:97:e1:1e:e5:f4:9f:
- c0:c0:ae:24:a0:c8:a1:d9:0f:d6:7b:26:82:69:32:
- 3d:a7
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 00:AD:D9:A3:F6:79:F6:6E:74:A9:7F:33:3D:81:17:D7:4C:CF:33:DE
- X509v3 Authority Key Identifier:
- keyid:00:AD:D9:A3:F6:79:F6:6E:74:A9:7F:33:3D:81:17:D7:4C:CF:33:DE
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 7c:8a:d1:1f:18:37:82:e0:b8:b0:a3:ed:56:95:c8:62:61:9c:
- 05:a2:cd:c2:62:26:61:cd:10:16:d7:cc:b4:65:34:d0:11:8a:
- ad:a8:a9:05:66:ef:74:f3:6d:5f:9d:99:af:f6:8b:fb:eb:52:
- b2:05:98:a2:6f:2a:c5:54:bd:25:bd:5f:ae:c8:86:ea:46:2c:
- c1:b3:bd:c1:e9:49:70:18:16:97:08:13:8c:20:e0:1b:2e:3a:
- 47:cb:1e:e4:00:30:95:5b:f4:45:a3:c0:1a:b0:01:4e:ab:bd:
- c0:23:6e:63:3f:80:4a:c5:07:ed:dc:e2:6f:c7:c1:62:f1:e3:
- 72:d6:04:c8:74:67:0b:fa:88:ab:a1:01:c8:6f:f0:14:af:d2:
- 99:cd:51:93:7e:ed:2e:38:c7:bd:ce:46:50:3d:72:e3:79:25:
- 9d:9b:88:2b:10:20:dd:a5:b8:32:9f:8d:e0:29:df:21:74:86:
- 82:db:2f:82:30:c6:c7:35:86:b3:f9:96:5f:46:db:0c:45:fd:
- f3:50:c3:6f:c6:c3:48:ad:46:a6:e1:27:47:0a:1d:0e:9b:b6:
- c2:77:7f:63:f2:e0:7d:1a:be:fc:e0:df:d7:c7:a7:6c:b0:f9:
- ae:ba:3c:fd:74:b4:11:e8:58:0d:80:bc:d3:a8:80:3a:99:ed:
- 75:cc:46:7b
-----BEGIN CERTIFICATE-----
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
@@ -2829,96 +799,6 @@ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
America Online Root Certification Authority 2
=============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=America Online Inc., CN=America Online Root Certification Authority 2
- Validity
- Not Before: May 28 06:00:00 2002 GMT
- Not After : Sep 29 14:08:00 2037 GMT
- Subject: C=US, O=America Online Inc., CN=America Online Root Certification Authority 2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:cc:41:45:1d:e9:3d:4d:10:f6:8c:b1:41:c9:e0:
- 5e:cb:0d:b7:bf:47:73:d3:f0:55:4d:dd:c6:0c:fa:
- b1:66:05:6a:cd:78:b4:dc:02:db:4e:81:f3:d7:a7:
- 7c:71:bc:75:63:a0:5d:e3:07:0c:48:ec:25:c4:03:
- 20:f4:ff:0e:3b:12:ff:9b:8d:e1:c6:d5:1b:b4:6d:
- 22:e3:b1:db:7f:21:64:af:86:bc:57:22:2a:d6:47:
- 81:57:44:82:56:53:bd:86:14:01:0b:fc:7f:74:a4:
- 5a:ae:f1:ba:11:b5:9b:58:5a:80:b4:37:78:09:33:
- 7c:32:47:03:5c:c4:a5:83:48:f4:57:56:6e:81:36:
- 27:18:4f:ec:9b:28:c2:d4:b4:d7:7c:0c:3e:0c:2b:
- df:ca:04:d7:c6:8e:ea:58:4e:a8:a4:a5:18:1c:6c:
- 45:98:a3:41:d1:2d:d2:c7:6d:8d:19:f1:ad:79:b7:
- 81:3f:bd:06:82:27:2d:10:58:05:b5:78:05:b9:2f:
- db:0c:6b:90:90:7e:14:59:38:bb:94:24:13:e5:d1:
- 9d:14:df:d3:82:4d:46:f0:80:39:52:32:0f:e3:84:
- b2:7a:43:f2:5e:de:5f:3f:1d:dd:e3:b2:1b:a0:a1:
- 2a:23:03:6e:2e:01:15:87:5c:a6:75:75:c7:97:61:
- be:de:86:dc:d4:48:db:bd:2a:bf:4a:55:da:e8:7d:
- 50:fb:b4:80:17:b8:94:bf:01:3d:ea:da:ba:7c:e0:
- 58:67:17:b9:58:e0:88:86:46:67:6c:9d:10:47:58:
- 32:d0:35:7c:79:2a:90:a2:5a:10:11:23:35:ad:2f:
- cc:e4:4a:5b:a7:c8:27:f2:83:de:5e:bb:5e:77:e7:
- e8:a5:6e:63:c2:0d:5d:61:d0:8c:d2:6c:5a:21:0e:
- ca:28:a3:ce:2a:e9:95:c7:48:cf:96:6f:1d:92:25:
- c8:c6:c6:c1:c1:0c:05:ac:26:c4:d2:75:d2:e1:2a:
- 67:c0:3d:5b:a5:9a:eb:cf:7b:1a:a8:9d:14:45:e5:
- 0f:a0:9a:65:de:2f:28:bd:ce:6f:94:66:83:48:29:
- d8:ea:65:8c:af:93:d9:64:9f:55:57:26:bf:6f:cb:
- 37:31:99:a3:60:bb:1c:ad:89:34:32:62:b8:43:21:
- 06:72:0c:a1:5c:6d:46:c5:fa:29:cf:30:de:89:dc:
- 71:5b:dd:b6:37:3e:df:50:f5:b8:07:25:26:e5:bc:
- b5:fe:3c:02:b3:b7:f8:be:43:c1:87:11:94:9e:23:
- 6c:17:8a:b8:8a:27:0c:54:47:f0:a9:b3:c0:80:8c:
- a0:27:eb:1d:19:e3:07:8e:77:70:ca:2b:f4:7d:76:
- e0:78:67
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 4D:45:C1:68:38:BB:73:A9:69:A1:20:E7:ED:F5:22:A1:23:14:D7:9E
- X509v3 Authority Key Identifier:
- keyid:4D:45:C1:68:38:BB:73:A9:69:A1:20:E7:ED:F5:22:A1:23:14:D7:9E
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 67:6b:06:b9:5f:45:3b:2a:4b:33:b3:e6:1b:6b:59:4e:22:cc:
- b9:b7:a4:25:c9:a7:c4:f0:54:96:0b:64:f3:b1:58:4f:5e:51:
- fc:b2:97:7b:27:65:c2:e5:ca:e7:0d:0c:25:7b:62:e3:fa:9f:
- b4:87:b7:45:46:af:83:a5:97:48:8c:a5:bd:f1:16:2b:9b:76:
- 2c:7a:35:60:6c:11:80:97:cc:a9:92:52:e6:2b:e6:69:ed:a9:
- f8:36:2d:2c:77:bf:61:48:d1:63:0b:b9:5b:52:ed:18:b0:43:
- 42:22:a6:b1:77:ae:de:69:c5:cd:c7:1c:a1:b1:a5:1c:10:fb:
- 18:be:1a:70:dd:c1:92:4b:be:29:5a:9d:3f:35:be:e5:7d:51:
- f8:55:e0:25:75:23:87:1e:5c:dc:ba:9d:b0:ac:b3:69:db:17:
- 83:c9:f7:de:0c:bc:08:dc:91:9e:a8:d0:d7:15:37:73:a5:35:
- b8:fc:7e:c5:44:40:06:c3:eb:f8:22:80:5c:47:ce:02:e3:11:
- 9f:44:ff:fd:9a:32:cc:7d:64:51:0e:eb:57:26:76:3a:e3:1e:
- 22:3c:c2:a6:36:dd:19:ef:a7:fc:12:f3:26:c0:59:31:85:4c:
- 9c:d8:cf:df:a4:cc:cc:29:93:ff:94:6d:76:5c:13:08:97:f2:
- ed:a5:0b:4d:dd:e8:c9:68:0e:66:d3:00:0e:33:12:5b:bc:95:
- e5:32:90:a8:b3:c6:6c:83:ad:77:ee:8b:7e:7e:b1:a9:ab:d3:
- e1:f1:b6:c0:b1:ea:88:c0:e7:d3:90:e9:28:92:94:7b:68:7b:
- 97:2a:0a:67:2d:85:02:38:10:e4:03:61:d4:da:25:36:c7:08:
- 58:2d:a1:a7:51:af:30:0a:49:f5:a6:69:87:07:2d:44:46:76:
- 8e:2a:e5:9a:3b:d7:18:a2:fc:9c:38:10:cc:c6:3b:d2:b5:17:
- 3a:6f:fd:ae:25:bd:f5:72:59:64:b1:74:2a:38:5f:18:4c:df:
- cf:71:04:5a:36:d4:bf:2f:99:9c:e8:d9:ba:b1:95:e6:02:4b:
- 21:a1:5b:d5:c1:4f:8f:ae:69:6d:53:db:01:93:b5:5c:1e:18:
- dd:64:5a:ca:18:28:3e:63:04:11:fd:1c:8d:00:0f:b8:37:df:
- 67:8a:9d:66:a9:02:6a:91:ff:13:ca:2f:5d:83:bc:87:93:6c:
- dc:24:51:16:04:25:66:fa:b3:d9:c2:ba:29:be:9a:48:38:82:
- 99:f4:bf:3b:4a:31:19:f9:bf:8e:21:33:14:ca:4f:54:5f:fb:
- ce:fb:8f:71:7f:fd:5e:19:a0:0f:4b:91:b8:c4:54:bc:06:b0:
- 45:8f:26:91:a2:8e:fe:a9
-----BEGIN CERTIFICATE-----
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
@@ -2955,63 +835,6 @@ RY8mkaKO/qk=
Visa eCommerce Root
===================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 13:86:35:4d:1d:3f:06:f2:c1:f9:65:05:d5:90:1c:62
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VISA, OU=Visa International Service Association, CN=Visa eCommerce Root
- Validity
- Not Before: Jun 26 02:18:36 2002 GMT
- Not After : Jun 24 00:16:12 2022 GMT
- Subject: C=US, O=VISA, OU=Visa International Service Association, CN=Visa eCommerce Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:af:57:de:56:1e:6e:a1:da:60:b1:94:27:cb:17:
- db:07:3f:80:85:4f:c8:9c:b6:d0:f4:6f:4f:cf:99:
- d8:e1:db:c2:48:5c:3a:ac:39:33:c7:1f:6a:8b:26:
- 3d:2b:35:f5:48:b1:91:c1:02:4e:04:96:91:7b:b0:
- 33:f0:b1:14:4e:11:6f:b5:40:af:1b:45:a5:4a:ef:
- 7e:b6:ac:f2:a0:1f:58:3f:12:46:60:3c:8d:a1:e0:
- 7d:cf:57:3e:33:1e:fb:47:f1:aa:15:97:07:55:66:
- a5:b5:2d:2e:d8:80:59:b2:a7:0d:b7:46:ec:21:63:
- ff:35:ab:a5:02:cf:2a:f4:4c:fe:7b:f5:94:5d:84:
- 4d:a8:f2:60:8f:db:0e:25:3c:9f:73:71:cf:94:df:
- 4a:ea:db:df:72:38:8c:f3:96:bd:f1:17:bc:d2:ba:
- 3b:45:5a:c6:a7:f6:c6:17:8b:01:9d:fc:19:a8:2a:
- 83:16:b8:3a:48:fe:4e:3e:a0:ab:06:19:e9:53:f3:
- 80:13:07:ed:2d:bf:3f:0a:3c:55:20:39:2c:2c:00:
- 69:74:95:4a:bc:20:b2:a9:79:e5:18:89:91:a8:dc:
- 1c:4d:ef:bb:7e:37:0b:5d:fe:39:a5:88:52:8c:00:
- 6c:ec:18:7c:41:bd:f6:8b:75:77:ba:60:9d:84:e7:
- fe:2d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 15:38:83:0F:3F:2C:3F:70:33:1E:CD:46:FE:07:8C:20:E0:D7:C3:B7
- Signature Algorithm: sha1WithRSAEncryption
- 5f:f1:41:7d:7c:5c:08:b9:2b:e0:d5:92:47:fa:67:5c:a5:13:
- c3:03:21:9b:2b:4c:89:46:cf:59:4d:c9:fe:a5:40:b6:63:cd:
- dd:71:28:95:67:11:cc:24:ac:d3:44:6c:71:ae:01:20:6b:03:
- a2:8f:18:b7:29:3a:7d:e5:16:60:53:78:3c:c0:af:15:83:f7:
- 8f:52:33:24:bd:64:93:97:ee:8b:f7:db:18:a8:6d:71:b3:f7:
- 2c:17:d0:74:25:69:f7:fe:6b:3c:94:be:4d:4b:41:8c:4e:e2:
- 73:d0:e3:90:22:73:43:cd:f3:ef:ea:73:ce:45:8a:b0:a6:49:
- ff:4c:7d:9d:71:88:c4:76:1d:90:5b:1d:ee:fd:cc:f7:ee:fd:
- 60:a5:b1:7a:16:71:d1:16:d0:7c:12:3c:6c:69:97:db:ae:5f:
- 39:9a:70:2f:05:3c:19:46:04:99:20:36:d0:60:6e:61:06:bb:
- 16:42:8c:70:f7:30:fb:e0:db:66:a3:00:01:bd:e6:2c:da:91:
- 5f:a0:46:8b:4d:6a:9c:3d:3d:dd:05:46:fe:76:bf:a0:0a:3c:
- e4:00:e6:27:b7:ff:84:2d:de:ba:22:27:96:10:71:eb:22:ed:
- df:df:33:9c:cf:e3:ad:ae:8e:d4:8e:e6:4f:51:af:16:92:e0:
- 5c:f6:07:0f
-----BEGIN CERTIFICATE-----
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
@@ -3037,58 +860,6 @@ LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
Certum Root CA
==============
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 65568 (0x10020)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, O=Unizeto Sp. z o.o., CN=Certum CA
- Validity
- Not Before: Jun 11 10:46:39 2002 GMT
- Not After : Jun 11 10:46:39 2027 GMT
- Subject: C=PL, O=Unizeto Sp. z o.o., CN=Certum CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ce:b1:c1:2e:d3:4f:7c:cd:25:ce:18:3e:4f:c4:
- 8c:6f:80:6a:73:c8:5b:51:f8:9b:d2:dc:bb:00:5c:
- b1:a0:fc:75:03:ee:81:f0:88:ee:23:52:e9:e6:15:
- 33:8d:ac:2d:09:c5:76:f9:2b:39:80:89:e4:97:4b:
- 90:a5:a8:78:f8:73:43:7b:a4:61:b0:d8:58:cc:e1:
- 6c:66:7e:9c:f3:09:5e:55:63:84:d5:a8:ef:f3:b1:
- 2e:30:68:b3:c4:3c:d8:ac:6e:8d:99:5a:90:4e:34:
- dc:36:9a:8f:81:88:50:b7:6d:96:42:09:f3:d7:95:
- 83:0d:41:4b:b0:6a:6b:f8:fc:0f:7e:62:9f:67:c4:
- ed:26:5f:10:26:0f:08:4f:f0:a4:57:28:ce:8f:b8:
- ed:45:f6:6e:ee:25:5d:aa:6e:39:be:e4:93:2f:d9:
- 47:a0:72:eb:fa:a6:5b:af:ca:53:3f:e2:0e:c6:96:
- 56:11:6e:f7:e9:66:a9:26:d8:7f:95:53:ed:0a:85:
- 88:ba:4f:29:a5:42:8c:5e:b6:fc:85:20:00:aa:68:
- 0b:a1:1a:85:01:9c:c4:46:63:82:88:b6:22:b1:ee:
- fe:aa:46:59:7e:cf:35:2c:d5:b6:da:5d:f7:48:33:
- 14:54:b6:eb:d9:6f:ce:cd:88:d6:ab:1b:da:96:3b:
- 1d:59
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- b8:8d:ce:ef:e7:14:ba:cf:ee:b0:44:92:6c:b4:39:3e:a2:84:
- 6e:ad:b8:21:77:d2:d4:77:82:87:e6:20:41:81:ee:e2:f8:11:
- b7:63:d1:17:37:be:19:76:24:1c:04:1a:4c:eb:3d:aa:67:6f:
- 2d:d4:cd:fe:65:31:70:c5:1b:a6:02:0a:ba:60:7b:6d:58:c2:
- 9a:49:fe:63:32:0b:6b:e3:3a:c0:ac:ab:3b:b0:e8:d3:09:51:
- 8c:10:83:c6:34:e0:c5:2b:e0:1a:b6:60:14:27:6c:32:77:8c:
- bc:b2:72:98:cf:cd:cc:3f:b9:c8:24:42:14:d6:57:fc:e6:26:
- 43:a9:1d:e5:80:90:ce:03:54:28:3e:f7:3f:d3:f8:4d:ed:6a:
- 0a:3a:93:13:9b:3b:14:23:13:63:9c:3f:d1:87:27:79:e5:4c:
- 51:e3:01:ad:85:5d:1a:3b:b1:d5:73:10:a4:d3:f2:bc:6e:64:
- f5:5a:56:90:a8:c7:0e:4c:74:0f:2e:71:3b:f7:c8:47:f4:69:
- 6f:15:f2:11:5e:83:1e:9c:7c:52:ae:fd:02:da:12:a8:59:67:
- 18:db:bc:70:dd:9b:b1:69:ed:80:ce:89:40:48:6a:0e:35:ca:
- 29:66:15:21:94:2c:e8:60:2a:9b:85:4a:40:f3:6b:8a:24:ec:
- 06:16:2c:73
-----BEGIN CERTIFICATE-----
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
@@ -3111,66 +882,6 @@ O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
Comodo AAA Services root
========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services
- Validity
- Not Before: Jan 1 00:00:00 2004 GMT
- Not After : Dec 31 23:59:59 2028 GMT
- Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=AAA Certificate Services
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:be:40:9d:f4:6e:e1:ea:76:87:1c:4d:45:44:8e:
- be:46:c8:83:06:9d:c1:2a:fe:18:1f:8e:e4:02:fa:
- f3:ab:5d:50:8a:16:31:0b:9a:06:d0:c5:70:22:cd:
- 49:2d:54:63:cc:b6:6e:68:46:0b:53:ea:cb:4c:24:
- c0:bc:72:4e:ea:f1:15:ae:f4:54:9a:12:0a:c3:7a:
- b2:33:60:e2:da:89:55:f3:22:58:f3:de:dc:cf:ef:
- 83:86:a2:8c:94:4f:9f:68:f2:98:90:46:84:27:c7:
- 76:bf:e3:cc:35:2c:8b:5e:07:64:65:82:c0:48:b0:
- a8:91:f9:61:9f:76:20:50:a8:91:c7:66:b5:eb:78:
- 62:03:56:f0:8a:1a:13:ea:31:a3:1e:a0:99:fd:38:
- f6:f6:27:32:58:6f:07:f5:6b:b8:fb:14:2b:af:b7:
- aa:cc:d6:63:5f:73:8c:da:05:99:a8:38:a8:cb:17:
- 78:36:51:ac:e9:9e:f4:78:3a:8d:cf:0f:d9:42:e2:
- 98:0c:ab:2f:9f:0e:01:de:ef:9f:99:49:f1:2d:df:
- ac:74:4d:1b:98:b5:47:c5:e5:29:d1:f9:90:18:c7:
- 62:9c:be:83:c7:26:7b:3e:8a:25:c7:c0:dd:9d:e6:
- 35:68:10:20:9d:8f:d8:de:d2:c3:84:9c:0d:5e:e8:
- 2f:c9
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- A0:11:0A:23:3E:96:F1:07:EC:E2:AF:29:EF:82:A5:7F:D0:30:A4:B4
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://crl.comodoca.com/AAACertificateServices.crl
- URI:http://crl.comodo.net/AAACertificateServices.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- 08:56:fc:02:f0:9b:e8:ff:a4:fa:d6:7b:c6:44:80:ce:4f:c4:
- c5:f6:00:58:cc:a6:b6:bc:14:49:68:04:76:e8:e6:ee:5d:ec:
- 02:0f:60:d6:8d:50:18:4f:26:4e:01:e3:e6:b0:a5:ee:bf:bc:
- 74:54:41:bf:fd:fc:12:b8:c7:4f:5a:f4:89:60:05:7f:60:b7:
- 05:4a:f3:f6:f1:c2:bf:c4:b9:74:86:b6:2d:7d:6b:cc:d2:f3:
- 46:dd:2f:c6:e0:6a:c3:c3:34:03:2c:7d:96:dd:5a:c2:0e:a7:
- 0a:99:c1:05:8b:ab:0c:2f:f3:5c:3a:cf:6c:37:55:09:87:de:
- 53:40:6c:58:ef:fc:b6:ab:65:6e:04:f6:1b:dc:3c:e0:5a:15:
- c6:9e:d9:f1:59:48:30:21:65:03:6c:ec:e9:21:73:ec:9b:03:
- a1:e0:37:ad:a0:15:18:8f:fa:ba:02:ce:a7:2c:a9:10:13:2c:
- d4:e5:08:26:ab:22:97:60:f8:90:5e:74:d4:a2:9a:53:bd:f2:
- a9:68:e0:a2:6e:c2:d7:6c:b1:a3:0f:9e:bf:eb:68:e7:56:f2:
- ae:f2:e3:2b:38:3a:09:81:b5:6b:85:d7:be:2d:ed:3f:1a:b7:
- b2:63:e2:f5:62:2c:82:d4:6a:00:41:50:f1:39:83:9f:95:e9:
- 36:96:98:6e
-----BEGIN CERTIFICATE-----
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
@@ -3199,66 +910,6 @@ smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
Comodo Secure Services root
===========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Secure Certificate Services
- Validity
- Not Before: Jan 1 00:00:00 2004 GMT
- Not After : Dec 31 23:59:59 2028 GMT
- Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Secure Certificate Services
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c0:71:33:82:8a:d0:70:eb:73:87:82:40:d5:1d:
- e4:cb:c9:0e:42:90:f9:de:34:b9:a1:ba:11:f4:25:
- 85:f3:cc:72:6d:f2:7b:97:6b:b3:07:f1:77:24:91:
- 5f:25:8f:f6:74:3d:e4:80:c2:f8:3c:0d:f3:bf:40:
- ea:f7:c8:52:d1:72:6f:ef:c8:ab:41:b8:6e:2e:17:
- 2a:95:69:0c:cd:d2:1e:94:7b:2d:94:1d:aa:75:d7:
- b3:98:cb:ac:bc:64:53:40:bc:8f:ac:ac:36:cb:5c:
- ad:bb:dd:e0:94:17:ec:d1:5c:d0:bf:ef:a5:95:c9:
- 90:c5:b0:ac:fb:1b:43:df:7a:08:5d:b7:b8:f2:40:
- 1b:2b:27:9e:50:ce:5e:65:82:88:8c:5e:d3:4e:0c:
- 7a:ea:08:91:b6:36:aa:2b:42:fb:ea:c2:a3:39:e5:
- db:26:38:ad:8b:0a:ee:19:63:c7:1c:24:df:03:78:
- da:e6:ea:c1:47:1a:0b:0b:46:09:dd:02:fc:de:cb:
- 87:5f:d7:30:63:68:a1:ae:dc:32:a1:ba:be:fe:44:
- ab:68:b6:a5:17:15:fd:bd:d5:a7:a7:9a:e4:44:33:
- e9:88:8e:fc:ed:51:eb:93:71:4e:ad:01:e7:44:8e:
- ab:2d:cb:a8:fe:01:49:48:f0:c0:dd:c7:68:d8:92:
- fe:3d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 3C:D8:93:88:C2:C0:82:09:CC:01:99:06:93:20:E9:9E:70:09:63:4F
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://crl.comodoca.com/SecureCertificateServices.crl
- URI:http://crl.comodo.net/SecureCertificateServices.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- 87:01:6d:23:1d:7e:5b:17:7d:c1:61:32:cf:8f:e7:f3:8a:94:
- 59:66:e0:9e:28:a8:5e:d3:b7:f4:34:e6:aa:39:b2:97:16:c5:
- 82:6f:32:a4:e9:8c:e7:af:fd:ef:c2:e8:b9:4b:aa:a3:f4:e6:
- da:8d:65:21:fb:ba:80:eb:26:28:85:1a:fe:39:8c:de:5b:04:
- 04:b4:54:f9:a3:67:9e:41:fa:09:52:cc:05:48:a8:c9:3f:21:
- 04:1e:ce:48:6b:fc:85:e8:c2:7b:af:7f:b7:cc:f8:5f:3a:fd:
- 35:c6:0d:ef:97:dc:4c:ab:11:e1:6b:cb:31:d1:6c:fb:48:80:
- ab:dc:9c:37:b8:21:14:4b:0d:71:3d:ec:83:33:6e:d1:6e:32:
- 16:ec:98:c7:16:8b:59:a6:34:ab:05:57:2d:93:f7:aa:13:cb:
- d2:13:e2:b7:2e:3b:cd:6b:50:17:09:68:3e:b5:26:57:ee:b6:
- e0:b6:dd:b9:29:80:79:7d:8f:a3:f0:a4:28:a4:15:c4:85:f4:
- 27:d4:6b:bf:e5:5c:e4:65:02:76:54:b4:e3:37:66:24:d3:19:
- 61:c8:52:10:e5:8b:37:9a:b9:a9:f9:1d:bf:ea:99:92:61:96:
- ff:01:cd:a1:5f:0d:bc:71:bc:0e:ac:0b:1d:47:45:1d:c1:ec:
- 7c:ec:fd:29
-----BEGIN CERTIFICATE-----
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
@@ -3287,66 +938,6 @@ izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
Comodo Trusted Services root
============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Trusted Certificate Services
- Validity
- Not Before: Jan 1 00:00:00 2004 GMT
- Not After : Dec 31 23:59:59 2028 GMT
- Subject: C=GB, ST=Greater Manchester, L=Salford, O=Comodo CA Limited, CN=Trusted Certificate Services
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:df:71:6f:36:58:53:5a:f2:36:54:57:80:c4:74:
- 08:20:ed:18:7f:2a:1d:e6:35:9a:1e:25:ac:9c:e5:
- 96:7e:72:52:a0:15:42:db:59:dd:64:7a:1a:d0:b8:
- 7b:dd:39:15:bc:55:48:c4:ed:3a:00:ea:31:11:ba:
- f2:71:74:1a:67:b8:cf:33:cc:a8:31:af:a3:e3:d7:
- 7f:bf:33:2d:4c:6a:3c:ec:8b:c3:92:d2:53:77:24:
- 74:9c:07:6e:70:fc:bd:0b:5b:76:ba:5f:f2:ff:d7:
- 37:4b:4a:60:78:f7:f0:fa:ca:70:b4:ea:59:aa:a3:
- ce:48:2f:a9:c3:b2:0b:7e:17:72:16:0c:a6:07:0c:
- 1b:38:cf:c9:62:b7:3f:a0:93:a5:87:41:f2:b7:70:
- 40:77:d8:be:14:7c:e3:a8:c0:7a:8e:e9:63:6a:d1:
- 0f:9a:c6:d2:f4:8b:3a:14:04:56:d4:ed:b8:cc:6e:
- f5:fb:e2:2c:58:bd:7f:4f:6b:2b:f7:60:24:58:24:
- ce:26:ef:34:91:3a:d5:e3:81:d0:b2:f0:04:02:d7:
- 5b:b7:3e:92:ac:6b:12:8a:f9:e4:05:b0:3b:91:49:
- 5c:b2:eb:53:ea:f8:9f:47:86:ee:bf:95:c0:c0:06:
- 9f:d2:5b:5e:11:1b:f4:c7:04:35:29:d2:55:5c:e4:
- ed:eb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- C5:7B:58:BD:ED:DA:25:69:D2:F7:59:16:A8:B3:32:C0:7B:27:5B:F4
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://crl.comodoca.com/TrustedCertificateServices.crl
- URI:http://crl.comodo.net/TrustedCertificateServices.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- c8:93:81:3b:89:b4:af:b8:84:12:4c:8d:d2:f0:db:70:ba:57:
- 86:15:34:10:b9:2f:7f:1e:b0:a8:89:60:a1:8a:c2:77:0c:50:
- 4a:9b:00:8b:d8:8b:f4:41:e2:d0:83:8a:4a:1c:14:06:b0:a3:
- 68:05:70:31:30:a7:53:9b:0e:e9:4a:a0:58:69:67:0e:ae:9d:
- f6:a5:2c:41:bf:3c:06:6b:e4:59:cc:6d:10:f1:96:6f:1f:df:
- f4:04:02:a4:9f:45:3e:c8:d8:fa:36:46:44:50:3f:82:97:91:
- 1f:28:db:18:11:8c:2a:e4:65:83:57:12:12:8c:17:3f:94:36:
- fe:5d:b0:c0:04:77:13:b8:f4:15:d5:3f:38:cc:94:3a:55:d0:
- ac:98:f5:ba:00:5f:e0:86:19:81:78:2f:28:c0:7e:d3:cc:42:
- 0a:f5:ae:50:a0:d1:3e:c6:a1:71:ec:3f:a0:20:8c:66:3a:89:
- b4:8e:d4:d8:b1:4d:25:47:ee:2f:88:c8:b5:e1:05:45:c0:be:
- 14:71:de:7a:fd:8e:7b:7d:4d:08:96:a5:12:73:f0:2d:ca:37:
- 27:74:12:27:4c:cb:b6:97:e9:d9:ae:08:6d:5a:39:40:dd:05:
- 47:75:6a:5a:21:b3:a3:18:cf:4e:f7:2e:57:b7:98:70:5e:c8:
- c4:78:b0:62
-----BEGIN CERTIFICATE-----
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
@@ -3375,76 +966,6 @@ dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
QuoVadis Root CA
================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 985026699 (0x3ab6508b)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=BM, O=QuoVadis Limited, OU=Root Certification Authority, CN=QuoVadis Root Certification Authority
- Validity
- Not Before: Mar 19 18:33:33 2001 GMT
- Not After : Mar 17 18:33:33 2021 GMT
- Subject: C=BM, O=QuoVadis Limited, OU=Root Certification Authority, CN=QuoVadis Root Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:bf:61:b5:95:53:ba:57:fc:fa:f2:67:0b:3a:1a:
- df:11:80:64:95:b4:d1:bc:cd:7a:cf:f6:29:96:2e:
- 24:54:40:24:38:f7:1a:85:dc:58:4c:cb:a4:27:42:
- 97:d0:9f:83:8a:c3:e4:06:03:5b:00:a5:51:1e:70:
- 04:74:e2:c1:d4:3a:ab:d7:ad:3b:07:18:05:8e:fd:
- 83:ac:ea:66:d9:18:1b:68:8a:f5:57:1a:98:ba:f5:
- ed:76:3d:7c:d9:de:94:6a:3b:4b:17:c1:d5:8f:bd:
- 65:38:3a:95:d0:3d:55:36:4e:df:79:57:31:2a:1e:
- d8:59:65:49:58:20:98:7e:ab:5f:7e:9f:e9:d6:4d:
- ec:83:74:a9:c7:6c:d8:ee:29:4a:85:2a:06:14:f9:
- 54:e6:d3:da:65:07:8b:63:37:12:d7:d0:ec:c3:7b:
- 20:41:44:a3:ed:cb:a0:17:e1:71:65:ce:1d:66:31:
- f7:76:01:19:c8:7d:03:58:b6:95:49:1d:a6:12:26:
- e8:c6:0c:76:e0:e3:66:cb:ea:5d:a6:26:ee:e5:cc:
- 5f:bd:67:a7:01:27:0e:a2:ca:54:c5:b1:7a:95:1d:
- 71:1e:4a:29:8a:03:dc:6a:45:c1:a4:19:5e:6f:36:
- cd:c3:a2:b0:b7:fe:5c:38:e2:52:bc:f8:44:43:e6:
- 90:bb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Authority Information Access:
- OCSP - URI:https://ocsp.quovadisoffshore.com
-
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.8024.0.1
- User Notice:
- Explicit Text: Reliance on the QuoVadis Root Certificate by any party assumes acceptance of the then applicable standard terms and conditions of use, certification practices, and the QuoVadis Certificate Policy.
- CPS: http://www.quovadis.bm
-
- X509v3 Subject Key Identifier:
- 8B:4B:6D:ED:D3:29:B9:06:19:EC:39:39:A9:F0:97:84:6A:CB:EF:DF
- X509v3 Authority Key Identifier:
- keyid:8B:4B:6D:ED:D3:29:B9:06:19:EC:39:39:A9:F0:97:84:6A:CB:EF:DF
- DirName:/C=BM/O=QuoVadis Limited/OU=Root Certification Authority/CN=QuoVadis Root Certification Authority
- serial:3A:B6:50:8B
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 8a:d4:14:b5:fe:f4:9a:92:a7:19:d4:a4:7e:72:18:8f:d9:68:
- 7c:52:24:dd:67:6f:39:7a:c4:aa:5e:3d:e2:58:b0:4d:70:98:
- 84:61:e8:1b:e3:69:18:0e:ce:fb:47:50:a0:4e:ff:f0:24:1f:
- bd:b2:ce:f5:27:fc:ec:2f:53:aa:73:7b:03:3d:74:6e:e6:16:
- 9e:eb:a5:2e:c4:bf:56:27:50:2b:62:ba:be:4b:1c:3c:55:5c:
- 41:1d:24:be:82:20:47:5d:d5:44:7e:7a:16:68:df:7d:4d:51:
- 70:78:57:1d:33:1e:fd:02:99:9c:0c:cd:0a:05:4f:c7:bb:8e:
- a4:75:fa:4a:6d:b1:80:8e:09:56:b9:9c:1a:60:fe:5d:c1:d7:
- 7a:dc:11:78:d0:d6:5d:c1:b7:d5:ad:32:99:03:3a:8a:cc:54:
- 25:39:31:81:7b:13:22:51:ba:46:6c:a1:bb:9e:fa:04:6c:49:
- 26:74:8f:d2:73:eb:cc:30:a2:e6:ea:59:22:87:f8:97:f5:0e:
- fd:ea:cc:92:a4:16:c4:52:18:ea:21:ce:b1:f1:e6:84:81:e5:
- ba:a9:86:28:f2:43:5a:5d:12:9d:ac:1e:d9:a8:e5:0a:6a:a7:
- 7f:a0:87:29:cf:f2:89:4d:d4:ec:c5:e2:e6:7a:d0:36:23:8a:
- 4a:74:36:f9
-----BEGIN CERTIFICATE-----
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
@@ -3482,98 +1003,6 @@ SnQ2+Q==
QuoVadis Root CA 2
==================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1289 (0x509)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2
- Validity
- Not Before: Nov 24 18:27:00 2006 GMT
- Not After : Nov 24 18:23:33 2031 GMT
- Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:9a:18:ca:4b:94:0d:00:2d:af:03:29:8a:f0:0f:
- 81:c8:ae:4c:19:85:1d:08:9f:ab:29:44:85:f3:2f:
- 81:ad:32:1e:90:46:bf:a3:86:26:1a:1e:fe:7e:1c:
- 18:3a:5c:9c:60:17:2a:3a:74:83:33:30:7d:61:54:
- 11:cb:ed:ab:e0:e6:d2:a2:7e:f5:6b:6f:18:b7:0a:
- 0b:2d:fd:e9:3e:ef:0a:c6:b3:10:e9:dc:c2:46:17:
- f8:5d:fd:a4:da:ff:9e:49:5a:9c:e6:33:e6:24:96:
- f7:3f:ba:5b:2b:1c:7a:35:c2:d6:67:fe:ab:66:50:
- 8b:6d:28:60:2b:ef:d7:60:c3:c7:93:bc:8d:36:91:
- f3:7f:f8:db:11:13:c4:9c:77:76:c1:ae:b7:02:6a:
- 81:7a:a9:45:83:e2:05:e6:b9:56:c1:94:37:8f:48:
- 71:63:22:ec:17:65:07:95:8a:4b:df:8f:c6:5a:0a:
- e5:b0:e3:5f:5e:6b:11:ab:0c:f9:85:eb:44:e9:f8:
- 04:73:f2:e9:fe:5c:98:8c:f5:73:af:6b:b4:7e:cd:
- d4:5c:02:2b:4c:39:e1:b2:95:95:2d:42:87:d7:d5:
- b3:90:43:b7:6c:13:f1:de:dd:f6:c4:f8:89:3f:d1:
- 75:f5:92:c3:91:d5:8a:88:d0:90:ec:dc:6d:de:89:
- c2:65:71:96:8b:0d:03:fd:9c:bf:5b:16:ac:92:db:
- ea:fe:79:7c:ad:eb:af:f7:16:cb:db:cd:25:2b:e5:
- 1f:fb:9a:9f:e2:51:cc:3a:53:0c:48:e6:0e:bd:c9:
- b4:76:06:52:e6:11:13:85:72:63:03:04:e0:04:36:
- 2b:20:19:02:e8:74:a7:1f:b6:c9:56:66:f0:75:25:
- dc:67:c1:0e:61:60:88:b3:3e:d1:a8:fc:a3:da:1d:
- b0:d1:b1:23:54:df:44:76:6d:ed:41:d8:c1:b2:22:
- b6:53:1c:df:35:1d:dc:a1:77:2a:31:e4:2d:f5:e5:
- e5:db:c8:e0:ff:e5:80:d7:0b:63:a0:ff:33:a1:0f:
- ba:2c:15:15:ea:97:b3:d2:a2:b5:be:f2:8c:96:1e:
- 1a:8f:1d:6c:a4:61:37:b9:86:73:33:d7:97:96:9e:
- 23:7d:82:a4:4c:81:e2:a1:d1:ba:67:5f:95:07:a3:
- 27:11:ee:16:10:7b:bc:45:4a:4c:b2:04:d2:ab:ef:
- d5:fd:0c:51:ce:50:6a:08:31:f9:91:da:0c:8f:64:
- 5c:03:c3:3a:8b:20:3f:6e:8d:67:3d:3a:d6:fe:7d:
- 5b:88:c9:5e:fb:cc:61:dc:8b:33:77:d3:44:32:35:
- 09:62:04:92:16:10:d8:9e:27:47:fb:3b:21:e3:f8:
- eb:1d:5b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 1A:84:62:BC:48:4C:33:25:04:D4:EE:D0:F6:03:C4:19:46:D1:94:6B
- X509v3 Authority Key Identifier:
- keyid:1A:84:62:BC:48:4C:33:25:04:D4:EE:D0:F6:03:C4:19:46:D1:94:6B
- DirName:/C=BM/O=QuoVadis Limited/CN=QuoVadis Root CA 2
- serial:05:09
-
- Signature Algorithm: sha1WithRSAEncryption
- 3e:0a:16:4d:9f:06:5b:a8:ae:71:5d:2f:05:2f:67:e6:13:45:
- 83:c4:36:f6:f3:c0:26:0c:0d:b5:47:64:5d:f8:b4:72:c9:46:
- a5:03:18:27:55:89:78:7d:76:ea:96:34:80:17:20:dc:e7:83:
- f8:8d:fc:07:b8:da:5f:4d:2e:67:b2:84:fd:d9:44:fc:77:50:
- 81:e6:7c:b4:c9:0d:0b:72:53:f8:76:07:07:41:47:96:0c:fb:
- e0:82:26:93:55:8c:fe:22:1f:60:65:7c:5f:e7:26:b3:f7:32:
- 90:98:50:d4:37:71:55:f6:92:21:78:f7:95:79:fa:f8:2d:26:
- 87:66:56:30:77:a6:37:78:33:52:10:58:ae:3f:61:8e:f2:6a:
- b1:ef:18:7e:4a:59:63:ca:8d:a2:56:d5:a7:2f:bc:56:1f:cf:
- 39:c1:e2:fb:0a:a8:15:2c:7d:4d:7a:63:c6:6c:97:44:3c:d2:
- 6f:c3:4a:17:0a:f8:90:d2:57:a2:19:51:a5:2d:97:41:da:07:
- 4f:a9:50:da:90:8d:94:46:e1:3e:f0:94:fd:10:00:38:f5:3b:
- e8:40:e1:b4:6e:56:1a:20:cc:6f:58:8d:ed:2e:45:8f:d6:e9:
- 93:3f:e7:b1:2c:df:3a:d6:22:8c:dc:84:bb:22:6f:d0:f8:e4:
- c6:39:e9:04:88:3c:c3:ba:eb:55:7a:6d:80:99:24:f5:6c:01:
- fb:f8:97:b0:94:5b:eb:fd:d2:6f:f1:77:68:0d:35:64:23:ac:
- b8:55:a1:03:d1:4d:42:19:dc:f8:75:59:56:a3:f9:a8:49:79:
- f8:af:0e:b9:11:a0:7c:b7:6a:ed:34:d0:b6:26:62:38:1a:87:
- 0c:f8:e8:fd:2e:d3:90:7f:07:91:2a:1d:d6:7e:5c:85:83:99:
- b0:38:08:3f:e9:5e:f9:35:07:e4:c9:62:6e:57:7f:a7:50:95:
- f7:ba:c8:9b:e6:8e:a2:01:c5:d6:66:bf:79:61:f3:3c:1c:e1:
- b9:82:5c:5d:a0:c3:e9:d8:48:bd:19:a2:11:14:19:6e:b2:86:
- 1b:68:3e:48:37:1a:88:b7:5d:96:5e:9c:c7:ef:27:62:08:e2:
- 91:19:5c:d2:f1:21:dd:ba:17:42:82:97:71:81:53:31:a9:9f:
- f6:7d:62:bf:72:e1:a3:93:1d:cc:8a:26:5a:09:38:d0:ce:d7:
- 0d:80:16:b4:78:a5:3a:87:4c:8d:8a:a5:d5:46:97:f2:2c:10:
- b9:bc:54:22:c0:01:50:69:43:9e:f4:b2:ef:6d:f8:ec:da:f1:
- e3:b1:ef:df:91:8f:54:2a:0b:25:c1:26:19:c4:52:10:05:65:
- d5:82:10:ea:c2:31:cd:2e
-----BEGIN CERTIFICATE-----
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
@@ -3610,104 +1039,6 @@ ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
QuoVadis Root CA 3
==================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1478 (0x5c6)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 3
- Validity
- Not Before: Nov 24 19:11:23 2006 GMT
- Not After : Nov 24 19:06:44 2031 GMT
- Subject: C=BM, O=QuoVadis Limited, CN=QuoVadis Root CA 3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:cc:57:42:16:54:9c:e6:98:d3:d3:4d:ee:fe:ed:
- c7:9f:43:39:4a:65:b3:e8:16:88:34:db:0d:59:91:
- 74:cf:92:b8:04:40:ad:02:4b:31:ab:bc:8d:91:68:
- d8:20:0e:1a:01:e2:1a:7b:4e:17:5d:e2:8a:b7:3f:
- 99:1a:cd:eb:61:ab:c2:65:a6:1f:b7:b7:bd:b7:8f:
- fc:fd:70:8f:0b:a0:67:be:01:a2:59:cf:71:e6:0f:
- 29:76:ff:b1:56:79:45:2b:1f:9e:7a:54:e8:a3:29:
- 35:68:a4:01:4f:0f:a4:2e:37:ef:1b:bf:e3:8f:10:
- a8:72:ab:58:57:e7:54:86:c8:c9:f3:5b:da:2c:da:
- 5d:8e:6e:3c:a3:3e:da:fb:82:e5:dd:f2:5c:b2:05:
- 33:6f:8a:36:ce:d0:13:4e:ff:bf:4a:0c:34:4c:a6:
- c3:21:bd:50:04:55:eb:b1:bb:9d:fb:45:1e:64:15:
- de:55:01:8c:02:76:b5:cb:a1:3f:42:69:bc:2f:bd:
- 68:43:16:56:89:2a:37:61:91:fd:a6:ae:4e:c0:cb:
- 14:65:94:37:4b:92:06:ef:04:d0:c8:9c:88:db:0b:
- 7b:81:af:b1:3d:2a:c4:65:3a:78:b6:ee:dc:80:b1:
- d2:d3:99:9c:3a:ee:6b:5a:6b:b3:8d:b7:d5:ce:9c:
- c2:be:a5:4b:2f:16:b1:9e:68:3b:06:6f:ae:7d:9f:
- f8:de:ec:cc:29:a7:98:a3:25:43:2f:ef:f1:5f:26:
- e1:88:4d:f8:5e:6e:d7:d9:14:6e:19:33:69:a7:3b:
- 84:89:93:c4:53:55:13:a1:51:78:40:f8:b8:c9:a2:
- ee:7b:ba:52:42:83:9e:14:ed:05:52:5a:59:56:a7:
- 97:fc:9d:3f:0a:29:d8:dc:4f:91:0e:13:bc:de:95:
- a4:df:8b:99:be:ac:9b:33:88:ef:b5:81:af:1b:c6:
- 22:53:c8:f6:c7:ee:97:14:b0:c5:7c:78:52:c8:f0:
- ce:6e:77:60:84:a6:e9:2a:76:20:ed:58:01:17:30:
- 93:e9:1a:8b:e0:73:63:d9:6a:92:94:49:4e:b4:ad:
- 4a:85:c4:a3:22:30:fc:09:ed:68:22:73:a6:88:0c:
- 55:21:58:c5:e1:3a:9f:2a:dd:ca:e1:90:e0:d9:73:
- ab:6c:80:b8:e8:0b:64:93:a0:9c:8c:19:ff:b3:d2:
- 0c:ec:91:26:87:8a:b3:a2:e1:70:8f:2c:0a:e5:cd:
- 6d:68:51:eb:da:3f:05:7f:8b:32:e6:13:5c:6b:fe:
- 5f:40:e2:22:c8:b4:b4:64:4f:d6:ba:7d:48:3e:a8:
- 69:0c:d7:bb:86:71:c9:73:b8:3f:3b:9d:25:4b:da:
- ff:40:eb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.8024.0.3
- User Notice:
- Explicit Text: Any use of this Certificate constitutes acceptance of the QuoVadis Root CA 3 Certificate Policy / Certification Practice Statement.
- CPS: http://www.quovadisglobal.com/cps
-
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- F2:C0:13:E0:82:43:3E:FB:EE:2F:67:32:96:35:5C:DB:B8:CB:02:D0
- X509v3 Authority Key Identifier:
- keyid:F2:C0:13:E0:82:43:3E:FB:EE:2F:67:32:96:35:5C:DB:B8:CB:02:D0
- DirName:/C=BM/O=QuoVadis Limited/CN=QuoVadis Root CA 3
- serial:05:C6
-
- Signature Algorithm: sha1WithRSAEncryption
- 4f:ad:a0:2c:4c:fa:c0:f2:6f:f7:66:55:ab:23:34:ee:e7:29:
- da:c3:5b:b6:b0:83:d9:d0:d0:e2:21:fb:f3:60:a7:3b:5d:60:
- 53:27:a2:9b:f6:08:22:2a:e7:bf:a0:72:e5:9c:24:6a:31:b1:
- 90:7a:27:db:84:11:89:27:a6:77:5a:38:d7:bf:ac:86:fc:ee:
- 5d:83:bc:06:c6:d1:77:6b:0f:6d:24:2f:4b:7a:6c:a7:07:96:
- ca:e3:84:9f:ad:88:8b:1d:ab:16:8d:5b:66:17:d9:16:f4:8b:
- 80:d2:dd:f8:b2:76:c3:fc:38:13:aa:0c:de:42:69:2b:6e:f3:
- 3c:eb:80:27:db:f5:a6:44:0d:9f:5a:55:59:0b:d5:0d:52:48:
- c5:ae:9f:f2:2f:80:c5:ea:32:50:35:12:97:2e:c1:e1:ff:f1:
- 23:88:51:38:9f:f2:66:56:76:e7:0f:51:97:a5:52:0c:4d:49:
- 51:95:36:3d:bf:a2:4b:0c:10:1d:86:99:4c:aa:f3:72:11:93:
- e4:ea:f6:9b:da:a8:5d:a7:4d:b7:9e:02:ae:73:00:c8:da:23:
- 03:e8:f9:ea:19:74:62:00:94:cb:22:20:be:94:a7:59:b5:82:
- 6a:be:99:79:7a:a9:f2:4a:24:52:f7:74:fd:ba:4e:e6:a8:1d:
- 02:6e:b1:0d:80:44:c1:ae:d3:23:37:5f:bb:85:7c:2b:92:2e:
- e8:7e:a5:8b:dd:99:e1:bf:27:6f:2d:5d:aa:7b:87:fe:0a:dd:
- 4b:fc:8e:f5:26:e4:6e:70:42:6e:33:ec:31:9e:7b:93:c1:e4:
- c9:69:1a:3d:c0:6b:4e:22:6d:ee:ab:58:4d:c6:d0:41:c1:2b:
- ea:4f:12:87:5e:eb:45:d8:6c:f5:98:02:d3:a0:d8:55:8a:06:
- 99:19:a2:a0:77:d1:30:9e:ac:cc:75:ee:83:f5:b0:62:39:cf:
- 6c:57:e2:4c:d2:91:0b:0e:75:28:1b:9a:bf:fd:1a:43:f1:ca:
- 77:fb:3b:8f:61:b8:69:28:16:42:04:5e:70:2a:1c:21:d8:8f:
- e1:bd:23:5b:2d:74:40:92:d9:63:19:0d:73:dd:69:bc:62:47:
- bc:e0:74:2b:b2:eb:7d:be:41:1b:b5:c0:46:c5:a1:22:cb:5f:
- 4e:c1:28:92:de:18:ba:d5:2a:28:bb:11:8b:17:93:98:99:60:
- 94:5c:23:cf:5a:27:97:5e:0b:05:06:93:37:1e:3b:69:36:eb:
- a9:9e:61:1d:8f:32:da:8e:0c:d6:74:3e:7b:09:24:da:01:77:
- 47:c4:3b:cd:34:8c:99:f5:ca:e1:25:61:33:b2:59:1b:e2:6e:
- d7:37:57:b6:0d:a9:12:da
-----BEGIN CERTIFICATE-----
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
@@ -3749,62 +1080,6 @@ mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
Security Communication Root CA
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=JP, O=SECOM Trust.net, OU=Security Communication RootCA1
- Validity
- Not Before: Sep 30 04:20:49 2003 GMT
- Not After : Sep 30 04:20:49 2023 GMT
- Subject: C=JP, O=SECOM Trust.net, OU=Security Communication RootCA1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b3:b3:fe:7f:d3:6d:b1:ef:16:7c:57:a5:0c:6d:
- 76:8a:2f:4b:bf:64:fb:4c:ee:8a:f0:f3:29:7c:f5:
- ff:ee:2a:e0:e9:e9:ba:5b:64:22:9a:9a:6f:2c:3a:
- 26:69:51:05:99:26:dc:d5:1c:6a:71:c6:9a:7d:1e:
- 9d:dd:7c:6c:c6:8c:67:67:4a:3e:f8:71:b0:19:27:
- a9:09:0c:a6:95:bf:4b:8c:0c:fa:55:98:3b:d8:e8:
- 22:a1:4b:71:38:79:ac:97:92:69:b3:89:7e:ea:21:
- 68:06:98:14:96:87:d2:61:36:bc:6d:27:56:9e:57:
- ee:c0:c0:56:fd:32:cf:a4:d9:8e:c2:23:d7:8d:a8:
- f3:d8:25:ac:97:e4:70:38:f4:b6:3a:b4:9d:3b:97:
- 26:43:a3:a1:bc:49:59:72:4c:23:30:87:01:58:f6:
- 4e:be:1c:68:56:66:af:cd:41:5d:c8:b3:4d:2a:55:
- 46:ab:1f:da:1e:e2:40:3d:db:cd:7d:b9:92:80:9c:
- 37:dd:0c:96:64:9d:dc:22:f7:64:8b:df:61:de:15:
- 94:52:15:a0:7d:52:c9:4b:a8:21:c9:c6:b1:ed:cb:
- c3:95:60:d1:0f:f0:ab:70:f8:df:cb:4d:7e:ec:d6:
- fa:ab:d9:bd:7f:54:f2:a5:e9:79:fa:d9:d6:76:24:
- 28:73
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- A0:73:49:99:68:DC:85:5B:65:E3:9B:28:2F:57:9F:BD:33:BC:07:48
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 68:40:a9:a8:bb:e4:4f:5d:79:b3:05:b5:17:b3:60:13:eb:c6:
- 92:5d:e0:d1:d3:6a:fe:fb:be:9b:6d:bf:c7:05:6d:59:20:c4:
- 1c:f0:b7:da:84:58:02:63:fa:48:16:ef:4f:a5:0b:f7:4a:98:
- f2:3f:9e:1b:ad:47:6b:63:ce:08:47:eb:52:3f:78:9c:af:4d:
- ae:f8:d5:4f:cf:9a:98:2a:10:41:39:52:c4:dd:d9:9b:0e:ef:
- 93:01:ae:b2:2e:ca:68:42:24:42:6c:b0:b3:3a:3e:cd:e9:da:
- 48:c4:15:cb:e9:f9:07:0f:92:50:49:8a:dd:31:97:5f:c9:e9:
- 37:aa:3b:59:65:97:94:32:c9:b3:9f:3e:3a:62:58:c5:49:ad:
- 62:0e:71:a5:32:aa:2f:c6:89:76:43:40:13:13:67:3d:a2:54:
- 25:10:cb:f1:3a:f2:d9:fa:db:49:56:bb:a6:fe:a7:41:35:c3:
- e0:88:61:c9:88:c7:df:36:10:22:98:59:ea:b0:4a:fb:56:16:
- 73:6e:ac:4d:f7:22:a1:4f:ad:1d:7a:2d:45:27:e5:30:c1:5e:
- f2:da:13:cb:25:42:51:95:47:03:8c:6c:21:cc:74:42:ed:53:
- ff:33:8b:8f:0f:57:01:16:2f:cf:a6:ee:c9:70:22:14:bd:fd:
- be:6c:0b:03
-----BEGIN CERTIFICATE-----
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
@@ -3826,142 +1101,8 @@ JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
-----END CERTIFICATE-----
-Sonera Class 1 Root CA
-======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 36 (0x24)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=FI, O=Sonera, CN=Sonera Class1 CA
- Validity
- Not Before: Apr 6 10:49:13 2001 GMT
- Not After : Apr 6 10:49:13 2021 GMT
- Subject: C=FI, O=Sonera, CN=Sonera Class1 CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b5:89:1f:2b:4f:67:0a:79:ff:c5:1e:f8:7f:3c:
- ed:d1:7e:da:b0:cd:6d:2f:36:ac:34:c6:db:d9:64:
- 17:08:63:30:33:22:8a:4c:ee:8e:bb:0f:0d:42:55:
- c9:9d:2e:a5:ef:f7:a7:8c:c3:ab:b9:97:cb:8e:ef:
- 3f:15:67:a8:82:72:63:53:0f:41:8c:7d:10:95:24:
- a1:5a:a5:06:fa:92:57:9d:fa:a5:01:f2:75:e9:1f:
- bc:56:26:52:4e:78:19:65:58:55:03:58:c0:14:ae:
- 8c:7c:55:5f:70:5b:77:23:06:36:97:f3:24:b5:9a:
- 46:95:e4:df:0d:0b:05:45:e5:d1:f2:1d:82:bb:c6:
- 13:e0:fe:aa:7a:fd:69:30:94:f3:d2:45:85:fc:f2:
- 32:5b:32:de:e8:6c:5d:1f:cb:a4:22:74:b0:80:8e:
- 5d:94:f7:06:00:4b:a9:d4:5e:2e:35:50:09:f3:80:
- 97:f4:0c:17:ae:39:d8:5f:cd:33:c1:1c:ca:89:c2:
- 22:f7:45:12:ed:5e:12:93:9d:63:ab:82:2e:b9:eb:
- 42:41:44:cb:4a:1a:00:82:0d:9e:f9:8b:57:3e:4c:
- c7:17:ed:2c:8b:72:33:5f:72:7a:38:56:d5:e6:d9:
- ae:05:1a:1d:75:45:b1:cb:a5:25:1c:12:57:36:fd:
- 22:37
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 47:E2:0C:8B:F6:53:88:52
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 8b:1a:b2:c9:5d:61:b4:e1:b9:2b:b9:53:d1:b2:85:9d:77:8e:
- 16:ee:11:3d:db:c2:63:d9:5b:97:65:fb:12:67:d8:2a:5c:b6:
- ab:e5:5e:c3:b7:16:2f:c8:e8:ab:1d:8a:fd:ab:1a:7c:d5:5f:
- 63:cf:dc:b0:dd:77:b9:a8:e6:d2:22:38:87:07:14:d9:ff:be:
- 56:b5:fd:07:0e:3c:55:ca:16:cc:a7:a6:77:37:fb:db:5c:1f:
- 4e:59:06:87:a3:03:43:f5:16:ab:b7:84:bd:4e:ef:9f:31:37:
- f0:46:f1:40:b6:d1:0c:a5:64:f8:63:5e:21:db:55:4e:4f:31:
- 76:9c:10:61:8e:b6:53:3a:a3:11:be:af:6d:7c:1e:bd:ae:2d:
- e2:0c:69:c7:85:53:68:a2:61:ba:c5:3e:b4:79:54:78:9e:0a:
- c7:02:be:62:d1:11:82:4b:65:2f:91:5a:c2:a8:87:b1:56:68:
- 94:79:f9:25:f7:c1:d5:ae:1a:b8:bb:3d:8f:a9:8a:38:15:f7:
- 73:d0:5a:60:d1:80:b0:f0:dc:d5:50:cd:4e:ee:92:48:69:ed:
- b2:23:1e:30:cc:c8:94:c8:b6:f5:3b:86:7f:3f:a6:2e:9f:f6:
- 3e:2c:b5:92:96:3e:df:2c:93:8a:ff:81:8c:0f:0f:59:21:19:
- 57:bd:55:9a
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
-
Sonera Class 2 Root CA
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 29 (0x1d)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=FI, O=Sonera, CN=Sonera Class2 CA
- Validity
- Not Before: Apr 6 07:29:40 2001 GMT
- Not After : Apr 6 07:29:40 2021 GMT
- Subject: C=FI, O=Sonera, CN=Sonera Class2 CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:90:17:4a:35:9d:ca:f0:0d:96:c7:44:fa:16:37:
- fc:48:bd:bd:7f:80:2d:35:3b:e1:6f:a8:67:a9:bf:
- 03:1c:4d:8c:6f:32:47:d5:41:68:a4:13:04:c1:35:
- 0c:9a:84:43:fc:5c:1d:ff:89:b3:e8:17:18:cd:91:
- 5f:fb:89:e3:ea:bf:4e:5d:7c:1b:26:d3:75:79:ed:
- e6:84:e3:57:e5:ad:29:c4:f4:3a:28:e7:a5:7b:84:
- 36:69:b3:fd:5e:76:bd:a3:2d:99:d3:90:4e:23:28:
- 7d:18:63:f1:54:3b:26:9d:76:5b:97:42:b2:ff:ae:
- f0:4e:ec:dd:39:95:4e:83:06:7f:e7:49:40:c8:c5:
- 01:b2:54:5a:66:1d:3d:fc:f9:e9:3c:0a:9e:81:b8:
- 70:f0:01:8b:e4:23:54:7c:c8:ae:f8:90:1e:00:96:
- 72:d4:54:cf:61:23:bc:ea:fb:9d:02:95:d1:b6:b9:
- 71:3a:69:08:3f:0f:b4:e1:42:c7:88:f5:3f:98:a8:
- a7:ba:1c:e0:71:71:ef:58:57:81:50:7a:5c:6b:74:
- 46:0e:83:03:98:c3:8e:a8:6e:f2:76:32:6e:27:83:
- c2:73:f3:dc:18:e8:b4:93:ea:75:44:6b:04:60:20:
- 71:57:87:9d:f3:be:a0:90:23:3d:8a:24:e1:da:21:
- db:c3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 4A:A0:AA:58:84:D3:5E:3C
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 5a:ce:87:f9:16:72:15:57:4b:1d:d9:9b:e7:a2:26:30:ec:93:
- 67:df:d6:2d:d2:34:af:f7:38:a5:ce:ab:16:b9:ab:2f:7c:35:
- cb:ac:d0:0f:b4:4c:2b:fc:80:ef:6b:8c:91:5f:36:76:f7:db:
- b3:1b:19:ea:f4:b2:11:fd:61:71:44:bf:28:b3:3a:1d:bf:b3:
- 43:e8:9f:bf:dc:31:08:71:b0:9d:8d:d6:34:47:32:90:c6:65:
- 24:f7:a0:4a:7c:04:73:8f:39:6f:17:8c:72:b5:bd:4b:c8:7a:
- f8:7b:83:c3:28:4e:9c:09:ea:67:3f:b2:67:04:1b:c3:14:da:
- f8:e7:49:24:91:d0:1d:6a:fa:61:39:ef:6b:e7:21:75:06:07:
- d8:12:b4:21:20:70:42:71:81:da:3c:9a:36:be:a6:5b:0d:6a:
- 6c:9a:1f:91:7b:f9:f9:ef:42:ba:4e:4e:9e:cc:0c:8d:94:dc:
- d9:45:9c:5e:ec:42:50:63:ae:f4:5d:c4:b1:12:dc:ca:3b:a8:
- 2e:9d:14:5a:05:75:b7:ec:d7:63:e2:ba:35:b6:04:08:91:e8:
- da:9d:9c:f6:66:b5:18:ac:0a:a6:54:26:34:33:d2:1b:c1:d4:
- 7f:1a:3a:8e:0b:aa:32:6e:db:fc:4f:25:9f:d9:32:c7:96:5a:
- 70:ac:df:4c
-----BEGIN CERTIFICATE-----
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
@@ -3984,66 +1125,6 @@ ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
Staat der Nederlanden Root CA
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 10000010 (0x98968a)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA
- Validity
- Not Before: Dec 17 09:23:49 2002 GMT
- Not After : Dec 16 09:15:38 2015 GMT
- Subject: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:98:d2:b5:51:11:7a:81:a6:14:98:71:6d:be:cc:
- e7:13:1b:d6:27:0e:7a:b3:6a:18:1c:b6:61:5a:d5:
- 61:09:bf:de:90:13:c7:67:ee:dd:f3:da:c5:0c:12:
- 9e:35:55:3e:2c:27:88:40:6b:f7:dc:dd:22:61:f5:
- c2:c7:0e:f5:f6:d5:76:53:4d:8f:8c:bc:18:76:37:
- 85:9d:e8:ca:49:c7:d2:4f:98:13:09:a2:3e:22:88:
- 9c:7f:d6:f2:10:65:b4:ee:5f:18:d5:17:e3:f8:c5:
- fd:e2:9d:a2:ef:53:0e:85:77:a2:0f:e1:30:47:ee:
- 00:e7:33:7d:44:67:1a:0b:51:e8:8b:a0:9e:50:98:
- 68:34:52:1f:2e:6d:01:f2:60:45:f2:31:eb:a9:31:
- 68:29:bb:7a:41:9e:c6:19:7f:94:b4:51:39:03:7f:
- b2:de:a7:32:9b:b4:47:8e:6f:b4:4a:ae:e5:af:b1:
- dc:b0:1b:61:bc:99:72:de:e4:89:b7:7a:26:5d:da:
- 33:49:5b:52:9c:0e:f5:8a:ad:c3:b8:3d:e8:06:6a:
- c2:d5:2a:0b:6c:7b:84:bd:56:05:cb:86:65:92:ec:
- 44:2b:b0:8e:b9:dc:70:0b:46:da:ad:bc:63:88:39:
- fa:db:6a:fe:23:fa:bc:e4:48:f4:67:2b:6a:11:10:
- 21:49
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://www.pkioverheid.nl/policies/root-policy
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- A8:7D:EB:BC:63:A4:74:13:74:00:EC:96:E0:D3:34:C1:2C:BF:6C:F8
- Signature Algorithm: sha1WithRSAEncryption
- 05:84:87:55:74:36:61:c1:bb:d1:d4:c6:15:a8:13:b4:9f:a4:
- fe:bb:ee:15:b4:2f:06:0c:29:f2:a8:92:a4:61:0d:fc:ab:5c:
- 08:5b:51:13:2b:4d:c2:2a:61:c8:f8:09:58:fc:2d:02:b2:39:
- 7d:99:66:81:bf:6e:5c:95:45:20:6c:e6:79:a7:d1:d8:1c:29:
- fc:c2:20:27:51:c8:f1:7c:5d:34:67:69:85:11:30:c6:00:d2:
- d7:f3:d3:7c:b6:f0:31:57:28:12:82:73:e9:33:2f:a6:55:b4:
- 0b:91:94:47:9c:fa:bb:7a:42:32:e8:ae:7e:2d:c8:bc:ac:14:
- bf:d9:0f:d9:5b:fc:c1:f9:7a:95:e1:7d:7e:96:fc:71:b0:c2:
- 4c:c8:df:45:34:c9:ce:0d:f2:9c:64:08:d0:3b:c3:29:c5:b2:
- ed:90:04:c1:b1:29:91:c5:30:6f:c1:a9:72:33:cc:fe:5d:16:
- 17:2c:11:69:e7:7e:fe:c5:83:08:df:bc:dc:22:3a:2e:20:69:
- 23:39:56:60:67:90:8b:2e:76:39:fb:11:88:97:f6:7c:bd:4b:
- b8:20:16:67:05:8d:e2:3b:c1:72:3f:94:95:37:c7:5d:b9:9e:
- d8:93:a1:17:8f:ff:0c:66:15:c1:24:7c:32:7c:03:1d:3b:a1:
- 58:45:32:93
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
@@ -4069,74 +1150,6 @@ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
TDC Internet Root CA
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 986490188 (0x3acca54c)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DK, O=TDC Internet, OU=TDC Internet Root CA
- Validity
- Not Before: Apr 5 16:33:17 2001 GMT
- Not After : Apr 5 17:03:17 2021 GMT
- Subject: C=DK, O=TDC Internet, OU=TDC Internet Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c4:b8:40:bc:91:d5:63:1f:d7:99:a0:8b:0c:40:
- 1e:74:b7:48:9d:46:8c:02:b2:e0:24:5f:f0:19:13:
- a7:37:83:6b:5d:c7:8e:f9:84:30:ce:1a:3b:fa:fb:
- ce:8b:6d:23:c6:c3:6e:66:9f:89:a5:df:e0:42:50:
- 67:fa:1f:6c:1e:f4:d0:05:d6:bf:ca:d6:4e:e4:68:
- 60:6c:46:aa:1c:5d:63:e1:07:86:0e:65:00:a7:2e:
- a6:71:c6:bc:b9:81:a8:3a:7d:1a:d2:f9:d1:ac:4b:
- cb:ce:75:af:dc:7b:fa:81:73:d4:fc:ba:bd:41:88:
- d4:74:b3:f9:5e:38:3a:3c:43:a8:d2:95:4e:77:6d:
- 13:0c:9d:8f:78:01:b7:5a:20:1f:03:37:35:e2:2c:
- db:4b:2b:2c:78:b9:49:db:c4:d0:c7:9c:9c:e4:8a:
- 20:09:21:16:56:66:ff:05:ec:5b:e3:f0:cf:ab:24:
- 24:5e:c3:7f:70:7a:12:c4:d2:b5:10:a0:b6:21:e1:
- 8d:78:69:55:44:69:f5:ca:96:1c:34:85:17:25:77:
- e2:f6:2f:27:98:78:fd:79:06:3a:a2:d6:5a:43:c1:
- ff:ec:04:3b:ee:13:ef:d3:58:5a:ff:92:eb:ec:ae:
- da:f2:37:03:47:41:b6:97:c9:2d:0a:41:22:bb:bb:
- e6:a7
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 CRL Distribution Points:
- DirName:/C=DK/O=TDC Internet/OU=TDC Internet Root CA/CN=CRL1
-
- X509v3 Private Key Usage Period:
- Not Before: Apr 5 16:33:17 2001 GMT, Not After: Apr 5 17:03:17 2021 GMT
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:6C:64:01:C7:FD:85:6D:AC:C8:DA:9E:50:08:85:08:B5:3C:56:A8:50
-
- X509v3 Subject Key Identifier:
- 6C:64:01:C7:FD:85:6D:AC:C8:DA:9E:50:08:85:08:B5:3C:56:A8:50
- X509v3 Basic Constraints:
- CA:TRUE
- 1.2.840.113533.7.65.0:
- 0...V5.0:4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 4e:43:cc:d1:dd:1d:10:1b:06:7f:b7:a4:fa:d3:d9:4d:fb:23:
- 9f:23:54:5b:e6:8b:2f:04:28:8b:b5:27:6d:89:a1:ec:98:69:
- dc:e7:8d:26:83:05:79:74:ec:b4:b9:a3:97:c1:35:00:fd:15:
- da:39:81:3a:95:31:90:de:97:e9:86:a8:99:77:0c:e5:5a:a0:
- 84:ff:12:16:ac:6e:b8:8d:c3:7b:92:c2:ac:2e:d0:7d:28:ec:
- b6:f3:60:38:69:6f:3e:d8:04:55:3e:9e:cc:55:d2:ba:fe:bb:
- 47:04:d7:0a:d9:16:0a:34:29:f5:58:13:d5:4f:cf:8f:56:4b:
- b3:1e:ee:d3:98:79:da:08:1e:0c:6f:b8:f8:16:27:ef:c2:6f:
- 3d:f6:a3:4b:3e:0e:e4:6d:6c:db:3b:41:12:9b:bd:0d:47:23:
- 7f:3c:4a:d0:af:c0:af:f6:ef:1b:b5:15:c4:eb:83:c4:09:5f:
- 74:8b:d9:11:fb:c2:56:b1:3c:f8:70:ca:34:8d:43:40:13:8c:
- fd:99:03:54:79:c6:2e:ea:86:a1:f6:3a:d4:09:bc:f4:bc:66:
- cc:3d:58:d0:57:49:0a:ee:25:e2:41:ee:13:f9:9b:38:34:d1:
- 00:f5:7e:e7:94:1d:fc:69:03:62:b8:99:05:05:3d:6b:78:12:
- bd:b0:6f:65
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
@@ -4163,180 +1176,8 @@ jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
aQNiuJkFBT1reBK9sG9l
-----END CERTIFICATE-----
-TDC OCES Root CA
-================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1044954564 (0x3e48bdc4)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DK, O=TDC, CN=TDC OCES CA
- Validity
- Not Before: Feb 11 08:39:30 2003 GMT
- Not After : Feb 11 09:09:30 2037 GMT
- Subject: C=DK, O=TDC, CN=TDC OCES CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ac:62:f6:61:20:b2:cf:c0:c6:85:d7:e3:79:e6:
- cc:ed:f2:39:92:a4:97:2e:64:a3:84:5b:87:9c:4c:
- fd:a4:f3:c4:5f:21:bd:56:10:eb:db:2e:61:ec:93:
- 69:e3:a3:cc:bd:99:c3:05:fc:06:b8:ca:36:1c:fe:
- 90:8e:49:4c:c4:56:9a:2f:56:bc:cf:7b:0c:f1:6f:
- 47:a6:0d:43:4d:e2:e9:1d:39:34:cd:8d:2c:d9:12:
- 98:f9:e3:e1:c1:4a:7c:86:38:c4:a9:c4:61:88:d2:
- 5e:af:1a:26:4d:d5:e4:a0:22:47:84:d9:64:b7:19:
- 96:fc:ec:19:e4:b2:97:26:4e:4a:4c:cb:8f:24:8b:
- 54:18:1c:48:61:7b:d5:88:68:da:5d:b5:ea:cd:1a:
- 30:c1:80:83:76:50:aa:4f:d1:d4:dd:38:f0:ef:16:
- f4:e1:0c:50:06:bf:ea:fb:7a:49:a1:28:2b:1c:f6:
- fc:15:32:a3:74:6a:8f:a9:c3:62:29:71:31:e5:3b:
- a4:60:17:5e:74:e6:da:13:ed:e9:1f:1f:1b:d1:b2:
- 68:73:c6:10:34:75:46:10:10:e3:90:00:76:40:cb:
- 8b:b7:43:09:21:ff:ab:4e:93:c6:58:e9:a5:82:db:
- 77:c4:3a:99:b1:72:95:49:04:f0:b7:2b:fa:7b:59:
- 8e:dd
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Certificate Policies:
- Policy: 1.2.208.169.1.1.1
- CPS: http://www.certifikat.dk/repository
- User Notice:
- Organization: TDC
- Number: 1
- Explicit Text: Certifikater fra denne CA udstedes under OID 1.2.208.169.1.1.1. Certificates from this CA are issued under OID 1.2.208.169.1.1.1.
-
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 CRL Distribution Points:
- DirName:/C=DK/O=TDC/CN=TDC OCES CA/CN=CRL1
- URI:http://crl.oces.certifikat.dk/oces.crl
-
- X509v3 Private Key Usage Period:
- Not Before: Feb 11 08:39:30 2003 GMT, Not After: Feb 11 09:09:30 2037 GMT
- X509v3 Authority Key Identifier:
- keyid:60:B5:85:EC:56:64:7E:12:19:27:67:1D:50:15:4B:73:AE:3B:F9:12
-
- X509v3 Subject Key Identifier:
- 60:B5:85:EC:56:64:7E:12:19:27:67:1D:50:15:4B:73:AE:3B:F9:12
- 1.2.840.113533.7.65.0:
- 0...V6.0:4.0....
- Signature Algorithm: sha1WithRSAEncryption
- 0a:ba:26:26:46:d3:73:a8:09:f3:6b:0b:30:99:fd:8a:e1:57:
- 7a:11:d3:b8:94:d7:09:10:6e:a3:b1:38:03:d1:b6:f2:43:41:
- 29:62:a7:72:d8:fb:7c:05:e6:31:70:27:54:18:4e:8a:7c:4e:
- e5:d1:ca:8c:78:88:cf:1b:d3:90:8b:e6:23:f8:0b:0e:33:43:
- 7d:9c:e2:0a:19:8f:c9:01:3e:74:5d:74:c9:8b:1c:03:e5:18:
- c8:01:4c:3f:cb:97:05:5d:98:71:a6:98:6f:b6:7c:bd:37:7f:
- be:e1:93:25:6d:6f:f0:0a:ad:17:18:e1:03:bc:07:29:c8:ad:
- 26:e8:f8:61:f0:fd:21:09:7e:9a:8e:a9:68:7d:48:62:72:bd:
- 00:ea:01:99:b8:06:82:51:81:4e:f1:f5:b4:91:54:b9:23:7a:
- 00:9a:9f:5d:8d:e0:3c:64:b9:1a:12:92:2a:c7:82:44:72:39:
- dc:e2:3c:c6:d8:55:f5:15:4e:c8:05:0e:db:c6:d0:62:a6:ec:
- 15:b4:b5:02:82:db:ac:8c:a2:81:f0:9b:99:31:f5:20:20:a8:
- 88:61:0a:07:9f:94:fc:d0:d7:1b:cc:2e:17:f3:04:27:76:67:
- eb:54:83:fd:a4:90:7e:06:3d:04:a3:43:2d:da:fc:0b:62:ea:
- 2f:5f:62:53
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
-
UTN DATACorp SGC Root CA
========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:be:0c:8b:50:00:21:b4:11:d3:2a:68:06:a9:ad:69
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN - DATACorp SGC
- Validity
- Not Before: Jun 24 18:57:21 1999 GMT
- Not After : Jun 24 19:06:30 2019 GMT
- Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN - DATACorp SGC
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:df:ee:58:10:a2:2b:6e:55:c4:8e:bf:2e:46:09:
- e7:e0:08:0f:2e:2b:7a:13:94:1b:bd:f6:b6:80:8e:
- 65:05:93:00:1e:bc:af:e2:0f:8e:19:0d:12:47:ec:
- ac:ad:a3:fa:2e:70:f8:de:6e:fb:56:42:15:9e:2e:
- 5c:ef:23:de:21:b9:05:76:27:19:0f:4f:d6:c3:9c:
- b4:be:94:19:63:f2:a6:11:0a:eb:53:48:9c:be:f2:
- 29:3b:16:e8:1a:a0:4c:a6:c9:f4:18:59:68:c0:70:
- f2:53:00:c0:5e:50:82:a5:56:6f:36:f9:4a:e0:44:
- 86:a0:4d:4e:d6:47:6e:49:4a:cb:67:d7:a6:c4:05:
- b9:8e:1e:f4:fc:ff:cd:e7:36:e0:9c:05:6c:b2:33:
- 22:15:d0:b4:e0:cc:17:c0:b2:c0:f4:fe:32:3f:29:
- 2a:95:7b:d8:f2:a7:4e:0f:54:7c:a1:0d:80:b3:09:
- 03:c1:ff:5c:dd:5e:9a:3e:bc:ae:bc:47:8a:6a:ae:
- 71:ca:1f:b1:2a:b8:5f:42:05:0b:ec:46:30:d1:72:
- 0b:ca:e9:56:6d:f5:ef:df:78:be:61:ba:b2:a5:ae:
- 04:4c:bc:a8:ac:69:15:97:bd:ef:eb:b4:8c:bf:35:
- f8:d4:c3:d1:28:0e:5c:3a:9f:70:18:33:20:77:c4:
- a2:af
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage:
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 53:32:D1:B3:CF:7F:FA:E0:F1:A0:5D:85:4E:92:D2:9E:45:1D:B4:4F
- X509v3 CRL Distribution Points:
- URI:http://crl.usertrust.com/UTN-DATACorpSGC.crl
-
- X509v3 Extended Key Usage:
- TLS Web Server Authentication, Microsoft Server Gated Crypto, Netscape Server Gated Crypto
- Signature Algorithm: sha1WithRSAEncryption
- 27:35:97:00:8a:8b:28:bd:c6:33:30:1e:29:fc:e2:f7:d5:98:
- d4:40:bb:60:ca:bf:ab:17:2c:09:36:7f:50:fa:41:dc:ae:96:
- 3a:0a:23:3e:89:59:c9:a3:07:ed:1b:37:ad:fc:7c:be:51:49:
- 5a:de:3a:0a:54:08:16:45:c2:99:b1:87:cd:8c:68:e0:69:03:
- e9:c4:4e:98:b2:3b:8c:16:b3:0e:a0:0c:98:50:9b:93:a9:70:
- 09:c8:2c:a3:8f:df:02:e4:e0:71:3a:f1:b4:23:72:a0:aa:01:
- df:df:98:3e:14:50:a0:31:26:bd:28:e9:5a:30:26:75:f9:7b:
- 60:1c:8d:f3:cd:50:26:6d:04:27:9a:df:d5:0d:45:47:29:6b:
- 2c:e6:76:d9:a9:29:7d:32:dd:c9:36:3c:bd:ae:35:f1:11:9e:
- 1d:bb:90:3f:12:47:4e:8e:d7:7e:0f:62:73:1d:52:26:38:1c:
- 18:49:fd:30:74:9a:c4:e5:22:2f:d8:c0:8d:ed:91:7a:4c:00:
- 8f:72:7f:5d:da:dd:1b:8b:45:6b:e7:dd:69:97:a8:c5:56:4c:
- 0f:0c:f6:9f:7a:91:37:f6:97:82:e0:dd:71:69:ff:76:3f:60:
- 4d:3c:cf:f7:99:f9:c6:57:f4:c9:55:39:78:ba:2c:79:c9:a6:
- 88:2b:f4:08
-----BEGIN CERTIFICATE-----
MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
@@ -4364,162 +1205,8 @@ KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
mfnGV/TJVTl4uix5yaaIK/QI
-----END CERTIFICATE-----
-UTN USERFirst Email Root CA
-===========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:be:0c:8b:50:00:24:b4:11:d3:36:25:25:67:c9:89
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Client Authentication and Email
- Validity
- Not Before: Jul 9 17:28:50 1999 GMT
- Not After : Jul 9 17:36:58 2019 GMT
- Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Client Authentication and Email
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b2:39:85:a4:f2:7d:ab:41:3b:62:46:37:ae:cd:
- c1:60:75:bc:39:65:f9:4a:1a:47:a2:b9:cc:48:cc:
- 6a:98:d5:4d:35:19:b9:a4:42:e5:ce:49:e2:8a:2f:
- 1e:7c:d2:31:07:c7:4e:b4:83:64:9d:2e:29:d5:a2:
- 64:c4:85:bd:85:51:35:79:a4:4e:68:90:7b:1c:7a:
- a4:92:a8:17:f2:98:15:f2:93:cc:c9:a4:32:95:bb:
- 0c:4f:30:bd:98:a0:0b:8b:e5:6e:1b:a2:46:fa:78:
- bc:a2:6f:ab:59:5e:a5:2f:cf:ca:da:6d:aa:2f:eb:
- ac:a1:b3:6a:aa:b7:2e:67:35:8b:79:e1:1e:69:88:
- e2:e6:46:cd:a0:a5:ea:be:0b:ce:76:3a:7a:0e:9b:
- ea:fc:da:27:5b:3d:73:1f:22:e6:48:61:c6:4c:f3:
- 69:b1:a8:2e:1b:b6:d4:31:20:2c:bc:82:8a:8e:a4:
- 0e:a5:d7:89:43:fc:16:5a:af:1d:71:d7:11:59:da:
- ba:87:0d:af:fa:f3:e1:c2:f0:a4:c5:67:8c:d6:d6:
- 54:3a:de:0a:a4:ba:03:77:b3:65:c8:fd:1e:d3:74:
- 62:aa:18:ca:68:93:1e:a1:85:7e:f5:47:65:cb:f8:
- 4d:57:28:74:d2:34:ff:30:b6:ee:f6:62:30:14:8c:
- 2c:eb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage:
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 89:82:67:7D:C4:9D:26:70:00:4B:B4:50:48:7C:DE:3D:AE:04:6E:7D
- X509v3 CRL Distribution Points:
- URI:http://crl.usertrust.com/UTN-USERFirst-ClientAuthenticationandEmail.crl
-
- X509v3 Extended Key Usage:
- TLS Web Client Authentication, E-mail Protection
- Signature Algorithm: sha1WithRSAEncryption
- b1:6d:61:5d:a6:1a:7f:7c:ab:4a:e4:30:fc:53:6f:25:24:c6:
- ca:ed:e2:31:5c:2b:0e:ee:ee:61:55:6f:04:3e:cf:39:de:c5:
- 1b:49:94:e4:eb:20:4c:b4:e6:9e:50:2e:72:d9:8d:f5:aa:a3:
- b3:4a:da:56:1c:60:97:80:dc:82:a2:ad:4a:bd:8a:2b:ff:0b:
- 09:b4:c6:d7:20:04:45:e4:cd:80:01:ba:ba:2b:6e:ce:aa:d7:
- 92:fe:e4:af:eb:f4:26:1d:16:2a:7f:6c:30:95:37:2f:33:12:
- ac:7f:dd:c7:d1:11:8c:51:98:b2:d0:a3:91:d0:ad:f6:9f:9e:
- 83:93:1e:1d:42:b8:46:af:6b:66:f0:9b:7f:ea:e3:03:02:e5:
- 02:51:c1:aa:d5:35:9d:72:40:03:89:ba:31:1d:c5:10:68:52:
- 9e:df:a2:85:c5:5c:08:a6:78:e6:53:4f:b1:e8:b7:d3:14:9e:
- 93:a6:c3:64:e3:ac:7e:71:cd:bc:9f:e9:03:1b:cc:fb:e9:ac:
- 31:c1:af:7c:15:74:02:99:c3:b2:47:a6:c2:32:61:d7:c7:6f:
- 48:24:51:27:a1:d5:87:55:f2:7b:8f:98:3d:16:9e:ee:75:b6:
- f8:d0:8e:f2:f3:c6:ae:28:5b:a7:f0:f3:36:17:fc:c3:05:d3:
- ca:03:4a:54
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
-
UTN USERFirst Hardware Root CA
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:be:0c:8b:50:00:24:b4:11:d3:36:2a:fe:65:0a:fd
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
- Validity
- Not Before: Jul 9 18:10:42 1999 GMT
- Not After : Jul 9 18:19:22 2019 GMT
- Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b1:f7:c3:38:3f:b4:a8:7f:cf:39:82:51:67:d0:
- 6d:9f:d2:ff:58:f3:e7:9f:2b:ec:0d:89:54:99:b9:
- 38:99:16:f7:e0:21:79:48:c2:bb:61:74:12:96:1d:
- 3c:6a:72:d5:3c:10:67:3a:39:ed:2b:13:cd:66:eb:
- 95:09:33:a4:6c:97:b1:e8:c6:ec:c1:75:79:9c:46:
- 5e:8d:ab:d0:6a:fd:b9:2a:55:17:10:54:b3:19:f0:
- 9a:f6:f1:b1:5d:b6:a7:6d:fb:e0:71:17:6b:a2:88:
- fb:00:df:fe:1a:31:77:0c:9a:01:7a:b1:32:e3:2b:
- 01:07:38:6e:c3:a5:5e:23:bc:45:9b:7b:50:c1:c9:
- 30:8f:db:e5:2b:7a:d3:5b:fb:33:40:1e:a0:d5:98:
- 17:bc:8b:87:c3:89:d3:5d:a0:8e:b2:aa:aa:f6:8e:
- 69:88:06:c5:fa:89:21:f3:08:9d:69:2e:09:33:9b:
- 29:0d:46:0f:8c:cc:49:34:b0:69:51:bd:f9:06:cd:
- 68:ad:66:4c:bc:3e:ac:61:bd:0a:88:0e:c8:df:3d:
- ee:7c:04:4c:9d:0a:5e:6b:91:d6:ee:c7:ed:28:8d:
- ab:4d:87:89:73:d0:6e:a4:d0:1e:16:8b:14:e1:76:
- 44:03:7f:63:ac:e4:cd:49:9c:c5:92:f4:ab:32:a1:
- 48:5b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage:
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45
- X509v3 CRL Distribution Points:
- URI:http://crl.usertrust.com/UTN-USERFirst-Hardware.crl
-
- X509v3 Extended Key Usage:
- TLS Web Server Authentication, IPSec End System, IPSec Tunnel, IPSec User
- Signature Algorithm: sha1WithRSAEncryption
- 47:19:0f:de:74:c6:99:97:af:fc:ad:28:5e:75:8e:eb:2d:67:
- ee:4e:7b:2b:d7:0c:ff:f6:de:cb:55:a2:0a:e1:4c:54:65:93:
- 60:6b:9f:12:9c:ad:5e:83:2c:eb:5a:ae:c0:e4:2d:f4:00:63:
- 1d:b8:c0:6c:f2:cf:49:bb:4d:93:6f:06:a6:0a:22:b2:49:62:
- 08:4e:ff:c8:c8:14:b2:88:16:5d:e7:01:e4:12:95:e5:45:34:
- b3:8b:69:bd:cf:b4:85:8f:75:51:9e:7d:3a:38:3a:14:48:12:
- c6:fb:a7:3b:1a:8d:0d:82:40:07:e8:04:08:90:a1:89:cb:19:
- 50:df:ca:1c:01:bc:1d:04:19:7b:10:76:97:3b:ee:90:90:ca:
- c4:0e:1f:16:6e:75:ef:33:f8:d3:6f:5b:1e:96:e3:e0:74:77:
- 74:7b:8a:a2:6e:2d:dd:76:d6:39:30:82:f0:ab:9c:52:f2:2a:
- c7:af:49:5e:7e:c7:68:e5:82:81:c8:6a:27:f9:27:88:2a:d5:
- 58:50:95:1f:f0:3b:1c:57:bb:7d:14:39:62:2b:9a:c9:94:92:
- 2a:a3:22:0c:ff:89:26:7d:5f:23:2b:47:d7:15:1d:a9:6a:9e:
- 51:0d:2a:51:9e:81:f9:d4:3b:5e:70:12:7f:10:32:9c:1e:bb:
- 9d:f8:66:a8
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
@@ -4547,168 +1234,8 @@ CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
-----END CERTIFICATE-----
-UTN USERFirst Object Root CA
-============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:be:0c:8b:50:00:24:b4:11:d3:36:2d:e0:b3:5f:1b
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Object
- Validity
- Not Before: Jul 9 18:31:20 1999 GMT
- Not After : Jul 9 18:40:36 2019 GMT
- Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Object
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ce:aa:81:3f:a3:a3:61:78:aa:31:00:55:95:11:
- 9e:27:0f:1f:1c:df:3a:9b:82:68:30:c0:4a:61:1d:
- f1:2f:0e:fa:be:79:f7:a5:23:ef:55:51:96:84:cd:
- db:e3:b9:6e:3e:31:d8:0a:20:67:c7:f4:d9:bf:94:
- eb:47:04:3e:02:ce:2a:a2:5d:87:04:09:f6:30:9d:
- 18:8a:97:b2:aa:1c:fc:41:d2:a1:36:cb:fb:3d:91:
- ba:e7:d9:70:35:fa:e4:e7:90:c3:9b:a3:9b:d3:3c:
- f5:12:99:77:b1:b7:09:e0:68:e6:1c:b8:f3:94:63:
- 88:6a:6a:fe:0b:76:c9:be:f4:22:e4:67:b9:ab:1a:
- 5e:77:c1:85:07:dd:0d:6c:bf:ee:06:c7:77:6a:41:
- 9e:a7:0f:d7:fb:ee:94:17:b7:fc:85:be:a4:ab:c4:
- 1c:31:dd:d7:b6:d1:e4:f0:ef:df:16:8f:b2:52:93:
- d7:a1:d4:89:a1:07:2e:bf:e1:01:12:42:1e:1a:e1:
- d8:95:34:db:64:79:28:ff:ba:2e:11:c2:e5:e8:5b:
- 92:48:fb:47:0b:c2:6c:da:ad:32:83:41:f3:a5:e5:
- 41:70:fd:65:90:6d:fa:fa:51:c4:f9:bd:96:2b:19:
- 04:2c:d3:6d:a7:dc:f0:7f:6f:83:65:e2:6a:ab:87:
- 86:75
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage:
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- DA:ED:64:74:14:9C:14:3C:AB:DD:99:A9:BD:5B:28:4D:8B:3C:C9:D8
- X509v3 CRL Distribution Points:
- URI:http://crl.usertrust.com/UTN-USERFirst-Object.crl
-
- X509v3 Extended Key Usage:
- Code Signing, Time Stamping, Microsoft Encrypted File System
- Signature Algorithm: sha1WithRSAEncryption
- 08:1f:52:b1:37:44:78:db:fd:ce:b9:da:95:96:98:aa:55:64:
- 80:b5:5a:40:dd:21:a5:c5:c1:f3:5f:2c:4c:c8:47:5a:69:ea:
- e8:f0:35:35:f4:d0:25:f3:c8:a6:a4:87:4a:bd:1b:b1:73:08:
- bd:d4:c3:ca:b6:35:bb:59:86:77:31:cd:a7:80:14:ae:13:ef:
- fc:b1:48:f9:6b:25:25:2d:51:b6:2c:6d:45:c1:98:c8:8a:56:
- 5d:3e:ee:43:4e:3e:6b:27:8e:d0:3a:4b:85:0b:5f:d3:ed:6a:
- a7:75:cb:d1:5a:87:2f:39:75:13:5a:72:b0:02:81:9f:be:f0:
- 0f:84:54:20:62:6c:69:d4:e1:4d:c6:0d:99:43:01:0d:12:96:
- 8c:78:9d:bf:50:a2:b1:44:aa:6a:cf:17:7a:cf:6f:0f:d4:f8:
- 24:55:5f:f0:34:16:49:66:3e:50:46:c9:63:71:38:31:62:b8:
- 62:b9:f3:53:ad:6c:b5:2b:a2:12:aa:19:4f:09:da:5e:e7:93:
- c6:8e:14:08:fe:f0:30:80:18:a0:86:85:4d:c8:7d:d7:8b:03:
- fe:6e:d5:f7:9d:16:ac:92:2c:a0:23:e5:9c:91:52:1f:94:df:
- 17:94:73:c3:b3:c1:c1:71:05:20:00:78:bd:13:52:1d:a8:3e:
- cd:00:1f:c8
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB
-lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt
-T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV
-BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc
-BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3
-dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP
-HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO
-KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo
-5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+
-pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb
-kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC
-AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
-L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV
-HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN
-AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
-NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB
-mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU
-4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5
-81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR
-Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
------END CERTIFICATE-----
-
Camerfirma Chambers of Commerce Root
====================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Chambers of Commerce Root
- Validity
- Not Before: Sep 30 16:13:43 2003 GMT
- Not After : Sep 30 16:13:44 2037 GMT
- Subject: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Chambers of Commerce Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b7:36:55:e5:a5:5d:18:30:e0:da:89:54:91:fc:
- c8:c7:52:f8:2f:50:d9:ef:b1:75:73:65:47:7d:1b:
- 5b:ba:75:c5:fc:a1:88:24:fa:2f:ed:ca:08:4a:39:
- 54:c4:51:7a:b5:da:60:ea:38:3c:81:b2:cb:f1:bb:
- d9:91:23:3f:48:01:70:75:a9:05:2a:ad:1f:71:f3:
- c9:54:3d:1d:06:6a:40:3e:b3:0c:85:ee:5c:1b:79:
- c2:62:c4:b8:36:8e:35:5d:01:0c:23:04:47:35:aa:
- 9b:60:4e:a0:66:3d:cb:26:0a:9c:40:a1:f4:5d:98:
- bf:71:ab:a5:00:68:2a:ed:83:7a:0f:a2:14:b5:d4:
- 22:b3:80:b0:3c:0c:5a:51:69:2d:58:18:8f:ed:99:
- 9e:f1:ae:e2:95:e6:f6:47:a8:d6:0c:0f:b0:58:58:
- db:c3:66:37:9e:9b:91:54:33:37:d2:94:1c:6a:48:
- c9:c9:f2:a5:da:a5:0c:23:f7:23:0e:9c:32:55:5e:
- 71:9c:84:05:51:9a:2d:fd:e6:4e:2a:34:5a:de:ca:
- 40:37:67:0c:54:21:55:77:da:0a:0c:cc:97:ae:80:
- dc:94:36:4a:f4:3e:ce:36:13:1e:53:e4:ac:4e:3a:
- 05:ec:db:ae:72:9c:38:8b:d0:39:3b:89:0a:3e:77:
- fe:75
- Exponent: 3 (0x3)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:12
- X509v3 CRL Distribution Points:
- URI:http://crl.chambersign.org/chambersroot.crl
-
- X509v3 Subject Key Identifier:
- E3:94:F5:B1:4D:E9:DB:A1:29:5B:57:8B:4D:76:06:76:E1:D1:A2:8A
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 Subject Alternative Name:
- email:chambersroot at chambersign.org
- X509v3 Issuer Alternative Name:
- email:chambersroot at chambersign.org
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.17326.10.3.1
- CPS: http://cps.chambersign.org/cps/chambersroot.html
-
- Signature Algorithm: sha1WithRSAEncryption
- 0c:41:97:c2:1a:86:c0:22:7c:9f:fb:90:f3:1a:d1:03:b1:ef:
- 13:f9:21:5f:04:9c:da:c9:a5:8d:27:6c:96:87:91:be:41:90:
- 01:72:93:e7:1e:7d:5f:f6:89:c6:5d:a7:40:09:3d:ac:49:45:
- 45:dc:2e:8d:30:68:b2:09:ba:fb:c3:2f:cc:ba:0b:df:3f:77:
- 7b:46:7d:3a:12:24:8e:96:8f:3c:05:0a:6f:d2:94:28:1d:6d:
- 0c:c0:2e:88:22:d5:d8:cf:1d:13:c7:f0:48:d7:d7:05:a7:cf:
- c7:47:9e:3b:3c:34:c8:80:4f:d4:14:bb:fc:0d:50:f7:fa:b3:
- ec:42:5f:a9:dd:6d:c8:f4:75:cf:7b:c1:72:26:b1:01:1c:5c:
- 2c:fd:7a:4e:b4:01:c5:05:57:b9:e7:3c:aa:05:d9:88:e9:07:
- 46:41:ce:ef:41:81:ae:58:df:83:a2:ae:ca:d7:77:1f:e7:00:
- 3c:9d:6f:8e:e4:32:09:1d:4d:78:34:78:34:3c:94:9b:26:ed:
- 4f:71:c6:19:7a:bd:20:22:48:5a:fe:4b:7d:03:b7:e7:58:be:
- c6:32:4e:74:1e:68:dd:a8:68:5b:b3:3e:ee:62:7d:d9:80:e8:
- 0a:75:7a:b7:ee:b4:65:9a:21:90:e0:aa:d0:98:bc:38:b5:73:
- 3c:8b:f8:dc
-----BEGIN CERTIFICATE-----
MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
@@ -4740,75 +1267,6 @@ tGWaIZDgqtCYvDi1czyL+Nw=
Camerfirma Global Chambersign Root
==================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Global Chambersign Root
- Validity
- Not Before: Sep 30 16:14:18 2003 GMT
- Not After : Sep 30 16:14:18 2037 GMT
- Subject: C=EU, O=AC Camerfirma SA CIF A82743287, OU=http://www.chambersign.org, CN=Global Chambersign Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a2:70:a2:d0:9f:42:ae:5b:17:c7:d8:7d:cf:14:
- 83:fc:4f:c9:a1:b7:13:af:8a:d7:9e:3e:04:0a:92:
- 8b:60:56:fa:b4:32:2f:88:4d:a1:60:08:f4:b7:09:
- 4e:a0:49:2f:49:d6:d3:df:9d:97:5a:9f:94:04:70:
- ec:3f:59:d9:b7:cc:66:8b:98:52:28:09:02:df:c5:
- 2f:84:8d:7a:97:77:bf:ec:40:9d:25:72:ab:b5:3f:
- 32:98:fb:b7:b7:fc:72:84:e5:35:87:f9:55:fa:a3:
- 1f:0e:6f:2e:28:dd:69:a0:d9:42:10:c6:f8:b5:44:
- c2:d0:43:7f:db:bc:e4:a2:3c:6a:55:78:0a:77:a9:
- d8:ea:19:32:b7:2f:fe:5c:3f:1b:ee:b1:98:ec:ca:
- ad:7a:69:45:e3:96:0f:55:f6:e6:ed:75:ea:65:e8:
- 32:56:93:46:89:a8:25:8a:65:06:ee:6b:bf:79:07:
- d0:f1:b7:af:ed:2c:4d:92:bb:c0:a8:5f:a7:67:7d:
- 04:f2:15:08:70:ac:92:d6:7d:04:d2:33:fb:4c:b6:
- 0b:0b:fb:1a:c9:c4:8d:03:a9:7e:5c:f2:50:ab:12:
- a5:a1:cf:48:50:a5:ef:d2:c8:1a:13:fa:b0:7f:b1:
- 82:1c:77:6a:0f:5f:dc:0b:95:8f:ef:43:7e:e6:45:
- 09:25
- Exponent: 3 (0x3)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:12
- X509v3 CRL Distribution Points:
- URI:http://crl.chambersign.org/chambersignroot.crl
-
- X509v3 Subject Key Identifier:
- 43:9C:36:9F:B0:9E:30:4D:C6:CE:5F:AD:10:AB:E5:03:A5:FA:A9:14
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 Subject Alternative Name:
- email:chambersignroot at chambersign.org
- X509v3 Issuer Alternative Name:
- email:chambersignroot at chambersign.org
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.17326.10.1.1
- CPS: http://cps.chambersign.org/cps/chambersignroot.html
-
- Signature Algorithm: sha1WithRSAEncryption
- 3c:3b:70:91:f9:04:54:27:91:e1:ed:ed:fe:68:7f:61:5d:e5:
- 41:65:4f:32:f1:18:05:94:6a:1c:de:1f:70:db:3e:7b:32:02:
- 34:b5:0c:6c:a1:8a:7c:a5:f4:8f:ff:d4:d8:ad:17:d5:2d:04:
- d1:3f:58:80:e2:81:59:88:be:c0:e3:46:93:24:fe:90:bd:26:
- a2:30:2d:e8:97:26:57:35:89:74:96:18:f6:15:e2:af:24:19:
- 56:02:02:b2:ba:0f:14:ea:c6:8a:66:c1:86:45:55:8b:be:92:
- be:9c:a4:04:c7:49:3c:9e:e8:29:7a:89:d7:fe:af:ff:68:f5:
- a5:17:90:bd:ac:99:cc:a5:86:57:09:67:46:db:d6:16:c2:46:
- f1:e4:a9:50:f5:8f:d1:92:15:d3:5f:3e:c6:00:49:3a:6e:58:
- b2:d1:d1:27:0d:25:c8:32:f8:20:11:cd:7d:32:33:48:94:54:
- 4c:dd:dc:79:c4:30:9f:eb:8e:b8:55:b5:d7:88:5c:c5:6a:24:
- 3d:b2:d3:05:03:51:c6:07:ef:cc:14:72:74:3d:6e:72:ce:18:
- 28:8c:4a:a0:77:e5:09:2b:45:44:47:ac:b7:67:7f:01:8a:05:
- 5a:93:be:a1:c1:ff:f8:e7:0e:67:a4:47:49:76:5d:75:90:1a:
- f5:26:8f:f0
-----BEGIN CERTIFICATE-----
MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
@@ -4838,166 +1296,8 @@ ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
-----END CERTIFICATE-----
-NetLock Qualified (Class QA) Root
-=================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 123 (0x7b)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado/emailAddress=info at netlock.hu
- Validity
- Not Before: Mar 30 01:47:11 2003 GMT
- Not After : Dec 15 01:47:11 2022 GMT
- Subject: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado/emailAddress=info at netlock.hu
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c7:52:25:b2:d8:3d:d4:84:55:09:a7:1b:bd:6c:
- b9:14:f4:8a:02:db:76:fc:6a:2a:78:ab:e5:77:f0:
- 6e:e0:8c:23:67:db:a5:64:99:b9:dd:01:3e:6f:ef:
- 2d:9a:3c:22:f0:5d:c9:57:a0:55:41:7f:f2:43:5e:
- 58:82:53:31:65:ce:1e:f2:26:ba:00:54:1e:af:b0:
- bc:1c:e4:52:8c:a0:32:af:b7:37:b1:53:67:68:74:
- 67:50:f6:2d:2e:64:de:ae:26:79:df:df:99:86:ab:
- ab:7f:85:ec:a0:fb:80:cc:f4:b8:0c:1e:93:45:63:
- b9:dc:b8:5b:9b:ed:5b:39:d4:5f:62:b0:a7:8e:7c:
- 66:38:2c:aa:b1:08:63:17:67:7d:cc:bd:b3:f1:c3:
- 3f:cf:50:39:ed:d1:19:83:15:db:87:12:27:96:b7:
- da:ea:e5:9d:bc:ba:ea:39:4f:8b:ef:74:9a:e7:c5:
- d0:d2:ea:86:51:1c:e4:fe:64:08:28:04:79:05:eb:
- ca:c5:71:0e:0b:ef:ab:ea:ec:12:11:a1:18:05:32:
- 69:d1:0c:2c:1a:3d:25:99:3f:b5:7c:ca:6d:b0:ae:
- 99:99:fa:08:60:e7:19:c2:f2:bd:51:d3:cc:d3:02:
- ac:c1:11:0c:80:ce:ab:dc:94:9d:6b:a3:39:53:3a:
- d6:85
- Exponent: 50557 (0xc57d)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:4
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Netscape Comment:
- FIGYELEM! Ezen tanusitvany a NetLock Kft. Minositett Szolgaltatasi Szabalyzataban leirt eljarasok alapjan keszult. A minositett elektronikus alairas joghatas ervenyesulesenek, valamint elfogadasanak feltetele a Minositett Szolgaltatasi Szabalyzatban, az Altalanos Szerzodesi Feltetelekben eloirt ellenorzesi eljaras megtetele. A dokumentumok megtalalhatok a https://www.netlock.hu/docs/ cimen vagy kerhetok az info at netlock.net e-mail cimen. WARNING! The issuance and the use o [...]
- X509v3 Subject Key Identifier:
- 09:6A:62:16:92:B0:5A:BB:55:0E:CB:75:32:3A:32:E5:B2:21:C9:28
- Signature Algorithm: sha1WithRSAEncryption
- 91:6a:50:9c:db:78:81:9b:3f:8b:42:e3:3b:fc:a6:c3:ee:43:
- e0:cf:f3:e2:80:35:49:45:76:02:e2:e3:2f:05:c5:f1:2a:e7:
- c0:41:33:c6:b6:9b:d0:33:39:cd:c0:db:a1:ad:6c:37:02:4c:
- 58:41:3b:f2:97:92:c6:48:a8:cd:e5:8a:39:89:61:f9:52:97:
- e9:bd:f6:f9:94:74:e8:71:0e:bc:77:86:c3:06:cc:5a:7c:4a:
- 7e:34:50:30:2e:fb:7f:32:9a:8d:3d:f3:20:5b:f8:6a:ca:86:
- f3:31:4c:2c:59:80:02:7d:fe:38:c9:30:75:1c:b7:55:e3:bc:
- 9f:ba:a8:6d:84:28:05:75:b3:8b:0d:c0:91:54:21:e7:a6:0b:
- b4:99:f5:51:41:dc:cd:a3:47:22:d9:c7:01:81:c4:dc:47:4f:
- 26:ea:1f:ed:db:cd:0d:98:f4:a3:9c:b4:73:32:4a:96:99:fe:
- bc:7f:c8:25:58:f8:58:f3:76:66:89:54:a4:a6:3e:c4:50:5c:
- ba:89:18:82:75:48:21:d2:4f:13:e8:60:7e:07:76:db:10:b5:
- 51:e6:aa:b9:68:aa:cd:f6:9d:90:75:12:ea:38:1a:ca:44:e8:
- b7:99:a7:2a:68:95:66:95:ab:ad:ef:89:cb:60:a9:06:12:c6:
- 94:47:e9:28
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
-
NetLock Notary (Class A) Root
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 259 (0x103)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=HU, ST=Hungary, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado
- Validity
- Not Before: Feb 24 23:14:47 1999 GMT
- Not After : Feb 19 23:14:47 2019 GMT
- Subject: C=HU, ST=Hungary, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:bc:74:8c:0f:bb:4c:f4:37:1e:a9:05:82:d8:e6:
- e1:6c:70:ea:78:b5:6e:d1:38:44:0d:a8:83:ce:5d:
- d2:d6:d5:81:c5:d4:4b:e7:5b:94:70:26:db:3b:9d:
- 6a:4c:62:f7:71:f3:64:d6:61:3b:3d:eb:73:a3:37:
- d9:cf:ea:8c:92:3b:cd:f7:07:dc:66:74:97:f4:45:
- 22:dd:f4:5c:e0:bf:6d:f3:be:65:33:e4:15:3a:bf:
- db:98:90:55:38:c4:ed:a6:55:63:0b:b0:78:04:f4:
- e3:6e:c1:3f:8e:fc:51:78:1f:92:9e:83:c2:fe:d9:
- b0:a9:c9:bc:5a:00:ff:a9:a8:98:74:fb:f6:2c:3e:
- 15:39:0d:b6:04:55:a8:0e:98:20:42:b3:b1:25:ad:
- 7e:9a:6f:5d:53:b1:ab:0c:fc:eb:e0:f3:7a:b3:a8:
- b3:ff:46:f6:63:a2:d8:3a:98:7b:b6:ac:85:ff:b0:
- 25:4f:74:63:e7:13:07:a5:0a:8f:05:f7:c0:64:6f:
- 7e:a7:27:80:96:de:d4:2e:86:60:c7:6b:2b:5e:73:
- 7b:17:e7:91:3f:64:0c:d8:4b:22:34:2b:9b:32:f2:
- 48:1f:9f:a1:0a:84:7a:e2:c2:ad:97:3d:8e:d5:c1:
- f9:56:a3:50:e9:c6:b4:fa:98:a2:ee:95:e6:2a:03:
- 8c:df
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:4
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- Netscape Comment:
- FIGYELEM! Ezen tanusitvany a NetLock Kft. Altalanos Szolgaltatasi Felteteleiben leirt eljarasok alapjan keszult. A hitelesites folyamatat a NetLock Kft. termekfelelosseg-biztositasa vedi. A digitalis alairas elfogadasanak feltetele az eloirt ellenorzesi eljaras megtetele. Az eljaras leirasa megtalalhato a NetLock Kft. Internet honlapjan a https://www.netlock.net/docs cimen vagy kerheto az ellenorzes at netlock.net e-mail cimen. IMPORTANT! The issuance and the use of this cer [...]
- Signature Algorithm: md5WithRSAEncryption
- 48:24:46:f7:ba:56:6f:fa:c8:28:03:40:4e:e5:31:39:6b:26:
- 6b:53:7f:db:df:df:f3:71:3d:26:c0:14:0e:c6:67:7b:23:a8:
- 0c:73:dd:01:bb:c6:ca:6e:37:39:55:d5:c7:8c:56:20:0e:28:
- 0a:0e:d2:2a:a4:b0:49:52:c6:38:07:fe:be:0a:09:8c:d1:98:
- cf:ca:da:14:31:a1:4f:d2:39:fc:0f:11:2c:43:c3:dd:ab:93:
- c7:55:3e:47:7c:18:1a:00:dc:f3:7b:d8:f2:7f:52:6c:20:f4:
- 0b:5f:69:52:f4:ee:f8:b2:29:60:eb:e3:49:31:21:0d:d6:b5:
- 10:41:e2:41:09:6c:e2:1a:9a:56:4b:77:02:f6:a0:9b:9a:27:
- 87:e8:55:29:71:c2:90:9f:45:78:1a:e1:15:64:3d:d0:0e:d8:
- a0:76:9f:ae:c5:d0:2e:ea:d6:0f:56:ec:64:7f:5a:9b:14:58:
- 01:27:7e:13:50:c7:6b:2a:e6:68:3c:bf:5c:a0:0a:1b:e1:0e:
- 7a:e9:e2:80:c3:e9:e9:f6:fd:6c:11:9e:d0:e5:28:27:2b:54:
- 32:42:14:82:75:e6:4a:f0:2b:66:75:63:8c:a2:fb:04:3e:83:
- 0e:9b:36:f0:18:e4:26:20:c3:8c:f0:28:07:ad:3c:17:66:88:
- b5:fd:b6:88
-----BEGIN CERTIFICATE-----
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
@@ -5038,48 +1338,6 @@ f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
NetLock Business (Class B) Root
===============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 105 (0x69)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Uzleti (Class B) Tanusitvanykiado
- Validity
- Not Before: Feb 25 14:10:22 1999 GMT
- Not After : Feb 20 14:10:22 2019 GMT
- Subject: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Uzleti (Class B) Tanusitvanykiado
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:b1:ea:04:ec:20:a0:23:c2:8f:38:60:cf:c7:46:
- b3:d5:1b:fe:fb:b9:99:9e:04:dc:1c:7f:8c:4a:81:
- 98:ee:a4:d4:ca:8a:17:b9:22:7f:83:0a:75:4c:9b:
- c0:69:d8:64:39:a3:ed:92:a3:fd:5b:5c:74:1a:c0:
- 47:ca:3a:69:76:9a:ba:e2:44:17:fc:4c:a3:d5:fe:
- b8:97:88:af:88:03:89:1f:a4:f2:04:3e:c8:07:0b:
- e6:f9:b3:2f:7a:62:14:09:46:14:ca:64:f5:8b:80:
- b5:62:a8:d8:6b:d6:71:93:2d:b3:bf:09:54:58:ed:
- 06:eb:a8:7b:dc:43:b1:a1:69
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:4
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- Netscape Comment:
- FIGYELEM! Ezen tanusitvany a NetLock Kft. Altalanos Szolgaltatasi Felteteleiben leirt eljarasok alapjan keszult. A hitelesites folyamatat a NetLock Kft. termekfelelosseg-biztositasa vedi. A digitalis alairas elfogadasanak feltetele az eloirt ellenorzesi eljaras megtetele. Az eljaras leirasa megtalalhato a NetLock Kft. Internet honlapjan a https://www.netlock.net/docs cimen vagy kerheto az ellenorzes at netlock.net e-mail cimen. IMPORTANT! The issuance and the use of this cer [...]
- Signature Algorithm: md5WithRSAEncryption
- 04:db:ae:8c:17:af:f8:0e:90:31:4e:cd:3e:09:c0:6d:3a:b0:
- f8:33:4c:47:4c:e3:75:88:10:97:ac:b0:38:15:91:c6:29:96:
- cc:21:c0:6d:3c:a5:74:cf:d8:82:a5:39:c3:65:e3:42:70:bb:
- 22:90:e3:7d:db:35:76:e1:a0:b5:da:9f:70:6e:93:1a:30:39:
- 1d:30:db:2e:e3:7c:b2:91:b2:d1:37:29:fa:b9:d6:17:5c:47:
- 4f:e3:1d:38:eb:9f:d5:7b:95:a8:28:9e:15:4a:d1:d1:d0:2b:
- 00:97:a0:e2:92:36:2b:63:ac:58:01:6b:33:29:50:86:83:f1:
- 01:48
-----BEGIN CERTIFICATE-----
MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
@@ -5114,48 +1372,6 @@ NitjrFgBazMpUIaD8QFI
NetLock Express (Class C) Root
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 104 (0x68)
- Signature Algorithm: md5WithRSAEncryption
- Issuer: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Expressz (Class C) Tanusitvanykiado
- Validity
- Not Before: Feb 25 14:08:11 1999 GMT
- Not After : Feb 20 14:08:11 2019 GMT
- Subject: C=HU, L=Budapest, O=NetLock Halozatbiztonsagi Kft., OU=Tanusitvanykiadok, CN=NetLock Expressz (Class C) Tanusitvanykiado
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:eb:ec:b0:6c:61:8a:23:25:af:60:20:e3:d9:9f:
- fc:93:0b:db:5d:8d:b0:a1:b3:40:3a:82:ce:fd:75:
- e0:78:32:03:86:5a:86:95:91:ed:53:fa:9d:40:fc:
- e6:e8:dd:d9:5b:7a:03:bd:5d:f3:3b:0c:c3:51:79:
- 9b:ad:55:a0:e9:d0:03:10:af:0a:ba:14:42:d9:52:
- 26:11:22:c7:d2:20:cc:82:a4:9a:a9:fe:b8:81:76:
- 9d:6a:b7:d2:36:75:3e:b1:86:09:f6:6e:6d:7e:4e:
- b7:7a:ec:ae:71:84:f6:04:33:08:25:32:eb:74:ac:
- 16:44:c6:e4:40:93:1d:7f:ad
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:4
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- Netscape Comment:
- FIGYELEM! Ezen tanusitvany a NetLock Kft. Altalanos Szolgaltatasi Felteteleiben leirt eljarasok alapjan keszult. A hitelesites folyamatat a NetLock Kft. termekfelelosseg-biztositasa vedi. A digitalis alairas elfogadasanak feltetele az eloirt ellenorzesi eljaras megtetele. Az eljaras leirasa megtalalhato a NetLock Kft. Internet honlapjan a https://www.netlock.net/docs cimen vagy kerheto az ellenorzes at netlock.net e-mail cimen. IMPORTANT! The issuance and the use of this cer [...]
- Signature Algorithm: md5WithRSAEncryption
- 10:ad:7f:d7:0c:32:80:0a:d8:86:f1:79:98:b5:ad:d4:cd:b3:
- 36:c4:96:48:c1:5c:cd:9a:d9:05:2e:9f:be:50:eb:f4:26:14:
- 10:2d:d4:66:17:f8:9e:c1:27:fd:f1:ed:e4:7b:4b:a0:6c:b5:
- ab:9a:57:70:a6:ed:a0:a4:ed:2e:f5:fd:fc:bd:fe:4d:37:08:
- 0c:bc:e3:96:83:22:f5:49:1b:7f:4b:2b:b4:54:c1:80:7c:99:
- 4e:1d:d0:8c:ee:d0:ac:e5:92:fa:75:56:fe:64:a0:13:8f:b8:
- b8:16:9d:61:05:67:80:c8:d0:d8:a5:07:02:34:98:04:8d:33:
- 04:d4
-----BEGIN CERTIFICATE-----
MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
@@ -5190,70 +1406,6 @@ Fp1hBWeAyNDYpQcCNJgEjTME1A==
XRamp Global CA Root
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 50:94:6c:ec:18:ea:d5:9c:4d:d5:97:ef:75:8f:a0:ad
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, OU=www.xrampsecurity.com, O=XRamp Security Services Inc, CN=XRamp Global Certification Authority
- Validity
- Not Before: Nov 1 17:14:04 2004 GMT
- Not After : Jan 1 05:37:19 2035 GMT
- Subject: C=US, OU=www.xrampsecurity.com, O=XRamp Security Services Inc, CN=XRamp Global Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:98:24:1e:bd:15:b4:ba:df:c7:8c:a5:27:b6:38:
- 0b:69:f3:b6:4e:a8:2c:2e:21:1d:5c:44:df:21:5d:
- 7e:23:74:fe:5e:7e:b4:4a:b7:a6:ad:1f:ae:e0:06:
- 16:e2:9b:5b:d9:67:74:6b:5d:80:8f:29:9d:86:1b:
- d9:9c:0d:98:6d:76:10:28:58:e4:65:b0:7f:4a:98:
- 79:9f:e0:c3:31:7e:80:2b:b5:8c:c0:40:3b:11:86:
- d0:cb:a2:86:36:60:a4:d5:30:82:6d:d9:6e:d0:0f:
- 12:04:33:97:5f:4f:61:5a:f0:e4:f9:91:ab:e7:1d:
- 3b:bc:e8:cf:f4:6b:2d:34:7c:e2:48:61:1c:8e:f3:
- 61:44:cc:6f:a0:4a:a9:94:b0:4d:da:e7:a9:34:7a:
- 72:38:a8:41:cc:3c:94:11:7d:eb:c8:a6:8c:b7:86:
- cb:ca:33:3b:d9:3d:37:8b:fb:7a:3e:86:2c:e7:73:
- d7:0a:57:ac:64:9b:19:eb:f4:0f:04:08:8a:ac:03:
- 17:19:64:f4:5a:25:22:8d:34:2c:b2:f6:68:1d:12:
- 6d:d3:8a:1e:14:da:c4:8f:a6:e2:23:85:d5:7a:0d:
- bd:6a:e0:e9:ec:ec:17:bb:42:1b:67:aa:25:ed:45:
- 83:21:fc:c1:c9:7c:d5:62:3e:fa:f2:c5:2d:d3:fd:
- d4:65
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- 1.3.6.1.4.1.311.20.2:
- ...C.A
- X509v3 Key Usage:
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- C6:4F:A2:3D:06:63:84:09:9C:CE:62:E4:04:AC:8D:5C:B5:E9:B6:1B
- X509v3 CRL Distribution Points:
- URI:http://crl.xrampsecurity.com/XGCA.crl
-
- 1.3.6.1.4.1.311.21.1:
- ...
- Signature Algorithm: sha1WithRSAEncryption
- 91:15:39:03:01:1b:67:fb:4a:1c:f9:0a:60:5b:a1:da:4d:97:
- 62:f9:24:53:27:d7:82:64:4e:90:2e:c3:49:1b:2b:9a:dc:fc:
- a8:78:67:35:f1:1d:f0:11:bd:b7:48:e3:10:f6:0d:df:3f:d2:
- c9:b6:aa:55:a4:48:ba:02:db:de:59:2e:15:5b:3b:9d:16:7d:
- 47:d7:37:ea:5f:4d:76:12:36:bb:1f:d7:a1:81:04:46:20:a3:
- 2c:6d:a9:9e:01:7e:3f:29:ce:00:93:df:fd:c9:92:73:89:89:
- 64:9e:e7:2b:e4:1c:91:2c:d2:b9:ce:7d:ce:6f:31:99:d3:e6:
- be:d2:1e:90:f0:09:14:79:5c:23:ab:4d:d2:da:21:1f:4d:99:
- 79:9d:e1:cf:27:9f:10:9b:1c:88:0d:b0:8a:64:41:31:b8:0e:
- 6c:90:24:a4:9b:5c:71:8f:ba:bb:7e:1c:1b:db:6a:80:0f:21:
- bc:e9:db:a6:b7:40:f4:b2:8b:a9:b1:e4:ef:9a:1a:d0:3d:69:
- 99:ee:a8:28:a3:e1:3c:b3:f0:b2:11:9c:cf:7c:40:e6:dd:e7:
- 43:7d:a2:d8:3a:b5:a9:8d:f2:34:99:c4:d4:10:e1:06:fd:09:
- 84:10:3b:ee:c4:4c:f4:ec:27:7c:42:c2:74:7c:82:8a:09:c9:
- b4:03:25:bc
-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
@@ -5282,65 +1434,6 @@ O+7ETPTsJ3xCwnR8gooJybQDJbw=
Go Daddy Class 2 CA
===================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
- Validity
- Not Before: Jun 29 17:06:20 2004 GMT
- Not After : Jun 29 17:06:20 2034 GMT
- Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:de:9d:d7:ea:57:18:49:a1:5b:eb:d7:5f:48:86:
- ea:be:dd:ff:e4:ef:67:1c:f4:65:68:b3:57:71:a0:
- 5e:77:bb:ed:9b:49:e9:70:80:3d:56:18:63:08:6f:
- da:f2:cc:d0:3f:7f:02:54:22:54:10:d8:b2:81:d4:
- c0:75:3d:4b:7f:c7:77:c3:3e:78:ab:1a:03:b5:20:
- 6b:2f:6a:2b:b1:c5:88:7e:c4:bb:1e:b0:c1:d8:45:
- 27:6f:aa:37:58:f7:87:26:d7:d8:2d:f6:a9:17:b7:
- 1f:72:36:4e:a6:17:3f:65:98:92:db:2a:6e:5d:a2:
- fe:88:e0:0b:de:7f:e5:8d:15:e1:eb:cb:3a:d5:e2:
- 12:a2:13:2d:d8:8e:af:5f:12:3d:a0:08:05:08:b6:
- 5c:a5:65:38:04:45:99:1e:a3:60:60:74:c5:41:a5:
- 72:62:1b:62:c5:1f:6f:5f:1a:42:be:02:51:65:a8:
- ae:23:18:6a:fc:78:03:a9:4d:7f:80:c3:fa:ab:5a:
- fc:a1:40:a4:ca:19:16:fe:b2:c8:ef:5e:73:0d:ee:
- 77:bd:9a:f6:79:98:bc:b1:07:67:a2:15:0d:dd:a0:
- 58:c6:44:7b:0a:3e:62:28:5f:ba:41:07:53:58:cf:
- 11:7e:38:74:c5:f8:ff:b5:69:90:8f:84:74:ea:97:
- 1b:af
- Exponent: 3 (0x3)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
- X509v3 Authority Key Identifier:
- keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
- DirName:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
- serial:00
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 32:4b:f3:b2:ca:3e:91:fc:12:c6:a1:07:8c:8e:77:a0:33:06:
- 14:5c:90:1e:18:f7:08:a6:3d:0a:19:f9:87:80:11:6e:69:e4:
- 96:17:30:ff:34:91:63:72:38:ee:cc:1c:01:a3:1d:94:28:a4:
- 31:f6:7a:c4:54:d7:f6:e5:31:58:03:a2:cc:ce:62:db:94:45:
- 73:b5:bf:45:c9:24:b5:d5:82:02:ad:23:79:69:8d:b8:b6:4d:
- ce:cf:4c:ca:33:23:e8:1c:88:aa:9d:8b:41:6e:16:c9:20:e5:
- 89:9e:cd:3b:da:70:f7:7e:99:26:20:14:54:25:ab:6e:73:85:
- e6:9b:21:9d:0a:6c:82:0e:a8:f8:c2:0c:fa:10:1e:6c:96:ef:
- 87:0d:c4:0f:61:8b:ad:ee:83:2b:95:f8:8e:92:84:72:39:eb:
- 20:ea:83:ed:83:cd:97:6e:08:bc:eb:4e:26:b6:73:2b:e4:d3:
- f6:4c:fe:26:71:e2:61:11:74:4a:ff:57:1a:87:0f:75:48:2e:
- cf:51:69:17:a0:02:12:61:95:d5:d1:40:b2:10:4c:ee:c4:ac:
- 10:43:a6:a5:9e:0a:d5:95:62:9a:0d:cf:88:82:c5:32:0c:e4:
- 2b:9f:45:e6:0d:9f:28:9c:b1:b9:2a:5a:57:ad:37:0f:af:1d:
- 7f:db:bd:9f
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
@@ -5368,65 +1461,6 @@ ReYNnyicsbkqWletNw+vHX/bvZ8=
Starfield Class 2 CA
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority
- Validity
- Not Before: Jun 29 17:39:16 2004 GMT
- Not After : Jun 29 17:39:16 2034 GMT
- Subject: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b7:32:c8:fe:e9:71:a6:04:85:ad:0c:11:64:df:
- ce:4d:ef:c8:03:18:87:3f:a1:ab:fb:3c:a6:9f:f0:
- c3:a1:da:d4:d8:6e:2b:53:90:fb:24:a4:3e:84:f0:
- 9e:e8:5f:ec:e5:27:44:f5:28:a6:3f:7b:de:e0:2a:
- f0:c8:af:53:2f:9e:ca:05:01:93:1e:8f:66:1c:39:
- a7:4d:fa:5a:b6:73:04:25:66:eb:77:7f:e7:59:c6:
- 4a:99:25:14:54:eb:26:c7:f3:7f:19:d5:30:70:8f:
- af:b0:46:2a:ff:ad:eb:29:ed:d7:9f:aa:04:87:a3:
- d4:f9:89:a5:34:5f:db:43:91:82:36:d9:66:3c:b1:
- b8:b9:82:fd:9c:3a:3e:10:c8:3b:ef:06:65:66:7a:
- 9b:19:18:3d:ff:71:51:3c:30:2e:5f:be:3d:77:73:
- b2:5d:06:6c:c3:23:56:9a:2b:85:26:92:1c:a7:02:
- b3:e4:3f:0d:af:08:79:82:b8:36:3d:ea:9c:d3:35:
- b3:bc:69:ca:f5:cc:9d:e8:fd:64:8d:17:80:33:6e:
- 5e:4a:5d:99:c9:1e:87:b4:9d:1a:c0:d5:6e:13:35:
- 23:5e:df:9b:5f:3d:ef:d6:f7:76:c2:ea:3e:bb:78:
- 0d:1c:42:67:6b:04:d8:f8:d6:da:6f:8b:f2:44:a0:
- 01:ab
- Exponent: 3 (0x3)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- BF:5F:B7:D1:CE:DD:1F:86:F4:5B:55:AC:DC:D7:10:C2:0E:A9:88:E7
- X509v3 Authority Key Identifier:
- keyid:BF:5F:B7:D1:CE:DD:1F:86:F4:5B:55:AC:DC:D7:10:C2:0E:A9:88:E7
- DirName:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
- serial:00
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 05:9d:3f:88:9d:d1:c9:1a:55:a1:ac:69:f3:f3:59:da:9b:01:
- 87:1a:4f:57:a9:a1:79:09:2a:db:f7:2f:b2:1e:cc:c7:5e:6a:
- d8:83:87:a1:97:ef:49:35:3e:77:06:41:58:62:bf:8e:58:b8:
- 0a:67:3f:ec:b3:dd:21:66:1f:c9:54:fa:72:cc:3d:4c:40:d8:
- 81:af:77:9e:83:7a:bb:a2:c7:f5:34:17:8e:d9:11:40:f4:fc:
- 2c:2a:4d:15:7f:a7:62:5d:2e:25:d3:00:0b:20:1a:1d:68:f9:
- 17:b8:f4:bd:8b:ed:28:59:dd:4d:16:8b:17:83:c8:b2:65:c7:
- 2d:7a:a5:aa:bc:53:86:6d:dd:57:a4:ca:f8:20:41:0b:68:f0:
- f4:fb:74:be:56:5d:7a:79:f5:f9:1d:85:e3:2d:95:be:f5:71:
- 90:43:cc:8d:1f:9a:00:0a:87:29:e9:55:22:58:00:23:ea:e3:
- 12:43:29:5b:47:08:dd:8c:41:6a:65:06:a8:e5:21:aa:41:b4:
- 95:21:95:b9:7d:d1:34:ab:13:d6:ad:bc:dc:e2:3d:39:cd:bd:
- 3e:75:70:a1:18:59:03:c9:22:b4:8f:9c:d5:5e:2a:d7:a5:b6:
- d4:0a:6d:f8:b7:40:11:46:9a:1f:79:0e:62:bf:0f:97:ec:e0:
- 2f:1f:17:94
-----BEGIN CERTIFICATE-----
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
@@ -5454,110 +1488,6 @@ WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
StartCom Certification Authority
================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority
- Validity
- Not Before: Sep 17 19:46:36 2006 GMT
- Not After : Sep 17 19:46:36 2036 GMT
- Subject: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c1:88:db:09:bc:6c:46:7c:78:9f:95:7b:b5:33:
- 90:f2:72:62:d6:c1:36:20:22:24:5e:ce:e9:77:f2:
- 43:0a:a2:06:64:a4:cc:8e:36:f8:38:e6:23:f0:6e:
- 6d:b1:3c:dd:72:a3:85:1c:a1:d3:3d:b4:33:2b:d3:
- 2f:af:fe:ea:b0:41:59:67:b6:c4:06:7d:0a:9e:74:
- 85:d6:79:4c:80:37:7a:df:39:05:52:59:f7:f4:1b:
- 46:43:a4:d2:85:85:d2:c3:71:f3:75:62:34:ba:2c:
- 8a:7f:1e:8f:ee:ed:34:d0:11:c7:96:cd:52:3d:ba:
- 33:d6:dd:4d:de:0b:3b:4a:4b:9f:c2:26:2f:fa:b5:
- 16:1c:72:35:77:ca:3c:5d:e6:ca:e1:26:8b:1a:36:
- 76:5c:01:db:74:14:25:fe:ed:b5:a0:88:0f:dd:78:
- ca:2d:1f:07:97:30:01:2d:72:79:fa:46:d6:13:2a:
- a8:b9:a6:ab:83:49:1d:e5:f2:ef:dd:e4:01:8e:18:
- 0a:8f:63:53:16:85:62:a9:0e:19:3a:cc:b5:66:a6:
- c2:6b:74:07:e4:2b:e1:76:3e:b4:6d:d8:f6:44:e1:
- 73:62:1f:3b:c4:be:a0:53:56:25:6c:51:09:f7:aa:
- ab:ca:bf:76:fd:6d:9b:f3:9d:db:bf:3d:66:bc:0c:
- 56:aa:af:98:48:95:3a:4b:df:a7:58:50:d9:38:75:
- a9:5b:ea:43:0c:02:ff:99:eb:e8:6c:4d:70:5b:29:
- 65:9c:dd:aa:5d:cc:af:01:31:ec:0c:eb:d2:8d:e8:
- ea:9c:7b:e6:6e:f7:27:66:0c:1a:48:d7:6e:42:e3:
- 3f:de:21:3e:7b:e1:0d:70:fb:63:aa:a8:6c:1a:54:
- b4:5c:25:7a:c9:a2:c9:8b:16:a6:bb:2c:7e:17:5e:
- 05:4d:58:6e:12:1d:01:ee:12:10:0d:c6:32:7f:18:
- ff:fc:f4:fa:cd:6e:91:e8:36:49:be:1a:48:69:8b:
- c2:96:4d:1a:12:b2:69:17:c1:0a:90:d6:fa:79:22:
- 48:bf:ba:7b:69:f8:70:c7:fa:7a:37:d8:d8:0d:d2:
- 76:4f:57:ff:90:b7:e3:91:d2:dd:ef:c2:60:b7:67:
- 3a:dd:fe:aa:9c:f0:d4:8b:7f:72:22:ce:c6:9f:97:
- b6:f8:af:8a:a0:10:a8:d9:fb:18:c6:b6:b5:5c:52:
- 3c:89:b6:19:2a:73:01:0a:0f:03:b3:12:60:f2:7a:
- 2f:81:db:a3:6e:ff:26:30:97:f5:8b:dd:89:57:b6:
- ad:3d:b3:af:2b:c5:b7:76:02:f0:a5:d6:2b:9a:86:
- 14:2a:72:f6:e3:33:8c:5d:09:4b:13:df:bb:8c:74:
- 13:52:4b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:TRUE
- X509v3 Key Usage:
- Digital Signature, Key Encipherment, Key Agreement, Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2
- X509v3 CRL Distribution Points:
- URI:http://cert.startcom.org/sfsca-crl.crl
- URI:http://crl.startcom.org/sfsca-crl.crl
-
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.23223.1.1.1
- CPS: http://cert.startcom.org/policy.pdf
- CPS: http://cert.startcom.org/intermediate.pdf
- User Notice:
- Organization: Start Commercial (StartCom) Ltd.
- Number: 1
- Explicit Text: Limited Liability, read the section *Legal Limitations* of the StartCom Certification Authority Policy available at http://cert.startcom.org/policy.pdf
-
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- Netscape Comment:
- StartCom Free SSL Certification Authority
- Signature Algorithm: sha1WithRSAEncryption
- 16:6c:99:f4:66:0c:34:f5:d0:85:5e:7d:0a:ec:da:10:4e:38:
- 1c:5e:df:a6:25:05:4b:91:32:c1:e8:3b:f1:3d:dd:44:09:5b:
- 07:49:8a:29:cb:66:02:b7:b1:9a:f7:25:98:09:3c:8e:1b:e1:
- dd:36:87:2b:4b:bb:68:d3:39:66:3d:a0:26:c7:f2:39:91:1d:
- 51:ab:82:7b:7e:d5:ce:5a:e4:e2:03:57:70:69:97:08:f9:5e:
- 58:a6:0a:df:8c:06:9a:45:16:16:38:0a:5e:57:f6:62:c7:7a:
- 02:05:e6:bc:1e:b5:f2:9e:f4:a9:29:83:f8:b2:14:e3:6e:28:
- 87:44:c3:90:1a:de:38:a9:3c:ac:43:4d:64:45:ce:dd:28:a9:
- 5c:f2:73:7b:04:f8:17:e8:ab:b1:f3:2e:5c:64:6e:73:31:3a:
- 12:b8:bc:b3:11:e4:7d:8f:81:51:9a:3b:8d:89:f4:4d:93:66:
- 7b:3c:03:ed:d3:9a:1d:9a:f3:65:50:f5:a0:d0:75:9f:2f:af:
- f0:ea:82:43:98:f8:69:9c:89:79:c4:43:8e:46:72:e3:64:36:
- 12:af:f7:25:1e:38:89:90:77:7e:c3:6b:6a:b9:c3:cb:44:4b:
- ac:78:90:8b:e7:c7:2c:1e:4b:11:44:c8:34:52:27:cd:0a:5d:
- 9f:85:c1:89:d5:1a:78:f2:95:10:53:32:dd:80:84:66:75:d9:
- b5:68:28:fb:61:2e:be:84:a8:38:c0:99:12:86:a5:1e:67:64:
- ad:06:2e:2f:a9:70:85:c7:96:0f:7c:89:65:f5:8e:43:54:0e:
- ab:dd:a5:80:39:94:60:c0:34:c9:96:70:2c:a3:12:f5:1f:48:
- 7b:bd:1c:7e:6b:b7:9d:90:f4:22:3b:ae:f8:fc:2a:ca:fa:82:
- 52:a0:ef:af:4b:55:93:eb:c1:b5:f0:22:8b:ac:34:4e:26:22:
- 04:a1:87:2c:75:4a:b7:e5:7d:13:d7:b8:0c:64:c0:36:d2:c9:
- 2f:86:12:8c:23:09:c1:1b:82:3b:73:49:a3:6a:57:87:94:e5:
- d6:78:c5:99:43:63:e3:4d:e0:77:2d:e1:65:99:72:69:04:1a:
- 47:09:e6:0f:01:56:24:fb:1f:bf:0e:79:a9:58:2e:b9:c4:09:
- 01:7e:95:ba:6d:00:06:3e:b2:ea:4a:10:39:d8:d0:2b:f5:bf:
- ec:75:bf:97:02:c5:09:1b:08:dc:55:37:e2:81:fb:37:84:43:
- 62:20:ca:e7:56:4b:65:ea:fe:6c:c1:24:93:24:a1:34:eb:05:
- ff:9a:22:ae:9b:7d:3f:f1:65:51:0a:a6:30:6a:b3:f4:88:1c:
- 80:0d:fc:72:8a:e8:83:5e
-----BEGIN CERTIFICATE-----
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
@@ -5605,94 +1535,6 @@ NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
Taiwan GRCA
===========
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 1f:9d:59:5a:d7:2f:c2:06:44:a5:80:08:69:e3:5e:f6
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=TW, O=Government Root Certification Authority
- Validity
- Not Before: Dec 5 13:23:33 2002 GMT
- Not After : Dec 5 13:23:33 2032 GMT
- Subject: C=TW, O=Government Root Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:9a:25:b8:ec:cc:a2:75:a8:7b:f7:ce:5b:59:8a:
- c9:d1:86:12:08:54:ec:9c:f2:e7:46:f6:88:f3:7c:
- e9:a5:df:4c:47:36:a4:1b:01:1c:7f:1e:57:8a:8d:
- c3:c5:d1:21:e3:da:24:3f:48:2b:fb:9f:2e:a1:94:
- e7:2c:1c:93:d1:bf:1b:01:87:53:99:ce:a7:f5:0a:
- 21:76:77:ff:a9:b7:c6:73:94:4f:46:f7:10:49:37:
- fa:a8:59:49:5d:6a:81:07:56:f2:8a:f9:06:d0:f7:
- 70:22:4d:b4:b7:41:b9:32:b8:b1:f0:b1:c3:9c:3f:
- 70:fd:53:dd:81:aa:d8:63:78:f6:d8:53:6e:a1:ac:
- 6a:84:24:72:54:86:c6:d2:b2:ca:1c:0e:79:81:d6:
- b5:70:62:08:01:2e:4e:4f:0e:d5:11:af:a9:af:e5:
- 9a:bf:dc:cc:87:6d:26:e4:c9:57:a2:fb:96:f9:cc:
- e1:3f:53:8c:6c:4c:7e:9b:53:08:0b:6c:17:fb:67:
- c8:c2:ad:b1:cd:80:b4:97:dc:76:01:16:15:e9:6a:
- d7:a4:e1:78:47:ce:86:d5:fb:31:f3:fa:31:be:34:
- aa:28:fb:70:4c:1d:49:c7:af:2c:9d:6d:66:a6:b6:
- 8d:64:7e:b5:20:6a:9d:3b:81:b6:8f:40:00:67:4b:
- 89:86:b8:cc:65:fe:15:53:e9:04:c1:d6:5f:1d:44:
- d7:0a:2f:27:9a:46:7d:a1:0d:75:ad:54:86:15:dc:
- 49:3b:f1:96:ce:0f:9b:a0:ec:a3:7a:5d:be:d5:2a:
- 75:42:e5:7b:de:a5:b6:aa:af:28:ac:ac:90:ac:38:
- b7:d5:68:35:26:7a:dc:f7:3b:f3:fd:45:9b:d1:bb:
- 43:78:6e:6f:f1:42:54:6a:98:f0:0d:ad:97:e9:52:
- 5e:e9:d5:6a:72:de:6a:f7:1b:60:14:f4:a5:e4:b6:
- 71:67:aa:1f:ea:e2:4d:c1:42:40:fe:67:46:17:38:
- 2f:47:3f:71:9c:ae:e5:21:ca:61:2d:6d:07:a8:84:
- 7c:2d:ee:51:25:f1:63:90:9e:fd:e1:57:88:6b:ef:
- 8a:23:6d:b1:e6:bd:3f:ad:d1:3d:96:0b:85:8d:cd:
- 6b:27:bb:b7:05:9b:ec:bb:91:a9:0a:07:12:02:97:
- 4e:20:90:f0:ff:0d:1e:e2:41:3b:d3:40:3a:e7:8d:
- 5d:da:66:e4:02:b0:07:52:98:5c:0e:8e:33:9c:c2:
- a6:95:fb:55:19:6e:4c:8e:ae:4b:0f:bd:c1:38:4d:
- 5e:8f:84:1d:66:cd:c5:60:96:b4:52:5a:05:89:8e:
- 95:7a:98:c1:91:3c:95:23:b2:0e:f4:79:b4:c9:7c:
- c1:4a:21
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- CC:CC:EF:CC:29:60:A4:3B:B1:92:B6:3C:FA:32:62:8F:AC:25:15:3B
- X509v3 Basic Constraints:
- CA:TRUE
- setCext-hashedRoot:
- 0/0-...0...+......0...g*........"...(6....2.1:.Qe
- Signature Algorithm: sha1WithRSAEncryption
- 40:80:4a:fa:26:c9:ce:5e:30:dd:4f:86:74:76:58:f5:ae:b3:
- 83:33:78:a4:7a:74:17:19:4e:e9:52:b5:b9:e0:0a:74:62:aa:
- 68:ca:78:a0:4c:9a:8e:2c:23:2e:d5:6a:12:24:bf:d4:68:d3:
- 8a:d0:d8:9c:9f:b4:1f:0c:de:38:7e:57:38:fc:8d:e2:4f:5e:
- 0c:9f:ab:3b:d2:ff:75:97:cb:a4:e3:67:08:ff:e5:c0:16:b5:
- 48:01:7d:e9:f9:0a:ff:1b:e5:6a:69:bf:78:21:a8:c2:a7:23:
- a9:86:ab:76:56:e8:0e:0c:f6:13:dd:2a:66:8a:64:49:3d:1a:
- 18:87:90:04:9f:42:52:b7:4f:cb:fe:47:41:76:35:ef:ff:00:
- 76:36:45:32:9b:c6:46:85:5d:e2:24:b0:1e:e3:48:96:98:57:
- 47:94:55:7a:0f:41:b1:44:24:f3:c1:fe:1a:6b:bf:88:fd:c1:
- a6:da:93:60:5e:81:4a:99:20:9c:48:66:19:b5:00:79:54:0f:
- b8:2c:2f:4b:bc:a9:5d:5b:60:7f:8c:87:a5:e0:52:63:2a:be:
- d8:3b:85:40:15:fe:1e:b6:65:3f:c5:4b:da:7e:b5:7a:35:29:
- a3:2e:7a:98:60:22:a3:f4:7d:27:4e:2d:ea:b4:74:3c:e9:0f:
- a4:33:0f:10:11:bc:13:01:d6:e5:0e:d3:bf:b5:12:a2:e1:45:
- 23:c0:cc:08:6e:61:b7:89:ab:83:e3:24:1e:e6:5d:07:e7:1f:
- 20:3e:cf:67:c8:e7:ac:30:6d:27:4b:68:6e:4b:2a:5c:02:08:
- 34:db:f8:76:e4:67:a3:26:9c:3f:a2:32:c2:4a:c5:81:18:31:
- 10:56:aa:84:ef:2d:0a:ff:b8:1f:77:d2:bf:a5:58:a0:62:e4:
- d7:4b:91:75:8d:89:80:98:7e:6d:cb:53:4e:5e:af:f6:b2:97:
- 85:97:b9:da:55:06:b9:24:ee:d7:c6:38:1e:63:1b:12:3b:95:
- e1:58:ac:f2:df:84:d5:5f:99:2f:0d:55:5b:e6:38:db:2e:3f:
- 72:e9:48:85:cb:bb:29:13:8f:1e:38:55:b9:f3:b2:c4:30:99:
- 23:4e:5d:f2:48:a1:12:0c:dc:12:90:09:90:54:91:03:3c:47:
- e5:d5:c9:65:e0:b7:4b:7d:ec:47:d3:b3:0b:3e:ad:9e:d0:74:
- 00:0e:eb:bd:51:ad:c0:de:2c:c0:c3:6a:fe:ef:dc:0b:a7:fa:
- 46:df:60:db:9c:a6:59:50:75:23:69:73:93:b2:f9:fc:02:d3:
- 47:e6:71:ce:10:02:ee:27:8c:84:ff:ac:45:0d:13:5c:83:32:
- e0:25:a5:86:2c:7c:f4:12
-----BEGIN CERTIFICATE-----
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
@@ -5728,66 +1570,6 @@ pYYsfPQS
Firmaprofesional Root CA
========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=ES, L=C/ Muntaner 244 Barcelona, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068/emailAddress=ca at firmaprofesional.com
- Validity
- Not Before: Oct 24 22:00:00 2001 GMT
- Not After : Oct 24 22:00:00 2013 GMT
- Subject: C=ES, L=C/ Muntaner 244 Barcelona, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068/emailAddress=ca at firmaprofesional.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e7:23:03:6f:6f:23:a5:5e:78:ce:95:2c:ed:94:
- 1e:6e:0a:9e:01:c7:ea:30:d1:2c:9d:dd:37:e8:9b:
- 98:79:56:d3:fc:73:df:d0:8a:de:55:8f:51:f9:5a:
- ea:de:b5:70:c4:ed:a4:ed:ff:a3:0d:6e:0f:64:50:
- 31:af:01:27:58:ae:fe:6c:a7:4a:2f:17:2d:d3:73:
- d5:13:1c:8f:59:a5:34:2c:1d:54:04:45:cd:68:b8:
- a0:c0:03:a5:cf:85:42:47:95:28:5b:cf:ef:80:6c:
- e0:90:97:8a:01:3c:1d:f3:87:10:30:26:48:7d:d7:
- fc:e9:9d:91:71:ff:41:9a:a9:40:b5:37:9c:29:20:
- 4f:1f:52:e3:a0:7d:13:6d:54:b7:0a:de:e9:6a:4e:
- 07:ac:ac:19:5f:dc:7e:62:74:f6:b2:05:00:ba:85:
- a0:fd:1d:38:6e:cb:5a:bb:86:bc:94:67:33:35:83:
- 2c:1f:23:cd:f8:c8:91:71:cc:97:8b:ef:ae:0f:dc:
- 29:03:1b:c0:39:eb:70:ed:c1:6e:0e:d8:67:0b:89:
- a9:bc:35:e4:ef:b6:34:b4:a5:b6:c4:2d:a5:be:d0:
- c3:94:24:48:db:df:96:d3:00:b5:66:1a:8b:66:05:
- 0f:dd:3f:3f:cb:3f:aa:5e:9a:4a:f8:b4:4a:ef:95:
- 37:1b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Alternative Name:
- URI:http://www.firmaprofesional.com
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:1
- X509v3 Private Key Usage Period:
- Not Before: Oct 24 22:00:00 2001 GMT, Not After: Oct 24 22:00:00 2013 GMT
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 33:0B:A0:66:D1:EA:DA:CE:DE:62:93:04:28:52:B5:14:7F:38:68:B7
- Signature Algorithm: sha1WithRSAEncryption
- 47:73:fe:8d:27:54:f0:f5:d4:77:9c:27:79:57:57:b7:15:56:
- ec:c7:d8:58:b7:01:02:f4:33:ed:93:50:88:9e:7c:46:b1:bd:
- 3f:14:6f:f1:b3:47:48:8b:8c:97:06:d7:ea:7e:a3:5c:2a:bb:
- 4d:2f:47:e2:f8:39:06:c9:9c:2e:31:1a:03:78:f4:bc:38:c6:
- 22:8b:33:31:f0:16:04:04:7d:f9:76:e4:4b:d7:c0:e6:83:ec:
- 59:cc:3f:de:ff:4f:6b:b7:67:7e:a6:86:81:32:23:03:9d:c8:
- f7:5f:c1:4a:60:a5:92:a9:b1:a4:a0:60:c3:78:87:b3:22:f3:
- 2a:eb:5b:a9:ed:05:ab:37:0f:b1:e2:d3:95:76:63:56:74:8c:
- 58:72:1b:37:e5:64:a1:be:4d:0c:93:98:0c:97:f6:87:6d:b3:
- 3f:e7:cb:80:a6:ed:88:c7:5f:50:62:02:e8:99:74:16:d0:e6:
- b4:39:f1:27:cb:c8:40:d6:e3:86:10:a9:23:12:92:e0:69:41:
- 63:a7:af:25:0b:c0:c5:92:cb:1e:98:a3:5a:ba:c5:33:0f:a0:
- 97:01:dd:7f:e0:7b:d6:06:54:cf:a1:e2:4d:38:eb:4b:50:b5:
- cb:26:f4:ca:da:70:4a:6a:a1:e2:79:aa:e1:a7:33:f6:fd:4a:
- 1f:f6:d9:60
-----BEGIN CERTIFICATE-----
MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
@@ -5817,62 +1599,6 @@ quGnM/b9Sh/22WA=
Wells Fargo Root CA
===================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 971282334 (0x39e4979e)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Wells Fargo, OU=Wells Fargo Certification Authority, CN=Wells Fargo Root Certificate Authority
- Validity
- Not Before: Oct 11 16:41:28 2000 GMT
- Not After : Jan 14 16:41:28 2021 GMT
- Subject: C=US, O=Wells Fargo, OU=Wells Fargo Certification Authority, CN=Wells Fargo Root Certificate Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:d5:a8:33:3b:26:f9:34:ff:cd:9b:7e:e5:04:47:
- ce:00:e2:7d:77:e7:31:c2:2e:27:a5:4d:68:b9:31:
- ba:8d:43:59:97:c7:73:aa:7f:3d:5c:40:9e:05:e5:
- a1:e2:89:d9:4c:b8:3f:9b:f9:0c:b4:c8:62:19:2c:
- 45:ae:91:1e:73:71:41:c4:4b:13:fd:70:c2:25:ac:
- 22:f5:75:0b:b7:53:e4:a5:2b:dd:ce:bd:1c:3a:7a:
- c3:f7:13:8f:26:54:9c:16:6b:6b:af:fb:d8:96:b1:
- 60:9a:48:e0:25:22:24:79:34:ce:0e:26:00:0b:4e:
- ab:fd:8b:ce:82:d7:2f:08:70:68:c1:a8:0a:f9:74:
- 4f:07:ab:a4:f9:e2:83:7e:27:73:74:3e:b8:f9:38:
- 42:fc:a5:a8:5b:48:23:b3:eb:e3:25:b2:80:ae:96:
- d4:0a:9c:c2:78:9a:c6:68:18:ae:37:62:37:5e:51:
- 75:a8:58:63:c0:51:ee:40:78:7e:a8:af:1a:a0:e1:
- b0:78:9d:50:8c:7b:e7:b3:fc:8e:23:b0:db:65:00:
- 70:84:01:08:00:14:6e:54:86:9a:ba:cc:f9:37:10:
- f6:e0:de:84:2d:9d:a4:85:37:d3:87:e3:15:d0:c1:
- 17:90:7e:19:21:6a:12:a9:76:fd:12:02:e9:4f:21:
- 5e:17
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: 2.16.840.1.114171.903.1.11
- CPS: http://www.wellsfargo.com/certpolicy
-
- Signature Algorithm: sha1WithRSAEncryption
- d2:27:dd:9c:0a:77:2b:bb:22:f2:02:b5:4a:4a:91:f9:d1:2d:
- be:e4:bb:1a:68:ef:0e:a4:00:e9:ee:e7:ef:ee:f6:f9:e5:74:
- a4:c2:d8:52:58:c4:74:fb:ce:6b:b5:3b:29:79:18:5a:ef:9b:
- ed:1f:6b:36:ee:48:25:25:14:b6:56:a2:10:e8:ee:a7:7f:d0:
- 3f:a3:d0:c3:5d:26:ee:07:cc:c3:c1:24:21:87:1e:df:2a:12:
- 53:6f:41:16:e7:ed:ae:94:fa:8c:72:fa:13:47:f0:3c:7e:ae:
- 7d:11:3a:13:ec:ed:fa:6f:72:64:7b:9d:7d:7f:26:fd:7a:fb:
- 25:ad:ea:3e:29:7f:4c:e3:00:57:32:b0:b3:e9:ed:53:17:d9:
- 8b:b2:14:0e:30:e8:e5:d5:13:c6:64:af:c4:00:d5:d8:58:24:
- fc:f5:8f:ec:f1:c7:7d:a5:db:0f:27:d1:c6:f2:40:88:e6:1f:
- f6:61:a8:f4:42:c8:b9:37:d3:a9:be:2c:56:78:c2:72:9b:59:
- 5d:35:40:8a:e8:4e:63:1a:b6:e9:20:6a:51:e2:ce:a4:90:df:
- 76:70:99:5c:70:43:4d:b7:b6:a7:19:64:4e:92:b7:c5:91:3c:
- 7f:48:16:65:7b:16:fd:cb:fc:fb:d9:d5:d6:4f:21:65:3b:4a:
- 7f:47:a3:fb
-----BEGIN CERTIFICATE-----
MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
@@ -5899,99 +1625,6 @@ x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
Swisscom Root CA 1
==================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 5c:0b:85:5c:0b:e7:59:41:df:57:cc:3f:7f:9d:a8:36
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=ch, O=Swisscom, OU=Digital Certificate Services, CN=Swisscom Root CA 1
- Validity
- Not Before: Aug 18 12:06:20 2005 GMT
- Not After : Aug 18 22:06:20 2025 GMT
- Subject: C=ch, O=Swisscom, OU=Digital Certificate Services, CN=Swisscom Root CA 1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:d0:b9:b0:a8:0c:d9:bb:3f:21:f8:1b:d5:33:93:
- 80:16:65:20:75:b2:3d:9b:60:6d:46:c8:8c:31:6f:
- 17:c3:fa:9a:6c:56:ed:3c:c5:91:57:c3:cd:ab:96:
- 49:90:2a:19:4b:1e:a3:6d:57:dd:f1:2b:62:28:75:
- 45:5e:aa:d6:5b:fa:0b:25:d8:a1:16:f9:1c:c4:2e:
- e6:95:2a:67:cc:d0:29:6e:3c:85:34:38:61:49:b1:
- 00:9f:d6:3a:71:5f:4d:6d:ce:5f:b9:a9:e4:89:7f:
- 6a:52:fa:ca:9b:f2:dc:a9:f9:9d:99:47:3f:4e:29:
- 5f:b4:a6:8d:5d:7b:0b:99:11:03:03:fe:e7:db:db:
- a3:ff:1d:a5:cd:90:1e:01:1f:35:b0:7f:00:db:90:
- 6f:c6:7e:7b:d1:ee:7a:7a:a7:aa:0c:57:6f:a4:6d:
- c5:13:3b:b0:a5:d9:ed:32:1c:b4:5e:67:8b:54:dc:
- 73:87:e5:d3:17:7c:66:50:72:5d:d4:1a:58:c1:d9:
- cf:d8:89:02:6f:a7:49:b4:36:5d:d0:a4:de:07:2c:
- b6:75:b7:28:91:d6:97:be:28:f5:98:1e:ea:5b:26:
- c9:bd:b0:97:73:da:ae:91:26:eb:68:c1:f9:39:15:
- d6:67:4b:0a:6d:4f:cb:cf:b0:e4:42:71:8c:53:79:
- e7:ee:e1:db:1d:a0:6e:1d:8c:1a:77:35:5c:16:1e:
- 2b:53:1f:34:8b:d1:6c:fc:f2:67:07:7a:f5:ad:ed:
- d6:9a:ab:a1:b1:4b:e1:cc:37:5f:fd:7f:cd:4d:ae:
- b8:1f:9c:43:f9:2a:58:55:43:45:bc:96:cd:70:0e:
- fc:c9:e3:66:ba:4e:8d:3b:81:cb:15:64:7b:b9:94:
- e8:5d:33:52:85:71:2e:4f:8e:a2:06:11:51:c9:e3:
- cb:a1:6e:31:08:64:0c:c2:d2:3c:f5:36:e8:d7:d0:
- 0e:78:23:20:91:c9:24:2a:65:29:5b:22:f7:21:ce:
- 83:5e:a4:f3:de:4b:d3:68:8f:46:75:5c:83:09:6e:
- 29:6b:c4:70:8c:f5:9d:d7:20:2f:ff:46:d2:2b:38:
- c2:2f:75:1c:3d:7e:da:a5:ef:1e:60:85:69:42:d3:
- cc:f8:63:fe:1e:43:39:85:a6:b6:63:41:10:b3:73:
- 1e:bc:d3:fa:ca:7d:16:47:e2:a7:d5:d0:a3:8a:0a:
- 08:96:62:56:6e:34:db:d9:02:b9:30:75:e3:04:d2:
- e7:8f:c2:b0:11:40:0a:ac:d5:71:02:62:8b:31:be:
- dd:c6:23:58:31:42:43:2d:74:f9:c6:9e:a6:8a:0f:
- e9:fe:bf:83:e6:43:57:24:ba:ef:46:34:aa:d7:12:
- 01:38:ed
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Policy Mappings:
- 2.16.756.1.83.0.1:2.16.756.1.83.0.1
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:7
- X509v3 Authority Key Identifier:
- keyid:03:25:2F:DE:6F:82:01:3A:5C:2C:DC:2B:A1:69:B5:67:D4:8C:D3:FD
-
- X509v3 Subject Key Identifier:
- 03:25:2F:DE:6F:82:01:3A:5C:2C:DC:2B:A1:69:B5:67:D4:8C:D3:FD
- Signature Algorithm: sha1WithRSAEncryption
- 35:10:cb:ec:a6:04:0d:0d:0f:cd:c0:db:ab:a8:f2:88:97:0c:
- df:93:2f:4d:7c:40:56:31:7a:eb:a4:0f:60:cd:7a:f3:be:c3:
- 27:8e:03:3e:a4:dd:12:ef:7e:1e:74:06:3c:3f:31:f2:1c:7b:
- 91:31:21:b4:f0:d0:6c:97:d4:e9:97:b2:24:56:1e:56:c3:35:
- bd:88:05:0f:5b:10:1a:64:e1:c7:82:30:f9:32:ad:9e:50:2c:
- e7:78:05:d0:31:b1:5a:98:8a:75:4e:90:5c:6a:14:2a:e0:52:
- 47:82:60:e6:1e:da:81:b1:fb:14:0b:5a:f1:9f:d2:95:ba:3e:
- d0:1b:d6:15:1d:a3:be:86:d5:db:0f:c0:49:64:bb:2e:50:19:
- 4b:d2:24:f8:dd:1e:07:56:d0:38:a0:95:70:20:76:8c:d7:dd:
- 1e:de:9f:71:c4:23:ef:83:13:5c:a3:24:15:4d:29:40:3c:6a:
- c4:a9:d8:b7:a6:44:a5:0d:f4:e0:9d:77:1e:40:70:26:fc:da:
- d9:36:e4:79:e4:b5:3f:bc:9b:65:be:bb:11:96:cf:db:c6:28:
- 39:3a:08:ce:47:5b:53:5a:c5:99:fe:5d:a9:dd:ef:4c:d4:c6:
- a5:ad:02:e6:8c:07:12:1e:6f:03:d1:6f:a0:a3:f3:29:bd:12:
- c7:50:a2:b0:7f:88:a9:99:77:9a:b1:c0:a5:39:2e:5c:7c:69:
- e2:2c:b0:ea:37:6a:a4:e1:5a:e1:f5:50:e5:83:ef:a5:bb:2a:
- 88:e7:8c:db:fd:6d:5e:97:19:a8:7e:66:75:6b:71:ea:bf:b1:
- c7:6f:a0:f4:8e:a4:ec:34:51:5b:8c:26:03:70:a1:77:d5:01:
- 12:57:00:35:db:23:de:0e:8a:28:99:fd:b1:10:6f:4b:ff:38:
- 2d:60:4e:2c:9c:eb:67:b5:ad:49:ee:4b:1f:ac:af:fb:0d:90:
- 5a:66:60:70:5d:aa:cd:78:d4:24:ee:c8:41:a0:93:01:92:9c:
- 6a:9e:fc:b9:24:c5:b3:15:82:7e:be:ae:95:2b:eb:b1:c0:da:
- e3:01:60:0b:5e:69:ac:84:56:61:be:71:17:fe:1d:13:0f:fe:
- c6:87:45:e9:fe:32:a0:1a:0d:13:a4:94:55:71:a5:16:8b:ba:
- ca:89:b0:b2:c7:fc:8f:d8:54:b5:93:62:9d:ce:cf:59:fb:3d:
- 18:ce:2a:cb:35:15:82:5d:ff:54:22:5b:71:52:fb:b7:c9:fe:
- 60:9b:00:41:64:f0:aa:2a:ec:b6:42:43:ce:89:66:81:c8:8b:
- 9f:39:54:03:25:d3:16:35:8e:84:d0:5f:fa:30:1a:f5:9a:6c:
- f4:0e:53:f9:3a:5b:d1:1c
-----BEGIN CERTIFICATE-----
MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
@@ -6029,66 +1662,6 @@ MBr1mmz0DlP5OlvRHA==
DigiCert Assured ID Root CA
===========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
- Validity
- Not Before: Nov 10 00:00:00 2006 GMT
- Not After : Nov 10 00:00:00 2031 GMT
- Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ad:0e:15:ce:e4:43:80:5c:b1:87:f3:b7:60:f9:
- 71:12:a5:ae:dc:26:94:88:aa:f4:ce:f5:20:39:28:
- 58:60:0c:f8:80:da:a9:15:95:32:61:3c:b5:b1:28:
- 84:8a:8a:dc:9f:0a:0c:83:17:7a:8f:90:ac:8a:e7:
- 79:53:5c:31:84:2a:f6:0f:98:32:36:76:cc:de:dd:
- 3c:a8:a2:ef:6a:fb:21:f2:52:61:df:9f:20:d7:1f:
- e2:b1:d9:fe:18:64:d2:12:5b:5f:f9:58:18:35:bc:
- 47:cd:a1:36:f9:6b:7f:d4:b0:38:3e:c1:1b:c3:8c:
- 33:d9:d8:2f:18:fe:28:0f:b3:a7:83:d6:c3:6e:44:
- c0:61:35:96:16:fe:59:9c:8b:76:6d:d7:f1:a2:4b:
- 0d:2b:ff:0b:72:da:9e:60:d0:8e:90:35:c6:78:55:
- 87:20:a1:cf:e5:6d:0a:c8:49:7c:31:98:33:6c:22:
- e9:87:d0:32:5a:a2:ba:13:82:11:ed:39:17:9d:99:
- 3a:72:a1:e6:fa:a4:d9:d5:17:31:75:ae:85:7d:22:
- ae:3f:01:46:86:f6:28:79:c8:b1:da:e4:57:17:c4:
- 7e:1c:0e:b0:b4:92:a6:56:b3:bd:b2:97:ed:aa:a7:
- f0:b7:c5:a8:3f:95:16:d0:ff:a1:96:eb:08:5f:18:
- 77:4f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
- X509v3 Authority Key Identifier:
- keyid:45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
-
- Signature Algorithm: sha1WithRSAEncryption
- a2:0e:bc:df:e2:ed:f0:e3:72:73:7a:64:94:bf:f7:72:66:d8:
- 32:e4:42:75:62:ae:87:eb:f2:d5:d9:de:56:b3:9f:cc:ce:14:
- 28:b9:0d:97:60:5c:12:4c:58:e4:d3:3d:83:49:45:58:97:35:
- 69:1a:a8:47:ea:56:c6:79:ab:12:d8:67:81:84:df:7f:09:3c:
- 94:e6:b8:26:2c:20:bd:3d:b3:28:89:f7:5f:ff:22:e2:97:84:
- 1f:e9:65:ef:87:e0:df:c1:67:49:b3:5d:eb:b2:09:2a:eb:26:
- ed:78:be:7d:3f:2b:f3:b7:26:35:6d:5f:89:01:b6:49:5b:9f:
- 01:05:9b:ab:3d:25:c1:cc:b6:7f:c2:f1:6f:86:c6:fa:64:68:
- eb:81:2d:94:eb:42:b7:fa:8c:1e:dd:62:f1:be:50:67:b7:6c:
- bd:f3:f1:1f:6b:0c:36:07:16:7f:37:7c:a9:5b:6d:7a:f1:12:
- 46:60:83:d7:27:04:be:4b:ce:97:be:c3:67:2a:68:11:df:80:
- e7:0c:33:66:bf:13:0d:14:6e:f3:7f:1f:63:10:1e:fa:8d:1b:
- 25:6d:6c:8f:a5:b7:61:01:b1:d2:a3:26:a1:10:71:9d:ad:e2:
- c3:f9:c3:99:51:b7:2b:07:08:ce:2e:e6:50:b2:a7:fa:0a:45:
- 2f:a2:f0:f2
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
@@ -6114,66 +1687,6 @@ H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
DigiCert Global Root CA
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
- Validity
- Not Before: Nov 10 00:00:00 2006 GMT
- Not After : Nov 10 00:00:00 2031 GMT
- Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e2:3b:e1:11:72:de:a8:a4:d3:a3:57:aa:50:a2:
- 8f:0b:77:90:c9:a2:a5:ee:12:ce:96:5b:01:09:20:
- cc:01:93:a7:4e:30:b7:53:f7:43:c4:69:00:57:9d:
- e2:8d:22:dd:87:06:40:00:81:09:ce:ce:1b:83:bf:
- df:cd:3b:71:46:e2:d6:66:c7:05:b3:76:27:16:8f:
- 7b:9e:1e:95:7d:ee:b7:48:a3:08:da:d6:af:7a:0c:
- 39:06:65:7f:4a:5d:1f:bc:17:f8:ab:be:ee:28:d7:
- 74:7f:7a:78:99:59:85:68:6e:5c:23:32:4b:bf:4e:
- c0:e8:5a:6d:e3:70:bf:77:10:bf:fc:01:f6:85:d9:
- a8:44:10:58:32:a9:75:18:d5:d1:a2:be:47:e2:27:
- 6a:f4:9a:33:f8:49:08:60:8b:d4:5f:b4:3a:84:bf:
- a1:aa:4a:4c:7d:3e:cf:4f:5f:6c:76:5e:a0:4b:37:
- 91:9e:dc:22:e6:6d:ce:14:1a:8e:6a:cb:fe:cd:b3:
- 14:64:17:c7:5b:29:9e:32:bf:f2:ee:fa:d3:0b:42:
- d4:ab:b7:41:32:da:0c:d4:ef:f8:81:d5:bb:8d:58:
- 3f:b5:1b:e8:49:28:a2:70:da:31:04:dd:f7:b2:16:
- f2:4c:0a:4e:07:a8:ed:4a:3d:5e:b5:7f:a3:90:c3:
- af:27
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
- X509v3 Authority Key Identifier:
- keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
-
- Signature Algorithm: sha1WithRSAEncryption
- cb:9c:37:aa:48:13:12:0a:fa:dd:44:9c:4f:52:b0:f4:df:ae:
- 04:f5:79:79:08:a3:24:18:fc:4b:2b:84:c0:2d:b9:d5:c7:fe:
- f4:c1:1f:58:cb:b8:6d:9c:7a:74:e7:98:29:ab:11:b5:e3:70:
- a0:a1:cd:4c:88:99:93:8c:91:70:e2:ab:0f:1c:be:93:a9:ff:
- 63:d5:e4:07:60:d3:a3:bf:9d:5b:09:f1:d5:8e:e3:53:f4:8e:
- 63:fa:3f:a7:db:b4:66:df:62:66:d6:d1:6e:41:8d:f2:2d:b5:
- ea:77:4a:9f:9d:58:e2:2b:59:c0:40:23:ed:2d:28:82:45:3e:
- 79:54:92:26:98:e0:80:48:a8:37:ef:f0:d6:79:60:16:de:ac:
- e8:0e:cd:6e:ac:44:17:38:2f:49:da:e1:45:3e:2a:b9:36:53:
- cf:3a:50:06:f7:2e:e8:c4:57:49:6c:61:21:18:d5:04:ad:78:
- 3c:2c:3a:80:6b:a7:eb:af:15:14:e9:d8:89:c1:b9:38:6c:e2:
- 91:6c:8a:ff:64:b9:77:25:57:30:c0:1b:24:a3:e1:dc:e9:df:
- 47:7c:b5:b4:24:08:05:30:ec:2d:bd:0b:bf:45:bf:50:b9:a9:
- f3:eb:98:01:12:ad:c8:88:c6:98:34:5f:8d:0a:3c:c6:e9:d5:
- 95:95:6d:de
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
@@ -6199,66 +1712,6 @@ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
DigiCert High Assurance EV Root CA
==================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
- Validity
- Not Before: Nov 10 00:00:00 2006 GMT
- Not After : Nov 10 00:00:00 2031 GMT
- Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c6:cc:e5:73:e6:fb:d4:bb:e5:2d:2d:32:a6:df:
- e5:81:3f:c9:cd:25:49:b6:71:2a:c3:d5:94:34:67:
- a2:0a:1c:b0:5f:69:a6:40:b1:c4:b7:b2:8f:d0:98:
- a4:a9:41:59:3a:d3:dc:94:d6:3c:db:74:38:a4:4a:
- cc:4d:25:82:f7:4a:a5:53:12:38:ee:f3:49:6d:71:
- 91:7e:63:b6:ab:a6:5f:c3:a4:84:f8:4f:62:51:be:
- f8:c5:ec:db:38:92:e3:06:e5:08:91:0c:c4:28:41:
- 55:fb:cb:5a:89:15:7e:71:e8:35:bf:4d:72:09:3d:
- be:3a:38:50:5b:77:31:1b:8d:b3:c7:24:45:9a:a7:
- ac:6d:00:14:5a:04:b7:ba:13:eb:51:0a:98:41:41:
- 22:4e:65:61:87:81:41:50:a6:79:5c:89:de:19:4a:
- 57:d5:2e:e6:5d:1c:53:2c:7e:98:cd:1a:06:16:a4:
- 68:73:d0:34:04:13:5c:a1:71:d3:5a:7c:55:db:5e:
- 64:e1:37:87:30:56:04:e5:11:b4:29:80:12:f1:79:
- 39:88:a2:02:11:7c:27:66:b7:88:b7:78:f2:ca:0a:
- a8:38:ab:0a:64:c2:bf:66:5d:95:84:c1:a1:25:1e:
- 87:5d:1a:50:0b:20:12:cc:41:bb:6e:0b:51:38:b8:
- 4b:cb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
- X509v3 Authority Key Identifier:
- keyid:B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
-
- Signature Algorithm: sha1WithRSAEncryption
- 1c:1a:06:97:dc:d7:9c:9f:3c:88:66:06:08:57:21:db:21:47:
- f8:2a:67:aa:bf:18:32:76:40:10:57:c1:8a:f3:7a:d9:11:65:
- 8e:35:fa:9e:fc:45:b5:9e:d9:4c:31:4b:b8:91:e8:43:2c:8e:
- b3:78:ce:db:e3:53:79:71:d6:e5:21:94:01:da:55:87:9a:24:
- 64:f6:8a:66:cc:de:9c:37:cd:a8:34:b1:69:9b:23:c8:9e:78:
- 22:2b:70:43:e3:55:47:31:61:19:ef:58:c5:85:2f:4e:30:f6:
- a0:31:16:23:c8:e7:e2:65:16:33:cb:bf:1a:1b:a0:3d:f8:ca:
- 5e:8b:31:8b:60:08:89:2d:0c:06:5c:52:b7:c4:f9:0a:98:d1:
- 15:5f:9f:12:be:7c:36:63:38:bd:44:a4:7f:e4:26:2b:0a:c4:
- 97:69:0d:e9:8c:e2:c0:10:57:b8:c8:76:12:91:55:f2:48:69:
- d8:bc:2a:02:5b:0f:44:d4:20:31:db:f4:ba:70:26:5d:90:60:
- 9e:bc:4b:17:09:2f:b4:cb:1e:43:68:c9:07:27:c1:d2:5c:f7:
- ea:21:b9:68:12:9c:3c:9c:bf:9e:fc:80:5c:9b:63:cd:ec:47:
- aa:25:27:67:a0:37:f3:00:82:7d:54:d7:a9:f8:e9:2e:13:a3:
- 77:e8:1f:4a
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
@@ -6285,68 +1738,6 @@ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
Certplus Class 2 Primary CA
===========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 85:bd:4b:f3:d8:da:e3:69:f6:94:d7:5f:c3:a5:44:23
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=FR, O=Certplus, CN=Class 2 Primary CA
- Validity
- Not Before: Jul 7 17:05:00 1999 GMT
- Not After : Jul 6 23:59:59 2019 GMT
- Subject: C=FR, O=Certplus, CN=Class 2 Primary CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:dc:50:96:d0:12:f8:35:d2:08:78:7a:b6:52:70:
- fd:6f:ee:cf:b9:11:cb:5d:77:e1:ec:e9:7e:04:8d:
- d6:cc:6f:73:43:57:60:ac:33:0a:44:ec:03:5f:1c:
- 80:24:91:e5:a8:91:56:12:82:f7:e0:2b:f4:db:ae:
- 61:2e:89:10:8d:6b:6c:ba:b3:02:bd:d5:36:c5:48:
- 37:23:e2:f0:5a:37:52:33:17:12:e2:d1:60:4d:be:
- 2f:41:11:e3:f6:17:25:0c:8b:91:c0:1b:99:7b:99:
- 56:0d:af:ee:d2:bc:47:57:e3:79:49:7b:34:89:27:
- 24:84:de:b1:ec:e9:58:4e:fe:4e:df:5a:be:41:ad:
- ac:08:c5:18:0e:ef:d2:53:ee:6c:d0:9d:12:01:13:
- 8d:dc:80:62:f7:95:a9:44:88:4a:71:4e:60:55:9e:
- db:23:19:79:56:07:0c:3f:63:0b:5c:b0:e2:be:7e:
- 15:fc:94:33:58:41:38:74:c4:e1:8f:8b:df:26:ac:
- 1f:b5:8b:3b:b7:43:59:6b:b0:24:a6:6d:90:8b:c4:
- 72:ea:5d:33:98:b7:cb:de:5e:7b:ef:94:f1:1b:3e:
- ca:c9:21:c1:c5:98:02:aa:a2:f6:5b:77:9b:f5:7e:
- 96:55:34:1c:67:69:c0:f1:42:e3:47:ac:fc:28:1c:
- 66:55
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:TRUE, pathlen:10
- X509v3 Key Usage:
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- E3:73:2D:DF:CB:0E:28:0C:DE:DD:B3:A4:CA:79:B8:8E:BB:E8:30:89
- Netscape Cert Type:
- SSL CA, S/MIME CA
- X509v3 CRL Distribution Points:
- URI:http://www.certplus.com/CRL/class2.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- a7:54:cf:88:44:19:cb:df:d4:7f:00:df:56:33:62:b5:f7:51:
- 01:90:eb:c3:3f:d1:88:44:e9:24:5d:ef:e7:14:bd:20:b7:9a:
- 3c:00:fe:6d:9f:db:90:dc:d7:f4:62:d6:8b:70:5d:e7:e5:04:
- 48:a9:68:7c:c9:f1:42:f3:6c:7f:c5:7a:7c:1d:51:88:ba:d2:
- 0a:3e:27:5d:de:2d:51:4e:d3:13:64:69:e4:2e:e3:d3:e7:9b:
- 09:99:a6:e0:95:9b:ce:1a:d7:7f:be:3c:ce:52:b3:11:15:c1:
- 0f:17:cd:03:bb:9c:25:15:ba:a2:76:89:fc:06:f1:18:d0:93:
- 4b:0e:7c:82:b7:a5:f4:f6:5f:fe:ed:40:a6:9d:84:74:39:b9:
- dc:1e:85:16:da:29:1b:86:23:00:c9:bb:89:7e:6e:80:88:1e:
- 2f:14:b4:03:24:a8:32:6f:03:9a:47:2c:30:be:56:c6:a7:42:
- 02:70:1b:ea:40:d8:ba:05:03:70:07:a4:96:ff:fd:48:33:0a:
- e1:dc:a5:81:90:9b:4d:dd:7d:e7:e7:b2:cd:5c:c8:6a:95:f8:
- a5:f6:8d:c4:5d:78:08:be:7b:06:d6:49:cf:19:36:50:23:2e:
- 08:e6:9e:05:4d:47:18:d5:16:e9:b1:d6:b6:10:d5:bb:97:bf:
- a2:8e:b4:54
-----BEGIN CERTIFICATE-----
MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
@@ -6372,63 +1763,6 @@ l7+ijrRU
DST Root CA X3
==============
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: O=Digital Signature Trust Co., CN=DST Root CA X3
- Validity
- Not Before: Sep 30 21:12:19 2000 GMT
- Not After : Sep 30 14:01:15 2021 GMT
- Subject: O=Digital Signature Trust Co., CN=DST Root CA X3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:df:af:e9:97:50:08:83:57:b4:cc:62:65:f6:90:
- 82:ec:c7:d3:2c:6b:30:ca:5b:ec:d9:c3:7d:c7:40:
- c1:18:14:8b:e0:e8:33:76:49:2a:e3:3f:21:49:93:
- ac:4e:0e:af:3e:48:cb:65:ee:fc:d3:21:0f:65:d2:
- 2a:d9:32:8f:8c:e5:f7:77:b0:12:7b:b5:95:c0:89:
- a3:a9:ba:ed:73:2e:7a:0c:06:32:83:a2:7e:8a:14:
- 30:cd:11:a0:e1:2a:38:b9:79:0a:31:fd:50:bd:80:
- 65:df:b7:51:63:83:c8:e2:88:61:ea:4b:61:81:ec:
- 52:6b:b9:a2:e2:4b:1a:28:9f:48:a3:9e:0c:da:09:
- 8e:3e:17:2e:1e:dd:20:df:5b:c6:2a:8a:ab:2e:bd:
- 70:ad:c5:0b:1a:25:90:74:72:c5:7b:6a:ab:34:d6:
- 30:89:ff:e5:68:13:7b:54:0b:c8:d6:ae:ec:5a:9c:
- 92:1e:3d:64:b3:8c:c6:df:bf:c9:41:70:ec:16:72:
- d5:26:ec:38:55:39:43:d0:fc:fd:18:5c:40:f1:97:
- eb:d5:9a:9b:8d:1d:ba:da:25:b9:c6:d8:df:c1:15:
- 02:3a:ab:da:6e:f1:3e:2e:f5:5c:08:9c:3c:d6:83:
- 69:e4:10:9b:19:2a:b6:29:57:e3:e5:3d:9b:9f:f0:
- 02:5d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10
- Signature Algorithm: sha1WithRSAEncryption
- a3:1a:2c:9b:17:00:5c:a9:1e:ee:28:66:37:3a:bf:83:c7:3f:
- 4b:c3:09:a0:95:20:5d:e3:d9:59:44:d2:3e:0d:3e:bd:8a:4b:
- a0:74:1f:ce:10:82:9c:74:1a:1d:7e:98:1a:dd:cb:13:4b:b3:
- 20:44:e4:91:e9:cc:fc:7d:a5:db:6a:e5:fe:e6:fd:e0:4e:dd:
- b7:00:3a:b5:70:49:af:f2:e5:eb:02:f1:d1:02:8b:19:cb:94:
- 3a:5e:48:c4:18:1e:58:19:5f:1e:02:5a:f0:0c:f1:b1:ad:a9:
- dc:59:86:8b:6e:e9:91:f5:86:ca:fa:b9:66:33:aa:59:5b:ce:
- e2:a7:16:73:47:cb:2b:cc:99:b0:37:48:cf:e3:56:4b:f5:cf:
- 0f:0c:72:32:87:c6:f0:44:bb:53:72:6d:43:f5:26:48:9a:52:
- 67:b7:58:ab:fe:67:76:71:78:db:0d:a2:56:14:13:39:24:31:
- 85:a2:a8:02:5a:30:47:e1:dd:50:07:bc:02:09:90:00:eb:64:
- 63:60:9b:16:bc:88:c9:12:e6:d2:7d:91:8b:f9:3d:32:8d:65:
- b4:e9:7c:b1:57:76:ea:c5:b6:28:39:bf:15:65:1c:c8:f6:77:
- 96:6a:0a:8d:77:0b:d8:91:0b:04:8e:07:db:29:b6:0a:ee:9d:
- 82:35:35:10
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
@@ -6452,69 +1786,6 @@ Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
DST ACES CA X6
==============
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 0d:5e:99:0a:d6:9d:b7:78:ec:d8:07:56:3b:86:15:d9
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Digital Signature Trust, OU=DST ACES, CN=DST ACES CA X6
- Validity
- Not Before: Nov 20 21:19:58 2003 GMT
- Not After : Nov 20 21:19:58 2017 GMT
- Subject: C=US, O=Digital Signature Trust, OU=DST ACES, CN=DST ACES CA X6
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b9:3d:f5:2c:c9:94:dc:75:8a:95:5d:63:e8:84:
- 77:76:66:b9:59:91:5c:46:dd:92:3e:9f:f9:0e:03:
- b4:3d:61:92:bd:23:26:b5:63:ee:92:d2:9e:d6:3c:
- c8:0d:90:5f:64:81:b1:a8:08:0d:4c:d8:f9:d3:05:
- 28:52:b4:01:25:c5:95:1c:0c:7e:3e:10:84:75:cf:
- c1:19:91:63:cf:e8:a8:91:88:b9:43:52:bb:80:b1:
- 55:89:8b:31:fa:d0:b7:76:be:41:3d:30:9a:a4:22:
- 25:17:73:e8:1e:e2:d3:ac:2a:bd:5b:38:21:d5:2a:
- 4b:d7:55:7d:e3:3a:55:bd:d7:6d:6b:02:57:6b:e6:
- 47:7c:08:c8:82:ba:de:a7:87:3d:a1:6d:b8:30:56:
- c2:b3:02:81:5f:2d:f5:e2:9a:30:18:28:b8:66:d3:
- cb:01:96:6f:ea:8a:45:55:d6:e0:9d:ff:67:2b:17:
- 02:a6:4e:1a:6a:11:0b:7e:b7:7b:e7:98:d6:8c:76:
- 6f:c1:3b:db:50:93:7e:e5:d0:8e:1f:37:b8:bd:ba:
- c6:9f:6c:e9:7c:33:f2:32:3c:26:47:fa:27:24:02:
- c9:7e:1d:5b:88:42:13:6a:35:7c:7d:35:e9:2e:66:
- 91:72:93:d5:32:26:c4:74:f5:53:a3:b3:5d:9a:f6:
- 09:cb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Subject Alternative Name:
- email:pki-ops at trustdst.com
- X509v3 Certificate Policies:
- Policy: 2.16.840.1.101.3.2.1.1.1
- CPS: http://www.trustdst.com/certificates/policy/ACES-index.html
-
- X509v3 Subject Key Identifier:
- 09:72:06:4E:18:43:0F:E5:D6:CC:C3:6A:8B:31:7B:78:8F:A8:83:B8
- Signature Algorithm: sha1WithRSAEncryption
- a3:d8:8e:d6:b2:db:ce:05:e7:32:cd:01:d3:04:03:e5:76:e4:
- 56:2b:9c:99:90:e8:08:30:6c:df:7d:3d:ee:e5:bf:b5:24:40:
- 84:49:e1:d1:28:ae:c4:c2:3a:53:30:88:f1:f5:77:6e:51:ca:
- fa:ff:99:af:24:5f:1b:a0:fd:f2:ac:84:ca:df:a9:f0:5f:04:
- 2e:ad:16:bf:21:97:10:81:3d:e3:ff:87:8d:32:dc:94:e5:47:
- 8a:5e:6a:13:c9:94:95:3d:d2:ee:c8:34:95:d0:80:d4:ad:32:
- 08:80:54:3c:e0:bd:52:53:d7:52:7c:b2:69:3f:7f:7a:cf:6a:
- 74:ca:fa:04:2a:9c:4c:5a:06:a5:e9:20:ad:45:66:0f:69:f1:
- dd:bf:e9:e3:32:8b:fa:e0:c1:86:4d:72:3c:2e:d8:93:78:0a:
- 2a:f8:d8:d2:27:3d:19:89:5f:5a:7b:8a:3b:cc:0c:da:51:ae:
- c7:0b:f7:2b:b0:37:05:ec:bc:57:23:e2:38:d2:9b:68:f3:56:
- 12:88:4f:42:7c:b8:31:c4:b5:db:e4:c8:21:34:e9:48:11:35:
- ee:fa:c7:92:57:c5:9f:34:e4:c7:f6:f7:0e:0b:4c:9c:68:78:
- 7b:71:31:c7:eb:1e:e0:67:41:f3:b7:a0:a7:cd:e5:7a:33:36:
- 6a:fa:9a:2b
-----BEGIN CERTIFICATE-----
MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
@@ -6542,58 +1813,6 @@ rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
TURKTRUST Certificate Services Provider Root 1
==============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=ANKARA, O=(c) 2005 T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E.
- Validity
- Not Before: May 13 10:27:17 2005 GMT
- Not After : Mar 22 10:27:17 2015 GMT
- Subject: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=ANKARA, O=(c) 2005 T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E.
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ca:52:05:d6:63:03:d8:1c:5f:dd:d2:7b:5d:f2:
- 0c:60:61:5b:6b:3b:74:2b:78:0d:7d:45:bd:22:74:
- e8:8c:03:c1:c6:11:2a:3d:95:bc:a9:94:b0:bb:91:
- 97:c8:69:7c:84:c5:b4:91:6c:6c:13:6a:a4:55:ad:
- a4:85:e8:95:7e:b3:00:af:00:c2:05:18:f5:70:9d:
- 36:8b:ae:cb:e4:1b:81:7f:93:88:fb:6a:55:bb:7d:
- 85:92:ce:ba:58:9f:db:32:c5:bd:5d:ef:22:4a:2f:
- 41:07:7e:49:61:b3:86:ec:4e:a6:41:6e:84:bc:03:
- ec:f5:3b:1c:c8:1f:c2:ee:a8:ee:ea:12:4a:8d:14:
- cf:f3:0a:e0:50:39:f9:08:35:f8:11:59:ad:e7:22:
- ea:4b:ca:14:06:de:42:ba:b2:99:f3:2d:54:88:10:
- 06:ea:e1:1a:3e:3d:67:1f:fb:ce:fb:7c:82:e8:11:
- 5d:4a:c1:b9:14:ea:54:d9:66:9b:7c:89:7d:04:9a:
- 62:c9:e9:52:3c:9e:9c:ef:d2:f5:26:e4:e6:e5:18:
- 7c:8b:6e:df:6c:cc:78:5b:4f:72:b2:cb:5c:3f:8c:
- 05:8d:d1:4c:8c:ad:92:c7:e1:78:7f:65:6c:49:06:
- 50:2c:9e:32:c2:d7:4a:c6:75:8a:59:4e:75:6f:47:
- 5e:c1
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 15:f5:55:ff:37:96:80:59:21:a4:fc:a1:15:4c:20:f6:d4:5f:
- da:03:24:fc:cf:90:1a:f4:21:0a:9a:ee:3a:b1:6a:ef:ef:f8:
- 60:d1:4c:36:66:45:1d:f3:66:02:74:04:7b:92:30:a8:de:0a:
- 76:0f:ef:95:6e:bd:c9:37:e6:1a:0d:ac:89:48:5b:cc:83:36:
- c2:f5:46:5c:59:82:56:b4:d5:fe:23:b4:d8:54:1c:44:ab:c4:
- a7:e5:14:ce:3c:41:61:7c:43:e6:cd:c4:81:09:8b:24:fb:54:
- 25:d6:16:a8:96:0c:67:07:6f:b3:50:47:e3:1c:24:28:dd:2a:
- 98:a4:61:fe:db:ea:12:37:bc:01:1a:34:85:bd:6e:4f:e7:91:
- 72:07:44:85:1e:58:ca:54:44:dd:f7:ac:b9:cb:89:21:72:db:
- 8f:c0:69:29:97:2a:a3:ae:18:23:97:1c:41:2a:8b:7c:2a:c1:
- 7c:90:e8:a9:28:c0:d3:91:c6:ad:28:87:40:68:b5:ff:ec:a7:
- d2:d3:38:18:9c:d3:7d:69:5d:f0:c6:a5:1e:24:1b:a3:47:fc:
- 69:07:68:e7:e4:9a:b4:ed:0f:a1:87:87:02:ce:87:d2:48:4e:
- e1:bc:ff:cb:f1:72:92:44:64:03:25:ea:de:5b:6e:9f:c9:f2:
- 4e:ac:dd:c7
-----BEGIN CERTIFICATE-----
MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
@@ -6621,62 +1840,6 @@ RGQDJereW26fyfJOrN3H
TURKTRUST Certificate Services Provider Root 2
==============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=Ankara, O=T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E. (c) Kas\xC4\xB1m 2005
- Validity
- Not Before: Nov 7 10:07:57 2005 GMT
- Not After : Sep 16 10:07:57 2015 GMT
- Subject: CN=T\xC3\x9CRKTRUST Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, C=TR, L=Ankara, O=T\xC3\x9CRKTRUST Bilgi \xC4\xB0leti\xC5\x9Fim ve Bili\xC5\x9Fim G\xC3\xBCvenli\xC4\x9Fi Hizmetleri A.\xC5\x9E. (c) Kas\xC4\xB1m 2005
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a9:36:7e:c3:91:43:4c:c3:19:98:08:c8:c7:58:
- 7b:4f:16:8c:a5:ce:49:01:1f:73:0e:ac:75:13:a6:
- fa:9e:2c:20:de:d8:90:0e:0a:d1:69:d2:27:fb:aa:
- 77:9f:27:52:25:e2:cb:5d:d8:d8:83:50:17:7d:8a:
- b5:82:3f:04:8e:b4:d5:f0:49:a7:64:b7:1e:2e:5f:
- 20:9c:50:75:4f:af:e1:b5:41:14:f4:98:92:88:c7:
- e5:e5:64:47:61:47:79:fd:c0:51:f1:c1:99:e7:dc:
- ce:6a:fb:af:b5:01:30:dc:46:1c:ef:8a:ec:95:ef:
- dc:ff:af:10:1c:eb:9d:d8:b0:aa:6a:85:18:0d:17:
- c9:3e:bf:f1:9b:d0:09:89:42:fd:a0:42:b4:9d:89:
- 51:55:29:cf:1b:70:bc:84:54:ad:c1:13:1f:98:f4:
- 2e:76:60:8b:5d:3f:9a:ad:ca:0c:bf:a7:56:5b:8f:
- 77:b8:d5:9e:79:49:92:3f:e0:f1:97:24:7a:6c:9b:
- 17:0f:6d:ef:53:98:91:2b:e4:0f:be:59:79:07:78:
- bb:97:95:f4:9f:69:d4:58:87:0a:a9:e3:cc:b6:58:
- 19:9f:26:21:b1:c4:59:8d:b2:41:75:c0:ad:69:ce:
- 9c:00:08:f2:36:ff:3e:f0:a1:0f:1a:ac:14:fd:a6:
- 60:0f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- D9:37:B3:4E:05:FD:D9:CF:9F:12:16:AE:B6:89:2F:EB:25:3A:88:1C
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 72:60:96:b7:c9:dc:d8:29:5e:23:85:5f:b2:b3:2d:76:fb:88:
- d7:17:fe:7b:6d:45:b8:f6:85:6c:9f:22:fc:2a:10:22:ec:aa:
- b9:30:f6:ab:58:d6:39:10:31:99:29:00:bd:89:66:41:fb:74:
- de:91:c1:18:0b:9f:b5:61:cb:9d:3a:be:f5:a8:94:a3:22:55:
- 6e:17:49:ff:d2:29:f1:38:26:5d:ef:a5:aa:3a:f9:71:7b:e6:
- da:58:1d:d3:74:c2:01:fa:3e:69:58:5f:ad:cb:68:be:14:2e:
- 9b:6c:c0:b6:dc:a0:26:fa:77:1a:e2:24:da:1a:37:e0:67:ad:
- d1:73:83:0d:a5:1a:1d:6e:12:92:7e:84:62:00:17:bd:bc:25:
- 18:57:f2:d7:a9:6f:59:88:bc:34:b7:2e:85:78:9d:96:dc:14:
- c3:2c:8a:52:9b:96:8c:52:66:3d:86:16:8b:47:b8:51:09:8c:
- ea:7d:cd:88:72:b3:60:33:b1:f0:0a:44:ef:0f:f5:09:37:88:
- 24:0e:2c:6b:20:3a:a2:fa:11:f2:40:35:9c:44:68:63:3b:ac:
- 33:6f:63:bc:2c:bb:f2:d2:cb:76:7d:7d:88:d8:1d:c8:05:1d:
- 6e:bc:94:a9:66:8c:77:71:c7:fa:91:fa:2f:51:9e:e9:39:52:
- b6:e7:04:42
-----BEGIN CERTIFICATE-----
MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
@@ -6703,234 +1866,8 @@ uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
-----END CERTIFICATE-----
-SwissSign Platinum CA - G2
-==========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 4e:b2:00:67:0c:03:5d:4f
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=CH, O=SwissSign AG, CN=SwissSign Platinum CA - G2
- Validity
- Not Before: Oct 25 08:36:00 2006 GMT
- Not After : Oct 25 08:36:00 2036 GMT
- Subject: C=CH, O=SwissSign AG, CN=SwissSign Platinum CA - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:ca:df:a2:02:e2:da:f8:fc:07:16:b1:de:60:aa:
- de:96:5c:64:1f:c7:2f:7e:cf:67:fa:44:42:d6:76:
- 63:95:ae:eb:af:72:20:8a:45:47:86:62:78:86:d6:
- 20:39:26:f4:ae:a3:fd:23:e7:a5:9c:b5:22:21:19:
- b7:37:93:22:c0:50:9c:82:7b:d4:d5:04:44:5c:cb:
- b4:c2:9f:92:be:24:d8:7b:67:22:e2:69:5f:e5:05:
- 78:d4:87:d9:71:70:33:25:53:b4:87:3b:29:90:28:
- 36:9a:55:44:30:68:a4:83:97:7f:0d:1e:9c:76:ff:
- 15:9d:60:97:00:8d:8a:85:03:ec:80:be:ea:2c:6e:
- 10:51:92:cc:7e:d5:a3:33:d8:d6:49:de:58:2a:af:
- f6:16:eb:4b:7b:90:32:97:b9:ba:9d:58:f1:f8:57:
- 49:04:1e:a2:5d:06:70:dd:71:db:f9:dd:8b:9a:1b:
- 8c:cf:3d:a3:4d:ce:cb:7c:f6:bb:9c:a0:fa:09:ce:
- 23:62:b2:e9:0d:1f:e2:72:28:8f:9f:ac:68:20:7d:
- 6f:3b:a8:85:31:09:7f:0b:c7:e8:65:e9:e3:78:0e:
- 09:67:30:8b:34:82:fb:5d:e0:cc:9d:81:6d:62:ee:
- 08:1e:04:2c:4e:9b:ec:fe:a9:4f:5f:fd:69:78:ef:
- 09:1f:a1:b4:bf:fa:f3:ef:90:1e:4c:05:8b:1e:ea:
- 7a:91:7a:c3:d7:e5:fb:30:bc:6c:1b:10:58:98:f7:
- 1a:5f:d0:29:32:03:13:46:4d:61:6a:85:4c:52:74:
- 2f:06:1f:7b:11:e2:84:97:c6:99:f3:6d:7f:d7:67:
- 83:7e:13:68:d8:71:28:5a:d8:ce:dd:e8:10:14:9a:
- fe:6d:23:87:6e:8e:5a:70:3c:d5:8d:09:00:a7:aa:
- bc:b0:31:37:6d:c8:84:14:1e:5b:bd:45:63:20:6b:
- 4b:74:8c:bd:db:3a:0e:c1:cf:5a:16:8f:a5:98:f2:
- 76:89:b2:13:12:3b:0b:77:77:ac:bb:e5:3c:29:4a:
- 92:72:ca:61:1a:2b:5e:4c:e2:83:74:77:fa:35:48:
- 7a:85:4d:8d:9a:53:c4:df:78:ca:97:91:48:2b:45:
- 2b:01:f7:1c:1a:a2:ed:18:ba:0a:bd:83:fa:6f:bc:
- 8d:57:93:3b:d4:d4:a6:ce:1e:f1:a0:b1:ce:ab:fd:
- 2b:28:9a:4f:1b:d7:c3:72:db:a4:c4:bf:5d:4c:f5:
- dd:7b:96:69:ee:68:80:e6:e7:98:ba:36:b7:fe:6e:
- ed:2b:bd:20:f8:65:19:da:55:09:7e:25:dc:fe:61:
- 62:72:f9:7e:18:02:ef:63:b4:d0:fb:af:e5:3b:63:
- 8c:67:8f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 50:AF:CC:07:87:15:47:6F:38:C5:B4:65:D1:DE:95:AA:E9:DF:9C:CC
- X509v3 Authority Key Identifier:
- keyid:50:AF:CC:07:87:15:47:6F:38:C5:B4:65:D1:DE:95:AA:E9:DF:9C:CC
-
- X509v3 Certificate Policies:
- Policy: 2.16.756.1.89.1.1.1.1
- CPS: http://repository.swisssign.com/
-
- Signature Algorithm: sha1WithRSAEncryption
- 08:85:a6:f5:16:0c:fc:44:1a:c1:63:e0:f9:55:46:08:fc:70:
- 1c:42:28:96:8e:b7:c5:c1:41:75:4e:09:71:79:e5:6d:96:ca:
- 4b:a5:88:60:d0:30:74:b8:ca:08:dc:b4:30:9e:40:07:16:6b:
- 65:95:77:01:ae:a4:b7:35:0b:81:da:71:15:a9:74:17:38:7b:
- 58:ca:f9:2f:fb:c0:65:76:8d:5b:01:b9:7d:de:82:3d:64:b8:
- be:14:74:a3:0a:54:d3:2c:95:18:17:35:f5:51:6b:3f:8f:a2:
- 96:61:39:78:6b:4b:e5:a6:a0:f8:53:df:51:10:93:62:e7:80:
- 2f:e2:d1:e0:bc:8e:36:46:77:33:ec:b8:fb:8e:9a:2c:89:4d:
- 31:11:0f:26:9e:04:bb:b7:04:8d:0b:f2:b9:fc:5a:9d:3b:16:
- b7:2f:c8:98:ab:fe:8a:50:59:2e:a3:3b:fc:29:5d:8b:c1:4b:
- c9:e2:8a:13:1d:b1:bf:bb:42:1d:52:dd:4e:d8:14:5e:10:c6:
- 31:07:ef:71:27:f7:1b:39:09:dc:82:ea:8b:b3:95:86:5e:fd:
- f5:da:5d:31:a6:e0:31:b6:94:e6:44:49:74:c5:16:e5:f7:1f:
- 03:61:28:c5:c8:cb:12:a0:42:4b:f9:6b:88:08:8d:b4:32:18:
- f3:75:9f:c4:7f:00:4f:05:95:9c:a3:17:02:c3:b3:53:9b:aa:
- 20:39:29:2b:66:fa:9d:af:5e:b3:92:d2:b5:a6:e1:1a:f9:2d:
- 41:69:81:14:b4:b4:b5:ed:89:3d:ce:fb:a9:9d:35:42:44:b1:
- 1c:14:73:81:cf:2a:01:35:9a:31:d5:2d:8f:6d:84:df:80:4d:
- 57:e3:3f:c5:84:75:da:89:c6:30:bb:eb:8f:cb:22:08:a0:ae:
- aa:f1:03:6c:3a:4b:4d:09:a5:0e:72:c6:56:6b:21:42:4e:23:
- 25:14:68:ae:76:0a:7c:0c:07:70:64:f9:9a:2f:f6:05:39:26:
- c6:0c:8f:19:7f:43:5e:6e:f4:5b:15:2f:db:61:5d:e6:67:2f:
- 3f:08:94:f9:60:b4:98:31:da:74:f1:84:93:71:4d:5f:fb:60:
- 58:d1:fb:c4:c1:6d:89:a2:bb:20:1f:9d:71:91:cb:32:9b:13:
- 3d:3e:7d:92:52:35:ac:92:94:a2:d3:18:c2:7c:c7:ea:af:76:
- 05:16:dd:67:27:c2:7e:1c:07:22:21:f3:40:0a:1b:34:07:44:
- 13:c2:84:6a:8e:df:19:5a:bf:7f:eb:1d:e2:1a:38:d1:5c:af:
- 47:92:6b:80:b5:30:a5:c9:8d:d8:ab:31:81:1f:df:c2:66:37:
- d3:93:a9:85:86:79:65:d2
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
-
SwissSign Gold CA - G2
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- bb:40:1c:43:f5:5e:4f:b0
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=CH, O=SwissSign AG, CN=SwissSign Gold CA - G2
- Validity
- Not Before: Oct 25 08:30:35 2006 GMT
- Not After : Oct 25 08:30:35 2036 GMT
- Subject: C=CH, O=SwissSign AG, CN=SwissSign Gold CA - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:af:e4:ee:7e:8b:24:0e:12:6e:a9:50:2d:16:44:
- 3b:92:92:5c:ca:b8:5d:84:92:42:13:2a:bc:65:57:
- 82:40:3e:57:24:cd:50:8b:25:2a:b7:6f:fc:ef:a2:
- d0:c0:1f:02:24:4a:13:96:8f:23:13:e6:28:58:00:
- a3:47:c7:06:a7:84:23:2b:bb:bd:96:2b:7f:55:cc:
- 8b:c1:57:1f:0e:62:65:0f:dd:3d:56:8a:73:da:ae:
- 7e:6d:ba:81:1c:7e:42:8c:20:35:d9:43:4d:84:fa:
- 84:db:52:2c:f3:0e:27:77:0b:6b:bf:11:2f:72:78:
- 9f:2e:d8:3e:e6:18:37:5a:2a:72:f9:da:62:90:92:
- 95:ca:1f:9c:e9:b3:3c:2b:cb:f3:01:13:bf:5a:cf:
- c1:b5:0a:60:bd:dd:b5:99:64:53:b8:a0:96:b3:6f:
- e2:26:77:91:8c:e0:62:10:02:9f:34:0f:a4:d5:92:
- 33:51:de:be:8d:ba:84:7a:60:3c:6a:db:9f:2b:ec:
- de:de:01:3f:6e:4d:e5:50:86:cb:b4:af:ed:44:40:
- c5:ca:5a:8c:da:d2:2b:7c:a8:ee:be:a6:e5:0a:aa:
- 0e:a5:df:05:52:b7:55:c7:22:5d:32:6a:97:97:63:
- 13:db:c9:db:79:36:7b:85:3a:4a:c5:52:89:f9:24:
- e7:9d:77:a9:82:ff:55:1c:a5:71:69:2b:d1:02:24:
- f2:b3:26:d4:6b:da:04:55:e5:c1:0a:c7:6d:30:37:
- 90:2a:e4:9e:14:33:5e:16:17:55:c5:5b:b5:cb:34:
- 89:92:f1:9d:26:8f:a1:07:d4:c6:b2:78:50:db:0c:
- 0c:0b:7c:0b:8c:41:d7:b9:e9:dd:8c:88:f7:a3:4d:
- b2:32:cc:d8:17:da:cd:b7:ce:66:9d:d4:fd:5e:ff:
- bd:97:3e:29:75:e7:7e:a7:62:58:af:25:34:a5:41:
- c7:3d:bc:0d:50:ca:03:03:0f:08:5a:1f:95:73:78:
- 62:bf:af:72:14:69:0e:a5:e5:03:0e:78:8e:26:28:
- 42:f0:07:0b:62:20:10:67:39:46:fa:a9:03:cc:04:
- 38:7a:66:ef:20:83:b5:8c:4a:56:8e:91:00:fc:8e:
- 5c:82:de:88:a0:c3:e2:68:6e:7d:8d:ef:3c:dd:65:
- f4:5d:ac:51:ef:24:80:ae:aa:56:97:6f:f9:ad:7d:
- da:61:3f:98:77:3c:a5:91:b6:1c:8c:26:da:65:a2:
- 09:6d:c1:e2:54:e3:b9:ca:4c:4c:80:8f:77:7b:60:
- 9a:1e:df:b6:f2:48:1e:0e:ba:4e:54:6d:98:e0:e1:
- a2:1a:a2:77:50:cf:c4:63:92:ec:47:19:9d:eb:e6:
- 6b:ce:c1
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 5B:25:7B:96:A4:65:51:7E:B8:39:F3:C0:78:66:5E:E8:3A:E7:F0:EE
- X509v3 Authority Key Identifier:
- keyid:5B:25:7B:96:A4:65:51:7E:B8:39:F3:C0:78:66:5E:E8:3A:E7:F0:EE
-
- X509v3 Certificate Policies:
- Policy: 2.16.756.1.89.1.2.1.1
- CPS: http://repository.swisssign.com/
-
- Signature Algorithm: sha1WithRSAEncryption
- 27:ba:e3:94:7c:f1:ae:c0:de:17:e6:e5:d8:d5:f5:54:b0:83:
- f4:bb:cd:5e:05:7b:4f:9f:75:66:af:3c:e8:56:7e:fc:72:78:
- 38:03:d9:2b:62:1b:00:b9:f8:e9:60:cd:cc:ce:51:8a:c7:50:
- 31:6e:e1:4a:7e:18:2f:69:59:b6:3d:64:81:2b:e3:83:84:e6:
- 22:87:8e:7d:e0:ee:02:99:61:b8:1e:f4:b8:2b:88:12:16:84:
- c2:31:93:38:96:31:a6:b9:3b:53:3f:c3:24:93:56:5b:69:92:
- ec:c5:c1:bb:38:00:e3:ec:17:a9:b8:dc:c7:7c:01:83:9f:32:
- 47:ba:52:22:34:1d:32:7a:09:56:a7:7c:25:36:a9:3d:4b:da:
- c0:82:6f:0a:bb:12:c8:87:4b:27:11:f9:1e:2d:c7:93:3f:9e:
- db:5f:26:6b:52:d9:2e:8a:f1:14:c6:44:8d:15:a9:b7:bf:bd:
- de:a6:1a:ee:ae:2d:fb:48:77:17:fe:bb:ec:af:18:f5:2a:51:
- f0:39:84:97:95:6c:6e:1b:c3:2b:c4:74:60:79:25:b0:0a:27:
- df:df:5e:d2:39:cf:45:7d:42:4b:df:b3:2c:1e:c5:c6:5d:ca:
- 55:3a:a0:9c:69:9a:8f:da:ef:b2:b0:3c:9f:87:6c:12:2b:65:
- 70:15:52:31:1a:24:cf:6f:31:23:50:1f:8c:4f:8f:23:c3:74:
- 41:63:1c:55:a8:14:dd:3e:e0:51:50:cf:f1:1b:30:56:0e:92:
- b0:82:85:d8:83:cb:22:64:bc:2d:b8:25:d5:54:a2:b8:06:ea:
- ad:92:a4:24:a0:c1:86:b5:4a:13:6a:47:cf:2e:0b:56:95:54:
- cb:ce:9a:db:6a:b4:a6:b2:db:41:08:86:27:77:f7:6a:a0:42:
- 6c:0b:38:ce:d7:75:50:32:92:c2:df:2b:30:22:48:d0:d5:41:
- 38:25:5d:a4:e9:5d:9f:c6:94:75:d0:45:fd:30:97:43:8f:90:
- ab:0a:c7:86:73:60:4a:69:2d:de:a5:78:d7:06:da:6a:9e:4b:
- 3e:77:3a:20:13:22:01:d0:bf:68:9e:63:60:6b:35:4d:0b:6d:
- ba:a1:3d:c0:93:e0:7f:23:b3:55:ad:72:25:4e:46:f9:d2:16:
- ef:b0:64:c1:01:9e:e9:ca:a0:6a:98:0e:cf:d8:60:f2:2f:49:
- b8:e4:42:e1:38:35:16:f4:c8:6e:4f:f7:81:56:e8:ba:a3:be:
- 23:af:ae:fd:6f:03:e0:02:3b:30:76:fa:1b:6d:41:cf:01:b1:
- e9:b8:c9:66:f4:db:26:f3:3a:a4:74:f2:49:24:5b:c9:b0:d0:
- 57:c1:fa:3e:7a:e1:97:c9
-----BEGIN CERTIFICATE-----
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
@@ -6967,101 +1904,6 @@ Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
SwissSign Silver CA - G2
========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 4f:1b:d4:2f:54:bb:2f:4b
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=CH, O=SwissSign AG, CN=SwissSign Silver CA - G2
- Validity
- Not Before: Oct 25 08:32:46 2006 GMT
- Not After : Oct 25 08:32:46 2036 GMT
- Subject: C=CH, O=SwissSign AG, CN=SwissSign Silver CA - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c4:f1:87:7f:d3:78:31:f7:38:c9:f8:c3:99:43:
- bc:c7:f7:bc:37:e7:4e:71:ba:4b:8f:a5:73:1d:5c:
- 6e:98:ae:03:57:ae:38:37:43:2f:17:3d:1f:c8:ce:
- 68:10:c1:78:ae:19:03:2b:10:fa:2c:79:83:f6:e8:
- b9:68:b9:55:f2:04:44:a7:39:f9:fc:04:8b:1e:f1:
- a2:4d:27:f9:61:7b:ba:b7:e5:a2:13:b6:eb:61:3e:
- d0:6c:d1:e6:fb:fa:5e:ed:1d:b4:9e:a0:35:5b:a1:
- 92:cb:f0:49:92:fe:85:0a:05:3e:e6:d9:0b:e2:4f:
- bb:dc:95:37:fc:91:e9:32:35:22:d1:1f:3a:4e:27:
- 85:9d:b0:15:94:32:da:61:0d:47:4d:60:42:ae:92:
- 47:e8:83:5a:50:58:e9:8a:8b:b9:5d:a1:dc:dd:99:
- 4a:1f:36:67:bb:48:e4:83:b6:37:eb:48:3a:af:0f:
- 67:8f:17:07:e8:04:ca:ef:6a:31:87:d4:c0:b6:f9:
- 94:71:7b:67:64:b8:b6:91:4a:42:7b:65:2e:30:6a:
- 0c:f5:90:ee:95:e6:f2:cd:82:ec:d9:a1:4a:ec:f6:
- b2:4b:e5:45:85:e6:6d:78:93:04:2e:9c:82:6d:36:
- a9:c4:31:64:1f:86:83:0b:2a:f4:35:0a:78:c9:55:
- cf:41:b0:47:e9:30:9f:99:be:61:a8:06:84:b9:28:
- 7a:5f:38:d9:1b:a9:38:b0:83:7f:73:c1:c3:3b:48:
- 2a:82:0f:21:9b:b8:cc:a8:35:c3:84:1b:83:b3:3e:
- be:a4:95:69:01:3a:89:00:78:04:d9:c9:f4:99:19:
- ab:56:7e:5b:8b:86:39:15:91:a4:10:2c:09:32:80:
- 60:b3:93:c0:2a:b6:18:0b:9d:7e:8d:49:f2:10:4a:
- 7f:f9:d5:46:2f:19:92:a3:99:a7:26:ac:bb:8c:3c:
- e6:0e:bc:47:07:dc:73:51:f1:70:64:2f:08:f9:b4:
- 47:1d:30:6c:44:ea:29:37:85:92:68:66:bc:83:38:
- fe:7b:39:2e:d3:50:f0:1f:fb:5e:60:b6:a9:a6:fa:
- 27:41:f1:9b:18:72:f2:f5:84:74:4a:c9:67:c4:54:
- ae:48:64:df:8c:d1:6e:b0:1d:e1:07:8f:08:1e:99:
- 9c:71:e9:4c:d8:a5:f7:47:12:1f:74:d1:51:9e:86:
- f3:c2:a2:23:40:0b:73:db:4b:a6:e7:73:06:8c:c1:
- a0:e9:c1:59:ac:46:fa:e6:2f:f8:cf:71:9c:46:6d:
- b9:c4:15:8d:38:79:03:45:48:ef:c4:5d:d7:08:ee:
- 87:39:22:86:b2:0d:0f:58:43:f7:71:a9:48:2e:fd:
- ea:d6:1f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 17:A0:CD:C1:E4:41:B6:3A:5B:3B:CB:45:9D:BD:1C:C2:98:FA:86:58
- X509v3 Authority Key Identifier:
- keyid:17:A0:CD:C1:E4:41:B6:3A:5B:3B:CB:45:9D:BD:1C:C2:98:FA:86:58
-
- X509v3 Certificate Policies:
- Policy: 2.16.756.1.89.1.3.1.1
- CPS: http://repository.swisssign.com/
-
- Signature Algorithm: sha1WithRSAEncryption
- 73:c6:81:e0:27:d2:2d:0f:e0:95:30:e2:9a:41:7f:50:2c:5f:
- 5f:62:61:a9:86:6a:69:18:0c:74:49:d6:5d:84:ea:41:52:18:
- 6f:58:ad:50:56:20:6a:c6:bd:28:69:58:91:dc:91:11:35:a9:
- 3a:1d:bc:1a:a5:60:9e:d8:1f:7f:45:91:69:d9:7e:bb:78:72:
- c1:06:0f:2a:ce:8f:85:70:61:ac:a0:cd:0b:b8:39:29:56:84:
- 32:4e:86:bb:3d:c4:2a:d9:d7:1f:72:ee:fe:51:a1:22:41:b1:
- 71:02:63:1a:82:b0:62:ab:5e:57:12:1f:df:cb:dd:75:a0:c0:
- 5d:79:90:8c:1b:e0:50:e6:de:31:fe:98:7b:70:5f:a5:90:d8:
- ad:f8:02:b6:6f:d3:60:dd:40:4b:22:c5:3d:ad:3a:7a:9f:1a:
- 1a:47:91:79:33:ba:82:dc:32:69:03:96:6e:1f:4b:f0:71:fe:
- e3:67:72:a0:b1:bf:5c:8b:e4:fa:99:22:c7:84:b9:1b:8d:23:
- 97:3f:ed:25:e0:cf:65:bb:f5:61:04:ef:dd:1e:b2:5a:41:22:
- 5a:a1:9f:5d:2c:e8:5b:c9:6d:a9:0c:0c:78:aa:60:c6:56:8f:
- 01:5a:0c:68:bc:69:19:79:c4:1f:7e:97:05:bf:c5:e9:24:51:
- 5e:d4:d5:4b:53:ed:d9:23:5a:36:03:65:a3:c1:03:ad:41:30:
- f3:46:1b:85:90:af:65:b5:d5:b1:e4:16:5b:78:75:1d:97:7a:
- 6d:59:a9:2a:8f:7b:de:c3:87:89:10:99:49:73:78:c8:3d:bd:
- 51:35:74:2a:d5:f1:7e:69:1b:2a:bb:3b:bd:25:b8:9a:5a:3d:
- 72:61:90:66:87:ee:0c:d6:4d:d4:11:74:0b:6a:fe:0b:03:fc:
- a3:55:57:89:fe:4a:cb:ae:5b:17:05:c8:f2:8d:23:31:53:38:
- d2:2d:6a:3f:82:b9:8d:08:6a:f7:5e:41:74:6e:c3:11:7e:07:
- ac:29:60:91:3f:38:ca:57:10:0d:bd:30:2f:c7:a5:e6:41:a0:
- da:ae:05:87:9a:a0:a4:65:6c:4c:09:0c:89:ba:b8:d3:b9:c0:
- 93:8a:30:fa:8d:e5:9a:6b:15:01:4e:67:aa:da:62:56:3e:84:
- 08:66:d2:c4:36:7d:a7:3e:10:fc:88:e0:d4:80:e5:00:bd:aa:
- f3:4e:06:a3:7a:6a:f9:62:72:e3:09:4f:eb:9b:0e:01:23:f1:
- 9f:bb:7c:dc:dc:6c:11:97:25:b2:f2:b4:63:14:d2:06:2a:67:
- 8c:83:f5:ce:ea:07:d8:9a:6a:1e:ec:e4:0a:bb:2a:4c:eb:09:
- 60:39:ce:ca:62:d8:2e:6e
-----BEGIN CERTIFICATE-----
MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
@@ -7098,63 +1940,6 @@ tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
GeoTrust Primary Certification Authority
========================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
- Validity
- Not Before: Nov 27 00:00:00 2006 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:be:b8:15:7b:ff:d4:7c:7d:67:ad:83:64:7b:c8:
- 42:53:2d:df:f6:84:08:20:61:d6:01:59:6a:9c:44:
- 11:af:ef:76:fd:95:7e:ce:61:30:bb:7a:83:5f:02:
- bd:01:66:ca:ee:15:8d:6f:a1:30:9c:bd:a1:85:9e:
- 94:3a:f3:56:88:00:31:cf:d8:ee:6a:96:02:d9:ed:
- 03:8c:fb:75:6d:e7:ea:b8:55:16:05:16:9a:f4:e0:
- 5e:b1:88:c0:64:85:5c:15:4d:88:c7:b7:ba:e0:75:
- e9:ad:05:3d:9d:c7:89:48:e0:bb:28:c8:03:e1:30:
- 93:64:5e:52:c0:59:70:22:35:57:88:8a:f1:95:0a:
- 83:d7:bc:31:73:01:34:ed:ef:46:71:e0:6b:02:a8:
- 35:72:6b:97:9b:66:e0:cb:1c:79:5f:d8:1a:04:68:
- 1e:47:02:e6:9d:60:e2:36:97:01:df:ce:35:92:df:
- be:67:c7:6d:77:59:3b:8f:9d:d6:90:15:94:bc:42:
- 34:10:c1:39:f9:b1:27:3e:7e:d6:8a:75:c5:b2:af:
- 96:d3:a2:de:9b:e4:98:be:7d:e1:e9:81:ad:b6:6f:
- fc:d7:0e:da:e0:34:b0:0d:1a:77:e7:e3:08:98:ef:
- 58:fa:9c:84:b7:36:af:c2:df:ac:d2:f4:10:06:70:
- 71:35
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 2C:D5:50:41:97:15:8B:F0:8F:36:61:5B:4A:FB:6B:D9:99:C9:33:92
- Signature Algorithm: sha1WithRSAEncryption
- 5a:70:7f:2c:dd:b7:34:4f:f5:86:51:a9:26:be:4b:b8:aa:f1:
- 71:0d:dc:61:c7:a0:ea:34:1e:7a:77:0f:04:35:e8:27:8f:6c:
- 90:bf:91:16:24:46:3e:4a:4e:ce:2b:16:d5:0b:52:1d:fc:1f:
- 67:a2:02:45:31:4f:ce:f3:fa:03:a7:79:9d:53:6a:d9:da:63:
- 3a:f8:80:d7:d3:99:e1:a5:e1:be:d4:55:71:98:35:3a:be:93:
- ea:ae:ad:42:b2:90:6f:e0:fc:21:4d:35:63:33:89:49:d6:9b:
- 4e:ca:c7:e7:4e:09:00:f7:da:c7:ef:99:62:99:77:b6:95:22:
- 5e:8a:a0:ab:f4:b8:78:98:ca:38:19:99:c9:72:9e:78:cd:4b:
- ac:af:19:a0:73:12:2d:fc:c2:41:ba:81:91:da:16:5a:31:b7:
- f9:b4:71:80:12:48:99:72:73:5a:59:53:c1:63:52:33:ed:a7:
- c9:d2:39:02:70:fa:e0:b1:42:66:29:aa:9b:51:ed:30:54:22:
- 14:5f:d9:ab:1d:c1:e4:94:f0:f8:f5:2b:f7:ea:ca:78:46:d6:
- b8:91:fd:a6:0d:2b:1a:14:01:3e:80:f0:42:a0:95:07:5e:6d:
- cd:cc:4b:a4:45:8d:ab:12:e8:b3:de:5a:e5:a0:7c:e8:0f:22:
- 1d:5a:e9:59
-----BEGIN CERTIFICATE-----
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
@@ -7179,63 +1964,6 @@ AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
thawte Primary Root CA
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
- Validity
- Not Before: Nov 17 00:00:00 2006 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ac:a0:f0:fb:80:59:d4:9c:c7:a4:cf:9d:a1:59:
- 73:09:10:45:0c:0d:2c:6e:68:f1:6c:5b:48:68:49:
- 59:37:fc:0b:33:19:c2:77:7f:cc:10:2d:95:34:1c:
- e6:eb:4d:09:a7:1c:d2:b8:c9:97:36:02:b7:89:d4:
- 24:5f:06:c0:cc:44:94:94:8d:02:62:6f:eb:5a:dd:
- 11:8d:28:9a:5c:84:90:10:7a:0d:bd:74:66:2f:6a:
- 38:a0:e2:d5:54:44:eb:1d:07:9f:07:ba:6f:ee:e9:
- fd:4e:0b:29:f5:3e:84:a0:01:f1:9c:ab:f8:1c:7e:
- 89:a4:e8:a1:d8:71:65:0d:a3:51:7b:ee:bc:d2:22:
- 60:0d:b9:5b:9d:df:ba:fc:51:5b:0b:af:98:b2:e9:
- 2e:e9:04:e8:62:87:de:2b:c8:d7:4e:c1:4c:64:1e:
- dd:cf:87:58:ba:4a:4f:ca:68:07:1d:1c:9d:4a:c6:
- d5:2f:91:cc:7c:71:72:1c:c5:c0:67:eb:32:fd:c9:
- 92:5c:94:da:85:c0:9b:bf:53:7d:2b:09:f4:8c:9d:
- 91:1f:97:6a:52:cb:de:09:36:a4:77:d8:7b:87:50:
- 44:d5:3e:6e:29:69:fb:39:49:26:1e:09:a5:80:7b:
- 40:2d:eb:e8:27:85:c9:fe:61:fd:7e:e6:7c:97:1d:
- d5:9d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50
- Signature Algorithm: sha1WithRSAEncryption
- 79:11:c0:4b:b3:91:b6:fc:f0:e9:67:d4:0d:6e:45:be:55:e8:
- 93:d2:ce:03:3f:ed:da:25:b0:1d:57:cb:1e:3a:76:a0:4c:ec:
- 50:76:e8:64:72:0c:a4:a9:f1:b8:8b:d6:d6:87:84:bb:32:e5:
- 41:11:c0:77:d9:b3:60:9d:eb:1b:d5:d1:6e:44:44:a9:a6:01:
- ec:55:62:1d:77:b8:5c:8e:48:49:7c:9c:3b:57:11:ac:ad:73:
- 37:8e:2f:78:5c:90:68:47:d9:60:60:e6:fc:07:3d:22:20:17:
- c4:f7:16:e9:c4:d8:72:f9:c8:73:7c:df:16:2f:15:a9:3e:fd:
- 6a:27:b6:a1:eb:5a:ba:98:1f:d5:e3:4d:64:0a:9d:13:c8:61:
- ba:f5:39:1c:87:ba:b8:bd:7b:22:7f:f6:fe:ac:40:79:e5:ac:
- 10:6f:3d:8f:1b:79:76:8b:c4:37:b3:21:18:84:e5:36:00:eb:
- 63:20:99:b9:e9:fe:33:04:bb:41:c8:c1:02:f9:44:63:20:9e:
- 81:ce:42:d3:d6:3f:2c:76:d3:63:9c:59:dd:8f:a6:e1:0e:a0:
- 2e:41:f7:2e:95:47:cf:bc:fd:33:f3:f6:0b:61:7e:7e:91:2b:
- 81:47:c2:27:30:ee:a7:10:5d:37:8f:5c:39:2b:e4:04:f0:7b:
- 8d:56:8c:68
-----BEGIN CERTIFICATE-----
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
@@ -7264,65 +1992,6 @@ jVaMaA==
VeriSign Class 3 Public Primary Certification Authority - G5
============================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 18:da:d1:9e:26:7d:e8:bb:4a:21:58:cd:cc:6b:3b:4a
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
- Validity
- Not Before: Nov 8 00:00:00 2006 GMT
- Not After : Jul 16 23:59:59 2036 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:af:24:08:08:29:7a:35:9e:60:0c:aa:e7:4b:3b:
- 4e:dc:7c:bc:3c:45:1c:bb:2b:e0:fe:29:02:f9:57:
- 08:a3:64:85:15:27:f5:f1:ad:c8:31:89:5d:22:e8:
- 2a:aa:a6:42:b3:8f:f8:b9:55:b7:b1:b7:4b:b3:fe:
- 8f:7e:07:57:ec:ef:43:db:66:62:15:61:cf:60:0d:
- a4:d8:de:f8:e0:c3:62:08:3d:54:13:eb:49:ca:59:
- 54:85:26:e5:2b:8f:1b:9f:eb:f5:a1:91:c2:33:49:
- d8:43:63:6a:52:4b:d2:8f:e8:70:51:4d:d1:89:69:
- 7b:c7:70:f6:b3:dc:12:74:db:7b:5d:4b:56:d3:96:
- bf:15:77:a1:b0:f4:a2:25:f2:af:1c:92:67:18:e5:
- f4:06:04:ef:90:b9:e4:00:e4:dd:3a:b5:19:ff:02:
- ba:f4:3c:ee:e0:8b:eb:37:8b:ec:f4:d7:ac:f2:f6:
- f0:3d:af:dd:75:91:33:19:1d:1c:40:cb:74:24:19:
- 21:93:d9:14:fe:ac:2a:52:c7:8f:d5:04:49:e4:8d:
- 63:47:88:3c:69:83:cb:fe:47:bd:2b:7e:4f:c5:95:
- ae:0e:9d:d4:d1:43:c0:67:73:e3:14:08:7e:e5:3f:
- 9f:73:b8:33:0a:cf:5d:3f:34:87:96:8a:ee:53:e8:
- 25:15
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- 1.3.6.1.5.5.7.1.12:
- 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
- X509v3 Subject Key Identifier:
- 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
- Signature Algorithm: sha1WithRSAEncryption
- 93:24:4a:30:5f:62:cf:d8:1a:98:2f:3d:ea:dc:99:2d:bd:77:
- f6:a5:79:22:38:ec:c4:a7:a0:78:12:ad:62:0e:45:70:64:c5:
- e7:97:66:2d:98:09:7e:5f:af:d6:cc:28:65:f2:01:aa:08:1a:
- 47:de:f9:f9:7c:92:5a:08:69:20:0d:d9:3e:6d:6e:3c:0d:6e:
- d8:e6:06:91:40:18:b9:f8:c1:ed:df:db:41:aa:e0:96:20:c9:
- cd:64:15:38:81:c9:94:ee:a2:84:29:0b:13:6f:8e:db:0c:dd:
- 25:02:db:a4:8b:19:44:d2:41:7a:05:69:4a:58:4f:60:ca:7e:
- 82:6a:0b:02:aa:25:17:39:b5:db:7f:e7:84:65:2a:95:8a:bd:
- 86:de:5e:81:16:83:2d:10:cc:de:fd:a8:82:2a:6d:28:1f:0d:
- 0b:c4:e5:e7:1a:26:19:e1:f4:11:6f:10:b5:95:fc:e7:42:05:
- 32:db:ce:9d:51:5e:28:b6:9e:85:d3:5b:ef:a5:7d:45:40:72:
- 8e:b7:0e:6b:0e:06:fb:33:35:48:71:b8:9d:27:8b:c4:65:5f:
- 0d:86:76:9c:44:7a:f6:95:5c:f6:5d:32:08:33:a4:54:b6:18:
- 3f:68:5c:f2:42:4a:85:38:54:83:5f:d1:e8:2c:f2:ac:11:d6:
- a8:ed:63:6a
-----BEGIN CERTIFICATE-----
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
@@ -7354,70 +2023,6 @@ hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
SecureTrust CA
==============
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 0c:f0:8e:5c:08:16:a5:ad:42:7f:f0:eb:27:18:59:d0
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=SecureTrust Corporation, CN=SecureTrust CA
- Validity
- Not Before: Nov 7 19:31:18 2006 GMT
- Not After : Dec 31 19:40:55 2029 GMT
- Subject: C=US, O=SecureTrust Corporation, CN=SecureTrust CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ab:a4:81:e5:95:cd:f5:f6:14:8e:c2:4f:ca:d4:
- e2:78:95:58:9c:41:e1:0d:99:40:24:17:39:91:33:
- 66:e9:be:e1:83:af:62:5c:89:d1:fc:24:5b:61:b3:
- e0:11:11:41:1c:1d:6e:f0:b8:bb:f8:de:a7:81:ba:
- a6:48:c6:9f:1d:bd:be:8e:a9:41:3e:b8:94:ed:29:
- 1a:d4:8e:d2:03:1d:03:ef:6d:0d:67:1c:57:d7:06:
- ad:ca:c8:f5:fe:0e:af:66:25:48:04:96:0b:5d:a3:
- ba:16:c3:08:4f:d1:46:f8:14:5c:f2:c8:5e:01:99:
- 6d:fd:88:cc:86:a8:c1:6f:31:42:6c:52:3e:68:cb:
- f3:19:34:df:bb:87:18:56:80:26:c4:d0:dc:c0:6f:
- df:de:a0:c2:91:16:a0:64:11:4b:44:bc:1e:f6:e7:
- fa:63:de:66:ac:76:a4:71:a3:ec:36:94:68:7a:77:
- a4:b1:e7:0e:2f:81:7a:e2:b5:72:86:ef:a2:6b:8b:
- f0:0f:db:d3:59:3f:ba:72:bc:44:24:9c:e3:73:b3:
- f7:af:57:2f:42:26:9d:a9:74:ba:00:52:f2:4b:cd:
- 53:7c:47:0b:36:85:0e:66:a9:08:97:16:34:57:c1:
- 66:f7:80:e3:ed:70:54:c7:93:e0:2e:28:15:59:87:
- ba:bb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- 1.3.6.1.4.1.311.20.2:
- ...C.A
- X509v3 Key Usage:
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 42:32:B6:16:FA:04:FD:FE:5D:4B:7A:C3:FD:F7:4C:40:1D:5A:43:AF
- X509v3 CRL Distribution Points:
- URI:http://crl.securetrust.com/STCA.crl
-
- 1.3.6.1.4.1.311.21.1:
- ...
- Signature Algorithm: sha1WithRSAEncryption
- 30:ed:4f:4a:e1:58:3a:52:72:5b:b5:a6:a3:65:18:a6:bb:51:
- 3b:77:e9:9d:ea:d3:9f:5c:e0:45:65:7b:0d:ca:5b:e2:70:50:
- b2:94:05:14:ae:49:c7:8d:41:07:12:73:94:7e:0c:23:21:fd:
- bc:10:7f:60:10:5a:72:f5:98:0e:ac:ec:b9:7f:dd:7a:6f:5d:
- d3:1c:f4:ff:88:05:69:42:a9:05:71:c8:b7:ac:26:e8:2e:b4:
- 8c:6a:ff:71:dc:b8:b1:df:99:bc:7c:21:54:2b:e4:58:a2:bb:
- 57:29:ae:9e:a9:a3:19:26:0f:99:2e:08:b0:ef:fd:69:cf:99:
- 1a:09:8d:e3:a7:9f:2b:c9:36:34:7b:24:b3:78:4c:95:17:a4:
- 06:26:1e:b6:64:52:36:5f:60:67:d9:9c:c5:05:74:0b:e7:67:
- 23:d2:08:fc:88:e9:ae:8b:7f:e1:30:f4:37:7e:fd:c6:32:da:
- 2d:9e:44:30:30:6c:ee:07:de:d2:34:fc:d2:ff:40:f6:4b:f4:
- 66:46:06:54:a6:f2:32:0a:63:26:30:6b:9b:d1:dc:8b:47:ba:
- e1:b9:d5:62:d0:a2:a0:f4:67:05:78:29:63:1a:6f:04:d6:f8:
- c6:4c:a3:9a:b1:37:b4:8d:e5:28:4b:1d:9e:2c:c2:b8:68:bc:
- ed:02:ee:31
-----BEGIN CERTIFICATE-----
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
@@ -7443,70 +2048,6 @@ CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
Secure Global CA
================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 07:56:22:a4:e8:d4:8a:89:4d:f4:13:c8:f0:f8:ea:a5
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=SecureTrust Corporation, CN=Secure Global CA
- Validity
- Not Before: Nov 7 19:42:28 2006 GMT
- Not After : Dec 31 19:52:06 2029 GMT
- Subject: C=US, O=SecureTrust Corporation, CN=Secure Global CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:af:35:2e:d8:ac:6c:55:69:06:71:e5:13:68:24:
- b3:4f:d8:cc:21:47:f8:f1:60:38:89:89:03:e9:bd:
- ea:5e:46:53:09:dc:5c:f5:5a:e8:f7:45:2a:02:eb:
- 31:61:d7:29:33:4c:ce:c7:7c:0a:37:7e:0f:ba:32:
- 98:e1:1d:97:af:8f:c7:dc:c9:38:96:f3:db:1a:fc:
- 51:ed:68:c6:d0:6e:a4:7c:24:d1:ae:42:c8:96:50:
- 63:2e:e0:fe:75:fe:98:a7:5f:49:2e:95:e3:39:33:
- 64:8e:1e:a4:5f:90:d2:67:3c:b2:d9:fe:41:b9:55:
- a7:09:8e:72:05:1e:8b:dd:44:85:82:42:d0:49:c0:
- 1d:60:f0:d1:17:2c:95:eb:f6:a5:c1:92:a3:c5:c2:
- a7:08:60:0d:60:04:10:96:79:9e:16:34:e6:a9:b6:
- fa:25:45:39:c8:1e:65:f9:93:f5:aa:f1:52:dc:99:
- 98:3d:a5:86:1a:0c:35:33:fa:4b:a5:04:06:15:1c:
- 31:80:ef:aa:18:6b:c2:7b:d7:da:ce:f9:33:20:d5:
- f5:bd:6a:33:2d:81:04:fb:b0:5c:d4:9c:a3:e2:5c:
- 1d:e3:a9:42:75:5e:7b:d4:77:ef:39:54:ba:c9:0a:
- 18:1b:12:99:49:2f:88:4b:fd:50:62:d1:73:e7:8f:
- 7a:43
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- 1.3.6.1.4.1.311.20.2:
- ...C.A
- X509v3 Key Usage:
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- AF:44:04:C2:41:7E:48:83:DB:4E:39:02:EC:EC:84:7A:E6:CE:C9:A4
- X509v3 CRL Distribution Points:
- URI:http://crl.securetrust.com/SGCA.crl
-
- 1.3.6.1.4.1.311.21.1:
- ...
- Signature Algorithm: sha1WithRSAEncryption
- 63:1a:08:40:7d:a4:5e:53:0d:77:d8:7a:ae:1f:0d:0b:51:16:
- 03:ef:18:7c:c8:e3:af:6a:58:93:14:60:91:b2:84:dc:88:4e:
- be:39:8a:3a:f3:e6:82:89:5d:01:37:b3:ab:24:a4:15:0e:92:
- 35:5a:4a:44:5e:4e:57:fa:75:ce:1f:48:ce:66:f4:3c:40:26:
- 92:98:6c:1b:ee:24:46:0c:17:b3:52:a5:db:a5:91:91:cf:37:
- d3:6f:e7:27:08:3a:4e:19:1f:3a:a7:58:5c:17:cf:79:3f:8b:
- e4:a7:d3:26:23:9d:26:0f:58:69:fc:47:7e:b2:d0:8d:8b:93:
- bf:29:4f:43:69:74:76:67:4b:cf:07:8c:e6:02:f7:b5:e1:b4:
- 43:b5:4b:2d:14:9f:f9:dc:26:0d:bf:a6:47:74:06:d8:88:d1:
- 3a:29:30:84:ce:d2:39:80:62:1b:a8:c7:57:49:bc:6a:55:51:
- 67:15:4a:be:35:07:e4:d5:75:98:37:79:30:14:db:29:9d:6c:
- c5:69:cc:47:55:a2:30:f7:cc:5c:7f:c2:c3:98:1c:6b:4e:16:
- 80:eb:7a:78:65:45:a2:00:1a:af:0c:0d:55:64:34:48:b8:92:
- b9:f1:b4:50:29:f2:4f:23:1f:da:6c:ac:1f:44:e1:dd:23:78:
- 51:5b:c7:16
-----BEGIN CERTIFICATE-----
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
@@ -7532,66 +2073,6 @@ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
COMODO Certification Authority
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 4e:81:2d:8a:82:65:e0:0b:02:ee:3e:35:02:46:e5:3d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO Certification Authority
- Validity
- Not Before: Dec 1 00:00:00 2006 GMT
- Not After : Dec 31 23:59:59 2029 GMT
- Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:d0:40:8b:8b:72:e3:91:1b:f7:51:c1:1b:54:04:
- 98:d3:a9:bf:c1:e6:8a:5d:3b:87:fb:bb:88:ce:0d:
- e3:2f:3f:06:96:f0:a2:29:50:99:ae:db:3b:a1:57:
- b0:74:51:71:cd:ed:42:91:4d:41:fe:a9:c8:d8:6a:
- 86:77:44:bb:59:66:97:50:5e:b4:d4:2c:70:44:cf:
- da:37:95:42:69:3c:30:c4:71:b3:52:f0:21:4d:a1:
- d8:ba:39:7c:1c:9e:a3:24:9d:f2:83:16:98:aa:16:
- 7c:43:9b:15:5b:b7:ae:34:91:fe:d4:62:26:18:46:
- 9a:3f:eb:c1:f9:f1:90:57:eb:ac:7a:0d:8b:db:72:
- 30:6a:66:d5:e0:46:a3:70:dc:68:d9:ff:04:48:89:
- 77:de:b5:e9:fb:67:6d:41:e9:bc:39:bd:32:d9:62:
- 02:f1:b1:a8:3d:6e:37:9c:e2:2f:e2:d3:a2:26:8b:
- c6:b8:55:43:88:e1:23:3e:a5:d2:24:39:6a:47:ab:
- 00:d4:a1:b3:a9:25:fe:0d:3f:a7:1d:ba:d3:51:c1:
- 0b:a4:da:ac:38:ef:55:50:24:05:65:46:93:34:4f:
- 2d:8d:ad:c6:d4:21:19:d2:8e:ca:05:61:71:07:73:
- 47:e5:8a:19:12:bd:04:4d:ce:4e:9c:a5:48:ac:bb:
- 26:f7
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 0B:58:E5:8B:C6:4C:15:37:A4:40:A9:30:A9:21:BE:47:36:5A:56:FF
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://crl.comodoca.com/COMODOCertificationAuthority.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- 3e:98:9e:9b:f6:1b:e9:d7:39:b7:78:ae:1d:72:18:49:d3:87:
- e4:43:82:eb:3f:c9:aa:f5:a8:b5:ef:55:7c:21:52:65:f9:d5:
- 0d:e1:6c:f4:3e:8c:93:73:91:2e:02:c4:4e:07:71:6f:c0:8f:
- 38:61:08:a8:1e:81:0a:c0:2f:20:2f:41:8b:91:dc:48:45:bc:
- f1:c6:de:ba:76:6b:33:c8:00:2d:31:46:4c:ed:e7:9d:cf:88:
- 94:ff:33:c0:56:e8:24:86:26:b8:d8:38:38:df:2a:6b:dd:12:
- cc:c7:3f:47:17:4c:a2:c2:06:96:09:d6:db:fe:3f:3c:46:41:
- df:58:e2:56:0f:3c:3b:c1:1c:93:35:d9:38:52:ac:ee:c8:ec:
- 2e:30:4e:94:35:b4:24:1f:4b:78:69:da:f2:02:38:cc:95:52:
- 93:f0:70:25:59:9c:20:67:c4:ee:f9:8b:57:61:f4:92:76:7d:
- 3f:84:8d:55:b7:e8:e5:ac:d5:f1:f5:19:56:a6:5a:fb:90:1c:
- af:93:eb:e5:1c:d4:67:97:5d:04:0e:be:0b:83:a6:17:83:b9:
- 30:12:a0:c5:33:15:05:b9:0d:fb:c7:05:76:e3:d8:4a:8d:fc:
- 34:17:a3:c6:21:28:be:30:45:31:1e:c7:78:be:58:61:38:ac:
- 3b:e2:01:65
-----BEGIN CERTIFICATE-----
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
@@ -7620,66 +2101,6 @@ ZQ==
Network Solutions Certificate Authority
=======================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 57:cb:33:6f:c2:5c:16:e6:47:16:17:e3:90:31:68:e0
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority
- Validity
- Not Before: Dec 1 00:00:00 2006 GMT
- Not After : Dec 31 23:59:59 2029 GMT
- Subject: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e4:bc:7e:92:30:6d:c6:d8:8e:2b:0b:bc:46:ce:
- e0:27:96:de:de:f9:fa:12:d3:3c:33:73:b3:04:2f:
- bc:71:8c:e5:9f:b6:22:60:3e:5f:5d:ce:09:ff:82:
- 0c:1b:9a:51:50:1a:26:89:dd:d5:61:5d:19:dc:12:
- 0f:2d:0a:a2:43:5d:17:d0:34:92:20:ea:73:cf:38:
- 2c:06:26:09:7a:72:f7:fa:50:32:f8:c2:93:d3:69:
- a2:23:ce:41:b1:cc:e4:d5:1f:36:d1:8a:3a:f8:8c:
- 63:e2:14:59:69:ed:0d:d3:7f:6b:e8:b8:03:e5:4f:
- 6a:e5:98:63:69:48:05:be:2e:ff:33:b6:e9:97:59:
- 69:f8:67:19:ae:93:61:96:44:15:d3:72:b0:3f:bc:
- 6a:7d:ec:48:7f:8d:c3:ab:aa:71:2b:53:69:41:53:
- 34:b5:b0:b9:c5:06:0a:c4:b0:45:f5:41:5d:6e:89:
- 45:7b:3d:3b:26:8c:74:c2:e5:d2:d1:7d:b2:11:d4:
- fb:58:32:22:9a:80:c9:dc:fd:0c:e9:7f:5e:03:97:
- ce:3b:00:14:87:27:70:38:a9:8e:6e:b3:27:76:98:
- 51:e0:05:e3:21:ab:1a:d5:85:22:3c:29:b5:9a:16:
- c5:80:a8:f4:bb:6b:30:8f:2f:46:02:a2:b1:0c:22:
- e0:d3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 21:30:C9:FB:00:D7:4E:98:DA:87:AA:2A:D0:A7:2E:B1:40:31:A7:4C
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://crl.netsolssl.com/NetworkSolutionsCertificateAuthority.crl
-
- Signature Algorithm: sha1WithRSAEncryption
- bb:ae:4b:e7:b7:57:eb:7f:aa:2d:b7:73:47:85:6a:c1:e4:a5:
- 1d:e4:e7:3c:e9:f4:59:65:77:b5:7a:5b:5a:8d:25:36:e0:7a:
- 97:2e:38:c0:57:60:83:98:06:83:9f:b9:76:7a:6e:50:e0:ba:
- 88:2c:fc:45:cc:18:b0:99:95:51:0e:ec:1d:b8:88:ff:87:50:
- 1c:82:c2:e3:e0:32:80:bf:a0:0b:47:c8:c3:31:ef:99:67:32:
- 80:4f:17:21:79:0c:69:5c:de:5e:34:ae:02:b5:26:ea:50:df:
- 7f:18:65:2c:c9:f2:63:e1:a9:07:fe:7c:71:1f:6b:33:24:6a:
- 1e:05:f7:05:68:c0:6a:12:cb:2e:5e:61:cb:ae:28:d3:7e:c2:
- b4:66:91:26:5f:3c:2e:24:5f:cb:58:0f:eb:28:ec:af:11:96:
- f3:dc:7b:6f:c0:a7:88:f2:53:77:b3:60:5e:ae:ae:28:da:35:
- 2c:6f:34:45:d3:26:e1:de:ec:5b:4f:27:6b:16:7c:bd:44:04:
- 18:82:b3:89:79:17:10:71:3d:7a:a2:16:4e:f5:01:cd:a4:6c:
- 65:68:a1:49:76:5c:43:c9:d8:bc:36:67:6c:a5:94:b5:d4:cc:
- b9:bd:6a:35:56:21:de:d8:c3:eb:fb:cb:a4:60:4c:b0:55:a0:
- a0:7b:57:b2
-----BEGIN CERTIFICATE-----
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
@@ -7706,70 +2127,6 @@ pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
WellsSecure Public Root Certificate Authority
=============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=Wells Fargo WellsSecure, OU=Wells Fargo Bank NA, CN=WellsSecure Public Root Certificate Authority
- Validity
- Not Before: Dec 13 17:07:54 2007 GMT
- Not After : Dec 14 00:07:54 2022 GMT
- Subject: C=US, O=Wells Fargo WellsSecure, OU=Wells Fargo Bank NA, CN=WellsSecure Public Root Certificate Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ee:6f:b4:bd:79:e2:8f:08:21:9e:38:04:41:25:
- ef:ab:5b:1c:53:92:ac:6d:9e:dd:c2:c4:2e:45:94:
- 03:35:88:67:74:57:e3:df:8c:b8:a7:76:8f:3b:f7:
- a8:c4:db:29:63:0e:91:68:36:8a:97:8e:8a:71:68:
- 09:07:e4:e8:d4:0e:4f:f8:d6:2b:4c:a4:16:f9:ef:
- 43:98:8f:b3:9e:52:df:6d:91:39:8f:38:bd:77:8b:
- 43:63:eb:b7:93:fc:30:4c:1c:01:93:b6:13:fb:f7:
- a1:1f:bf:25:e1:74:37:2c:1e:a4:5e:3c:68:f8:4b:
- bf:0d:b9:1e:2e:36:e8:a9:e4:a7:f8:0f:cb:82:75:
- 7c:35:2d:22:d6:c2:bf:0b:f3:b4:fc:6c:95:61:1e:
- 57:d7:04:81:32:83:52:79:e6:83:63:cf:b7:cb:63:
- 8b:11:e2:bd:5e:eb:f6:8d:ed:95:72:28:b4:ac:12:
- 62:e9:4a:33:e6:83:32:ae:05:75:95:bd:84:95:db:
- 2a:5c:9b:8e:2e:0c:b8:81:2b:41:e6:38:56:9f:49:
- 9b:6c:76:fa:8a:5d:f7:01:79:81:7c:c1:83:40:05:
- fe:71:fd:0c:3f:cc:4e:60:09:0e:65:47:10:2f:01:
- c0:05:3f:8f:f8:b3:41:ef:5a:42:7e:59:ef:d2:97:
- 0c:65
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://crl.pki.wellsfargo.com/wsprca.crl
-
- X509v3 Key Usage: critical
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 26:95:19:10:D9:E8:A1:97:91:FF:DC:19:D9:B5:04:3E:D2:73:0A:6A
- X509v3 Authority Key Identifier:
- keyid:26:95:19:10:D9:E8:A1:97:91:FF:DC:19:D9:B5:04:3E:D2:73:0A:6A
- DirName:/C=US/O=Wells Fargo WellsSecure/OU=Wells Fargo Bank NA/CN=WellsSecure Public Root Certificate Authority
- serial:01
-
- Signature Algorithm: sha1WithRSAEncryption
- b9:15:b1:44:91:cc:23:c8:2b:4d:77:e3:f8:9a:7b:27:0d:cd:
- 72:bb:99:00:ca:7c:66:19:50:c6:d5:98:ed:ab:bf:03:5a:e5:
- 4d:e5:1e:c8:4f:71:97:86:d5:e3:1d:fd:90:c9:3c:75:77:57:
- 7a:7d:f8:de:f4:d4:d5:f7:95:e6:74:6e:1d:3c:ae:7c:9d:db:
- 02:03:05:2c:71:4b:25:3e:07:e3:5e:9a:f5:66:17:29:88:1a:
- 38:9f:cf:aa:41:03:84:97:6b:93:38:7a:ca:30:44:1b:24:44:
- 33:d0:e4:d1:dc:28:38:f4:13:43:35:35:29:63:a8:7c:a2:b5:
- ad:38:a4:ed:ad:fd:c6:9a:1f:ff:97:73:fe:fb:b3:35:a7:93:
- 86:c6:76:91:00:e6:ac:51:16:c4:27:32:5c:db:73:da:a5:93:
- 57:8e:3e:6d:35:26:08:59:d5:e7:44:d7:76:20:63:e7:ac:13:
- 67:c3:6d:b1:70:46:7c:d5:96:11:3d:89:6f:5d:a8:a1:eb:8d:
- 0a:da:c3:1d:33:6c:a3:ea:67:19:9a:99:7f:4b:3d:83:51:2a:
- 1d:ca:2f:86:0c:a2:7e:10:2d:2b:d4:16:95:0b:07:aa:2e:14:
- 92:49:b7:29:6f:d8:6d:31:7d:f5:fc:a1:10:07:87:ce:2f:59:
- dc:3e:58:db
-----BEGIN CERTIFICATE-----
MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
@@ -7801,43 +2158,6 @@ iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
COMODO ECC Certification Authority
==================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 1f:47:af:aa:62:00:70:50:54:4c:01:9e:9b:63:99:2a
- Signature Algorithm: 1.2.840.10045.4.3.3
- Issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Certification Authority
- Validity
- Not Before: Mar 6 00:00:00 2008 GMT
- Not After : Jan 18 23:59:59 2038 GMT
- Subject: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: id-ecPublicKey
- EC Public Key:
- pub:
- 04:03:47:7b:2f:75:c9:82:15:85:fb:75:e4:91:16:
- d4:ab:62:99:f5:3e:52:0b:06:ce:41:00:7f:97:e1:
- 0a:24:3c:1d:01:04:ee:3d:d2:8d:09:97:0c:e0:75:
- e4:fa:fb:77:8a:2a:f5:03:60:4b:36:8b:16:23:16:
- ad:09:71:f4:4a:f4:28:50:b4:fe:88:1c:6e:3f:6c:
- 2f:2f:09:59:5b:a5:5b:0b:33:99:e2:c3:3d:89:f9:
- 6a:2c:ef:b2:d3:06:e9
- ASN1 OID: secp384r1
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 75:71:A7:19:48:19:BC:9D:9D:EA:41:47:DF:94:C4:48:77:99:D3:79
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: 1.2.840.10045.4.3.3
- 30:65:02:31:00:ef:03:5b:7a:ac:b7:78:0a:72:b7:88:df:ff:
- b5:46:14:09:0a:fa:a0:e6:7d:08:c6:1a:87:bd:18:a8:73:bd:
- 26:ca:60:0c:9d:ce:99:9f:cf:5c:0f:30:e1:be:14:31:ea:02:
- 30:14:f4:93:3c:49:a7:33:7a:90:46:47:b3:63:7d:13:9b:4e:
- b7:6f:18:37:80:53:fe:dd:20:e0:35:9a:36:d1:c7:01:b9:e6:
- dc:dd:f3:ff:1d:2c:3a:16:57:d9:92:39:d6
-----BEGIN CERTIFICATE-----
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
@@ -7857,69 +2177,6 @@ GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
IGC/A
=====
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 39:11:45:10:94
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=FR, ST=France, L=Paris, O=PM/SGDN, OU=DCSSI, CN=IGC/A/emailAddress=igca at sgdn.pm.gouv.fr
- Validity
- Not Before: Dec 13 14:29:23 2002 GMT
- Not After : Oct 17 14:29:22 2020 GMT
- Subject: C=FR, ST=France, L=Paris, O=PM/SGDN, OU=DCSSI, CN=IGC/A/emailAddress=igca at sgdn.pm.gouv.fr
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b2:1f:d1:d0:62:c5:33:3b:c0:04:86:88:b3:dc:
- f8:88:f7:fd:df:43:df:7a:8d:9a:49:5c:f6:4e:aa:
- cc:1c:b9:a1:eb:27:89:f2:46:e9:3b:4a:71:d5:1d:
- 8e:2d:cf:e6:ad:ab:63:50:c7:54:0b:6e:12:c9:90:
- 36:c6:d8:2f:da:91:aa:68:c5:72:fe:17:0a:b2:17:
- 7e:79:b5:32:88:70:ca:70:c0:96:4a:8e:e4:55:cd:
- 1d:27:94:bf:ce:72:2a:ec:5c:f9:73:20:fe:bd:f7:
- 2e:89:67:b8:bb:47:73:12:f7:d1:35:69:3a:f2:0a:
- b9:ae:ff:46:42:46:a2:bf:a1:85:1a:f9:bf:e4:ff:
- 49:85:f7:a3:70:86:32:1c:5d:9f:60:f7:a9:ad:a5:
- ff:cf:d1:34:f9:7d:5b:17:c6:dc:d6:0e:28:6b:c2:
- dd:f1:f5:33:68:9d:4e:fc:87:7c:36:12:d6:a3:80:
- e8:43:0d:55:61:94:ea:64:37:47:ea:77:ca:d0:b2:
- 58:05:c3:5d:7e:b1:a8:46:90:31:56:ce:70:2a:96:
- b2:30:b8:77:e6:79:c0:bd:29:3b:fd:94:77:4c:bd:
- 20:cd:41:25:e0:2e:c7:1b:bb:ee:a4:04:41:d2:5d:
- ad:12:6a:8a:9b:47:fb:c9:dd:46:40:e1:9d:3c:33:
- d0:b5
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage:
- Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Certificate Policies:
- Policy: 1.2.250.1.121.1.1.1
-
- X509v3 Subject Key Identifier:
- A3:05:2F:18:60:50:C2:89:0A:DD:2B:21:4F:FF:8E:4E:A8:30:31:36
- X509v3 Authority Key Identifier:
- keyid:A3:05:2F:18:60:50:C2:89:0A:DD:2B:21:4F:FF:8E:4E:A8:30:31:36
-
- Signature Algorithm: sha1WithRSAEncryption
- 05:dc:26:d8:fa:77:15:44:68:fc:2f:66:3a:74:e0:5d:e4:29:
- ff:06:07:13:84:4a:ab:cf:6d:a0:1f:51:94:f8:49:cb:74:36:
- 14:bc:15:dd:db:89:2f:dd:8f:a0:5d:7c:f5:12:eb:9f:9e:38:
- a4:47:cc:b3:96:d9:be:9c:25:ab:03:7e:33:0f:95:81:0d:fd:
- 16:e0:88:be:37:f0:6c:5d:d0:31:9b:32:2b:5d:17:65:93:98:
- 60:bc:6e:8f:b1:a8:3c:1e:d9:1c:f3:a9:26:42:f9:64:1d:c2:
- e7:92:f6:f4:1e:5a:aa:19:52:5d:af:e8:a2:f7:60:a0:f6:8d:
- f0:89:f5:6e:e0:0a:05:01:95:c9:8b:20:0a:ba:5a:fc:9a:2c:
- 3c:bd:c3:b7:c9:5d:78:25:05:3f:56:14:9b:0c:da:fb:3a:48:
- fe:97:69:5e:ca:10:86:f7:4e:96:04:08:4d:ec:b0:be:5d:dc:
- 3b:8e:4f:c1:fd:9a:36:34:9a:4c:54:7e:17:03:48:95:08:11:
- 1c:07:6f:85:08:7e:5d:4d:c4:9d:db:fb:ae:ce:b2:d1:b3:b8:
- 83:6c:1d:b2:b3:79:f1:d8:70:99:7e:f0:13:02:ce:5e:dd:51:
- d3:df:36:81:a1:1b:78:2f:71:b3:f1:59:4c:46:18:28:ab:85:
- d2:60:56:5a
-----BEGIN CERTIFICATE-----
MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
@@ -7947,62 +2204,6 @@ NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
Security Communication EV RootCA1
=================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication EV RootCA1
- Validity
- Not Before: Jun 6 02:12:32 2007 GMT
- Not After : Jun 6 02:12:32 2037 GMT
- Subject: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication EV RootCA1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:bc:7f:ec:57:9b:24:e0:fe:9c:ba:42:79:a9:88:
- 8a:fa:80:e0:f5:07:29:43:ea:8e:0a:34:36:8d:1c:
- fa:a7:b5:39:78:ff:97:75:f7:2f:e4:aa:6b:04:84:
- 44:ca:a6:e2:68:8e:fd:55:50:62:0f:a4:71:0e:ce:
- 07:38:2d:42:85:50:ad:3c:96:6f:8b:d5:a2:0e:cf:
- de:49:89:3d:d6:64:2e:38:e5:1e:6c:b5:57:8a:9e:
- ef:48:0e:cd:7a:69:16:87:44:b5:90:e4:06:9d:ae:
- a1:04:97:58:79:ef:20:4a:82:6b:8c:22:bf:ec:1f:
- 0f:e9:84:71:ed:f1:0e:e4:b8:18:13:cc:56:36:5d:
- d1:9a:1e:51:6b:39:6e:60:76:88:34:0b:f3:b3:d1:
- b0:9d:ca:61:e2:64:1d:c1:46:07:b8:63:dd:1e:33:
- 65:b3:8e:09:55:52:3d:b5:bd:ff:07:eb:ad:61:55:
- 18:2c:a9:69:98:4a:aa:40:c5:33:14:65:74:00:f9:
- 91:de:af:03:48:c5:40:54:dc:0f:84:90:68:20:c5:
- 92:96:dc:2e:e5:02:45:aa:c0:5f:54:f8:6d:ea:49:
- cf:5d:6c:4b:af:ef:9a:c2:56:5c:c6:35:56:42:6a:
- 30:5f:c2:ab:f6:e2:3d:3f:b3:c9:11:8f:31:4c:d7:
- 9f:49
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 35:4A:F5:4D:AF:3F:D7:82:38:AC:AB:71:65:17:75:8C:9D:55:93:E6
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- a8:87:e9:ec:f8:40:67:5d:c3:c1:66:c7:40:4b:97:fc:87:13:
- 90:5a:c4:ef:a0:ca:5f:8b:b7:a7:b7:f1:d6:b5:64:b7:8a:b3:
- b8:1b:cc:da:fb:ac:66:88:41:ce:e8:fc:e4:db:1e:88:a6:ed:
- 27:50:1b:02:30:24:46:79:fe:04:87:70:97:40:73:d1:c0:c1:
- 57:19:9a:69:a5:27:99:ab:9d:62:84:f6:51:c1:2c:c9:23:15:
- d8:28:b7:ab:25:13:b5:46:e1:86:02:ff:26:8c:c4:88:92:1d:
- 56:fe:19:67:f2:55:e4:80:a3:6b:9c:ab:77:e1:51:71:0d:20:
- db:10:9a:db:bd:76:79:07:77:99:28:ad:9a:5e:da:b1:4f:44:
- 2c:35:8e:a5:96:c7:fd:83:f0:58:c6:79:d6:98:7c:a8:8d:fe:
- 86:3e:07:16:92:e1:7b:e7:1d:ec:33:76:7e:42:2e:4a:85:f9:
- 91:89:68:84:03:81:a5:9b:9a:be:e3:37:c5:54:ab:56:3b:18:
- 2d:41:a4:0c:f8:42:db:99:a0:e0:72:6f:bb:5d:e1:16:4f:53:
- 0a:64:f9:4e:f4:bf:4e:54:bd:78:6c:88:ea:bf:9c:13:24:c2:
- 70:69:a2:7f:0f:c8:3c:ad:08:c9:b0:98:40:a3:2a:e7:88:83:
- ed:77:8f:74
-----BEGIN CERTIFICATE-----
MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
@@ -8027,65 +2228,6 @@ VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
OISTE WISeKey Global Root GA CA
===============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 41:3d:72:c7:f4:6b:1f:81:43:7d:f1:d2:28:54:df:9a
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=CH, O=WISeKey, OU=Copyright (c) 2005, OU=OISTE Foundation Endorsed, CN=OISTE WISeKey Global Root GA CA
- Validity
- Not Before: Dec 11 16:03:44 2005 GMT
- Not After : Dec 11 16:09:51 2037 GMT
- Subject: C=CH, O=WISeKey, OU=Copyright (c) 2005, OU=OISTE Foundation Endorsed, CN=OISTE WISeKey Global Root GA CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:cb:4f:b3:00:9b:3d:36:dd:f9:d1:49:6a:6b:10:
- 49:1f:ec:d8:2b:b2:c6:f8:32:81:29:43:95:4c:9a:
- 19:23:21:15:45:de:e3:c8:1c:51:55:5b:ae:93:e8:
- 37:ff:2b:6b:e9:d4:ea:be:2a:dd:a8:51:2b:d7:66:
- c3:61:5c:60:02:c8:f5:ce:72:7b:3b:b8:f2:4e:65:
- 08:9a:cd:a4:6a:19:c1:01:bb:73:a6:d7:f6:c3:dd:
- cd:bc:a4:8b:b5:99:61:b8:01:a2:a3:d4:4d:d4:05:
- 3d:91:ad:f8:b4:08:71:64:af:70:f1:1c:6b:7e:f6:
- c3:77:9d:24:73:7b:e4:0c:8c:e1:d9:36:e1:99:8b:
- 05:99:0b:ed:45:31:09:ca:c2:00:db:f7:72:a0:96:
- aa:95:87:d0:8e:c7:b6:61:73:0d:76:66:8c:dc:1b:
- b4:63:a2:9f:7f:93:13:30:f1:a1:27:db:d9:ff:2c:
- 55:88:91:a0:e0:4f:07:b0:28:56:8c:18:1b:97:44:
- 8e:89:dd:e0:17:6e:e7:2a:ef:8f:39:0a:31:84:82:
- d8:40:14:49:2e:7a:41:e4:a7:fe:e3:64:cc:c1:59:
- 71:4b:2c:21:a7:5b:7d:e0:1d:d1:2e:81:9b:c3:d8:
- 68:f7:bd:96:1b:ac:70:b1:16:14:0b:db:60:b9:26:
- 01:05
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage:
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- B3:03:7E:AE:36:BC:B0:79:D1:DC:94:26:B6:11:BE:21:B2:69:86:94
- 1.3.6.1.4.1.311.21.1:
- ...
- Signature Algorithm: sha1WithRSAEncryption
- 4b:a1:ff:0b:87:6e:b3:f9:c1:43:b1:48:f3:28:c0:1d:2e:c9:
- 09:41:fa:94:00:1c:a4:a4:ab:49:4f:8f:3d:1e:ef:4d:6f:bd:
- bc:a4:f6:f2:26:30:c9:10:ca:1d:88:fb:74:19:1f:85:45:bd:
- b0:6c:51:f9:36:7e:db:f5:4c:32:3a:41:4f:5b:47:cf:e8:0b:
- 2d:b6:c4:19:9d:74:c5:47:c6:3b:6a:0f:ac:14:db:3c:f4:73:
- 9c:a9:05:df:00:dc:74:78:fa:f8:35:60:59:02:13:18:7c:bc:
- fb:4d:b0:20:6d:43:bb:60:30:7a:67:33:5c:c5:99:d1:f8:2d:
- 39:52:73:fb:8c:aa:97:25:5c:72:d9:08:1e:ab:4e:3c:e3:81:
- 31:9f:03:a6:fb:c0:fe:29:88:55:da:84:d5:50:03:b6:e2:84:
- a3:a6:36:aa:11:3a:01:e1:18:4b:d6:44:68:b3:3d:f9:53:74:
- 84:b3:46:91:46:96:00:b7:80:2c:b6:e1:e3:10:e2:db:a2:e7:
- 28:8f:01:96:62:16:3e:00:e3:1c:a5:36:81:18:a2:4c:52:76:
- c0:11:a3:6e:e6:1d:ba:e3:5a:be:36:53:c5:3e:75:8f:86:69:
- 29:58:53:b5:9c:bb:6f:9f:5c:c5:18:ec:dd:2f:e1:98:c9:fc:
- be:df:0a:0d
-----BEGIN CERTIFICATE-----
MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
@@ -8111,177 +2253,8 @@ Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
/L7fCg0=
-----END CERTIFICATE-----
-S-TRUST Authentication and Encryption Root CA 2005 PN
-=====================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 37:19:18:e6:53:54:7c:1a:b5:b8:cb:59:5a:db:35:b7
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DE, ST=Baden-Wuerttemberg (BW), L=Stuttgart, O=Deutscher Sparkassen Verlag GmbH, CN=S-TRUST Authentication and Encryption Root CA 2005:PN
- Validity
- Not Before: Jun 22 00:00:00 2005 GMT
- Not After : Jun 21 23:59:59 2030 GMT
- Subject: C=DE, ST=Baden-Wuerttemberg (BW), L=Stuttgart, O=Deutscher Sparkassen Verlag GmbH, CN=S-TRUST Authentication and Encryption Root CA 2005:PN
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:d9:b5:4a:c1:d3:33:ea:d3:46:b3:d1:e2:4c:d2:
- f5:b6:83:d0:6f:d5:18:e9:93:af:27:8e:13:cd:b5:
- 25:36:50:34:12:64:29:a1:55:e1:3a:60:93:9e:28:
- c9:e3:f3:9b:e1:04:b0:23:bf:95:8a:8e:5b:1b:41:
- 7f:5a:c3:e8:4d:4c:d5:24:16:3e:87:48:d4:27:ae:
- e6:f7:53:1d:bb:0c:00:ef:3e:61:71:ad:bf:3a:7a:
- 58:1f:94:3d:5c:81:d5:d5:6f:df:b8:9b:d2:f5:e5:
- cb:83:72:92:c2:53:b2:82:02:eb:ad:ad:5f:16:2d:
- 92:53:76:f1:89:b6:2c:f5:c1:2f:e0:a7:4a:6f:a0:
- 30:6a:32:eb:9a:74:03:68:78:13:9d:ca:2f:9b:0b:
- 1d:be:cf:75:0d:26:97:9b:c7:f5:5e:0a:9f:78:df:
- b3:bc:ec:9a:ba:ef:55:8f:1b:9a:a6:07:63:29:17:
- 59:62:09:2a:79:07:77:a5:e0:d1:17:69:e9:5b:dd:
- f6:90:ab:e2:98:0a:00:d1:25:6d:9e:d7:85:87:2f:
- 92:f1:d1:76:83:4f:0b:3a:59:37:28:2f:33:a7:17:
- 50:d6:20:0b:0a:f4:26:f9:9f:38:e7:2d:a4:b8:9b:
- 89:8d:ad:ad:c9:6a:7d:89:17:bb:f6:7f:80:83:7a:
- e6:ed
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:0
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Alternative Name:
- DirName:/CN=STRonline1-2048-5
- X509v3 Subject Key Identifier:
- 0F:CA:1E:5C:79:E0:A2:F3:29:B6:D2:85:B3:0B:4A:B5:65:EC:6B:52
- X509v3 Authority Key Identifier:
- keyid:0F:CA:1E:5C:79:E0:A2:F3:29:B6:D2:85:B3:0B:4A:B5:65:EC:6B:52
-
- Signature Algorithm: sha1WithRSAEncryption
- af:01:f0:ed:19:3c:28:e8:4d:5c:bb:a5:63:1c:88:33:03:a7:
- 00:87:a4:1f:20:ab:d6:1c:e3:06:1f:97:7e:54:bd:b7:d1:b2:
- c9:d5:da:80:ec:17:d7:8a:f5:7b:c2:00:f6:e9:11:6f:84:a0:
- 5a:25:31:e2:89:f9:a4:00:3f:31:68:2e:d5:3d:e8:6e:e6:d5:
- 1d:3c:3f:b2:bd:9f:77:eb:9d:d3:8c:ba:c0:d7:b6:4d:ec:53:
- 9c:0f:04:6e:ea:35:67:57:e3:0a:65:7b:90:3a:e1:4f:3e:c3:
- 00:92:7a:bb:05:89:73:8c:cb:a6:4d:c0:fb:f6:02:d6:b0:07:
- a3:03:c2:27:40:9f:0c:e4:85:82:2d:af:9a:42:1d:d0:c7:8d:
- f8:40:ee:9d:06:57:1c:d9:a2:d8:80:14:fe:e1:63:2d:32:87:
- d5:94:52:96:3a:46:c6:71:96:3d:f7:98:0e:b2:91:aa:8f:da:
- f4:4e:24:00:39:55:e8:ad:17:b9:d3:34:2b:4a:a9:40:cc:17:
- 2a:55:65:41:74:42:7e:f5:c0:af:c8:93:ad:f2:18:5b:3d:89:
- 0c:db:47:39:24:f8:e0:4c:f2:1f:b0:3d:0a:ca:05:4e:89:21:
- 1a:e3:2a:99:ac:fc:7f:a1:f1:0f:1b:1f:3d:9e:04:83:dd:96:
- d9:1d:3a:94
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
-MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
-c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
-IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
-Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
-V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
-RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
-U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
-toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
-TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
-ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
-XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
-hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
-7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
-MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
-HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
-ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
-LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
-iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
-h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
-k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
------END CERTIFICATE-----
-
Microsec e-Szigno Root CA
=========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- cc:b8:e7:bf:4e:29:1a:fd:a2:dc:66:a5:1c:2c:0f:11
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=HU, L=Budapest, O=Microsec Ltd., OU=e-Szigno CA, CN=Microsec e-Szigno Root CA
- Validity
- Not Before: Apr 6 12:28:44 2005 GMT
- Not After : Apr 6 12:28:44 2017 GMT
- Subject: C=HU, L=Budapest, O=Microsec Ltd., OU=e-Szigno CA, CN=Microsec e-Szigno Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ed:c8:00:d5:81:7b:cd:38:00:47:cc:db:84:c1:
- 21:69:2c:74:90:0c:21:d9:53:87:ed:3e:43:44:53:
- af:ab:f8:80:9b:3c:78:8d:d4:8d:ae:b8:ef:d3:11:
- dc:81:e6:cf:3b:96:8c:d6:6f:15:c6:77:7e:a1:2f:
- e0:5f:92:b6:27:d7:76:9a:1d:43:3c:ea:d9:ec:2f:
- ee:39:f3:6a:67:4b:8b:82:cf:22:f8:65:55:fe:2c:
- cb:2f:7d:48:7a:3d:75:f9:aa:a0:27:bb:78:c2:06:
- ca:51:c2:7e:66:4b:af:cd:a2:a7:4d:02:82:3f:82:
- ac:85:c6:e1:0f:90:47:99:94:0a:71:72:93:2a:c9:
- a6:c0:be:3c:56:4c:73:92:27:f1:6b:b5:f5:fd:fc:
- 30:05:60:92:c6:eb:96:7e:01:91:c2:69:b1:1e:1d:
- 7b:53:45:b8:dc:41:1f:c9:8b:71:d6:54:14:e3:8b:
- 54:78:3f:be:f4:62:3b:5b:f5:a3:ec:d5:92:74:e2:
- 74:30:ef:01:db:e1:d4:ab:99:9b:2a:6b:f8:bd:a6:
- 1c:86:23:42:5f:ec:49:de:9a:8b:5b:f4:72:3a:40:
- c5:49:3e:a5:be:8e:aa:71:eb:6c:fa:f5:1a:e4:6a:
- fd:7b:7d:55:40:ef:58:6e:e6:d9:d5:bc:24:ab:c1:
- ef:b7
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Authority Information Access:
- OCSP - URI:https://rca.e-szigno.hu/ocsp
- CA Issuers - URI:http://www.e-szigno.hu/RootCA.crt
-
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.21528.2.1.1.1
- CPS: http://www.e-szigno.hu/SZSZ/
- User Notice:
- Explicit Text:
-
- X509v3 CRL Distribution Points:
- URI:http://www.e-szigno.hu/RootCA.crl
- URI:ldap://ldap.e-szigno.hu/CN=Microsec%20e-Szigno%20Root%20CA,OU=e-Szigno%20CA,O=Microsec%20Ltd.,L=Budapest,C=HU?certificateRevocationList;binary
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Alternative Name:
- email:info at e-szigno.hu, DirName:/CN=Microsec e-Szign\xC3\xB3 Root CA/OU=e-Szign\xC3\xB3 HSZ/O=Microsec Kft./L=Budapest/C=HU
- X509v3 Authority Key Identifier:
- keyid:C7:A0:49:75:16:61:84:DB:31:4B:84:D2:F1:37:40:90:EF:4E:DC:F7
- DirName:/C=HU/L=Budapest/O=Microsec Ltd./OU=e-Szigno CA/CN=Microsec e-Szigno Root CA
- serial:CC:B8:E7:BF:4E:29:1A:FD:A2:DC:66:A5:1C:2C:0F:11
-
- X509v3 Subject Key Identifier:
- C7:A0:49:75:16:61:84:DB:31:4B:84:D2:F1:37:40:90:EF:4E:DC:F7
- Signature Algorithm: sha1WithRSAEncryption
- d3:13:9c:66:63:59:2e:ca:5c:70:0c:fc:83:bc:55:b1:f4:8e:
- 07:6c:66:27:ce:c1:3b:20:a9:1c:bb:46:54:70:ee:5a:cc:a0:
- 77:ea:68:44:27:eb:f2:29:dd:77:a9:d5:fb:e3:d4:a7:04:c4:
- 95:b8:0b:e1:44:68:60:07:43:30:31:42:61:e5:ee:d9:e5:24:
- d5:1b:df:e1:4a:1b:aa:9f:c7:5f:f8:7a:11:ea:13:93:00:ca:
- 8a:58:b1:ee:ed:0e:4d:b4:d7:a8:36:26:7c:e0:3a:c1:d5:57:
- 82:f1:75:b6:fd:89:5f:da:f3:a8:38:9f:35:06:08:ce:22:95:
- be:cd:d5:fc:be:5b:de:79:6b:dc:7a:a9:65:66:be:b1:25:5a:
- 5f:ed:7e:d3:ac:46:6d:4c:f4:32:87:b4:20:04:e0:6c:78:b0:
- 77:d1:85:46:4b:a6:12:b7:75:e8:4a:c9:56:6c:d7:92:ab:9d:
- f5:49:38:d2:4f:53:e3:55:90:11:db:98:96:c6:49:f2:3e:f4:
- 9f:1b:e0:f7:88:dc:25:62:99:44:d8:73:bf:3f:30:f3:0c:37:
- 3e:d4:c2:28:80:73:b1:01:b7:9d:5a:96:14:01:4b:a9:11:9d:
- 29:6a:2e:d0:5d:81:c0:cf:b2:20:43:c7:03:e0:37:4e:5d:0a:
- dc:59:20:25
-----BEGIN CERTIFICATE-----
MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
@@ -8328,70 +2301,6 @@ MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
Certigna
========
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- fe:dc:e3:01:0f:c9:48:ff
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=FR, O=Dhimyotis, CN=Certigna
- Validity
- Not Before: Jun 29 15:13:05 2007 GMT
- Not After : Jun 29 15:13:05 2027 GMT
- Subject: C=FR, O=Dhimyotis, CN=Certigna
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c8:68:f1:c9:d6:d6:b3:34:75:26:82:1e:ec:b4:
- be:ea:5c:e1:26:ed:11:47:61:e1:a2:7c:16:78:40:
- 21:e4:60:9e:5a:c8:63:e1:c4:b1:96:92:ff:18:6d:
- 69:23:e1:2b:62:f7:dd:e2:36:2f:91:07:b9:48:cf:
- 0e:ec:79:b6:2c:e7:34:4b:70:08:25:a3:3c:87:1b:
- 19:f2:81:07:0f:38:90:19:d3:11:fe:86:b4:f2:d1:
- 5e:1e:1e:96:cd:80:6c:ce:3b:31:93:b6:f2:a0:d0:
- a9:95:12:7d:a5:9a:cc:6b:c8:84:56:8a:33:a9:e7:
- 22:15:53:16:f0:cc:17:ec:57:5f:e9:a2:0a:98:09:
- de:e3:5f:9c:6f:dc:48:e3:85:0b:15:5a:a6:ba:9f:
- ac:48:e3:09:b2:f7:f4:32:de:5e:34:be:1c:78:5d:
- 42:5b:ce:0e:22:8f:4d:90:d7:7d:32:18:b3:0b:2c:
- 6a:bf:8e:3f:14:11:89:20:0e:77:14:b5:3d:94:08:
- 87:f7:25:1e:d5:b2:60:00:ec:6f:2a:28:25:6e:2a:
- 3e:18:63:17:25:3f:3e:44:20:16:f6:26:c8:25:ae:
- 05:4a:b4:e7:63:2c:f3:8c:16:53:7e:5c:fb:11:1a:
- 08:c1:46:62:9f:22:b8:f1:c2:8d:69:dc:fa:3a:58:
- 06:df
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 1A:ED:FE:41:39:90:B4:24:59:BE:01:F2:52:D5:45:F6:5A:39:DC:11
- X509v3 Authority Key Identifier:
- keyid:1A:ED:FE:41:39:90:B4:24:59:BE:01:F2:52:D5:45:F6:5A:39:DC:11
- DirName:/C=FR/O=Dhimyotis/CN=Certigna
- serial:FE:DC:E3:01:0F:C9:48:FF
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- Signature Algorithm: sha1WithRSAEncryption
- 85:03:1e:92:71:f6:42:af:e1:a3:61:9e:eb:f3:c0:0f:f2:a5:
- d4:da:95:e6:d6:be:68:36:3d:7e:6e:1f:4c:8a:ef:d1:0f:21:
- 6d:5e:a5:52:63:ce:12:f8:ef:2a:da:6f:eb:37:fe:13:02:c7:
- cb:3b:3e:22:6b:da:61:2e:7f:d4:72:3d:dd:30:e1:1e:4c:40:
- 19:8c:0f:d7:9c:d1:83:30:7b:98:59:dc:7d:c6:b9:0c:29:4c:
- a1:33:a2:eb:67:3a:65:84:d3:96:e2:ed:76:45:70:8f:b5:2b:
- de:f9:23:d6:49:6e:3c:14:b5:c6:9f:35:1e:50:d0:c1:8f:6a:
- 70:44:02:62:cb:ae:1d:68:41:a7:aa:57:e8:53:aa:07:d2:06:
- f6:d5:14:06:0b:91:03:75:2c:6c:72:b5:61:95:9a:0d:8b:b9:
- 0d:e7:f5:df:54:cd:de:e6:d8:d6:09:08:97:63:e5:c1:2e:b0:
- b7:44:26:c0:26:c0:af:55:30:9e:3b:d5:36:2a:19:04:f4:5c:
- 1e:ff:cf:2c:b7:ff:d0:fd:87:40:11:d5:11:23:bb:48:c0:21:
- a9:a4:28:2d:fd:15:f8:b0:4e:2b:f4:30:5b:21:fc:11:91:34:
- be:41:ef:7b:9d:97:75:ff:97:95:c0:96:58:2f:ea:bb:46:d7:
- bb:e4:d9:2e
-----BEGIN CERTIFICATE-----
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
@@ -8417,100 +2326,6 @@ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
======================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 07:7e:52:93:7b:e0:15:e3:57:f0:69:8c:cb:ec:0c
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=CO, O=Sociedad Cameral de Certificaci\xC3\xB3n Digital - Certic\xC3\xA1mara S.A., CN=AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
- Validity
- Not Before: Nov 27 20:46:29 2006 GMT
- Not After : Apr 2 21:42:02 2030 GMT
- Subject: C=CO, O=Sociedad Cameral de Certificaci\xC3\xB3n Digital - Certic\xC3\xA1mara S.A., CN=AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:ab:6b:89:a3:53:cc:48:23:08:fb:c3:cf:51:96:
- 08:2e:b8:08:7a:6d:3c:90:17:86:a9:e9:ed:2e:13:
- 34:47:b2:d0:70:dc:c9:3c:d0:8d:ca:ee:4b:17:ab:
- d0:85:b0:a7:23:04:cb:a8:a2:fc:e5:75:db:40:ca:
- 62:89:8f:50:9e:01:3d:26:5b:18:84:1c:cb:7c:37:
- b7:7d:ec:d3:7f:73:19:b0:6a:b2:d8:88:8a:2d:45:
- 74:a8:f7:b3:b8:c0:d4:da:cd:22:89:74:4d:5a:15:
- 39:73:18:74:4f:b5:eb:99:a7:c1:1e:88:b4:c2:93:
- 90:63:97:f3:a7:a7:12:b2:09:22:07:33:d9:91:cd:
- 0e:9c:1f:0e:20:c7:ee:bb:33:8d:8f:c2:d2:58:a7:
- 5f:fd:65:37:e2:88:c2:d8:8f:86:75:5e:f9:2d:a7:
- 87:33:f2:78:37:2f:8b:bc:1d:86:37:39:b1:94:f2:
- d8:bc:4a:9c:83:18:5a:06:fc:f3:d4:d4:ba:8c:15:
- 09:25:f0:f9:b6:8d:04:7e:17:12:33:6b:57:48:4c:
- 4f:db:26:1e:eb:cc:90:e7:8b:f9:68:7c:70:0f:a3:
- 2a:d0:3a:38:df:37:97:e2:5b:de:80:61:d3:80:d8:
- 91:83:42:5a:4c:04:89:68:11:3c:ac:5f:68:80:41:
- cc:60:42:ce:0d:5a:2a:0c:0f:9b:30:c0:a6:f0:86:
- db:ab:49:d7:97:6d:48:8b:f9:03:c0:52:67:9b:12:
- f7:c2:f2:2e:98:65:42:d9:d6:9a:e3:d0:19:31:0c:
- ad:87:d5:57:02:7a:30:e8:86:26:fb:8f:23:8a:54:
- 87:e4:bf:3c:ee:eb:c3:75:48:5f:1e:39:6f:81:62:
- 6c:c5:2d:c4:17:54:19:b7:37:8d:9c:37:91:c8:f6:
- 0b:d5:ea:63:6f:83:ac:38:c2:f3:3f:de:9a:fb:e1:
- 23:61:f0:c8:26:cb:36:c8:a1:f3:30:8f:a4:a3:a2:
- a1:dd:53:b3:de:f0:9a:32:1f:83:91:79:30:c1:a9:
- 1f:53:9b:53:a2:15:53:3f:dd:9d:b3:10:3b:48:7d:
- 89:0f:fc:ed:03:f5:fb:25:64:75:0e:17:19:0d:8f:
- 00:16:67:79:7a:40:fc:2d:59:07:d9:90:fa:9a:ad:
- 3d:dc:80:8a:e6:5c:35:a2:67:4c:11:6b:b1:f8:80:
- 64:00:2d:6f:22:61:c5:ac:4b:26:e5:5a:10:82:9b:
- a4:83:7b:34:f7:9e:89:91:20:97:8e:b7:42:c7:66:
- c3:d0:e9:a4:d6:f5:20:8d:c4:c3:95:ac:44:0a:9d:
- 5b:73:3c:26:3d:2f:4a:be:a7:c9:a7:10:1e:fb:9f:
- 50:69:f3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- D1:09:D0:E9:D7:CE:79:74:54:F9:3A:30:B3:F4:6D:2C:03:03:1B:68
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://www.certicamara.com/dpc/
- User Notice:
- Explicit Text: Limitaciones de garant�as de este certificado se pueden encontrar en la DPC.
-
- Signature Algorithm: sha1WithRSAEncryption
- 5c:94:b5:b8:45:91:4d:8e:61:1f:03:28:0f:53:7c:e6:a4:59:
- a9:b3:8a:7a:c5:b0:ff:08:7c:2c:a3:71:1c:21:13:67:a1:95:
- 12:40:35:83:83:8f:74:db:33:5c:f0:49:76:0a:81:52:dd:49:
- d4:9a:32:33:ef:9b:a7:cb:75:e5:7a:cb:97:12:90:5c:ba:7b:
- c5:9b:df:bb:39:23:c8:ff:98:ce:0a:4d:22:01:48:07:7e:8a:
- c0:d5:20:42:94:44:ef:bf:77:a2:89:67:48:1b:40:03:05:a1:
- 89:ec:cf:62:e3:3d:25:76:66:bf:26:b7:bb:22:be:6f:ff:39:
- 57:74:ba:7a:c9:01:95:c1:95:51:e8:ab:2c:f8:b1:86:20:e9:
- 3f:cb:35:5b:d2:17:e9:2a:fe:83:13:17:40:ee:88:62:65:5b:
- d5:3b:60:e9:7b:3c:b8:c9:d5:7f:36:02:25:aa:68:c2:31:15:
- b7:30:65:eb:7f:1d:48:79:b1:cf:39:e2:42:80:16:d3:f5:93:
- 23:fc:4c:97:c9:5a:37:6c:7c:22:d8:4a:cd:d2:8e:36:83:39:
- 91:90:10:c8:f1:c9:35:7e:3f:b8:d3:81:c6:20:64:1a:b6:50:
- c2:21:a4:78:dc:d0:2f:3b:64:93:74:f0:96:90:f1:ef:fb:09:
- 5a:34:40:96:f0:36:12:c1:a3:74:8c:93:7e:41:de:77:8b:ec:
- 86:d9:d2:0f:3f:2d:d1:cc:40:a2:89:66:48:1e:20:b3:9c:23:
- 59:73:a9:44:73:bc:24:79:90:56:37:b3:c6:29:7e:a3:0f:f1:
- 29:39:ef:7e:5c:28:32:70:35:ac:da:b8:c8:75:66:fc:9b:4c:
- 39:47:8e:1b:6f:9b:4d:02:54:22:33:ef:61:ba:9e:29:84:ef:
- 4e:4b:33:47:76:97:6a:cb:7e:5f:fd:15:a6:9e:42:43:5b:66:
- 5a:8a:88:0d:f7:16:b9:3f:51:65:2b:66:6a:8b:d1:38:52:a2:
- d6:46:11:fa:fc:9a:1c:74:9e:8f:97:0b:02:4f:64:c6:f5:68:
- d3:4b:2d:ff:a4:37:1e:8b:3f:bf:44:be:61:46:a1:84:3d:08:
- 27:4c:81:20:77:89:08:ea:67:40:5e:6c:08:51:5f:34:5a:8c:
- 96:68:cd:d7:f7:89:c2:1c:d3:32:00:af:52:cb:d3:60:5b:2a:
- 3a:47:7e:6b:30:33:a1:62:29:7f:4a:b9:e1:2d:e7:14:23:0e:
- 0e:18:47:e1:79:fc:15:55:d0:b1:fc:25:71:63:75:33:1c:23:
- 2b:af:5c:d9:ed:47:77:60:0e:3b:0f:1e:d2:c0:dc:64:05:89:
- fc:78:d6:5c:2c:26:43:a9
-----BEGIN CERTIFICATE-----
MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
@@ -8551,67 +2366,6 @@ BYn8eNZcLCZDqQ==
TC TrustCenter Class 2 CA II
============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 2e:6a:00:01:00:02:1f:d7:52:21:2c:11:5c:3b
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 2 CA, CN=TC TrustCenter Class 2 CA II
- Validity
- Not Before: Jan 12 14:38:43 2006 GMT
- Not After : Dec 31 22:59:59 2025 GMT
- Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 2 CA, CN=TC TrustCenter Class 2 CA II
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ab:80:87:9b:8e:f0:c3:7c:87:d7:e8:24:82:11:
- b3:3c:dd:43:62:ee:f8:c3:45:da:e8:e1:a0:5f:d1:
- 2a:b2:ea:93:68:df:b4:c8:d6:43:e9:c4:75:59:7f:
- fc:e1:1d:f8:31:70:23:1b:88:9e:27:b9:7b:fd:3a:
- d2:c9:a9:e9:14:2f:90:be:03:52:c1:49:cd:f6:fd:
- e4:08:66:0b:57:8a:a2:42:a0:b8:d5:7f:69:5c:90:
- 32:b2:97:0d:ca:4a:dc:46:3e:02:55:89:53:e3:1a:
- 5a:cb:36:c6:07:56:f7:8c:cf:11:f4:4c:bb:30:70:
- 04:95:a5:f6:39:8c:fd:73:81:08:7d:89:5e:32:1e:
- 22:a9:22:45:4b:b0:66:2e:30:cc:9f:65:fd:fc:cb:
- 81:a9:f1:e0:3b:af:a3:86:d1:89:ea:c4:45:79:50:
- 5d:ae:e9:21:74:92:4d:8b:59:82:8f:94:e3:e9:4a:
- f1:e7:49:b0:14:e3:f5:62:cb:d5:72:bd:1f:b9:d2:
- 9f:a0:cd:a8:fa:01:c8:d9:0d:df:da:fc:47:9d:b3:
- c8:54:df:49:4a:f1:21:a9:fe:18:4e:ee:48:d4:19:
- bb:ef:7d:e4:e2:9d:cb:5b:b6:6e:ff:e3:cd:5a:e7:
- 74:82:05:ba:80:25:38:cb:e4:69:9e:af:41:aa:1a:
- 84:f5
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- E3:AB:54:4C:80:A1:DB:56:43:B7:91:4A:CB:F3:82:7A:13:5C:08:AB
- X509v3 CRL Distribution Points:
- URI:http://www.trustcenter.de/crl/v2/tc_class_2_ca_II.crl
- URI:ldap://www.trustcenter.de/CN=TC%20TrustCenter%20Class%202%20CA%20II,O=TC%20TrustCenter%20GmbH,OU=rootcerts,DC=trustcenter,DC=de?certificateRevocationList?base?
-
- Signature Algorithm: sha1WithRSAEncryption
- 8c:d7:df:7e:ee:1b:80:10:b3:83:f5:db:11:ea:6b:4b:a8:92:
- 18:d9:f7:07:39:f5:2c:be:06:75:7a:68:53:15:1c:ea:4a:ed:
- 5e:fc:23:b2:13:a0:d3:09:ff:f6:f6:2e:6b:41:71:79:cd:e2:
- 6d:fd:ae:59:6b:85:1d:b8:4e:22:9a:ed:66:39:6e:4b:94:e6:
- 55:fc:0b:1b:8b:77:c1:53:13:66:89:d9:28:d6:8b:f3:45:4a:
- 63:b7:fd:7b:0b:61:5d:b8:6d:be:c3:dc:5b:79:d2:ed:86:e5:
- a2:4d:be:5e:74:7c:6a:ed:16:38:1f:7f:58:81:5a:1a:eb:32:
- 88:2d:b2:f3:39:77:80:af:5e:b6:61:75:29:db:23:4d:88:ca:
- 50:28:cb:85:d2:d3:10:a2:59:6e:d3:93:54:00:7a:a2:46:95:
- 86:05:9c:a9:19:98:e5:31:72:0c:00:e2:67:d9:40:e0:24:33:
- 7b:6f:2c:b9:5c:ab:65:9d:2c:ac:76:ea:35:99:f5:97:b9:0f:
- 24:ec:c7:76:21:28:65:ae:57:e8:07:88:75:4a:56:a0:d2:05:
- 3a:a4:e6:8d:92:88:2c:f3:f2:e1:c1:c6:61:db:41:c5:c7:9b:
- f7:0e:1a:51:45:c2:61:6b:dc:64:27:17:8c:5a:b7:da:74:28:
- cd:97:e4:bd
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
@@ -8642,67 +2396,6 @@ dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
TC TrustCenter Class 3 CA II
============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 4a:47:00:01:00:02:e5:a0:5d:d6:3f:00:51:bf
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 3 CA, CN=TC TrustCenter Class 3 CA II
- Validity
- Not Before: Jan 12 14:41:57 2006 GMT
- Not After : Dec 31 22:59:59 2025 GMT
- Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Class 3 CA, CN=TC TrustCenter Class 3 CA II
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b4:e0:bb:51:bb:39:5c:8b:04:c5:4c:79:1c:23:
- 86:31:10:63:43:55:27:3f:c6:45:c7:a4:3d:ec:09:
- 0d:1a:1e:20:c2:56:1e:de:1b:37:07:30:22:2f:6f:
- f1:06:f1:ab:ad:d6:c8:ab:61:a3:2f:43:c4:b0:b2:
- 2d:fc:c3:96:69:7b:7e:8a:e4:cc:c0:39:12:90:42:
- 60:c9:cc:35:68:ee:da:5f:90:56:5f:cd:1c:4d:5b:
- 58:49:eb:0e:01:4f:64:fa:2c:3c:89:58:d8:2f:2e:
- e2:b0:68:e9:22:3b:75:89:d6:44:1a:65:f2:1b:97:
- 26:1d:28:6d:ac:e8:bd:59:1d:2b:24:f6:d6:84:03:
- 66:88:24:00:78:60:f1:f8:ab:fe:02:b2:6b:fb:22:
- fb:35:e6:16:d1:ad:f6:2e:12:e4:fa:35:6a:e5:19:
- b9:5d:db:3b:1e:1a:fb:d3:ff:15:14:08:d8:09:6a:
- ba:45:9d:14:79:60:7d:af:40:8a:07:73:b3:93:96:
- d3:74:34:8d:3a:37:29:de:5c:ec:f5:ee:2e:31:c2:
- 20:dc:be:f1:4f:7f:23:52:d9:5b:e2:64:d9:9c:aa:
- 07:08:b5:45:bd:d1:d0:31:c1:ab:54:9f:a9:d2:c3:
- 62:60:03:f1:bb:39:4a:92:4a:3d:0a:b9:9d:c5:a0:
- fe:37
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- D4:A2:FC:9F:B3:C3:D8:03:D3:57:5C:07:A4:D0:24:A7:C0:F2:00:D4
- X509v3 CRL Distribution Points:
- URI:http://www.trustcenter.de/crl/v2/tc_class_3_ca_II.crl
- URI:ldap://www.trustcenter.de/CN=TC%20TrustCenter%20Class%203%20CA%20II,O=TC%20TrustCenter%20GmbH,OU=rootcerts,DC=trustcenter,DC=de?certificateRevocationList?base?
-
- Signature Algorithm: sha1WithRSAEncryption
- 36:60:e4:70:f7:06:20:43:d9:23:1a:42:f2:f8:a3:b2:b9:4d:
- 8a:b4:f3:c2:9a:55:31:7c:c4:3b:67:9a:b4:df:4d:0e:8a:93:
- 4a:17:8b:1b:8d:ca:89:e1:cf:3a:1e:ac:1d:f1:9c:32:b4:8e:
- 59:76:a2:41:85:25:37:a0:13:d0:f5:7c:4e:d5:ea:96:e2:6e:
- 72:c1:bb:2a:fe:6c:6e:f8:91:98:46:fc:c9:1b:57:5b:ea:c8:
- 1a:3b:3f:b0:51:98:3c:07:da:2c:59:01:da:8b:44:e8:e1:74:
- fd:a7:68:dd:54:ba:83:46:ec:c8:46:b5:f8:af:97:c0:3b:09:
- 1c:8f:ce:72:96:3d:33:56:70:bc:96:cb:d8:d5:7d:20:9a:83:
- 9f:1a:dc:39:f1:c5:72:a3:11:03:fd:3b:42:52:29:db:e8:01:
- f7:9b:5e:8c:d6:8d:86:4e:19:fa:bc:1c:be:c5:21:a5:87:9e:
- 78:2e:36:db:09:71:a3:72:34:f8:6c:e3:06:09:f2:5e:56:a5:
- d3:dd:98:fa:d4:e6:06:f4:f0:b6:20:63:4b:ea:29:bd:aa:82:
- 66:1e:fb:81:aa:a7:37:ad:13:18:e6:92:c3:81:c1:33:bb:88:
- 1e:a1:e7:e2:b4:bd:31:6c:0e:51:3d:6f:fb:96:56:80:e2:36:
- 17:d1:dc:e4
-----BEGIN CERTIFICATE-----
MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
@@ -8733,66 +2426,6 @@ S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
TC TrustCenter Universal CA I
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 1d:a2:00:01:00:02:ec:b7:60:80:78:8d:b6:06
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA I
- Validity
- Not Before: Mar 22 15:54:28 2006 GMT
- Not After : Dec 31 22:59:59 2025 GMT
- Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA I
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a4:77:23:96:44:af:90:f4:31:a7:10:f4:26:87:
- 9c:f3:38:d9:0f:5e:de:cf:41:e8:31:ad:c6:74:91:
- 24:96:78:1e:09:a0:9b:9a:95:4a:4a:f5:62:7c:02:
- a8:ca:ac:fb:5a:04:76:39:de:5f:f1:f9:b3:bf:f3:
- 03:58:55:d2:aa:b7:e3:04:22:d1:f8:94:da:22:08:
- 00:8d:d3:7c:26:5d:cc:77:79:e7:2c:78:39:a8:26:
- 73:0e:a2:5d:25:69:85:4f:55:0e:9a:ef:c6:b9:44:
- e1:57:3d:df:1f:54:22:e5:6f:65:aa:33:84:3a:f3:
- ce:7a:be:55:97:ae:8d:12:0f:14:33:e2:50:70:c3:
- 49:87:13:bc:51:de:d7:98:12:5a:ef:3a:83:33:92:
- 06:75:8b:92:7c:12:68:7b:70:6a:0f:b5:9b:b6:77:
- 5b:48:59:9d:e4:ef:5a:ad:f3:c1:9e:d4:d7:45:4e:
- ca:56:34:21:bc:3e:17:5b:6f:77:0c:48:01:43:29:
- b0:dd:3f:96:6e:e6:95:aa:0c:c0:20:b6:fd:3e:36:
- 27:9c:e3:5c:cf:4e:81:dc:19:bb:91:90:7d:ec:e6:
- 97:04:1e:93:cc:22:49:d7:97:86:b6:13:0a:3c:43:
- 23:77:7e:f0:dc:e6:cd:24:1f:3b:83:9b:34:3a:83:
- 34:e3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Authority Key Identifier:
- keyid:92:A4:75:2C:A4:9E:BE:81:44:EB:79:FC:8A:C5:95:A5:EB:10:75:73
-
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 92:A4:75:2C:A4:9E:BE:81:44:EB:79:FC:8A:C5:95:A5:EB:10:75:73
- Signature Algorithm: sha1WithRSAEncryption
- 28:d2:e0:86:d5:e6:f8:7b:f0:97:dc:22:6b:3b:95:14:56:0f:
- 11:30:a5:9a:4f:3a:b0:3a:e0:06:cb:65:f5:ed:c6:97:27:fe:
- 25:f2:57:e6:5e:95:8c:3e:64:60:15:5a:7f:2f:0d:01:c5:b1:
- 60:fd:45:35:cf:f0:b2:bf:06:d9:ef:5a:be:b3:62:21:b4:d7:
- ab:35:7c:53:3e:a6:27:f1:a1:2d:da:1a:23:9d:cc:dd:ec:3c:
- 2d:9e:27:34:5d:0f:c2:36:79:bc:c9:4a:62:2d:ed:6b:d9:7d:
- 41:43:7c:b6:aa:ca:ed:61:b1:37:82:15:09:1a:8a:16:30:d8:
- ec:c9:d6:47:72:78:4b:10:46:14:8e:5f:0e:af:ec:c7:2f:ab:
- 10:d7:b6:f1:6e:ec:86:b2:c2:e8:0d:92:73:dc:a2:f4:0f:3a:
- bf:61:23:10:89:9c:48:40:6e:70:00:b3:d3:ba:37:44:58:11:
- 7a:02:6a:88:f0:37:34:f0:19:e9:ac:d4:65:73:f6:69:8c:64:
- 94:3a:79:85:29:b0:16:2b:0c:82:3f:06:9c:c7:fd:10:2b:9e:
- 0f:2c:b6:9e:e3:15:bf:d9:36:1c:ba:25:1a:52:3d:1a:ec:22:
- 0c:1c:e0:a4:a2:3d:f0:e8:39:cf:81:c0:7b:ed:5d:1f:6f:c5:
- d0:0b:d7:98
-----BEGIN CERTIFICATE-----
MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
@@ -8819,62 +2452,6 @@ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
Deutsche Telekom Root CA 2
==========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 38 (0x26)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DE, O=Deutsche Telekom AG, OU=T-TeleSec Trust Center, CN=Deutsche Telekom Root CA 2
- Validity
- Not Before: Jul 9 12:11:00 1999 GMT
- Not After : Jul 9 23:59:00 2019 GMT
- Subject: C=DE, O=Deutsche Telekom AG, OU=T-TeleSec Trust Center, CN=Deutsche Telekom Root CA 2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ab:0b:a3:35:e0:8b:29:14:b1:14:85:af:3c:10:
- e4:39:6f:35:5d:4a:ae:dd:ea:61:8d:95:49:f4:6f:
- 64:a3:1a:60:66:a4:a9:40:22:84:d9:d4:a5:e5:78:
- 93:0e:68:01:ad:b9:4d:5c:3a:ce:d3:b8:a8:42:40:
- df:cf:a3:ba:82:59:6a:92:1b:ac:1c:9a:da:08:2b:
- 25:27:f9:69:23:47:f1:e0:eb:2c:7a:9b:f5:13:02:
- d0:7e:34:7c:c2:9e:3c:00:59:ab:f5:da:0c:f5:32:
- 3c:2b:ac:50:da:d6:c3:de:83:94:ca:a8:0c:99:32:
- 0e:08:48:56:5b:6a:fb:da:e1:58:58:01:49:5f:72:
- 41:3c:15:06:01:8e:5d:ad:aa:b8:93:b4:cd:9e:eb:
- a7:e8:6a:2d:52:34:db:3a:ef:5c:75:51:da:db:f3:
- 31:f9:ee:71:98:32:c4:54:15:44:0c:f9:9b:55:ed:
- ad:df:18:08:a0:a3:86:8a:49:ee:53:05:8f:19:4c:
- d5:de:58:79:9b:d2:6a:1c:42:ab:c5:d5:a7:cf:68:
- 0f:96:e4:e1:61:98:76:61:c8:91:7c:d6:3e:00:e2:
- 91:50:87:e1:9d:0a:e6:ad:97:d2:1d:c6:3a:7d:cb:
- bc:da:03:34:d5:8e:5b:01:f5:6a:07:b7:16:b6:6e:
- 4a:7f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 31:C3:79:1B:BA:F5:53:D7:17:E0:89:7A:2D:17:6C:0A:B3:2B:9D:33
- X509v3 Basic Constraints:
- CA:TRUE, pathlen:5
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 94:64:59:ad:39:64:e7:29:eb:13:fe:5a:c3:8b:13:57:c8:04:
- 24:f0:74:77:c0:60:e3:67:fb:e9:89:a6:83:bf:96:82:7c:6e:
- d4:c3:3d:ef:9e:80:6e:bb:29:b4:98:7a:b1:3b:54:eb:39:17:
- 47:7e:1a:8e:0b:fc:1f:31:59:31:04:b2:ce:17:f3:2c:c7:62:
- 36:55:e2:22:d8:89:55:b4:98:48:aa:64:fa:d6:1c:36:d8:44:
- 78:5a:5a:23:3a:57:97:f5:7a:30:4f:ae:9f:6a:4c:4b:2b:8e:
- a0:03:e3:3e:e0:a9:d4:d2:7b:d2:b3:a8:e2:72:3c:ad:9e:ff:
- 80:59:e4:9b:45:b4:f6:3b:b0:cd:39:19:98:32:e5:ea:21:61:
- 90:e4:31:21:8e:34:b1:f7:2f:35:4a:85:10:da:e7:8a:37:21:
- be:59:63:e0:f2:85:88:31:53:d4:54:14:85:70:79:f4:2e:06:
- 77:27:75:2f:1f:b8:8a:f9:fe:c5:ba:d8:36:e4:83:ec:e7:65:
- b7:bf:63:5a:f3:46:af:81:94:37:d4:41:8c:d6:23:d6:1e:cf:
- f5:68:1b:44:63:a2:5a:ba:a7:35:59:a1:e5:70:05:9b:0e:23:
- 57:99:94:0a:6d:ba:39:63:28:86:92:f3:18:84:d8:fb:d1:cf:
- 05:56:64:57
-----BEGIN CERTIFICATE-----
MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
@@ -8898,159 +2475,8 @@ xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
Cm26OWMohpLzGITY+9HPBVZkVw==
-----END CERTIFICATE-----
-ComSign CA
-==========
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 14:13:96:83:14:55:8c:ea:7b:63:e5:fc:34:87:77:44
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=ComSign CA, O=ComSign, C=IL
- Validity
- Not Before: Mar 24 11:32:18 2004 GMT
- Not After : Mar 19 15:02:18 2029 GMT
- Subject: CN=ComSign CA, O=ComSign, C=IL
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:f0:e4:54:69:2b:d3:c7:8f:6a:44:e4:7e:58:27:
- f8:0b:d0:e4:94:12:8a:f1:1b:38:38:2f:1f:31:9c:
- 06:d4:2c:a7:de:0b:2a:ae:1a:a0:e3:9e:6a:bf:9f:
- 3c:c7:6e:a2:f9:8b:64:6c:3a:ad:85:55:51:54:a5:
- 38:55:b8:ab:83:04:f2:3f:64:36:f7:c0:8d:43:43:
- 6a:66:d1:f7:17:2a:d5:ef:36:fa:30:10:42:d7:53:
- cd:f9:fa:33:73:4c:b3:e9:84:20:8a:d6:41:27:35:
- e4:38:fa:94:9b:b8:7a:e4:79:1f:33:fb:1b:d8:21:
- 09:28:7c:4d:18:69:5e:64:8a:7a:19:93:ca:7e:ec:
- f3:72:e7:37:07:58:59:28:ac:42:f9:c5:ff:cd:3f:
- e7:a5:fa:38:b1:d0:0c:c7:d9:52:1a:53:d6:81:cc:
- 42:7a:35:5b:ed:4b:3a:7a:f6:b5:8e:cc:ff:0f:7c:
- e4:60:36:87:2f:ad:f0:a1:25:7d:ff:d2:4b:11:88:
- 70:54:a6:41:a8:67:53:52:42:5e:e4:34:9e:e4:be:
- a3:ec:aa:62:5d:dd:c3:4c:a6:82:41:e4:33:0b:ac:
- c9:33:0f:64:82:57:2a:fd:0c:ad:36:e1:0c:ae:4b:
- c5:ef:3b:99:d9:23:b3:5b:5d:b4:57:ec:74:70:0c:
- 2a:4f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://fedir.comsign.co.il/crl/ComSignCA.crl
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:4B:01:9B:3E:56:1A:65:36:76:CB:7B:97:AA:92:05:EE:32:E7:28:31
-
- X509v3 Subject Key Identifier:
- 4B:01:9B:3E:56:1A:65:36:76:CB:7B:97:AA:92:05:EE:32:E7:28:31
- Signature Algorithm: sha1WithRSAEncryption
- d0:d9:a5:7e:fe:29:60:45:9d:7e:83:cf:6e:bc:47:6e:f5:1a:
- 9e:54:76:42:71:b4:3c:58:3f:2d:40:25:42:f6:81:9c:f1:89:
- 10:c8:0e:aa:78:4f:38:09:57:b0:3c:c0:08:fc:35:8e:f1:48:
- 51:8d:0c:71:74:ba:84:c4:d7:72:9b:84:7c:38:4e:64:06:27:
- 2a:e1:a7:b5:ec:08:99:b4:0a:0d:d4:85:73:c8:12:e1:35:ed:
- f1:05:31:1d:73:99:0c:eb:96:ca:dd:d3:e6:85:aa:f0:8a:fb:
- 75:c1:f2:09:3c:65:65:64:f3:4c:d8:ad:cb:88:69:f3:e4:83:
- b7:0c:bd:17:5a:96:17:ca:5b:ff:ad:bb:1c:e9:2d:84:80:d8:
- 21:be:85:52:d9:d4:74:b9:69:85:ba:4d:ed:28:32:eb:f9:61:
- 4a:e4:c4:36:1e:19:dc:6f:84:11:1f:95:f5:83:28:18:a8:33:
- 92:43:27:dd:5d:13:04:45:4f:87:d5:46:cd:3d:a8:ba:f0:f3:
- b8:56:24:45:eb:37:c7:e1:76:4f:72:39:18:df:7e:74:72:c7:
- 73:2d:39:ea:60:e6:ad:11:a2:56:87:7b:c3:68:9a:fe:f8:8c:
- 70:a8:df:65:32:f4:a4:40:8c:a1:c2:44:03:0e:94:00:67:a0:
- 71:00:82:48
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
-MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
-EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
-CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
-8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
-98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
-2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
-ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
-Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
-o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
-ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
-AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
-AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
-foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
-cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
-8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
-hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
-Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
-
ComSign Secured CA
==================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- c7:28:47:09:b3:b8:6c:45:8c:1d:fa:24:f5:36:4e:e9
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=ComSign Secured CA, O=ComSign, C=IL
- Validity
- Not Before: Mar 24 11:37:20 2004 GMT
- Not After : Mar 16 15:04:56 2029 GMT
- Subject: CN=ComSign Secured CA, O=ComSign, C=IL
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c6:b5:68:5f:1d:94:15:c3:a4:08:55:2d:e3:a0:
- 57:7a:ef:e9:74:2a:bb:b9:7c:57:49:1a:11:5e:4f:
- 29:87:0c:48:d6:6a:e7:8f:d4:7e:57:24:b9:06:89:
- e4:1c:3c:ea:ac:e3:da:21:80:73:21:0a:ef:79:98:
- 6c:1f:08:ff:a1:50:7d:f2:98:1b:c9:54:6f:3e:a5:
- 28:ec:21:04:0f:45:bb:07:3d:a1:c0:fa:2a:98:1d:
- 4e:06:93:fb:f5:88:3b:ab:5f:cb:16:bf:e6:f3:9e:
- 4a:87:ed:19:ea:c2:9f:43:e4:f1:81:a5:7f:10:4f:
- 3e:d1:4a:62:ad:53:1b:cb:83:ff:07:65:a5:92:2d:
- 66:a9:5b:b8:5a:f4:1d:b4:21:91:4a:17:7b:9e:32:
- fe:56:24:39:b2:54:84:43:f5:84:c2:d8:bc:41:90:
- cc:9d:d6:68:da:e9:82:50:a9:3b:68:cf:b5:5d:02:
- 94:60:16:b1:43:d9:43:5d:dd:5d:87:6e:ea:bb:b3:
- c9:6b:f6:03:94:09:70:de:16:11:7a:2b:e8:76:8f:
- 49:10:98:77:b9:63:5c:8b:33:97:75:f6:0b:8c:b2:
- ab:5b:de:74:20:25:3f:e3:f3:11:f9:87:68:86:35:
- 71:c3:1d:8c:2d:eb:e5:1a:ac:0f:73:d5:82:59:40:
- 80:d3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:TRUE
- X509v3 CRL Distribution Points:
- URI:http://fedir.comsign.co.il/crl/ComSignSecuredCA.crl
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Authority Key Identifier:
- keyid:C1:4B:ED:70:B6:F7:3E:7C:00:3B:00:8F:C7:3E:0E:45:9F:1E:5D:EC
-
- X509v3 Subject Key Identifier:
- C1:4B:ED:70:B6:F7:3E:7C:00:3B:00:8F:C7:3E:0E:45:9F:1E:5D:EC
- Signature Algorithm: sha1WithRSAEncryption
- 16:cf:ee:92:13:50:ab:7b:14:9e:33:b6:42:20:6a:d4:15:bd:
- 09:ab:fc:72:e8:ef:47:7a:90:ac:51:c1:64:4e:e9:88:bd:43:
- 45:81:e3:66:23:3f:12:86:4d:19:e4:05:b0:e6:37:c2:8d:da:
- 06:28:c9:0f:89:a4:53:a9:75:3f:b0:96:fb:ab:4c:33:55:f9:
- 78:26:46:6f:1b:36:98:fb:42:76:c1:82:b9:8e:de:fb:45:f9:
- 63:1b:62:3b:39:06:ca:77:7a:a8:3c:09:cf:6c:36:3d:0f:0a:
- 45:4b:69:16:1a:45:7d:33:03:65:f9:52:71:90:26:95:ac:4c:
- 0c:f5:8b:93:3f:cc:75:74:85:98:ba:ff:62:7a:4d:1f:89:fe:
- ae:bd:94:00:99:bf:11:a5:dc:e0:79:c5:16:0b:7d:02:61:1d:
- ea:85:f9:02:15:4f:e7:5a:89:4e:14:6f:e3:37:4b:85:f5:c1:
- 3c:61:e0:fd:05:41:b2:92:7f:c3:1d:a0:d0:ae:52:64:60:6b:
- 18:c6:26:9c:d8:f5:64:e4:36:1a:62:9f:8a:0f:3e:ff:6d:4e:
- 19:56:4e:20:91:6c:9f:34:33:3a:34:57:50:3a:6f:81:5e:06:
- c6:f5:3e:7c:4e:8e:2b:ce:65:06:2e:5d:d2:2a:53:74:5e:d3:
- 6e:27:9e:8f
-----BEGIN CERTIFICATE-----
MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
@@ -9076,69 +2502,6 @@ OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
Cybertrust Global Root
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 04:00:00:00:00:01:0f:85:aa:2d:48
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: O=Cybertrust, Inc, CN=Cybertrust Global Root
- Validity
- Not Before: Dec 15 08:00:00 2006 GMT
- Not After : Dec 15 08:00:00 2021 GMT
- Subject: O=Cybertrust, Inc, CN=Cybertrust Global Root
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:f8:c8:bc:bd:14:50:66:13:ff:f0:d3:79:ec:23:
- f2:b7:1a:c7:8e:85:f1:12:73:a6:19:aa:10:db:9c:
- a2:65:74:5a:77:3e:51:7d:56:f6:dc:23:b6:d4:ed:
- 5f:58:b1:37:4d:d5:49:0e:6e:f5:6a:87:d6:d2:8c:
- d2:27:c6:e2:ff:36:9f:98:65:a0:13:4e:c6:2a:64:
- 9b:d5:90:12:cf:14:06:f4:3b:e3:d4:28:be:e8:0e:
- f8:ab:4e:48:94:6d:8e:95:31:10:5c:ed:a2:2d:bd:
- d5:3a:6d:b2:1c:bb:60:c0:46:4b:01:f5:49:ae:7e:
- 46:8a:d0:74:8d:a1:0c:02:ce:ee:fc:e7:8f:b8:6b:
- 66:f3:7f:44:00:bf:66:25:14:2b:dd:10:30:1d:07:
- 96:3f:4d:f6:6b:b8:8f:b7:7b:0c:a5:38:eb:de:47:
- db:d5:5d:39:fc:88:a7:f3:d7:2a:74:f1:e8:5a:a2:
- 3b:9f:50:ba:a6:8c:45:35:c2:50:65:95:dc:63:82:
- ef:dd:bf:77:4d:9c:62:c9:63:73:16:d0:29:0f:49:
- a9:48:f0:b3:aa:b7:6c:c5:a7:30:39:40:5d:ae:c4:
- e2:5d:26:53:f0:ce:1c:23:08:61:a8:94:19:ba:04:
- 62:40:ec:1f:38:70:77:12:06:71:a7:30:18:5d:25:
- 27:a5
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57
- X509v3 CRL Distribution Points:
- URI:http://www2.public-trust.com/crl/ct/ctroot.crl
-
- X509v3 Authority Key Identifier:
- keyid:B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57
-
- Signature Algorithm: sha1WithRSAEncryption
- 56:ef:0a:23:a0:54:4e:95:97:c9:f8:89:da:45:c1:d4:a3:00:
- 25:f4:1f:13:ab:b7:a3:85:58:69:c2:30:ad:d8:15:8a:2d:e3:
- c9:cd:81:5a:f8:73:23:5a:a7:7c:05:f3:fd:22:3b:0e:d1:06:
- c4:db:36:4c:73:04:8e:e5:b0:22:e4:c5:f3:2e:a5:d9:23:e3:
- b8:4e:4a:20:a7:6e:02:24:9f:22:60:67:7b:8b:1d:72:09:c5:
- 31:5c:e9:79:9f:80:47:3d:ad:a1:0b:07:14:3d:47:ff:03:69:
- 1a:0c:0b:44:e7:63:25:a7:7f:b2:c9:b8:76:84:ed:23:f6:7d:
- 07:ab:45:7e:d3:df:b3:bf:e9:8a:b6:cd:a8:a2:67:2b:52:d5:
- b7:65:f0:39:4c:63:a0:91:79:93:52:0f:54:dd:83:bb:9f:d1:
- 8f:a7:53:73:c3:cb:ff:30:ec:7c:04:b8:d8:44:1f:93:5f:71:
- 09:22:b7:6e:3e:ea:1c:03:4e:9d:1a:20:61:fb:81:37:ec:5e:
- fc:0a:45:ab:d7:e7:17:55:d0:a0:ea:60:9b:a6:f6:e3:8c:5b:
- 29:c2:06:60:14:9d:2d:97:4c:a9:93:15:9d:61:c4:01:5f:48:
- d6:58:bd:56:31:12:4e:11:c8:21:e0:b3:11:91:65:db:b4:a6:
- 88:38:ce:55
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
@@ -9164,95 +2527,6 @@ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
ePKI Root Certification Authority
=================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 15:c8:bd:65:47:5c:af:b8:97:00:5e:e4:06:d2:bc:9d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=TW, O=Chunghwa Telecom Co., Ltd., OU=ePKI Root Certification Authority
- Validity
- Not Before: Dec 20 02:31:27 2004 GMT
- Not After : Dec 20 02:31:27 2034 GMT
- Subject: C=TW, O=Chunghwa Telecom Co., Ltd., OU=ePKI Root Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:e1:25:0f:ee:8d:db:88:33:75:67:cd:ad:1f:7d:
- 3a:4e:6d:9d:d3:2f:14:f3:63:74:cb:01:21:6a:37:
- ea:84:50:07:4b:26:5b:09:43:6c:21:9e:6a:c8:d5:
- 03:f5:60:69:8f:cc:f0:22:e4:1f:e7:f7:6a:22:31:
- b7:2c:15:f2:e0:fe:00:6a:43:ff:87:65:c6:b5:1a:
- c1:a7:4c:6d:22:70:21:8a:31:f2:97:74:89:09:12:
- 26:1c:9e:ca:d9:12:a2:95:3c:da:e9:67:bf:08:a0:
- 64:e3:d6:42:b7:45:ef:97:f4:f6:f5:d7:b5:4a:15:
- 02:58:7d:98:58:4b:60:bc:cd:d7:0d:9a:13:33:53:
- d1:61:f9:7a:d5:d7:78:b3:9a:33:f7:00:86:ce:1d:
- 4d:94:38:af:a8:ec:78:51:70:8a:5c:10:83:51:21:
- f7:11:3d:34:86:5e:e5:48:cd:97:81:82:35:4c:19:
- ec:65:f6:6b:c5:05:a1:ee:47:13:d6:b3:21:27:94:
- 10:0a:d9:24:3b:ba:be:44:13:46:30:3f:97:3c:d8:
- d7:d7:6a:ee:3b:38:e3:2b:d4:97:0e:b9:1b:e7:07:
- 49:7f:37:2a:f9:77:78:cf:54:ed:5b:46:9d:a3:80:
- 0e:91:43:c1:d6:5b:5f:14:ba:9f:a6:8d:24:47:40:
- 59:bf:72:38:b2:36:6c:37:ff:99:d1:5d:0e:59:0a:
- ab:69:f7:c0:b2:04:45:7a:54:00:ae:be:53:f6:b5:
- e7:e1:f8:3c:a3:31:d2:a9:fe:21:52:64:c5:a6:67:
- f0:75:07:06:94:14:81:55:c6:27:e4:01:8f:17:c1:
- 6a:71:d7:be:4b:fb:94:58:7d:7e:11:33:b1:42:f7:
- 62:6c:18:d6:cf:09:68:3e:7f:6c:f6:1e:8f:62:ad:
- a5:63:db:09:a7:1f:22:42:41:1e:6f:99:8a:3e:d7:
- f9:3f:40:7a:79:b0:a5:01:92:d2:9d:3d:08:15:a5:
- 10:01:2d:b3:32:76:a8:95:0d:b3:7a:9a:fb:07:10:
- 78:11:6f:e1:8f:c7:ba:0f:25:1a:74:2a:e5:1c:98:
- 41:99:df:21:87:e8:95:06:6a:0a:b3:6a:47:76:65:
- f6:3a:cf:8f:62:17:19:7b:0a:28:cd:1a:d2:83:1e:
- 21:c7:2c:bf:be:ff:61:68:b7:67:1b:bb:78:4d:8d:
- ce:67:e5:e4:c1:8e:b7:23:66:e2:9d:90:75:34:98:
- a9:36:2b:8a:9a:94:b9:9d:ec:cc:8a:b1:f8:25:89:
- 5c:5a:b6:2f:8c:1f:6d:79:24:a7:52:68:c3:84:35:
- e2:66:8d:63:0e:25:4d:d5:19:b2:e6:79:37:a7:22:
- 9d:54:31
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 1E:0C:F7:B6:67:F2:E1:92:26:09:45:C0:55:39:2E:77:3F:42:4A:A2
- X509v3 Basic Constraints:
- CA:TRUE
- setCext-hashedRoot:
- 0/0-...0...+......0...g*.....E...
-V|.[x....S.....
- Signature Algorithm: sha1WithRSAEncryption
- 09:b3:83:53:59:01:3e:95:49:b9:f1:81:ba:f9:76:20:23:b5:
- 27:60:74:d4:6a:99:34:5e:6c:00:53:d9:9f:f2:a6:b1:24:07:
- 44:6a:2a:c6:a5:8e:78:12:e8:47:d9:58:1b:13:2a:5e:79:9b:
- 9f:0a:2a:67:a6:25:3f:06:69:56:73:c3:8a:66:48:fb:29:81:
- 57:74:06:ca:9c:ea:28:e8:38:67:26:2b:f1:d5:b5:3f:65:93:
- f8:36:5d:8e:8d:8d:40:20:87:19:ea:ef:27:c0:3d:b4:39:0f:
- 25:7b:68:50:74:55:9c:0c:59:7d:5a:3d:41:94:25:52:08:e0:
- 47:2c:15:31:19:d5:bf:07:55:c6:bb:12:b5:97:f4:5f:83:85:
- ba:71:c1:d9:6c:81:11:76:0a:0a:b0:bf:82:97:f7:ea:3d:fa:
- fa:ec:2d:a9:28:94:3b:56:dd:d2:51:2e:ae:c0:bd:08:15:8c:
- 77:52:34:96:d6:9b:ac:d3:1d:8e:61:0f:35:7b:9b:ae:39:69:
- 0b:62:60:40:20:36:8f:af:fb:36:ee:2d:08:4a:1d:b8:bf:9b:
- 5c:f8:ea:a5:1b:a0:73:a6:d8:f8:6e:e0:33:04:5f:68:aa:27:
- 87:ed:d9:c1:90:9c:ed:bd:e3:6a:35:af:63:df:ab:18:d9:ba:
- e6:e9:4a:ea:50:8a:0f:61:93:1e:e2:2d:19:e2:30:94:35:92:
- 5d:0e:b6:07:af:19:80:8f:47:90:51:4b:2e:4d:dd:85:e2:d2:
- 0a:52:0a:17:9a:fc:1a:b0:50:02:e5:01:a3:63:37:21:4c:44:
- c4:9b:51:99:11:0e:73:9c:06:8f:54:2e:a7:28:5e:44:39:87:
- 56:2d:37:bd:85:44:94:e1:0c:4b:2c:9c:c3:92:85:34:61:cb:
- 0f:b8:9b:4a:43:52:fe:34:3a:7d:b8:e9:29:dc:76:a9:c8:30:
- f8:14:71:80:c6:1e:36:48:74:22:41:5c:87:82:e8:18:71:8b:
- 41:89:44:e7:7e:58:5b:a8:b8:8d:13:e9:a7:6c:c3:47:ed:b3:
- 1a:9d:62:ae:8d:82:ea:94:9e:dd:59:10:c3:ad:dd:e2:4d:e3:
- 31:d5:c7:ec:e8:f2:b0:fe:92:1e:16:0a:1a:fc:d9:f3:f8:27:
- b6:c9:be:1d:b4:6c:64:90:7f:f4:e4:c4:5b:d7:37:ae:42:0e:
- dd:a4:1a:6f:7c:88:54:c5:16:6e:e1:7a:68:2e:f8:3a:bf:0d:
- a4:3c:89:3b:78:a7:4e:63:83:04:21:08:67:8d:f2:82:49:d0:
- 5b:fd:b1:cd:0f:83:84:d4:3e:20:85:f7:4a:3d:2b:9c:fd:2a:
- 0a:09:4d:ea:81:f8:11:9c
-----BEGIN CERTIFICATE-----
MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
@@ -9289,62 +2563,6 @@ hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
=============================================================================================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 17 (0x11)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=TR, L=Gebze - Kocaeli, O=T\xC3\xBCrkiye Bilimsel ve Teknolojik Ara\xC5\x9Ft\xC4\xB1rma Kurumu - T\xC3\x9CB\xC4\xB0TAK, OU=Ulusal Elektronik ve Kriptoloji Ara\xC5\x9Ft\xC4\xB1rma Enstit\xC3\xBCs\xC3\xBC - UEKAE, OU=Kamu Sertifikasyon Merkezi, CN=T\xC3\x9CB\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1 - S\xC3\xBCr\xC3\xBCm 3
- Validity
- Not Before: Aug 24 11:37:07 2007 GMT
- Not After : Aug 21 11:37:07 2017 GMT
- Subject: C=TR, L=Gebze - Kocaeli, O=T\xC3\xBCrkiye Bilimsel ve Teknolojik Ara\xC5\x9Ft\xC4\xB1rma Kurumu - T\xC3\x9CB\xC4\xB0TAK, OU=Ulusal Elektronik ve Kriptoloji Ara\xC5\x9Ft\xC4\xB1rma Enstit\xC3\xBCs\xC3\xBC - UEKAE, OU=Kamu Sertifikasyon Merkezi, CN=T\xC3\x9CB\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1 - S\xC3\xBCr\xC3\xBCm 3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:8a:6d:4b:ff:10:88:3a:c3:f6:7e:94:e8:ea:20:
- 64:70:ae:21:81:be:3a:7b:3c:db:f1:1d:52:7f:59:
- fa:f3:22:4c:95:a0:90:bc:48:4e:11:ab:fb:b7:b5:
- 8d:7a:83:28:8c:26:46:d8:4e:95:40:87:61:9f:c5:
- 9e:6d:81:87:57:6c:8a:3b:b4:66:ea:cc:40:fc:e3:
- aa:6c:b2:cb:01:db:32:bf:d2:eb:85:cf:a1:0d:55:
- c3:5b:38:57:70:b8:75:c6:79:d1:14:30:ed:1b:58:
- 5b:6b:ef:35:f2:a1:21:4e:c5:ce:7c:99:5f:6c:b9:
- b8:22:93:50:a7:cd:4c:70:6a:be:6a:05:7f:13:9c:
- 2b:1e:ea:fe:47:ce:04:a5:6f:ac:93:2e:7c:2b:9f:
- 9e:79:13:91:e8:ea:9e:ca:38:75:8e:62:b0:95:93:
- 2a:e5:df:e9:5e:97:6e:20:5f:5f:84:7a:44:39:19:
- 40:1c:ba:55:2b:fb:30:b2:81:ef:84:e3:dc:ec:98:
- 38:39:03:85:08:a9:54:03:05:29:f0:c9:8f:8b:ea:
- 0b:86:65:19:11:d3:e9:09:23:de:68:93:03:c9:36:
- 1c:21:6e:ce:8c:66:f1:99:30:d8:d7:b3:c3:1d:f8:
- 81:2e:a8:bd:82:0b:66:fe:82:cb:e1:e0:1a:82:c3:
- 40:81
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- BD:88:87:C9:8F:F6:A4:0A:0B:AA:EB:C5:FE:91:23:9D:AB:4A:8A:32
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 1d:7c:fa:49:8f:34:e9:b7:26:92:16:9a:05:74:e7:4b:d0:6d:
- 39:6c:c3:26:f6:ce:b8:31:bc:c4:df:bc:2a:f8:37:91:18:dc:
- 04:c8:64:99:2b:18:6d:80:03:59:c9:ae:f8:58:d0:3e:ed:c3:
- 23:9f:69:3c:86:38:1c:9e:ef:da:27:78:d1:84:37:71:8a:3c:
- 4b:39:cf:7e:45:06:d6:2d:d8:8a:4d:78:12:d6:ad:c2:d3:cb:
- d2:d0:41:f3:26:36:4a:9b:95:6c:0c:ee:e5:d1:43:27:66:c1:
- 88:f7:7a:b3:20:6c:ea:b0:69:2b:c7:20:e8:0c:03:c4:41:05:
- 99:e2:3f:e4:6b:f8:a0:86:81:c7:84:c6:1f:d5:4b:81:12:b2:
- 16:21:2c:13:a1:80:b2:5e:0c:4a:13:9e:20:d8:62:40:ab:90:
- ea:64:4a:2f:ac:0d:01:12:79:45:a8:2f:87:19:68:c8:e2:85:
- c7:30:b2:75:f9:38:3f:b2:c0:93:b4:6b:e2:03:44:ce:67:a0:
- df:89:d6:ad:8c:76:a3:13:c3:94:61:2b:6b:d9:6c:c1:07:0a:
- 22:07:85:6c:85:24:46:a9:be:3f:8b:78:84:82:7e:24:0c:9d:
- fd:81:37:e3:25:a8:ed:36:4e:95:2c:c9:9c:90:da:ec:a9:42:
- 3c:ad:b6:02
-----BEGIN CERTIFICATE-----
MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
@@ -9378,62 +2596,6 @@ yZyQ2uypQjyttgI=
Buypass Class 2 CA 1
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 CA 1
- Validity
- Not Before: Oct 13 10:25:09 2006 GMT
- Not After : Oct 13 10:25:09 2016 GMT
- Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 CA 1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:8b:3c:07:45:d8:f6:df:e6:c7:ca:ba:8d:43:c5:
- 47:8d:b0:5a:c1:38:db:92:84:1c:af:13:d4:0f:6f:
- 36:46:20:c4:2e:cc:71:70:34:a2:34:d3:37:2e:d8:
- dd:3a:77:2f:c0:eb:29:e8:5c:d2:b5:a9:91:34:87:
- 22:59:fe:cc:db:e7:99:af:96:c1:a8:c7:40:dd:a5:
- 15:8c:6e:c8:7c:97:03:cb:e6:20:f2:d7:97:5f:31:
- a1:2f:37:d2:be:ee:be:a9:ad:a8:4c:9e:21:66:43:
- 3b:a8:bc:f3:09:a3:38:d5:59:24:c1:c2:47:76:b1:
- 88:5c:82:3b:bb:2b:a6:04:d7:8c:07:8f:cd:d5:41:
- 1d:f0:ae:b8:29:2c:94:52:60:34:94:3b:da:e0:38:
- d1:9d:33:3e:15:f4:93:32:c5:00:da:b5:29:66:0e:
- 3a:78:0f:21:52:5f:02:e5:92:7b:25:d3:92:1e:2f:
- 15:9d:81:e4:9d:8e:e8:ef:89:ce:14:4c:54:1d:1c:
- 81:12:4d:70:a8:be:10:05:17:7e:1f:d1:b8:57:55:
- ed:cd:bb:52:c2:b0:1e:78:c2:4d:36:68:cb:56:26:
- c1:52:c1:bd:76:f7:58:d5:72:7e:1f:44:76:bb:00:
- 89:1d:16:9d:51:35:ef:4d:c2:56:ef:6b:e0:8c:3b:
- 0d:e9
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 3F:8D:9A:59:8B:FC:7B:7B:9C:A3:AF:38:B0:39:ED:90:71:80:D6:C8
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 15:1a:7e:13:8a:b9:e8:07:a3:4b:27:32:b2:40:91:f2:21:d1:
- 64:85:be:63:6a:d2:cf:81:c2:15:d5:7a:7e:0c:29:ac:37:1e:
- 1c:7c:76:52:95:da:b5:7f:23:a1:29:77:65:c9:32:9d:a8:2e:
- 56:ab:60:76:ce:16:b4:8d:7f:78:c0:d5:99:51:83:7f:5e:d9:
- be:0c:a8:50:ed:22:c7:ad:05:4c:76:fb:ed:ee:1e:47:64:f6:
- f7:27:7d:5c:28:0f:45:c5:5c:62:5e:a6:9a:91:91:b7:53:17:
- 2e:dc:ad:60:9d:96:64:39:bd:67:68:b2:ae:05:cb:4d:e7:5f:
- 1f:57:86:d5:20:9c:28:fb:6f:13:38:f5:f6:11:92:f6:7d:99:
- 5e:1f:0c:e8:ab:44:24:29:72:40:3d:36:52:af:8c:58:90:73:
- c1:ec:61:2c:79:a1:ec:87:b5:3f:da:4d:d9:21:00:30:de:90:
- da:0e:d3:1a:48:a9:3e:85:0b:14:8b:8c:bc:41:9e:6a:f7:0e:
- 70:c0:35:f7:39:a2:5d:66:d0:7b:59:9f:a8:47:12:9a:27:23:
- a4:2d:8e:27:83:92:20:a1:d7:15:7f:f1:2e:18:ee:f4:48:7f:
- 2f:7f:f1:a1:18:b5:a1:0b:94:a0:62:20:32:9c:1d:f6:d4:ef:
- bf:4c:88:68
-----BEGIN CERTIFICATE-----
MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
@@ -9457,62 +2619,6 @@ LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
Buypass Class 3 CA 1
====================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 2 (0x2)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 CA 1
- Validity
- Not Before: May 9 14:13:03 2005 GMT
- Not After : May 9 14:13:03 2015 GMT
- Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 CA 1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a4:8e:d7:74:d9:29:64:de:5f:1f:87:80:91:ea:
- 4e:39:e6:19:c6:44:0b:80:d5:0b:af:53:07:8b:12:
- bd:e6:67:f0:02:b1:89:f6:60:8a:c4:5b:b0:42:d1:
- c0:21:a8:cb:e1:9b:ef:64:51:b6:a7:cf:15:f5:74:
- 80:68:04:90:a0:58:a2:e6:74:a6:53:53:55:48:63:
- 3f:92:56:dd:24:4e:8e:f8:ba:2b:ff:f3:34:8a:9e:
- 28:d7:34:9f:ac:2f:d6:0f:f1:a4:2f:bd:52:b2:49:
- 85:6d:39:35:f0:44:30:93:46:24:f3:b6:e7:53:fb:
- bc:61:af:a9:a3:14:fb:c2:17:17:84:6c:e0:7c:88:
- f8:c9:1c:57:2c:f0:3d:7e:94:bc:25:93:84:e8:9a:
- 00:9a:45:05:42:57:80:f4:4e:ce:d9:ae:39:f6:c8:
- 53:10:0c:65:3a:47:7b:60:c2:d6:fa:91:c9:c6:71:
- 6c:bd:91:87:3c:91:86:49:ab:f3:0f:a0:6c:26:76:
- 5e:1c:ac:9b:71:e5:8d:bc:9b:21:1e:9c:d6:38:7e:
- 24:80:15:31:82:96:b1:49:d3:62:37:5b:88:0c:0a:
- 62:34:fe:a7:48:7e:99:b1:30:8b:90:37:95:1c:a8:
- 1f:a5:2c:8d:f4:55:c8:db:dd:59:0a:c2:ad:78:a0:
- f4:8b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 38:14:E6:C8:F0:A9:A4:03:F4:4E:3E:22:A3:5B:F2:D6:E0:AD:40:74
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 01:67:a3:8c:c9:25:3d:13:63:5d:16:6f:ec:a1:3e:09:5c:91:
- 15:2a:2a:d9:80:21:4f:05:dc:bb:a5:89:ab:13:33:2a:9e:38:
- b7:8c:6f:02:72:63:c7:73:77:1e:09:06:ba:3b:28:7b:a4:47:
- c9:61:6b:08:08:20:fc:8a:05:8a:1f:bc:ba:c6:c2:fe:cf:6e:
- ec:13:33:71:67:2e:69:fa:a9:2c:3f:66:c0:12:59:4d:0b:54:
- 02:92:84:bb:db:12:ef:83:70:70:78:c8:53:fa:df:c6:c6:ff:
- dc:88:2f:07:c0:49:9d:32:57:60:d3:f2:f6:99:29:5f:e7:aa:
- 01:cc:ac:33:a8:1c:0a:bb:91:c4:03:a0:6f:b6:34:f9:86:d3:
- b3:76:54:98:f4:4a:81:b3:53:9d:4d:40:ec:e5:77:13:45:af:
- 5b:aa:1f:d8:2f:4c:82:7b:fe:2a:c4:58:bb:4f:fc:9e:fd:03:
- 65:1a:2a:0e:c3:a5:20:16:94:6b:79:a6:a2:12:b4:bb:1a:a4:
- 23:7a:5f:f0:ae:84:24:e4:f3:2b:fb:8a:24:a3:27:98:65:da:
- 30:75:76:fc:19:91:e8:db:eb:9b:3f:32:bf:40:97:07:26:ba:
- cc:f3:94:85:4a:7a:27:93:cf:90:42:d4:b8:5b:16:a6:e7:cb:
- 40:03:dd:79
-----BEGIN CERTIFICATE-----
MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
@@ -9536,97 +2642,6 @@ dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
==========================================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 4c:af:73:42:1c:8e:74:02
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, O=EBG Bili\xC5\x9Fim Teknolojileri ve Hizmetleri A.\xC5\x9E., C=TR
- Validity
- Not Before: Aug 17 00:21:09 2006 GMT
- Not After : Aug 14 00:31:09 2016 GMT
- Subject: CN=EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xC4\xB1c\xC4\xB1s\xC4\xB1, O=EBG Bili\xC5\x9Fim Teknolojileri ve Hizmetleri A.\xC5\x9E., C=TR
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:ee:a0:84:61:d0:3a:6a:66:10:32:d8:31:38:7f:
- a7:a7:e5:fd:a1:e1:fb:97:77:b8:71:96:e8:13:96:
- 46:83:4f:b6:f2:5f:72:56:6e:13:60:a5:01:91:e2:
- 5b:c5:cd:57:1f:77:63:51:ff:2f:3d:db:b9:3f:aa:
- a9:35:e7:79:d0:f5:d0:24:b6:21:ea:eb:23:94:fe:
- 29:bf:fb:89:91:0c:64:9a:05:4a:2b:cc:0c:ee:f1:
- 3d:9b:82:69:a4:4c:f8:9a:6f:e7:22:da:10:ba:5f:
- 92:fc:18:27:0a:a8:aa:44:fa:2e:2c:b4:fb:46:9a:
- 08:03:83:72:ab:88:e4:6a:72:c9:e5:65:1f:6e:2a:
- 0f:9d:b3:e8:3b:e4:0c:6e:7a:da:57:fd:d7:eb:79:
- 8b:5e:20:06:d3:76:0b:6c:02:95:a3:96:e4:cb:76:
- 51:d1:28:9d:a1:1a:fc:44:a2:4d:cc:7a:76:a8:0d:
- 3d:bf:17:4f:22:88:50:fd:ae:b6:ec:90:50:4a:5b:
- 9f:95:41:aa:ca:0f:b2:4a:fe:80:99:4e:a3:46:15:
- ab:f8:73:42:6a:c2:66:76:b1:0a:26:15:dd:93:92:
- ec:db:a9:5f:54:22:52:91:70:5d:13:ea:48:ec:6e:
- 03:6c:d9:dd:6c:fc:eb:0d:03:ff:a6:83:12:9b:f1:
- a9:93:0f:c5:26:4c:31:b2:63:99:61:72:e7:2a:64:
- 99:d2:b8:e9:75:e2:7c:a9:a9:9a:1a:aa:c3:56:db:
- 10:9a:3c:83:52:b6:7b:96:b7:ac:87:77:a8:b9:f2:
- 67:0b:94:43:b3:af:3e:73:fa:42:36:b1:25:c5:0a:
- 31:26:37:56:67:ba:a3:0b:7d:d6:f7:89:cd:67:a1:
- b7:3a:1e:66:4f:f6:a0:55:14:25:4c:2c:33:0d:a6:
- 41:8c:bd:04:31:6a:10:72:0a:9d:0e:2e:76:bd:5e:
- f3:51:89:8b:a8:3f:55:73:bf:db:3a:c6:24:05:96:
- 92:48:aa:4b:8d:2a:03:e5:57:91:10:f4:6a:28:15:
- 6e:47:77:84:5c:51:74:9f:19:e9:e6:1e:63:16:39:
- e3:11:15:e3:58:1a:44:bd:cb:c4:6c:66:d7:84:06:
- df:30:f4:37:a2:43:22:79:d2:10:6c:df:bb:e6:13:
- 11:fc:9d:84:0a:13:7b:f0:3b:d0:fc:a3:0a:d7:89:
- ea:96:7e:8d:48:85:1e:64:5f:db:54:a2:ac:d5:7a:
- 02:79:6b:d2:8a:f0:67:da:65:72:0d:14:70:e4:e9:
- 8e:78:8f:32:74:7c:57:f2:d6:d6:f4:36:89:1b:f8:
- 29:6c:8b:b9:f6:97:d1:a4:2e:aa:be:0b:19:c2:45:
- e9:70:5d
- Exponent: 40409 (0x9dd9)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- E7:CE:C6:4F:FC:16:67:96:FA:4A:A3:07:C1:04:A7:CB:6A:DE:DA:47
- X509v3 Authority Key Identifier:
- keyid:E7:CE:C6:4F:FC:16:67:96:FA:4A:A3:07:C1:04:A7:CB:6A:DE:DA:47
-
- Signature Algorithm: sha1WithRSAEncryption
- 9b:98:9a:5d:be:f3:28:23:76:c6:6c:f7:7f:e6:40:9e:c0:36:
- dc:95:0d:1d:ad:15:c5:36:d8:d5:39:ef:f2:1e:22:5e:b3:82:
- b4:5d:bb:4c:1a:ca:92:0d:df:47:24:1e:b3:24:da:91:88:e9:
- 83:70:dd:93:d7:e9:ba:b3:df:16:5a:3e:de:e0:c8:fb:d3:fd:
- 6c:29:f8:15:46:a0:68:26:cc:93:52:ae:82:01:93:90:ca:77:
- ca:4d:49:ef:e2:5a:d9:2a:bd:30:ce:4c:b2:81:b6:30:ce:59:
- 4f:da:59:1d:6a:7a:a4:45:b0:82:26:81:86:76:f5:f5:10:00:
- b8:ee:b3:09:e8:4f:87:02:07:ae:24:5c:f0:5f:ac:0a:30:cc:
- 8a:40:a0:73:04:c1:fb:89:24:f6:9a:1c:5c:b7:3c:0a:67:36:
- 05:08:31:b3:af:d8:01:68:2a:e0:78:8f:74:de:b8:51:a4:8c:
- 6c:20:3d:a2:fb:b3:d4:09:fd:7b:c2:80:aa:93:6c:29:98:21:
- a8:bb:16:f3:a9:12:5f:74:b5:87:98:f2:95:26:df:34:ef:8a:
- 53:91:88:5d:1a:94:a3:3f:7c:22:f8:d7:88:ba:a6:8c:96:a8:
- 3d:52:34:62:9f:00:1e:54:55:42:67:c6:4d:46:8f:bb:14:45:
- 3d:0a:96:16:8e:10:a1:97:99:d5:d3:30:85:cc:de:b4:72:b7:
- bc:8a:3c:18:29:68:fd:dc:71:07:ee:24:39:6a:fa:ed:a5:ac:
- 38:2f:f9:1e:10:0e:06:71:1a:10:4c:fe:75:7e:ff:1e:57:39:
- 42:ca:d7:e1:15:a1:56:55:59:1b:d1:a3:af:11:d8:4e:c3:a5:
- 2b:ef:90:bf:c0:ec:82:13:5b:8d:d6:72:2c:93:4e:8f:6a:29:
- df:85:3c:d3:0d:e0:a2:18:12:cc:55:2f:47:b7:a7:9b:02:fe:
- 41:f6:88:4c:6d:da:a9:01:47:83:64:27:62:10:82:d6:12:7b:
- 5e:03:1f:34:a9:c9:91:fe:af:5d:6d:86:27:b7:23:aa:75:18:
- ca:20:e7:b0:0f:d7:89:0e:a6:67:22:63:f4:83:41:2b:06:4b:
- bb:58:d5:d1:d7:b7:b9:10:63:d8:89:4a:b4:aa:dd:16:63:f5:
- 6e:be:60:a1:f8:ed:e8:d6:90:4f:1a:c6:c5:a0:29:d3:a7:21:
- a8:f5:5a:3c:f7:c7:49:a2:21:9a:4a:95:52:20:96:72:9a:66:
- cb:f7:d2:86:43:7c:22:be:96:f9:bd:01:a8:47:dd:e5:3b:40:
- f9:75:2b:9b:2b:46:64:86:8d:1e:f4:8f:fb:07:77:d0:ea:49:
- a2:1c:8d:52:14:a6:0a:93
-----BEGIN CERTIFICATE-----
MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
@@ -9664,63 +2679,6 @@ QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
certSIGN ROOT CA
================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 20:06:05:16:70:02
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=RO, O=certSIGN, OU=certSIGN ROOT CA
- Validity
- Not Before: Jul 4 17:20:04 2006 GMT
- Not After : Jul 4 17:20:04 2031 GMT
- Subject: C=RO, O=certSIGN, OU=certSIGN ROOT CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b7:33:b9:7e:c8:25:4a:8e:b5:db:b4:28:1b:aa:
- 57:90:e8:d1:22:d3:64:ba:d3:93:e8:d4:ac:86:61:
- 40:6a:60:57:68:54:84:4d:bc:6a:54:02:05:ff:df:
- 9b:9a:2a:ae:5d:07:8f:4a:c3:28:7f:ef:fb:2b:fa:
- 79:f1:c7:ad:f0:10:53:24:90:8b:66:c9:a8:88:ab:
- af:5a:a3:00:e9:be:ba:46:ee:5b:73:7b:2c:17:82:
- 81:5e:62:2c:a1:02:65:b3:bd:c5:2b:00:7e:c4:fc:
- 03:33:57:0d:ed:e2:fa:ce:5d:45:d6:38:cd:35:b6:
- b2:c1:d0:9c:81:4a:aa:e4:b2:01:5c:1d:8f:5f:99:
- c4:b1:ad:db:88:21:eb:90:08:82:80:f3:30:a3:43:
- e6:90:82:ae:55:28:49:ed:5b:d7:a9:10:38:0e:fe:
- 8f:4c:5b:9b:46:ea:41:f5:b0:08:74:c3:d0:88:33:
- b6:7c:d7:74:df:dc:84:d1:43:0e:75:39:a1:25:40:
- 28:ea:78:cb:0e:2c:2e:39:9d:8c:8b:6e:16:1c:2f:
- 26:82:10:e2:e3:65:94:0a:04:c0:5e:f7:5d:5b:f8:
- 10:e2:d0:ba:7a:4b:fb:de:37:00:00:1a:5b:28:e3:
- d2:9c:73:3e:32:87:98:a1:c9:51:2f:d7:de:ac:33:
- b3:4f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- E0:8C:9B:DB:25:49:B3:F1:7C:86:D6:B2:42:87:0B:D0:6B:A0:D9:E4
- Signature Algorithm: sha1WithRSAEncryption
- 3e:d2:1c:89:2e:35:fc:f8:75:dd:e6:7f:65:88:f4:72:4c:c9:
- 2c:d7:32:4e:f3:dd:19:79:47:bd:8e:3b:5b:93:0f:50:49:24:
- 13:6b:14:06:72:ef:09:d3:a1:a1:e3:40:84:c9:e7:18:32:74:
- 3c:48:6e:0f:9f:4b:d4:f7:1e:d3:93:86:64:54:97:63:72:50:
- d5:55:cf:fa:20:93:02:a2:9b:c3:23:93:4e:16:55:76:a0:70:
- 79:6d:cd:21:1f:cf:2f:2d:bc:19:e3:88:31:f8:59:1a:81:09:
- c8:97:a6:74:c7:60:c4:5b:cc:57:8e:b2:75:fd:1b:02:09:db:
- 59:6f:72:93:69:f7:31:41:d6:88:38:bf:87:b2:bd:16:79:f9:
- aa:e4:be:88:25:dd:61:27:23:1c:b5:31:07:04:36:b4:1a:90:
- bd:a0:74:71:50:89:6d:bc:14:e3:0f:86:ae:f1:ab:3e:c7:a0:
- 09:cc:a3:48:d1:e0:db:64:e7:92:b5:cf:af:72:43:70:8b:f9:
- c3:84:3c:13:aa:7e:92:9b:57:53:93:fa:70:c2:91:0e:31:f9:
- 9b:67:5d:e9:96:38:5e:5f:b3:73:4e:88:15:67:de:9e:76:10:
- 62:20:be:55:69:95:43:00:39:4d:f6:ee:b0:5a:4e:49:44:54:
- 58:5f:42:83
-----BEGIN CERTIFICATE-----
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
@@ -9744,67 +2702,6 @@ i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
CNNIC ROOT
==========
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1228079105 (0x49330001)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=CN, O=CNNIC, CN=CNNIC ROOT
- Validity
- Not Before: Apr 16 07:09:14 2007 GMT
- Not After : Apr 16 07:09:14 2027 GMT
- Subject: C=CN, O=CNNIC, CN=CNNIC ROOT
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:d3:35:f7:3f:73:77:ad:e8:5b:73:17:c2:d1:6f:
- ed:55:bc:6e:ea:e8:a4:79:b2:6c:c3:a3:ef:e1:9f:
- b1:3b:48:85:f5:9a:5c:21:22:10:2c:c5:82:ce:da:
- e3:9a:6e:37:e1:87:2c:dc:b9:0c:5a:ba:88:55:df:
- fd:aa:db:1f:31:ea:01:f1:df:39:01:c1:13:fd:48:
- 52:21:c4:55:df:da:d8:b3:54:76:ba:74:b1:b7:7d:
- d7:c0:e8:f6:59:c5:4d:c8:bd:ad:1f:14:da:df:58:
- 44:25:32:19:2a:c7:7e:7e:8e:ae:38:b0:30:7b:47:
- 72:09:31:f0:30:db:c3:1b:76:29:bb:69:76:4e:57:
- f9:1b:64:a2:93:56:b7:6f:99:6e:db:0a:04:9c:11:
- e3:80:1f:cb:63:94:10:0a:a9:e1:64:82:31:f9:8c:
- 27:ed:a6:99:00:f6:70:93:18:f8:a1:34:86:a3:dd:
- 7a:c2:18:79:f6:7a:65:35:cf:90:eb:bd:33:93:9f:
- 53:ab:73:3b:e6:9b:34:20:2f:1d:ef:a9:1d:63:1a:
- a0:80:db:03:2f:f9:26:1a:86:d2:8d:bb:a9:be:52:
- 3a:87:67:48:0d:bf:b4:a0:d8:26:be:23:5f:73:37:
- 7f:26:e6:92:04:a3:7f:cf:20:a7:b7:f3:3a:ca:cb:
- 99:cb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- X509v3 Authority Key Identifier:
- keyid:65:F2:31:AD:2A:F7:F7:DD:52:96:0A:C7:02:C1:0E:EF:A6:D5:3B:11
-
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage:
- Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement, Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 65:F2:31:AD:2A:F7:F7:DD:52:96:0A:C7:02:C1:0E:EF:A6:D5:3B:11
- Signature Algorithm: sha1WithRSAEncryption
- 4b:35:ee:cc:e4:ae:bf:c3:6e:ad:9f:95:3b:4b:3f:5b:1e:df:
- 57:29:a2:59:ca:38:e2:b9:1a:ff:9e:e6:6e:32:dd:1e:ae:ea:
- 35:b7:f5:93:91:4e:da:42:e1:c3:17:60:50:f2:d1:5c:26:b9:
- 82:b7:ea:6d:e4:9c:84:e7:03:79:17:af:98:3d:94:db:c7:ba:
- 00:e7:b8:bf:01:57:c1:77:45:32:0c:3b:f1:b4:1c:08:b0:fd:
- 51:a0:a1:dd:9a:1d:13:36:9a:6d:b7:c7:3c:b9:e1:c5:d9:17:
- fa:83:d5:3d:15:a0:3c:bb:1e:0b:e2:c8:90:3f:a8:86:0c:fc:
- f9:8b:5e:85:cb:4f:5b:4b:62:11:47:c5:45:7c:05:2f:41:b1:
- 9e:10:69:1b:99:96:e0:55:79:fb:4e:86:99:b8:94:da:86:38:
- 6a:93:a3:e7:cb:6e:e5:df:ea:21:55:89:9c:7d:7d:7f:98:f5:
- 00:89:ee:e3:84:c0:5c:96:b5:c5:46:ea:46:e0:85:55:b6:1b:
- c9:12:d6:c1:cd:cd:80:f3:02:01:3c:c8:69:cb:45:48:63:d8:
- 94:d0:ec:85:0e:3b:4e:11:65:f4:82:8c:a6:3d:ae:2e:22:94:
- 09:c8:5c:ea:3c:81:5d:16:2a:03:97:16:55:09:db:8a:41:82:
- 9e:66:9b:11
-----BEGIN CERTIFICATE-----
MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
@@ -9828,64 +2725,6 @@ buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
ApplicationCA - Japanese Government
===================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 49 (0x31)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=JP, O=Japanese Government, OU=ApplicationCA
- Validity
- Not Before: Dec 12 15:00:00 2007 GMT
- Not After : Dec 12 15:00:00 2017 GMT
- Subject: C=JP, O=Japanese Government, OU=ApplicationCA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:a7:6d:e0:74:4e:87:8f:a5:06:de:68:a2:db:86:
- 99:4b:64:0d:71:f0:0a:05:9b:8e:aa:e1:cc:2e:d2:
- 6a:3b:c1:7a:b4:97:61:8d:8a:be:c6:9a:9c:06:b4:
- 86:51:e4:37:0e:74:78:7e:5f:8a:7f:94:a4:d7:47:
- 08:fd:50:5a:56:e4:68:ac:28:73:a0:7b:e9:7f:18:
- 92:40:4f:2d:9d:f5:ae:44:48:73:36:06:9e:64:2c:
- 3b:34:23:db:5c:26:e4:71:79:8f:d4:6e:79:22:b9:
- 93:c1:ca:cd:c1:56:ed:88:6a:d7:a0:39:21:04:57:
- 2c:a2:f5:bc:47:41:4f:5e:34:22:95:b5:1f:29:6d:
- 5e:4a:f3:4d:72:be:41:56:20:87:fc:e9:50:47:d7:
- 30:14:ee:5c:8c:55:ba:59:8d:87:fc:23:de:93:d0:
- 04:8c:fd:ef:6d:bd:d0:7a:c9:a5:3a:6a:72:33:c6:
- 4a:0d:05:17:2a:2d:7b:b1:a7:d8:d6:f0:be:f4:3f:
- ea:0e:28:6d:41:61:23:76:78:c3:b8:65:a4:f3:5a:
- ae:cc:c2:aa:d9:e7:58:de:b6:7e:9d:85:6e:9f:2a:
- 0a:6f:9f:03:29:30:97:28:1d:bc:b7:cf:54:29:4e:
- 51:31:f9:27:b6:28:26:fe:a2:63:e6:41:16:f0:33:
- 98:47
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 54:5A:CB:26:3F:71:CC:94:46:0D:96:53:EA:6B:48:D0:93:FE:42:75
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Alternative Name:
- DirName:/C=JP/O=\xE6\x97\xA5\xE6\x9C\xAC\xE5\x9B\xBD\xE6\x94\xBF\xE5\xBA\x9C/OU=\xE3\x82\xA2\xE3\x83\x97\xE3\x83\xAA\xE3\x82\xB1\xE3\x83\xBC\xE3\x82\xB7\xE3\x83\xA7\xE3\x83\xB3CA
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 39:6a:44:76:77:38:3a:ec:a3:67:46:0f:f9:8b:06:a8:fb:6a:
- 90:31:ce:7e:ec:da:d1:89:7c:7a:eb:2e:0c:bd:99:32:e7:b0:
- 24:d6:c3:ff:f5:b2:88:09:87:2c:e3:54:e1:a3:a6:b2:08:0b:
- c0:85:a8:c8:d2:9c:71:f6:1d:9f:60:fc:38:33:13:e1:9e:dc:
- 0b:5f:da:16:50:29:7b:2f:70:91:0f:99:ba:34:34:8d:95:74:
- c5:7e:78:a9:66:5d:bd:ca:21:77:42:10:ac:66:26:3d:de:91:
- ab:fd:15:f0:6f:ed:6c:5f:10:f8:f3:16:f6:03:8a:8f:a7:12:
- 11:0c:cb:fd:3f:79:c1:9c:fd:62:ee:a3:cf:54:0c:d1:2b:5f:
- 17:3e:e3:3e:bf:c0:2b:3e:09:9b:fe:88:a6:7e:b4:92:17:fc:
- 23:94:81:bd:6e:a7:c5:8c:c2:eb:11:45:db:f8:41:c9:96:76:
- ea:70:5f:79:12:6b:e4:a3:07:5a:05:ef:27:49:cf:21:9f:8a:
- 4c:09:70:66:a9:26:c1:2b:11:4e:33:d2:0e:fc:d6:6c:d2:0e:
- 32:64:68:ff:ad:05:78:5f:03:1d:a8:e3:90:ac:24:e0:0f:40:
- a7:4b:ae:8b:28:b7:82:ca:18:07:e6:b7:5b:74:e9:20:19:7f:
- b2:1b:89:54
-----BEGIN CERTIFICATE-----
MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
@@ -9911,63 +2750,6 @@ rosot4LKGAfmt1t06SAZf7IbiVQ=
GeoTrust Primary Certification Authority - G3
=============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 15:ac:6e:94:19:b2:79:4b:41:f6:27:a9:c3:18:0f:1f
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
- Validity
- Not Before: Apr 2 00:00:00 2008 GMT
- Not After : Dec 1 23:59:59 2037 GMT
- Subject: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:dc:e2:5e:62:58:1d:33:57:39:32:33:fa:eb:cb:
- 87:8c:a7:d4:4a:dd:06:88:ea:64:8e:31:98:a5:38:
- 90:1e:98:cf:2e:63:2b:f0:46:bc:44:b2:89:a1:c0:
- 28:0c:49:70:21:95:9f:64:c0:a6:93:12:02:65:26:
- 86:c6:a5:89:f0:fa:d7:84:a0:70:af:4f:1a:97:3f:
- 06:44:d5:c9:eb:72:10:7d:e4:31:28:fb:1c:61:e6:
- 28:07:44:73:92:22:69:a7:03:88:6c:9d:63:c8:52:
- da:98:27:e7:08:4c:70:3e:b4:c9:12:c1:c5:67:83:
- 5d:33:f3:03:11:ec:6a:d0:53:e2:d1:ba:36:60:94:
- 80:bb:61:63:6c:5b:17:7e:df:40:94:1e:ab:0d:c2:
- 21:28:70:88:ff:d6:26:6c:6c:60:04:25:4e:55:7e:
- 7d:ef:bf:94:48:de:b7:1d:dd:70:8d:05:5f:88:a5:
- 9b:f2:c2:ee:ea:d1:40:41:6d:62:38:1d:56:06:c5:
- 03:47:51:20:19:fc:7b:10:0b:0e:62:ae:76:55:bf:
- 5f:77:be:3e:49:01:53:3d:98:25:03:76:24:5a:1d:
- b4:db:89:ea:79:e5:b6:b3:3b:3f:ba:4c:28:41:7f:
- 06:ac:6a:8e:c1:d0:f6:05:1d:7d:e6:42:86:e3:a5:
- d5:47
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- C4:79:CA:8E:A1:4E:03:1D:1C:DC:6B:DB:31:5B:94:3E:3F:30:7F:2D
- Signature Algorithm: sha256WithRSAEncryption
- 2d:c5:13:cf:56:80:7b:7a:78:bd:9f:ae:2c:99:e7:ef:da:df:
- 94:5e:09:69:a7:e7:6e:68:8c:bd:72:be:47:a9:0e:97:12:b8:
- 4a:f1:64:d3:39:df:25:34:d4:c1:cd:4e:81:f0:0f:04:c4:24:
- b3:34:96:c6:a6:aa:30:df:68:61:73:d7:f9:8e:85:89:ef:0e:
- 5e:95:28:4a:2a:27:8f:10:8e:2e:7c:86:c4:02:9e:da:0c:77:
- 65:0e:44:0d:92:fd:fd:b3:16:36:fa:11:0d:1d:8c:0e:07:89:
- 6a:29:56:f7:72:f4:dd:15:9c:77:35:66:57:ab:13:53:d8:8e:
- c1:40:c5:d7:13:16:5a:72:c7:b7:69:01:c4:7a:b1:83:01:68:
- 7d:8d:41:a1:94:18:c1:25:5c:fc:f0:fe:83:02:87:7c:0d:0d:
- cf:2e:08:5c:4a:40:0d:3e:ec:81:61:e6:24:db:ca:e0:0e:2d:
- 07:b2:3e:56:dc:8d:f5:41:85:07:48:9b:0c:0b:cb:49:3f:7d:
- ec:b7:fd:cb:8d:67:89:1a:ab:ed:bb:1e:a3:00:08:08:17:2a:
- 82:5c:31:5d:46:8a:2d:0f:86:9b:74:d9:45:fb:d4:40:b1:7a:
- aa:68:2d:86:b2:99:22:e1:c1:2b:c7:9c:f8:f3:5f:a8:82:12:
- eb:19:11:2d
-----BEGIN CERTIFICATE-----
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
@@ -9995,43 +2777,6 @@ spki4cErx5z481+oghLrGREt
thawte Primary Root CA - G2
===========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 35:fc:26:5c:d9:84:4f:c9:3d:26:3d:57:9b:ae:d7:56
- Signature Algorithm: 1.2.840.10045.4.3.3
- Issuer: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
- Validity
- Not Before: Nov 5 00:00:00 2007 GMT
- Not After : Jan 18 23:59:59 2038 GMT
- Subject: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
- Subject Public Key Info:
- Public Key Algorithm: id-ecPublicKey
- EC Public Key:
- pub:
- 04:a2:d5:9c:82:7b:95:9d:f1:52:78:87:fe:8a:16:
- bf:05:e6:df:a3:02:4f:0d:07:c6:00:51:ba:0c:02:
- 52:2d:22:a4:42:39:c4:fe:8f:ea:c9:c1:be:d4:4d:
- ff:9f:7a:9e:e2:b1:7c:9a:ad:a7:86:09:73:87:d1:
- e7:9a:e3:7a:a5:aa:6e:fb:ba:b3:70:c0:67:88:a2:
- 35:d4:a3:9a:b1:fd:ad:c2:ef:31:fa:a8:b9:f3:fb:
- 08:c6:91:d1:fb:29:95
- ASN1 OID: secp384r1
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 9A:D8:00:30:00:E7:6B:7F:85:18:EE:8B:B6:CE:8A:0C:F8:11:E1:BB
- Signature Algorithm: 1.2.840.10045.4.3.3
- 30:66:02:31:00:dd:f8:e0:57:47:5b:a7:e6:0a:c3:bd:f5:80:
- 8a:97:35:0d:1b:89:3c:54:86:77:28:ca:a1:f4:79:de:b5:e6:
- 38:b0:f0:65:70:8c:7f:02:54:c2:bf:ff:d8:a1:3e:d9:cf:02:
- 31:00:c4:8d:94:fc:dc:53:d2:dc:9d:78:16:1f:15:33:23:53:
- 52:e3:5a:31:5d:9d:ca:ae:bd:13:29:44:0d:27:5b:a8:e7:68:
- 9c:12:f7:58:3f:2e:72:02:57:a3:8f:a1:14:2e
-----BEGIN CERTIFICATE-----
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
@@ -10051,63 +2796,6 @@ XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
thawte Primary Root CA - G3
===========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 60:01:97:b7:46:a7:ea:b4:b4:9a:d6:4b:2f:f7:90:fb
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
- Validity
- Not Before: Apr 2 00:00:00 2008 GMT
- Not After : Dec 1 23:59:59 2037 GMT
- Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b2:bf:27:2c:fb:db:d8:5b:dd:78:7b:1b:9e:77:
- 66:81:cb:3e:bc:7c:ae:f3:a6:27:9a:34:a3:68:31:
- 71:38:33:62:e4:f3:71:66:79:b1:a9:65:a3:a5:8b:
- d5:8f:60:2d:3f:42:cc:aa:6b:32:c0:23:cb:2c:41:
- dd:e4:df:fc:61:9c:e2:73:b2:22:95:11:43:18:5f:
- c4:b6:1f:57:6c:0a:05:58:22:c8:36:4c:3a:7c:a5:
- d1:cf:86:af:88:a7:44:02:13:74:71:73:0a:42:59:
- 02:f8:1b:14:6b:42:df:6f:5f:ba:6b:82:a2:9d:5b:
- e7:4a:bd:1e:01:72:db:4b:74:e8:3b:7f:7f:7d:1f:
- 04:b4:26:9b:e0:b4:5a:ac:47:3d:55:b8:d7:b0:26:
- 52:28:01:31:40:66:d8:d9:24:bd:f6:2a:d8:ec:21:
- 49:5c:9b:f6:7a:e9:7f:55:35:7e:96:6b:8d:93:93:
- 27:cb:92:bb:ea:ac:40:c0:9f:c2:f8:80:cf:5d:f4:
- 5a:dc:ce:74:86:a6:3e:6c:0b:53:ca:bd:92:ce:19:
- 06:72:e6:0c:5c:38:69:c7:04:d6:bc:6c:ce:5b:f6:
- f7:68:9c:dc:25:15:48:88:a1:e9:a9:f8:98:9c:e0:
- f3:d5:31:28:61:11:6c:67:96:8d:39:99:cb:c2:45:
- 24:39
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- AD:6C:AA:94:60:9C:ED:E4:FF:FA:3E:0A:74:2B:63:03:F7:B6:59:BF
- Signature Algorithm: sha256WithRSAEncryption
- 1a:40:d8:95:65:ac:09:92:89:c6:39:f4:10:e5:a9:0e:66:53:
- 5d:78:de:fa:24:91:bb:e7:44:51:df:c6:16:34:0a:ef:6a:44:
- 51:ea:2b:07:8a:03:7a:c3:eb:3f:0a:2c:52:16:a0:2b:43:b9:
- 25:90:3f:70:a9:33:25:6d:45:1a:28:3b:27:cf:aa:c3:29:42:
- 1b:df:3b:4c:c0:33:34:5b:41:88:bf:6b:2b:65:af:28:ef:b2:
- f5:c3:aa:66:ce:7b:56:ee:b7:c8:cb:67:c1:c9:9c:1a:18:b8:
- c4:c3:49:03:f1:60:0e:50:cd:46:c5:f3:77:79:f7:b6:15:e0:
- 38:db:c7:2f:28:a0:0c:3f:77:26:74:d9:25:12:da:31:da:1a:
- 1e:dc:29:41:91:22:3c:69:a7:bb:02:f2:b6:5c:27:03:89:f4:
- 06:ea:9b:e4:72:82:e3:a1:09:c1:e9:00:19:d3:3e:d4:70:6b:
- ba:71:a6:aa:58:ae:f4:bb:e9:6c:b6:ef:87:cc:9b:bb:ff:39:
- e6:56:61:d3:0a:a7:c4:5c:4c:60:7b:05:77:26:7a:bf:d8:07:
- 52:2c:62:f7:70:63:d9:39:bc:6f:1c:c2:79:dc:76:29:af:ce:
- c5:2c:64:04:5e:88:36:6e:31:d4:40:1a:62:34:36:3f:35:01:
- ae:ac:63:a0
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
@@ -10136,43 +2824,6 @@ MdRAGmI0Nj81Aa6sY6A=
GeoTrust Primary Certification Authority - G2
=============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 3c:b2:f4:48:0a:00:e2:fe:eb:24:3b:5e:60:3e:c3:6b
- Signature Algorithm: 1.2.840.10045.4.3.3
- Issuer: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
- Validity
- Not Before: Nov 5 00:00:00 2007 GMT
- Not After : Jan 18 23:59:59 2038 GMT
- Subject: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
- Subject Public Key Info:
- Public Key Algorithm: id-ecPublicKey
- EC Public Key:
- pub:
- 04:15:b1:e8:fd:03:15:43:e5:ac:eb:87:37:11:62:
- ef:d2:83:36:52:7d:45:57:0b:4a:8d:7b:54:3b:3a:
- 6e:5f:15:02:c0:50:a6:cf:25:2f:7d:ca:48:b8:c7:
- 50:63:1c:2a:21:08:7c:9a:36:d8:0b:fe:d1:26:c5:
- 58:31:30:28:25:f3:5d:5d:a3:b8:b6:a5:b4:92:ed:
- 6c:2c:9f:eb:dd:43:89:a2:3c:4b:48:91:1d:50:ec:
- 26:df:d6:60:2e:bd:21
- ASN1 OID: secp384r1
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 15:5F:35:57:51:55:FB:25:B2:AD:03:69:FC:01:A3:FA:BE:11:55:D5
- Signature Algorithm: 1.2.840.10045.4.3.3
- 30:64:02:30:64:96:59:a6:e8:09:de:8b:ba:fa:5a:88:88:f0:
- 1f:91:d3:46:a8:f2:4a:4c:02:63:fb:6c:5f:38:db:2e:41:93:
- a9:0e:e6:9d:dc:31:1c:b2:a0:a7:18:1c:79:e1:c7:36:02:30:
- 3a:56:af:9a:74:6c:f6:fb:83:e0:33:d3:08:5f:a1:9c:c2:5b:
- 9f:46:d6:b6:cb:91:06:63:a2:06:e7:33:ac:3e:a8:81:12:d0:
- cb:ba:d0:92:0b:b6:9e:96:aa:04:0f:8a
-----BEGIN CERTIFICATE-----
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
@@ -10193,65 +2844,6 @@ rD6ogRLQy7rQkgu2npaqBA+K
VeriSign Universal Root Certification Authority
===============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 40:1a:c4:64:21:b3:13:21:03:0e:bb:e4:12:1a:c5:1d
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2008 VeriSign, Inc. - For authorized use only, CN=VeriSign Universal Root Certification Authority
- Validity
- Not Before: Apr 2 00:00:00 2008 GMT
- Not After : Dec 1 23:59:59 2037 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2008 VeriSign, Inc. - For authorized use only, CN=VeriSign Universal Root Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c7:61:37:5e:b1:01:34:db:62:d7:15:9b:ff:58:
- 5a:8c:23:23:d6:60:8e:91:d7:90:98:83:7a:e6:58:
- 19:38:8c:c5:f6:e5:64:85:b4:a2:71:fb:ed:bd:b9:
- da:cd:4d:00:b4:c8:2d:73:a5:c7:69:71:95:1f:39:
- 3c:b2:44:07:9c:e8:0e:fa:4d:4a:c4:21:df:29:61:
- 8f:32:22:61:82:c5:87:1f:6e:8c:7c:5f:16:20:51:
- 44:d1:70:4f:57:ea:e3:1c:e3:cc:79:ee:58:d8:0e:
- c2:b3:45:93:c0:2c:e7:9a:17:2b:7b:00:37:7a:41:
- 33:78:e1:33:e2:f3:10:1a:7f:87:2c:be:f6:f5:f7:
- 42:e2:e5:bf:87:62:89:5f:00:4b:df:c5:dd:e4:75:
- 44:32:41:3a:1e:71:6e:69:cb:0b:75:46:08:d1:ca:
- d2:2b:95:d0:cf:fb:b9:40:6b:64:8c:57:4d:fc:13:
- 11:79:84:ed:5e:54:f6:34:9f:08:01:f3:10:25:06:
- 17:4a:da:f1:1d:7a:66:6b:98:60:66:a4:d9:ef:d2:
- 2e:82:f1:f0:ef:09:ea:44:c9:15:6a:e2:03:6e:33:
- d3:ac:9f:55:00:c7:f6:08:6a:94:b9:5f:dc:e0:33:
- f1:84:60:f9:5b:27:11:b4:fc:16:f2:bb:56:6a:80:
- 25:8d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- 1.3.6.1.5.5.7.1.12:
- 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
- X509v3 Subject Key Identifier:
- B6:77:FA:69:48:47:9F:53:12:D5:C2:EA:07:32:76:07:D1:97:07:19
- Signature Algorithm: sha256WithRSAEncryption
- 4a:f8:f8:b0:03:e6:2c:67:7b:e4:94:77:63:cc:6e:4c:f9:7d:
- 0e:0d:dc:c8:b9:35:b9:70:4f:63:fa:24:fa:6c:83:8c:47:9d:
- 3b:63:f3:9a:f9:76:32:95:91:b1:77:bc:ac:9a:be:b1:e4:31:
- 21:c6:81:95:56:5a:0e:b1:c2:d4:b1:a6:59:ac:f1:63:cb:b8:
- 4c:1d:59:90:4a:ef:90:16:28:1f:5a:ae:10:fb:81:50:38:0c:
- 6c:cc:f1:3d:c3:f5:63:e3:b3:e3:21:c9:24:39:e9:fd:15:66:
- 46:f4:1b:11:d0:4d:73:a3:7d:46:f9:3d:ed:a8:5f:62:d4:f1:
- 3f:f8:e0:74:57:2b:18:9d:81:b4:c4:28:da:94:97:a5:70:eb:
- ac:1d:be:07:11:f0:d5:db:dd:e5:8c:f0:d5:32:b0:83:e6:57:
- e2:8f:bf:be:a1:aa:bf:3d:1d:b5:d4:38:ea:d7:b0:5c:3a:4f:
- 6a:3f:8f:c0:66:6c:63:aa:e9:d9:a4:16:f4:81:d1:95:14:0e:
- 7d:cd:95:34:d9:d2:8f:70:73:81:7b:9c:7e:bd:98:61:d8:45:
- 87:98:90:c5:eb:86:30:c6:35:bf:f0:ff:c3:55:88:83:4b:ef:
- 05:92:06:71:f2:b8:98:93:b7:ec:cd:82:61:f1:38:e6:4f:97:
- 98:2a:5a:8d
-----BEGIN CERTIFICATE-----
MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
@@ -10283,45 +2875,6 @@ lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
VeriSign Class 3 Public Primary Certification Authority - G4
============================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 2f:80:fe:23:8c:0e:22:0f:48:67:12:28:91:87:ac:b3
- Signature Algorithm: 1.2.840.10045.4.3.3
- Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2007 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G4
- Validity
- Not Before: Nov 5 00:00:00 2007 GMT
- Not After : Jan 18 23:59:59 2038 GMT
- Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2007 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G4
- Subject Public Key Info:
- Public Key Algorithm: id-ecPublicKey
- EC Public Key:
- pub:
- 04:a7:56:7a:7c:52:da:64:9b:0e:2d:5c:d8:5e:ac:
- 92:3d:fe:01:e6:19:4a:3d:14:03:4b:fa:60:27:20:
- d9:83:89:69:fa:54:c6:9a:18:5e:55:2a:64:de:06:
- f6:8d:4a:3b:ad:10:3c:65:3d:90:88:04:89:e0:30:
- 61:b3:ae:5d:01:a7:7b:de:7c:b2:be:ca:65:61:00:
- 86:ae:da:8f:7b:d0:89:ad:4d:1d:59:9a:41:b1:bc:
- 47:80:dc:9e:62:c3:f9
- ASN1 OID: secp384r1
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- 1.3.6.1.5.5.7.1.12:
- 0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
- X509v3 Subject Key Identifier:
- B3:16:91:FD:EE:A6:6E:E4:B5:2E:49:8F:87:78:81:80:EC:E5:B1:B5
- Signature Algorithm: 1.2.840.10045.4.3.3
- 30:65:02:30:66:21:0c:18:26:60:5a:38:7b:56:42:e0:a7:fc:
- 36:84:51:91:20:2c:76:4d:43:3d:c4:1d:84:23:d0:ac:d6:7c:
- 35:06:ce:cd:69:bd:90:0d:db:6c:48:42:1d:0e:aa:42:02:31:
- 00:9c:3d:48:39:23:39:58:1a:15:12:59:6a:9e:ef:d5:59:b2:
- 1d:52:2c:99:71:cd:c7:29:df:1b:2a:61:7b:71:d1:de:f3:c0:
- e5:0d:3a:4a:aa:2d:a7:d8:86:2a:dd:2e:10
-----BEGIN CERTIFICATE-----
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
@@ -10346,63 +2899,6 @@ FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
NetLock Arany (Class Gold) FEtanC:sC-tvC!ny
============================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 49:41:2c:e4:00:10
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=HU, L=Budapest, O=NetLock Kft., OU=Tan\xC3\xBAs\xC3\xADtv\xC3\xA1nykiad\xC3\xB3k (Certification Services), CN=NetLock Arany (Class Gold) F\xC5\x91tan\xC3\xBAs\xC3\xADtv\xC3\xA1ny
- Validity
- Not Before: Dec 11 15:08:21 2008 GMT
- Not After : Dec 6 15:08:21 2028 GMT
- Subject: C=HU, L=Budapest, O=NetLock Kft., OU=Tan\xC3\xBAs\xC3\xADtv\xC3\xA1nykiad\xC3\xB3k (Certification Services), CN=NetLock Arany (Class Gold) F\xC5\x91tan\xC3\xBAs\xC3\xADtv\xC3\xA1ny
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c4:24:5e:73:be:4b:6d:14:c3:a1:f4:e3:97:90:
- 6e:d2:30:45:1e:3c:ee:67:d9:64:e0:1a:8a:7f:ca:
- 30:ca:83:e3:20:c1:e3:f4:3a:d3:94:5f:1a:7c:5b:
- 6d:bf:30:4f:84:27:f6:9f:1f:49:bc:c6:99:0a:90:
- f2:0f:f5:7f:43:84:37:63:51:8b:7a:a5:70:fc:7a:
- 58:cd:8e:9b:ed:c3:46:6c:84:70:5d:da:f3:01:90:
- 23:fc:4e:30:a9:7e:e1:27:63:e7:ed:64:3c:a0:b8:
- c9:33:63:fe:16:90:ff:b0:b8:fd:d7:a8:c0:c0:94:
- 43:0b:b6:d5:59:a6:9e:56:d0:24:1f:70:79:af:db:
- 39:54:0d:65:75:d9:15:41:94:01:af:5e:ec:f6:8d:
- f1:ff:ad:64:fe:20:9a:d7:5c:eb:fe:a6:1f:08:64:
- a3:8b:76:55:ad:1e:3b:28:60:2e:87:25:e8:aa:af:
- 1f:c6:64:46:20:b7:70:7f:3c:de:48:db:96:53:b7:
- 39:77:e4:1a:e2:c7:16:84:76:97:5b:2f:bb:19:15:
- 85:f8:69:85:f5:99:a7:a9:f2:34:a7:a9:b6:a6:03:
- fc:6f:86:3d:54:7c:76:04:9b:6b:f9:40:5d:00:34:
- c7:2e:99:75:9d:e5:88:03:aa:4d:f8:03:d2:42:76:
- c0:1b
- Exponent: 43147 (0xa88b)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:4
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- CC:FA:67:93:F0:B6:B8:D0:A5:C0:1E:F3:53:FD:8C:53:DF:83:D7:96
- Signature Algorithm: sha256WithRSAEncryption
- ab:7f:ee:1c:16:a9:9c:3c:51:00:a0:c0:11:08:05:a7:99:e6:
- 6f:01:88:54:61:6e:f1:b9:18:ad:4a:ad:fe:81:40:23:94:2f:
- fb:75:7c:2f:28:4b:62:24:81:82:0b:f5:61:f1:1c:6e:b8:61:
- 38:eb:81:fa:62:a1:3b:5a:62:d3:94:65:c4:e1:e6:6d:82:f8:
- 2f:25:70:b2:21:26:c1:72:51:1f:8c:2c:c3:84:90:c3:5a:8f:
- ba:cf:f4:a7:65:a5:eb:98:d1:fb:05:b2:46:75:15:23:6a:6f:
- 85:63:30:80:f0:d5:9e:1f:29:1c:c2:6c:b0:50:59:5d:90:5b:
- 3b:a8:0d:30:cf:bf:7d:7f:ce:f1:9d:83:bd:c9:46:6e:20:a6:
- f9:61:51:ba:21:2f:7b:be:a5:15:63:a1:d4:95:87:f1:9e:b9:
- f3:89:f3:3d:85:b8:b8:db:be:b5:b9:29:f9:da:37:05:00:49:
- 94:03:84:44:e7:bf:43:31:cf:75:8b:25:d1:f4:a6:64:f5:92:
- f6:ab:05:eb:3d:e9:a5:0b:36:62:da:cc:06:5f:36:8b:b6:5e:
- 31:b8:2a:fb:5e:f6:71:df:44:26:9e:c4:e6:0d:91:b4:2e:75:
- 95:80:51:6a:4b:30:a6:b0:62:a1:93:f1:9b:d8:ce:c4:63:75:
- 3f:59:47:b1
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
@@ -10430,97 +2926,6 @@ XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
Staat der Nederlanden Root CA - G2
==================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 10000012 (0x98968c)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA - G2
- Validity
- Not Before: Mar 26 11:18:17 2008 GMT
- Not After : Mar 25 11:03:10 2020 GMT
- Subject: C=NL, O=Staat der Nederlanden, CN=Staat der Nederlanden Root CA - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c5:59:e7:6f:75:aa:3e:4b:9c:b5:b8:ac:9e:0b:
- e4:f9:d9:ca:ab:5d:8f:b5:39:10:82:d7:af:51:e0:
- 3b:e1:00:48:6a:cf:da:e1:06:43:11:99:aa:14:25:
- 12:ad:22:e8:00:6d:43:c4:a9:b8:e5:1f:89:4b:67:
- bd:61:48:ef:fd:d2:e0:60:88:e5:b9:18:60:28:c3:
- 77:2b:ad:b0:37:aa:37:de:64:59:2a:46:57:e4:4b:
- b9:f8:37:7c:d5:36:e7:80:c1:b6:f3:d4:67:9b:96:
- e8:ce:d7:c6:0a:53:d0:6b:49:96:f3:a3:0b:05:77:
- 48:f7:25:e5:70:ac:30:14:20:25:e3:7f:75:5a:e5:
- 48:f8:4e:7b:03:07:04:fa:82:61:87:6e:f0:3b:c4:
- a4:c7:d0:f5:74:3e:a5:5d:1a:08:f2:9b:25:d2:f6:
- ac:04:26:3e:55:3a:62:28:a5:7b:b2:30:af:f8:37:
- c2:d1:ba:d6:38:fd:f4:ef:49:30:37:99:26:21:48:
- 85:01:a9:e5:16:e7:dc:90:55:df:0f:e8:38:cd:99:
- 37:21:4f:5d:f5:22:6f:6a:c5:12:16:60:17:55:f2:
- 65:66:a6:a7:30:91:38:c1:38:1d:86:04:84:ba:1a:
- 25:78:5e:9d:af:cc:50:60:d6:13:87:52:ed:63:1f:
- 6d:65:7d:c2:15:18:74:ca:e1:7e:64:29:8c:72:d8:
- 16:13:7d:0b:49:4a:f1:28:1b:20:74:6b:c5:3d:dd:
- b0:aa:48:09:3d:2e:82:94:cd:1a:65:d9:2b:88:9a:
- 99:bc:18:7e:9f:ee:7d:66:7c:3e:bd:94:b8:81:ce:
- cd:98:30:78:c1:6f:67:d0:be:5f:e0:68:ed:de:e2:
- b1:c9:2c:59:78:92:aa:df:2b:60:63:f2:e5:5e:b9:
- e3:ca:fa:7f:50:86:3e:a2:34:18:0c:09:68:28:11:
- 1c:e4:e1:b9:5c:3e:47:ba:32:3f:18:cc:5b:84:f5:
- f3:6b:74:c4:72:74:e1:e3:8b:a0:4a:bd:8d:66:2f:
- ea:ad:35:da:20:d3:88:82:61:f0:12:22:b6:bc:d0:
- d5:a4:ec:af:54:88:25:24:3c:a7:6d:b1:72:29:3f:
- 3e:57:a6:7f:55:af:6e:26:c6:fe:e7:cc:40:5c:51:
- 44:81:0a:78:de:4a:ce:55:bf:1d:d5:d9:b7:56:ef:
- f0:76:ff:0b:79:b5:af:bd:fb:a9:69:91:46:97:68:
- 80:14:36:1d:b3:7f:bb:29:98:36:a5:20:fa:82:60:
- 62:33:a4:ec:d6:ba:07:a7:6e:c5:cf:14:a6:e7:d6:
- 92:34:d8:81:f5:fc:1d:5d:aa:5c:1e:f6:a3:4d:3b:
- b8:f7:39
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://www.pkioverheid.nl/policies/root-policy-G2
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 91:68:32:87:15:1D:89:E2:B5:F1:AC:36:28:34:8D:0B:7C:62:88:EB
- Signature Algorithm: sha256WithRSAEncryption
- a8:41:4a:67:2a:92:81:82:50:6e:e1:d7:d8:b3:39:3b:f3:02:
- 15:09:50:51:ef:2d:bd:24:7b:88:86:3b:f9:b4:bc:92:09:96:
- b9:f6:c0:ab:23:60:06:79:8c:11:4e:51:d2:79:80:33:fb:9d:
- 48:be:ec:41:43:81:1f:7e:47:40:1c:e5:7a:08:ca:aa:8b:75:
- ad:14:c4:c2:e8:66:3c:82:07:a7:e6:27:82:5b:18:e6:0f:6e:
- d9:50:3e:8a:42:18:29:c6:b4:56:fc:56:10:a0:05:17:bd:0c:
- 23:7f:f4:93:ed:9c:1a:51:be:dd:45:41:bf:91:24:b4:1f:8c:
- e9:5f:cf:7b:21:99:9f:95:9f:39:3a:46:1c:6c:f9:cd:7b:9c:
- 90:cd:28:a9:c7:a9:55:bb:ac:62:34:62:35:13:4b:14:3a:55:
- 83:b9:86:8d:92:a6:c6:f4:07:25:54:cc:16:57:12:4a:82:78:
- c8:14:d9:17:82:26:2d:5d:20:1f:79:ae:fe:d4:70:16:16:95:
- 83:d8:35:39:ff:52:5d:75:1c:16:c5:13:55:cf:47:cc:75:65:
- 52:4a:de:f0:b0:a7:e4:0a:96:0b:fb:ad:c2:e2:25:84:b2:dd:
- e4:bd:7e:59:6c:9b:f0:f0:d8:e7:ca:f2:e9:97:38:7e:89:be:
- cc:fb:39:17:61:3f:72:db:3a:91:d8:65:01:19:1d:ad:50:a4:
- 57:0a:7c:4b:bc:9c:71:73:2a:45:51:19:85:cc:8e:fd:47:a7:
- 74:95:1d:a8:d1:af:4e:17:b1:69:26:c2:aa:78:57:5b:c5:4d:
- a7:e5:9e:05:17:94:ca:b2:5f:a0:49:18:8d:34:e9:26:6c:48:
- 1e:aa:68:92:05:e1:82:73:5a:9b:dc:07:5b:08:6d:7d:9d:d7:
- 8d:21:d9:fc:14:20:aa:c2:45:df:3f:e7:00:b2:51:e4:c2:f8:
- 05:b9:79:1a:8c:34:f3:9e:5b:e4:37:5b:6b:4a:df:2c:57:8a:
- 40:5a:36:ba:dd:75:44:08:37:42:70:0c:fe:dc:5e:21:a0:a3:
- 8a:c0:90:9c:68:da:50:e6:45:10:47:78:b6:4e:d2:65:c9:c3:
- 37:df:e1:42:63:b0:57:37:45:2d:7b:8a:9c:bf:05:ea:65:55:
- 33:f7:39:10:c5:28:2a:21:7a:1b:8a:c4:24:f9:3f:15:c8:9a:
- 15:20:f5:55:62:96:ed:6d:93:50:bc:e4:aa:78:ad:d9:cb:0a:
- 65:87:a6:66:c1:c4:81:a3:77:3a:58:1e:0b:ee:83:8b:9d:1e:
- d2:52:a4:cc:1d:6f:b0:98:6d:94:31:b5:f8:71:0a:dc:b9:fc:
- 7d:32:60:e6:eb:af:8a:01
-----BEGIN CERTIFICATE-----
MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
@@ -10557,71 +2962,6 @@ ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
CA Disig
========
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=SK, L=Bratislava, O=Disig a.s., CN=CA Disig
- Validity
- Not Before: Mar 22 01:39:34 2006 GMT
- Not After : Mar 22 01:39:34 2016 GMT
- Subject: C=SK, L=Bratislava, O=Disig a.s., CN=CA Disig
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:92:f6:31:c1:7d:88:fd:99:01:a9:d8:7b:f2:71:
- 75:f1:31:c6:f3:75:66:fa:51:28:46:84:97:78:34:
- bc:6c:fc:bc:45:59:88:26:18:4a:c4:37:1f:a1:4a:
- 44:bd:e3:71:04:f5:44:17:e2:3f:fc:48:58:6f:5c:
- 9e:7a:09:ba:51:37:22:23:66:43:21:b0:3c:64:a2:
- f8:6a:15:0e:3f:eb:51:e1:54:a9:dd:06:99:d7:9a:
- 3c:54:8b:39:03:3f:0f:c5:ce:c6:eb:83:72:02:a8:
- 1f:71:f3:2d:f8:75:08:db:62:4c:e8:fa:ce:f9:e7:
- 6a:1f:b6:6b:35:82:ba:e2:8f:16:92:7d:05:0c:6c:
- 46:03:5d:c0:ed:69:bf:3a:c1:8a:a0:e8:8e:d9:b9:
- 45:28:87:08:ec:b4:ca:15:be:82:dd:b5:44:8b:2d:
- ad:86:0c:68:62:6d:85:56:f2:ac:14:63:3a:c6:d1:
- 99:ac:34:78:56:4b:cf:b6:ad:3f:8c:8a:d7:04:e5:
- e3:78:4c:f5:86:aa:f5:8f:fa:3d:6c:71:a3:2d:ca:
- 67:eb:68:7b:6e:33:a9:0c:82:28:a8:4c:6a:21:40:
- 15:20:0c:26:5b:83:c2:a9:16:15:c0:24:82:5d:2b:
- 16:ad:ca:63:f6:74:00:b0:df:43:c4:10:60:56:67:
- 63:45
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 8D:B2:49:68:9D:72:08:25:B9:C0:27:F5:50:93:56:48:46:71:F9:8F
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Alternative Name:
- email:caoperator at disig.sk, URI:http://www.disig.sk/ca
- X509v3 CRL Distribution Points:
- URI:http://www.disig.sk/ca/crl/ca_disig.crl
- URI:http://ca.disig.sk/ca/crl/ca_disig.crl
-
- X509v3 Certificate Policies:
- Policy: 1.3.158.35975946.0.0.0.1.1.1
-
- Signature Algorithm: sha1WithRSAEncryption
- 5d:34:74:61:4c:af:3b:d8:ff:9f:6d:58:36:1c:3d:0b:81:0d:
- 12:2b:46:10:80:fd:e7:3c:27:d0:7a:c8:a9:b6:7e:74:30:33:
- a3:3a:8a:7b:74:c0:79:79:42:93:6d:ff:b1:29:14:82:ab:21:
- 8c:2f:17:f9:3f:26:2f:f5:59:c6:ef:80:06:b7:9a:49:29:ec:
- ce:7e:71:3c:6a:10:41:c0:f6:d3:9a:b2:7c:5a:91:9c:c0:ac:
- 5b:c8:4d:5e:f7:e1:53:ff:43:77:fc:9e:4b:67:6c:d7:f3:83:
- d1:a0:e0:7f:25:df:b8:98:0b:9a:32:38:6c:30:a0:f3:ff:08:
- 15:33:f7:50:4a:7b:3e:a3:3e:20:a9:dc:2f:56:80:0a:ed:41:
- 50:b0:c9:f4:ec:b2:e3:26:44:00:0e:6f:9e:06:bc:22:96:53:
- 70:65:c4:50:0a:46:6b:a4:2f:27:81:12:27:13:5f:10:a1:76:
- ce:8a:7b:37:ea:c3:39:61:03:95:98:3a:e7:6c:88:25:08:fc:
- 79:68:0d:87:7d:62:f8:b4:5f:fb:c5:d8:4c:bd:58:bc:3f:43:
- 5b:d4:1e:01:4d:3c:63:be:23:ef:8c:cd:5a:50:b8:68:54:f9:
- 0a:99:33:11:00:e1:9e:c2:46:77:82:f5:59:06:8c:21:4c:87:
- 09:cd:e5:a8
-----BEGIN CERTIFICATE-----
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
@@ -10649,74 +2989,6 @@ PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
Juur-SK
=======
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 999181308 (0x3b8e4bfc)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: emailAddress=pki at sk.ee, C=EE, O=AS Sertifitseerimiskeskus, CN=Juur-SK
- Validity
- Not Before: Aug 30 14:23:01 2001 GMT
- Not After : Aug 26 14:23:01 2016 GMT
- Subject: emailAddress=pki at sk.ee, C=EE, O=AS Sertifitseerimiskeskus, CN=Juur-SK
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:81:71:36:3e:33:07:d6:e3:30:8d:13:7e:77:32:
- 46:cb:cf:19:b2:60:31:46:97:86:f4:98:46:a4:c2:
- 65:45:cf:d3:40:7c:e3:5a:22:a8:10:78:33:cc:88:
- b1:d3:81:4a:f6:62:17:7b:5f:4d:0a:2e:d0:cf:8b:
- 23:ee:4f:02:4e:bb:eb:0e:ca:bd:18:63:e8:80:1c:
- 8d:e1:1c:8d:3d:e0:ff:5b:5f:ea:64:e5:97:e8:3f:
- 99:7f:0c:0a:09:33:00:1a:53:a7:21:e1:38:4b:d6:
- 83:1b:ad:af:64:c2:f9:1c:7a:8c:66:48:4d:66:1f:
- 18:0a:e2:3e:bb:1f:07:65:93:85:b9:1a:b0:b9:c4:
- fb:0d:11:f6:f5:d6:f9:1b:c7:2c:2b:b7:18:51:fe:
- e0:7b:f6:a8:48:af:6c:3b:4f:2f:ef:f8:d1:47:1e:
- 26:57:f0:51:1d:33:96:ff:ef:59:3d:da:4d:d1:15:
- 34:c7:ea:3f:16:48:7b:91:1c:80:43:0f:3d:b8:05:
- 3e:d1:b3:95:cd:d8:ca:0f:c2:43:67:db:b7:93:e0:
- 22:82:2e:be:f5:68:28:83:b9:c1:3b:69:7b:20:da:
- 4e:9c:6d:e1:ba:cd:8f:7a:6c:b0:09:22:d7:8b:0b:
- db:1c:d5:5a:26:5b:0d:c0:ea:e5:60:d0:9f:fe:35:
- df:3f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.10015.1.1.1
- User Notice:
- Explicit Text:
- CPS: http://www.sk.ee/cps/
-
- X509v3 CRL Distribution Points:
- URI:http://www.sk.ee/juur/crl/
-
- X509v3 Subject Key Identifier:
- 04:AA:7A:47:A3:E4:89:AF:1A:CF:0A:40:A7:18:3F:6F:EF:E9:7D:BE
- X509v3 Authority Key Identifier:
- keyid:04:AA:7A:47:A3:E4:89:AF:1A:CF:0A:40:A7:18:3F:6F:EF:E9:7D:BE
-
- X509v3 Key Usage: critical
- Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 7b:c1:18:94:53:a2:09:f3:fe:26:67:9a:50:e4:c3:05:2f:2b:
- 35:78:91:4c:7c:a8:11:11:79:4c:49:59:ac:c8:f7:85:65:5c:
- 46:bb:3b:10:a0:02:af:cd:4f:b5:cc:36:2a:ec:5d:fe:ef:a0:
- 91:c9:b6:93:6f:7c:80:54:ec:c7:08:70:0d:8e:fb:82:ec:2a:
- 60:78:69:36:36:d1:c5:9c:8b:69:b5:40:c8:94:65:77:f2:57:
- 21:66:3b:ce:85:40:b6:33:63:1a:bf:79:1e:fc:5c:1d:d3:1d:
- 93:1b:8b:0c:5d:85:bd:99:30:32:18:09:91:52:e9:7c:a1:ba:
- ff:64:92:9a:ec:fe:35:ee:8c:2f:ae:fc:20:86:ec:4a:de:1b:
- 78:32:37:a6:81:d2:9d:af:5a:12:16:ca:99:5b:fc:6f:6d:0e:
- c5:a0:1e:86:c9:91:d0:5c:98:82:5f:63:0c:8a:5a:ab:d8:95:
- a6:cc:cb:8a:d6:bf:64:4b:8e:ca:8a:b2:b0:e9:21:32:9e:aa:
- a8:85:98:34:81:39:21:3b:a8:3a:52:32:3d:f6:6b:37:86:06:
- 5a:15:98:dc:f0:11:66:fe:34:20:b7:03:f4:41:10:7d:39:84:
- 79:96:72:63:b6:96:02:e5:6b:b9:ad:19:4d:bb:c6:44:db:36:
- cb:2a:9c:8e
-----BEGIN CERTIFICATE-----
MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
@@ -10749,60 +3021,6 @@ TbvGRNs2yyqcjg==
Hongkong Post Root CA 1
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1000 (0x3e8)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=HK, O=Hongkong Post, CN=Hongkong Post Root CA 1
- Validity
- Not Before: May 15 05:13:14 2003 GMT
- Not After : May 15 04:52:29 2023 GMT
- Subject: C=HK, O=Hongkong Post, CN=Hongkong Post Root CA 1
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ac:ff:38:b6:e9:66:02:49:e3:a2:b4:e1:90:f9:
- 40:8f:79:f9:e2:bd:79:fe:02:bd:ee:24:92:1d:22:
- f6:da:85:72:69:fe:d7:3f:09:d4:dd:91:b5:02:9c:
- d0:8d:5a:e1:55:c3:50:86:b9:29:26:c2:e3:d9:a0:
- f1:69:03:28:20:80:45:22:2d:56:a7:3b:54:95:56:
- 22:59:1f:28:df:1f:20:3d:6d:a2:36:be:23:a0:b1:
- 6e:b5:b1:27:3f:39:53:09:ea:ab:6a:e8:74:b2:c2:
- 65:5c:8e:bf:7c:c3:78:84:cd:9e:16:fc:f5:2e:4f:
- 20:2a:08:9f:77:f3:c5:1e:c4:9a:52:66:1e:48:5e:
- e3:10:06:8f:22:98:e1:65:8e:1b:5d:23:66:3b:b8:
- a5:32:51:c8:86:aa:a1:a9:9e:7f:76:94:c2:a6:6c:
- b7:41:f0:d5:c8:06:38:e6:d4:0c:e2:f3:3b:4c:6d:
- 50:8c:c4:83:27:c1:13:84:59:3d:9e:75:74:b6:d8:
- 02:5e:3a:90:7a:c0:42:36:72:ec:6a:4d:dc:ef:c4:
- 00:df:13:18:57:5f:26:78:c8:d6:0a:79:77:bf:f7:
- af:b7:76:b9:a5:0b:84:17:5d:10:ea:6f:e1:ab:95:
- 11:5f:6d:3c:a3:5c:4d:83:5b:f2:b3:19:8a:80:8b:
- 0b:87
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:3
- X509v3 Key Usage: critical
- Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 0e:46:d5:3c:ae:e2:87:d9:5e:81:8b:02:98:41:08:8c:4c:bc:
- da:db:ee:27:1b:82:e7:6a:45:ec:16:8b:4f:85:a0:f3:b2:70:
- bd:5a:96:ba:ca:6e:6d:ee:46:8b:6e:e7:2a:2e:96:b3:19:33:
- eb:b4:9f:a8:b2:37:ee:98:a8:97:b6:2e:b6:67:27:d4:a6:49:
- fd:1c:93:65:76:9e:42:2f:dc:22:6c:9a:4f:f2:5a:15:39:b1:
- 71:d7:2b:51:e8:6d:1c:98:c0:d9:2a:f4:a1:82:7b:d5:c9:41:
- a2:23:01:74:38:55:8b:0f:b9:2e:67:a2:20:04:37:da:9c:0b:
- d3:17:21:e0:8f:97:79:34:6f:84:48:02:20:33:1b:e6:34:44:
- 9f:91:70:f4:80:5e:84:43:c2:29:d2:6c:12:14:e4:61:8d:ac:
- 10:90:9e:84:50:bb:f0:96:6f:45:9f:8a:f3:ca:6c:4f:fa:11:
- 3a:15:15:46:c3:cd:1f:83:5b:2d:41:12:ed:50:67:41:13:3d:
- 21:ab:94:8a:aa:4e:7c:c1:b1:fb:a7:d6:b5:27:2f:97:ab:6e:
- e0:1d:e2:d1:1c:2c:1f:44:e2:fc:be:91:a1:9c:fb:d6:29:53:
- 73:86:9f:53:d8:43:0e:5d:d6:63:82:71:1d:80:74:ca:f6:e2:
- 02:6b:d9:5a
-----BEGIN CERTIFICATE-----
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
@@ -10826,62 +3044,6 @@ AmvZWg==
SecureSign RootCA11
===================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=JP, O=Japan Certification Services, Inc., CN=SecureSign RootCA11
- Validity
- Not Before: Apr 8 04:56:47 2009 GMT
- Not After : Apr 8 04:56:47 2029 GMT
- Subject: C=JP, O=Japan Certification Services, Inc., CN=SecureSign RootCA11
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:fd:77:aa:a5:1c:90:05:3b:cb:4c:9b:33:8b:5a:
- 14:45:a4:e7:90:16:d1:df:57:d2:21:10:a4:17:fd:
- df:ac:d6:1f:a7:e4:db:7c:f7:ec:df:b8:03:da:94:
- 58:fd:5d:72:7c:8c:3f:5f:01:67:74:15:96:e3:02:
- 3c:87:db:ae:cb:01:8e:c2:f3:66:c6:85:45:f4:02:
- c6:3a:b5:62:b2:af:fa:9c:bf:a4:e6:d4:80:30:98:
- f3:0d:b6:93:8f:a9:d4:d8:36:f2:b0:fc:8a:ca:2c:
- a1:15:33:95:31:da:c0:1b:f2:ee:62:99:86:63:3f:
- bf:dd:93:2a:83:a8:76:b9:13:1f:b7:ce:4e:42:85:
- 8f:22:e7:2e:1a:f2:95:09:b2:05:b5:44:4e:77:a1:
- 20:bd:a9:f2:4e:0a:7d:50:ad:f5:05:0d:45:4f:46:
- 71:fd:28:3e:53:fb:04:d8:2d:d7:65:1d:4a:1b:fa:
- cf:3b:b0:31:9a:35:6e:c8:8b:06:d3:00:91:f2:94:
- 08:65:4c:b1:34:06:00:7a:89:e2:f0:c7:03:59:cf:
- d5:d6:e8:a7:32:b3:e6:98:40:86:c5:cd:27:12:8b:
- cc:7b:ce:b7:11:3c:62:60:07:23:3e:2b:40:6e:94:
- 80:09:6d:b6:b3:6f:77:6f:35:08:50:fb:02:87:c5:
- 3e:89
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 5B:F8:4D:4F:B2:A5:86:D4:3A:D2:F1:63:9A:A0:BE:09:F6:57:B7:DE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- a0:a1:38:16:66:2e:a7:56:1f:21:9c:06:fa:1d:ed:b9:22:c5:
- 38:26:d8:4e:4f:ec:a3:7f:79:de:46:21:a1:87:77:8f:07:08:
- 9a:b2:a4:c5:af:0f:32:98:0b:7c:66:29:b6:9b:7d:25:52:49:
- 43:ab:4c:2e:2b:6e:7a:70:af:16:0e:e3:02:6c:fb:42:e6:18:
- 9d:45:d8:55:c8:e8:3b:dd:e7:e1:f4:2e:0b:1c:34:5c:6c:58:
- 4a:fb:8c:88:50:5f:95:1c:bf:ed:ab:22:b5:65:b3:85:ba:9e:
- 0f:b8:ad:e5:7a:1b:8a:50:3a:1d:bd:0d:bc:7b:54:50:0b:b9:
- 42:af:55:a0:18:81:ad:65:99:ef:be:e4:9c:bf:c4:85:ab:41:
- b2:54:6f:dc:25:cd:ed:78:e2:8e:0c:8d:09:49:dd:63:7b:5a:
- 69:96:02:21:a8:bd:52:59:e9:7d:35:cb:c8:52:ca:7f:81:fe:
- d9:6b:d3:f7:11:ed:25:df:f8:e7:f9:a4:fa:72:97:84:53:0d:
- a5:d0:32:18:51:76:59:14:6c:0f:eb:ec:5f:80:8c:75:43:83:
- c3:85:98:ff:4c:9e:2d:0d:e4:77:83:93:4e:b5:96:07:8b:28:
- 13:9b:8c:19:8d:41:27:49:40:ee:de:e6:23:44:39:dc:a1:22:
- d6:ba:03:f2
-----BEGIN CERTIFICATE-----
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
@@ -10906,101 +3068,6 @@ QSdJQO7e5iNEOdyhIta6A/I=
ACEDICOM Root
=============
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 61:8d:c7:86:3b:01:82:05
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: CN=ACEDICOM Root, OU=PKI, O=EDICOM, C=ES
- Validity
- Not Before: Apr 18 16:24:22 2008 GMT
- Not After : Apr 13 16:24:22 2028 GMT
- Subject: CN=ACEDICOM Root, OU=PKI, O=EDICOM, C=ES
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:ff:92:95:e1:68:06:76:b4:2c:c8:58:48:ca:fd:
- 80:54:29:55:63:24:ff:90:65:9b:10:75:7b:c3:6a:
- db:62:02:01:f2:18:86:b5:7c:5a:38:b1:e4:58:b9:
- fb:d3:d8:2d:9f:bd:32:37:bf:2c:15:6d:be:b5:f4:
- 21:d2:13:91:d9:07:ad:01:05:d6:f3:bd:77:ce:5f:
- 42:81:0a:f9:6a:e3:83:00:a8:2b:2e:55:13:63:81:
- ca:47:1c:7b:5c:16:57:7a:1b:83:60:04:3a:3e:65:
- c3:cd:01:de:de:a4:d6:0c:ba:8e:de:d9:04:ee:17:
- 56:22:9b:8f:63:fd:4d:16:0b:b7:7b:77:8c:f9:25:
- b5:d1:6d:99:12:2e:4f:1a:b8:e6:ea:04:92:ae:3d:
- 11:b9:51:42:3d:87:b0:31:85:af:79:5a:9c:fe:e7:
- 4e:5e:92:4f:43:fc:ab:3a:ad:a5:12:26:66:b9:e2:
- 0c:d7:98:ce:d4:58:a5:95:40:0a:b7:44:9d:13:74:
- 2b:c2:a5:eb:22:15:98:10:d8:8b:c5:04:9f:1d:8f:
- 60:e5:06:1b:9b:cf:b9:79:a0:3d:a2:23:3f:42:3f:
- 6b:fa:1c:03:7b:30:8d:ce:6c:c0:bf:e6:1b:5f:bf:
- 67:b8:84:19:d5:15:ef:7b:cb:90:36:31:62:c9:bc:
- 02:ab:46:5f:9b:fe:1a:68:94:34:3d:90:8e:ad:f6:
- e4:1d:09:7f:4a:88:38:3f:be:67:fd:34:96:f5:1d:
- bc:30:74:cb:38:ee:d5:6c:ab:d4:fc:f4:00:b7:00:
- 5b:85:32:16:76:33:e9:d8:a3:99:9d:05:00:aa:16:
- e6:f3:81:7d:6f:7d:aa:86:6d:ad:15:74:d3:c4:a2:
- 71:aa:f4:14:7d:e7:32:b8:1f:bc:d5:f1:4e:bd:6f:
- 17:02:39:d7:0e:95:42:3a:c7:00:3e:e9:26:63:11:
- ea:0b:d1:4a:ff:18:9d:b2:d7:7b:2f:3a:d9:96:fb:
- e8:1e:92:ae:13:55:c8:d9:27:f6:dc:48:1b:b0:24:
- c1:85:e3:77:9d:9a:a4:f3:0c:11:1d:0d:c8:b4:14:
- ee:b5:82:57:09:bf:20:58:7f:2f:22:23:d8:70:cb:
- 79:6c:c9:4b:f2:a9:2a:c8:fc:87:2b:d7:1a:50:f8:
- 27:e8:2f:43:e3:3a:bd:d8:57:71:fd:ce:a6:52:5b:
- f9:dd:4d:ed:e5:f6:6f:89:ed:bb:93:9c:76:21:75:
- f0:92:4c:29:f7:2f:9c:01:2e:fe:50:46:9e:64:0c:
- 14:b3:07:5b:c5:c2:73:6c:f1:07:5c:45:24:14:35:
- ae:83:f1:6a:4d:89:7a:fa:b3:d8:2d:66:f0:36:87:
- f5:2b:53
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:A6:B3:E1:2B:2B:49:B6:D7:73:A1:AA:94:F5:01:E7:73:65:4C:AC:50
-
- X509v3 Key Usage: critical
- Digital Signature, Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- A6:B3:E1:2B:2B:49:B6:D7:73:A1:AA:94:F5:01:E7:73:65:4C:AC:50
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://acedicom.edicomgroup.com/doc
-
- Signature Algorithm: sha1WithRSAEncryption
- ce:2c:0b:52:51:62:26:7d:0c:27:83:8f:c5:f6:da:a0:68:7b:
- 4f:92:5e:ea:a4:73:32:11:53:44:b2:44:cb:9d:ec:0f:79:42:
- b3:10:a6:c7:0d:9d:cb:b6:fa:3f:3a:7c:ea:bf:88:53:1b:3c:
- f7:82:fa:05:35:33:e1:35:a8:57:c0:e7:fd:8d:4f:3f:93:32:
- 4f:78:66:03:77:07:58:e9:95:c8:7e:3e:d0:79:00:8c:f2:1b:
- 51:33:9b:bc:94:e9:3a:7b:6e:52:2d:32:9e:23:a4:45:fb:b6:
- 2e:13:b0:8b:18:b1:dd:ce:d5:1d:a7:42:7f:55:be:fb:5b:bb:
- 47:d4:fc:24:cd:04:ae:96:05:15:d6:ac:ce:30:f3:ca:0b:c5:
- ba:e2:22:e0:a6:ad:22:e4:02:ee:74:11:7f:4c:ff:78:1d:35:
- da:e6:02:34:eb:18:12:61:77:06:09:16:63:ea:18:ad:a2:87:
- 1f:f2:c7:80:09:09:75:4e:10:a8:8f:3d:86:b8:75:11:c0:24:
- 62:8a:96:7b:4a:45:e9:ec:59:c5:be:6b:83:e6:e1:e8:ac:b5:
- 30:1e:fe:05:07:80:f9:e1:23:0d:50:8f:05:98:ff:2c:5f:e8:
- 3b:b6:ad:cf:81:b5:21:87:ca:08:2a:23:27:30:20:2b:cf:ed:
- 94:5b:ac:b2:7a:d2:c7:28:a1:8a:0b:9b:4d:4a:2c:6d:85:3f:
- 09:72:3c:67:e2:d9:dc:07:ba:eb:65:7b:5a:01:63:d6:90:5b:
- 4f:17:66:3d:7f:0b:19:a3:93:63:10:52:2a:9f:14:16:58:e2:
- dc:a5:f4:a1:16:8b:0e:91:8b:81:ca:9b:59:fa:d8:6b:91:07:
- 65:55:5f:52:1f:af:3a:fb:90:dd:69:a5:5b:9c:6d:0e:2c:b6:
- fa:ce:ac:a5:7c:32:4a:67:40:dc:30:34:23:dd:d7:04:23:66:
- f0:fc:55:80:a7:fb:66:19:82:35:67:62:70:39:5e:6f:c7:ea:
- 90:40:44:08:1e:b8:b2:d6:db:ee:59:a7:0d:18:79:34:bc:54:
- 18:5e:53:ca:34:51:ed:45:0a:e6:8e:c7:82:36:3e:a7:38:63:
- a9:30:2c:17:10:60:92:9f:55:87:12:59:10:c2:0f:67:69:11:
- cc:4e:1e:7e:4a:9a:ad:af:40:a8:75:ac:56:90:74:b8:a0:9c:
- a5:79:6f:dc:e9:1a:c8:69:05:e9:ba:fa:03:b3:7c:e4:e0:4e:
- c2:ce:9d:e8:b6:46:0d:6e:7e:57:3a:67:94:c2:cb:1f:9c:77:
- 4a:67:4e:69:86:43:93:38:fb:b6:db:4f:83:91:d4:60:7e:4b:
- 3e:2b:38:07:55:98:5e:a4
-----BEGIN CERTIFICATE-----
MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
@@ -11035,93 +3102,8 @@ r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
-----END CERTIFICATE-----
-Verisign Class 1 Public Primary Certification Authority
-=======================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 3f:69:1e:81:9c:f0:9a:4a:f3:73:ff:b9:48:a2:e4:dd
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority
- Validity
- Not Before: Jan 29 00:00:00 1996 GMT
- Not After : Aug 2 23:59:59 2028 GMT
- Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de:
- b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46:
- 88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c:
- b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58:
- 39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31:
- ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e:
- 45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9:
- 63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba:
- 2a:2f:31:aa:ee:a3:67:da:db
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 58:15:29:39:3c:77:a3:da:5c:25:03:7c:60:fa:ee:09:99:3c:
- 27:10:70:c8:0c:09:e6:b3:87:cf:0a:e2:18:96:35:62:cc:bf:
- 9b:27:79:89:5f:c9:c4:09:f4:ce:b5:1d:df:2a:bd:e5:db:86:
- 9c:68:25:e5:30:7c:b6:89:15:fe:67:d1:ad:e1:50:ac:3c:7c:
- 62:4b:8f:ba:84:d7:12:15:1b:1f:ca:5d:0f:c1:52:94:2a:11:
- 99:da:7b:cf:0c:36:13:d5:35:dc:10:19:59:ea:94:c1:00:bf:
- 75:8f:d9:fa:fd:76:04:db:62:bb:90:6a:03:d9:46:35:d9:f8:
- 7c:5b
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
-zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
-TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
-NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
-Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
------END CERTIFICATE-----
-
Verisign Class 3 Public Primary Certification Authority
=======================================================
-Certificate:
- Data:
- Version: 1 (0x0)
- Serial Number:
- 3c:91:31:cb:1f:f6:d0:1b:0e:9a:b8:d0:44:bf:12:be
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
- Validity
- Not Before: Jan 29 00:00:00 1996 GMT
- Not After : Aug 2 23:59:59 2028 GMT
- Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40:
- db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9:
- 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03:
- 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2:
- 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f:
- 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23:
- 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85:
- e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2:
- 71:64:4c:65:2e:81:68:45:a7
- Exponent: 65537 (0x10001)
- Signature Algorithm: sha1WithRSAEncryption
- 10:72:52:a9:05:14:19:32:08:41:f0:c5:6b:0a:cc:7e:0f:21:
- 19:cd:e4:67:dc:5f:a9:1b:e6:ca:e8:73:9d:22:d8:98:6e:73:
- 03:61:91:c5:7c:b0:45:40:6e:44:9d:8d:b0:b1:96:74:61:2d:
- 0d:a9:45:d2:a4:92:2a:d6:9a:75:97:6e:3f:53:fd:45:99:60:
- 1d:a8:2b:4c:f9:5e:a7:09:d8:75:30:d7:d2:65:60:3d:67:d6:
- 48:55:75:69:3f:91:f5:48:0b:47:69:22:69:82:96:be:c9:c8:
- 38:86:4a:7a:2c:73:19:48:69:4e:6b:7c:65:bf:0f:fc:70:ce:
- 88:90
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
@@ -11139,68 +3121,6 @@ CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
Microsec e-Szigno Root CA 2009
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- c2:7e:43:04:4e:47:3f:19
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=HU, L=Budapest, O=Microsec Ltd., CN=Microsec e-Szigno Root CA 2009/emailAddress=info at e-szigno.hu
- Validity
- Not Before: Jun 16 11:30:18 2009 GMT
- Not After : Dec 30 11:30:18 2029 GMT
- Subject: C=HU, L=Budapest, O=Microsec Ltd., CN=Microsec e-Szigno Root CA 2009/emailAddress=info at e-szigno.hu
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e9:f8:8f:f3:63:ad:da:86:d8:a7:e0:42:fb:cf:
- 91:de:a6:26:f8:99:a5:63:70:ad:9b:ae:ca:33:40:
- 7d:6d:96:6e:a1:0e:44:ee:e1:13:9d:94:42:52:9a:
- bd:75:85:74:2c:a8:0e:1d:93:b6:18:b7:8c:2c:a8:
- cf:fb:5c:71:b9:da:ec:fe:e8:7e:8f:e4:2f:1d:b2:
- a8:75:87:d8:b7:a1:e5:3b:cf:99:4a:46:d0:83:19:
- 7d:c0:a1:12:1c:95:6d:4a:f4:d8:c7:a5:4d:33:2e:
- 85:39:40:75:7e:14:7c:80:12:98:50:c7:41:67:b8:
- a0:80:61:54:a6:6c:4e:1f:e0:9d:0e:07:e9:c9:ba:
- 33:e7:fe:c0:55:28:2c:02:80:a7:19:f5:9e:dc:55:
- 53:03:97:7b:07:48:ff:99:fb:37:8a:24:c4:59:cc:
- 50:10:63:8e:aa:a9:1a:b0:84:1a:86:f9:5f:bb:b1:
- 50:6e:a4:d1:0a:cc:d5:71:7e:1f:a7:1b:7c:f5:53:
- 6e:22:5f:cb:2b:e6:d4:7c:5d:ae:d6:c2:c6:4c:e5:
- 05:01:d9:ed:57:fc:c1:23:79:fc:fa:c8:24:83:95:
- f3:b5:6a:51:01:d0:77:d6:e9:12:a1:f9:1a:83:fb:
- 82:1b:b9:b0:97:f4:76:06:33:43:49:a0:ff:0b:b5:
- fa:b5
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- CB:0F:C6:DF:42:43:CC:3D:CB:B5:48:23:A1:1A:7A:A6:2A:BB:34:68
- X509v3 Authority Key Identifier:
- keyid:CB:0F:C6:DF:42:43:CC:3D:CB:B5:48:23:A1:1A:7A:A6:2A:BB:34:68
-
- X509v3 Subject Alternative Name:
- email:info at e-szigno.hu
- Signature Algorithm: sha256WithRSAEncryption
- c9:d1:0e:5e:2e:d5:cc:b3:7c:3e:cb:fc:3d:ff:0d:28:95:93:
- 04:c8:bf:da:cd:79:b8:43:90:f0:a4:be:ef:f2:ef:21:98:bc:
- d4:d4:5d:06:f6:ee:42:ec:30:6c:a0:aa:a9:ca:f1:af:8a:fa:
- 3f:0b:73:6a:3e:ea:2e:40:7e:1f:ae:54:61:79:eb:2e:08:37:
- d7:23:f3:8c:9f:be:1d:b1:e1:a4:75:db:a0:e2:54:14:b1:ba:
- 1c:29:a4:18:f6:12:ba:a2:14:14:e3:31:35:c8:40:ff:b7:e0:
- 05:76:57:c1:1c:59:f2:f8:bf:e4:ed:25:62:5c:84:f0:7e:7e:
- 1f:b3:be:f9:b7:21:11:cc:03:01:56:70:a7:10:92:1e:1b:34:
- 81:1e:ad:9c:1a:c3:04:3c:ed:02:61:d6:1e:06:f3:5f:3a:87:
- f2:2b:f1:45:87:e5:3d:ac:d1:c7:57:84:bd:6b:ae:dc:d8:f9:
- b6:1b:62:70:0b:3d:36:c9:42:f2:32:d7:7a:61:e6:d2:db:3d:
- cf:c8:a9:c9:9b:dc:db:58:44:d7:6f:38:af:7f:78:d3:a3:ad:
- 1a:75:ba:1c:c1:36:7c:8f:1e:6d:1c:c3:75:46:ae:35:05:a6:
- f6:5c:3d:21:ee:56:f0:c9:82:22:2d:7a:54:ab:70:c3:7d:22:
- 65:82:70:96
-----BEGIN CERTIFICATE-----
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
@@ -11228,63 +3148,6 @@ HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
===================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 44:99:8d:3c:c0:03:27:bd:9c:76:95:b9:ea:db:ac:b5
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=TR, O=Elektronik Bilgi Guvenligi A.S., CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
- Validity
- Not Before: Jan 4 11:32:48 2007 GMT
- Not After : Jan 4 11:32:48 2017 GMT
- Subject: C=TR, O=Elektronik Bilgi Guvenligi A.S., CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c3:12:20:9e:b0:5e:00:65:8d:4e:46:bb:80:5c:
- e9:2c:06:97:d5:f3:72:c9:70:b9:e7:4b:65:80:c1:
- 4b:be:7e:3c:d7:54:31:94:de:d5:12:ba:53:16:02:
- ea:58:63:ef:5b:d8:f3:ed:2a:1a:aa:71:48:a3:dc:
- 10:2d:5f:5f:eb:5c:4b:9c:96:08:42:25:28:11:cc:
- 8a:5a:62:01:50:d5:eb:09:53:2f:f8:c3:8f:fe:b3:
- fc:fd:9d:a2:e3:5f:7d:be:ed:0b:e0:60:eb:69:ec:
- 33:ed:d8:8d:fb:12:49:83:00:c9:8b:97:8c:3b:73:
- 2a:32:b3:12:f7:b9:4d:f2:f4:4d:6d:c7:e6:d6:26:
- 37:08:f2:d9:fd:6b:5c:a3:e5:48:5c:58:bc:42:be:
- 03:5a:81:ba:1c:35:0c:00:d3:f5:23:7e:71:30:08:
- 26:38:dc:25:11:47:2d:f3:ba:23:10:a5:bf:bc:02:
- f7:43:5e:c7:fe:b0:37:50:99:7b:0f:93:ce:e6:43:
- 2c:c3:7e:0d:f2:1c:43:66:60:cb:61:31:47:87:a3:
- 4f:ae:bd:56:6c:4c:bc:bc:f8:05:ca:64:f4:e9:34:
- a1:2c:b5:73:e1:c2:3e:e8:c8:c9:34:25:08:5c:f3:
- ed:a6:c7:94:9f:ad:88:43:25:d7:e1:39:60:fe:ac:
- 39:59
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 9F:EE:44:B3:94:D5:FA:91:4F:2E:D9:55:9A:04:56:DB:2D:C4:DB:A5
- Signature Algorithm: sha1WithRSAEncryption
- 7f:5f:b9:53:5b:63:3d:75:32:e7:fa:c4:74:1a:cb:46:df:46:
- 69:1c:52:cf:aa:4f:c2:68:eb:ff:80:a9:51:e8:3d:62:77:89:
- 3d:0a:75:39:f1:6e:5d:17:87:6f:68:05:c1:94:6c:d9:5d:df:
- da:b2:59:cb:a5:10:8a:ca:cc:39:cd:9f:eb:4e:de:52:ff:0c:
- f0:f4:92:a9:f2:6c:53:ab:9b:d2:47:a0:1f:74:f7:9b:9a:f1:
- 2f:15:9f:7a:64:30:18:07:3c:2a:0f:67:ca:fc:0f:89:61:9d:
- 65:a5:3c:e5:bc:13:5b:08:db:e3:ff:ed:bb:06:bb:6a:06:b1:
- 7a:4f:65:c6:82:fd:1e:9c:8b:b5:0d:ee:48:bb:b8:bd:aa:08:
- b4:fb:a3:7c:cb:9f:cd:90:76:5c:86:96:78:57:0a:66:f9:58:
- 1a:9d:fd:97:29:60:de:11:a6:90:1c:19:1c:ee:01:96:22:34:
- 34:2e:91:f9:b7:c4:27:d1:7b:e6:bf:fb:80:44:5a:16:e5:eb:
- e0:d4:0a:38:bc:e4:91:e3:d5:eb:5c:c1:ac:df:1b:6a:7c:9e:
- e5:75:d2:b6:97:87:db:cc:87:2b:43:3a:84:08:af:ab:3c:db:
- f7:3c:66:31:86:b0:9d:53:79:ed:f8:23:de:42:e3:2d:82:f1:
- 0f:e5:fa:97
-----BEGIN CERTIFICATE-----
MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
@@ -11310,63 +3173,6 @@ fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
GlobalSign Root CA - R3
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 04:00:00:00:00:01:21:58:53:08:a2
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign
- Validity
- Not Before: Mar 18 10:00:00 2009 GMT
- Not After : Mar 18 10:00:00 2029 GMT
- Subject: OU=GlobalSign Root CA - R3, O=GlobalSign, CN=GlobalSign
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:cc:25:76:90:79:06:78:22:16:f5:c0:83:b6:84:
- ca:28:9e:fd:05:76:11:c5:ad:88:72:fc:46:02:43:
- c7:b2:8a:9d:04:5f:24:cb:2e:4b:e1:60:82:46:e1:
- 52:ab:0c:81:47:70:6c:dd:64:d1:eb:f5:2c:a3:0f:
- 82:3d:0c:2b:ae:97:d7:b6:14:86:10:79:bb:3b:13:
- 80:77:8c:08:e1:49:d2:6a:62:2f:1f:5e:fa:96:68:
- df:89:27:95:38:9f:06:d7:3e:c9:cb:26:59:0d:73:
- de:b0:c8:e9:26:0e:83:15:c6:ef:5b:8b:d2:04:60:
- ca:49:a6:28:f6:69:3b:f6:cb:c8:28:91:e5:9d:8a:
- 61:57:37:ac:74:14:dc:74:e0:3a:ee:72:2f:2e:9c:
- fb:d0:bb:bf:f5:3d:00:e1:06:33:e8:82:2b:ae:53:
- a6:3a:16:73:8c:dd:41:0e:20:3a:c0:b4:a7:a1:e9:
- b2:4f:90:2e:32:60:e9:57:cb:b9:04:92:68:68:e5:
- 38:26:60:75:b2:9f:77:ff:91:14:ef:ae:20:49:fc:
- ad:40:15:48:d1:02:31:61:19:5e:b8:97:ef:ad:77:
- b7:64:9a:7a:bf:5f:c1:13:ef:9b:62:fb:0d:6c:e0:
- 54:69:16:a9:03:da:6e:e9:83:93:71:76:c6:69:85:
- 82:17
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 8F:F0:4B:7F:A8:2E:45:24:AE:4D:50:FA:63:9A:8B:DE:E2:DD:1B:BC
- Signature Algorithm: sha256WithRSAEncryption
- 4b:40:db:c0:50:aa:fe:c8:0c:ef:f7:96:54:45:49:bb:96:00:
- 09:41:ac:b3:13:86:86:28:07:33:ca:6b:e6:74:b9:ba:00:2d:
- ae:a4:0a:d3:f5:f1:f1:0f:8a:bf:73:67:4a:83:c7:44:7b:78:
- e0:af:6e:6c:6f:03:29:8e:33:39:45:c3:8e:e4:b9:57:6c:aa:
- fc:12:96:ec:53:c6:2d:e4:24:6c:b9:94:63:fb:dc:53:68:67:
- 56:3e:83:b8:cf:35:21:c3:c9:68:fe:ce:da:c2:53:aa:cc:90:
- 8a:e9:f0:5d:46:8c:95:dd:7a:58:28:1a:2f:1d:de:cd:00:37:
- 41:8f:ed:44:6d:d7:53:28:97:7e:f3:67:04:1e:15:d7:8a:96:
- b4:d3:de:4c:27:a4:4c:1b:73:73:76:f4:17:99:c2:1f:7a:0e:
- e3:2d:08:ad:0a:1c:2c:ff:3c:ab:55:0e:0f:91:7e:36:eb:c3:
- 57:49:be:e1:2e:2d:7c:60:8b:c3:41:51:13:23:9d:ce:f7:32:
- 6b:94:01:a8:99:e7:2c:33:1f:3a:3b:25:d2:86:40:ce:3b:2c:
- 86:78:c9:61:2f:14:ba:ee:db:55:6f:df:84:ee:05:09:4d:bd:
- 28:d8:72:ce:d3:62:50:65:1e:eb:92:97:83:31:d9:b3:b5:ca:
- 47:58:3f:5f
-----BEGIN CERTIFICATE-----
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
@@ -11391,66 +3197,6 @@ WD9f
TC TrustCenter Universal CA III
===============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 63:25:00:01:00:02:14:8d:33:15:02:e4:6c:f4
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA III
- Validity
- Not Before: Sep 9 08:15:27 2009 GMT
- Not After : Dec 31 23:59:59 2029 GMT
- Subject: C=DE, O=TC TrustCenter GmbH, OU=TC TrustCenter Universal CA, CN=TC TrustCenter Universal CA III
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c2:da:9c:62:b0:b9:71:12:b0:0b:c8:1a:57:b2:
- ae:83:14:99:b3:34:4b:9b:90:a2:c5:e7:e7:2f:02:
- a0:4d:2d:a4:fa:85:da:9b:25:85:2d:40:28:20:6d:
- ea:e0:bd:b1:48:83:22:29:44:9f:4e:83:ee:35:51:
- 13:73:74:d5:bc:f2:30:66:94:53:c0:40:36:2f:0c:
- 84:65:ce:0f:6e:c2:58:93:e8:2c:0b:3a:e9:c1:8e:
- fb:f2:6b:ca:3c:e2:9c:4e:8e:e4:f9:7d:d3:27:9f:
- 1b:d5:67:78:87:2d:7f:0b:47:b3:c7:e8:c9:48:7c:
- af:2f:cc:0a:d9:41:ef:9f:fe:9a:e1:b2:ae:f9:53:
- b5:e5:e9:46:9f:60:e3:df:8d:d3:7f:fb:96:7e:b3:
- b5:72:f8:4b:ad:08:79:cd:69:89:40:27:f5:2a:c1:
- ad:43:ec:a4:53:c8:61:b6:f7:d2:79:2a:67:18:76:
- 48:6d:5b:25:01:d1:26:c5:b7:57:69:23:15:5b:61:
- 8a:ad:f0:1b:2d:d9:af:5c:f1:26:90:69:a9:d5:0c:
- 40:f5:33:80:43:8f:9c:a3:76:2a:45:b4:af:bf:7f:
- 3e:87:3f:76:c5:cd:2a:de:20:c5:16:58:cb:f9:1b:
- f5:0f:cb:0d:11:52:64:b8:d2:76:62:77:83:f1:58:
- 9f:ff
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Authority Key Identifier:
- keyid:56:E7:E1:5B:25:43:80:E0:F6:8C:E1:71:BC:8E:E5:80:2F:C4:48:E2
-
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 56:E7:E1:5B:25:43:80:E0:F6:8C:E1:71:BC:8E:E5:80:2F:C4:48:E2
- Signature Algorithm: sha1WithRSAEncryption
- 83:c7:af:ea:7f:4d:0a:3c:39:b1:68:be:7b:6d:89:2e:e9:b3:
- 09:e7:18:57:8d:85:9a:17:f3:76:42:50:13:0f:c7:90:6f:33:
- ad:c5:49:60:2b:6c:49:58:19:d4:e2:be:b7:bf:ab:49:bc:94:
- c8:ab:be:28:6c:16:68:e0:c8:97:46:20:a0:68:67:60:88:39:
- 20:51:d8:68:01:11:ce:a7:f6:11:07:f6:ec:ec:ac:1a:1f:b2:
- 66:6e:56:67:60:7a:74:5e:c0:6d:97:36:ae:b5:0d:5d:66:73:
- c0:25:32:45:d8:4a:06:07:8f:c4:b7:07:b1:4d:06:0d:e1:a5:
- eb:f4:75:ca:ba:9c:d0:bd:b3:d3:32:24:4c:ee:7e:e2:76:04:
- 4b:49:53:d8:f2:e9:54:33:fc:e5:71:1f:3d:14:5c:96:4b:f1:
- 3a:f2:00:bb:6c:b4:fa:96:55:08:88:09:c1:cc:91:19:29:b0:
- 20:2d:ff:cb:38:a4:40:e1:17:be:79:61:80:ff:07:03:86:4c:
- 4e:7b:06:9f:11:86:8d:89:ee:27:c4:db:e2:bc:19:8e:0b:c3:
- c3:13:c7:2d:03:63:3b:d3:e8:e4:a2:2a:c2:82:08:94:16:54:
- f0:ef:1f:27:90:25:b8:0d:0e:28:1b:47:77:47:bd:1c:a8:25:
- f1:94:b4:66
-----BEGIN CERTIFICATE-----
MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
@@ -11477,100 +3223,6 @@ LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
Autoridad de Certificacion Firmaprofesional CIF A62634068
=========================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 53:ec:3b:ee:fb:b2:48:5f
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=ES, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068
- Validity
- Not Before: May 20 08:38:15 2009 GMT
- Not After : Dec 31 08:38:15 2030 GMT
- Subject: C=ES, CN=Autoridad de Certificacion Firmaprofesional CIF A62634068
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:ca:96:6b:8e:ea:f8:fb:f1:a2:35:e0:7f:4c:da:
- e0:c3:52:d7:7d:b6:10:c8:02:5e:b3:43:2a:c4:4f:
- 6a:b2:ca:1c:5d:28:9a:78:11:1a:69:59:57:af:b5:
- 20:42:e4:8b:0f:e6:df:5b:a6:03:92:2f:f5:11:e4:
- 62:d7:32:71:38:d9:04:0c:71:ab:3d:51:7e:0f:07:
- df:63:05:5c:e9:bf:94:6f:c1:29:82:c0:b4:da:51:
- b0:c1:3c:bb:ad:37:4a:5c:ca:f1:4b:36:0e:24:ab:
- bf:c3:84:77:fd:a8:50:f4:b1:e7:c6:2f:d2:2d:59:
- 8d:7a:0a:4e:96:69:52:02:aa:36:98:ec:fc:fa:14:
- 83:0c:37:1f:c9:92:37:7f:d7:81:2d:e5:c4:b9:e0:
- 3e:34:fe:67:f4:3e:66:d1:d3:f4:40:cf:5e:62:34:
- 0f:70:06:3e:20:18:5a:ce:f7:72:1b:25:6c:93:74:
- 14:93:a3:73:b1:0e:aa:87:10:23:59:5f:20:05:19:
- 47:ed:68:8e:92:12:ca:5d:fc:d6:2b:b2:92:3c:20:
- cf:e1:5f:af:20:be:a0:76:7f:76:e5:ec:1a:86:61:
- 33:3e:e7:7b:b4:3f:a0:0f:8e:a2:b9:6a:6f:b9:87:
- 26:6f:41:6c:88:a6:50:fd:6a:63:0b:f5:93:16:1b:
- 19:8f:b2:ed:9b:9b:c9:90:f5:01:0c:df:19:3d:0f:
- 3e:38:23:c9:2f:8f:0c:d1:02:fe:1b:55:d6:4e:d0:
- 8d:3c:af:4f:a4:f3:fe:af:2a:d3:05:9d:79:08:a1:
- cb:57:31:b4:9c:c8:90:b2:67:f4:18:16:93:3a:fc:
- 47:d8:d1:78:96:31:1f:ba:2b:0c:5f:5d:99:ad:63:
- 89:5a:24:20:76:d8:df:fd:ab:4e:a6:22:aa:9d:5e:
- e6:27:8a:7d:68:29:a3:e7:8a:b8:da:11:bb:17:2d:
- 99:9d:13:24:46:f7:c5:e2:d8:9f:8e:7f:c7:8f:74:
- 6d:5a:b2:e8:72:f5:ac:ee:24:10:ad:2f:14:da:ff:
- 2d:9a:46:71:47:be:42:df:bb:01:db:f4:7f:d3:28:
- 8f:31:59:5b:d3:c9:02:a6:b4:52:ca:6e:97:fb:43:
- c5:08:26:6f:8a:f4:bb:fd:9f:28:aa:0d:d5:45:f3:
- 13:3a:1d:d8:c0:78:8f:41:67:3c:1e:94:64:ae:7b:
- 0b:c5:e8:d9:01:88:39:1a:97:86:64:41:d5:3b:87:
- 0c:6e:fa:0f:c6:bd:48:14:bf:39:4d:d4:9e:41:b6:
- 8f:96:1d:63:96:93:d9:95:06:78:31:68:9e:37:06:
- 3b:80:89:45:61:39:23:c7:1b:44:a3:15:e5:1c:f8:
- 92:30:bb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:1
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 65:CD:EB:AB:35:1E:00:3E:7E:D5:74:C0:1C:B4:73:47:0E:1A:64:2F
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://www.firmaprofesional.com/cps
- User Notice:
- Explicit Text:
-
- Signature Algorithm: sha1WithRSAEncryption
- 17:7d:a0:f9:b4:dd:c5:c5:eb:ad:4b:24:b5:a1:02:ab:dd:a5:
- 88:4a:b2:0f:55:4b:2b:57:8c:3b:e5:31:dd:fe:c4:32:f1:e7:
- 5b:64:96:36:32:18:ec:a5:32:77:d7:e3:44:b6:c0:11:2a:80:
- b9:3d:6a:6e:7c:9b:d3:ad:fc:c3:d6:a3:e6:64:29:7c:d1:e1:
- 38:1e:82:2b:ff:27:65:af:fb:16:15:c4:2e:71:84:e5:b5:ff:
- fa:a4:47:bd:64:32:bb:f6:25:84:a2:27:42:f5:20:b0:c2:13:
- 10:11:cd:10:15:ba:42:90:2a:d2:44:e1:96:26:eb:31:48:12:
- fd:2a:da:c9:06:cf:74:1e:a9:4b:d5:87:28:f9:79:34:92:3e:
- 2e:44:e8:f6:8f:4f:8f:35:3f:25:b3:39:dc:63:2a:90:6b:20:
- 5f:c4:52:12:4e:97:2c:2a:ac:9d:97:de:48:f2:a3:66:db:c2:
- d2:83:95:a6:66:a7:9e:25:0f:e9:0b:33:91:65:0a:5a:c3:d9:
- 54:12:dd:af:c3:4e:0e:1f:26:5e:0d:dc:b3:8d:ec:d5:81:70:
- de:d2:4f:24:05:f3:6c:4e:f5:4c:49:66:8d:d1:ff:d2:0b:25:
- 41:48:fe:51:84:c6:42:af:80:04:cf:d0:7e:64:49:e4:f2:df:
- a2:ec:b1:4c:c0:2a:1d:e7:b4:b1:65:a2:c4:bc:f1:98:f4:aa:
- 70:07:63:b4:b8:da:3b:4c:fa:40:22:30:5b:11:a6:f0:05:0e:
- c6:02:03:48:ab:86:9b:85:dd:db:dd:ea:a2:76:80:73:7d:f5:
- 9c:04:c4:45:8d:e7:b9:1c:8b:9e:ea:d7:75:d1:72:b1:de:75:
- 44:e7:42:7d:e2:57:6b:7d:dc:99:bc:3d:83:28:ea:80:93:8d:
- c5:4c:65:c1:70:81:b8:38:fc:43:31:b2:f6:03:34:47:b2:ac:
- fb:22:06:cb:1e:dd:17:47:1c:5f:66:b9:d3:1a:a2:da:11:b1:
- a4:bc:23:c9:e4:be:87:ff:b9:94:b6:f8:5d:20:4a:d4:5f:e7:
- bd:68:7b:65:f2:15:1e:d2:3a:a9:2d:e9:d8:6b:24:ac:97:58:
- 44:47:ad:59:18:f1:21:65:70:de:ce:34:60:a8:40:f1:f3:3c:
- a4:c3:28:23:8c:fe:27:33:43:40:a0:17:3c:eb:ea:3b:b0:72:
- a6:a3:b9:4a:4b:5e:16:48:f4:b2:bc:c8:8c:92:c5:9d:9f:ac:
- 72:36:bc:34:80:34:6b:a9:8b:92:c0:b8:17:ed:ec:76:53:f5:
- 24:01:8c:b3:22:e8:4b:7c:55:c6:9d:fa:a3:14:bb:65:85:6e:
- 6e:4f:12:7e:0a:3c:9d:95
-----BEGIN CERTIFICATE-----
MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
@@ -11609,96 +3261,6 @@ jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
Izenpe.com
==========
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- b0:b7:5a:16:48:5f:bf:e1:cb:f5:8b:d7:19:e6:7d
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=ES, O=IZENPE S.A., CN=Izenpe.com
- Validity
- Not Before: Dec 13 13:08:28 2007 GMT
- Not After : Dec 13 08:27:25 2037 GMT
- Subject: C=ES, O=IZENPE S.A., CN=Izenpe.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c9:d3:7a:ca:0f:1e:ac:a7:86:e8:16:65:6a:b1:
- c2:1b:45:32:71:95:d9:fe:10:5b:cc:af:e7:a5:79:
- 01:8f:89:c3:ca:f2:55:71:f7:77:be:77:94:f3:72:
- a4:2c:44:d8:9e:92:9b:14:3a:a1:e7:24:90:0a:0a:
- 56:8e:c5:d8:26:94:e1:d9:48:e1:2d:3e:da:0a:72:
- dd:a3:99:15:da:81:a2:87:f4:7b:6e:26:77:89:58:
- ad:d6:eb:0c:b2:41:7a:73:6e:6d:db:7a:78:41:e9:
- 08:88:12:7e:87:2e:66:11:63:6c:54:fb:3c:9d:72:
- c0:bc:2e:ff:c2:b7:dd:0d:76:e3:3a:d7:f7:b4:68:
- be:a2:f5:e3:81:6e:c1:46:6f:5d:8d:e0:4d:c6:54:
- 55:89:1a:33:31:0a:b1:57:b9:a3:8a:98:c3:ec:3b:
- 34:c5:95:41:69:7e:75:c2:3c:20:c5:61:ba:51:47:
- a0:20:90:93:a1:90:4b:f3:4e:7c:85:45:54:9a:d1:
- 05:26:41:b0:b5:4d:1d:33:be:c4:03:c8:25:7c:c1:
- 70:db:3b:f4:09:2d:54:27:48:ac:2f:e1:c4:ac:3e:
- c8:cb:92:4c:53:39:37:23:ec:d3:01:f9:e0:09:44:
- 4d:4d:64:c0:e1:0d:5a:87:22:bc:ad:1b:a3:fe:26:
- b5:15:f3:a7:fc:84:19:e9:ec:a1:88:b4:44:69:84:
- 83:f3:89:d1:74:06:a9:cc:0b:d6:c2:de:27:85:50:
- 26:ca:17:b8:c9:7a:87:56:2c:1a:01:1e:6c:be:13:
- ad:10:ac:b5:24:f5:38:91:a1:d6:4b:da:f1:bb:d2:
- de:47:b5:f1:bc:81:f6:59:6b:cf:19:53:e9:8d:15:
- cb:4a:cb:a9:6f:44:e5:1b:41:cf:e1:86:a7:ca:d0:
- 6a:9f:bc:4c:8d:06:33:5a:a2:85:e5:90:35:a0:62:
- 5c:16:4e:f0:e3:a2:fa:03:1a:b4:2c:71:b3:58:2c:
- de:7b:0b:db:1a:0f:eb:de:21:1f:06:77:06:03:b0:
- c9:ef:99:fc:c0:b9:4f:0b:86:28:fe:d2:b9:ea:e3:
- da:a5:c3:47:69:12:e0:db:f0:f6:19:8b:ed:7b:70:
- d7:02:d6:ed:87:18:28:2c:04:24:4c:77:e4:48:8a:
- 1a:c6:3b:9a:d4:0f:ca:fa:75:d2:01:40:5a:8d:79:
- bf:8b:cf:4b:cf:aa:16:c1:95:e4:ad:4c:8a:3e:17:
- 91:d4:b1:62:e5:82:e5:80:04:a4:03:7e:8d:bf:da:
- 7f:a2:0f:97:4f:0c:d3:0d:fb:d7:d1:e5:72:7e:1c:
- c8:77:ff:5b:9a:0f:b7:ae:05:46:e5:f1:a8:16:ec:
- 47:a4:17
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Alternative Name:
- email:info at izenpe.com, DirName:/O=IZENPE S.A. - CIF A01337260-RMerc.Vitoria-Gasteiz T1055 F62 S8/streetAddress=Avda del Mediterraneo Etorbidea 14 - 01010 Vitoria-Gasteiz
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 1D:1C:65:0E:A8:F2:25:7B:B4:91:CF:E4:B1:B1:E6:BD:55:74:6C:05
- Signature Algorithm: sha256WithRSAEncryption
- 78:a6:0c:16:4a:9f:4c:88:3a:c0:cb:0e:a5:16:7d:9f:b9:48:
- 5f:18:8f:0d:62:36:f6:cd:19:6b:ac:ab:d5:f6:91:7d:ae:71:
- f3:3f:b3:0e:78:85:9b:95:a4:27:21:47:42:4a:7c:48:3a:f5:
- 45:7c:b3:0c:8e:51:78:ac:95:13:de:c6:fd:7d:b8:1a:90:4c:
- ab:92:03:c7:ed:42:01:ce:0f:d8:b1:fa:a2:92:e1:60:6d:ae:
- 7a:6b:09:aa:c6:29:ee:68:49:67:30:80:24:7a:31:16:39:5b:
- 7e:f1:1c:2e:dd:6c:09:ad:f2:31:c1:82:4e:b9:bb:f9:be:bf:
- 2a:85:3f:c0:40:a3:3a:59:fc:59:4b:3c:28:24:db:b4:15:75:
- ae:0d:88:ba:2e:73:c0:bd:58:87:e5:42:f2:eb:5e:ee:1e:30:
- 22:99:cb:37:d1:c4:21:6c:81:ec:be:6d:26:e6:1c:e4:42:20:
- 9e:47:b0:ac:83:59:70:2c:35:d6:af:36:34:b4:cd:3b:f8:32:
- a8:ef:e3:78:89:fb:8d:45:2c:da:9c:b8:7e:40:1c:61:e7:3e:
- a2:92:2c:4b:f2:cd:fa:98:b6:29:ff:f3:f2:7b:a9:1f:2e:a0:
- 93:57:2b:de:85:03:f9:69:37:cb:9e:78:6a:05:b4:c5:31:78:
- 89:ec:7a:a7:85:e1:b9:7b:3c:de:be:1e:79:84:ce:9f:70:0e:
- 59:c2:35:2e:90:2a:31:d9:e4:45:7a:41:a4:2e:13:9b:34:0e:
- 66:7b:49:ab:64:97:d0:46:c3:79:9d:72:50:63:a6:98:5b:06:
- bd:48:6d:d8:39:83:70:e8:35:f0:05:d1:aa:bc:e3:db:c8:02:
- ea:7c:fd:82:da:c2:5b:52:35:ae:98:3a:ad:ba:35:93:23:a7:
- 1f:48:dd:35:46:98:b2:10:68:e4:a5:31:c2:0a:58:2e:19:81:
- 10:c9:50:75:fc:ea:5a:16:ce:11:d7:ee:ef:50:88:2d:61:ff:
- 3f:42:73:05:94:43:d5:8e:3c:4e:01:3a:19:a5:1f:46:4e:77:
- d0:5d:e5:81:22:21:87:fe:94:7d:84:d8:93:ad:d6:68:43:48:
- b2:db:eb:73:24:e7:91:7f:54:a4:b6:80:3e:9d:a3:3c:4c:72:
- c2:57:c4:a0:d4:cc:38:27:ce:d5:06:9e:a2:48:d9:e9:9f:ce:
- 82:70:36:93:9a:3b:df:96:21:e3:59:b7:0c:da:91:37:f0:fd:
- 59:5a:b3:99:c8:69:6c:43:26:01:35:63:60:55:89:03:3a:75:
- d8:ba:4a:d9:54:ff:ee:de:80:d8:2d:d1:38:d5:5e:2d:0b:98:
- 7d:3e:6c:db:fc:26:88:c7
-----BEGIN CERTIFICATE-----
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
@@ -11736,103 +3298,6 @@ QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
Chambers of Commerce Root - 2008
================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- a3:da:42:7e:a4:b1:ae:da
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Chambers of Commerce Root - 2008
- Validity
- Not Before: Aug 1 12:29:50 2008 GMT
- Not After : Jul 31 12:29:50 2038 GMT
- Subject: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Chambers of Commerce Root - 2008
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:af:00:cb:70:37:2b:80:5a:4a:3a:6c:78:94:7d:
- a3:7f:1a:1f:f6:35:d5:bd:db:cb:0d:44:72:3e:26:
- b2:90:52:ba:63:3b:28:58:6f:a5:b3:6d:94:a6:f3:
- dd:64:0c:55:f6:f6:e7:f2:22:22:80:5e:e1:62:c6:
- b6:29:e1:81:6c:f2:bf:e5:7d:32:6a:54:a0:32:19:
- 59:fe:1f:8b:d7:3d:60:86:85:24:6f:e3:11:b3:77:
- 3e:20:96:35:21:6b:b3:08:d9:70:2e:64:f7:84:92:
- 53:d6:0e:b0:90:8a:8a:e3:87:8d:06:d3:bd:90:0e:
- e2:99:a1:1b:86:0e:da:9a:0a:bb:0b:61:50:06:52:
- f1:9e:7f:76:ec:cb:0f:d0:1e:0d:cf:99:30:3d:1c:
- c4:45:10:58:ac:d6:d3:e8:d7:e5:ea:c5:01:07:77:
- d6:51:e6:03:7f:8a:48:a5:4d:68:75:b9:e9:bc:9e:
- 4e:19:71:f5:32:4b:9c:6d:60:19:0b:fb:cc:9d:75:
- dc:bf:26:cd:8f:93:78:39:79:73:5e:25:0e:ca:5c:
- eb:77:12:07:cb:64:41:47:72:93:ab:50:c3:eb:09:
- 76:64:34:d2:39:b7:76:11:09:0d:76:45:c4:a9:ae:
- 3d:6a:af:b5:7d:65:2f:94:58:10:ec:5c:7c:af:7e:
- e2:b6:18:d9:d0:9b:4e:5a:49:df:a9:66:0b:cc:3c:
- c6:78:7c:a7:9c:1d:e3:ce:8e:53:be:05:de:60:0f:
- 6b:e5:1a:db:3f:e3:e1:21:c9:29:c1:f1:eb:07:9c:
- 52:1b:01:44:51:3c:7b:25:d7:c4:e5:52:54:5d:25:
- 07:ca:16:20:b8:ad:e4:41:ee:7a:08:fe:99:6f:83:
- a6:91:02:b0:6c:36:55:6a:e7:7d:f5:96:e6:ca:81:
- d6:97:f1:94:83:e9:ed:b0:b1:6b:12:69:1e:ac:fb:
- 5d:a9:c5:98:e9:b4:5b:58:7a:be:3d:a2:44:3a:63:
- 59:d4:0b:25:de:1b:4f:bd:e5:01:9e:cd:d2:29:d5:
- 9f:17:19:0a:6f:bf:0c:90:d3:09:5f:d9:e3:8a:35:
- cc:79:5a:4d:19:37:92:b7:c4:c1:ad:af:f4:79:24:
- 9a:b2:01:0b:b1:af:5c:96:f3:80:32:fb:5c:3d:98:
- f1:a0:3f:4a:de:be:af:94:2e:d9:55:9a:17:6e:60:
- 9d:63:6c:b8:63:c9:ae:81:5c:18:35:e0:90:bb:be:
- 3c:4f:37:22:b9:7e:eb:cf:9e:77:21:a6:3d:38:81:
- fb:48:da:31:3d:2b:e3:89:f5:d0:b5:bd:7e:e0:50:
- c4:12:89:b3:23:9a:10:31:85:db:ae:6f:ef:38:33:
- 18:76:11
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:12
- X509v3 Subject Key Identifier:
- F9:24:AC:0F:B2:B5:F8:79:C0:FA:60:88:1B:C4:D9:4D:02:9E:17:19
- X509v3 Authority Key Identifier:
- keyid:F9:24:AC:0F:B2:B5:F8:79:C0:FA:60:88:1B:C4:D9:4D:02:9E:17:19
- DirName:/C=EU/L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287/O=AC Camerfirma S.A./CN=Chambers of Commerce Root - 2008
- serial:A3:DA:42:7E:A4:B1:AE:DA
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://policy.camerfirma.com
-
- Signature Algorithm: sha1WithRSAEncryption
- 90:12:af:22:35:c2:a3:39:f0:2e:de:e9:b5:e9:78:7c:48:be:
- 3f:7d:45:92:5e:e9:da:b1:19:fc:16:3c:9f:b4:5b:66:9e:6a:
- e7:c3:b9:5d:88:e8:0f:ad:cf:23:0f:de:25:3a:5e:cc:4f:a5:
- c1:b5:2d:ac:24:d2:58:07:de:a2:cf:69:84:60:33:e8:10:0d:
- 13:a9:23:d0:85:e5:8e:7b:a6:9e:3d:72:13:72:33:f5:aa:7d:
- c6:63:1f:08:f4:fe:01:7f:24:cf:2b:2c:54:09:de:e2:2b:6d:
- 92:c6:39:4f:16:ea:3c:7e:7a:46:d4:45:6a:46:a8:eb:75:82:
- 56:a7:ab:a0:7c:68:13:33:f6:9d:30:f0:6f:27:39:24:23:2a:
- 90:fd:90:29:35:f2:93:df:34:a5:c6:f7:f8:ef:8c:0f:62:4a:
- 7c:ae:d3:f5:54:f8:8d:b6:9a:56:87:16:82:3a:33:ab:5a:22:
- 08:f7:82:ba:ea:2e:e0:47:9a:b4:b5:45:a3:05:3b:d9:dc:2e:
- 45:40:3b:ea:dc:7f:e8:3b:eb:d1:ec:26:d8:35:a4:30:c5:3a:
- ac:57:9e:b3:76:a5:20:7b:f9:1e:4a:05:62:01:a6:28:75:60:
- 97:92:0d:6e:3e:4d:37:43:0d:92:15:9c:18:22:cd:51:99:a0:
- 29:1a:3c:5f:8a:32:33:5b:30:c7:89:2f:47:98:0f:a3:03:c6:
- f6:f1:ac:df:32:f0:d9:81:1a:e4:9c:bd:f6:80:14:f0:d1:2c:
- b9:85:f5:d8:a3:b1:c8:a5:21:e5:1c:13:97:ee:0e:bd:df:29:
- a9:ef:34:53:5b:d3:e4:6a:13:84:06:b6:32:02:c4:52:ae:22:
- d2:dc:b2:21:42:1a:da:40:f0:29:c9:ec:0a:0c:5c:e2:d0:ba:
- cc:48:d3:37:0a:cc:12:0a:8a:79:b0:3d:03:7f:69:4b:f4:34:
- 20:7d:b3:34:ea:8e:4b:64:f5:3e:fd:b3:23:67:15:0d:04:b8:
- f0:2d:c1:09:51:3c:b2:6c:15:f0:a5:23:d7:83:74:e4:e5:2e:
- c9:fe:98:27:42:c6:ab:c6:9e:b0:d0:5b:38:a5:9b:50:de:7e:
- 18:98:b5:45:3b:f6:79:b4:e8:f7:1a:7b:06:83:fb:d0:8b:da:
- bb:c7:bd:18:ab:08:6f:3c:80:6b:40:3f:19:19:ba:65:8a:e6:
- be:d5:5c:d3:36:d7:ef:40:52:24:60:38:67:04:31:ec:8f:f3:
- 82:c6:de:b9:55:f3:3b:31:91:5a:dc:b5:08:15:ad:76:25:0a:
- 0d:7b:2e:87:e2:0c:a6:06:bc:26:10:6d:37:9d:ec:dd:78:8c:
- 7c:80:c5:f0:d9:77:48:d0
-----BEGIN CERTIFICATE-----
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
@@ -11878,103 +3343,6 @@ d0jQ
Global Chambersign Root - 2008
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- c9:cd:d3:e9:d5:7d:23:ce
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Global Chambersign Root - 2008
- Validity
- Not Before: Aug 1 12:31:40 2008 GMT
- Not After : Jul 31 12:31:40 2038 GMT
- Subject: C=EU, L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287, O=AC Camerfirma S.A., CN=Global Chambersign Root - 2008
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c0:df:56:d3:e4:3a:9b:76:45:b4:13:db:ff:c1:
- b6:19:8b:37:41:18:95:52:47:eb:17:9d:29:88:8e:
- 35:6c:06:32:2e:47:62:f3:49:04:bf:7d:44:36:b1:
- 71:cc:bd:5a:09:73:d5:d9:85:44:ff:91:57:25:df:
- 5e:36:8e:70:d1:5c:71:43:1d:d9:da:ef:5c:d2:fb:
- 1b:bd:3a:b5:cb:ad:a3:cc:44:a7:0d:ae:21:15:3f:
- b9:7a:5b:92:75:d8:a4:12:38:89:19:8a:b7:80:d2:
- e2:32:6f:56:9c:91:d6:88:10:0b:b3:74:64:92:74:
- 60:f3:f6:cf:18:4f:60:b2:23:d0:c7:3b:ce:61:4b:
- 99:8f:c2:0c:d0:40:b2:98:dc:0d:a8:4e:a3:b9:0a:
- ae:60:a0:ad:45:52:63:ba:66:bd:68:e0:f9:be:1a:
- a8:81:bb:1e:41:78:75:d3:c1:fe:00:55:b0:87:54:
- e8:27:90:35:1d:4c:33:ad:97:fc:97:2e:98:84:bf:
- 2c:c9:a3:bf:d1:98:11:14:ed:63:f8:ca:98:88:58:
- 17:99:ed:45:03:97:7e:3c:86:1e:88:8c:be:f2:91:
- 84:8f:65:34:d8:00:4c:7d:b7:31:17:5a:29:7a:0a:
- 18:24:30:a3:37:b5:7a:a9:01:7d:26:d6:f9:0e:8e:
- 59:f1:fd:1b:33:b5:29:3b:17:3b:41:b6:21:dd:d4:
- c0:3d:a5:9f:9f:1f:43:50:c9:bb:bc:6c:7a:97:98:
- ee:cd:8c:1f:fb:9c:51:ae:8b:70:bd:27:9f:71:c0:
- 6b:ac:7d:90:66:e8:d7:5d:3a:0d:b0:d5:c2:8d:d5:
- c8:9d:9d:c1:6d:d0:d0:bf:51:e4:e3:f8:c3:38:36:
- ae:d6:a7:75:e6:af:84:43:5d:93:92:0c:6a:07:de:
- 3b:1d:98:22:d6:ac:c1:35:db:a3:a0:25:ff:72:b5:
- 76:1d:de:6d:e9:2c:66:2c:52:84:d0:45:92:ce:1c:
- e5:e5:33:1d:dc:07:53:54:a3:aa:82:3b:9a:37:2f:
- dc:dd:a0:64:e9:e6:dd:bd:ae:fc:64:85:1d:3c:a7:
- c9:06:de:84:ff:6b:e8:6b:1a:3c:c5:a2:b3:42:fb:
- 8b:09:3e:5f:08:52:c7:62:c4:d4:05:71:bf:c4:64:
- e4:f8:a1:83:e8:3e:12:9b:a8:1e:d4:36:4d:2f:71:
- f6:8d:28:f6:83:a9:13:d2:61:c1:91:bb:48:c0:34:
- 8f:41:8c:4b:4c:db:69:12:ff:50:94:9c:20:83:59:
- 73:ed:7c:a1:f2:f1:fd:dd:f7:49:d3:43:58:a0:56:
- 63:ca:3d:3d:e5:35:56:59:e9:0e:ca:20:cc:2b:4b:
- 93:29:0f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:12
- X509v3 Subject Key Identifier:
- B9:09:CA:9C:1E:DB:D3:6C:3A:6B:AE:ED:54:F1:5B:93:06:35:2E:5E
- X509v3 Authority Key Identifier:
- keyid:B9:09:CA:9C:1E:DB:D3:6C:3A:6B:AE:ED:54:F1:5B:93:06:35:2E:5E
- DirName:/C=EU/L=Madrid (see current address at www.camerfirma.com/address)/serialNumber=A82743287/O=AC Camerfirma S.A./CN=Global Chambersign Root - 2008
- serial:C9:CD:D3:E9:D5:7D:23:CE
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Certificate Policies:
- Policy: X509v3 Any Policy
- CPS: http://policy.camerfirma.com
-
- Signature Algorithm: sha1WithRSAEncryption
- 80:88:7f:70:de:92:28:d9:05:94:46:ff:90:57:a9:f1:2f:df:
- 1a:0d:6b:fa:7c:0e:1c:49:24:79:27:d8:46:aa:6f:29:59:52:
- 88:70:12:ea:dd:3d:f5:9b:53:54:6f:e1:60:a2:a8:09:b9:ec:
- eb:59:7c:c6:35:f1:dc:18:e9:f1:67:e5:af:ba:45:e0:09:de:
- ca:44:0f:c2:17:0e:77:91:45:7a:33:5f:5f:96:2c:68:8b:c1:
- 47:8f:98:9b:3d:c0:ec:cb:f5:d5:82:92:84:35:d1:be:36:38:
- 56:72:31:5b:47:2d:aa:17:a4:63:51:eb:0a:01:ad:7f:ec:75:
- 9e:cb:a1:1f:f1:7f:12:b1:b9:e4:64:7f:67:d6:23:2a:f4:b8:
- 39:5d:98:e8:21:a7:e1:bd:3d:42:1a:74:9a:70:af:68:6c:50:
- 5d:49:cf:ff:fb:0e:5d:e6:2c:47:d7:81:3a:59:00:b5:73:6b:
- 63:20:f6:31:45:08:39:0e:f4:70:7e:40:70:5a:3f:d0:6b:42:
- a9:74:3d:28:2f:02:6d:75:72:95:09:8d:48:63:c6:c6:23:57:
- 92:93:5e:35:c1:8d:f9:0a:f7:2c:9d:62:1c:f6:ad:7c:dd:a6:
- 31:1e:b6:b1:c7:7e:85:26:fa:a4:6a:b5:da:63:30:d1:ef:93:
- 37:b2:66:2f:7d:05:f7:e7:b7:4b:98:94:35:c0:d9:3a:29:c1:
- 9d:b2:50:33:1d:4a:a9:5a:a6:c9:03:ef:ed:f4:e7:a8:6e:8a:
- b4:57:84:eb:a4:3f:d0:ee:aa:aa:87:5b:63:e8:93:e2:6b:a8:
- d4:b8:72:78:6b:1b:ed:39:e4:5d:cb:9b:aa:87:d5:4f:4e:00:
- fe:d9:6a:9f:3c:31:0f:28:02:01:7d:98:e8:a7:b0:a2:64:9e:
- 79:f8:48:f2:15:a9:cc:e6:c8:44:eb:3f:78:99:f2:7b:71:3e:
- 3c:f1:98:a7:c5:18:12:3f:e6:bb:28:33:42:e9:45:0a:7c:6d:
- f2:86:79:2f:c5:82:19:7d:09:89:7c:b2:54:76:88:ae:de:c1:
- f3:cc:e1:6e:db:31:d6:93:ae:99:a0:ef:25:6a:73:98:89:5b:
- 3a:2e:13:88:1e:bf:c0:92:94:34:1b:e3:27:b7:8b:1e:6f:42:
- ff:e7:e9:37:9b:50:1d:2d:a2:f9:02:ee:cb:58:58:3a:71:bc:
- 68:e3:aa:c1:af:1c:28:1f:a2:dc:23:65:3f:81:ea:ae:99:d3:
- d8:30:cf:13:0d:4f:15:c9:84:bc:a7:48:2d:f8:30:23:77:d8:
- 46:4b:79:6d:f6:8c:ed:3a:7f:60:11:78:f4:e9:9b:ae:d5:54:
- c0:74:80:d1:0b:42:9f:c1
-----BEGIN CERTIFICATE-----
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
@@ -12019,62 +3387,6 @@ v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
Go Daddy Root Certificate Authority - G2
========================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
- Validity
- Not Before: Sep 1 00:00:00 2009 GMT
- Not After : Dec 31 23:59:59 2037 GMT
- Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:bf:71:62:08:f1:fa:59:34:f7:1b:c9:18:a3:f7:
- 80:49:58:e9:22:83:13:a6:c5:20:43:01:3b:84:f1:
- e6:85:49:9f:27:ea:f6:84:1b:4e:a0:b4:db:70:98:
- c7:32:01:b1:05:3e:07:4e:ee:f4:fa:4f:2f:59:30:
- 22:e7:ab:19:56:6b:e2:80:07:fc:f3:16:75:80:39:
- 51:7b:e5:f9:35:b6:74:4e:a9:8d:82:13:e4:b6:3f:
- a9:03:83:fa:a2:be:8a:15:6a:7f:de:0b:c3:b6:19:
- 14:05:ca:ea:c3:a8:04:94:3b:46:7c:32:0d:f3:00:
- 66:22:c8:8d:69:6d:36:8c:11:18:b7:d3:b2:1c:60:
- b4:38:fa:02:8c:ce:d3:dd:46:07:de:0a:3e:eb:5d:
- 7c:c8:7c:fb:b0:2b:53:a4:92:62:69:51:25:05:61:
- 1a:44:81:8c:2c:a9:43:96:23:df:ac:3a:81:9a:0e:
- 29:c5:1c:a9:e9:5d:1e:b6:9e:9e:30:0a:39:ce:f1:
- 88:80:fb:4b:5d:cc:32:ec:85:62:43:25:34:02:56:
- 27:01:91:b4:3b:70:2a:3f:6e:b1:e8:9c:88:01:7d:
- 9f:d4:f9:db:53:6d:60:9d:bf:2c:e7:58:ab:b8:5f:
- 46:fc:ce:c4:1b:03:3c:09:eb:49:31:5c:69:46:b3:
- e0:47
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
- Signature Algorithm: sha256WithRSAEncryption
- 99:db:5d:79:d5:f9:97:59:67:03:61:f1:7e:3b:06:31:75:2d:
- a1:20:8e:4f:65:87:b4:f7:a6:9c:bc:d8:e9:2f:d0:db:5a:ee:
- cf:74:8c:73:b4:38:42:da:05:7b:f8:02:75:b8:fd:a5:b1:d7:
- ae:f6:d7:de:13:cb:53:10:7e:8a:46:d1:97:fa:b7:2e:2b:11:
- ab:90:b0:27:80:f9:e8:9f:5a:e9:37:9f:ab:e4:df:6c:b3:85:
- 17:9d:3d:d9:24:4f:79:91:35:d6:5f:04:eb:80:83:ab:9a:02:
- 2d:b5:10:f4:d8:90:c7:04:73:40:ed:72:25:a0:a9:9f:ec:9e:
- ab:68:12:99:57:c6:8f:12:3a:09:a4:bd:44:fd:06:15:37:c1:
- 9b:e4:32:a3:ed:38:e8:d8:64:f3:2c:7e:14:fc:02:ea:9f:cd:
- ff:07:68:17:db:22:90:38:2d:7a:8d:d1:54:f1:69:e3:5f:33:
- ca:7a:3d:7b:0a:e3:ca:7f:5f:39:e5:e2:75:ba:c5:76:18:33:
- ce:2c:f0:2f:4c:ad:f7:b1:e7:ce:4f:a8:c4:9b:4a:54:06:c5:
- 7f:7d:d5:08:0f:e2:1c:fe:7e:17:b8:ac:5e:f6:d4:16:b2:43:
- 09:0c:4d:f6:a7:6b:b4:99:84:65:ca:7a:88:e2:e2:44:be:5c:
- f7:ea:1c:f5
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
@@ -12101,62 +3413,6 @@ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
Starfield Root Certificate Authority - G2
=========================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Root Certificate Authority - G2
- Validity
- Not Before: Sep 1 00:00:00 2009 GMT
- Not After : Dec 31 23:59:59 2037 GMT
- Subject: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Root Certificate Authority - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:bd:ed:c1:03:fc:f6:8f:fc:02:b1:6f:5b:9f:48:
- d9:9d:79:e2:a2:b7:03:61:56:18:c3:47:b6:d7:ca:
- 3d:35:2e:89:43:f7:a1:69:9b:de:8a:1a:fd:13:20:
- 9c:b4:49:77:32:29:56:fd:b9:ec:8c:dd:22:fa:72:
- dc:27:61:97:ee:f6:5a:84:ec:6e:19:b9:89:2c:dc:
- 84:5b:d5:74:fb:6b:5f:c5:89:a5:10:52:89:46:55:
- f4:b8:75:1c:e6:7f:e4:54:ae:4b:f8:55:72:57:02:
- 19:f8:17:71:59:eb:1e:28:07:74:c5:9d:48:be:6c:
- b4:f4:a4:b0:f3:64:37:79:92:c0:ec:46:5e:7f:e1:
- 6d:53:4c:62:af:cd:1f:0b:63:bb:3a:9d:fb:fc:79:
- 00:98:61:74:cf:26:82:40:63:f3:b2:72:6a:19:0d:
- 99:ca:d4:0e:75:cc:37:fb:8b:89:c1:59:f1:62:7f:
- 5f:b3:5f:65:30:f8:a7:b7:4d:76:5a:1e:76:5e:34:
- c0:e8:96:56:99:8a:b3:f0:7f:a4:cd:bd:dc:32:31:
- 7c:91:cf:e0:5f:11:f8:6b:aa:49:5c:d1:99:94:d1:
- a2:e3:63:5b:09:76:b5:56:62:e1:4b:74:1d:96:d4:
- 26:d4:08:04:59:d0:98:0e:0e:e6:de:fc:c3:ec:1f:
- 90:f1
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 7C:0C:32:1F:A7:D9:30:7F:C4:7D:68:A3:62:A8:A1:CE:AB:07:5B:27
- Signature Algorithm: sha256WithRSAEncryption
- 11:59:fa:25:4f:03:6f:94:99:3b:9a:1f:82:85:39:d4:76:05:
- 94:5e:e1:28:93:6d:62:5d:09:c2:a0:a8:d4:b0:75:38:f1:34:
- 6a:9d:e4:9f:8a:86:26:51:e6:2c:d1:c6:2d:6e:95:20:4a:92:
- 01:ec:b8:8a:67:7b:31:e2:67:2e:8c:95:03:26:2e:43:9d:4a:
- 31:f6:0e:b5:0c:bb:b7:e2:37:7f:22:ba:00:a3:0e:7b:52:fb:
- 6b:bb:3b:c4:d3:79:51:4e:cd:90:f4:67:07:19:c8:3c:46:7a:
- 0d:01:7d:c5:58:e7:6d:e6:85:30:17:9a:24:c4:10:e0:04:f7:
- e0:f2:7f:d4:aa:0a:ff:42:1d:37:ed:94:e5:64:59:12:20:77:
- 38:d3:32:3e:38:81:75:96:73:fa:68:8f:b1:cb:ce:1f:c5:ec:
- fa:9c:7e:cf:7e:b1:f1:07:2d:b6:fc:bf:ca:a4:bf:d0:97:05:
- 4a:bc:ea:18:28:02:90:bd:54:78:09:21:71:d3:d1:7d:1d:d9:
- 16:b0:a9:61:3d:d0:0a:00:22:fc:c7:7b:cb:09:64:45:0b:3b:
- 40:81:f7:7d:7c:32:f5:98:ca:58:8e:7d:2a:ee:90:59:73:64:
- f9:36:74:5e:25:a1:f5:66:05:2e:7f:39:15:a9:2a:fb:50:8b:
- 8e:85:69:f4
-----BEGIN CERTIFICATE-----
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
@@ -12183,62 +3439,6 @@ mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
Starfield Services Root Certificate Authority - G2
==================================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2
- Validity
- Not Before: Sep 1 00:00:00 2009 GMT
- Not After : Dec 31 23:59:59 2037 GMT
- Subject: C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., CN=Starfield Services Root Certificate Authority - G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:d5:0c:3a:c4:2a:f9:4e:e2:f5:be:19:97:5f:8e:
- 88:53:b1:1f:3f:cb:cf:9f:20:13:6d:29:3a:c8:0f:
- 7d:3c:f7:6b:76:38:63:d9:36:60:a8:9b:5e:5c:00:
- 80:b2:2f:59:7f:f6:87:f9:25:43:86:e7:69:1b:52:
- 9a:90:e1:71:e3:d8:2d:0d:4e:6f:f6:c8:49:d9:b6:
- f3:1a:56:ae:2b:b6:74:14:eb:cf:fb:26:e3:1a:ba:
- 1d:96:2e:6a:3b:58:94:89:47:56:ff:25:a0:93:70:
- 53:83:da:84:74:14:c3:67:9e:04:68:3a:df:8e:40:
- 5a:1d:4a:4e:cf:43:91:3b:e7:56:d6:00:70:cb:52:
- ee:7b:7d:ae:3a:e7:bc:31:f9:45:f6:c2:60:cf:13:
- 59:02:2b:80:cc:34:47:df:b9:de:90:65:6d:02:cf:
- 2c:91:a6:a6:e7:de:85:18:49:7c:66:4e:a3:3a:6d:
- a9:b5:ee:34:2e:ba:0d:03:b8:33:df:47:eb:b1:6b:
- 8d:25:d9:9b:ce:81:d1:45:46:32:96:70:87:de:02:
- 0e:49:43:85:b6:6c:73:bb:64:ea:61:41:ac:c9:d4:
- 54:df:87:2f:c7:22:b2:26:cc:9f:59:54:68:9f:fc:
- be:2a:2f:c4:55:1c:75:40:60:17:85:02:55:39:8b:
- 7f:05
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 9C:5F:00:DF:AA:01:D7:30:2B:38:88:A2:B8:6D:4A:9C:F2:11:91:83
- Signature Algorithm: sha256WithRSAEncryption
- 4b:36:a6:84:77:69:dd:3b:19:9f:67:23:08:6f:0e:61:c9:fd:
- 84:dc:5f:d8:36:81:cd:d8:1b:41:2d:9f:60:dd:c7:1a:68:d9:
- d1:6e:86:e1:88:23:cf:13:de:43:cf:e2:34:b3:04:9d:1f:29:
- d5:bf:f8:5e:c8:d5:c1:bd:ee:92:6f:32:74:f2:91:82:2f:bd:
- 82:42:7a:ad:2a:b7:20:7d:4d:bc:7a:55:12:c2:15:ea:bd:f7:
- 6a:95:2e:6c:74:9f:cf:1c:b4:f2:c5:01:a3:85:d0:72:3e:ad:
- 73:ab:0b:9b:75:0c:6d:45:b7:8e:94:ac:96:37:b5:a0:d0:8f:
- 15:47:0e:e3:e8:83:dd:8f:fd:ef:41:01:77:cc:27:a9:62:85:
- 33:f2:37:08:ef:71:cf:77:06:de:c8:19:1d:88:40:cf:7d:46:
- 1d:ff:1e:c7:e1:ce:ff:23:db:c6:fa:8d:55:4e:a9:02:e7:47:
- 11:46:3e:f4:fd:bd:7b:29:26:bb:a9:61:62:37:28:b6:2d:2a:
- f6:10:86:64:c9:70:a7:d2:ad:b7:29:70:79:ea:3c:da:63:25:
- 9f:fd:68:b7:30:ec:70:fb:75:8a:b7:6d:60:67:b2:1e:c8:b9:
- e9:d8:a8:6f:02:8b:67:0d:4d:26:57:71:da:20:fc:c1:4a:50:
- 8d:b1:28:ba
-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
@@ -12266,63 +3466,6 @@ sSi6
AffirmTrust Commercial
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 77:77:06:27:26:a9:b1:7c
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Commercial
- Validity
- Not Before: Jan 29 14:06:06 2010 GMT
- Not After : Dec 31 14:06:06 2030 GMT
- Subject: C=US, O=AffirmTrust, CN=AffirmTrust Commercial
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:f6:1b:4f:67:07:2b:a1:15:f5:06:22:cb:1f:01:
- b2:e3:73:45:06:44:49:2c:bb:49:25:14:d6:ce:c3:
- b7:ab:2c:4f:c6:41:32:94:57:fa:12:a7:5b:0e:e2:
- 8f:1f:1e:86:19:a7:aa:b5:2d:b9:5f:0d:8a:c2:af:
- 85:35:79:32:2d:bb:1c:62:37:f2:b1:5b:4a:3d:ca:
- cd:71:5f:e9:42:be:94:e8:c8:de:f9:22:48:64:c6:
- e5:ab:c6:2b:6d:ad:05:f0:fa:d5:0b:cf:9a:e5:f0:
- 50:a4:8b:3b:47:a5:23:5b:7a:7a:f8:33:3f:b8:ef:
- 99:97:e3:20:c1:d6:28:89:cf:94:fb:b9:45:ed:e3:
- 40:17:11:d4:74:f0:0b:31:e2:2b:26:6a:9b:4c:57:
- ae:ac:20:3e:ba:45:7a:05:f3:bd:9b:69:15:ae:7d:
- 4e:20:63:c4:35:76:3a:07:02:c9:37:fd:c7:47:ee:
- e8:f1:76:1d:73:15:f2:97:a4:b5:c8:7a:79:d9:42:
- aa:2b:7f:5c:fe:ce:26:4f:a3:66:81:35:af:44:ba:
- 54:1e:1c:30:32:65:9d:e6:3c:93:5e:50:4e:7a:e3:
- 3a:d4:6e:cc:1a:fb:f9:d2:37:ae:24:2a:ab:57:03:
- 22:28:0d:49:75:7f:b7:28:da:75:bf:8e:e3:dc:0e:
- 79:31
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 9D:93:C6:53:8B:5E:CA:AF:3F:9F:1E:0F:E5:99:95:BC:24:F6:94:8F
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha256WithRSAEncryption
- 58:ac:f4:04:0e:cd:c0:0d:ff:0a:fd:d4:ba:16:5f:29:bd:7b:
- 68:99:58:49:d2:b4:1d:37:4d:7f:27:7d:46:06:5d:43:c6:86:
- 2e:3e:73:b2:26:7d:4f:93:a9:b6:c4:2a:9a:ab:21:97:14:b1:
- de:8c:d3:ab:89:15:d8:6b:24:d4:f1:16:ae:d8:a4:5c:d4:7f:
- 51:8e:ed:18:01:b1:93:63:bd:bc:f8:61:80:9a:9e:b1:ce:42:
- 70:e2:a9:7d:06:25:7d:27:a1:fe:6f:ec:b3:1e:24:da:e3:4b:
- 55:1a:00:3b:35:b4:3b:d9:d7:5d:30:fd:81:13:89:f2:c2:06:
- 2b:ed:67:c4:8e:c9:43:b2:5c:6b:15:89:02:bc:62:fc:4e:f2:
- b5:33:aa:b2:6f:d3:0a:a2:50:e3:f6:3b:e8:2e:44:c2:db:66:
- 38:a9:33:56:48:f1:6d:1b:33:8d:0d:8c:3f:60:37:9d:d3:ca:
- 6d:7e:34:7e:0d:9f:72:76:8b:1b:9f:72:fd:52:35:41:45:02:
- 96:2f:1c:b2:9a:73:49:21:b1:49:47:45:47:b4:ef:6a:34:11:
- c9:4d:9a:cc:59:b7:d6:02:9e:5a:4e:65:b5:94:ae:1b:df:29:
- b0:16:f1:bf:00:9e:07:3a:17:64:b5:04:b5:23:21:99:0a:95:
- 3b:97:7c:ef
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
@@ -12346,63 +3489,6 @@ nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
AffirmTrust Networking
======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 7c:4f:04:39:1c:d4:99:2d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Networking
- Validity
- Not Before: Jan 29 14:08:24 2010 GMT
- Not After : Dec 31 14:08:24 2030 GMT
- Subject: C=US, O=AffirmTrust, CN=AffirmTrust Networking
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b4:84:cc:33:17:2e:6b:94:6c:6b:61:52:a0:eb:
- a3:cf:79:94:4c:e5:94:80:99:cb:55:64:44:65:8f:
- 67:64:e2:06:e3:5c:37:49:f6:2f:9b:84:84:1e:2d:
- f2:60:9d:30:4e:cc:84:85:e2:2c:cf:1e:9e:fe:36:
- ab:33:77:35:44:d8:35:96:1a:3d:36:e8:7a:0e:d8:
- d5:47:a1:6a:69:8b:d9:fc:bb:3a:ae:79:5a:d5:f4:
- d6:71:bb:9a:90:23:6b:9a:b7:88:74:87:0c:1e:5f:
- b9:9e:2d:fa:ab:53:2b:dc:bb:76:3e:93:4c:08:08:
- 8c:1e:a2:23:1c:d4:6a:ad:22:ba:99:01:2e:6d:65:
- cb:be:24:66:55:24:4b:40:44:b1:1b:d7:e1:c2:85:
- c0:de:10:3f:3d:ed:b8:fc:f1:f1:23:53:dc:bf:65:
- 97:6f:d9:f9:40:71:8d:7d:bd:95:d4:ce:be:a0:5e:
- 27:23:de:fd:a6:d0:26:0e:00:29:eb:3c:46:f0:3d:
- 60:bf:3f:50:d2:dc:26:41:51:9e:14:37:42:04:a3:
- 70:57:a8:1b:87:ed:2d:fa:7b:ee:8c:0a:e3:a9:66:
- 89:19:cb:41:f9:dd:44:36:61:cf:e2:77:46:c8:7d:
- f6:f4:92:81:36:fd:db:34:f1:72:7e:f3:0c:16:bd:
- b4:15
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 07:1F:D2:E7:9C:DA:C2:6E:A2:40:B4:B0:7A:50:10:50:74:C4:C8:BD
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 89:57:b2:16:7a:a8:c2:fd:d6:d9:9b:9b:34:c2:9c:b4:32:14:
- 4d:a7:a4:df:ec:be:a7:be:f8:43:db:91:37:ce:b4:32:2e:50:
- 55:1a:35:4e:76:43:71:20:ef:93:77:4e:15:70:2e:87:c3:c1:
- 1d:6d:dc:cb:b5:27:d4:2c:56:d1:52:53:3a:44:d2:73:c8:c4:
- 1b:05:65:5a:62:92:9c:ee:41:8d:31:db:e7:34:ea:59:21:d5:
- 01:7a:d7:64:b8:64:39:cd:c9:ed:af:ed:4b:03:48:a7:a0:99:
- 01:80:dc:65:a3:36:ae:65:59:48:4f:82:4b:c8:65:f1:57:1d:
- e5:59:2e:0a:3f:6c:d8:d1:f5:e5:09:b4:6c:54:00:0a:e0:15:
- 4d:87:75:6d:b7:58:96:5a:dd:6d:d2:00:a0:f4:9b:48:be:c3:
- 37:a4:ba:36:e0:7c:87:85:97:1a:15:a2:de:2e:a2:5b:bd:af:
- 18:f9:90:50:cd:70:59:f8:27:67:47:cb:c7:a0:07:3a:7d:d1:
- 2c:5d:6c:19:3a:66:b5:7d:fd:91:6f:82:b1:be:08:93:db:14:
- 47:f1:a2:37:c7:45:9e:3c:c7:77:af:64:a8:93:df:f6:69:83:
- 82:60:f2:49:42:34:ed:5a:00:54:85:1c:16:36:92:0c:5c:fa:
- a6:ad:bf:db
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
@@ -12426,94 +3512,6 @@ x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
AffirmTrust Premium
===================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 6d:8c:14:46:b1:a6:0a:ee
- Signature Algorithm: sha384WithRSAEncryption
- Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Premium
- Validity
- Not Before: Jan 29 14:10:36 2010 GMT
- Not After : Dec 31 14:10:36 2040 GMT
- Subject: C=US, O=AffirmTrust, CN=AffirmTrust Premium
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c4:12:df:a9:5f:fe:41:dd:dd:f5:9f:8a:e3:f6:
- ac:e1:3c:78:9a:bc:d8:f0:7f:7a:a0:33:2a:dc:8d:
- 20:5b:ae:2d:6f:e7:93:d9:36:70:6a:68:cf:8e:51:
- a3:85:5b:67:04:a0:10:24:6f:5d:28:82:c1:97:57:
- d8:48:29:13:b6:e1:be:91:4d:df:85:0c:53:18:9a:
- 1e:24:a2:4f:8f:f0:a2:85:0b:cb:f4:29:7f:d2:a4:
- 58:ee:26:4d:c9:aa:a8:7b:9a:d9:fa:38:de:44:57:
- 15:e5:f8:8c:c8:d9:48:e2:0d:16:27:1d:1e:c8:83:
- 85:25:b7:ba:aa:55:41:cc:03:22:4b:2d:91:8d:8b:
- e6:89:af:66:c7:e9:ff:2b:e9:3c:ac:da:d2:b3:c3:
- e1:68:9c:89:f8:7a:00:56:de:f4:55:95:6c:fb:ba:
- 64:dd:62:8b:df:0b:77:32:eb:62:cc:26:9a:9b:bb:
- aa:62:83:4c:b4:06:7a:30:c8:29:bf:ed:06:4d:97:
- b9:1c:c4:31:2b:d5:5f:bc:53:12:17:9c:99:57:29:
- 66:77:61:21:31:07:2e:25:49:9d:18:f2:ee:f3:2b:
- 71:8c:b5:ba:39:07:49:77:fc:ef:2e:92:90:05:8d:
- 2d:2f:77:7b:ef:43:bf:35:bb:9a:d8:f9:73:a7:2c:
- f2:d0:57:ee:28:4e:26:5f:8f:90:68:09:2f:b8:f8:
- dc:06:e9:2e:9a:3e:51:a7:d1:22:c4:0a:a7:38:48:
- 6c:b3:f9:ff:7d:ab:86:57:e3:ba:d6:85:78:77:ba:
- 43:ea:48:7f:f6:d8:be:23:6d:1e:bf:d1:36:6c:58:
- 5c:f1:ee:a4:19:54:1a:f5:03:d2:76:e6:e1:8c:bd:
- 3c:b3:d3:48:4b:e2:c8:f8:7f:92:a8:76:46:9c:42:
- 65:3e:a4:1e:c1:07:03:5a:46:2d:b8:97:f3:b7:d5:
- b2:55:21:ef:ba:dc:4c:00:97:fb:14:95:27:33:bf:
- e8:43:47:46:d2:08:99:16:60:3b:9a:7e:d2:e6:ed:
- 38:ea:ec:01:1e:3c:48:56:49:09:c7:4c:37:00:9e:
- 88:0e:c0:73:e1:6f:66:e9:72:47:30:3e:10:e5:0b:
- 03:c9:9a:42:00:6c:c5:94:7e:61:c4:8a:df:7f:82:
- 1a:0b:59:c4:59:32:77:b3:bc:60:69:56:39:fd:b4:
- 06:7b:2c:d6:64:36:d9:bd:48:ed:84:1f:7e:a5:22:
- 8f:2a:b8:42:f4:82:b7:d4:53:90:78:4e:2d:1a:fd:
- 81:6f:44:d7:3b:01:74:96:42:e0:00:e2:2e:6b:ea:
- c5:ee:72:ac:bb:bf:fe:ea:aa:a8:f8:dc:f6:b2:79:
- 8a:b6:67
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 9D:C0:67:A6:0C:22:D9:26:F5:45:AB:A6:65:52:11:27:D8:45:AC:63
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha384WithRSAEncryption
- b3:57:4d:10:62:4e:3a:e4:ac:ea:b8:1c:af:32:23:c8:b3:49:
- 5a:51:9c:76:28:8d:79:aa:57:46:17:d5:f5:52:f6:b7:44:e8:
- 08:44:bf:18:84:d2:0b:80:cd:c5:12:fd:00:55:05:61:87:41:
- dc:b5:24:9e:3c:c4:d8:c8:fb:70:9e:2f:78:96:83:20:36:de:
- 7c:0f:69:13:88:a5:75:36:98:08:a6:c6:df:ac:ce:e3:58:d6:
- b7:3e:de:ba:f3:eb:34:40:d8:a2:81:f5:78:3f:2f:d5:a5:fc:
- d9:a2:d4:5e:04:0e:17:ad:fe:41:f0:e5:b2:72:fa:44:82:33:
- 42:e8:2d:58:f7:56:8c:62:3f:ba:42:b0:9c:0c:5c:7e:2e:65:
- 26:5c:53:4f:00:b2:78:7e:a1:0d:99:2d:8d:b8:1d:8e:a2:c4:
- b0:fd:60:d0:30:a4:8e:c8:04:62:a9:c4:ed:35:de:7a:97:ed:
- 0e:38:5e:92:2f:93:70:a5:a9:9c:6f:a7:7d:13:1d:7e:c6:08:
- 48:b1:5e:67:eb:51:08:25:e9:e6:25:6b:52:29:91:9c:d2:39:
- 73:08:57:de:99:06:b4:5b:9d:10:06:e1:c2:00:a8:b8:1c:4a:
- 02:0a:14:d0:c1:41:ca:fb:8c:35:21:7d:82:38:f2:a9:54:91:
- 19:35:93:94:6d:6a:3a:c5:b2:d0:bb:89:86:93:e8:9b:c9:0f:
- 3a:a7:7a:b8:a1:f0:78:46:fa:fc:37:2f:e5:8a:84:f3:df:fe:
- 04:d9:a1:68:a0:2f:24:e2:09:95:06:d5:95:ca:e1:24:96:eb:
- 7c:f6:93:05:bb:ed:73:e9:2d:d1:75:39:d7:e7:24:db:d8:4e:
- 5f:43:8f:9e:d0:14:39:bf:55:70:48:99:57:31:b4:9c:ee:4a:
- 98:03:96:30:1f:60:06:ee:1b:23:fe:81:60:23:1a:47:62:85:
- a5:cc:19:34:80:6f:b3:ac:1a:e3:9f:f0:7b:48:ad:d5:01:d9:
- 67:b6:a9:72:93:ea:2d:66:b5:b2:b8:e4:3d:3c:b2:ef:4c:8c:
- ea:eb:07:bf:ab:35:9a:55:86:bc:18:a6:b5:a8:5e:b4:83:6c:
- 6b:69:40:d3:9f:dc:f1:c3:69:6b:b9:e1:6d:09:f4:f1:aa:50:
- 76:0a:7a:7d:7a:17:a1:55:96:42:99:31:09:dd:60:11:8d:05:
- 30:7e:e6:8e:46:d1:9d:14:da:c7:17:e4:05:96:8c:c4:24:b5:
- 1b:cf:14:07:b2:40:f8:a3:9e:41:86:bc:04:d0:6b:96:c8:2a:
- 80:34:fd:bf:ef:06:a3:dd:58:c5:85:3d:3e:8f:fe:9e:29:e0:
- b6:b8:09:68:19:1c:18:43
-----BEGIN CERTIFICATE-----
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
@@ -12548,43 +3546,6 @@ KeC2uAloGRwYQw==
AffirmTrust Premium ECC
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 74:97:25:8a:c7:3f:7a:54
- Signature Algorithm: 1.2.840.10045.4.3.3
- Issuer: C=US, O=AffirmTrust, CN=AffirmTrust Premium ECC
- Validity
- Not Before: Jan 29 14:20:24 2010 GMT
- Not After : Dec 31 14:20:24 2040 GMT
- Subject: C=US, O=AffirmTrust, CN=AffirmTrust Premium ECC
- Subject Public Key Info:
- Public Key Algorithm: id-ecPublicKey
- EC Public Key:
- pub:
- 04:0d:30:5e:1b:15:9d:03:d0:a1:79:35:b7:3a:3c:
- 92:7a:ca:15:1c:cd:62:f3:9c:26:5c:07:3d:e5:54:
- fa:a3:d6:cc:12:ea:f4:14:5f:e8:8e:19:ab:2f:2e:
- 48:e6:ac:18:43:78:ac:d0:37:c3:bd:b2:cd:2c:e6:
- 47:e2:1a:e6:63:b8:3d:2e:2f:78:c4:4f:db:f4:0f:
- a4:68:4c:55:72:6b:95:1d:4e:18:42:95:78:cc:37:
- 3c:91:e2:9b:65:2b:29
- ASN1 OID: secp384r1
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 9A:AF:29:7A:C0:11:35:35:26:51:30:00:C3:6A:FE:40:D5:AE:D6:3C
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: 1.2.840.10045.4.3.3
- 30:64:02:30:17:09:f3:87:88:50:5a:af:c8:c0:42:bf:47:5f:
- f5:6c:6a:86:e0:c4:27:74:e4:38:53:d7:05:7f:1b:34:e3:c6:
- 2f:b3:ca:09:3c:37:9d:d7:e7:b8:46:f1:fd:a1:e2:71:02:30:
- 42:59:87:43:d4:51:df:ba:d3:09:32:5a:ce:88:7e:57:3d:9c:
- 5f:42:6b:f5:07:2d:b5:f0:82:93:f9:59:6f:ae:64:fa:58:e5:
- 8b:1e:e3:63:be:b5:81:cd:6f:02:8c:79
-----BEGIN CERTIFICATE-----
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
@@ -12601,62 +3562,6 @@ flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
Certum Trusted Network CA
=========================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 279744 (0x444c0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA
- Validity
- Not Before: Oct 22 12:07:37 2008 GMT
- Not After : Dec 31 12:07:37 2029 GMT
- Subject: C=PL, O=Unizeto Technologies S.A., OU=Certum Certification Authority, CN=Certum Trusted Network CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:e3:fb:7d:a3:72:ba:c2:f0:c9:14:87:f5:6b:01:
- 4e:e1:6e:40:07:ba:6d:27:5d:7f:f7:5b:2d:b3:5a:
- c7:51:5f:ab:a4:32:a6:61:87:b6:6e:0f:86:d2:30:
- 02:97:f8:d7:69:57:a1:18:39:5d:6a:64:79:c6:01:
- 59:ac:3c:31:4a:38:7c:d2:04:d2:4b:28:e8:20:5f:
- 3b:07:a2:cc:4d:73:db:f3:ae:4f:c7:56:d5:5a:a7:
- 96:89:fa:f3:ab:68:d4:23:86:59:27:cf:09:27:bc:
- ac:6e:72:83:1c:30:72:df:e0:a2:e9:d2:e1:74:75:
- 19:bd:2a:9e:7b:15:54:04:1b:d7:43:39:ad:55:28:
- c5:e2:1a:bb:f4:c0:e4:ae:38:49:33:cc:76:85:9f:
- 39:45:d2:a4:9e:f2:12:8c:51:f8:7c:e4:2d:7f:f5:
- ac:5f:eb:16:9f:b1:2d:d1:ba:cc:91:42:77:4c:25:
- c9:90:38:6f:db:f0:cc:fb:8e:1e:97:59:3e:d5:60:
- 4e:e6:05:28:ed:49:79:13:4b:ba:48:db:2f:f9:72:
- d3:39:ca:fe:1f:d8:34:72:f5:b4:40:cf:31:01:c3:
- ec:de:11:2d:17:5d:1f:b8:50:d1:5e:19:a7:69:de:
- 07:33:28:ca:50:95:f9:a7:54:cb:54:86:50:45:a9:
- f9:49
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 08:76:CD:CB:07:FF:24:F6:C5:CD:ED:BB:90:BC:E2:84:37:46:75:F7
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- a6:a8:ad:22:ce:01:3d:a6:a3:ff:62:d0:48:9d:8b:5e:72:b0:
- 78:44:e3:dc:1c:af:09:fd:23:48:fa:bd:2a:c4:b9:55:04:b5:
- 10:a3:8d:27:de:0b:82:63:d0:ee:de:0c:37:79:41:5b:22:b2:
- b0:9a:41:5c:a6:70:e0:d4:d0:77:cb:23:d3:00:e0:6c:56:2f:
- e1:69:0d:0d:d9:aa:bf:21:81:50:d9:06:a5:a8:ff:95:37:d0:
- aa:fe:e2:b3:f5:99:2d:45:84:8a:e5:42:09:d7:74:02:2f:f7:
- 89:d8:99:e9:bc:27:d4:47:8d:ba:0d:46:1c:77:cf:14:a4:1c:
- b9:a4:31:c4:9c:28:74:03:34:ff:33:19:26:a5:e9:0d:74:b7:
- 3e:97:c6:76:e8:27:96:a3:66:dd:e1:ae:f2:41:5b:ca:98:56:
- 83:73:70:e4:86:1a:d2:31:41:ba:2f:be:2d:13:5a:76:6f:4e:
- e8:4e:81:0e:3f:5b:03:22:a0:12:be:66:58:11:4a:cb:03:c4:
- b4:2a:2a:2d:96:17:e0:39:54:bc:48:d3:76:27:9d:9a:2d:06:
- a6:c9:ec:39:d2:ab:db:9f:9a:0b:27:02:35:29:b1:40:95:e7:
- f9:e8:9c:55:88:19:46:d6:b7:34:f5:7e:ce:39:9a:d9:38:f1:
- 51:f7:4f:2c
-----BEGIN CERTIFICATE-----
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
@@ -12682,96 +3587,6 @@ VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
Certinomis - AutoritC) Racine
=============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=FR, O=Certinomis, OU=0002 433998903, CN=Certinomis - Autorit\xC3\xA9 Racine
- Validity
- Not Before: Sep 17 08:28:59 2008 GMT
- Not After : Sep 17 08:28:59 2028 GMT
- Subject: C=FR, O=Certinomis, OU=0002 433998903, CN=Certinomis - Autorit\xC3\xA9 Racine
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:9d:85:9f:86:d3:e3:af:c7:b2:6b:6e:33:e0:9e:
- b7:42:34:55:9d:f9:81:be:63:d8:23:76:0e:97:54:
- cd:99:4c:1a:f1:39:c7:88:d8:17:50:0c:9e:61:da:
- c0:4e:55:de:e7:5a:b8:7a:4e:77:87:0d:e5:b8:eb:
- fa:9e:5e:7b:1e:c4:cf:28:74:c7:93:f5:14:c6:22:
- 28:04:f9:91:c3:ab:27:73:6a:0e:2e:4d:f3:2e:28:
- 1f:70:df:55:2f:4e:ed:c7:71:6f:09:72:2e:ed:d5:
- 32:97:d0:f1:58:77:d1:60:bc:4e:5e:db:9a:84:f6:
- 47:61:45:2b:f6:50:a6:7f:6a:71:27:48:84:35:9e:
- ac:fe:69:a9:9e:7a:5e:35:25:fa:b4:a7:49:35:77:
- 96:a7:36:5b:e1:cd:df:23:70:d8:5d:4c:a5:08:83:
- f1:a6:24:38:13:a8:ec:2f:a8:a1:67:c7:a6:2d:86:
- 47:ee:8a:fc:ec:9b:0e:74:f4:2b:49:02:7b:90:75:
- 8c:fc:99:39:01:39:d6:4a:89:e5:9e:76:ab:3e:96:
- 28:38:26:8b:dd:8d:8c:c0:f6:01:1e:6f:a5:31:12:
- 38:7d:95:c2:71:ee:ed:74:ae:e4:36:a2:43:75:d5:
- f1:00:9b:e2:e4:d7:cc:42:03:4b:78:7a:e5:7d:bb:
- b8:ae:2e:20:93:d3:e4:61:df:71:e1:76:67:97:3f:
- b6:df:6a:73:5a:64:22:e5:42:db:cf:81:03:93:d8:
- f4:e3:10:e0:72:f6:00:70:ac:f0:c1:7a:0f:05:7f:
- cf:34:69:45:b5:93:e4:19:db:52:16:23:05:89:0e:
- 8d:48:e4:25:6f:b3:78:bf:62:f5:07:fa:95:24:c2:
- 96:b2:e8:a3:23:c2:5d:03:fc:c3:d3:e5:7c:c9:75:
- 23:d7:f4:f5:bc:de:e4:df:cd:80:bf:91:88:7d:a7:
- 13:b4:39:ba:2c:ba:bd:d1:6b:cc:f3:a5:28:ed:44:
- 9e:7d:52:a3:6f:96:2e:19:7e:1c:f3:5b:c7:16:8e:
- bb:60:7d:77:66:47:54:82:00:11:60:6c:32:c1:a8:
- 38:1b:eb:6e:98:13:d6:ee:38:f5:f0:9f:0e:ef:fe:
- 31:81:c1:d2:24:95:2f:53:7a:69:a2:f0:0f:86:45:
- 8e:58:82:2b:4c:22:d4:5e:a0:e7:7d:26:27:48:df:
- 25:46:8d:4a:28:7c:86:9e:f9:9b:1a:59:b9:65:bf:
- 05:dd:b6:42:5d:3d:e6:00:48:82:5e:20:f7:11:82:
- de:ca:d8:9f:e6:37:47:26:1e:eb:78:f7:61:c3:41:
- 64:58:02:41:f9:da:e0:d1:f8:f9:e8:fd:52:38:b6:
- f5:89:df
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 0D:8C:B6:61:DA:44:B8:D1:14:7D:C3:BE:7D:5E:48:F0:CE:CA:6A:B0
- X509v3 Certificate Policies:
- Policy: 1.2.250.1.86.2.2.0.1.1
-
- Signature Algorithm: sha1WithRSAEncryption
- 24:3e:60:06:7e:1d:ef:3a:3e:db:ea:af:1c:9a:2c:01:0b:f4:
- c5:b5:d9:49:31:f4:5d:41:8d:89:0c:4e:ff:6c:a2:fd:ff:e2:
- 06:c8:39:9f:f1:5a:a9:dd:22:58:15:a8:8a:d3:b1:e6:32:09:
- 82:03:6c:d7:3f:08:c7:f8:b9:ba:00:6d:b9:d6:fc:52:32:5d:
- a4:7f:a4:31:94:bb:b6:4c:38:7f:28:30:35:ff:9f:23:53:b7:
- b6:ee:14:70:00:40:2b:da:47:ab:34:7e:5e:a7:56:30:61:2b:
- 8b:43:ac:fd:b6:88:28:f5:6b:b6:3e:60:4a:ba:42:90:34:67:
- 8d:ea:eb:5f:45:54:3b:17:ac:8b:e4:c6:65:0f:ee:d0:8c:5d:
- 66:39:ce:32:a7:d8:10:97:c0:7e:34:9c:9f:94:f3:f6:86:1f:
- cf:1b:73:ad:94:79:87:68:70:c3:33:a5:70:e7:d8:d5:38:94:
- 6f:63:79:eb:bf:0a:0e:08:e7:c5:2f:0f:42:a0:2b:14:40:ff:
- 21:e0:05:c5:27:e1:84:11:13:ba:d6:86:1d:41:0b:13:23:89:
- d3:c9:0b:e8:8a:ba:7a:a3:a3:73:37:35:80:7d:12:b8:33:77:
- 40:38:c0:fa:5e:30:d2:f2:b6:a3:b1:d6:a2:95:97:81:9b:52:
- ed:69:4c:ff:80:e4:53:db:54:5b:03:6d:54:5f:b1:b8:ef:24:
- bd:6f:9f:11:c3:c7:64:c2:0f:28:62:85:66:5e:1a:7b:b2:b7:
- ef:ae:35:c9:19:33:a8:b8:27:db:33:55:bf:68:e1:75:48:44:
- 56:fb:cd:d3:48:bb:47:89:3a:ac:69:f5:80:c6:e4:44:50:2f:
- 54:c4:aa:43:c5:31:31:58:bd:96:c5:ea:75:6c:9a:75:b1:4d:
- f8:f7:97:ff:96:16:f2:97:4d:e8:f6:f3:11:f9:3a:7d:8a:38:
- 6e:04:cb:e1:d3:45:15:aa:a5:d1:1d:9d:5d:63:e8:24:e6:36:
- 14:e2:87:ad:1b:59:f5:44:9b:fb:d7:77:7c:1f:01:70:62:a1:
- 20:1a:a2:c5:1a:28:f4:21:03:ee:2e:d9:c1:80:ea:b9:d9:82:
- d6:5b:76:c2:cb:3b:b5:d2:00:f0:a3:0e:e1:ad:6e:40:f7:db:
- a0:b4:d0:46:ae:15:d7:44:c2:4d:35:f9:d2:0b:f2:17:f6:ac:
- 66:d5:24:b2:4f:d1:1c:99:c0:6e:f5:7d:eb:74:04:b8:f9:4d:
- 77:09:d7:b4:cf:07:30:09:f1:b8:00:56:d9:17:16:16:0a:2b:
- 86:df:8f:01:19:1a:e5:bb:82:63:ff:be:0b:76:16:5e:37:37:
- e6:d8:74:97:a2:99:45:79
-----BEGIN CERTIFICATE-----
MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
@@ -12807,74 +3622,6 @@ BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
Root CA Generalitat Valenciana
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 994436456 (0x3b45e568)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=ES, O=Generalitat Valenciana, OU=PKIGVA, CN=Root CA Generalitat Valenciana
- Validity
- Not Before: Jul 6 16:22:47 2001 GMT
- Not After : Jul 1 15:22:47 2021 GMT
- Subject: C=ES, O=Generalitat Valenciana, OU=PKIGVA, CN=Root CA Generalitat Valenciana
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c6:2a:ab:57:11:37:2f:22:8a:ca:03:74:1d:ca:
- ed:2d:a2:0b:bc:33:52:40:26:47:be:5a:69:a6:3b:
- 72:36:17:4c:e8:df:b8:bb:2f:76:e1:40:46:74:65:
- 02:90:52:08:b4:ff:a8:8c:c1:e0:c7:89:56:10:39:
- 33:ef:68:b4:5f:5f:da:6d:23:a1:89:5e:22:a3:4a:
- 06:f0:27:f0:57:b9:f8:e9:4e:32:77:0a:3f:41:64:
- f3:eb:65:ee:76:fe:54:aa:7d:1d:20:ae:f3:d7:74:
- c2:0a:5f:f5:08:28:52:08:cc:55:5d:d2:0f:db:9a:
- 81:a5:bb:a1:b3:c1:94:cd:54:e0:32:75:31:91:1a:
- 62:b2:de:75:e2:cf:4f:89:d9:91:90:0f:41:1b:b4:
- 5a:4a:77:bd:67:83:e0:93:e7:5e:a7:0c:e7:81:d3:
- f4:52:ac:53:b2:03:c7:44:26:fb:79:e5:cb:34:60:
- 50:10:7b:1b:db:6b:d7:47:ab:5f:7c:68:ca:6e:9d:
- 41:03:10:ee:6b:99:7b:5e:25:a8:c2:ab:e4:c0:f3:
- 5c:9c:e3:be:ce:31:4c:64:1e:5e:80:a2:f5:83:7e:
- 0c:d6:ca:8c:55:8e:be:e0:be:49:07:0f:a3:24:41:
- 7a:58:1d:84:ea:58:12:c8:e1:b7:ed:ef:93:de:94:
- 08:31
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- Authority Information Access:
- OCSP - URI:http://ocsp.pki.gva.es
-
- X509v3 Basic Constraints: critical
- CA:TRUE, pathlen:2
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.8149.2.1.0
- User Notice:
- Explicit Text:
- CPS: http://www.pki.gva.es/cps
-
- X509v3 Subject Key Identifier:
- 7B:35:D3:40:D2:1C:78:19:66:EF:74:10:28:DC:3E:4F:B2:78:04:FC
- X509v3 Authority Key Identifier:
- keyid:7B:35:D3:40:D2:1C:78:19:66:EF:74:10:28:DC:3E:4F:B2:78:04:FC
- DirName:/C=ES/O=Generalitat Valenciana/OU=PKIGVA/CN=Root CA Generalitat Valenciana
- serial:3B:45:E5:68
-
- Signature Algorithm: sha1WithRSAEncryption
- 24:61:4e:f5:b5:c8:42:02:2a:b3:5c:75:ad:c5:6d:ca:e7:94:
- 3f:a5:68:95:88:c1:54:c0:10:69:a2:12:2f:18:3f:25:50:a8:
- 7c:4a:ea:c6:09:d9:f4:75:c6:40:da:af:50:9d:3d:a5:16:bb:
- 6d:31:c6:c7:73:0a:48:fe:20:72:ed:6f:cc:e8:83:61:16:46:
- 90:01:95:4b:7d:8e:9a:52:09:2f:f6:6f:1c:e4:a1:71:cf:8c:
- 2a:5a:17:73:83:47:4d:0f:36:fb:04:4d:49:51:e2:14:c9:64:
- 61:fb:d4:14:e0:f4:9e:b7:34:8f:0a:26:bd:97:5c:f4:79:3a:
- 4a:30:19:cc:ad:4f:a0:98:8a:b4:31:97:2a:e2:73:6d:7e:78:
- b8:f8:88:89:4f:b1:22:91:64:4b:f5:50:de:03:db:e5:c5:76:
- e7:13:66:75:7e:65:fb:01:9f:93:87:88:9d:f9:46:57:7c:4d:
- 60:af:98:73:13:23:a4:20:91:81:fa:d0:61:66:b8:7d:d1:af:
- d6:6f:1e:6c:3d:e9:11:fd:a9:f9:82:22:86:99:33:71:5a:ea:
- 19:57:3d:91:cd:a9:c0:a3:6e:07:13:a6:c9:ed:f8:68:a3:9e:
- c3:5a:72:09:87:28:d1:c4:73:c4:73:18:5f:50:75:16:31:9f:
- b7:e8:7c:c3
-----BEGIN CERTIFICATE-----
MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
@@ -12915,62 +3662,6 @@ IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
A-Trust-nQual-03
================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 93214 (0x16c1e)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=AT, O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH, OU=A-Trust-nQual-03, CN=A-Trust-nQual-03
- Validity
- Not Before: Aug 17 22:00:00 2005 GMT
- Not After : Aug 17 22:00:00 2015 GMT
- Subject: C=AT, O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH, OU=A-Trust-nQual-03, CN=A-Trust-nQual-03
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:ad:3d:61:6e:03:f3:90:3b:c0:41:0b:84:80:cd:
- ec:2a:a3:9d:6b:bb:6e:c2:42:84:f7:51:14:e1:a0:
- a8:2d:51:a3:51:f2:de:23:f0:34:44:ff:94:eb:cc:
- 05:23:95:40:b9:07:78:a5:25:f6:0a:bd:45:86:e8:
- d9:bd:c0:04:8e:85:44:61:ef:7f:a7:c9:fa:c1:25:
- cc:85:2c:63:3f:05:60:73:49:05:e0:60:78:95:10:
- 4b:dc:f9:11:59:ce:71:7f:40:9b:8a:aa:24:df:0b:
- 42:e2:db:56:bc:4a:d2:a5:0c:9b:b7:43:3e:dd:83:
- d3:26:10:02:cf:ea:23:c4:49:4e:e5:d3:e9:b4:88:
- ab:0c:ae:62:92:d4:65:87:d9:6a:d7:f4:85:9f:e4:
- 33:22:25:a5:e5:c8:33:ba:c3:c7:41:dc:5f:c6:6a:
- cc:00:0e:6d:32:a8:b6:87:36:00:62:77:9b:1e:1f:
- 34:cb:90:3c:78:88:74:05:eb:79:f5:93:71:65:ca:
- 9d:c7:6b:18:2d:3d:5c:4e:e7:d5:f8:3f:31:7d:8f:
- 87:ec:0a:22:2f:23:e9:fe:bb:7d:c9:e0:f4:ec:eb:
- 7c:c4:b0:c3:2d:62:b5:9a:71:d6:b1:6a:e8:ec:d9:
- ed:d5:72:ec:be:57:01:ce:05:55:9f:de:d1:60:88:
- 10:b3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 44:6A:95:67:55:79:11:4F
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha1WithRSAEncryption
- 55:d4:54:d1:59:48:5c:b3:93:85:aa:bf:63:2f:e4:80:ce:34:
- a3:34:62:3e:f6:d8:ee:67:88:31:04:03:6f:0b:d4:07:fb:4e:
- 75:0f:d3:2e:d3:c0:17:c7:c6:28:ec:06:0d:11:24:0e:0e:a5:
- 5d:bf:8c:b2:13:96:71:dc:d4:ce:0e:0d:0a:68:32:6c:b9:41:
- 31:19:ab:b1:07:7b:4d:98:d3:5c:b0:d1:f0:a7:42:a0:b5:c4:
- 8e:af:fe:f1:3f:f4:ef:4f:46:00:76:eb:02:fb:f9:9d:d2:40:
- 96:c7:88:3a:b8:9f:11:79:f3:80:65:a8:bd:1f:d3:78:81:a0:
- 51:4c:37:b4:a6:5d:25:70:d1:66:c9:68:f9:2e:11:14:68:f1:
- 54:98:08:ac:26:92:0f:de:89:9e:d4:fa:b3:79:2b:d2:a3:79:
- d4:ec:8b:ac:87:53:68:42:4c:51:51:74:1e:1b:27:2e:e3:f5:
- 1f:29:74:4d:ed:af:f7:e1:92:99:81:e8:be:3a:c7:17:50:f6:
- b7:c6:fc:9b:b0:8a:6b:d6:88:03:91:8f:06:77:3a:85:02:dd:
- 98:d5:43:78:3f:c6:30:15:ac:9b:6b:cb:57:b7:89:51:8b:3a:
- e8:c9:84:0c:db:b1:50:20:0a:1a:4a:ba:6a:1a:bd:ec:1b:c8:
- c5:84:9a:cd
-----BEGIN CERTIFICATE-----
MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
@@ -12997,62 +3688,6 @@ DNuxUCAKGkq6ahq97BvIxYSazQ==
TWCA Root Certification Authority
=================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=TW, O=TAIWAN-CA, OU=Root CA, CN=TWCA Root Certification Authority
- Validity
- Not Before: Aug 28 07:24:33 2008 GMT
- Not After : Dec 31 15:59:59 2030 GMT
- Subject: C=TW, O=TAIWAN-CA, OU=Root CA, CN=TWCA Root Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b0:7e:72:b8:a4:03:94:e6:a7:de:09:38:91:4a:
- 11:40:87:a7:7c:59:64:14:7b:b5:11:10:dd:fe:bf:
- d5:c0:bb:56:e2:85:25:f4:35:72:0f:f8:53:d0:41:
- e1:44:01:c2:b4:1c:c3:31:42:16:47:85:33:22:76:
- b2:0a:6f:0f:e5:25:50:4f:85:86:be:bf:98:2e:10:
- 67:1e:be:11:05:86:05:90:c4:59:d0:7c:78:10:b0:
- 80:5c:b7:e1:c7:2b:75:cb:7c:9f:ae:b5:d1:9d:23:
- 37:63:a7:dc:42:a2:2d:92:04:1b:50:c1:7b:b8:3e:
- 1b:c9:56:04:8b:2f:52:9b:ad:a9:56:e9:c1:ff:ad:
- a9:58:87:30:b6:81:f7:97:45:fc:19:57:3b:2b:6f:
- e4:47:f4:99:45:fe:1d:f1:f8:97:a3:88:1d:37:1c:
- 5c:8f:e0:76:25:9a:50:f8:a0:54:ff:44:90:76:23:
- d2:32:c6:c3:ab:06:bf:fc:fb:bf:f3:ad:7d:92:62:
- 02:5b:29:d3:35:a3:93:9a:43:64:60:5d:b2:fa:32:
- ff:3b:04:af:4d:40:6a:f9:c7:e3:ef:23:fd:6b:cb:
- e5:0f:8b:38:0d:ee:0a:fc:fe:0f:98:9f:30:31:dd:
- 6c:52:65:f9:8b:81:be:22:e1:1c:58:03:ba:91:1b:
- 89:07
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 6A:38:5B:26:8D:DE:8B:5A:F2:4F:7A:54:83:19:18:E3:08:35:A6:BA
- Signature Algorithm: sha1WithRSAEncryption
- 3c:d5:77:3d:da:df:89:ba:87:0c:08:54:6a:20:50:92:be:b0:
- 41:3d:b9:26:64:83:0a:2f:e8:40:c0:97:28:27:82:30:4a:c9:
- 93:ff:6a:e7:a6:00:7f:89:42:9a:d6:11:e5:53:ce:2f:cc:f2:
- da:05:c4:fe:e2:50:c4:3a:86:7d:cc:da:7e:10:09:3b:92:35:
- 2a:53:b2:fe:eb:2b:05:d9:6c:5d:e6:d0:ef:d3:6a:66:9e:15:
- 28:85:7a:e8:82:00:ac:1e:a7:09:69:56:42:d3:68:51:18:be:
- 54:9a:bf:44:41:ba:49:be:20:ba:69:5c:ee:b8:77:cd:ce:6c:
- 1f:ad:83:96:18:7d:0e:b5:14:39:84:f1:28:e9:2d:a3:9e:7b:
- 1e:7a:72:5a:83:b3:79:6f:ef:b4:fc:d0:0a:a5:58:4f:46:df:
- fb:6d:79:59:f2:84:22:52:ae:0f:cc:fb:7c:3b:e7:6a:ca:47:
- 61:c3:7a:f8:d3:92:04:1f:b8:20:84:e1:36:54:16:c7:40:de:
- 3b:8a:73:dc:df:c6:09:4c:df:ec:da:ff:d4:53:42:a1:c9:f2:
- 62:1d:22:83:3c:97:c5:f9:19:62:27:ac:65:22:d7:d3:3c:c6:
- e5:8e:b2:53:cc:49:ce:bc:30:fe:7b:0e:33:90:fb:ed:d2:14:
- 91:1f:07:af
-----BEGIN CERTIFICATE-----
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
@@ -13077,62 +3712,6 @@ YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
Security Communication RootCA2
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2
- Validity
- Not Before: May 29 05:00:39 2009 GMT
- Not After : May 29 05:00:39 2029 GMT
- Subject: C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:d0:15:39:52:b1:52:b3:ba:c5:59:82:c4:5d:52:
- ae:3a:43:65:80:4b:c7:f2:96:bc:db:36:97:d6:a6:
- 64:8c:a8:5e:f0:e3:0a:1c:f7:df:97:3d:4b:ae:f6:
- 5d:ec:21:b5:41:ab:cd:b9:7e:76:9f:be:f9:3e:36:
- 34:a0:3b:c1:f6:31:11:45:74:93:3d:57:80:c5:f9:
- 89:99:ca:e5:ab:6a:d4:b5:da:41:90:10:c1:d6:d6:
- 42:89:c2:bf:f4:38:12:95:4c:54:05:f7:36:e4:45:
- 83:7b:14:65:d6:dc:0c:4d:d1:de:7e:0c:ab:3b:c4:
- 15:be:3a:56:a6:5a:6f:76:69:52:a9:7a:b9:c8:eb:
- 6a:9a:5d:52:d0:2d:0a:6b:35:16:09:10:84:d0:6a:
- ca:3a:06:00:37:47:e4:7e:57:4f:3f:8b:eb:67:b8:
- 88:aa:c5:be:53:55:b2:91:c4:7d:b9:b0:85:19:06:
- 78:2e:db:61:1a:fa:85:f5:4a:91:a1:e7:16:d5:8e:
- a2:39:df:94:b8:70:1f:28:3f:8b:fc:40:5e:63:83:
- 3c:83:2a:1a:99:6b:cf:de:59:6a:3b:fc:6f:16:d7:
- 1f:fd:4a:10:eb:4e:82:16:3a:ac:27:0c:53:f1:ad:
- d5:24:b0:6b:03:50:c1:2d:3c:16:dd:44:34:27:1a:
- 75:fb
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 0A:85:A9:77:65:05:98:7C:40:81:F8:0F:97:2C:38:F1:0A:EC:3C:CF
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Basic Constraints: critical
- CA:TRUE
- Signature Algorithm: sha256WithRSAEncryption
- 4c:3a:a3:44:ac:b9:45:b1:c7:93:7e:c8:0b:0a:42:df:64:ea:
- 1c:ee:59:6c:08:ba:89:5f:6a:ca:4a:95:9e:7a:8f:07:c5:da:
- 45:72:82:71:0e:3a:d2:cc:6f:a7:b4:a1:23:bb:f6:24:9f:cb:
- 17:fe:8c:a6:ce:c2:d2:db:cc:8d:fc:71:fc:03:29:c1:6c:5d:
- 33:5f:64:b6:65:3b:89:6f:18:76:78:f5:dc:a2:48:1f:19:3f:
- 8e:93:eb:f1:fa:17:ee:cd:4e:e3:04:12:55:d6:e5:e4:dd:fb:
- 3e:05:7c:e2:1d:5e:c6:a7:bc:97:4f:68:3a:f5:e9:2e:0a:43:
- b6:af:57:5c:62:68:7c:b7:fd:a3:8a:84:a0:ac:62:be:2b:09:
- 87:34:f0:6a:01:bb:9b:29:56:3c:fe:00:37:cf:23:6c:f1:4e:
- aa:b6:74:46:12:6c:91:ee:34:d5:ec:9a:91:e7:44:be:90:31:
- 72:d5:49:02:f6:02:e5:f4:1f:eb:7c:d9:96:55:a9:ff:ec:8a:
- f9:99:47:ff:35:5a:02:aa:04:cb:8a:5b:87:71:29:91:bd:a4:
- b4:7a:0d:bd:9a:f5:57:23:00:07:21:17:3f:4a:39:d1:05:49:
- 0b:a7:b6:37:81:a5:5d:8c:aa:33:5e:81:28:7c:a7:7d:27:eb:
- 00:ae:8d:37
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
@@ -13157,71 +3736,6 @@ SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
EC-ACC
======
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- (Negative)11:d4:c2:14:2b:de:21:eb:57:9d:53:fb:0c:22:3b:ff
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=ES, O=Agencia Catalana de Certificacio (NIF Q-0801176-I), OU=Serveis Publics de Certificacio, OU=Vegeu https://www.catcert.net/verarrel (c)03, OU=Jerarquia Entitats de Certificacio Catalanes, CN=EC-ACC
- Validity
- Not Before: Jan 7 23:00:00 2003 GMT
- Not After : Jan 7 22:59:59 2031 GMT
- Subject: C=ES, O=Agencia Catalana de Certificacio (NIF Q-0801176-I), OU=Serveis Publics de Certificacio, OU=Vegeu https://www.catcert.net/verarrel (c)03, OU=Jerarquia Entitats de Certificacio Catalanes, CN=EC-ACC
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:b3:22:c7:4f:e2:97:42:95:88:47:83:40:f6:1d:
- 17:f3:83:73:24:1e:51:f3:98:8a:c3:92:b8:ff:40:
- 90:05:70:87:60:c9:00:a9:b5:94:65:19:22:15:17:
- c2:43:6c:66:44:9a:0d:04:3e:39:6f:a5:4b:7a:aa:
- 63:b7:8a:44:9d:d9:63:91:84:66:e0:28:0f:ba:42:
- e3:6e:8e:f7:14:27:93:69:ee:91:0e:a3:5f:0e:b1:
- eb:66:a2:72:4f:12:13:86:65:7a:3e:db:4f:07:f4:
- a7:09:60:da:3a:42:99:c7:b2:7f:b3:16:95:1c:c7:
- f9:34:b5:94:85:d5:99:5e:a0:48:a0:7e:e7:17:65:
- b8:a2:75:b8:1e:f3:e5:42:7d:af:ed:f3:8a:48:64:
- 5d:82:14:93:d8:c0:e4:ff:b3:50:72:f2:76:f6:b3:
- 5d:42:50:79:d0:94:3e:6b:0c:00:be:d8:6b:0e:4e:
- 2a:ec:3e:d2:cc:82:a2:18:65:33:13:77:9e:9a:5d:
- 1a:13:d8:c3:db:3d:c8:97:7a:ee:70:ed:a7:e6:7c:
- db:71:cf:2d:94:62:df:6d:d6:f5:38:be:3f:a5:85:
- 0a:19:b8:a8:d8:09:75:42:70:c4:ea:ef:cb:0e:c8:
- 34:a8:12:22:98:0c:b8:13:94:b6:4b:ec:f0:d0:90:
- e7:27
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Alternative Name:
- email:ec_acc at catcert.net
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- A0:C3:8B:44:AA:37:A5:45:BF:97:80:5A:D1:F1:78:A2:9B:E9:5D:8D
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.15096.1.3.1.10
- CPS: https://www.catcert.net/verarrel
- User Notice:
- Explicit Text: Vegeu https://www.catcert.net/verarrel
-
- Signature Algorithm: sha1WithRSAEncryption
- a0:48:5b:82:01:f6:4d:48:b8:39:55:35:9c:80:7a:53:99:d5:
- 5a:ff:b1:71:3b:cc:39:09:94:5e:d6:da:ef:be:01:5b:5d:d3:
- 1e:d8:fd:7d:4f:cd:a0:41:e0:34:93:bf:cb:e2:86:9c:37:92:
- 90:56:1c:dc:eb:29:05:e5:c4:9e:c7:35:df:8a:0c:cd:c5:21:
- 43:e9:aa:88:e5:35:c0:19:42:63:5a:02:5e:a4:48:18:3a:85:
- 6f:dc:9d:bc:3f:9d:9c:c1:87:b8:7a:61:08:e9:77:0b:7f:70:
- ab:7a:dd:d9:97:2c:64:1e:85:bf:bc:74:96:a1:c3:7a:12:ec:
- 0c:1a:6e:83:0c:3c:e8:72:46:9f:fb:48:d5:5e:97:e6:b1:a1:
- f8:e4:ef:46:25:94:9c:89:db:69:38:be:ec:5c:0e:56:c7:65:
- 51:e5:50:88:88:bf:42:d5:2b:3d:e5:f9:ba:9e:2e:b3:ca:f4:
- 73:92:02:0b:be:4c:66:eb:20:fe:b9:cb:b5:99:7f:e6:b6:13:
- fa:ca:4b:4d:d9:ee:53:46:06:3b:c6:4e:ad:93:5a:81:7e:6c:
- 2a:4b:6a:05:45:8c:f2:21:a4:31:90:87:6c:65:9c:9d:a5:60:
- 95:3a:52:7f:f5:d1:ab:08:6e:f3:ee:5b:f9:88:3d:7e:b8:6f:
- 6e:03:e4:42
-----BEGIN CERTIFICATE-----
MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
@@ -13254,99 +3768,36 @@ Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
-----END CERTIFICATE-----
+Hellenic Academic and Research Institutions RootCA 2011
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
+RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
+dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
+YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
+NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
+EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
+cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
+c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
+dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
+fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
+bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
+75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
+FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
+HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
+5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
+b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
+A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
+6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
+dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
+Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
+l7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
+
Actalis Authentication Root CA
==============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 57:0a:11:97:42:c4:e3:cc
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=IT, L=Milan, O=Actalis S.p.A./03358520967, CN=Actalis Authentication Root CA
- Validity
- Not Before: Sep 22 11:22:02 2011 GMT
- Not After : Sep 22 11:22:02 2030 GMT
- Subject: C=IT, L=Milan, O=Actalis S.p.A./03358520967, CN=Actalis Authentication Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:a7:c6:c4:a5:29:a4:2c:ef:e5:18:c5:b0:50:a3:
- 6f:51:3b:9f:0a:5a:c9:c2:48:38:0a:c2:1c:a0:18:
- 7f:91:b5:87:b9:40:3f:dd:1d:68:1f:08:83:d5:2d:
- 1e:88:a0:f8:8f:56:8f:6d:99:02:92:90:16:d5:5f:
- 08:6c:89:d7:e1:ac:bc:20:c2:b1:e0:83:51:8a:69:
- 4d:00:96:5a:6f:2f:c0:44:7e:a3:0e:e4:91:cd:58:
- ee:dc:fb:c7:1e:45:47:dd:27:b9:08:01:9f:a6:21:
- 1d:f5:41:2d:2f:4c:fd:28:ad:e0:8a:ad:22:b4:56:
- 65:8e:86:54:8f:93:43:29:de:39:46:78:a3:30:23:
- ba:cd:f0:7d:13:57:c0:5d:d2:83:6b:48:4c:c4:ab:
- 9f:80:5a:5b:3a:bd:c9:a7:22:3f:80:27:33:5b:0e:
- b7:8a:0c:5d:07:37:08:cb:6c:d2:7a:47:22:44:35:
- c5:cc:cc:2e:8e:dd:2a:ed:b7:7d:66:0d:5f:61:51:
- 22:55:1b:e3:46:e3:e3:3d:d0:35:62:9a:db:af:14:
- c8:5b:a1:cc:89:1b:e1:30:26:fc:a0:9b:1f:81:a7:
- 47:1f:04:eb:a3:39:92:06:9f:99:d3:bf:d3:ea:4f:
- 50:9c:19:fe:96:87:1e:3c:65:f6:a3:18:24:83:86:
- 10:e7:54:3e:a8:3a:76:24:4f:81:21:c5:e3:0f:02:
- f8:93:94:47:20:bb:fe:d4:0e:d3:68:b9:dd:c4:7a:
- 84:82:e3:53:54:79:dd:db:9c:d2:f2:07:9b:2e:b6:
- bc:3e:ed:85:6d:ef:25:11:f2:97:1a:42:61:f7:4a:
- 97:e8:8b:b1:10:07:fa:65:81:b2:a2:39:cf:f7:3c:
- ff:18:fb:c6:f1:5a:8b:59:e2:02:ac:7b:92:d0:4e:
- 14:4f:59:45:f6:0c:5e:28:5f:b0:e8:3f:45:cf:cf:
- af:9b:6f:fb:84:d3:77:5a:95:6f:ac:94:84:9e:ee:
- bc:c0:4a:8f:4a:93:f8:44:21:e2:31:45:61:50:4e:
- 10:d8:e3:35:7c:4c:19:b4:de:05:bf:a3:06:9f:c8:
- b5:cd:e4:1f:d7:17:06:0d:7a:95:74:55:0d:68:1a:
- fc:10:1b:62:64:9d:6d:e0:95:a0:c3:94:07:57:0d:
- 14:e6:bd:05:fb:b8:9f:e6:df:8b:e2:c6:e7:7e:96:
- f6:53:c5:80:34:50:28:58:f0:12:50:71:17:30:ba:
- e6:78:63:bc:f4:b2:ad:9b:2b:b2:fe:e1:39:8c:5e:
- ba:0b:20:94:de:7b:83:b8:ff:e3:56:8d:b7:11:e9:
- 3b:8c:f2:b1:c1:5d:9d:a4:0b:4c:2b:d9:b2:18:f5:
- b5:9f:4b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 52:D8:88:3A:C8:9F:78:66:ED:89:F3:7B:38:70:94:C9:02:02:36:D0
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:52:D8:88:3A:C8:9F:78:66:ED:89:F3:7B:38:70:94:C9:02:02:36:D0
-
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha256WithRSAEncryption
- 0b:7b:72:87:c0:60:a6:49:4c:88:58:e6:1d:88:f7:14:64:48:
- a6:d8:58:0a:0e:4f:13:35:df:35:1d:d4:ed:06:31:c8:81:3e:
- 6a:d5:dd:3b:1a:32:ee:90:3d:11:d2:2e:f4:8e:c3:63:2e:23:
- 66:b0:67:be:6f:b6:c0:13:39:60:aa:a2:34:25:93:75:52:de:
- a7:9d:ad:0e:87:89:52:71:6a:16:3c:19:1d:83:f8:9a:29:65:
- be:f4:3f:9a:d9:f0:f3:5a:87:21:71:80:4d:cb:e0:38:9b:3f:
- bb:fa:e0:30:4d:cf:86:d3:65:10:19:18:d1:97:02:b1:2b:72:
- 42:68:ac:a0:bd:4e:5a:da:18:bf:6b:98:81:d0:fd:9a:be:5e:
- 15:48:cd:11:15:b9:c0:29:5c:b4:e8:88:f7:3e:36:ae:b7:62:
- fd:1e:62:de:70:78:10:1c:48:5b:da:bc:a4:38:ba:67:ed:55:
- 3e:5e:57:df:d4:03:40:4c:81:a4:d2:4f:63:a7:09:42:09:14:
- fc:00:a9:c2:80:73:4f:2e:c0:40:d9:11:7b:48:ea:7a:02:c0:
- d3:eb:28:01:26:58:74:c1:c0:73:22:6d:93:95:fd:39:7d:bb:
- 2a:e3:f6:82:e3:2c:97:5f:4e:1f:91:94:fa:fe:2c:a3:d8:76:
- 1a:b8:4d:b2:38:4f:9b:fa:1d:48:60:79:26:e2:f3:fd:a9:d0:
- 9a:e8:70:8f:49:7a:d6:e5:bd:0a:0e:db:2d:f3:8d:bf:eb:e3:
- a4:7d:cb:c7:95:71:e8:da:a3:7c:c5:c2:f8:74:92:04:1b:86:
- ac:a4:22:53:40:b6:ac:fe:4c:76:cf:fb:94:32:c0:35:9f:76:
- 3f:6e:e5:90:6e:a0:a6:26:a2:b8:2c:be:d1:2b:85:fd:a7:68:
- c8:ba:01:2b:b1:6c:74:1d:b8:73:95:e7:ee:b7:c7:25:f0:00:
- 4c:00:b2:7e:b6:0b:8b:1c:f3:c0:50:9e:25:b9:e0:08:de:36:
- 66:ff:37:a5:d1:bb:54:64:2c:c9:27:b5:4b:92:7e:65:ff:d3:
- 2d:e1:b9:4e:bc:7f:a4:41:21:90:41:77:a6:39:1f:ea:9e:e3:
- 9f:d0:66:6f:05:ec:aa:76:7e:bf:6b:16:a0:eb:b5:c7:fc:92:
- 54:2f:2b:11:27:25:37:78:4c:51:6a:b0:f3:cc:58:5d:14:f1:
- 6a:48:15:ff:c2:07:b6:b1:8d:0f:8e:5c:50:46:b3:3d:bf:01:
- 98:4f:b2:59:54:47:3e:34:7b:78:6d:56:93:2e:73:ea:66:28:
- 78:cd:1d:14:bf:a0:8f:2f:2e:b8:2e:8e:f2:14:8a:cc:e9:b5:
- 7c:fb:6c:9d:0c:a5:e1:96
-----BEGIN CERTIFICATE-----
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
@@ -13383,64 +3834,6 @@ LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
Trustis FPS Root CA
===================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 1b:1f:ad:b6:20:f9:24:d3:36:6b:f7:c7:f1:8c:a0:59
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=GB, O=Trustis Limited, OU=Trustis FPS Root CA
- Validity
- Not Before: Dec 23 12:14:06 2003 GMT
- Not After : Jan 21 11:36:54 2024 GMT
- Subject: C=GB, O=Trustis Limited, OU=Trustis FPS Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:c5:50:7b:9e:3b:35:d0:df:c4:8c:cd:8e:9b:ed:
- a3:c0:36:99:f4:42:ea:a7:3e:80:83:0f:a6:a7:59:
- 87:c9:90:45:43:7e:00:ea:86:79:2a:03:bd:3d:37:
- 99:89:66:b7:e5:8a:56:86:93:9c:68:4b:68:04:8c:
- 93:93:02:3e:30:d2:37:3a:22:61:89:1c:85:4e:7d:
- 8f:d5:af:7b:35:f6:7e:28:47:89:31:dc:0e:79:64:
- 1f:99:d2:5b:ba:fe:7f:60:bf:ad:eb:e7:3c:38:29:
- 6a:2f:e5:91:0b:55:ff:ec:6f:58:d5:2d:c9:de:4c:
- 66:71:8f:0c:d7:04:da:07:e6:1e:18:e3:bd:29:02:
- a8:fa:1c:e1:5b:b9:83:a8:41:48:bc:1a:71:8d:e7:
- 62:e5:2d:b2:eb:df:7c:cf:db:ab:5a:ca:31:f1:4c:
- 22:f3:05:13:f7:82:f9:73:79:0c:be:d7:4b:1c:c0:
- d1:15:3c:93:41:64:d1:e6:be:23:17:22:00:89:5e:
- 1f:6b:a5:ac:6e:a7:4b:8c:ed:a3:72:e6:af:63:4d:
- 2f:85:d2:14:35:9a:2e:4e:8c:ea:32:98:28:86:a1:
- 91:09:41:3a:b4:e1:e3:f2:fa:f0:c9:0a:a2:41:dd:
- a9:e3:03:c7:88:15:3b:1c:d4:1a:94:d7:9f:64:59:
- 12:6d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Authority Key Identifier:
- keyid:BA:FA:71:25:79:8B:57:41:25:21:86:0B:71:EB:B2:64:0E:8B:21:67
-
- X509v3 Subject Key Identifier:
- BA:FA:71:25:79:8B:57:41:25:21:86:0B:71:EB:B2:64:0E:8B:21:67
- Signature Algorithm: sha1WithRSAEncryption
- 7e:58:ff:fd:35:19:7d:9c:18:4f:9e:b0:2b:bc:8e:8c:14:ff:
- 2c:a0:da:47:5b:c3:ef:81:2d:af:05:ea:74:48:5b:f3:3e:4e:
- 07:c7:6d:c5:b3:93:cf:22:35:5c:b6:3f:75:27:5f:09:96:cd:
- a0:fe:be:40:0c:5c:12:55:f8:93:82:ca:29:e9:5e:3f:56:57:
- 8b:38:36:f7:45:1a:4c:28:cd:9e:41:b8:ed:56:4c:84:a4:40:
- c8:b8:b0:a5:2b:69:70:04:6a:c3:f8:d4:12:32:f9:0e:c3:b1:
- dc:32:84:44:2c:6f:cb:46:0f:ea:66:41:0f:4f:f1:58:a5:a6:
- 0d:0d:0f:61:de:a5:9e:5d:7d:65:a1:3c:17:e7:a8:55:4e:ef:
- a0:c7:ed:c6:44:7f:54:f5:a3:e0:8f:f0:7c:55:22:8f:29:b6:
- 81:a3:e1:6d:4e:2c:1b:80:67:ec:ad:20:9f:0c:62:61:d5:97:
- ff:43:ed:2d:c1:da:5d:29:2a:85:3f:ac:65:ee:86:0f:05:8d:
- 90:5f:df:ee:9f:f4:bf:ee:1d:fb:98:e4:7f:90:2b:84:78:10:
- 0e:6c:49:53:ef:15:5b:65:46:4a:5d:af:ba:fb:3a:72:1d:cd:
- f6:25:88:1e:97:cc:21:9c:29:01:0d:65:eb:57:d9:f3:57:96:
- bb:48:cd:81
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
@@ -13465,109 +3858,6 @@ ZetX2fNXlrtIzYE=
StartCom Certification Authority
================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 45 (0x2d)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority
- Validity
- Not Before: Sep 17 19:46:37 2006 GMT
- Not After : Sep 17 19:46:36 2036 GMT
- Subject: C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:c1:88:db:09:bc:6c:46:7c:78:9f:95:7b:b5:33:
- 90:f2:72:62:d6:c1:36:20:22:24:5e:ce:e9:77:f2:
- 43:0a:a2:06:64:a4:cc:8e:36:f8:38:e6:23:f0:6e:
- 6d:b1:3c:dd:72:a3:85:1c:a1:d3:3d:b4:33:2b:d3:
- 2f:af:fe:ea:b0:41:59:67:b6:c4:06:7d:0a:9e:74:
- 85:d6:79:4c:80:37:7a:df:39:05:52:59:f7:f4:1b:
- 46:43:a4:d2:85:85:d2:c3:71:f3:75:62:34:ba:2c:
- 8a:7f:1e:8f:ee:ed:34:d0:11:c7:96:cd:52:3d:ba:
- 33:d6:dd:4d:de:0b:3b:4a:4b:9f:c2:26:2f:fa:b5:
- 16:1c:72:35:77:ca:3c:5d:e6:ca:e1:26:8b:1a:36:
- 76:5c:01:db:74:14:25:fe:ed:b5:a0:88:0f:dd:78:
- ca:2d:1f:07:97:30:01:2d:72:79:fa:46:d6:13:2a:
- a8:b9:a6:ab:83:49:1d:e5:f2:ef:dd:e4:01:8e:18:
- 0a:8f:63:53:16:85:62:a9:0e:19:3a:cc:b5:66:a6:
- c2:6b:74:07:e4:2b:e1:76:3e:b4:6d:d8:f6:44:e1:
- 73:62:1f:3b:c4:be:a0:53:56:25:6c:51:09:f7:aa:
- ab:ca:bf:76:fd:6d:9b:f3:9d:db:bf:3d:66:bc:0c:
- 56:aa:af:98:48:95:3a:4b:df:a7:58:50:d9:38:75:
- a9:5b:ea:43:0c:02:ff:99:eb:e8:6c:4d:70:5b:29:
- 65:9c:dd:aa:5d:cc:af:01:31:ec:0c:eb:d2:8d:e8:
- ea:9c:7b:e6:6e:f7:27:66:0c:1a:48:d7:6e:42:e3:
- 3f:de:21:3e:7b:e1:0d:70:fb:63:aa:a8:6c:1a:54:
- b4:5c:25:7a:c9:a2:c9:8b:16:a6:bb:2c:7e:17:5e:
- 05:4d:58:6e:12:1d:01:ee:12:10:0d:c6:32:7f:18:
- ff:fc:f4:fa:cd:6e:91:e8:36:49:be:1a:48:69:8b:
- c2:96:4d:1a:12:b2:69:17:c1:0a:90:d6:fa:79:22:
- 48:bf:ba:7b:69:f8:70:c7:fa:7a:37:d8:d8:0d:d2:
- 76:4f:57:ff:90:b7:e3:91:d2:dd:ef:c2:60:b7:67:
- 3a:dd:fe:aa:9c:f0:d4:8b:7f:72:22:ce:c6:9f:97:
- b6:f8:af:8a:a0:10:a8:d9:fb:18:c6:b6:b5:5c:52:
- 3c:89:b6:19:2a:73:01:0a:0f:03:b3:12:60:f2:7a:
- 2f:81:db:a3:6e:ff:26:30:97:f5:8b:dd:89:57:b6:
- ad:3d:b3:af:2b:c5:b7:76:02:f0:a5:d6:2b:9a:86:
- 14:2a:72:f6:e3:33:8c:5d:09:4b:13:df:bb:8c:74:
- 13:52:4b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2
- X509v3 Authority Key Identifier:
- keyid:4E:0B:EF:1A:A4:40:5B:A5:17:69:87:30:CA:34:68:43:D0:41:AE:F2
-
- X509v3 Certificate Policies:
- Policy: 1.3.6.1.4.1.23223.1.1.1
- CPS: http://www.startssl.com/policy.pdf
- CPS: http://www.startssl.com/intermediate.pdf
- User Notice:
- Organization: Start Commercial (StartCom) Ltd.
- Number: 1
- Explicit Text: Limited Liability, read the section *Legal Limitations* of the StartCom Certification Authority Policy available at http://www.startssl.com/policy.pdf
-
- Netscape Cert Type:
- SSL CA, S/MIME CA, Object Signing CA
- Netscape Comment:
- StartCom Free SSL Certification Authority
- Signature Algorithm: sha256WithRSAEncryption
- 8e:8f:e7:dc:94:79:7c:f1:85:7f:9f:49:6f:6b:ca:5d:fb:8c:
- fe:04:c5:c1:62:d1:7d:42:8a:bc:53:b7:94:03:66:30:3f:b1:
- e7:0a:a7:50:20:55:25:7f:76:7a:14:0d:eb:04:0e:40:e6:3e:
- d8:88:ab:07:27:83:a9:75:a6:37:73:c7:fd:4b:d2:4d:ad:17:
- 40:c8:46:be:3b:7f:51:fc:c3:b6:05:31:dc:cd:85:22:4e:71:
- b7:f2:71:5e:b0:1a:c6:ba:93:8b:78:92:4a:85:f8:78:0f:83:
- fe:2f:ad:2c:f7:e4:a4:bb:2d:d0:e7:0d:3a:b8:3e:ce:f6:78:
- f6:ae:47:24:ca:a3:35:36:ce:c7:c6:87:98:da:ec:fb:e9:b2:
- ce:27:9b:88:c3:04:a1:f6:0b:59:68:af:c9:db:10:0f:4d:f6:
- 64:63:5c:a5:12:6f:92:b2:93:94:c7:88:17:0e:93:b6:7e:62:
- 8b:90:7f:ab:4e:9f:fc:e3:75:14:4f:2a:32:df:5b:0d:e0:f5:
- 7b:93:0d:ab:a1:cf:87:e1:a5:04:45:e8:3c:12:a5:09:c5:b0:
- d1:b7:53:f3:60:14:ba:85:69:6a:21:7c:1f:75:61:17:20:17:
- 7b:6c:3b:41:29:5c:e1:ac:5a:d1:cd:8c:9b:eb:60:1d:19:ec:
- f7:e5:b0:da:f9:79:18:a5:45:3f:49:43:57:d2:dd:24:d5:2c:
- a3:fd:91:8d:27:b5:e5:eb:14:06:9a:4c:7b:21:bb:3a:ad:30:
- 06:18:c0:d8:c1:6b:2c:7f:59:5c:5d:91:b1:70:22:57:eb:8a:
- 6b:48:4a:d5:0f:29:ec:c6:40:c0:2f:88:4c:68:01:17:77:f4:
- 24:19:4f:bd:fa:e1:b2:20:21:4b:dd:1a:d8:29:7d:aa:b8:de:
- 54:ec:21:55:80:6c:1e:f5:30:c8:a3:10:e5:b2:e6:2a:14:31:
- c3:85:2d:8c:98:b1:86:5a:4f:89:59:2d:b9:c7:f7:1c:c8:8a:
- 7f:c0:9d:05:4a:e6:42:4f:62:a3:6d:29:a4:1f:85:ab:db:e5:
- 81:c8:ad:2a:3d:4c:5d:5b:84:26:71:c4:85:5e:71:24:ca:a5:
- 1b:6c:d8:61:d3:1a:e0:54:db:ce:ba:a9:32:b5:22:f6:73:41:
- 09:5d:b8:17:5d:0e:0f:99:90:d6:47:da:6f:0a:3a:62:28:14:
- 67:82:d9:f1:d0:80:59:9b:cb:31:d8:9b:0f:8c:77:4e:b5:68:
- 8a:f2:6c:f6:24:0e:2d:6c:70:c5:73:d1:de:14:d0:71:8f:b6:
- d3:7b:02:f6:e3:b8:d4:09:6e:6b:9e:75:84:39:e6:7f:25:a5:
- f2:48:00:c0:a4:01:da:3f
-----BEGIN CERTIFICATE-----
MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
@@ -13614,93 +3904,6 @@ fyWl8kgAwKQB2j8=
StartCom Certification Authority G2
===================================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 59 (0x3b)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=IL, O=StartCom Ltd., CN=StartCom Certification Authority G2
- Validity
- Not Before: Jan 1 01:00:01 2010 GMT
- Not After : Dec 31 23:59:01 2039 GMT
- Subject: C=IL, O=StartCom Ltd., CN=StartCom Certification Authority G2
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:b6:89:36:5b:07:b7:20:36:bd:82:bb:e1:16:20:
- 03:95:7a:af:0e:a3:55:c9:25:99:4a:c5:d0:56:41:
- 87:90:4d:21:60:a4:14:87:3b:cd:fd:b2:3e:b4:67:
- 03:6a:ed:e1:0f:4b:c0:91:85:70:45:e0:42:9e:de:
- 29:23:d4:01:0d:a0:10:79:b8:db:03:bd:f3:a9:2f:
- d1:c6:e0:0f:cb:9e:8a:14:0a:b8:bd:f6:56:62:f1:
- c5:72:b6:32:25:d9:b2:f3:bd:65:c5:0d:2c:6e:d5:
- 92:6f:18:8b:00:41:14:82:6f:40:20:26:7a:28:0f:
- f5:1e:7f:27:f7:94:b1:37:3d:b7:c7:91:f7:e2:01:
- ec:fd:94:89:e1:cc:6e:d3:36:d6:0a:19:79:ae:d7:
- 34:82:65:ff:7c:42:bb:b6:dd:0b:a6:34:af:4b:60:
- fe:7f:43:49:06:8b:8c:43:b8:56:f2:d9:7f:21:43:
- 17:ea:a7:48:95:01:75:75:ea:2b:a5:43:95:ea:15:
- 84:9d:08:8d:26:6e:55:9b:ab:dc:d2:39:d2:31:1d:
- 60:e2:ac:cc:56:45:24:f5:1c:54:ab:ee:86:dd:96:
- 32:85:f8:4c:4f:e8:95:76:b6:05:dd:36:23:67:bc:
- ff:15:e2:ca:3b:e6:a6:ec:3b:ec:26:11:34:48:8d:
- f6:80:2b:1a:23:02:eb:8a:1c:3a:76:2a:7b:56:16:
- 1c:72:2a:b3:aa:e3:60:a5:00:9f:04:9b:e2:6f:1e:
- 14:58:5b:a5:6c:8b:58:3c:c3:ba:4e:3a:5c:f7:e1:
- 96:2b:3e:ef:07:bc:a4:e5:5d:cc:4d:9f:0d:e1:dc:
- aa:bb:e1:6e:1a:ec:8f:e1:b6:4c:4d:79:72:5d:17:
- 35:0b:1d:d7:c1:47:da:96:24:e0:d0:72:a8:5a:5f:
- 66:2d:10:dc:2f:2a:13:ae:26:fe:0a:1c:19:cc:d0:
- 3e:0b:9c:c8:09:2e:f9:5b:96:7a:47:9c:e9:7a:f3:
- 05:50:74:95:73:9e:30:09:f3:97:82:5e:e6:8f:39:
- 08:1e:59:e5:35:14:42:13:ff:00:9c:f7:be:aa:50:
- cf:e2:51:48:d7:b8:6f:af:f8:4e:7e:33:98:92:14:
- 62:3a:75:63:cf:7b:fa:de:82:3b:a9:bb:39:e2:c4:
- bd:2c:00:0e:c8:17:ac:13:ef:4d:25:8e:d8:b3:90:
- 2f:a9:da:29:7d:1d:af:74:3a:b2:27:c0:c1:1e:3e:
- 75:a3:16:a9:af:7a:22:5d:9f:13:1a:cf:a7:a0:eb:
- e3:86:0a:d3:fd:e6:96:95:d7:23:c8:37:dd:c4:7c:
- aa:36:ac:98:1a:12:b1:e0:4e:e8:b1:3b:f5:d6:6f:
- f1:30:d7
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- 4B:C5:B4:40:6B:AD:1C:B3:A5:1C:65:6E:46:36:89:87:05:0C:0E:B6
- Signature Algorithm: sha256WithRSAEncryption
- 73:57:3f:2c:d5:95:32:7e:37:db:96:92:eb:19:5e:7e:53:e7:
- 41:ec:11:b6:47:ef:b5:de:ed:74:5c:c5:f1:8e:49:e0:fc:6e:
- 99:13:cd:9f:8a:da:cd:3a:0a:d8:3a:5a:09:3f:5f:34:d0:2f:
- 03:d2:66:1d:1a:bd:9c:90:37:c8:0c:8e:07:5a:94:45:46:2a:
- e6:be:7a:da:a1:a9:a4:69:12:92:b0:7d:36:d4:44:87:d7:51:
- f1:29:63:d6:75:cd:16:e4:27:89:1d:f8:c2:32:48:fd:db:99:
- d0:8f:5f:54:74:cc:ac:67:34:11:62:d9:0c:0a:37:87:d1:a3:
- 17:48:8e:d2:17:1d:f6:d7:fd:db:65:eb:fd:a8:d4:f5:d6:4f:
- a4:5b:75:e8:c5:d2:60:b2:db:09:7e:25:8b:7b:ba:52:92:9e:
- 3e:e8:c5:77:a1:3c:e0:4a:73:6b:61:cf:86:dc:43:ff:ff:21:
- fe:23:5d:24:4a:f5:d3:6d:0f:62:04:05:57:82:da:6e:a4:33:
- 25:79:4b:2e:54:19:8b:cc:2c:3d:30:e9:d1:06:ff:e8:32:46:
- be:b5:33:76:77:a8:01:5d:96:c1:c1:d5:be:ae:25:c0:c9:1e:
- 0a:09:20:88:a1:0e:c9:f3:6f:4d:82:54:00:20:a7:d2:8f:e4:
- 39:54:17:2e:8d:1e:b8:1b:bb:1b:bd:9a:4e:3b:10:34:dc:9c:
- 88:53:ef:a2:31:5b:58:4f:91:62:c8:c2:9a:9a:cd:15:5d:38:
- a9:d6:be:f8:13:b5:9f:12:69:f2:50:62:ac:fb:17:37:f4:ee:
- b8:75:67:60:10:fb:83:50:f9:44:b5:75:9c:40:17:b2:fe:fd:
- 79:5d:6e:58:58:5f:30:fc:00:ae:af:33:c1:0e:4e:6c:ba:a7:
- a6:a1:7f:32:db:38:e0:b1:72:17:0a:2b:91:ec:6a:63:26:ed:
- 89:d4:78:cc:74:1e:05:f8:6b:fe:8c:6a:76:39:29:ae:65:23:
- 12:95:08:22:1c:97:ce:5b:06:ee:0c:e2:bb:bc:1f:44:93:f6:
- d8:38:45:05:21:ed:e4:ad:ab:12:b6:03:a4:42:2e:2d:c4:09:
- 3a:03:67:69:84:9a:e1:59:90:8a:28:85:d5:5d:74:b1:d1:0e:
- 20:58:9b:13:a5:b0:63:a6:ed:7b:47:fd:45:55:30:a4:ee:9a:
- d4:e6:e2:87:ef:98:c9:32:82:11:29:22:bc:00:0a:31:5e:2d:
- 0f:c0:8e:e9:6b:b2:8f:2e:06:d8:d1:91:c7:c6:12:f4:4c:fd:
- 30:17:c3:c1:da:38:5b:e3:a9:ea:e6:a1:ba:79:ef:73:d8:b6:
- 53:57:2d:f6:d0:e1:d7:48
-----BEGIN CERTIFICATE-----
MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
@@ -13735,93 +3938,6 @@ so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
Buypass Class 2 Root CA
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 2 (0x2)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 Root CA
- Validity
- Not Before: Oct 26 08:38:03 2010 GMT
- Not After : Oct 26 08:38:03 2040 GMT
- Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 2 Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:d7:c7:5e:f7:c1:07:d4:77:fb:43:21:f4:f4:f5:
- 69:e4:ee:32:01:db:a3:86:1f:e4:59:0d:ba:e7:75:
- 83:52:eb:ea:1c:61:15:48:bb:1d:07:ca:8c:ae:b0:
- dc:96:9d:ea:c3:60:92:86:82:28:73:9c:56:06:ff:
- 4b:64:f0:0c:2a:37:49:b5:e5:cf:0c:7c:ee:f1:4a:
- bb:73:30:65:f3:d5:2f:83:b6:7e:e3:e7:f5:9e:ab:
- 60:f9:d3:f1:9d:92:74:8a:e4:1c:96:ac:5b:80:e9:
- b5:f4:31:87:a3:51:fc:c7:7e:a1:6f:8e:53:77:d4:
- 97:c1:55:33:92:3e:18:2f:75:d4:ad:86:49:cb:95:
- af:54:06:6c:d8:06:13:8d:5b:ff:e1:26:19:59:c0:
- 24:ba:81:71:79:90:44:50:68:24:94:5f:b8:b3:11:
- f1:29:41:61:a3:41:cb:23:36:d5:c1:f1:32:50:10:
- 4e:7f:f4:86:93:ec:84:d3:8e:bc:4b:bf:5c:01:4e:
- 07:3d:dc:14:8a:94:0a:a4:ea:73:fb:0b:51:e8:13:
- 07:18:fa:0e:f1:2b:d1:54:15:7d:3c:e1:f7:b4:19:
- 42:67:62:5e:77:e0:a2:55:ec:b6:d9:69:17:d5:3a:
- af:44:ed:4a:c5:9e:e4:7a:27:7c:e5:75:d7:aa:cb:
- 25:e7:df:6b:0a:db:0f:4d:93:4e:a8:a0:cd:7b:2e:
- f2:59:01:6a:b7:0d:b8:07:81:7e:8b:38:1b:38:e6:
- 0a:57:99:3d:ee:21:e8:a3:f5:0c:16:dd:8b:ec:34:
- 8e:9c:2a:1c:00:15:17:8d:68:83:d2:70:9f:18:08:
- cd:11:68:d5:c9:6b:52:cd:c4:46:8f:dc:b5:f3:d8:
- 57:73:1e:e9:94:39:04:bf:d3:de:38:de:b4:53:ec:
- 69:1c:a2:7e:c4:8f:e4:1b:70:ad:f2:a2:f9:fb:f7:
- 16:64:66:69:9f:49:51:a2:e2:15:18:67:06:4a:7f:
- d5:6c:b5:4d:b3:33:e0:61:eb:5d:be:e9:98:0f:32:
- d7:1d:4b:3c:2e:5a:01:52:91:09:f2:df:ea:8d:d8:
- 06:40:63:aa:11:e4:fe:c3:37:9e:14:52:3f:f4:e2:
- cc:f2:61:93:d1:fd:67:6b:d7:52:ae:bf:68:ab:40:
- 43:a0:57:35:53:78:f0:53:f8:61:42:07:64:c6:d7:
- 6f:9b:4c:38:0d:63:ac:62:af:36:8b:a2:73:0a:0d:
- f5:21:bd:74:aa:4d:ea:72:03:49:db:c7:5f:1d:62:
- 63:c7:fd:dd:91:ec:33:ee:f5:6d:b4:6e:30:68:de:
- c8:d6:26:b0:75:5e:7b:b4:07:20:98:a1:76:32:b8:
- 4d:6c:4f
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- C9:80:77:E0:62:92:82:F5:46:9C:F3:BA:F7:4C:C3:DE:B8:A3:AD:39
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha256WithRSAEncryption
- 53:5f:21:f5:ba:b0:3a:52:39:2c:92:b0:6c:00:c9:ef:ce:20:
- ef:06:f2:96:9e:e9:a4:74:7f:7a:16:fc:b7:f5:b6:fb:15:1b:
- 3f:ab:a6:c0:72:5d:10:b1:71:ee:bc:4f:e3:ad:ac:03:6d:2e:
- 71:2e:af:c4:e3:ad:a3:bd:0c:11:a7:b4:ff:4a:b2:7b:10:10:
- 1f:a7:57:41:b2:c0:ae:f4:2c:59:d6:47:10:88:f3:21:51:29:
- 30:ca:60:86:af:46:ab:1d:ed:3a:5b:b0:94:de:44:e3:41:08:
- a2:c1:ec:1d:d6:fd:4f:b6:d6:47:d0:14:0b:ca:e6:ca:b5:7b:
- 77:7e:41:1f:5e:83:c7:b6:8c:39:96:b0:3f:96:81:41:6f:60:
- 90:e2:e8:f9:fb:22:71:d9:7d:b3:3d:46:bf:b4:84:af:90:1c:
- 0f:8f:12:6a:af:ef:ee:1e:7a:ae:02:4a:8a:17:2b:76:fe:ac:
- 54:89:24:2c:4f:3f:b6:b2:a7:4e:8c:a8:91:97:fb:29:c6:7b:
- 5c:2d:b9:cb:66:b6:b7:a8:5b:12:51:85:b5:09:7e:62:78:70:
- fe:a9:6a:60:b6:1d:0e:79:0c:fd:ca:ea:24:80:72:c3:97:3f:
- f2:77:ab:43:22:0a:c7:eb:b6:0c:84:82:2c:80:6b:41:8a:08:
- c0:eb:a5:6b:df:99:12:cb:8a:d5:5e:80:0c:91:e0:26:08:36:
- 48:c5:fa:38:11:35:ff:25:83:2d:f2:7a:bf:da:fd:8e:fe:a5:
- cb:45:2c:1f:c4:88:53:ae:77:0e:d9:9a:76:c5:8e:2c:1d:a3:
- ba:d5:ec:32:ae:c0:aa:ac:f7:d1:7a:4d:eb:d4:07:e2:48:f7:
- 22:8e:b0:a4:9f:6a:ce:8e:b2:b2:60:f4:a3:22:d0:23:eb:94:
- 5a:7a:69:dd:0f:bf:40:57:ac:6b:59:50:d9:a3:99:e1:6e:fe:
- 8d:01:79:27:23:15:de:92:9d:7b:09:4d:5a:e7:4b:48:30:5a:
- 18:e6:0a:6d:e6:8f:e0:d2:bb:e6:df:7c:6e:21:82:c1:68:39:
- 4d:b4:98:58:66:62:cc:4a:90:5e:c3:fa:27:04:b1:79:15:74:
- 99:cc:be:ad:20:de:26:60:1c:eb:56:51:a6:a3:ea:e4:a3:3f:
- a7:ff:61:dc:f1:5a:4d:6c:32:23:43:ee:ac:a8:ee:ee:4a:12:
- 09:3c:5d:71:c2:be:79:fa:c2:87:68:1d:0b:fd:5c:69:cc:06:
- d0:9a:7d:54:99:2a:c9:39:1a:19:af:4b:2a:43:f3:63:5d:5a:
- 58:e2:2f:e3:1d:e4:a9:d6:d0:0a:d0:9e:bf:d7:81:09:f1:c9:
- c7:26:0d:ac:98:16:56:a0
-----BEGIN CERTIFICATE-----
MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
@@ -13856,93 +3972,6 @@ Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
Buypass Class 3 Root CA
=======================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 2 (0x2)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 Root CA
- Validity
- Not Before: Oct 26 08:28:58 2010 GMT
- Not After : Oct 26 08:28:58 2040 GMT
- Subject: C=NO, O=Buypass AS-983163327, CN=Buypass Class 3 Root CA
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (4096 bit)
- Modulus (4096 bit):
- 00:a5:da:0a:95:16:50:e3:95:f2:5e:9d:76:31:06:
- 32:7a:9b:f1:10:76:b8:00:9a:b5:52:36:cd:24:47:
- b0:9f:18:64:bc:9a:f6:fa:d5:79:d8:90:62:4c:22:
- 2f:de:38:3d:d6:e0:a8:e9:1c:2c:db:78:11:e9:8e:
- 68:51:15:72:c7:f3:33:87:e4:a0:5d:0b:5c:e0:57:
- 07:2a:30:f5:cd:c4:37:77:28:4d:18:91:e6:bf:d5:
- 52:fd:71:2d:70:3e:e7:c6:c4:8a:e3:f0:28:0b:f4:
- 76:98:a1:8b:87:55:b2:3a:13:fc:b7:3e:27:37:8e:
- 22:e3:a8:4f:2a:ef:60:bb:3d:b7:39:c3:0e:01:47:
- 99:5d:12:4f:db:43:fa:57:a1:ed:f9:9d:be:11:47:
- 26:5b:13:98:ab:5d:16:8a:b0:37:1c:57:9d:45:ff:
- 88:96:36:bf:bb:ca:07:7b:6f:87:63:d7:d0:32:6a:
- d6:5d:6c:0c:f1:b3:6e:39:e2:6b:31:2e:39:00:27:
- 14:de:38:c0:ec:19:66:86:12:e8:9d:72:16:13:64:
- 52:c7:a9:37:1c:fd:82:30:ed:84:18:1d:f4:ae:5c:
- ff:70:13:00:eb:b1:f5:33:7a:4b:d6:55:f8:05:8d:
- 4b:69:b0:f5:b3:28:36:5c:14:c4:51:73:4d:6b:0b:
- f1:34:07:db:17:39:d7:dc:28:7b:6b:f5:9f:f3:2e:
- c1:4f:17:2a:10:f3:cc:ca:e8:eb:fd:6b:ab:2e:9a:
- 9f:2d:82:6e:04:d4:52:01:93:2d:3d:86:fc:7e:fc:
- df:ef:42:1d:a6:6b:ef:b9:20:c6:f7:bd:a0:a7:95:
- fd:a7:e6:89:24:d8:cc:8c:34:6c:e2:23:2f:d9:12:
- 1a:21:b9:55:91:6f:0b:91:79:19:0c:ad:40:88:0b:
- 70:e2:7a:d2:0e:d8:68:48:bb:82:13:39:10:58:e9:
- d8:2a:07:c6:12:db:58:db:d2:3b:55:10:47:05:15:
- 67:62:7e:18:63:a6:46:3f:09:0e:54:32:5e:bf:0d:
- 62:7a:27:ef:80:e8:db:d9:4b:06:5a:37:5a:25:d0:
- 08:12:77:d4:6f:09:50:97:3d:c8:1d:c3:df:8c:45:
- 30:56:c6:d3:64:ab:66:f3:c0:5e:96:9c:c3:c4:ef:
- c3:7c:6b:8b:3a:79:7f:b3:49:cf:3d:e2:89:9f:a0:
- 30:4b:85:b9:9c:94:24:79:8f:7d:6b:a9:45:68:0f:
- 2b:d0:f1:da:1c:cb:69:b8:ca:49:62:6d:c8:d0:63:
- 62:dd:60:0f:58:aa:8f:a1:bc:05:a5:66:a2:cf:1b:
- 76:b2:84:64:b1:4c:39:52:c0:30:ba:f0:8c:4b:02:
- b0:b6:b7
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Subject Key Identifier:
- 47:B8:CD:FF:E5:6F:EE:F8:B2:EC:2F:4E:0E:F9:25:B0:8E:3C:6B:C3
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- Signature Algorithm: sha256WithRSAEncryption
- 00:20:23:41:35:04:90:c2:40:62:60:ef:e2:35:4c:d7:3f:ac:
- e2:34:90:b8:a1:6f:76:fa:16:16:a4:48:37:2c:e9:90:c2:f2:
- 3c:f8:0a:9f:d8:81:e5:bb:5b:da:25:2c:a4:a7:55:71:24:32:
- f6:c8:0b:f2:bc:6a:f8:93:ac:b2:07:c2:5f:9f:db:cc:c8:8a:
- aa:be:6a:6f:e1:49:10:cc:31:d7:80:bb:bb:c8:d8:a2:0e:64:
- 57:ea:a2:f5:c2:a9:31:15:d2:20:6a:ec:fc:22:01:28:cf:86:
- b8:80:1e:a9:cc:11:a5:3c:f2:16:b3:47:9d:fc:d2:80:21:c4:
- cb:d0:47:70:41:a1:ca:83:19:08:2c:6d:f2:5d:77:9c:8a:14:
- 13:d4:36:1c:92:f0:e5:06:37:dc:a6:e6:90:9b:38:8f:5c:6b:
- 1b:46:86:43:42:5f:3e:01:07:53:54:5d:65:7d:f7:8a:73:a1:
- 9a:54:5a:1f:29:43:14:27:c2:85:0f:b5:88:7b:1a:3b:94:b7:
- 1d:60:a7:b5:9c:e7:29:69:57:5a:9b:93:7a:43:30:1b:03:d7:
- 62:c8:40:a6:aa:fc:64:e4:4a:d7:91:53:01:a8:20:88:6e:9c:
- 5f:44:b9:cb:60:81:34:ec:6f:d3:7d:da:48:5f:eb:b4:90:bc:
- 2d:a9:1c:0b:ac:1c:d5:a2:68:20:80:04:d6:fc:b1:8f:2f:bb:
- 4a:31:0d:4a:86:1c:eb:e2:36:29:26:f5:da:d8:c4:f2:75:61:
- cf:7e:ae:76:63:4a:7a:40:65:93:87:f8:1e:80:8c:86:e5:86:
- d6:8f:0e:fc:53:2c:60:e8:16:61:1a:a2:3e:43:7b:cd:39:60:
- 54:6a:f5:f2:89:26:01:68:83:48:a2:33:e8:c9:04:91:b2:11:
- 34:11:3e:ea:d0:43:19:1f:03:93:90:0c:ff:51:3d:57:f4:41:
- 6e:e1:cb:a0:be:eb:c9:63:cd:6d:cc:e4:f8:36:aa:68:9d:ed:
- bd:5d:97:70:44:0d:b6:0e:35:dc:e1:0c:5d:bb:a0:51:94:cb:
- 7e:16:eb:11:2f:a3:92:45:c8:4c:71:d9:bc:c9:99:52:57:46:
- 2f:50:cf:bd:35:69:f4:3d:15:ce:06:a5:2c:0f:3e:f6:81:ba:
- 94:bb:c3:bb:bf:65:78:d2:86:79:ff:49:3b:1a:83:0c:f0:de:
- 78:ec:c8:f2:4d:4c:1a:de:82:29:f8:c1:5a:da:ed:ee:e6:27:
- 5e:e8:45:d0:9d:1c:51:a8:68:ab:44:e3:d0:8b:6a:e3:f8:3b:
- bb:dc:4d:d7:64:f2:51:be:e6:aa:ab:5a:e9:31:ee:06:bc:73:
- bf:13:62:0a:9f:c7:b9:97
-----BEGIN CERTIFICATE-----
MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
@@ -13977,62 +4006,6 @@ u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
T-TeleSec GlobalRoot Class 3
============================
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 1 (0x1)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=DE, O=T-Systems Enterprise Services GmbH, OU=T-Systems Trust Center, CN=T-TeleSec GlobalRoot Class 3
- Validity
- Not Before: Oct 1 10:29:56 2008 GMT
- Not After : Oct 1 23:59:59 2033 GMT
- Subject: C=DE, O=T-Systems Enterprise Services GmbH, OU=T-Systems Trust Center, CN=T-TeleSec GlobalRoot Class 3
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
- 00:bd:75:93:f0:62:22:6f:24:ae:e0:7a:76:ac:7d:
- bd:d9:24:d5:b8:b7:fc:cd:f0:42:e0:eb:78:88:56:
- 5e:9b:9a:54:1d:4d:0c:8a:f6:d3:cf:70:f4:52:b5:
- d8:93:04:e3:46:86:71:41:4a:2b:f0:2a:2c:55:03:
- d6:48:c3:e0:39:38:ed:f2:5c:3c:3f:44:bc:93:3d:
- 61:ab:4e:cd:0d:be:f0:20:27:58:0e:44:7f:04:1a:
- 87:a5:d7:96:14:36:90:d0:49:7b:a1:75:fb:1a:6b:
- 73:b1:f8:ce:a9:09:2c:f2:53:d5:c3:14:44:b8:86:
- a5:f6:8b:2b:39:da:a3:33:54:d9:fa:72:1a:f7:22:
- 15:1c:88:91:6b:7f:66:e5:c3:6a:80:b0:24:f3:df:
- 86:45:88:fd:19:7f:75:87:1f:1f:b1:1b:0a:73:24:
- 5b:b9:65:e0:2c:54:c8:60:d3:66:17:3f:e1:cc:54:
- 33:73:91:02:3a:a6:7f:7b:76:39:a2:1f:96:b6:38:
- ae:b5:c8:93:74:1d:9e:b9:b4:e5:60:9d:2f:56:d1:
- e0:eb:5e:5b:4c:12:70:0c:6c:44:20:ab:11:d8:f4:
- 19:f6:d2:9c:52:37:e7:fa:b6:c2:31:3b:4a:d4:14:
- 99:ad:c7:1a:f5:5d:5f:fa:07:b8:7c:0d:1f:d6:83:
- 1e:b3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints: critical
- CA:TRUE
- X509v3 Key Usage: critical
- Certificate Sign, CRL Sign
- X509v3 Subject Key Identifier:
- B5:03:F7:76:3B:61:82:6A:12:AA:18:53:EB:03:21:94:BF:FE:CE:CA
- Signature Algorithm: sha256WithRSAEncryption
- 56:3d:ef:94:d5:bd:da:73:b2:58:be:ae:90:ad:98:27:97:fe:
- 01:b1:b0:52:00:b8:4d:e4:1b:21:74:1b:7e:c0:ee:5e:69:2a:
- 25:af:5c:d6:1d:da:d2:79:c9:f3:97:29:e0:86:87:de:04:59:
- 0f:f1:59:d4:64:85:4b:99:af:25:04:1e:c9:46:a9:97:de:82:
- b2:1b:70:9f:9c:f6:af:71:31:dd:7b:05:a5:2c:d3:b9:ca:47:
- f6:ca:f2:f6:e7:ad:b9:48:3f:bc:16:b7:c1:6d:f4:ea:09:af:
- ec:f3:b5:e7:05:9e:a6:1e:8a:53:51:d6:93:81:cc:74:93:f6:
- b9:da:a6:25:05:74:79:5a:7e:40:3e:82:4b:26:11:30:6e:e1:
- 3f:41:c7:47:00:35:d5:f5:d3:f7:54:3e:81:3d:da:49:6a:9a:
- b3:ef:10:3d:e6:eb:6f:d1:c8:22:47:cb:cc:cf:01:31:92:d9:
- 18:e3:22:be:09:1e:1a:3e:5a:b2:e4:6b:0c:54:7a:7d:43:4e:
- b8:89:a5:7b:d7:a2:3d:96:86:cc:f2:26:34:2d:6a:92:9d:9a:
- 1a:d0:30:e2:5d:4e:04:b0:5f:8b:20:7e:77:c1:3d:95:82:d1:
- 46:9a:3b:3c:78:b8:6f:a1:d0:0d:64:a2:78:1e:29:4e:93:c3:
- a4:54:14:5b
-----BEGIN CERTIFICATE-----
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
@@ -14057,3 +4030,30 @@ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
TpPDpFQUWw==
-----END CERTIFICATE-----
+EE Certification Centre Root CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
+MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
+czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
+CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
+MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
+ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
+b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
+euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
+bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
+WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
+MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
+1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
+zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
+BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
+BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
+v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
+E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
+uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
+iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
+GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
+-----END CERTIFICATE-----
+
diff --git a/android/BOINC/assets/cc_config.xml b/android/BOINC/assets/cc_config.xml
index e2d70d3..5dd2da5 100644
--- a/android/BOINC/assets/cc_config.xml
+++ b/android/BOINC/assets/cc_config.xml
@@ -1,6 +1,5 @@
<cc_config>
<log_flags>
- <task_debug/>
</log_flags>
<options>
</options>
diff --git a/android/BOINC/project.properties b/android/BOINC/project.properties
index b7c2081..a61c9a3 100644
--- a/android/BOINC/project.properties
+++ b/android/BOINC/project.properties
@@ -11,4 +11,5 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
-target=android-10
+target=android-19
+android.library.reference.1=../../../../tools/android-sdk/extras/android/support/v7/appcompat
diff --git a/android/BOINC/res/drawable-hdpi/acctmgrw.png b/android/BOINC/res/drawable-hdpi/acctmgrw.png
new file mode 100644
index 0000000..ea1c845
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/acctmgrw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/bugb.png b/android/BOINC/res/drawable-hdpi/bugb.png
new file mode 100644
index 0000000..67a4a7a
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/bugb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/chartb.png b/android/BOINC/res/drawable-hdpi/chartb.png
new file mode 100644
index 0000000..a84a332
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/chartb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/cogsb.png b/android/BOINC/res/drawable-hdpi/cogsb.png
new file mode 100644
index 0000000..e683595
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/cogsb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/cogw.png b/android/BOINC/res/drawable-hdpi/cogw.png
new file mode 100644
index 0000000..b8d0266
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/cogw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/connectchargerb.png b/android/BOINC/res/drawable-hdpi/connectchargerb.png
new file mode 100644
index 0000000..708cc7f
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/connectchargerb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/copyw.png b/android/BOINC/res/drawable-hdpi/copyw.png
index bdf8954..d9a3083 100644
Binary files a/android/BOINC/res/drawable-hdpi/copyw.png and b/android/BOINC/res/drawable-hdpi/copyw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/desktopb.png b/android/BOINC/res/drawable-hdpi/desktopb.png
new file mode 100644
index 0000000..113659d
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/desktopb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/helpb.png b/android/BOINC/res/drawable-hdpi/helpb.png
new file mode 100644
index 0000000..91d7126
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/helpb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/ic_drawer.png b/android/BOINC/res/drawable-hdpi/ic_drawer.png
new file mode 100644
index 0000000..ff7b1de
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/ic_drawer.png differ
diff --git a/android/BOINC/res/drawable-hdpi/infob.png b/android/BOINC/res/drawable-hdpi/infob.png
new file mode 100644
index 0000000..071cb87
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/infob.png differ
diff --git a/android/BOINC/res/drawable-hdpi/magnifierb.png b/android/BOINC/res/drawable-hdpi/magnifierb.png
new file mode 100644
index 0000000..9d9e881
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/magnifierb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/mailsmallw.png b/android/BOINC/res/drawable-hdpi/mailsmallw.png
new file mode 100644
index 0000000..865a773
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/mailsmallw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/mailw.png b/android/BOINC/res/drawable-hdpi/mailw.png
index c828b3a..dc50fcb 100644
Binary files a/android/BOINC/res/drawable-hdpi/mailw.png and b/android/BOINC/res/drawable-hdpi/mailw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/nextb.png b/android/BOINC/res/drawable-hdpi/nextb.png
new file mode 100644
index 0000000..8442bc9
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/nextb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/offb.png b/android/BOINC/res/drawable-hdpi/offb.png
new file mode 100644
index 0000000..ee14ac0
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/offb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/offw.png b/android/BOINC/res/drawable-hdpi/offw.png
index 4cfad95..d48867d 100644
Binary files a/android/BOINC/res/drawable-hdpi/offw.png and b/android/BOINC/res/drawable-hdpi/offw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/pausew.png b/android/BOINC/res/drawable-hdpi/pausew.png
index effb3a6..c2b9866 100644
Binary files a/android/BOINC/res/drawable-hdpi/pausew.png and b/android/BOINC/res/drawable-hdpi/pausew.png differ
diff --git a/android/BOINC/res/drawable-hdpi/playw.png b/android/BOINC/res/drawable-hdpi/playw.png
index ae0321c..75fa515 100644
Binary files a/android/BOINC/res/drawable-hdpi/playw.png and b/android/BOINC/res/drawable-hdpi/playw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/plusw.png b/android/BOINC/res/drawable-hdpi/plusw.png
index 89964c3..6d290f8 100644
Binary files a/android/BOINC/res/drawable-hdpi/plusw.png and b/android/BOINC/res/drawable-hdpi/plusw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/previousb.png b/android/BOINC/res/drawable-hdpi/previousb.png
new file mode 100644
index 0000000..d8a1c7a
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/previousb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/refreshw.png b/android/BOINC/res/drawable-hdpi/refreshw.png
index c6f9834..c8a88b9 100644
Binary files a/android/BOINC/res/drawable-hdpi/refreshw.png and b/android/BOINC/res/drawable-hdpi/refreshw.png differ
diff --git a/android/BOINC/res/drawable-hdpi/screenb.png b/android/BOINC/res/drawable-hdpi/screenb.png
new file mode 100644
index 0000000..0c59fc5
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/screenb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/speechbubbleb.png b/android/BOINC/res/drawable-hdpi/speechbubbleb.png
new file mode 100644
index 0000000..91d7126
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/speechbubbleb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/sqplusb.png b/android/BOINC/res/drawable-hdpi/sqplusb.png
new file mode 100644
index 0000000..1228e5a
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/sqplusb.png differ
diff --git a/android/BOINC/res/drawable-hdpi/wirelessb.png b/android/BOINC/res/drawable-hdpi/wirelessb.png
new file mode 100644
index 0000000..675127e
Binary files /dev/null and b/android/BOINC/res/drawable-hdpi/wirelessb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/acctmgrw.png b/android/BOINC/res/drawable-ldpi/acctmgrw.png
new file mode 100644
index 0000000..becd38e
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/acctmgrw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/bugb.png b/android/BOINC/res/drawable-ldpi/bugb.png
new file mode 100644
index 0000000..45ce255
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/bugb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/chartb.png b/android/BOINC/res/drawable-ldpi/chartb.png
new file mode 100644
index 0000000..ca39518
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/chartb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/cogsb.png b/android/BOINC/res/drawable-ldpi/cogsb.png
new file mode 100644
index 0000000..ba5919a
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/cogsb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/cogw.png b/android/BOINC/res/drawable-ldpi/cogw.png
new file mode 100644
index 0000000..2e62f9a
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/cogw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/connectchargerb.png b/android/BOINC/res/drawable-ldpi/connectchargerb.png
new file mode 100644
index 0000000..be45aa9
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/connectchargerb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/copyw.png b/android/BOINC/res/drawable-ldpi/copyw.png
index c1ff849..d26e777 100644
Binary files a/android/BOINC/res/drawable-ldpi/copyw.png and b/android/BOINC/res/drawable-ldpi/copyw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/desktopb.png b/android/BOINC/res/drawable-ldpi/desktopb.png
new file mode 100644
index 0000000..14d46b0
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/desktopb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/helpb.png b/android/BOINC/res/drawable-ldpi/helpb.png
new file mode 100644
index 0000000..5546b35
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/helpb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/infob.png b/android/BOINC/res/drawable-ldpi/infob.png
new file mode 100644
index 0000000..845ac86
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/infob.png differ
diff --git a/android/BOINC/res/drawable-ldpi/magnifierb.png b/android/BOINC/res/drawable-ldpi/magnifierb.png
new file mode 100644
index 0000000..d6b5615
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/magnifierb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/mailsmallw.png b/android/BOINC/res/drawable-ldpi/mailsmallw.png
new file mode 100644
index 0000000..871401c
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/mailsmallw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/mailw.png b/android/BOINC/res/drawable-ldpi/mailw.png
index 231d987..47325ef 100644
Binary files a/android/BOINC/res/drawable-ldpi/mailw.png and b/android/BOINC/res/drawable-ldpi/mailw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/nextb.png b/android/BOINC/res/drawable-ldpi/nextb.png
new file mode 100644
index 0000000..2ca81ed
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/nextb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/offb.png b/android/BOINC/res/drawable-ldpi/offb.png
new file mode 100644
index 0000000..bd5997c
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/offb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/offw.png b/android/BOINC/res/drawable-ldpi/offw.png
index 38bfc9f..072d21c 100644
Binary files a/android/BOINC/res/drawable-ldpi/offw.png and b/android/BOINC/res/drawable-ldpi/offw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/pausew.png b/android/BOINC/res/drawable-ldpi/pausew.png
index faf9461..70ffc52 100644
Binary files a/android/BOINC/res/drawable-ldpi/pausew.png and b/android/BOINC/res/drawable-ldpi/pausew.png differ
diff --git a/android/BOINC/res/drawable-ldpi/playw.png b/android/BOINC/res/drawable-ldpi/playw.png
index 285cabd..1e184c7 100644
Binary files a/android/BOINC/res/drawable-ldpi/playw.png and b/android/BOINC/res/drawable-ldpi/playw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/plusw.png b/android/BOINC/res/drawable-ldpi/plusw.png
index dfbe2bc..02d2f46 100644
Binary files a/android/BOINC/res/drawable-ldpi/plusw.png and b/android/BOINC/res/drawable-ldpi/plusw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/previousb.png b/android/BOINC/res/drawable-ldpi/previousb.png
new file mode 100644
index 0000000..0265897
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/previousb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/refreshw.png b/android/BOINC/res/drawable-ldpi/refreshw.png
index e66a5e9..fe0331f 100644
Binary files a/android/BOINC/res/drawable-ldpi/refreshw.png and b/android/BOINC/res/drawable-ldpi/refreshw.png differ
diff --git a/android/BOINC/res/drawable-ldpi/screenb.png b/android/BOINC/res/drawable-ldpi/screenb.png
new file mode 100644
index 0000000..76b7bb1
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/screenb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/speechbubbleb.png b/android/BOINC/res/drawable-ldpi/speechbubbleb.png
new file mode 100644
index 0000000..5546b35
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/speechbubbleb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/sqplusb.png b/android/BOINC/res/drawable-ldpi/sqplusb.png
new file mode 100644
index 0000000..2032a77
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/sqplusb.png differ
diff --git a/android/BOINC/res/drawable-ldpi/wirelessb.png b/android/BOINC/res/drawable-ldpi/wirelessb.png
new file mode 100644
index 0000000..c5d7f4d
Binary files /dev/null and b/android/BOINC/res/drawable-ldpi/wirelessb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/acctmgrw.png b/android/BOINC/res/drawable-mdpi/acctmgrw.png
new file mode 100644
index 0000000..aa2060e
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/acctmgrw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/bugb.png b/android/BOINC/res/drawable-mdpi/bugb.png
new file mode 100644
index 0000000..d799e41
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/bugb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/chartb.png b/android/BOINC/res/drawable-mdpi/chartb.png
new file mode 100644
index 0000000..5d0cafa
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/chartb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/cogsb.png b/android/BOINC/res/drawable-mdpi/cogsb.png
new file mode 100644
index 0000000..7029496
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/cogsb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/cogw.png b/android/BOINC/res/drawable-mdpi/cogw.png
new file mode 100644
index 0000000..510c2d6
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/cogw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/connectchargerb.png b/android/BOINC/res/drawable-mdpi/connectchargerb.png
new file mode 100644
index 0000000..850681e
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/connectchargerb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/copyw.png b/android/BOINC/res/drawable-mdpi/copyw.png
index d9a3083..c1ff849 100644
Binary files a/android/BOINC/res/drawable-mdpi/copyw.png and b/android/BOINC/res/drawable-mdpi/copyw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/desktopb.png b/android/BOINC/res/drawable-mdpi/desktopb.png
new file mode 100644
index 0000000..e4d49f0
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/desktopb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/helpb.png b/android/BOINC/res/drawable-mdpi/helpb.png
new file mode 100644
index 0000000..7e4a485
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/helpb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/ic_drawer.png b/android/BOINC/res/drawable-mdpi/ic_drawer.png
new file mode 100644
index 0000000..fb681ba
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/ic_drawer.png differ
diff --git a/android/BOINC/res/drawable-mdpi/infob.png b/android/BOINC/res/drawable-mdpi/infob.png
new file mode 100644
index 0000000..33140ef
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/infob.png differ
diff --git a/android/BOINC/res/drawable-mdpi/magnifierb.png b/android/BOINC/res/drawable-mdpi/magnifierb.png
new file mode 100644
index 0000000..463253e
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/magnifierb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/mailsmallw.png b/android/BOINC/res/drawable-mdpi/mailsmallw.png
new file mode 100644
index 0000000..47325ef
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/mailsmallw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/mailw.png b/android/BOINC/res/drawable-mdpi/mailw.png
index 8f0c2ad..865a773 100644
Binary files a/android/BOINC/res/drawable-mdpi/mailw.png and b/android/BOINC/res/drawable-mdpi/mailw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/nextb.png b/android/BOINC/res/drawable-mdpi/nextb.png
new file mode 100644
index 0000000..85d54b9
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/nextb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/offb.png b/android/BOINC/res/drawable-mdpi/offb.png
new file mode 100644
index 0000000..75af5bd
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/offb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/offw.png b/android/BOINC/res/drawable-mdpi/offw.png
index d48867d..38bfc9f 100644
Binary files a/android/BOINC/res/drawable-mdpi/offw.png and b/android/BOINC/res/drawable-mdpi/offw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/pausew.png b/android/BOINC/res/drawable-mdpi/pausew.png
index c2b9866..faf9461 100644
Binary files a/android/BOINC/res/drawable-mdpi/pausew.png and b/android/BOINC/res/drawable-mdpi/pausew.png differ
diff --git a/android/BOINC/res/drawable-mdpi/playw.png b/android/BOINC/res/drawable-mdpi/playw.png
index 75fa515..285cabd 100644
Binary files a/android/BOINC/res/drawable-mdpi/playw.png and b/android/BOINC/res/drawable-mdpi/playw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/plusw.png b/android/BOINC/res/drawable-mdpi/plusw.png
index 6d290f8..dfbe2bc 100644
Binary files a/android/BOINC/res/drawable-mdpi/plusw.png and b/android/BOINC/res/drawable-mdpi/plusw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/previousb.png b/android/BOINC/res/drawable-mdpi/previousb.png
new file mode 100644
index 0000000..ead160a
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/previousb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/refreshw.png b/android/BOINC/res/drawable-mdpi/refreshw.png
index c8a88b9..e66a5e9 100644
Binary files a/android/BOINC/res/drawable-mdpi/refreshw.png and b/android/BOINC/res/drawable-mdpi/refreshw.png differ
diff --git a/android/BOINC/res/drawable-mdpi/screenb.png b/android/BOINC/res/drawable-mdpi/screenb.png
new file mode 100644
index 0000000..5b5b6c4
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/screenb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/speechbubbleb.png b/android/BOINC/res/drawable-mdpi/speechbubbleb.png
new file mode 100644
index 0000000..7e4a485
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/speechbubbleb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/sqplusb.png b/android/BOINC/res/drawable-mdpi/sqplusb.png
new file mode 100644
index 0000000..5f23c8d
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/sqplusb.png differ
diff --git a/android/BOINC/res/drawable-mdpi/wirelessb.png b/android/BOINC/res/drawable-mdpi/wirelessb.png
new file mode 100644
index 0000000..f62684a
Binary files /dev/null and b/android/BOINC/res/drawable-mdpi/wirelessb.png differ
diff --git a/android/BOINC/res/drawable-xhdpi/ic_drawer.png b/android/BOINC/res/drawable-xhdpi/ic_drawer.png
new file mode 100644
index 0000000..b9bc3d7
Binary files /dev/null and b/android/BOINC/res/drawable-xhdpi/ic_drawer.png differ
diff --git a/android/BOINC/res/drawable-hdpi/acctmgrb.png b/android/BOINC/res/drawable/acctmgrb48.png
similarity index 100%
rename from android/BOINC/res/drawable-hdpi/acctmgrb.png
rename to android/BOINC/res/drawable/acctmgrb48.png
diff --git a/android/BOINC/res/drawable/boinc_logo_large.png b/android/BOINC/res/drawable/boinc_logo_large.png
new file mode 100644
index 0000000..7b878f3
Binary files /dev/null and b/android/BOINC/res/drawable/boinc_logo_large.png differ
diff --git a/android/BOINC/res/drawable/navlist_counter_background.xml b/android/BOINC/res/drawable/navlist_counter_background.xml
new file mode 100644
index 0000000..0f04b3f
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_counter_background.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+
+ <solid android:color="@color/dark_blue" >
+ </solid>
+
+ <padding
+ android:right="3dp"
+ android:left="3dp" >
+ </padding>
+
+ <corners android:radius="2dp" >
+ </corners>
+
+</shape>
diff --git a/android/BOINC/res/drawable/navlist_item_background.xml b/android/BOINC/res/drawable/navlist_item_background.xml
new file mode 100644
index 0000000..558ffc7
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_item_background.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="@android:color/white"
+ android:endColor="@android:color/white"
+ android:angle="90" />
+</shape>
diff --git a/android/BOINC/res/drawable/navlist_item_focussed_background.xml b/android/BOINC/res/drawable/navlist_item_focussed_background.xml
new file mode 100644
index 0000000..a6200f3
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_item_focussed_background.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="@color/yellow"
+ android:endColor="@color/yellow"
+ android:angle="90" />
+</shape>
diff --git a/android/BOINC/res/drawable/navlist_item_pressed_and_focussed_background.xml b/android/BOINC/res/drawable/navlist_item_pressed_and_focussed_background.xml
new file mode 100644
index 0000000..ffcca7a
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_item_pressed_and_focussed_background.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="@color/light_blue"
+ android:endColor="@color/yellow"
+ android:angle="0" />
+</shape>
diff --git a/android/BOINC/res/drawable/navlist_item_pressed_background.xml b/android/BOINC/res/drawable/navlist_item_pressed_background.xml
new file mode 100644
index 0000000..a1b7780
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_item_pressed_background.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="@color/light_blue"
+ android:endColor="@color/light_blue"
+ android:angle="90" />
+</shape>
diff --git a/android/BOINC/res/drawable/navlist_selector.xml b/android/BOINC/res/drawable/navlist_selector.xml
new file mode 100644
index 0000000..47e4f0b
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_selector.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!--<item android:drawable="@drawable/navlist_item_pressed_background" android:state_activated="true"/> done in code!-->
+ <item android:drawable="@drawable/navlist_item_focussed_background" android:state_selected="true"/>
+ <item android:drawable="@drawable/navlist_item_background"/>
+
+</selector>
diff --git a/android/BOINC/res/drawable/navlist_selector_pressed.xml b/android/BOINC/res/drawable/navlist_selector_pressed.xml
new file mode 100644
index 0000000..5cccafa
--- /dev/null
+++ b/android/BOINC/res/drawable/navlist_selector_pressed.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!--selector vor selected nav bar item, switch to navlist_selector for unselected item done in code!-->
+ <item android:drawable="@drawable/navlist_item_pressed_and_focussed_background" android:state_selected="true"/>
+ <item android:drawable="@drawable/navlist_item_pressed_background"/>
+
+</selector>
diff --git a/android/BOINC/res/drawable/notconnectedb48.png b/android/BOINC/res/drawable/notconnectedb48.png
index ba207bf..708cc7f 100644
Binary files a/android/BOINC/res/drawable/notconnectedb48.png and b/android/BOINC/res/drawable/notconnectedb48.png differ
diff --git a/android/BOINC/res/drawable/projectsb48.png b/android/BOINC/res/drawable/projectsb48.png
new file mode 100644
index 0000000..63cabe4
Binary files /dev/null and b/android/BOINC/res/drawable/projectsb48.png differ
diff --git a/android/BOINC/res/drawable/screen48b.png b/android/BOINC/res/drawable/screen48b.png
new file mode 100644
index 0000000..0c59fc5
Binary files /dev/null and b/android/BOINC/res/drawable/screen48b.png differ
diff --git a/android/BOINC/res/drawable/shape_button_grey.xml b/android/BOINC/res/drawable/shape_button_grey.xml
new file mode 100644
index 0000000..69c7247
--- /dev/null
+++ b/android/BOINC/res/drawable/shape_button_grey.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+ <solid android:color="@color/light_grey" />
+</shape>
diff --git a/android/BOINC/res/drawable/shape_dark_blue_background_wo_stroke.xml b/android/BOINC/res/drawable/shape_dark_blue_background_wo_stroke.xml
new file mode 100644
index 0000000..d335430
--- /dev/null
+++ b/android/BOINC/res/drawable/shape_dark_blue_background_wo_stroke.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+ <solid android:color="@color/dark_blue" />
+</shape>
diff --git a/android/BOINC/res/drawable/shape_dark_blue_border.xml b/android/BOINC/res/drawable/shape_dark_blue_border.xml
new file mode 100644
index 0000000..b7da8fa
--- /dev/null
+++ b/android/BOINC/res/drawable/shape_dark_blue_border.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+ <stroke android:width="1dip" android:color="@color/dark_blue"/>
+</shape>
diff --git a/android/BOINC/res/drawable/shape_dark_blue_gradient_2.xml b/android/BOINC/res/drawable/shape_dark_blue_gradient_2.xml
new file mode 100644
index 0000000..0ad99a7
--- /dev/null
+++ b/android/BOINC/res/drawable/shape_dark_blue_gradient_2.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+ <gradient android:startColor="@color/dark_blue"
+ android:endColor="@color/dark_blue_gradient" android:angle="-90" />
+</shape>
diff --git a/android/BOINC/res/drawable/shape_dark_blue_gradient_background.xml b/android/BOINC/res/drawable/shape_dark_blue_gradient_background.xml
index cfe6a0b..63cb0fe 100644
--- a/android/BOINC/res/drawable/shape_dark_blue_gradient_background.xml
+++ b/android/BOINC/res/drawable/shape_dark_blue_gradient_background.xml
@@ -18,6 +18,6 @@
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
- <gradient android:startColor="@color/dark_blue_gradient" android:centerColor="@color/dark_blue"
- android:endColor="@color/dark_blue_gradient" android:angle="-90" />
+ <gradient android:startColor="@color/dark_blue_gradient"
+ android:endColor="@color/dark_blue" android:angle="-90" />
</shape>
diff --git a/android/BOINC/res/drawable/shape_light_blue_background_wo_stroke.xml b/android/BOINC/res/drawable/shape_light_blue_background_wo_stroke.xml
index f5107ec..f6c4257 100644
--- a/android/BOINC/res/drawable/shape_light_blue_background_wo_stroke.xml
+++ b/android/BOINC/res/drawable/shape_light_blue_background_wo_stroke.xml
@@ -18,5 +18,5 @@
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
- <solid android:color="@color/lightest_blue" />
+ <solid android:color="@color/boinc_icon_light_blue" />
</shape>
diff --git a/android/BOINC/res/drawable/shape_light_blue_border.xml b/android/BOINC/res/drawable/shape_light_blue_border.xml
new file mode 100644
index 0000000..b474176
--- /dev/null
+++ b/android/BOINC/res/drawable/shape_light_blue_border.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+ <stroke android:width="1dip" android:color="@color/light_blue"/>
+</shape>
diff --git a/android/BOINC/res/drawable/shape_light_red_background_wo_stroke.xml b/android/BOINC/res/drawable/shape_light_red_background_wo_stroke.xml
new file mode 100644
index 0000000..d1f3117
--- /dev/null
+++ b/android/BOINC/res/drawable/shape_light_red_background_wo_stroke.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
+ <solid android:color="@color/light_red" />
+</shape>
diff --git a/android/BOINC/res/layout/activity_splash.xml b/android/BOINC/res/layout/activity_splash.xml
new file mode 100644
index 0000000..771e40e
--- /dev/null
+++ b/android/BOINC/res/layout/activity_splash.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@android:color/white"
+ android:gravity="center" >
+
+ <ImageView
+ android:id="@+id/logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="40dp"
+ android:maxWidth="400dp"
+ android:adjustViewBounds="true"
+ android:src="@drawable/boinc_logo_large"
+ android:contentDescription="@string/status_launching"/>
+</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_acctmgr_dialog.xml b/android/BOINC/res/layout/attach_project_acctmgr_dialog.xml
new file mode 100644
index 0000000..3f55951
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_acctmgr_dialog.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:minWidth="200dp"
+ android:background="@color/white">
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold"
+ android:singleLine="true"
+ android:padding="20dp"
+ android:background="@drawable/shape_light_blue_background"
+ android:text="@string/attachproject_acctmgr_header"/>
+
+ <Spinner
+ android:id="@+id/url_spinner"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp" />
+
+ <EditText
+ android:id="@+id/name_input"
+ android:inputType="textNoSuggestions"
+ android:hint="@string/attachproject_acctmgr_header_name"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"
+ android:minWidth="200dp"/>
+
+ <EditText
+ android:id="@+id/pwd_input"
+ android:inputType="textPassword"
+ android:hint="@string/attachproject_acctmgr_header_pwd"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"
+ android:minWidth="200dp"/>
+
+ <TextView
+ android:id="@+id/warning"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:visibility="gone"
+ android:background="@drawable/shape_light_red_background"
+ android:padding="10dp"
+ android:layout_marginTop="10dp"/>
+
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/generic_button_continue"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:minWidth="150dp"
+ android:padding="5dp"
+ android:layout_gravity="right"
+ android:layout_margin="10dp"/>
+
+
+ <LinearLayout
+ android:id="@+id/ongoing_wrapper"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:background="@drawable/shape_light_blue_background"
+ android:padding="20dp"
+ android:layout_marginTop="10dp"
+ android:visibility="gone">
+
+ <ProgressBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/progressBarStyleSmall"
+ android:background="@android:color/transparent"
+ android:layout_marginRight="10dp"
+ android:layout_gravity="center_vertical"/>
+
+ <TextView
+ android:id="@+id/ongoing_desc"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:gravity="center"
+ android:text="@string/attachproject_acctmgr_header"/>
+
+ </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/android/BOINC/res/layout/attach_project_acctmgr_layout.xml b/android/BOINC/res/layout/attach_project_acctmgr_layout.xml
deleted file mode 100644
index 9835786..0000000
--- a/android/BOINC/res/layout/attach_project_acctmgr_layout.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
-
- <LinearLayout
- android:id="@+id/acctmgr_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingBottom="10dp">
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/shape_dark_blue_gradient_background"
- android:padding="15dp"
- android:gravity="center_horizontal"
- android:layout_marginBottom="10dp">
- <TextView android:textAppearance="?android:attr/textAppearanceLarge"
- android:background="@android:color/transparent"
- android:textColor="@color/white_smoke"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:text="@string/attachproject_acctmgr_header"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_acctmgr_header_url"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/url_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textUri" >
- <requestFocus />
- </EditText>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_acctmgr_header_name"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/name_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textNoSuggestions"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_acctmgr_header_pwd"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/pwd_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textPassword"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_acctmgr_header_pwd_confirm"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/pwd_confirm_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textPassword"/>
- </LinearLayout>
-
- <TextView
- android:id="@+id/warning"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:background="@drawable/shape_light_red_background"
- android:paddingTop="10dp"
- android:paddingBottom="10dp"
- android:layout_marginTop="10dp"
- android:visibility="gone" />
-
- <Button
- android:layout_width="100dp"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:paddingLeft="20dp"
- android:paddingRight="20dp"
- android:layout_marginRight="10dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:padding="5dp"
- android:onClick="addAcctMgrClick"
- android:text="@string/attachproject_acctmgr_button" />
-
- </LinearLayout>
-</ScrollView>
\ No newline at end of file
diff --git a/android/BOINC/res/layout/attach_project_batch_conflicts_layout.xml b/android/BOINC/res/layout/attach_project_batch_conflicts_layout.xml
new file mode 100644
index 0000000..fe8c08a
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_batch_conflicts_layout.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <ImageView
+ android:id="@+id/logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="40dp"
+ android:layout_marginRight="40dp"
+ android:layout_marginBottom="20dp"
+ android:maxWidth="400dp"
+ android:adjustViewBounds="true"
+ android:src="@drawable/boinc_logo_large"
+ android:contentDescription="@string/app_name"
+ android:layout_centerHorizontal="true"/>
+
+ <TextView
+ android:id="@+id/desc"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_conflicts_desc"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ android:textColor="@android:color/white"
+ android:layout_below="@+id/logo"
+ android:padding="5dp"
+ android:background="@drawable/shape_dark_blue_background_wo_stroke"/>
+
+ <ListView
+ android:id="@+id/listview"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/desc"
+ android:layout_above="@+id/finish_button"/>
+
+ <Button
+ android:id="@+id/finish_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentBottom="true"
+ android:text="@string/generic_button_finish"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:minWidth="150dp"
+ android:padding="5dp"
+ android:layout_margin="10dp"
+ android:onClick="finishClicked"/>
+
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_batch_conflicts_listitem.xml b/android/BOINC/res/layout/attach_project_batch_conflicts_listitem.xml
new file mode 100644
index 0000000..82acce9
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_batch_conflicts_listitem.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/resolve_item_wrapper"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:padding="10dp" >
+
+ <LinearLayout
+ android:id="@+id/visual_status_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/status_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:visibility="gone"/>
+
+ <ProgressBar
+ android:id="@+id/status_pb"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/progressBarStyleSmall"
+ android:background="@android:color/transparent"
+ android:layout_marginRight="10dp"
+ android:visibility="gone"/>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/text_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_centerVertical="true"
+ android:layout_toRightOf="@+id/visual_status_wrapper"
+ android:layout_toLeftOf="@+id/resolve_button_image">
+ <TextView android:textAppearance="?android:attr/textAppearanceMedium"
+ android:id="@+id/name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textStyle="bold" />
+ <TextView android:textAppearance="?android:attr/textAppearanceSmall"
+ android:id="@+id/status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+
+ <ImageView
+ android:id="@+id/resolve_button_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/nextb"
+ android:layout_centerVertical="true"
+ android:layout_alignParentRight="true"/>
+
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_batch_processing_layout.xml b/android/BOINC/res/layout/attach_project_batch_processing_layout.xml
new file mode 100644
index 0000000..61e1584
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_batch_processing_layout.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <ImageView
+ android:id="@+id/logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="40dp"
+ android:layout_marginRight="40dp"
+ android:layout_marginBottom="20dp"
+ android:layout_marginTop="20dp"
+ android:maxWidth="400dp"
+ android:adjustViewBounds="true"
+ android:src="@drawable/boinc_logo_large"
+ android:contentDescription="@string/app_name"
+ android:layout_centerHorizontal="true"/>
+
+ <RelativeLayout
+ android:id="@+id/hint_header_wrapper"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/logo"
+ android:background="@drawable/shape_light_blue_background"
+ android:orientation="horizontal"
+ android:padding="5dp">
+
+ <ImageView
+ android:id="@+id/hint_header_image_left"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:src="@drawable/previousb"
+ android:layout_alignParentLeft="true"
+ android:paddingLeft="10dp"
+ android:visibility="gone"
+ android:onClick="previousHintClicked"/>
+ <TextView
+ android:id="@+id/hint_header_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ android:text="@string/attachproject_hints_header"
+ android:layout_centerInParent="true"/>
+ <ImageView
+ android:id="@+id/hint_header_image_right"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:src="@drawable/nextb"
+ android:layout_alignParentRight="true"
+ android:paddingRight="10dp"
+ android:onClick="nextHintClicked"/>
+ </RelativeLayout>
+
+ <android.support.v4.view.ViewPager
+ android:id="@+id/hint_container"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:layout_below="@+id/hint_header_wrapper"
+ android:layout_above="@+id/attach_status_wrapper"
+ android:padding="20dp" />
+
+ <LinearLayout
+ android:id="@+id/attach_status_wrapper"
+ android:layout_width="fill_parent"
+ android:layout_height="60dp"
+ android:layout_alignParentBottom="true"
+ android:orientation="horizontal"
+ android:gravity="center">
+
+ <LinearLayout
+ android:id="@+id/attach_status_ongoing_wrapper"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingLeft="20dp"
+ android:background="@drawable/shape_light_blue_background">
+
+ <ProgressBar
+ android:id="@+id/attach_status_pb"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/progressBarStyleSmall"
+ android:background="@android:color/transparent"
+ android:layout_marginRight="10dp"/>
+
+ <TextView
+ android:id="@+id/attach_status_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_login_loading"/>
+ </LinearLayout>
+
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/generic_button_continue"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:minWidth="150dp"
+ android:padding="5dp"
+ android:layout_margin="10dp"
+ android:onClick="continueClicked"
+ android:visibility="gone"/>
+
+ </LinearLayout>
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_credential_input_dialog.xml b/android/BOINC/res/layout/attach_project_credential_input_dialog.xml
new file mode 100644
index 0000000..50bb99e
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_credential_input_dialog.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:minWidth="250dp"
+ android:orientation="vertical"
+ android:background="@color/white">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:padding="10dp"
+ android:background="@drawable/shape_light_blue_background"
+ android:orientation="vertical"
+ android:layout_marginBottom="10dp">
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:background="@android:color/transparent"
+ android:textStyle="bold"/>
+
+ <TextView
+ android:id="@+id/message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:background="@android:color/transparent"/>
+ </LinearLayout>
+
+ <EditText
+ android:id="@+id/email_input"
+ android:inputType="textEmailAddress"
+ android:hint="@string/attachproject_login_header_id_email"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="5dp"/>
+
+ <EditText
+ android:id="@+id/name_input"
+ android:inputType="textNoSuggestions"
+ android:hint="@string/attachproject_login_header_id_name"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="5dp"/>
+
+ <EditText
+ android:id="@+id/pwd_input"
+ android:inputType="textPassword"
+ android:hint="@string/attachproject_login_header_pwd"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="5dp"/>
+
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_marginLeft="10dp"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="20dp">
+
+ <CheckBox
+ android:id="@+id/show_pwd_cb"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_credential_input_show_pwd"
+ android:textColor="@color/black"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"/>
+
+ <TextView
+ android:id="@+id/forgotpwd_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="5dp"
+ android:text="@string/attachproject_login_button_forgotpw"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ android:layout_gravity="center"
+ android:background="@drawable/shape_button_grey"
+ android:clickable="true"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"/>
+
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="10dp">
+
+ <Button
+ android:id="@+id/register_button"
+ android:layout_width="110dp"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_login_button_registration"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:padding="5dp"
+ android:layout_alignParentLeft="true"/>
+
+ <Button
+ android:id="@+id/login_button"
+ android:layout_width="110dp"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_login_button_login"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:padding="5dp"
+ android:layout_alignParentRight="true"/>
+
+ </RelativeLayout>
+
+</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_credential_input_layout.xml b/android/BOINC/res/layout/attach_project_credential_input_layout.xml
new file mode 100644
index 0000000..2e89bdd
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_credential_input_layout.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="10dp">
+
+ <ImageView
+ android:id="@+id/logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="40dp"
+ android:layout_marginRight="40dp"
+ android:layout_marginBottom="20dp"
+ android:layout_marginTop="20dp"
+ android:maxWidth="400dp"
+ android:adjustViewBounds="true"
+ android:src="@drawable/boinc_logo_large"
+ android:contentDescription="@string/app_name"
+ android:layout_centerHorizontal="true"/>
+
+ <TextView
+ android:id="@+id/desc"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_credential_input_desc"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ android:textColor="@android:color/white"
+ android:layout_below="@+id/logo"
+ android:padding="5dp"
+ android:background="@drawable/shape_dark_blue_background_wo_stroke"
+ android:layout_marginBottom="10dp"
+ android:layout_centerHorizontal="true"/>
+
+ <ScrollView
+ android:id="@+id/input_sv"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/desc"
+ android:layout_marginBottom="50dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
+
+ <EditText
+ android:id="@+id/email_input"
+ android:inputType="textEmailAddress"
+ android:hint="@string/attachproject_login_header_id_email"
+ android:layout_width="300dp"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"/>
+
+ <EditText
+ android:id="@+id/name_input"
+ android:inputType="textNoSuggestions"
+ android:hint="@string/attachproject_login_header_id_name"
+ android:layout_width="300dp"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"/>
+
+ <EditText
+ android:id="@+id/pwd_input"
+ android:inputType="textPassword"
+ android:hint="@string/attachproject_login_header_pwd"
+ android:layout_width="300dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10dp"/>
+
+ <CheckBox
+ android:id="@+id/show_pwd_cb"
+ android:layout_width="300dp"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_credential_input_show_pwd"
+ android:layout_marginBottom="10dp"/>
+
+ <TextView
+ android:id="@+id/individual_login_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_individual_credential_input"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:background="@drawable/shape_button_grey"
+ android:textStyle="bold"
+ android:clickable="true"
+ android:onClick="individualClicked"
+ android:layout_marginBottom="10dp"
+ android:padding="10dp"/>
+ </LinearLayout>
+ </ScrollView>
+
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentBottom="true"
+ android:text="@string/generic_button_continue"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:minWidth="150dp"
+ android:padding="5dp"
+ android:layout_marginRight="10dp"
+ android:onClick="continueClicked"/>
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_failed_layout.xml b/android/BOINC/res/layout/attach_project_failed_layout.xml
deleted file mode 100644
index 5f1e282..0000000
--- a/android/BOINC/res/layout/attach_project_failed_layout.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:orientation="horizontal"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:layout_marginTop="20dp"
- android:gravity="center_vertical"
- android:background="@drawable/shape_light_red_background" >
-
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@android:color/transparent"
- android:src="@drawable/failedb"
- android:layout_marginLeft="50dp"
- android:layout_marginRight="10dp"
- android:contentDescription="@string/attachproject_working_failed_desc"/>
-
- <TextView
- android:id="@+id/header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/generic_loading"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@android:color/transparent" />
-
-
-</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_hint_contribution_layout.xml b/android/BOINC/res/layout/attach_project_hint_contribution_layout.xml
new file mode 100644
index 0000000..5beb3e8
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_hint_contribution_layout.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical"
+ android:layout_gravity="center"
+ android:gravity="center">
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:text="@string/attachproject_hint_contribtion_header"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/hint_contribution_image_1"
+ android:text="@string/attachproject_hint_contribtion_wifi"/>
+
+ <ImageView
+ android:id="@+id/hint_contribution_image_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:src="@drawable/wirelessb"
+ android:contentDescription="@string/attachproject_hint_contribtion_wifi"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/hint_contribution_image_2"
+ android:text="@string/attachproject_hint_contribtion_charger"/>
+
+ <ImageView
+ android:id="@+id/hint_contribution_image_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:src="@drawable/connectchargerb"
+ android:contentDescription="@string/attachproject_hint_contribtion_charger"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/hint_contribution_image_3"
+ android:text="@string/attachproject_hint_contribtion_screen"/>
+
+ <ImageView
+ android:id="@+id/hint_contribution_image_3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:src="@drawable/screenb"
+ android:contentDescription="@string/attachproject_hint_contribtion_screen"/>
+ </RelativeLayout>
+</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_hint_platforms_layout.xml b/android/BOINC/res/layout/attach_project_hint_platforms_layout.xml
new file mode 100644
index 0000000..fb27c2c
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_hint_platforms_layout.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical"
+ android:layout_gravity="center"
+ android:gravity="center">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="20dp"
+ android:src="@drawable/desktopb"
+ android:contentDescription="@string/attachproject_hint_platforms_header"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:gravity="center"
+ android:text="@string/attachproject_hint_platforms_header"/>
+</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_hint_projectwebsite_layout.xml b/android/BOINC/res/layout/attach_project_hint_projectwebsite_layout.xml
new file mode 100644
index 0000000..e5cfb93
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_hint_projectwebsite_layout.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical"
+ android:layout_gravity="center">
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:text="@string/attachproject_hint_projectwebsite_header"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/hint_contribution_image_1"
+ android:text="@string/attachproject_hint_projectwebsite_science"/>
+
+ <ImageView
+ android:id="@+id/hint_contribution_image_1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:src="@drawable/magnifierb"
+ android:contentDescription="@string/attachproject_hint_projectwebsite_science"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/hint_contribution_image_2"
+ android:text="@string/attachproject_hint_projectwebsite_stats"/>
+
+ <ImageView
+ android:id="@+id/hint_contribution_image_2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:src="@drawable/chartb"
+ android:contentDescription="@string/attachproject_hint_projectwebsite_stats"/>
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:orientation="horizontal"
+ android:layout_weight="0.25">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/hint_contribution_image_3"
+ android:text="@string/attachproject_hint_projectwebsite_community"/>
+
+ <ImageView
+ android:id="@+id/hint_contribution_image_3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:src="@drawable/speechbubbleb"
+ android:contentDescription="@string/attachproject_hint_projectwebsite_community"/>
+ </RelativeLayout>
+</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_info_layout.xml b/android/BOINC/res/layout/attach_project_info_layout.xml
new file mode 100644
index 0000000..1e56541
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_info_layout.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+<LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@android:color/white">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ android:background="@drawable/shape_light_blue_background"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/project_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:background="@android:color/transparent"
+ android:textStyle="bold"/>
+
+ <TextView
+ android:id="@+id/project_area"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:background="@android:color/transparent"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/project_logo_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_margin="10dp"
+ android:layout_gravity="center_horizontal">
+ <ProgressBar
+ android:id="@+id/project_logo_loading_pb"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="20dp"
+ style="?android:attr/progressBarStyleSmall"
+ android:background="@android:color/transparent" />
+
+ <ImageView
+ android:id="@+id/project_logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxWidth="400dp"
+ android:adjustViewBounds="true"
+ android:src="@drawable/boinc_logo_large"
+ android:contentDescription="@string/app_name"
+ android:visibility="gone"/>
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/project_summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_margin="10dp"/>
+
+ <TextView
+ android:id="@+id/project_desc"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_margin="10dp"/>
+
+
+ <TextView
+ android:id="@+id/project_home"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_margin="10dp"/>
+
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:text="@string/generic_button_continue"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:layout_margin="10dp"
+ android:minWidth="150dp"
+ android:padding="5dp"/>
+</LinearLayout>
+</ScrollView>
diff --git a/android/BOINC/res/layout/attach_project_list_layout.xml b/android/BOINC/res/layout/attach_project_list_layout.xml
index ff38262..9f0f076 100644
--- a/android/BOINC/res/layout/attach_project_list_layout.xml
+++ b/android/BOINC/res/layout/attach_project_list_layout.xml
@@ -21,72 +21,54 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
- <LinearLayout
- android:id="@+id/headerWrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/shape_dark_blue_gradient_background"
- android:padding="15dp"
- android:gravity="center_horizontal">
- <TextView android:textAppearance="?android:attr/textAppearanceLarge"
- android:id="@+id/header"
- android:text="@string/attachproject_list_header"
- android:background="@android:color/transparent"
- android:textColor="@color/white_smoke"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"/>
- </LinearLayout>
+
+ <ImageView
+ android:id="@+id/logo"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="40dp"
+ android:layout_marginRight="40dp"
+ android:layout_marginBottom="20dp"
+ android:layout_marginTop="20dp"
+ android:maxWidth="400dp"
+ android:adjustViewBounds="true"
+ android:src="@drawable/boinc_logo_large"
+ android:contentDescription="@string/app_name"
+ android:layout_centerHorizontal="true"/>
+
+ <TextView
+ android:id="@+id/desc"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/attachproject_list_desc"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ android:textColor="@android:color/white"
+ android:layout_below="@+id/logo"
+ android:padding="5dp"
+ android:background="@drawable/shape_dark_blue_background_wo_stroke"
+ android:layout_centerHorizontal="true"/>
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_below="@+id/headerWrapper"
- android:layout_marginBottom="70dp" >
- </ListView>
-
- <LinearLayout
- android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:gravity="center_horizontal">
-
- <Button
- android:id="@+id/accountManagerButton"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxWidth="200dp"
- android:layout_weight="0.5"
- android:padding="5dp"
- android:layout_marginBottom="5dp"
- android:layout_marginRight="10dp"
- android:layout_marginLeft="10dp"
- android:layout_gravity="center_horizontal"
- android:clickable="true"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:onClick="onAcctMgrClick"
- android:text="@string/attachproject_list_acctmgr_button" />
+ android:layout_below="@+id/desc"
+ android:layout_above="@+id/continue_button"/>
- <Button
- android:id="@+id/manualUrlButton"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:maxWidth="200dp"
- android:layout_weight="0.5"
- android:padding="5dp"
- android:layout_marginBottom="5dp"
- android:layout_marginRight="10dp"
- android:layout_marginLeft="10dp"
- android:layout_gravity="center_horizontal"
- android:clickable="true"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:onClick="manualUrlItem"
- android:text="@string/attachproject_list_manual_button" />
- </LinearLayout>
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentBottom="true"
+ android:text="@string/generic_button_continue"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:minWidth="150dp"
+ android:padding="5dp"
+ android:layout_margin="10dp"
+ android:onClick="continueClicked"/>
</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_list_layout_listitem.xml b/android/BOINC/res/layout/attach_project_list_layout_listitem.xml
index b17f285..081df81 100644
--- a/android/BOINC/res/layout/attach_project_list_layout_listitem.xml
+++ b/android/BOINC/res/layout/attach_project_list_layout_listitem.xml
@@ -17,20 +17,39 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:clickable="true"
- android:onClick="onProjectClick"
android:padding="10dp" >
- <TextView android:textAppearance="?android:attr/textAppearanceMedium"
- android:id="@+id/name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textStyle="bold" />
- <TextView android:textAppearance="?android:attr/textAppearanceSmall"
- android:id="@+id/description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-</LinearLayout>
+ <LinearLayout
+ android:id="@+id/text_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:clickable="true"
+ android:layout_marginRight="40dp">
+ <TextView android:textAppearance="?android:attr/textAppearanceMedium"
+ android:id="@+id/name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textStyle="bold" />
+ <TextView android:textAppearance="?android:attr/textAppearanceSmall"
+ android:id="@+id/description"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ <TextView android:textAppearance="?android:attr/textAppearanceSmall"
+ android:id="@+id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+ <CheckBox
+ android:id="@+id/cb"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"/>
+
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_list_layout_manual_dialog.xml b/android/BOINC/res/layout/attach_project_list_layout_manual_dialog.xml
deleted file mode 100644
index 9cd5bf3..0000000
--- a/android/BOINC/res/layout/attach_project_list_layout_manual_dialog.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:background="@color/white_smoke" >
-
- <TextView
- android:id="@+id/title"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:padding="10dp"
- android:layout_marginBottom="10dp"
- android:singleLine="true"
- android:textColor="@color/black"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@drawable/shape_light_blue_background" />
-
- <EditText
- android:id="@+id/Input"
- android:layout_width="200dp"
- android:layout_height="wrap_content"
- android:inputType="textUri"
- android:layout_margin="5dp">
- <requestFocus />
- </EditText>
-
- <Button
- android:id="@+id/buttonUrlSubmit"
- android:layout_width="150dp"
- android:layout_height="wrap_content"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:padding="5dp"
- android:layout_gravity="center_horizontal"
- android:clickable="true"
- android:layout_margin="5dp"
- android:text="@string/attachproject_list_manual_dialog_button"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/android/BOINC/res/layout/attach_project_login_layout.xml b/android/BOINC/res/layout/attach_project_login_layout.xml
deleted file mode 100644
index 22e3c3f..0000000
--- a/android/BOINC/res/layout/attach_project_login_layout.xml
+++ /dev/null
@@ -1,386 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
-
- <LinearLayout
- android:id="@+id/wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingBottom="10dp">
-
- <LinearLayout
- android:id="@+id/projectNameWrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/shape_dark_blue_gradient_background"
- android:padding="15dp"
- android:gravity="center_horizontal"
- android:layout_marginBottom="10dp">
- <TextView android:textAppearance="?android:attr/textAppearanceLarge"
- android:id="@+id/project_name"
- android:background="@android:color/transparent"
- android:textColor="@color/white_smoke"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"/>
- </LinearLayout>
-
- <!-- data in this section only available after list selection -->
- <LinearLayout
- android:id="@+id/project_info"
- android:visibility="gone"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <ImageView
- android:id="@+id/logo"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:adjustViewBounds="true"
- android:contentDescription="@string/attachproject_login_image_description" />
-
- <LinearLayout
- android:id="@+id/general_area_wrapper"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_general_area"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_general_area" />
-
- <TextView
- android:id="@+id/general_area"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall" />
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/specific_area_wrapper"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_specific_area"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_specific_area" />
-
- <TextView
- android:id="@+id/specific_area"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/description_wrapper"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_description"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_description" />
-
- <TextView
- android:id="@+id/description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/home_wrapper"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_home"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_home" />
-
- <TextView
- android:id="@+id/home"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall" />
- </LinearLayout>
-
- </LinearLayout>
- <!-- END: data in this section only available after list selection -->
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_url"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_url"/>
- <TextView
- android:id="@+id/project_url"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:clickable="true"
- android:onClick="projectUrlClicked"
- android:textColor="@color/dark_blue"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_platform"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_platform"/>
- <TextView
- android:id="@+id/project_platform"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
- </LinearLayout>
-
-
- <!-- terms of use -->
- <LinearLayout
- android:id="@+id/terms_of_use_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingTop="20dp"
- android:visibility="gone" >
-
- <include
- android:id="@+id/category_terms_of_use"
- layout="@android:layout/preference_category"/>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="vertical"
- android:padding="10dp">
- <TextView
- android:id="@+id/project_terms_of_use"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
- <TextView
- android:id="@+id/accept_terms_of_use"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:layout_marginTop="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_accept_terms_of_use"
- android:textColor="@color/warning"/>
- </LinearLayout>
- </LinearLayout>
-
-
- <!-- account creation -->
- <LinearLayout
- android:id="@+id/creation_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingTop="20dp" >
-
- <TextView
- android:id="@+id/category_creation"
- style="@style/SubHeader"/>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/creation_action"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_gravity="center_vertical"/>
-
- <Button
- android:id="@+id/registration_button"
- android:layout_width="100dp"
- android:layout_height="wrap_content"
- android:onClick="register"
- android:text="@string/attachproject_login_button_registration"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:padding="5dp"
- android:layout_gravity="center_vertical"/>
- </LinearLayout>
- </LinearLayout>
-
- <!-- login -->
- <LinearLayout
- android:id="@+id/login_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingTop="20dp" >
-
- <TextView
- android:id="@+id/category_login"
- style="@style/SubHeader"/>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_id"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_id_email"/>
- <EditText
- android:id="@+id/id_input"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:inputType="textEmailAddress"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_pwd"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_login_header_pwd"/>
- <EditText
- android:id="@+id/pwd_input"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:inputType="textPassword"/>
- </LinearLayout>
-
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <Button
- android:id="@+id/forgotpwd_button"
- android:layout_width="180dp"
- android:layout_height="wrap_content"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:layout_gravity="left"
- android:layout_alignParentLeft="true"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/shape_button_red"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:onClick="forgotPasswd"
- android:text="@string/attachproject_login_button_forgotpw" />
-
- <Button
- android:id="@+id/login_button"
- android:layout_width="100dp"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:layout_alignParentRight="true"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
- android:layout_marginRight="10dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:padding="5dp"
- android:onClick="login"
- android:text="@string/attachproject_login_button_login" />
-
- </RelativeLayout>
-
- </LinearLayout>
-
- <!-- attached -->
- <include
- android:id="@+id/attached_wrapper"
- layout="@layout/attach_project_success_layout"
- android:layout_marginTop="20dp"
- android:visibility="gone" />
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/android/BOINC/res/layout/attach_project_manual_url_input_dialog.xml b/android/BOINC/res/layout/attach_project_manual_url_input_dialog.xml
new file mode 100644
index 0000000..2e11a4b
--- /dev/null
+++ b/android/BOINC/res/layout/attach_project_manual_url_input_dialog.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@color/white">
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold"
+ android:singleLine="true"
+ android:padding="20dp"
+ android:background="@drawable/shape_light_blue_background"
+ android:layout_marginBottom="20dp"
+ android:text="@string/attachproject_list_manual_button"/>
+
+ <EditText
+ android:id="@+id/url_input"
+ android:inputType="textUri"
+ android:hint="@string/attachproject_list_manual_dialog_title"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="5dp"
+ android:layout_below="@+id/title"
+ android:minWidth="200dp"/>
+
+ <Button
+ android:id="@+id/continue_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/generic_button_continue"
+ android:textColor="@android:color/white"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:background="@drawable/shape_button_blue"
+ android:minWidth="150dp"
+ android:padding="5dp"
+ android:layout_below="@+id/url_input"
+ android:layout_alignParentRight="true"
+ android:layout_margin="10dp"/>
+
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/attach_project_ongoing_layout.xml b/android/BOINC/res/layout/attach_project_ongoing_layout.xml
deleted file mode 100644
index 2ae3dea..0000000
--- a/android/BOINC/res/layout/attach_project_ongoing_layout.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:layout_marginTop="5dp"
- android:layout_marginBottom="5dp"
- android:gravity="center_vertical"
- android:background="@drawable/shape_light_blue_background" >
-
- <ProgressBar
- android:id="@+id/working_progressBar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleSmall"
- android:layout_marginLeft="50dp"
- android:layout_marginRight="10dp"
- android:background="@android:color/transparent" />
- <TextView
- android:id="@+id/header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/generic_loading"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@android:color/transparent" />
-
-</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_registration_layout.xml b/android/BOINC/res/layout/attach_project_registration_layout.xml
deleted file mode 100644
index 447bc2b..0000000
--- a/android/BOINC/res/layout/attach_project_registration_layout.xml
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
-
- <LinearLayout
- android:id="@+id/registration_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:paddingBottom="10dp">
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/shape_dark_blue_gradient_background"
- android:padding="15dp"
- android:gravity="center_horizontal"
- android:layout_marginBottom="10dp">
- <TextView android:textAppearance="?android:attr/textAppearanceLarge"
- android:id="@+id/registration_header"
- android:background="@android:color/transparent"
- android:textColor="@color/white_smoke"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"/>
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/url_wrapper"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:orientation="horizontal"
- android:padding="10dp">
- <TextView
- android:id="@+id/header_url"
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/attachproject_registration_header_url" />
-
- <TextView
- android:id="@+id/url"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall" />
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/input_wrapper"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_registration_header_email"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/email_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textEmailAddress" >
- <requestFocus />
- </EditText>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_registration_header_username"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/username_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textNoSuggestions" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_registration_header_teamname"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/teamname_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textNoSuggestions"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_registration_header_pwd"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/pwd_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textPassword"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp" >
-
- <TextView
- android:layout_width="100dp"
- android:singleLine="true"
- android:layout_height="wrap_content"
- android:layout_marginRight="10dp"
- android:text="@string/attachproject_registration_header_pwd_confirm"
- android:textAppearance="?android:attr/textAppearanceSmall" />
-
- <EditText
- android:id="@+id/pwd_confirm_input"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="textPassword"/>
- </LinearLayout>
-
- <TextView
- android:id="@+id/warning"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:background="@drawable/shape_light_red_background"
- android:paddingTop="10dp"
- android:paddingBottom="10dp"
- android:layout_marginTop="10dp"
- android:visibility="gone" />
-
- <Button
- android:id="@+id/registration_button"
- android:layout_width="100dp"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:paddingLeft="20dp"
- android:paddingRight="20dp"
- android:layout_marginRight="10dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:padding="5dp"
- android:onClick="register"
- android:text="@string/attachproject_registration_button" />
-
- </LinearLayout>
- </LinearLayout>
-</ScrollView>
\ No newline at end of file
diff --git a/android/BOINC/res/layout/attach_project_success_layout.xml b/android/BOINC/res/layout/attach_project_success_layout.xml
deleted file mode 100644
index ac94e44..0000000
--- a/android/BOINC/res/layout/attach_project_success_layout.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:orientation="horizontal"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
- android:layout_marginTop="5dp"
- android:layout_marginBottom="5dp"
- android:gravity="center_vertical"
- android:background="@drawable/shape_light_green_background" >
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@android:color/transparent"
- android:src="@drawable/checkb"
- android:layout_marginLeft="50dp"
- android:layout_marginRight="10dp"
- android:contentDescription="@string/attachproject_working_check_desc"/>
-
- <TextView
- android:id="@+id/header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/generic_loading"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@android:color/transparent" />
-
-</LinearLayout>
diff --git a/android/BOINC/res/layout/attach_project_working_layout.xml b/android/BOINC/res/layout/attach_project_working_layout.xml
deleted file mode 100644
index 4b45393..0000000
--- a/android/BOINC/res/layout/attach_project_working_layout.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:gravity="center">
-
- <LinearLayout
- android:id="@+id/anchor"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="50dp"
- android:orientation="vertical"
- android:gravity="center"/>
-
- <Button
- android:id="@+id/backButton"
- android:layout_width="150dp"
- android:layout_height="wrap_content"
- android:padding="5dp"
- android:layout_margin="10dp"
- android:layout_gravity="center_horizontal"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:clickable="true"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:onClick="backButtonClicked"
- android:text="@string/attachproject_working_back_button"
- android:visibility="gone" />
-
- <Button
- android:id="@+id/finishButton"
- android:layout_width="150dp"
- android:layout_height="wrap_content"
- android:padding="5dp"
- android:layout_margin="10dp"
- android:layout_gravity="center_horizontal"
- android:layout_centerHorizontal="true"
- android:layout_alignParentBottom="true"
- android:layout_alignParentRight="true"
- android:clickable="true"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:onClick="finishButtonClicked"
- android:text="@string/attachproject_working_finish_button"
- android:visibility="gone" />
-
-</RelativeLayout>
diff --git a/android/BOINC/res/layout/dialog_about.xml b/android/BOINC/res/layout/dialog_about.xml
index a676fc4..6174c8a 100644
--- a/android/BOINC/res/layout/dialog_about.xml
+++ b/android/BOINC/res/layout/dialog_about.xml
@@ -18,9 +18,10 @@
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@android:color/white" >
<LinearLayout
android:layout_width="fill_parent"
@@ -61,6 +62,16 @@
android:textStyle="bold"
android:text="@string/about_name"
android:gravity="center_horizontal" />
+
+ <TextView
+ android:id="@+id/version"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:background="@android:color/transparent"
+ android:textColor="@color/black"
+ android:padding="10dp"
+ android:gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
@@ -70,28 +81,26 @@
android:textColor="@color/black"
android:paddingLeft="10dp"
android:paddingRight="10dp"
- android:paddingBottom="10dp"
- android:text="@string/about_name_long"
+ android:text="@string/about_copyright"
android:gravity="center_horizontal" />
<TextView
- android:id="@+id/version"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:background="@android:color/transparent"
android:textColor="@color/black"
- android:padding="10dp"
- android:gravity="center_horizontal" />
-
+ android:text="@string/about_copyright_reserved"
+ android:gravity="center_horizontal" />
+
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:background="@android:color/transparent"
android:textColor="@color/black"
- android:padding="10dp"
- android:text="@string/about_copyright"
+ android:layout_margin="10dp"
+ android:text="@string/about_credits"
android:gravity="center_horizontal" />
<Button
diff --git a/android/BOINC/res/layout/dialog_list_cbitem.xml b/android/BOINC/res/layout/dialog_list_cbitem.xml
deleted file mode 100644
index edc3907..0000000
--- a/android/BOINC/res/layout/dialog_list_cbitem.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="1dp" >
-
- <CheckBox android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/checkbox"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/black"/>
-</LinearLayout>
diff --git a/android/BOINC/res/layout/eventlog_client_layout.xml b/android/BOINC/res/layout/eventlog_client_layout.xml
new file mode 100644
index 0000000..2bb45cb
--- /dev/null
+++ b/android/BOINC/res/layout/eventlog_client_layout.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <ListView
+ android:id="@+id/clientLogList"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ </ListView>
+
+</LinearLayout>
diff --git a/android/BOINC/res/layout/eventlog_gui_layout.xml b/android/BOINC/res/layout/eventlog_gui_layout.xml
new file mode 100644
index 0000000..3a528de
--- /dev/null
+++ b/android/BOINC/res/layout/eventlog_gui_layout.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <ListView
+ android:id="@+id/guiLogList"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ </ListView>
+
+</LinearLayout>
diff --git a/android/BOINC/res/layout/eventlog_layout.xml b/android/BOINC/res/layout/eventlog_layout.xml
deleted file mode 100644
index 5fe1925..0000000
--- a/android/BOINC/res/layout/eventlog_layout.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <TextView
- android:id="@+id/clientLogHeader"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.5"
- android:clickable="true"
- android:onClick="onClientLog"
- android:background="@android:color/transparent"
- android:padding="10dp"
- android:gravity="center"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:text="@string/eventlog_client_header"/>
- <TextView
- android:id="@+id/guiLogHeader"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.5"
- android:clickable="true"
- android:onClick="onGuiLog"
- android:background="@drawable/shape_light_blue_background"
- android:padding="10dp"
- android:gravity="center"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:text="@string/eventlog_gui_header"/>
- </LinearLayout>
-
- <ListView
- android:id="@+id/clientLogList"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- </ListView>
-
- <ListView
- android:id="@+id/guiLogList"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone" >
- </ListView>
-
-</LinearLayout>
diff --git a/android/BOINC/res/layout/main.xml b/android/BOINC/res/layout/main.xml
index 0f0b76e..70e2992 100644
--- a/android/BOINC/res/layout/main.xml
+++ b/android/BOINC/res/layout/main.xml
@@ -17,136 +17,39 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-
-<!--
- This layout is split into four different parts, that are logically independent:
- - tabhost
- - launching
- - error
- Which layout to show depends on ClientStatus.setupStatus.
- The layouts reside in the same XML file, because MainActivity is a TabActivity, which
- need to have tabhost, tabs and tabcontent present in their layout.
- Currently MainActivity decieds which layout to show, and sets the visibility attribute
- of the other parts to View.GONE.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/main_entry"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="horizontal" >
+<android.support.v4.widget.DrawerLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/drawer_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
- <!-- tabbed layout, for normal manager operation -->
- <TabHost
- android:id="@android:id/tabhost"
- android:visibility="gone"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
-
- <TabWidget
- android:id="@android:id/tabs"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" >
- </TabWidget>
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/frame_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_above="@+id/status_container"/>
- <HorizontalScrollView
- android:visibility="gone"
- android:id="@+id/noproject_warning_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_margin="10dp"
- android:background="@drawable/shape_yellow_background">
- <TextView
- android:id="@+id/noproject_warning"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="10dp"
- android:singleLine="true"
- android:text="@string/main_noproject_warning"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:background="@android:color/transparent"
- android:textStyle="bold"
- android:layout_gravity="center_horizontal"
- android:clickable="true"
- android:onClick="noProjectClicked" />
- </HorizontalScrollView>
-
- <FrameLayout
- android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
- </FrameLayout>
- </LinearLayout>
- </TabHost>
-
- <!-- launching layout, shown during start up -->
- <LinearLayout
- android:id="@+id/main_loading"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:layout_gravity="center"
- android:orientation="horizontal"
- android:paddingTop="20dp"
- android:paddingBottom="20dp"
- android:background="@drawable/shape_light_blue_background" >
+ <FrameLayout
+ android:id="@+id/status_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true" />
+ </RelativeLayout>
- <ProgressBar
- android:id="@+id/loading_progressBar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleSmall"
- android:layout_marginRight="10dp"
- android:background="@android:color/transparent" />
-
- <TextView
- android:id="@+id/loading_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/status_launching"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:maxWidth="100dp"
- android:background="@android:color/transparent" />
- </LinearLayout>
-
- <!-- error layout, in case of an error, i.e. client crash -->
- <LinearLayout
- android:id="@+id/main_error"
- android:visibility="gone"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/error_textView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/main_error"
- android:textAppearance="?android:attr/textAppearanceLarge" />
-
- <ImageView
- android:id="@+id/error_imageView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="30dip"
- android:layout_marginTop="30dip"
- android:contentDescription="@string/main_error"
- android:src="@drawable/reloadb48" />
-
- <TextView
- android:id="@+id/error_textView2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:gravity="center"
- android:text="@string/main_error_long"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
-
- </LinearLayout>
-</LinearLayout>
+ <!-- Listview to display slider menu -->
+ <ListView
+ android:id="@+id/list_slidermenu"
+ android:layout_width="240dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="start"
+ android:choiceMode="singleChoice"
+ android:divider="@color/light_blue"
+ android:dividerHeight="1dp"
+ android:listSelector="@drawable/navlist_selector"
+ android:background="@android:color/white"/>
+
+</android.support.v4.widget.DrawerLayout>
diff --git a/android/BOINC/res/layout/main_loading.xml b/android/BOINC/res/layout/main_loading.xml
new file mode 100644
index 0000000..ecdefe4
--- /dev/null
+++ b/android/BOINC/res/layout/main_loading.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/main_entry"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal" >
+
+ <LinearLayout
+ android:id="@+id/main_loading"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:layout_gravity="center"
+ android:orientation="horizontal"
+ android:paddingTop="20dp"
+ android:paddingBottom="20dp"
+ android:background="@drawable/shape_light_blue_background" >
+
+ <ProgressBar
+ android:id="@+id/loading_progressBar"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/progressBarStyleSmall"
+ android:layout_marginRight="10dp"
+ android:background="@android:color/transparent" />
+
+ <TextView
+ android:id="@+id/loading_header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/status_launching"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:maxWidth="100dp"
+ android:background="@android:color/transparent" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/android/BOINC/res/layout/main_tab_layout.xml b/android/BOINC/res/layout/main_tab_layout.xml
index 4194591..a01ad3a 100644
--- a/android/BOINC/res/layout/main_tab_layout.xml
+++ b/android/BOINC/res/layout/main_tab_layout.xml
@@ -21,24 +21,23 @@
android:id="@+id/tabsLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:paddingTop="5dp"
- android:paddingBottom="5dp"
android:gravity="center"
- android:orientation="vertical"
- android:background="@drawable/tab_background">
+ android:orientation="horizontal"
+ android:background="@android:color/transparent">
<ImageView android:id="@+id/tabsIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
+ android:layout_marginRight="5dp"
android:contentDescription="@string/tab_desc" />
<TextView android:id="@+id/tabsText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="2dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:background="@android:color/transparent"
- android:textColor="@drawable/tab_text"
+ android:textColor="@android:color/white"
+ android:textStyle="bold"
android:singleLine="true" />
</LinearLayout>
diff --git a/android/BOINC/res/layout/navlist_listitem.xml b/android/BOINC/res/layout/navlist_listitem.xml
new file mode 100644
index 0000000..b9f4ee9
--- /dev/null
+++ b/android/BOINC/res/layout/navlist_listitem.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/listitem"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:minHeight="60dp"
+ android:background="@drawable/navlist_selector">
+
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:contentDescription="@string/app_name"
+ android:src="@drawable/boinc"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_marginLeft="12dp"
+ android:layout_marginRight="12dp" />
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/icon"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/black"
+ android:layout_centerVertical="true"
+ android:paddingRight="40dp"/>
+
+ <TextView android:id="@+id/counter"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@drawable/navlist_counter_background"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:paddingLeft="3dp"
+ android:paddingRight="3dp"
+ android:layout_marginRight="8dp"
+ android:textColor="@android:color/white"/>
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/navlist_listitem_subitem.xml b/android/BOINC/res/layout/navlist_listitem_subitem.xml
new file mode 100644
index 0000000..f092730
--- /dev/null
+++ b/android/BOINC/res/layout/navlist_listitem_subitem.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/listitem"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:minHeight="60dp"
+ android:background="@drawable/navlist_selector">
+
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:contentDescription="@string/app_name"
+ android:src="@drawable/boinc"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_marginLeft="24dp"
+ android:layout_marginRight="12dp" />
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/icon"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/black"
+ android:layout_centerVertical="true"
+ android:paddingRight="40dp"/>
+
+ <TextView android:id="@+id/counter"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@drawable/navlist_counter_background"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:layout_marginRight="8dp"
+ android:textColor="@android:color/white"/>
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/notices_layout_listitem.xml b/android/BOINC/res/layout/notices_layout_listitem.xml
index 32d5d10..21b13f9 100644
--- a/android/BOINC/res/layout/notices_layout_listitem.xml
+++ b/android/BOINC/res/layout/notices_layout_listitem.xml
@@ -22,8 +22,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:clickable="true"
- android:onClick="noticeClick">
+ android:clickable="true">
<RelativeLayout
android:layout_width="60dp"
diff --git a/android/BOINC/res/layout/prefs_layout_dialog.xml b/android/BOINC/res/layout/prefs_layout_dialog.xml
index dcfbb8b..91d0b06 100644
--- a/android/BOINC/res/layout/prefs_layout_dialog.xml
+++ b/android/BOINC/res/layout/prefs_layout_dialog.xml
@@ -20,7 +20,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:background="@android:color/white" >
<TextView
android:id="@+id/title"
diff --git a/android/BOINC/res/layout/prefs_layout_dialog_pct.xml b/android/BOINC/res/layout/prefs_layout_dialog_pct.xml
index 5247312..76a7a2e 100644
--- a/android/BOINC/res/layout/prefs_layout_dialog_pct.xml
+++ b/android/BOINC/res/layout/prefs_layout_dialog_pct.xml
@@ -20,7 +20,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:background="@android:color/white" >
<TextView
android:id="@+id/title"
diff --git a/android/BOINC/res/layout/prefs_layout_dialog_selection.xml b/android/BOINC/res/layout/prefs_layout_dialog_selection.xml
index 6052005..9e61f11 100644
--- a/android/BOINC/res/layout/prefs_layout_dialog_selection.xml
+++ b/android/BOINC/res/layout/prefs_layout_dialog_selection.xml
@@ -20,7 +20,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="220dp"
android:layout_height="wrap_content"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:background="@android:color/white" >
<TextView
android:id="@+id/title"
diff --git a/android/BOINC/res/layout/prefs_layout_listitem.xml b/android/BOINC/res/layout/prefs_layout_listitem.xml
index eea4116..2bbf0ac 100644
--- a/android/BOINC/res/layout/prefs_layout_listitem.xml
+++ b/android/BOINC/res/layout/prefs_layout_listitem.xml
@@ -18,19 +18,41 @@
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/wrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clickable="true"
- android:onClick="onItemClick"
android:padding="5dp" >
+
+ <LinearLayout
+ android:id="@+id/status_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true">
+
+ <TextView android:textAppearance="?android:attr/textAppearanceMedium"
+ android:id="@+id/status"
+ android:layout_width="100dp"
+ android:gravity="center"
+ android:padding="3dp"
+ android:layout_height="wrap_content"
+ android:textColor="@color/lightest_blue"
+ android:textStyle="bold"
+ android:background="@drawable/shape_preferences_status_background">
+ </TextView>
+ </LinearLayout>
+
<LinearLayout
+ android:id="@+id/description_wrapper"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
- android:layout_marginRight="105dp">
+ android:layout_toLeftOf="@+id/status_wrapper">
<TextView android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/header"
@@ -40,29 +62,10 @@
<TextView android:textAppearance="?android:attr/textAppearanceSmall"
android:id="@+id/description"
- android:textStyle="italic"
+ android:textColor="@color/dark_grey"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true">
-
- <TextView android:textAppearance="?android:attr/textAppearanceMedium"
- android:id="@+id/status"
- android:layout_width="100dp"
- android:gravity="center"
- android:padding="3dp"
- android:layout_height="wrap_content"
- android:textColor="@color/lightest_blue"
- android:textStyle="bold"
- android:background="@drawable/shape_preferences_status_background">
- </TextView>
- </LinearLayout>
</RelativeLayout>
diff --git a/android/BOINC/res/layout/prefs_layout_listitem_bool.xml b/android/BOINC/res/layout/prefs_layout_listitem_bool.xml
index 12f1a0e..eea4ade 100644
--- a/android/BOINC/res/layout/prefs_layout_listitem_bool.xml
+++ b/android/BOINC/res/layout/prefs_layout_listitem_bool.xml
@@ -17,15 +17,30 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/checkbox_wrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <CheckBox android:layout_width="wrap_content"
+ android:orientation="vertical"
+ android:padding="5dp">
+
+ <TextView
+ android:id="@+id/checkbox_text"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:id="@+id/checkbox"
- android:onClick="onCbClick"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/black" />
-</LinearLayout>
+ android:textColor="@color/black"
+ android:layout_toLeftOf="@+id/checkbox"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"/>
+
+ <CheckBox
+ android:id="@+id/checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:padding="3dp"
+ android:layout_centerVertical="true"
+ android:clickable="false" />
+
+</RelativeLayout>
diff --git a/android/BOINC/res/layout/project_details_layout.xml b/android/BOINC/res/layout/project_details_layout.xml
new file mode 100644
index 0000000..a1fbfaa
--- /dev/null
+++ b/android/BOINC/res/layout/project_details_layout.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ <LinearLayout
+ android:id="@+id/wrapper"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:id="@+id/status_wrapper"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+ <TextView
+ android:id="@+id/header_status"
+ android:layout_width="100dp"
+ android:singleLine="true"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/tab_status"/>
+ <TextView
+ android:id="@+id/status_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/general_area_wrapper"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+ <TextView
+ android:id="@+id/header_general_area"
+ android:layout_width="100dp"
+ android:singleLine="true"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/attachproject_login_header_general_area" />
+
+ <TextView
+ android:id="@+id/general_area"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/specific_area_wrapper"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+ <TextView
+ android:id="@+id/header_specific_area"
+ android:layout_width="100dp"
+ android:singleLine="true"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/attachproject_login_header_specific_area" />
+
+ <TextView
+ android:id="@+id/specific_area"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/description_wrapper"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+ <TextView
+ android:id="@+id/header_description"
+ android:layout_width="100dp"
+ android:singleLine="true"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/attachproject_login_header_description" />
+
+ <TextView
+ android:id="@+id/description"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/based_at_wrapper"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+ <TextView
+ android:id="@+id/header_based_at"
+ android:layout_width="100dp"
+ android:singleLine="true"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/attachproject_login_header_home" />
+
+ <TextView
+ android:id="@+id/based_at"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+ <TextView
+ android:id="@+id/header_url"
+ android:layout_width="100dp"
+ android:singleLine="true"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="10dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/attachproject_login_header_url"/>
+ <TextView
+ android:id="@+id/project_url"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:clickable="true"
+ android:textColor="@color/dark_blue"/>
+ </LinearLayout>
+
+ <HorizontalScrollView
+ android:id="@+id/slideshow_wrapper"
+ android:layout_height="wrap_content"
+ android:layout_width="fill_parent"
+ android:background="@drawable/shape_light_blue_background"
+ android:layout_marginTop="20dp"
+ android:padding="10dp">
+
+ <LinearLayout
+ android:id="@+id/slideshow_hook"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:orientation="horizontal">
+
+ <ProgressBar
+ android:id="@+id/slideshow_loading"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ style="?android:attr/progressBarStyleLarge"
+ android:background="@android:color/transparent"
+ android:layout_margin="20dp" />
+ </LinearLayout>
+ </HorizontalScrollView>
+
+ </LinearLayout>
+
+</ScrollView>
diff --git a/android/BOINC/res/layout/project_details_slideshow_image_layout.xml b/android/BOINC/res/layout/project_details_slideshow_image_layout.xml
new file mode 100644
index 0000000..800a1b8
--- /dev/null
+++ b/android/BOINC/res/layout/project_details_slideshow_image_layout.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/slideshow_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="10dp"
+ android:contentDescription="@string/status_image_description"/>
+
diff --git a/android/BOINC/res/layout/projects_layout.xml b/android/BOINC/res/layout/projects_layout.xml
index 098c8e3..30748ed 100644
--- a/android/BOINC/res/layout/projects_layout.xml
+++ b/android/BOINC/res/layout/projects_layout.xml
@@ -17,33 +17,14 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
+ android:layout_height="match_parent" >
<ListView
android:id="@+id/projectsList"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_above="@+id/addProjectButton" >
-
+ android:layout_height="match_parent" >
</ListView>
-
- <Button
- android:id="@+id/addProjectButton"
- android:layout_width="200dp"
- android:layout_height="wrap_content"
- android:padding="5dp"
- android:layout_margin="10dp"
- android:layout_gravity="center_horizontal"
- android:layout_centerHorizontal="true"
- android:layout_alignParentBottom="true"
- android:clickable="true"
- android:background="@drawable/shape_button_blue"
- android:textColor="@color/white_smoke"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:onClick="addProject"
- android:text="@string/projects_add" />
-</RelativeLayout>
+</LinearLayout>
diff --git a/android/BOINC/res/layout/status_layout.xml b/android/BOINC/res/layout/status_layout.xml
index 2a04c36..830bbbe 100644
--- a/android/BOINC/res/layout/status_layout.xml
+++ b/android/BOINC/res/layout/status_layout.xml
@@ -20,9 +20,10 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status_wrapper"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:gravity="center"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:descendantFocusability="blocksDescendants" >
<LinearLayout
android:id="@+id/center_wrapper"
@@ -30,8 +31,8 @@
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
- android:paddingTop="20dp"
- android:paddingBottom="20dp"
+ android:paddingTop="5dp"
+ android:paddingBottom="5dp"
android:background="@drawable/shape_light_blue_background"
android:visibility="gone">
@@ -66,57 +67,14 @@
</LinearLayout>
</LinearLayout>
- <RelativeLayout
- android:id="@+id/slideshow_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:visibility="gone"
- android:paddingTop="10dp"
- android:orientation="vertical">
-
- <ImageView
- android:id="@+id/image_view"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:contentDescription="@string/status_image_description"
- android:scaleType="fitCenter"
- android:layout_marginBottom="130dp"
- android:layout_alignParentTop="true"
- android:adjustViewBounds="true"/>
-
- <LinearLayout
- android:id="@+id/gallery_wrapper"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/shape_light_blue_background"
- android:layout_alignParentBottom="true"
- android:orientation="vertical">
- <TextView
- android:id="@+id/image_description"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:background="@android:color/transparent"
- android:textStyle="bold"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
-
- <Gallery
- android:id="@+id/gallery"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:spacing="5dp"
- android:background="@android:color/transparent"/>
- </LinearLayout>
- </RelativeLayout>
-
<LinearLayout
android:id="@+id/restarting_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
- android:paddingTop="20dp"
- android:paddingBottom="20dp"
+ android:paddingTop="10dp"
+ android:paddingBottom="10dp"
android:background="@drawable/shape_light_blue_background"
android:visibility="gone" >
diff --git a/android/BOINC/res/layout/tasks_layout_listitem.xml b/android/BOINC/res/layout/tasks_layout_listitem.xml
index dc81bcc..76a71af 100644
--- a/android/BOINC/res/layout/tasks_layout_listitem.xml
+++ b/android/BOINC/res/layout/tasks_layout_listitem.xml
@@ -24,16 +24,20 @@
android:padding="2dp" >
<!-- left column -->
- <ImageView
- android:id="@+id/projectIcon"
- android:layout_width="60dp"
- android:layout_height="60dp"
- android:background="@drawable/shape_blue_border"
- android:contentDescription="@drawable/shape_blue_border"
- android:padding="1dp"
- android:scaleType="fitCenter"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true" />
+ <RelativeLayout
+ android:id="@+id/icon_background"
+ android:layout_width="60dp"
+ android:layout_height="match_parent"
+ android:minHeight="60dp"
+ android:background="@android:color/transparent">
+ <ImageView
+ android:id="@+id/projectIcon"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:scaleType="fitCenter"
+ android:contentDescription="@string/projects_icon"
+ android:layout_centerInParent="true" />
+ </RelativeLayout>
<!-- center column -->
<LinearLayout
@@ -42,7 +46,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:orientation="vertical"
- android:layout_toRightOf="@+id/projectIcon"
+ android:layout_toRightOf="@+id/icon_background"
android:layout_toLeftOf="@+id/rightColumnWrapper"
android:layout_alignParentTop="true" >
diff --git a/android/BOINC/res/layout/title_bar.xml b/android/BOINC/res/layout/title_bar.xml
deleted file mode 100644
index 3a3aadb..0000000
--- a/android/BOINC/res/layout/title_bar.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- This file is part of BOINC.
- http://boinc.berkeley.edu
- Copyright (C) 2012 University of California
-
- BOINC is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License
- as published by the Free Software Foundation,
- either version 3 of the License, or (at your option) any later version.
-
- BOINC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with BOINC. If not, see <http://www.gnu.org/licenses/>.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/titleBar"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:padding="5dp"
- android:orientation="horizontal"
- android:background="@color/black">
-
- <ImageView android:id="@+id/titleIcon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:src="@drawable/boinc"
- android:contentDescription="@string/main_title_icon_desc"
- android:background="@android:color/transparent" />
-
- <TextView android:id="@+id/titleText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@+id/titleIcon"
- android:layout_marginLeft="5dp"
- android:layout_centerVertical="true"
- android:textStyle="bold"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/app_name"
- android:background="@android:color/transparent"
- android:textColor="@color/light_blue" />
-
- <TextView android:id="@+id/titleStatus"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:textStyle="italic"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:background="@android:color/transparent"
- android:textColor="@color/light_blue" />
-</RelativeLayout>
diff --git a/android/BOINC/res/menu/eventlog_menu.xml b/android/BOINC/res/menu/eventlog_menu.xml
index e8caec6..35d369a 100644
--- a/android/BOINC/res/menu/eventlog_menu.xml
+++ b/android/BOINC/res/menu/eventlog_menu.xml
@@ -17,18 +17,22 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/refresh"
+ yourapp:showAsAction="ifRoom"
android:enabled="true"
android:visible="true"
android:title="@string/menu_refresh"
android:icon="@drawable/refreshw"></item>
<item android:id="@+id/email_to"
+ yourapp:showAsAction="ifRoom"
android:enabled="true"
android:visible="true"
android:title="@string/menu_emailto"
- android:icon="@drawable/mailw"></item>
+ android:icon="@drawable/mailsmallw"></item>
<item android:id="@+id/copy"
+ yourapp:showAsAction="ifRoom"
android:enabled="true"
android:visible="true"
android:title="@string/menu_copy"
diff --git a/android/BOINC/res/menu/main_menu.xml b/android/BOINC/res/menu/main_menu.xml
index 2003c93..b5c3d47 100644
--- a/android/BOINC/res/menu/main_menu.xml
+++ b/android/BOINC/res/menu/main_menu.xml
@@ -17,27 +17,11 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:id="@+id/help"
- android:enabled="true"
- android:visible="true"
- android:title="@string/menu_help"
- android:icon="@drawable/helpw"></item>
- <item android:id="@+id/about"
- android:enabled="true"
- android:visible="true"
- android:title="@string/menu_about"
- android:icon="@drawable/infow"></item>
- <item android:id="@+id/event_log"
- android:enabled="true"
- android:title="@string/menu_eventlog"
- android:icon="@drawable/bugw"></item>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/run_mode"
android:enabled="true"
- android:visible="true"></item>
- <item android:id="@+id/exit_boinc"
- android:enabled="true"
android:visible="true"
- android:title="@string/menu_exit"
- android:icon="@drawable/offw"></item>
+ android:title="@string/menu_run_mode_disable"
+ yourapp:showAsAction="ifRoom|withText" ></item>
</menu>
\ No newline at end of file
diff --git a/android/BOINC/res/menu/project_details_menu.xml b/android/BOINC/res/menu/project_details_menu.xml
new file mode 100644
index 0000000..9370a9f
--- /dev/null
+++ b/android/BOINC/res/menu/project_details_menu.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
+ <item android:id="@+id/projects_control_update"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/projects_control_update" ></item>
+ <item android:id="@+id/projects_control_suspend"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/projects_control_suspend" ></item>
+ <item android:id="@+id/projects_control_nonewtasks"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/projects_control_nonewtasks" ></item>
+ <item android:id="@+id/projects_control_reset"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/projects_control_reset" ></item>
+ <item android:id="@+id/projects_control_remove"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/projects_control_remove" ></item>
+</menu>
\ No newline at end of file
diff --git a/android/BOINC/res/menu/projects_menu.xml b/android/BOINC/res/menu/projects_menu.xml
index 2f87764..80eaaef 100644
--- a/android/BOINC/res/menu/projects_menu.xml
+++ b/android/BOINC/res/menu/projects_menu.xml
@@ -17,11 +17,20 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/projects_add"
android:enabled="true"
android:visible="true"
android:title="@string/projects_add"
- android:icon="@drawable/plusw"></item>
-
+ android:icon="@drawable/plusw"
+ yourapp:showAsAction="ifRoom|withText"></item>
+ <item android:id="@+id/acctmgr_add"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/attachproject_list_acctmgr_button"></item>
+ <item android:id="@+id/projects_add_url"
+ android:enabled="true"
+ android:visible="true"
+ android:title="@string/attachproject_list_manual_button"></item>
</menu>
\ No newline at end of file
diff --git a/android/BOINC/res/values-pl/strings.xml b/android/BOINC/res/values-pl/strings.xml
deleted file mode 100644
index 3b98b58..0000000
--- a/android/BOINC/res/values-pl/strings.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<resources>
- <string name="app_name">BOINC</string>
- <string name="generic_loading">Bezig met laden! Even geduld...</string>
- <string name="attachproject_list_header">Kies een project:</string>
- <string name="attachproject_list_manual_button">Project toevoegen via URL</string>
- <string name="attachproject_list_manual_dialog_title">Projectspecifieke URL invoeren:</string>
- <string name="attachproject_list_manual_dialog_button">Project toevoegen</string>
- <string name="attachproject_list_manual_no_url">Projectspecifieke URL invoeren</string>
- <string name="attachproject_list_no_internet">Geen internetverbinding</string>
- <string name="attachproject_login_loading">Verbinding maken met projectspecifieke server...</string>
- <string name="attachproject_login_image_description">Project logo.</string>
- <string name="attachproject_login_header_general_area">Vakgebied:</string>
- <string name="attachproject_login_header_specific_area">Specifiek vakgebied:</string>
- <string name="attachproject_login_header_description">Omschrijving:</string>
- <string name="attachproject_login_header_home">Start:</string>
- <string name="attachproject_login_header_url">Website:</string>
- <string name="attachproject_login_header_platform">Android:</string>
- <string name="attachproject_login_platform_supported">Dit project ondersteunt Android-apparaten</string>
- <string name="attachproject_login_platform_not_supported">Dit project ondersteunt geen Android-apparaten</string>
- <string name="attachproject_login_category_terms_of_use">Gebruiksvoorwaarden voor</string>
- <string name="attachproject_login_accept_terms_of_use">Het aanmaken van een account bij dit project impliceert acceptatie van de gebruiksvoorwaarden zoals hierboven beschreven.</string>
- <string name="attachproject_login_category_login">Aanmeldgegevens van bestaand account gebruiken</string>
- <string name="attachproject_login_header_id_email">E-mailadres:</string>
- <string name="attachproject_login_header_id_name">Naam:</string>
- <string name="attachproject_login_header_pwd">Wachtwoord:</string>
- <string name="attachproject_login_category_creation">Nieuw bij</string>
- <string name="attachproject_login_header_creation_enabled">Een account aanmaken voor deelname:</string>
- <string name="attachproject_login_header_creation_client_disabled">Bezoek projectspecifieke website om een account aan te maken:</string>
- <string name="attachproject_login_header_creation_disabled">Het aanmaken van een account is op dit moment niet mogelijk!</string>
- <string name="attachproject_login_button_registration">Aanmaken</string>
- <string name="attachproject_login_button_login">Aanmelden</string>
- <string name="attachproject_login_button_forgotpw">Wachtwoord vergeten?</string>
- <string name="attachproject_login_error_toast">Verbinding met het project mislukt!</string>
- <string name="attachproject_login_attached">Bijgevoegd</string>
- <string name="attachproject_registration_header">Account-registratie voor</string>
- <string name="attachproject_registration_header_url">Project:</string>
- <string name="attachproject_registration_header_email">E-mailadres:</string>
- <string name="attachproject_registration_header_username">Naam:</string>
- <string name="attachproject_registration_header_teamname">Team:</string>
- <string name="attachproject_registration_header_pwd">Wachtwoord:</string>
- <string name="attachproject_registration_header_pwd_confirm">... Herhalen:</string>
- <string name="attachproject_registration_button">Aanmaken</string>
- <string name="attachproject_acctmgr_header_pwd">Wachtwoord:</string>
- <string name="attachproject_acctmgr_header_pwd_confirm">... Herhalen:</string>
- <string name="attachproject_error_wrong_name">Gebruiker niet gevonden</string>
- <string name="attachproject_error_short_pwd">Het wachtwoord is te kort</string>
- <string name="attachproject_error_no_internet">Verbinding mislukt</string>
- <string name="attachproject_error_pwd_no_match">Wachtwoorden zijn niet identiek</string>
- <string name="attachproject_error_no_email">Voer uw e-mailadres in</string>
- <string name="attachproject_error_no_pwd">Voer een wachtwoord in</string>
- <string name="attachproject_error_no_name">Voer gebruikersnaam in</string>
- <string name="attachproject_error_unknown">mislukt</string>
- <string name="attachproject_error_bad_username">Gebruikersnaam geweigerd</string>
- <string name="attachproject_error_email_in_use">E-mailadres is al in gebruik</string>
- <string name="attachproject_error_project_down">Project is offline</string>
- <string name="attachproject_error_email_bad_syntax">E-mailadres geweigerd</string>
- <string name="attachproject_error_bad_pwd">Wachtwoord geweigerd</string>
- <string name="attachproject_error_creation_disabled">Aanmaken van een account is voor dit project niet mogelijk</string>
- <string name="attachproject_working_back_button">Vorige</string>
- <string name="attachproject_working_finish_button">Voltooien</string>
- <string name="attachproject_working_check_desc">Geslaagd</string>
- <string name="attachproject_working_failed_desc">Mislukt</string>
- <string name="attachproject_working_ongoing">...</string>
- <string name="attachproject_working_finished">.</string>
- <string name="attachproject_working_description">:</string>
- <string name="attachproject_working_connect">Verbinden</string>
- <string name="attachproject_working_verify">Account verifiëren</string>
- <string name="attachproject_working_register">Account registreren</string>
- <string name="attachproject_working_login">Aanmelden</string>
- <string name="main_error">Oeps</string>
- <string name="main_error_long">...dit hoort niet te gebeuren!\nKlik op het icoontje om het opneuw te proberen.</string>
- <string name="main_title_icon_desc">BOINC-icoon</string>
- <string name="tab_status">Status</string>
- <string name="tab_projects">Projecten</string>
- <string name="tab_tasks">Taken</string>
- <string name="tab_transfers">Overdrachten</string>
- <string name="tab_preferences">Voorkeursinstellingen</string>
- <string name="tab_desc">Navigatie</string>
- <string name="status_running">Berekenen</string>
- <string name="status_running_long">Dank u voor uw deelname</string>
- <string name="status_paused">Onderbroken</string>
- <string name="status_idle">Niets te doen</string>
- <string name="status_idle_long">Wachten op taaktoewijzing...</string>
- <string name="status_computing_disabled">Onderbroken</string>
- <string name="status_noproject">Kies een project om aan deel te nemen.</string>
- <string name="status_closing">Bezig met afsluiten…</string>
- <string name="status_benchmarking">Bezig met benchmark...</string>
- <string name="status_image_description">project afbeelding</string>
- <string name="prefs_loading">Voorkeuren inlezen...</string>
- <string name="prefs_submit_button">Opslaan</string>
- <string name="prefs_dialog_title">Voer nieuwe waarde in:</string>
- <string name="prefs_dialog_title_selection">Selecteer:</string>
- <string name="prefs_category_general">Algemeen</string>
- <string name="prefs_category_network">Netwerk</string>
- <string name="prefs_category_cpu">Processor</string>
- <string name="prefs_category_storage">Opslag</string>
- <string name="prefs_category_memory">Geheugen</string>
- <string name="prefs_category_debug">Foutoplossing</string>
- <string name="battery_charge_min_pct_header">Min. batterijniveau</string>
- <string name="battery_temperature_max_header">Max. batterij temperatuur</string>
- <string name="prefs_disk_max_pct_header">Max. gebruikte opslagruimte</string>
- <string name="prefs_disk_max_pct_description">Welk percentage opslagruimte mag BOINC gebruiken op dit apparaat?</string>
- <string name="prefs_disk_min_free_gb_header">Min. reserve opslagruimte</string>
- <string name="prefs_autostart_header">Autostart</string>
- <string name="prefs_cpu_time_max_header">CPU limiet</string>
- <string name="prefs_memory_max_idle_header">Geheugen limiet</string>
- <string name="prefs_unit_mb">MB</string>
- <string name="prefs_unit_gb">GB</string>
- <string name="prefs_unit_pct">%</string>
- <string name="prefs_unit_celcius">°C</string>
- <string name="projects_loading">Projecten inlezen...</string>
- <string name="projects_add">Project toevoegen</string>
- <string name="projects_icon">Project icoon</string>
- <string name="projects_credits_header">Punten</string>
- <string name="projects_credits_host_header">(op dit apparaat)</string>
- <string name="projects_credits_user_header">(totaal)</string>
- <string name="projects_status_suspendedviagui">Onderbroken door gebruiker</string>
- <string name="projects_control_update">Bijwerken</string>
- <string name="projects_control_remove">Verwijderen</string>
- <string name="projects_control_suspend">Pauzeren</string>
- <string name="projects_control_resume">Hervatten</string>
- <string name="projects_control_nonewtasks">Geen nieuwe taken</string>
- <string name="projects_control_allownewtasks">Nieuwe taken toestaan</string>
- <string name="projects_confirm_detach_title">Project verwijderen?</string>
- <string name="projects_confirm_detach_confirm">Verwijderen</string>
- <string name="tasks_header_name">Taaknaam:</string>
- <string name="tasks_header_elapsed_time">"Verstreken tijd: "</string>
- <string name="tasks_header_project_paused">(onderbroken)</string>
- <string name="tasks_header_deadline">Deadline:</string>
- <string name="tasks_result_new">nieuw</string>
- <string name="tasks_result_files_downloading">wacht op downloaden</string>
- <string name="tasks_result_files_downloaded">downloaden voltooid</string>
- <string name="tasks_result_compute_error">verwerkingsfout</string>
- <string name="tasks_result_files_uploading">uploaden...</string>
- <string name="tasks_result_files_uploaded">uploaden voltooid</string>
- <string name="tasks_result_aborted">afgebroken</string>
- <string name="tasks_result_upload_failed">uploaden mislukt</string>
- <string name="tasks_active_uninitialized">voltooid</string>
- <string name="tasks_active_executing">loopt</string>
- <string name="tasks_active_suspended">onderbroken</string>
- <string name="tasks_active_abort_pending">onderbreken...</string>
- <string name="tasks_active_quit_pending">onderbreken...</string>
- <string name="tasks_custom_suspended_via_gui">onderbroken</string>
- <string name="tasks_custom_project_suspended_via_gui">project onderbroken</string>
- <string name="tasks_custom_ready_to_report">klaar om te rapporteren</string>
- <string name="confirm_abort_task_title">Taak afbreken?</string>
- <string name="confirm_abort_task_message">Taak afbreken:</string>
- <string name="confirm_abort_task_confirm">Afbreken</string>
- <string name="confirm_cancel">Annuleren</string>
- <string name="confirm_image_desc">Bevestigingsdialoog</string>
- <string name="trans_loading">Overdracht inlezen...</string>
- <string name="trans_upload">Upload</string>
- <string name="trans_download">Download</string>
- <string name="trans_retryin">opnieuw over</string>
- <string name="trans_failed">mislukt</string>
- <string name="trans_suspended">onderbroken</string>
- <string name="trans_active">actief</string>
- <string name="trans_pending">in behandeling</string>
- <string name="trans_projectbackoff">project wachttijd</string>
- <string name="trans_header_name">Bestand:</string>
- <string name="confirm_abort_trans_title">Overdracht afbreken?</string>
- <string name="confirm_abort_trans_message">Bestand afbreken:</string>
- <string name="confirm_abort_trans_confirm">Afbreken</string>
- <string name="eventlog_loading">Log berichten laden...</string>
- <string name="eventlog_client_header">Berichten van Cliënt</string>
- <string name="eventlog_gui_header">GUI berichten</string>
- <string name="eventlog_copy_toast">Log naar klembord gekopieerd.</string>
- <string name="eventlog_email_subject">Logberichten voor BOINC op Android:</string>
- <string name="suspend_unknown">Bewerking onderbroken.</string>
- <string name="suspend_batteries">Verbind het apparaat met een oplader om verder te gaan.</string>
- <string name="suspend_useractive">Gebruiker is actief.</string>
- <string name="menu_exit">BOINC afsluiten</string>
- <string name="menu_run_mode_disable">Onderbreek</string>
- <string name="menu_run_mode_enable">Hervatten</string>
- <string name="menu_about">Over</string>
- <string name="menu_help">Help</string>
- <string name="about_title">Over</string>
- <string name="about_name">BOINC</string>
- <string name="about_version">Versie</string>
- <string name="about_name_long">Berkeley Open Infrastructure for Network Computing</string>
- <string name="about_copyright">© 2003–2013 University of California, Berkeley.\nAll Rights Reserved.</string>
-</resources>
diff --git a/android/BOINC/res/values-v11/styles.xml b/android/BOINC/res/values-v11/styles.xml
new file mode 100644
index 0000000..feaeb70
--- /dev/null
+++ b/android/BOINC/res/values-v11/styles.xml
@@ -0,0 +1,15 @@
+<resources>
+
+ <style name="FullscreenTheme" parent="android:Theme.Holo">
+ <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
+ <item name="android:windowActionBarOverlay">true</item>
+ <item name="android:windowBackground">@null</item>
+ <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
+ <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
+ </style>
+
+ <style name="FullscreenActionBarStyle" parent="android:Widget.Holo.ActionBar">
+ <item name="android:background">@color/black_overlay</item>
+ </style>
+
+</resources>
diff --git a/android/BOINC/res/values-v14/theme.xml b/android/BOINC/res/values-v14/theme.xml
new file mode 100644
index 0000000..f8b9b7f
--- /dev/null
+++ b/android/BOINC/res/values-v14/theme.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is part of BOINC.
+ http://boinc.berkeley.edu
+ Copyright (C) 2012 University of California
+
+ BOINC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License
+ as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later version.
+
+ BOINC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<!-- These styles apply to devices with API level 14+ only! -->
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <style name="Theme.Styled" parent="@style/Theme.AppCompat.Light.DarkActionBar">
+ <item name="android:actionBarStyle">@style/StyledActionBar</item>
+ <item name="android:actionBarTabStyle">@style/StyledActionBarTabView</item>
+ <item name="android:itemBackground">@color/dark_blue</item>
+ </style>
+
+ <style name="StyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
+ <item name="android:background">@drawable/shape_dark_blue_gradient_background</item>
+ <item name="android:backgroundStacked">@color/dark_blue</item>
+ <item name="android:titleTextStyle">@style/StyledActionBarTitleText</item>
+ </style>
+
+ <style name="StyledActionBarTabView" parent="@style/Widget.AppCompat.ActionBar.TabView">
+ <item name="android:gravity">center</item>
+ </style>
+
+ <style name="StyledActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
+ <item name="android:textColor">@android:color/white</item>
+ </style>
+
+</resources>
diff --git a/android/BOINC/res/values/Color.xml b/android/BOINC/res/values/Color.xml
index 0b2157c..8d0f038 100644
--- a/android/BOINC/res/values/Color.xml
+++ b/android/BOINC/res/values/Color.xml
@@ -19,13 +19,18 @@
-->
<resources>
<!-- layout colors -->
+ <color name="white">#FFFFFF</color>
<color name="white_smoke">#F5F5F5</color>
<color name="dark_blue">#003366</color>
<color name="dark_blue_transparent">#DD003366</color>
<color name="dark_blue_gradient">#0C4175</color>
+ <color name="dark_blue_gradient2">#004C96</color>
<color name="light_blue">#A2CFFC</color>
<color name="lightest_blue">#D6EBFF</color>
+ <color name="boinc_icon_light_blue">#1E6EA0</color>
+ <color name="boinc_icon_dark_blue">#1E3C6E</color>
<color name="dark_grey">#4D4D4D</color>
+ <color name="light_grey">#B0B0B0</color>
<color name="red">#990033</color>
<color name="yellow">#FCEC3D</color>
<color name="light_yellow">#FCF281</color>
diff --git a/android/BOINC/res/values/colors.xml b/android/BOINC/res/values/colors.xml
new file mode 100644
index 0000000..327c060
--- /dev/null
+++ b/android/BOINC/res/values/colors.xml
@@ -0,0 +1,5 @@
+<resources>
+
+ <color name="black_overlay">#66000000</color>
+
+</resources>
diff --git a/android/BOINC/res/values/configuration.xml b/android/BOINC/res/values/configuration.xml
index 86e34dc..000414e 100644
--- a/android/BOINC/res/values/configuration.xml
+++ b/android/BOINC/res/values/configuration.xml
@@ -30,49 +30,44 @@
<string name="assets_dir_arm" translatable="false">armeabi-v7a/</string>
<string name="assets_dir_x86" translatable="false">x86/</string>
<string name="assets_dir_mips" translatable="false">mips/</string>
+ <!-- client socket address, CAUTION: change this if you are building branded BOINC app to avoid interference btwn apps! -->
+ <string name="client_socket_address" translatable="false">edu_berkeley_boinc_client_socket</string>
<!-- BOINC platform -->
<string name="boinc_platform_name_arm" translatable="false">arm-android-linux-gnu</string>
<string name="boinc_platform_name_x86" translatable="false">x86-android-linux-gnu</string>
<string name="boinc_platform_name_mips" translatable="false">mipsel-android-linux-gnu</string>
<!-- Default preferences of Android app-->
<bool name="prefs_default_autostart">true</bool>
- <bool name="prefs_default_notifications">true</bool>
+ <bool name="prefs_default_notification_notices">true</bool>
+ <bool name="prefs_default_notification_suspended">false</bool>
<bool name="prefs_default_advanced">false</bool>
<integer name="prefs_default_loglevel">2</integer>
<bool name="prefs_power_source_ac">true</bool>
<bool name="prefs_power_source_usb">true</bool>
<bool name="prefs_power_source_wireless">true</bool>
<bool name="prefs_stationary_device_mode">false</bool>
+ <bool name="prefs_suspend_when_screen_on">true</bool>
<!-- Monitor behavior -->
<integer name="status_update_interval_ms">1000</integer>
<integer name="device_status_update_screen_off_every_X_loop">10</integer> <!-- every X status_update_interval_ms -->
<integer name="monitor_setup_connection_retry_rate_ms">1000</integer>
<integer name="monitor_setup_connection_retry_attempts">10</integer>
<integer name="autostart_notification_id">1</integer>
+ <integer name="notice_notification_id">2</integer>
<!-- configuration project attach -->
- <integer name="attach_step_interval_ms">1000</integer>
- <integer name="attach_get_project_config_retries">3</integer>
+ <integer name="attach_step_interval_ms">1000</integer>
+ <integer name="attach_get_project_config_retries">2</integer>
<integer name="attach_login_retries">5</integer>
<integer name="attach_creation_retries">5</integer>
<integer name="attach_attach_retries">5</integer>
<integer name="attach_acctmgr_retries">5</integer>
- <!-- configuration on tab layout -->
- <bool name="tab_status">true</bool>
- <bool name="tab_projects">true</bool>
- <bool name="tab_tasks">true</bool>
- <bool name="tab_notices">true</bool>
- <bool name="tab_preferences">true</bool>
- <!-- configuration on status layout -->
- <integer name="status_min_screen_height_for_slideshow_px">400</integer>
- <integer name="status_min_screen_height_for_image_px">700</integer>
- <integer name="status_max_slideshow_images_per_project">15</integer>
<!-- configuration on tasks layout -->
<integer name="tasks_transistion_timeout_number_monitor_loops">15</integer>
<!-- shutdown -->
<integer name="shutdown_graceful_rpc_check_rate_ms">1000</integer>
- <integer name="shutdown_graceful_rpc_check_attempts">10</integer>
+ <integer name="shutdown_graceful_rpc_check_attempts">5</integer>
<integer name="shutdown_graceful_os_check_rate_ms">1000</integer>
- <integer name="shutdown_graceful_os_check_attempts">30</integer>
+ <integer name="shutdown_graceful_os_check_attempts">5</integer>
<!-- eventlog -->
<integer name="eventlog_gui_messages">100</integer>
<!-- preferences -->
@@ -84,4 +79,10 @@
<item>cpu_sched_debug</item>
<item>work_fetch_debug</item>
</string-array>
+ <!-- account manager -->
+ <string-array name="acct_mgr_url_list" translatable="false">
+ <item>http://bam.boincstats.com/</item>
+ <item>http://gridrepublic.org/</item>
+ <item>http://www.extremadurathome.org/extremadurathome/</item>
+ </string-array>
</resources>
diff --git a/android/BOINC/res/values/strings.xml b/android/BOINC/res/values/strings.xml
index e7ba8a1..5552794 100644
--- a/android/BOINC/res/values/strings.xml
+++ b/android/BOINC/res/values/strings.xml
@@ -18,22 +18,51 @@
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
- <!-- app global -->
+
+ <!-- app global -->
<string name="app_name">BOINC</string>
-
+
<!-- generic. used by multiple Activities/tabs -->
<string name="generic_loading">Loading! Please wait…</string>
-
+ <string name="generic_button_continue">Continue</string>
+ <string name="generic_button_finish">Finish</string>
+
<!-- attach project -->
- <!-- project list -->
- <string name="attachproject_list_header">Choose a project:</string>
+ <!-- selection list -->
+ <string name="attachproject_list_desc">Select scientific projects you want to contribute in:</string>
+ <string name="attachproject_list_header">Choose a project</string>
<string name="attachproject_list_manual_button">Add project by URL</string>
<string name="attachproject_list_manual_dialog_title">Enter project URL:</string>
<string name="attachproject_list_manual_dialog_button">Add project</string>
<string name="attachproject_list_manual_no_url">Please enter project URL</string>
<string name="attachproject_list_acctmgr_button">Add account manager</string>
<string name="attachproject_list_no_internet">No Internet connection</string>
- <!-- project login -->
+ <!-- credential input -->
+ <string name="attachproject_credential_input_sing_desc">Enter account information</string>
+ <string name="attachproject_credential_input_desc">Enter account information for selected projects:</string>
+ <string name="attachproject_credential_input_show_pwd">Show password</string>
+ <string name="attachproject_individual_credential_input">Attach projects individually</string>
+ <!-- conflicts -->
+ <string name="attachproject_conflicts_desc">There have been problems attaching scientific projects:</string>
+ <string name="attachproject_conflict_undefined">Could not connect</string>
+ <string name="attachproject_conflict_not_unique">Account exists with different password</string>
+ <string name="attachproject_conflict_bad_password">Password incorrect</string>
+ <string name="attachproject_conflict_unknown_user">Account does not exist</string>
+ <string name="attachproject_conflict_unknown_user_creation_disabled">Account does not exist, visit project website to register</string>
+ <!-- working -->
+ <string name="attachproject_working_attaching">Attaching</string> <!-- e.g. Attaching Einstein at Home -->
+ <!-- hints -->
+ <string name="attachproject_hints_header">Hint</string> <!-- e.g. Hint 1/2 -->
+ <string name="attachproject_hint_contribtion_header">How to contribute:</string>
+ <string name="attachproject_hint_contribtion_wifi">1. Connect to WiFi</string>
+ <string name="attachproject_hint_contribtion_charger">2. Plug in Charger</string>
+ <string name="attachproject_hint_contribtion_screen">3. Turn off Screen</string>
+ <string name="attachproject_hint_projectwebsite_header">Visit project websites to:</string>
+ <string name="attachproject_hint_projectwebsite_science">Learn more about the science</string>
+ <string name="attachproject_hint_projectwebsite_stats">View contribtion statistics</string>
+ <string name="attachproject_hint_projectwebsite_community">Get in touch with other volunteers</string>
+ <string name="attachproject_hint_platforms_header">BOINC is also available for your computer or laptop, visit boinc.berkeley.edu to learn more.</string>
+ <!-- project login -->
<string name="attachproject_login_loading">Contacting project server…</string>
<string name="attachproject_login_image_description">Project logo.</string>
<string name="attachproject_login_header_general_area">General area:</string>
@@ -59,7 +88,7 @@
<string name="attachproject_login_button_forgotpw">Forgot Password</string>
<string name="attachproject_login_error_toast">Contacting project failed!</string>
<string name="attachproject_login_attached">Attached</string>
- <!-- project registration -->
+ <!-- project registration -->
<string name="attachproject_registration_header">Account registration for </string>
<string name="attachproject_registration_header_url">Project:</string>
<string name="attachproject_registration_header_email">eMail:</string>
@@ -68,18 +97,19 @@
<string name="attachproject_registration_header_pwd">Password:</string>
<string name="attachproject_registration_header_pwd_confirm">… Retype:</string>
<string name="attachproject_registration_button">Create</string>
- <!-- account manager -->
+ <!-- account manager -->
<string name="attachproject_acctmgr_header">Add account manager</string>
<string name="attachproject_acctmgr_header_url">URL</string>
<string name="attachproject_acctmgr_header_name">User:</string>
<string name="attachproject_acctmgr_header_pwd">Password:</string>
<string name="attachproject_acctmgr_header_pwd_confirm">… Retype:</string>
<string name="attachproject_acctmgr_button">Add</string>
- <!-- error strings -->
+ <!-- error strings -->
<string name="attachproject_error_wrong_name">User not found</string>
<string name="attachproject_error_short_pwd">Password too short</string>
<string name="attachproject_error_no_internet">Connection failure</string>
<string name="attachproject_error_pwd_no_match">Passwords do not match</string>
+ <string name="attachproject_error_pwd_no_retype">Please type password again</string>
<string name="attachproject_error_no_url">Please enter URL</string>
<string name="attachproject_error_no_email">Please enter eMail address</string>
<string name="attachproject_error_no_pwd">Please enter a password</string>
@@ -92,7 +122,7 @@
<string name="attachproject_error_bad_pwd">Password refused</string>
<string name="attachproject_error_creation_disabled">Account creation is disabled on this project</string>
<string name="attachproject_error_invalid_url">Invalid URL</string>
- <!-- working activity -->
+ <!-- working activity -->
<string name="attachproject_working_back_button">Back</string>
<string name="attachproject_working_finish_button">Finish</string>
<string name="attachproject_working_check_desc">Successful</string>
@@ -106,13 +136,13 @@
<string name="attachproject_working_login">Log in</string>
<string name="attachproject_working_acctmgr">Add account manager</string>
<string name="attachproject_working_acctmgr_sync">Synchronize</string>
-
+
<!-- main activity -->
<string name="main_noproject_warning">Tap here to choose a project.</string>
<string name="main_error">Whooops</string>
<string name="main_error_long">…this should not happen!\nClick on the icon to try again.</string>
<string name="main_title_icon_desc">BOINC icon</string>
-
+
<!-- tab names -->
<string name="tab_status">Status</string>
<string name="tab_projects">Projects</string>
@@ -121,7 +151,7 @@
<string name="tab_preferences">Preferences</string>
<string name="tab_notices">Notices</string>
<string name="tab_desc">Navigation</string>
-
+
<!-- status strings -->
<string name="status_running">Computing</string>
<string name="status_running_long">Thank you for participating.</string>
@@ -135,161 +165,164 @@
<string name="status_closing">Closing…</string>
<string name="status_benchmarking">Benchmarking…</string>
<string name="status_image_description">project image</string>
-
- <!-- preferences tab strings -->
- <string name="prefs_loading">Reading preferences…</string>
- <string name="prefs_submit_button">Save</string>
- <string name="prefs_dialog_title">Enter new value:</string>
- <string name="prefs_dialog_title_selection">Select:</string>
- <string name="prefs_category_general">General</string>
- <string name="prefs_category_network">Network</string>
- <string name="prefs_category_power">Power</string>
- <string name="prefs_category_cpu">CPU</string>
- <string name="prefs_category_storage">Storage</string>
- <string name="prefs_category_memory">Memory</string>
- <string name="prefs_category_debug">Debug</string>
-
- <string name="prefs_show_advanced_header">Show advanced preferences and controls…</string>
+
+ <!-- preferences tab strings -->
+ <string name="prefs_loading">Reading preferences…</string>
+ <string name="prefs_submit_button">Save</string>
+ <string name="prefs_dialog_title">Enter new value:</string>
+ <string name="prefs_dialog_title_selection">Select:</string>
+ <string name="prefs_category_general">General</string>
+ <string name="prefs_category_network">Network</string>
+ <string name="prefs_category_power">Power</string>
+ <string name="prefs_category_cpu">CPU</string>
+ <string name="prefs_category_storage">Storage</string>
+ <string name="prefs_category_memory">Memory</string>
+ <string name="prefs_category_debug">Debug</string>
+ <string name="prefs_show_advanced_header">Show advanced preferences and controls…</string>
+ <string name="prefs_suspend_when_screen_on">Pause computation when screen is on</string>
<string name="prefs_stationary_device_mode_header">Stationary device mode</string>
<string name="prefs_stationary_device_mode_description">Allows computation regardless of Power preferences. Only enable if device does not have a battery.</string>
- <string name="prefs_power_source_header">Power sources for computation</string>
- <string name="prefs_power_source_description">Selects power sources BOINC is allowed to use for computation.</string>
- <string name="prefs_power_source_ac">Wall socket</string>
- <string name="prefs_power_source_usb">USB connection</string>
- <string name="prefs_power_source_wireless">Wireless charger</string>
- <string name="prefs_power_source_battery">Battery</string>
- <string name="battery_charge_min_pct_header">Min. battery level</string>
- <string name="battery_charge_min_pct_description">BOINC suspends computation below defined battery charge level.</string>
- <string name="battery_temperature_max_header">Max. battery temperature</string>
- <string name="battery_temperature_max_description">BOINC suspends computation above defined battery temperature. It is not recommended to change this value.</string>
- <string name="prefs_disk_max_pct_header">Max. used storage space</string>
- <string name="prefs_disk_max_pct_description">How many percent of your device\'s storage space is BOINC allowed to use?</string>
- <string name="prefs_disk_min_free_gb_header">Min. spare storage</string>
- <string name="prefs_disk_min_free_gb_description">How much of your device\'s storage space shall stay free?</string>
- <string name="prefs_network_daily_xfer_limit_mb_header">Daily transfer limit</string>
- <string name="prefs_network_daily_xfer_limit_mb_description">Limits the daily data traffic caused by BOINC.</string>
- <string name="prefs_network_wifi_only_header">Transfer tasks on WiFi only</string>
- <string name="prefs_autostart_header">Autostart</string>
- <string name="prefs_show_notification_header">Show notification when suspended</string>
- <string name="prefs_cpu_number_cpus_header">Used CPU cores</string>
- <string name="prefs_cpu_number_cpus_description">Limits the number of CPU cores BOINC uses for computation.</string>
- <string name="prefs_cpu_other_load_suspension_header">Pause at CPU usage above</string>
- <string name="prefs_cpu_other_load_suspension_description">Determines when BOINC pauses computation due to other app\'s CPU usage.</string>
- <string name="prefs_cpu_time_max_header">CPU limit</string>
- <string name="prefs_cpu_time_max_description">Limits the CPU time BOINC uses for computation.</string>
- <string name="prefs_memory_max_idle_header">RAM limit</string>
- <string name="prefs_memory_max_idle_description">Limits the amount of RAM tasks are allowed to occupy.</string>
- <string name="prefs_client_log_flags_header">BOINC Client log flags</string>
- <string name="prefs_gui_log_level_header">GUI log level</string>
- <string name="prefs_gui_log_level_description">Specifies verbosity of GUI log messages.</string>
-
- <string name="prefs_unit_mb">MB</string>
- <string name="prefs_unit_gb">GB</string>
- <string name="prefs_unit_pct">%</string>
- <string name="prefs_unit_celcius">°C</string>
-
- <!-- projects tab strings -->
- <string name="projects_loading">Reading projects…</string>
- <string name="projects_add">Add project</string>
- <string name="projects_icon">Project icon</string>
- <string name="projects_credits_header">Credit:</string>
- <string name="projects_credits_host_header">(on this device)</string>
- <string name="projects_credits_user_header">(total)</string>
- <!-- project status strings -->
- <string name="projects_status_suspendedviagui">Suspended by user</string>
- <string name="projects_status_dontrequestmorework">Won\'t get new tasks</string>
- <string name="projects_status_ended">Project ended - OK to remove</string>
- <string name="projects_status_detachwhendone">Will remove when tasks done</string>
- <string name="projects_status_schedrpcpending">Scheduler request pending</string>
- <string name="projects_status_schedrpcinprogress">Scheduler request in progress</string>
- <string name="projects_status_trickleuppending">Trickle up message pending</string>
- <string name="projects_status_backoff">Communication scheduled in:</string>
- <!-- project controls -->
- <string name="projects_control_dialog_title">Project commands:</string>
- <string name="projects_control_visit_website">Visit website</string>
- <string name="projects_control_update">Update</string>
- <string name="projects_control_remove">Remove</string>
- <string name="projects_control_suspend">Suspend</string>
- <string name="projects_control_resume">Resume</string>
- <string name="projects_control_nonewtasks">No new tasks</string>
- <string name="projects_control_allownewtasks">Allow new tasks</string>
- <string name="projects_control_reset">Reset</string>
- <string name="projects_control_dialog_title_acctmgr">Account manager commands:</string>
- <string name="projects_control_sync_acctmgr">Synchronize</string>
- <string name="projects_control_remove_acctmgr">Disable</string>
- <!-- project confirm dialog -->
- <string name="projects_confirm_detach_title">Remove project?</string>
- <string name="projects_confirm_detach_message">Are you sure you want to remove</string>
- <string name="projects_confirm_detach_message2">from BOINC?</string>
- <string name="projects_confirm_detach_confirm">Remove</string>
- <string name="projects_confirm_reset_title">Reset project</string>
- <string name="projects_confirm_reset_message">Are you sure you want to reset</string>
- <string name="projects_confirm_reset_message2">\?</string>
- <string name="projects_confirm_reset_confirm">Reset</string>
- <string name="projects_confirm_remove_acctmgr_title">Disable account manager</string>
- <string name="projects_confirm_remove_acctmgr_message">Are you sure you want to stop using</string>
- <string name="projects_confirm_remove_acctmgr_message2">\?</string>
- <string name="projects_confirm_remove_acctmgr_confirm">Disable</string>
-
- <!-- tasks tab strings -->
- <string name="tasks_header_name">Task Name:</string>
- <string name="tasks_header_elapsed_time">Elapsed time:</string>
- <string name="tasks_header_project_paused">(suspended)</string>
- <string name="tasks_header_deadline">Deadline:</string>
- <string name="tasks_result_new">new</string>
- <string name="tasks_result_files_downloading">waiting for download</string>
- <string name="tasks_result_files_downloaded">download complete</string>
- <string name="tasks_result_compute_error">computation error</string>
- <string name="tasks_result_files_uploading">uploading</string>
- <string name="tasks_result_files_uploaded">upload complete</string>
- <string name="tasks_result_aborted">aborted</string>
- <string name="tasks_result_upload_failed">upload failed</string>
- <string name="tasks_active_uninitialized">ready</string>
- <string name="tasks_active_executing">running</string>
- <string name="tasks_active_suspended">suspended</string>
- <string name="tasks_active_abort_pending">suspending</string>
- <string name="tasks_active_quit_pending">suspending</string>
- <string name="tasks_custom_suspended_via_gui">suspended</string>
- <string name="tasks_custom_project_suspended_via_gui">project suspended</string>
- <string name="tasks_custom_ready_to_report">ready to report</string>
+ <string name="prefs_power_source_header">Power sources for computation</string>
+ <string name="prefs_power_source_description">Selects power sources BOINC is allowed to use for computation.</string>
+ <string name="prefs_power_source_ac">Wall socket</string>
+ <string name="prefs_power_source_usb">USB connection</string>
+ <string name="prefs_power_source_wireless">Wireless charger</string>
+ <string name="prefs_power_source_battery">Battery</string>
+ <string name="battery_charge_min_pct_header">Min. battery level</string>
+ <string name="battery_charge_min_pct_description">BOINC suspends computation below defined battery charge level.</string>
+ <string name="battery_temperature_max_header">Max. battery temperature</string>
+ <string name="battery_temperature_max_description">BOINC suspends computation above defined battery temperature. It is not recommended to change this value.</string>
+ <string name="prefs_disk_max_pct_header">Max. used storage space</string>
+ <string name="prefs_disk_max_pct_description">How many percent of your device\'s storage space is BOINC allowed to use?</string>
+ <string name="prefs_disk_min_free_gb_header">Min. spare storage</string>
+ <string name="prefs_disk_min_free_gb_description">How much of your device\'s storage space shall stay free?</string>
+ <string name="prefs_disk_access_interval_header">Access interval</string>
+ <string name="prefs_disk_access_interval_description">Suggests an interval between disk accesses</string>
+ <string name="prefs_network_daily_xfer_limit_mb_header">Daily transfer limit</string>
+ <string name="prefs_network_daily_xfer_limit_mb_description">Limits the daily data traffic caused by BOINC.</string>
+ <string name="prefs_network_wifi_only_header">Transfer tasks on WiFi only</string>
+ <string name="prefs_autostart_header">Autostart</string>
+ <string name="prefs_show_notification_notices_header">Show notification for new notices</string>
+ <string name="prefs_show_notification_suspended_header">Show notification when suspended</string>
+ <string name="prefs_cpu_number_cpus_header">Used CPU cores</string>
+ <string name="prefs_cpu_number_cpus_description">Limits the number of CPU cores BOINC uses for computation.</string>
+ <string name="prefs_cpu_other_load_suspension_header">Pause at CPU usage above</string>
+ <string name="prefs_cpu_other_load_suspension_description">Determines when BOINC pauses computation due to other app\'s CPU usage.</string>
+ <string name="prefs_cpu_time_max_header">CPU limit</string>
+ <string name="prefs_cpu_time_max_description">Limits the CPU time BOINC uses for computation.</string>
+ <string name="prefs_memory_max_idle_header">RAM limit</string>
+ <string name="prefs_memory_max_idle_description">Limits the amount of RAM tasks are allowed to occupy.</string>
+ <string name="prefs_client_log_flags_header">BOINC Client log flags</string>
+ <string name="prefs_gui_log_level_header">GUI log level</string>
+ <string name="prefs_gui_log_level_description">Specifies verbosity of GUI log messages.</string>
+ <string name="prefs_unit_mb">MB</string>
+ <string name="prefs_unit_gb">GB</string>
+ <string name="prefs_unit_pct">%</string>
+ <string name="prefs_unit_celcius">°C</string>
+ <string name="prefs_unit_seconds">s</string>
+
+ <!-- projects tab strings -->
+ <string name="projects_loading">Reading projects…</string>
+ <string name="projects_add">Add project</string>
+ <string name="projects_icon">Project icon</string>
+ <string name="projects_credits_header">Credit:</string>
+ <string name="projects_credits_host_header">(on this device)</string>
+ <string name="projects_credits_user_header">(total)</string>
+ <!-- project status strings -->
+ <string name="projects_status_suspendedviagui">Suspended by user</string>
+ <string name="projects_status_dontrequestmorework">Won\'t get new tasks</string>
+ <string name="projects_status_ended">Project ended - OK to remove</string>
+ <string name="projects_status_detachwhendone">Will remove when tasks done</string>
+ <string name="projects_status_schedrpcpending">Scheduler request pending</string>
+ <string name="projects_status_schedrpcinprogress">Scheduler request in progress</string>
+ <string name="projects_status_trickleuppending">Trickle up message pending</string>
+ <string name="projects_status_backoff">Communication scheduled in:</string>
+ <!-- project controls -->
+ <string name="projects_control_dialog_title">Project commands:</string>
+ <string name="projects_control_visit_website">Visit website</string>
+ <string name="projects_control_update">Update</string>
+ <string name="projects_control_remove">Remove</string>
+ <string name="projects_control_suspend">Suspend</string>
+ <string name="projects_control_resume">Resume</string>
+ <string name="projects_control_nonewtasks">No new tasks</string>
+ <string name="projects_control_allownewtasks">Allow new tasks</string>
+ <string name="projects_control_reset">Reset</string>
+ <string name="projects_control_dialog_title_acctmgr">Account manager commands:</string>
+ <string name="projects_control_sync_acctmgr">Synchronize</string>
+ <string name="projects_control_remove_acctmgr">Disable</string>
+ <!-- project confirm dialog -->
+ <string name="projects_confirm_detach_title">Remove project?</string>
+ <string name="projects_confirm_detach_message">Are you sure you want to remove</string>
+ <string name="projects_confirm_detach_message2">from BOINC?</string>
+ <string name="projects_confirm_detach_confirm">Remove</string>
+ <string name="projects_confirm_reset_title">Reset project</string>
+ <string name="projects_confirm_reset_message">Are you sure you want to reset</string>
+ <string name="projects_confirm_reset_message2">\?</string>
+ <string name="projects_confirm_reset_confirm">Reset</string>
+ <string name="projects_confirm_remove_acctmgr_title">Disable account manager</string>
+ <string name="projects_confirm_remove_acctmgr_message">Are you sure you want to stop using</string>
+ <string name="projects_confirm_remove_acctmgr_message2">\?</string>
+ <string name="projects_confirm_remove_acctmgr_confirm">Disable</string>
+
+ <!-- tasks tab strings -->
+ <string name="tasks_header_name">Task Name:</string>
+ <string name="tasks_header_elapsed_time">Elapsed time:</string>
+ <string name="tasks_header_project_paused">(suspended)</string>
+ <string name="tasks_header_deadline">Deadline:</string>
+ <string name="tasks_result_new">new</string>
+ <string name="tasks_result_files_downloading">waiting for download</string>
+ <string name="tasks_result_files_downloaded">download complete</string>
+ <string name="tasks_result_compute_error">computation error</string>
+ <string name="tasks_result_files_uploading">uploading</string>
+ <string name="tasks_result_files_uploaded">upload complete</string>
+ <string name="tasks_result_aborted">aborted</string>
+ <string name="tasks_result_upload_failed">upload failed</string>
+ <string name="tasks_active_uninitialized">ready</string>
+ <string name="tasks_active_executing">running</string>
+ <string name="tasks_active_suspended">suspended</string>
+ <string name="tasks_active_abort_pending">suspending</string>
+ <string name="tasks_active_quit_pending">suspending</string>
+ <string name="tasks_custom_suspended_via_gui">suspended</string>
+ <string name="tasks_custom_project_suspended_via_gui">project suspended</string>
+ <string name="tasks_custom_ready_to_report">ready to report</string>
- <!-- confirmation dialog -->
- <string name="confirm_abort_task_title">Abort task?</string>
- <string name="confirm_abort_task_message">Abort task:</string>
- <string name="confirm_abort_task_confirm">Abort</string>
- <string name="confirm_cancel">Cancel</string>
- <string name="confirm_image_desc">Confirmation dialog</string>
-
- <!-- transfers tab strings -->
- <string name="trans_loading">Reading transfers…</string>
- <string name="trans_upload">Upload</string>
- <string name="trans_download">Download</string>
- <string name="trans_retryin">retry in</string>
- <string name="trans_failed">failed</string>
- <string name="trans_suspended">suspended</string>
- <string name="trans_active">active</string>
- <string name="trans_pending">pending</string>
- <string name="trans_projectbackoff">project backoff</string>
- <string name="trans_header_name">File:</string>
- <string name="trans_control_retry">Retry transfers</string>
-
- <string name="confirm_abort_trans_title">Abort transfer?</string>
- <string name="confirm_abort_trans_message">Abort File:</string>
- <string name="confirm_abort_trans_confirm">Abort</string>
-
- <!-- notices tab strings -->
- <string name="notices_loading">Reading notices…</string>
-
- <!-- eventlog tab strings -->
- <string name="eventlog_loading">Loading log messages…</string>
- <string name="eventlog_client_header">Client Messages</string>
- <string name="eventlog_gui_header">GUI Messages</string>
- <string name="eventlog_copy_toast">Log copied to clipboard.</string>
- <string name="eventlog_email_subject">Event Log for BOINC on Android:</string>
+ <!-- confirmation dialog -->
+ <string name="confirm_abort_task_title">Abort task?</string>
+ <string name="confirm_abort_task_message">Abort task:</string>
+ <string name="confirm_abort_task_confirm">Abort</string>
+ <string name="confirm_cancel">Cancel</string>
+ <string name="confirm_image_desc">Confirmation dialog</string>
+
+ <!-- transfers tab strings -->
+ <string name="trans_loading">Reading transfers…</string>
+ <string name="trans_upload">Upload</string>
+ <string name="trans_download">Download</string>
+ <string name="trans_retryin">retry in</string>
+ <string name="trans_failed">failed</string>
+ <string name="trans_suspended">suspended</string>
+ <string name="trans_active">active</string>
+ <string name="trans_pending">pending</string>
+ <string name="trans_projectbackoff">project backoff</string>
+ <string name="trans_header_name">File:</string>
+ <string name="trans_control_retry">Retry transfers</string>
+ <string name="confirm_abort_trans_title">Abort transfer?</string>
+ <string name="confirm_abort_trans_message">Abort File:</string>
+ <string name="confirm_abort_trans_confirm">Abort</string>
+
+ <!-- notices tab strings -->
+ <string name="notices_loading">Reading notices…</string>
+
+ <!-- eventlog tab strings -->
+ <string name="eventlog_loading">Loading log messages…</string>
+ <string name="eventlog_client_header">Client Messages</string>
+ <string name="eventlog_gui_header">GUI Messages</string>
+ <string name="eventlog_copy_toast">Log copied to clipboard.</string>
+ <string name="eventlog_email_subject">Event Log for BOINC on Android:</string>
<!-- suspend reasons -->
<string name="suspend_unknown">Computation suspended.</string>
<string name="suspend_batteries">Connect your device to a charger to continue computing.</string>
+ <string name="suspend_screen_on">Turn screen off to continue computing.</string>
<string name="suspend_useractive">User is active.</string>
<string name="suspend_tod">Out of computation time-frame.</string>
<string name="suspend_bm">BOINC is benchmarking your device…</string>
@@ -309,7 +342,7 @@
<string name="suspend_battery_overheating">Waiting for battery to cool down</string>
<string name="suspend_user_req">Resuming computation…</string>
<string name="suspend_network_user_req">manually.</string>
-
+
<!-- rpc reasons -->
<string name="rpcreason_userreq">Requested by user</string>
<string name="rpcreason_needwork">To fetch work</string>
@@ -319,7 +352,7 @@
<string name="rpcreason_init">Project initialization</string>
<string name="rpcreason_projectreq">Requested by project</string>
<string name="rpcreason_unknown">Unknown reason</string>
-
+
<!-- menu -->
<string name="menu_refresh">Refresh</string>
<string name="menu_emailto">Send as Email</string>
@@ -330,13 +363,25 @@
<string name="menu_run_mode_enable">Resume</string>
<string name="menu_about">About</string>
<string name="menu_help">Help</string>
-
+
<!-- about dialog -->
<string name="about_button">Return</string>
<string name="about_title">About</string>
<string name="about_name">BOINC</string>
<string name="about_version">Version</string>
<string name="about_name_long">Berkeley Open Infrastructure for Network Computing</string>
- <string name="about_copyright">\u00A9 2003–2013 University of California, Berkeley.\nAll Rights Reserved.</string>
-
+ <string name="about_copyright">\u00A9 2003–2014 University of California, Berkeley.</string>
+ <string name="about_copyright_reserved">All Rights Reserved.</string>
+ <string name="about_credits">Thanks to the Max Planck Institute for Gravitational Physics, IBM Corporation and HTC Corporation for their support.</string>
+
+ <!-- notice notification -->
+ <string name="notice_notification_single_header">New notice from</string> <!-- e.g. New notice from SETI at HOME -->
+ <string name="notice_notification_multiple_header">new notices</string> <!-- e.g. 3 new notices -->
+
+ <!-- Power To Give compitability -->
+ <string name="ptg_dialog_header">Power To Give detected</string>
+ <string name="ptg_dialog_text">Your device has installed Power To Give. Do you want to launch Power To Give?</string>
+ <string name="ptg_dialog_launch">Launch</string>
+ <string name="ptg_dialog_exit">Exit</string>
+
</resources>
diff --git a/android/BOINC/res/values/theme.xml b/android/BOINC/res/values/theme.xml
index dceed95..67006bf 100644
--- a/android/BOINC/res/values/theme.xml
+++ b/android/BOINC/res/values/theme.xml
@@ -17,29 +17,37 @@
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <style name="Theme" parent="android:Theme">
- <item name="android:background">@color/white_smoke</item>
+ <!-- All styles declared here are for the support library compatibility.
+ Style properties for API version 14+ can be found at values-14/theme.xml -->
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <style name="Theme.Styled" parent="@style/Theme.AppCompat.Light.DarkActionBar">
+ <item name="actionBarStyle">@style/StyledActionBar</item>
+ <item name="actionBarTabStyle">@style/StyledActionBarTabView</item>
+ <item name="actionMenuTextColor">@android:color/white</item>
+ <item name="android:itemBackground">@color/dark_blue</item>
+ <item name="android:windowBackground">@color/white</item>
<item name="android:textColor">@color/black</item>
- <item name="android:windowTitleSize">35dp</item>
- <item name="android:windowTitleStyle">@style/CustomWindowTitle</item>
- <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
- <item name="android:listViewStyle">@style/CustomListView</item>
- <item name="android:panelFullBackground">@color/dark_blue_transparent</item>
</style>
- <!-- title bar -->
- <style name="CustomWindowTitle">
- <item name="android:singleLine">true</item>
- <item name="android:shadowDx">0</item>
- <item name="android:shadowDy">0</item>
- <item name="android:shadowRadius">5</item>
- <item name="android:shadowColor">#1155CC</item>
- </style>
- <style name="CustomWindowTitleBackground">
- <item name="android:background">@color/black</item>
+ <style name="Theme.Styled.NoActionBar" parent="Theme.Styled">
+ <item name="android:windowNoTitle">true</item>
+ </style>
+
+ <style name="StyledActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
+ <item name="background">@drawable/shape_dark_blue_gradient_background</item>
+ <item name="backgroundStacked">@color/dark_blue</item>
+ <item name="titleTextStyle">@style/StyledActionBarTitleText</item>
+ </style>
+
+ <style name="StyledActionBarTabView" parent="@style/Widget.AppCompat.ActionBar.TabView">
+ <item name="android:gravity">center</item>
</style>
+
+ <style name="StyledActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
+ <item name="android:textColor">@android:color/white</item>
+ </style>
<!-- sub header -->
<style name="SubHeader">
diff --git a/android/BOINC/src/edu/berkeley/boinc/AppPreferences.java b/android/BOINC/src/edu/berkeley/boinc/AppPreferences.java
deleted file mode 100644
index afd79ff..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/AppPreferences.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-public class AppPreferences {
-
- private final String PREFS = "PREFS";
- private SharedPreferences prefs;
-
- private Boolean autostart;
- private Boolean showNotification;
- private Boolean showAdvanced;
- private Integer logLevel;
- private Boolean powerSourceAc;
- private Boolean powerSourceUsb;
- private Boolean powerSourceWireless;
- private Boolean stationaryDeviceMode; // disable battery status parsing
-
- public void readPrefs (Context ctx) {
- if(prefs == null) {
- prefs = ctx.getSharedPreferences(PREFS, 0);
- }
- //second parameter of reading function is the initial value after installation.
- autostart = prefs.getBoolean("autostart", ctx.getResources().getBoolean(R.bool.prefs_default_autostart));
- showNotification = prefs.getBoolean("showNotification", ctx.getResources().getBoolean(R.bool.prefs_default_notifications));
- showAdvanced = prefs.getBoolean("showAdvanced", ctx.getResources().getBoolean(R.bool.prefs_default_advanced));
- logLevel = prefs.getInt("logLevel", ctx.getResources().getInteger(R.integer.prefs_default_loglevel));
- Logging.setLogLevel(logLevel);
- powerSourceAc = prefs.getBoolean("powerSourceAc", ctx.getResources().getBoolean(R.bool.prefs_power_source_ac));
- powerSourceUsb = prefs.getBoolean("powerSourceUsb", ctx.getResources().getBoolean(R.bool.prefs_power_source_usb));
- powerSourceWireless = prefs.getBoolean("powerSourceWireless", ctx.getResources().getBoolean(R.bool.prefs_power_source_wireless));
- stationaryDeviceMode = prefs.getBoolean("stationaryDeviceMode", ctx.getResources().getBoolean(R.bool.prefs_stationary_device_mode));
-
- if(Logging.DEBUG) Log.d(Logging.TAG, "appPrefs read successful." + autostart + showNotification + showAdvanced + logLevel + powerSourceAc + powerSourceUsb + powerSourceWireless);
- }
-
- public void setAutostart(Boolean as) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("autostart", as);
- editor.commit();
- this.autostart = as;
- }
-
- public Boolean getAutostart () {
- return this.autostart;
- }
-
- public void setShowNotification(Boolean as) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("showNotification", as);
- editor.commit();
- this.showNotification = as;
- }
-
- public Boolean getShowNotification() {
- return this.showNotification;
- }
-
- public void setShowAdvanced(Boolean as) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("showAdvanced", as);
- editor.commit();
- this.showAdvanced = as;
- }
-
- public Boolean getShowAdvanced () {
- return this.showAdvanced;
- }
-
- public void setLogLevel(Integer logLevel) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt("logLevel", logLevel);
- editor.commit();
- this.logLevel = logLevel;
- Logging.setLogLevel(logLevel);
- }
-
- public Integer getLogLevel () {
- return this.logLevel;
- }
-
- public void setPowerSourceAc(Boolean ac) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("powerSourceAc", ac);
- editor.commit();
- this.powerSourceAc = ac;
- }
-
- public void setPowerSourceUsb(Boolean usb) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("powerSourceUsb", usb);
- editor.commit();
- this.powerSourceUsb = usb;
- }
-
- public void setPowerSourceWireless(Boolean wireless) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("powerSourceWireless", wireless);
- editor.commit();
- this.powerSourceWireless = wireless;
- }
-
- public Boolean getPowerSourceAc() {
- return this.powerSourceAc;
- }
-
- public Boolean getPowerSourceUsb() {
- return this.powerSourceUsb;
- }
-
- public Boolean getPowerSourceWireless() {
- return this.powerSourceWireless;
- }
-
- public void setStationaryDeviceMode(Boolean sdm) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean("stationaryDeviceMode", sdm);
- editor.commit();
- this.stationaryDeviceMode = sdm;
- }
-
- public Boolean getStationaryDeviceMode () {
- return this.stationaryDeviceMode;
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/AttachProjectAcctMgrActivity.java b/android/BOINC/src/edu/berkeley/boinc/AttachProjectAcctMgrActivity.java
deleted file mode 100644
index 924c786..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/AttachProjectAcctMgrActivity.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
-import android.widget.EditText;
-import android.widget.TextView;
-
-public class AttachProjectAcctMgrActivity extends Activity{
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAcctMgrActivity onCreate");
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- // setup layout
- setContentView(R.layout.attach_project_acctmgr_layout);
-
- // set title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAcctMgrActivity onDestroy");
- super.onDestroy();
- }
-
- // onclick of button
- public void addAcctMgrClick(View view) {
- // get user input
- EditText urlInput = (EditText) findViewById(R.id.url_input);
- EditText nameInput = (EditText) findViewById(R.id.name_input);
- EditText pwdInput = (EditText) findViewById(R.id.pwd_input);
- EditText pwdConfirmInput = (EditText) findViewById(R.id.pwd_confirm_input);
- String url = urlInput.getText().toString();
- String name = nameInput.getText().toString();
- String pwd = pwdInput.getText().toString();
- String pwdConfirm = pwdConfirmInput.getText().toString();
-
- // verify and start AttachProjectWorkingActivity
- if(verifyInput(url, name, pwd, pwdConfirm)){
- Intent intent = new Intent(this, AttachProjectWorkingActivity.class);
- intent.putExtra("action", AttachProjectWorkingActivity.ACTION_ACCTMGR);
- intent.putExtra("projectUrl", url);
- intent.putExtra("userName", name);
- intent.putExtra("pwd", pwd);
- startActivity(intent);
- }
- }
-
- private Boolean verifyInput(String url, String name, String pwd, String pwdConfirm) {
- int stringResource = R.string.attachproject_error_unknown;
- Boolean success = true;
-
- // check input
- if(url.length() == 0) {
- stringResource = R.string.attachproject_error_no_url;
- success = false;
- }
- else if(name.length() == 0) {
- stringResource = R.string.attachproject_error_no_name;
- success = false;
- }
- else if(pwd.length() == 0) {
- stringResource = R.string.attachproject_error_no_pwd;
- success = false;
- }
- else if(!pwd.equals(pwdConfirm)) {
- stringResource = R.string.attachproject_error_pwd_no_match;
- success = false;
- }
-
- // show warning
- TextView warning = (TextView) findViewById(R.id.warning);
- if(!success) {
- warning.setText(stringResource);
- warning.setVisibility(View.VISIBLE);
- } else {
- // making sure previous warnings are gone
- warning.setVisibility(View.GONE);
- }
-
- return success;
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/AttachProjectListActivity.java b/android/BOINC/src/edu/berkeley/boinc/AttachProjectListActivity.java
deleted file mode 100644
index c7a468d..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/AttachProjectListActivity.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import java.util.ArrayList;
-import edu.berkeley.boinc.adapter.AttachProjectListAdapter;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
-import edu.berkeley.boinc.rpc.ProjectInfo;
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.Intent;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-public class AttachProjectListActivity extends Activity implements android.view.View.OnClickListener{
-
- private ListView lv;
- private AttachProjectListAdapter listAdapter;
- private Dialog manualUrlInputDialog;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectListActivity onCreate");
-
- //get supported projects
- // try to get current client status from monitor
- ClientStatus status;
- ArrayList<ProjectInfo> data = new ArrayList<ProjectInfo>();
- try{
- status = Monitor.getClientStatus();
- data = status.getSupportedProjects();
- if(Logging.DEBUG) Log.d(Logging.TAG,"monitor.getAndroidProjectsList returned with " + data.size() + " elements");
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"AttachProjectListActivity: Could not load supported projects, clientStatus not initialized.");
- finish();
- return;
- }
-
- // setup layout
- setContentView(R.layout.attach_project_list_layout);
- lv = (ListView) findViewById(R.id.listview);
- listAdapter = new AttachProjectListAdapter(AttachProjectListActivity.this,R.id.listview,data);
- lv.setAdapter(listAdapter);
-
- // disable "add account manager" button, if account manager already present
- if(status.getAcctMgrInfo().present) {
- Button addAcctMgrButton = (Button) findViewById(R.id.accountManagerButton);
- addAcctMgrButton.setVisibility(View.GONE);
- }
-
- // set title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "AttachProjectListActivity onDestroy");
- super.onDestroy();
- }
-
- // check whether device is online before starting connection attempt
- // as needed for AttachProjectLoginActivity (retrieval of ProjectConfig)
- // note: available internet does not imply connection to project server
- // is possible!
- private Boolean checkDeviceOnline() {
- ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
- return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
- }
-
- // get called by manual input list item
- public void manualUrlItem(View view) {
- //if(Logging.DEBUG) Log.d(Logging.TAG,"manualUrlItem");
- //show dialog
- showDialog(view.getId());
- }
-
- // gets called by showDialog
- @Override
- protected Dialog onCreateDialog(int id) {
- manualUrlInputDialog = new Dialog(this); //instance new dialog
- manualUrlInputDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- manualUrlInputDialog.setContentView(R.layout.attach_project_list_layout_manual_dialog);
- Button button = (Button) manualUrlInputDialog.findViewById(R.id.buttonUrlSubmit);
- button.setOnClickListener(this);
- ((TextView)manualUrlInputDialog.findViewById(R.id.title)).setText(R.string.attachproject_list_manual_dialog_title);
- return manualUrlInputDialog;
- }
-
- // gets called by account manager button click
- public void onAcctMgrClick(View v) {
- Intent intent = new Intent(this, AttachProjectAcctMgrActivity.class);
- startActivity(intent);
- }
-
- // gets called by dialog button
- @Override
- public void onClick(View v) {
- try {
- String url = ((EditText)manualUrlInputDialog.findViewById(R.id.Input)).getText().toString();
-
- if(url == null) { // error while parsing
- showErrorToast(R.string.attachproject_list_manual_no_url);
- }
- else if(url.length()== 0) { //nothing in edittext
- showErrorToast(R.string.attachproject_list_manual_no_url);
- }
- else if(!checkDeviceOnline()) {
- showErrorToast(R.string.attachproject_list_no_internet);
- } else {
- manualUrlInputDialog.dismiss();
- startAttachProjectLoginActivity(null, url);
- }
- } catch (Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG,"error parsing edit text",e);
- }
- }
-
- // gets called by project list item
- public void onProjectClick(View view) {
- if(!checkDeviceOnline()) {
- showErrorToast(R.string.attachproject_list_no_internet);
- return;
- }
- try {
- ProjectInfo project = (ProjectInfo) view.getTag();
- startAttachProjectLoginActivity(project, null);
- } catch (Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG,"error parsing view tag",e);
- showErrorToast(R.string.attachproject_list_manual_no_url);
- }
- }
-
- private void startAttachProjectLoginActivity(ProjectInfo project, String url) {
- Intent intent = new Intent(this, AttachProjectLoginActivity.class);
- intent.putExtra("projectInfo", project);
- intent.putExtra("url", url);
- startActivity(intent);
- }
-
- private void showErrorToast(int resourceId) {
- Toast toast = Toast.makeText(getApplicationContext(), resourceId, Toast.LENGTH_SHORT);
- toast.show();
- }
-
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/AttachProjectLoginActivity.java b/android/BOINC/src/edu/berkeley/boinc/AttachProjectLoginActivity.java
deleted file mode 100644
index bad1839..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/AttachProjectLoginActivity.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import java.net.URL;
-import edu.berkeley.boinc.client.Monitor;
-import android.app.Activity;
-import android.app.Service;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.text.InputType;
-import android.text.SpannableString;
-import android.text.style.UnderlineSpan;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-import edu.berkeley.boinc.rpc.PlatformInfo;
-import edu.berkeley.boinc.rpc.ProjectConfig;
-import edu.berkeley.boinc.rpc.ProjectInfo;
-
-public class AttachProjectLoginActivity extends Activity{
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- private String url = "";
- private ProjectInfo projectInfo;
- private Boolean projectInfoPresent = false; // complete ProjectInfo available, if selection from list
- private ProjectConfig projectConfig;
- private Bitmap projectLogo;
-
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- // This is called when the connection with the service has been established, getService returns the Monitor object that is needed to call functions.
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
-
- (new GetProjectConfig()).execute(url);
- }
-
- public void onServiceDisconnected(ComponentName className) { // This should not happen
- monitor = null;
- mIsBound = false;
- }
- };
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- //parse master url from intent extras
- Boolean urlPresent = false;
- try {
- url = getIntent().getCharSequenceExtra("url").toString();
- if(Logging.DEBUG) Log.d(Logging.TAG,"AttachProjectLoginActivity onCreate with url: " + url);
- if(url != null) urlPresent = true;
- } catch (Exception e) {}
-
- //parse project info from intent extras
- try {
- projectInfo = (ProjectInfo) getIntent().getSerializableExtra("projectInfo");
- if(Logging.VERBOSE) Log.v(Logging.TAG,"projectInfo: " + projectInfo);
- if(projectInfo != null) {
- projectInfoPresent = true;
- url = projectInfo.url; // set url field to information of projectInfo
- }
- } catch (Exception e) {if(Logging.DEBUG) Log.d(Logging.TAG,"no project info...");}
-
- if(!projectInfoPresent) { // url can not be taken of ProjectInfo
- // format user input on URL right to avoid exceptions
- if (!url.startsWith("http://") && !url.startsWith("https://")) url = "http://" + url; // add http:// in case user leaves it out
- if (!url.endsWith("/")) url = url + "/"; // add trailing slash
- if(Logging.DEBUG) Log.d(Logging.TAG,"onCreate url sanitized to: " + url);
- }
-
- if(!urlPresent && !projectInfoPresent) {
- // neither url (manual input) nor project info (list selection) is present
- if(Logging.WARNING) Log.w(Logging.TAG,"neither url nor projectInfo available! finish activity...");
- finish(R.string.attachproject_login_error_toast);
- }
-
- // setup layout
- setContentView(R.layout.generic_layout_loading);
- TextView header = (TextView) findViewById(R.id.loading_header);
- header.setText(R.string.attachproject_login_loading);
- TextView subHeader = (TextView) findViewById(R.id.loading_subheader);
- subHeader.setVisibility(View.VISIBLE);
- subHeader.setText(url);
-
- // set title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
-
- // bind monitor service
- doBindService();
- }
-
- @Override
- protected void onResume() {
- // clear the password input from edittext
- // scenario: login fails and user navigates back to this activity
- try {
- EditText pwdInput = (EditText) findViewById(R.id.pwd_input);
- pwdInput.setText("");
- } catch (Exception e){} // catch exception because edittext does not exist upon first onResume.
- super.onResume();
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "AttachProjectLoginActivity onDestroy");
- doUnbindService();
- super.onDestroy();
- }
-
- public void finish(Integer toastStringId){
- Toast toast = Toast.makeText(getApplicationContext(), toastStringId, Toast.LENGTH_LONG);
- toast.show();
- super.finish();
- }
-
- private void doBindService() {
- // Establish a connection with the service, onServiceConnected gets called when
- bindService(new Intent(this, Monitor.class), mConnection, Service.BIND_AUTO_CREATE);
- }
-
- private void doUnbindService() {
- if (mIsBound) {
- // Detach existing connection.
- unbindService(mConnection);
- mIsBound = false;
- }
- }
-
- // gets called by GetProjectConfig when ProjectConfig is available
- private void populateLayout(Boolean projectAlreadyAttached) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectLoginActivity.populateLayout: projectAlreadyAttached: " + projectAlreadyAttached);
-
- setContentView(R.layout.attach_project_login_layout);
-
- // set name
- TextView name = (TextView) findViewById(R.id.project_name);
- name.setText(projectConfig.name);
-
- // set website
- TextView website = (TextView) findViewById(R.id.project_url);
- SpannableString content = new SpannableString(projectConfig.masterUrl);
- content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
- website.setText(content);
- website.setTag(projectConfig.masterUrl); // set tag to use in onClick
-
- // set android support
- TextView platform = (TextView) findViewById(R.id.project_platform);
- if(platformSupported()) {
- platform.setText(R.string.attachproject_login_platform_supported);
- } else {
- platform.setText(R.string.attachproject_login_platform_not_supported);
- platform.setBackgroundResource(R.drawable.shape_yellow_background);
- platform.setPadding(3, 3, 3, 3);
- }
-
- // set ProjectInfo fields, if ProjectInfo available (after list selection)
- if(projectInfoPresent) {
- // set layout wrapper visible
- LinearLayout projectInfoWrapper = (LinearLayout) findViewById(R.id.project_info);
- projectInfoWrapper.setVisibility(View.VISIBLE);
-
- // set project logo
- ImageView logo = (ImageView) findViewById(R.id.logo);
- if(projectLogo != null) {
- logo.setImageBitmap(projectLogo);
- } else {
- logo.setVisibility(View.GONE);
- }
-
- // set general area
- if(projectInfo.generalArea != null) {
- TextView generalArea = (TextView) findViewById(R.id.general_area);
- generalArea.setText(projectInfo.generalArea);
- } else {
- LinearLayout wrapper = (LinearLayout) findViewById(R.id.general_area_wrapper);
- wrapper.setVisibility(View.GONE);
- }
-
- // set specific area
- if(projectInfo.specificArea != null) {
- TextView specificArea = (TextView) findViewById(R.id.specific_area);
- specificArea.setText(projectInfo.specificArea);
- } else {
- LinearLayout wrapper = (LinearLayout) findViewById(R.id.specific_area_wrapper);
- wrapper.setVisibility(View.GONE);
- }
-
- // set description
- if(projectInfo.description != null) {
- TextView description = (TextView) findViewById(R.id.description);
- description.setText(projectInfo.description);
- } else {
- LinearLayout wrapper = (LinearLayout) findViewById(R.id.description_wrapper);
- wrapper.setVisibility(View.GONE);
- }
-
- // set home
- if(projectInfo.home != null) {
- TextView home = (TextView) findViewById(R.id.home);
- home.setText(projectInfo.home);
- } else {
- LinearLayout wrapper = (LinearLayout) findViewById(R.id.home_wrapper);
- wrapper.setVisibility(View.GONE);
- }
- }
-
- // terms of use
- if((projectConfig.termsOfUse != null) && (projectConfig.termsOfUse.length() > 0)) {
- LinearLayout termsOfUseWrapper = (LinearLayout) findViewById(R.id.terms_of_use_wrapper);
- termsOfUseWrapper.setVisibility(View.VISIBLE);
- TextView termsOfUseCategory = (TextView) findViewById(R.id.category_terms_of_use);
- termsOfUseCategory.setText(getString(R.string.attachproject_login_category_terms_of_use) + " " + projectConfig.name);
- TextView termsOfUseText = (TextView) findViewById(R.id.project_terms_of_use);
- termsOfUseText.setText(projectConfig.termsOfUse);
- }
-
- // set account creation
- if(projectAlreadyAttached) {
- LinearLayout creationWrapper = (LinearLayout) findViewById(R.id.creation_wrapper);
- creationWrapper.setVisibility(View.GONE);
- } else{
- TextView creationCategory = (TextView) findViewById(R.id.category_creation);
- creationCategory.setText(getString(R.string.attachproject_login_category_creation) + " " + projectConfig.name + "?");
- TextView creationText = (TextView) findViewById(R.id.creation_action);
- Button creationSubmit = (Button) findViewById(R.id.registration_button);
- if(projectConfig.accountCreationDisabled) {
- creationText.setText(R.string.attachproject_login_header_creation_disabled);
- creationSubmit.setVisibility(View.GONE);
- } else if(projectConfig.clientAccountCreationDisabled) {
- creationText.setText(R.string.attachproject_login_header_creation_client_disabled);
- creationSubmit.setTag(false);
- } else {
- // creation in client supported
- creationText.setText(R.string.attachproject_login_header_creation_enabled);
- creationSubmit.setTag(true);
- }
- }
-
- // set account login
- if(projectAlreadyAttached) {
- LinearLayout loginWrapper = (LinearLayout) findViewById(R.id.login_wrapper);
- loginWrapper.setVisibility(View.GONE);
- } else {
- TextView loginCategory = (TextView) findViewById(R.id.category_login);
- loginCategory.setText(R.string.attachproject_login_category_login);
- if(projectConfig.userName) { // user vs. email?
- if(Logging.DEBUG) Log.d(Logging.TAG,"project is using user name instead of email for login");
- TextView idHeader = (TextView) findViewById(R.id.header_id);
- idHeader.setText(R.string.attachproject_login_header_id_name);
- EditText idInput = (EditText) findViewById(R.id.id_input);
- idInput.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
- }
- }
-
- // set project attached
- if(projectAlreadyAttached) {
- LinearLayout attachedWrapper = (LinearLayout) findViewById(R.id.attached_wrapper);
- attachedWrapper.setVisibility(View.VISIBLE);
- TextView header = (TextView) attachedWrapper.findViewById(R.id.header);
- header.setText(R.string.attachproject_login_attached);
- }
- }
-
- public void login (View view) {
- // parse user input
- EditText idInput = (EditText) findViewById(R.id.id_input);
- EditText pwdInput = (EditText) findViewById(R.id.pwd_input);
- String id = idInput.getText().toString();
- String pwd = pwdInput.getText().toString();
-
- // verify input and start AttachProjectWorkingActivity
- if(verifyInput(id, pwd)){
- Intent intent = new Intent(this, AttachProjectWorkingActivity.class);
- intent.putExtra("action", AttachProjectWorkingActivity.ACTION_ATTACH);
- intent.putExtra("usesName", projectConfig.userName);
- intent.putExtra("projectUrl", projectConfig.masterUrl);
- intent.putExtra("projectName", projectConfig.name);
- intent.putExtra("id", id);
- intent.putExtra("pwd", pwd);
- startActivity(intent);
- }
- }
-
- // register button's onClick
- public void register (View view) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "register: " + view.getTag());
- Boolean clientCreation = (Boolean) view.getTag();
- if (clientCreation) {
- // start intent to AttachProjectWorkingActivity
- Intent intent = new Intent(this, AttachProjectRegistrationActivity.class);
- intent.putExtra("projectUrl", projectConfig.masterUrl);
- intent.putExtra("projectName", projectConfig.name);
- intent.putExtra("minPwdLength", projectConfig.minPwdLength);
- intent.putExtra("usesName", projectConfig.userName);
- startActivity(intent);
- } else {
- // start intent to project website
- Intent i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse(projectConfig.masterUrl));
- startActivity(i);
- }
- }
-
- //project forgot password button onClick
- public void forgotPasswd (View view) {
- // Start intent to project website forgot password link
- Intent i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse(projectConfig.masterUrl + "/get_passwd.php"));
- startActivity(i);
- }
-
- // project url textview's onClick
- public void projectUrlClicked (View view) {
- // start intent to project website
- Intent i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse(projectConfig.masterUrl));
- startActivity(i);
- }
-
- private Boolean verifyInput(String id, String pwd) {
- if(id.length() == 0) {
- Toast toast = Toast.makeText(getApplicationContext(), R.string.attachproject_error_no_name, Toast.LENGTH_SHORT);
- toast.show();
- return false;
- }
- if(pwd.length() == 0) {
- Toast toast = Toast.makeText(getApplicationContext(), R.string.attachproject_error_no_pwd, Toast.LENGTH_SHORT);
- toast.show();
- return false;
- }
- return true;
- }
-
- private Boolean platformSupported() {
- if(projectConfig == null) return false;
- if(!mIsBound) return false;
- String platformName = getString(monitor.getBoincPlatform());
- Boolean supported = false;
- for(PlatformInfo platform: projectConfig.platforms) {
- if(platform.name.equals(platformName)) {
- supported = true;
- continue;
- }
- }
- return supported;
- }
-
- private final class GetProjectConfig extends AsyncTask<String, Void, Integer> {
-
- private boolean projectAlreadyAttached = false;
-
- @Override
- protected Integer doInBackground(String... params) {
- String url = params[0];
- Integer attemptCounter = 0;
- Integer maxAttempts = getResources().getInteger(R.integer.attach_get_project_config_retries);
- try{
- while(attemptCounter < maxAttempts) {
- if(!projectInfoPresent) { // only url string is available
- if(Logging.DEBUG) Log.d(Logging.TAG, "doInBackground() - GetProjectConfig for manual input url: " + url);
-
- //fetch ProjectConfig
- projectConfig = monitor.clientInterface.getProjectConfigPolling(url);
- } else {
- if(Logging.DEBUG) Log.d(Logging.TAG, "doInBackground() - GetProjectConfig for list selection url: " + projectInfo.url);
-
- //fetch ProjectConfig
- projectConfig = monitor.clientInterface.getProjectConfigPolling(projectInfo.url);
-
- // fetch project logo
- loadBitmap();
- }
-
- if (projectConfig != null && projectConfig.error_num != null && projectConfig.error_num == 0) {
- // success
- projectAlreadyAttached = checkProjectAlreadyAttached(url);
- return 0;
- } else {
- if(Logging.DEBUG) if(projectConfig != null) Log.d(Logging.TAG,"getProjectConfig returned error num:" + projectConfig.error_num);
- attemptCounter++;
- }
- }
- } catch(Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG,"error in doInBackround",e);
- }
- // if this code is reached, it failed, return
- if(Logging.DEBUG) if(projectConfig != null) Log.d(Logging.TAG,"getProjectConfig returned error num:" + projectConfig.error_num);
- return R.string.attachproject_login_error_toast;
- }
-
- @Override
- protected void onPostExecute(Integer toastStringId) {
- if(toastStringId == 0) { // no error, no toast...
- if(Logging.DEBUG) Log.d(Logging.TAG, "onPostExecute() - GetProjectConfig successful.");
- populateLayout(projectAlreadyAttached);
- } else {
- finish(toastStringId);
- }
-
- }
-
- private void loadBitmap() {
- projectLogo = null;
- try {
- URL logoUrlUrl = new URL(projectInfo.imageUrl);
- projectLogo = BitmapFactory.decodeStream(logoUrlUrl.openConnection().getInputStream());
- if(projectLogo!=null) if(Logging.DEBUG) Log.d(Logging.TAG, "logo download successful.");
- } catch (Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG,"loadBitmap failed.",e);
- }
- }
-
- private Boolean checkProjectAlreadyAttached(String url) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "check whether project with url is already attached: " + url);
- return monitor.clientInterface.checkProjectAttached(url);
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/AttachProjectRegistrationActivity.java b/android/BOINC/src/edu/berkeley/boinc/AttachProjectRegistrationActivity.java
deleted file mode 100644
index bc1baa1..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/AttachProjectRegistrationActivity.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
-import android.widget.EditText;
-import android.widget.TextView;
-
-public class AttachProjectRegistrationActivity extends Activity{
-
- private String projectUrl;
- private String projectName;
- private Integer minPwdLength;
- private Boolean usesName;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectRegistrationActivity onCreate");
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- //parse master url from intent extras
- try {
- projectUrl = getIntent().getCharSequenceExtra("projectUrl").toString();
- projectName = getIntent().getCharSequenceExtra("projectName").toString();
- minPwdLength = getIntent().getIntExtra("minPwdLength", 0);
- usesName = getIntent().getBooleanExtra("usesName", false);
- if(Logging.DEBUG) Log.d(Logging.TAG,"intent extras: " + projectUrl + projectName + minPwdLength);
- } catch (Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG, "error while parsing url", e);
- finish(); // no point to continue without url
- }
-
- // setup layout
- setContentView(R.layout.attach_project_registration_layout);
-
- // set title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
-
- TextView headerName = (TextView) findViewById(R.id.registration_header);
- headerName.setText(getString(R.string.attachproject_registration_header) + " " + projectName);
- TextView urlTv = (TextView) findViewById(R.id.url);
- urlTv.setText(projectUrl);
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectRegistrationActivity onDestroy");
- super.onDestroy();
- }
-
- // onclick of button
- public void register (View view) {
- // get user input
- EditText emailInput = (EditText) findViewById(R.id.email_input);
- EditText userInput = (EditText) findViewById(R.id.username_input);
- EditText teamInput = (EditText) findViewById(R.id.teamname_input);
- EditText pwdInput = (EditText) findViewById(R.id.pwd_input);
- EditText pwdConfirmInput = (EditText) findViewById(R.id.pwd_confirm_input);
- String email = emailInput.getText().toString();
- String user = userInput.getText().toString();
- String team = teamInput.getText().toString();
- String pwd = pwdInput.getText().toString();
- String pwdConfirm = pwdConfirmInput.getText().toString();
-
- // verify and start AttachProjectWorkingActivity
- if(verifyInput(email, user, team, pwd, pwdConfirm, usesName)){
- Intent intent = new Intent(this, AttachProjectWorkingActivity.class);
- intent.putExtra("action", AttachProjectWorkingActivity.ACTION_REGISTRATION);
- intent.putExtra("usesName", false);
- intent.putExtra("projectUrl", projectUrl);
- intent.putExtra("projectName", projectName);
- intent.putExtra("userName", user);
- intent.putExtra("teamName", team);
- intent.putExtra("eMail", email);
- intent.putExtra("pwd", pwd);
- startActivity(intent);
- }
- }
-
- private Boolean verifyInput(String email, String user, String team, String pwd, String pwdConfirm, Boolean usesName) {
- int stringResource = R.string.attachproject_error_unknown;
- Boolean success = true;
-
- // check input
- if(email.length() == 0) {
- stringResource = R.string.attachproject_error_no_email;
- success = false;
- }
- else if(usesName && user.length() == 0) {
- stringResource = R.string.attachproject_error_no_name;
- success = false;
- }
- else if(pwd.length() == 0) {
- stringResource = R.string.attachproject_error_no_pwd;
- success = false;
- }
- else if(pwd.length() < minPwdLength) {
- stringResource = R.string.attachproject_error_short_pwd;
- success = false;
- }
- else if(!pwd.equals(pwdConfirm)) {
- stringResource = R.string.attachproject_error_pwd_no_match;
- success = false;
- }
-
- // show warning
- TextView warning = (TextView) findViewById(R.id.warning);
- if(!success) {
- warning.setText(stringResource);
- warning.setVisibility(View.VISIBLE);
- } else {
- // making sure previous warnings are gone
- warning.setVisibility(View.GONE);
- }
-
- return success;
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/AttachProjectWorkingActivity.java b/android/BOINC/src/edu/berkeley/boinc/AttachProjectWorkingActivity.java
deleted file mode 100644
index ce711f9..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/AttachProjectWorkingActivity.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import java.util.ArrayList;
-
-import edu.berkeley.boinc.client.Monitor;
-import android.app.Activity;
-import android.app.Service;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import edu.berkeley.boinc.rpc.AccountOut;
-import edu.berkeley.boinc.rpc.AcctMgrRPCReply;
-import edu.berkeley.boinc.rpc.AcctMgrInfo;
-import edu.berkeley.boinc.utils.BOINCErrors;
-
-public class AttachProjectWorkingActivity extends Activity{
-
- public static final int ACTION_ATTACH = 1;
- public static final int ACTION_REGISTRATION = 2;
- public static final int ACTION_ACCTMGR = 3;
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- private Integer timeInterval;
-
- private ArrayList<View> views = new ArrayList<View>();
- private ViewGroup anchor;
-
- private int action;
- private String projectUrl;
- private String projectName;
- private String id;
- private String userName;
- private String teamName;
- private String eMail;
- private String pwd;
- private Boolean usesName;
-
-
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- // This is called when the connection with the service has been established, getService returns the Monitor object that is needed to call functions.
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
-
- // do desired action
- new ProjectAccountAsync(action, projectUrl, id, eMail, userName, teamName, pwd, usesName, projectName).execute();
- }
-
- public void onServiceDisconnected(ComponentName className) { // This should not happen
- monitor = null;
- mIsBound = false;
- }
- };
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- // bind monitor service
- doBindService();
-
- //parse information from intent extras
- try {
- action = getIntent().getIntExtra("action", 0);
- usesName = getIntent().getBooleanExtra("usesName", false);
- projectUrl = getIntent().getStringExtra("projectUrl");
- projectName = getIntent().getStringExtra("projectName");
- userName = getIntent().getStringExtra("userName");
- teamName = getIntent().getStringExtra("teamName");
- eMail = getIntent().getStringExtra("eMail");
- pwd = getIntent().getStringExtra("pwd");
- id = getIntent().getStringExtra("id");
-
- if(Logging.DEBUG) Log.d(Logging.TAG,"AttachProjectWorkingActivity intent extras: " + action + projectUrl + projectName + id + userName + teamName + eMail + usesName);
- } catch (Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG, "AttachProjectWorkingActivity error while parsing extras", e);
- finish(); // no point to continue without data
- }
-
- // get coniguration
- timeInterval = getResources().getInteger(R.integer.attach_step_interval_ms);
-
- // set layout
- setContentView(R.layout.attach_project_working_layout);
- anchor = (ViewGroup) findViewById(R.id.anchor);
-
- // set title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "AttachProjectWorkingActivity onDestroy");
- doUnbindService();
- super.onDestroy();
- }
-
- private void doBindService() {
- // Establish a connection with the service, onServiceConnected gets called when
- bindService(new Intent(this, Monitor.class), mConnection, Service.BIND_AUTO_CREATE);
- }
-
- private void doUnbindService() {
- if (mIsBound) {
- // Detach existing connection.
- unbindService(mConnection);
- mIsBound = false;
- }
- }
-
- // check whether device is online before starting connection attempt
- // as needed for AttachProjectLoginActivity (retrieval of ProjectConfig)
- // note: available internet does not imply connection to project server
- // is possible!
- private Boolean checkDeviceOnline() {
- ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
- return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
- }
-
- private String mapErrorNumToString(int code) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"mapErrorNumToString for error: " + code);
- int stringResource;
- switch (code) {
- case BOINCErrors.ERR_DB_NOT_FOUND:
- stringResource = R.string.attachproject_error_wrong_name;
- break;
- case BOINCErrors.ERR_GETHOSTBYNAME:
- stringResource = R.string.attachproject_error_no_internet;
- break;
- case BOINCErrors.ERR_NONUNIQUE_EMAIL: // treat the same as -137, ERR_DB_NOT_UNIQUE
- // no break!!
- case BOINCErrors.ERR_DB_NOT_UNIQUE:
- stringResource = R.string.attachproject_error_email_in_use;
- break;
- case BOINCErrors.ERR_PROJECT_DOWN:
- stringResource = R.string.attachproject_error_project_down;
- break;
- case BOINCErrors.ERR_BAD_EMAIL_ADDR:
- stringResource = R.string.attachproject_error_email_bad_syntax;
- break;
- case BOINCErrors.ERR_BAD_PASSWD:
- stringResource = R.string.attachproject_error_bad_pwd;
- break;
- case BOINCErrors.ERR_BAD_USER_NAME:
- stringResource = R.string.attachproject_error_bad_username;
- break;
- case BOINCErrors.ERR_ACCT_CREATION_DISABLED:
- stringResource = R.string.attachproject_error_creation_disabled;
- break;
- case BOINCErrors.ERR_INVALID_URL:
- stringResource = R.string.attachproject_error_invalid_url;
- break;
- default:
- stringResource = R.string.attachproject_error_unknown;
- break;
- }
- return getString(stringResource);
- }
-
- // appends new element to layout
- private void appendElementToLayout(Update update) {
- LinearLayout newElement;
- String text;
-
- // setup view from layout
- if(update.finalResult) { // final result is either success or failure
- // remove working layout
- View previousElement = views.get(views.size()-1);
- anchor.removeView(previousElement);
- //inflate new final layout
- if(update.success) {
- newElement = (LinearLayout)getLayoutInflater().inflate(R.layout.attach_project_success_layout, anchor, false);
- text = getString(update.task) + getString(R.string.attachproject_working_finished);
- } else {
- newElement = (LinearLayout)getLayoutInflater().inflate(R.layout.attach_project_failed_layout, anchor, false);
- String desc = "";
- if(!update.result.isEmpty()) desc = getString(R.string.attachproject_working_description) + " " + update.result;
- if(update.result.equals(getString(R.string.attachproject_error_unknown))) desc = getString(R.string.attachproject_working_description) + " " + update.errorCode + " " + update.result;
- text = getString(update.task) + desc;
- }
- } else {
- //inflate new working layout
- newElement = (LinearLayout)getLayoutInflater().inflate(R.layout.attach_project_ongoing_layout, anchor, false);
- text = getString(update.task) + getString(R.string.attachproject_working_ongoing);
- }
-
- // set header text
- TextView header = (TextView) newElement.findViewById(R.id.header);
- header.setText(text);
-
- // add view
- anchor.addView(newElement);
- views.add(newElement);
- }
-
- public void finishButtonClicked(View view) {
- Intent intent = new Intent(this, BOINCActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //clear_top closes AttachProjectListActivity!
- startActivity(intent);
- }
-
- public void backButtonClicked(View view) {
- finish();
- }
-
- private class Update {
- public Boolean finalResult;
- public Boolean success;
- public int task;
- public String result = "";
- public int errorCode = -1;
-
- public Update(Boolean finalResult, Boolean success, int task, String result, int errorCode){
- this.finalResult = finalResult;
- this.success = success;
- this.task = task;
- this.result = result;
- this.errorCode = errorCode;
- }
- }
-
- private final class ProjectAccountAsync extends AsyncTask<Void, Update, Boolean> {
-
- private Integer action;
- private String url;
- private String id; // used for login can be either email or user, depending on usesName
- private String email;
- private String userName;
- private String teamName;
- private String pwd;
- private Boolean usesName;
- private String projectName;
-
- public ProjectAccountAsync(Integer action, String url, String id, String email, String userName, String teamName, String pwd, Boolean usesName, String projectName) {
- this.action = action;
- this.url = url;
- this.id = id; // used for login
- this.email = email;
- this.userName = userName;
- this.teamName = teamName;
- this.pwd = pwd;
- this.usesName = usesName;
- this.projectName = projectName;
- }
-
- @Override
- protected Boolean doInBackground(Void... params) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAccountAsync doInBackground, action: " + action);
-
- //check device online
- publishProgress(new Update(false, false, R.string.attachproject_working_connect,"",0));
- try {Thread.sleep(timeInterval);} catch (Exception e){}
- if(!checkDeviceOnline()) {
- publishProgress(new Update(true, false, R.string.attachproject_working_connect, getString(R.string.attachproject_error_no_internet),-1));
- return false;
- }
- publishProgress(new Update(true, true, R.string.attachproject_working_connect,"",0));
-
- if(action == ACTION_ACCTMGR) {
- // 1st: add account manager
- AcctMgrRPCReply reply = null;
- publishProgress(new Update(false, false, R.string.attachproject_working_acctmgr,"",0));
- Integer maxAttempts = getResources().getInteger(R.integer.attach_acctmgr_retries);
- Integer attemptCounter = 0;
- Boolean success = false;
- Integer err = 0;
- if(Logging.DEBUG) Log.d(Logging.TAG,"account manager with: " + url + userName + maxAttempts);
- // retry a defined number of times, if non deterministic failure occurs.
- // makes login more robust on bad network connections
- while(!success && attemptCounter < maxAttempts) {
- reply = monitor.clientInterface.addAcctMgr(url, userName, pwd);
-
- if(reply == null || reply.error_num != BOINCErrors.ERR_OK) {
- // failed
- if(reply != null) err = reply.error_num;
- if(Logging.DEBUG) Log.d(Logging.TAG,"adding account manager failed, error code: " + err);
- if(err == -1 || err == BOINCErrors.ERR_GETHOSTBYNAME){
- // worth a retry
- attemptCounter++;
- } else {
- // not worth a retry, return
- publishProgress(new Update(true, false, R.string.attachproject_working_acctmgr, mapErrorNumToString(err),err));
- return false;
- }
- } else {
- // successful
- try {Thread.sleep(timeInterval);} catch (Exception e){}
- publishProgress(new Update(true, true, R.string.attachproject_working_acctmgr,"",0));
- success = true;
- }
- }
- // reached end of loop, check if successful
- if(!success) {
- publishProgress(new Update(true, false, R.string.attachproject_working_acctmgr, mapErrorNumToString(err),err));
- return false;
- }
-
- // 2nd: verify success by getting account manager info
- attemptCounter = 0;
- success = false;
- publishProgress(new Update(false, false, R.string.attachproject_working_acctmgr_sync,"",0));
- // retry a defined number of times, if non deterministic failure occurs.
- // makes login more robust on bad network connections
- while(!success && attemptCounter < maxAttempts) {
- AcctMgrInfo info = monitor.clientInterface.getAcctMgrInfo();
- if(Logging.DEBUG) Log.d(Logging.TAG,"acctMgrInfo: " + info.acct_mgr_url + info.acct_mgr_name + info.have_credentials);
-
-
- try {Thread.sleep(timeInterval);} catch (Exception e){}
-
- if(info == null) {
- // failed
- attemptCounter++;
- } else {
- // successful
- publishProgress(new Update(true, true, R.string.attachproject_working_acctmgr_sync,"",0));
- success = true;
- }
- }
- // reached end of loop, check if successful
- if(!success) {
- publishProgress(new Update(true, false, R.string.attachproject_working_acctmgr_sync, mapErrorNumToString(err),err));
- return false;
- }
-
- } else {
- // not adding account manager, either registration or attach
- // 1. get authenticator
- AccountOut account = null;
- Integer attemptCounter = 0;
- Integer maxAttempts = 0;
- Boolean success = false;
- int err = -1;
- if(action == ACTION_REGISTRATION) {
- // register account
- publishProgress(new Update(false, false, R.string.attachproject_working_register,"",0));
- maxAttempts = getResources().getInteger(R.integer.attach_creation_retries);
- if(Logging.DEBUG) Log.d(Logging.TAG,"registration with: " + url + email + userName + teamName + maxAttempts);
- // retry a defined number of times, if non deterministic failure occurs.
- // makes login more robust on bad network connections
- while(!success && attemptCounter < maxAttempts) {
- account = monitor.clientInterface.createAccountPolling(url, email, userName, pwd, teamName);
-
- if(account == null || account.error_num != BOINCErrors.ERR_OK) {
- // failed
- if(account != null) err = account.error_num;
- if(Logging.DEBUG) Log.d(Logging.TAG,"registration failed, error code: " + err);
- if(err == -1 || err == BOINCErrors.ERR_GETHOSTBYNAME){
- // worth a retry
- attemptCounter++;
- } else {
- // not worth a retry, return
- publishProgress(new Update(true, false, R.string.attachproject_working_register, mapErrorNumToString(err),err));
- return false;
- }
- } else {
- // successful
- try {Thread.sleep(timeInterval);} catch (Exception e){}
- publishProgress(new Update(true, true, R.string.attachproject_working_register,"",0));
- success = true;
- }
- }
- // reached end of loop, check if successful
- if(!success) {
- publishProgress(new Update(true, false, R.string.attachproject_working_register, mapErrorNumToString(err),err));
- return false;
- }
- } else if (action == ACTION_ATTACH){
- // lookup authenticator
- publishProgress(new Update(false, false, R.string.attachproject_working_verify,"",0));
- maxAttempts = getResources().getInteger(R.integer.attach_login_retries);
- if(Logging.DEBUG) Log.d(Logging.TAG,"loging with: " + url + id + usesName + maxAttempts);
- // retry a defined number of times, if non deterministic failure occurs.
- // makes login more robust on bad network connections
- while(!success && attemptCounter < maxAttempts) {
- account = monitor.clientInterface.lookupCredentials(url, id, pwd, usesName);
-
- if(account == null || account.error_num != BOINCErrors.ERR_OK) {
- // failed
- if(account != null) err = account.error_num;
- if(Logging.DEBUG) Log.d(Logging.TAG,"registration failed, error code: " + err);
- if(err == -1 || err == BOINCErrors.ERR_GETHOSTBYNAME){
- // worth a retry
- attemptCounter++;
- } else {
- // not worth a retry, return
- publishProgress(new Update(true, false, R.string.attachproject_working_verify, mapErrorNumToString(err), err));
- return false;
- }
- } else {
- // successful
- try {Thread.sleep(timeInterval);} catch (Exception e){}
- publishProgress(new Update(true, true, R.string.attachproject_working_verify,"",0));
- success = true;
- }
- }
- // reached end of loop, check if successful
- if(!success) {
- publishProgress(new Update(true, false, R.string.attachproject_working_verify, mapErrorNumToString(err), err));
- return false;
- }
- }
-
- // 2. attach project
- attemptCounter = 0;
- success = false;
- maxAttempts = getResources().getInteger(R.integer.attach_attach_retries);
- publishProgress(new Update(false, false, R.string.attachproject_working_login,"",0));
- while(!success && attemptCounter < maxAttempts) {
- Boolean attach = monitor.clientInterface.attachProject(url, projectName, account.authenticator);
- if(attach) {
- // successful
- success = true;
- try {Thread.sleep(timeInterval);} catch (Exception e){}
- publishProgress(new Update(true, true, R.string.attachproject_working_login,"",0));
- } else {
- // failed
- attemptCounter++;
- }
- }
- if(!success) {
- // still failed
- publishProgress(new Update(true, false, R.string.attachproject_working_login,"",0));
- return false;
- }
- }
-
- return true;
- }
-
- @Override
- protected void onProgressUpdate(Update... values) {
- appendElementToLayout(values[0]);
- super.onProgressUpdate(values);
- }
-
- protected void onPostExecute(Boolean result) {
- if(result) {
- // show finish button
- Button finishButton = (Button) findViewById(R.id.finishButton);
- finishButton.setVisibility(View.VISIBLE);
- } else {
- // show back button
- Button backButton = (Button) findViewById(R.id.backButton);
- backButton.setVisibility(View.VISIBLE);
- }
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/BOINCActivity.java b/android/BOINC/src/edu/berkeley/boinc/BOINCActivity.java
index b4a61e4..1faa28b 100644
--- a/android/BOINC/src/edu/berkeley/boinc/BOINCActivity.java
+++ b/android/BOINC/src/edu/berkeley/boinc/BOINCActivity.java
@@ -18,13 +18,14 @@
******************************************************************************/
package edu.berkeley.boinc;
+import java.util.ArrayList;
+
+import edu.berkeley.boinc.rpc.Project;
import edu.berkeley.boinc.utils.*;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
+import edu.berkeley.boinc.client.*;
import edu.berkeley.boinc.utils.BOINCDefs;
import android.app.Dialog;
import android.app.Service;
-import android.app.TabActivity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -32,43 +33,54 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
+import android.content.res.Configuration;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.RemoteException;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
+import android.widget.AdapterView;
import android.widget.Button;
-import android.widget.HorizontalScrollView;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TabHost;
-import android.widget.TabHost.TabSpec;
+import android.widget.ListView;
import android.widget.TextView;
+import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.*;
+import edu.berkeley.boinc.adapter.*;
+import edu.berkeley.boinc.adapter.NavDrawerListAdapter.NavDrawerItem;
+import edu.berkeley.boinc.attach.SelectionListActivity;
-public class BOINCActivity extends TabActivity {
+public class BOINCActivity extends ActionBarActivity {
- private Monitor monitor;
- private Integer clientSetupStatus = ClientStatus.SETUP_STATUS_LAUNCHING;
- private Boolean intialStart = true;
+ public static IMonitor monitor;
+ private Integer clientComputingStatus = -1;
+ private Integer numberProjectsInNavList = 0;
+ static Boolean mIsBound = false;
- private Boolean mIsBound = false;
+ // app title (changes with nav bar selection)
+ private CharSequence mTitle;
+ // nav drawer title
+ private CharSequence mDrawerTitle;
- private TabHost tabHost;
- private Resources res;
+ private DrawerLayout mDrawerLayout;
+ private ListView mDrawerList;
+ private ActionBarDrawerToggle mDrawerToggle;
+ private NavDrawerListAdapter mDrawerListAdapter;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been established, getService returns
// the Monitor object that is needed to call functions.
- monitor = ((Monitor.LocalBinder)service).getService();
+ monitor = IMonitor.Stub.asInterface(service);
mIsBound = true;
determineStatus();
}
@@ -77,14 +89,15 @@ public class BOINCActivity extends TabActivity {
// This should not happen
monitor = null;
mIsBound = false;
+
+ Log.e(Logging.TAG, "BOINCActivity onServiceDisconnected");
}
};
private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
- //if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity ClientStatusChange - onReceive()");
-
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "BOINCActivity ClientStatusChange - onReceive()");
determineStatus();
}
};
@@ -93,24 +106,75 @@ public class BOINCActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onCreate()");
-
super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
- setContentView(R.layout.main);
-
+ setContentView(R.layout.main);
+
+ // setup navigation bar
+ mTitle = mDrawerTitle = getTitle();
+ mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+ mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
+ mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener(){
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ // display view for selected nav drawer item
+ dispatchNavBarOnClick(mDrawerListAdapter.getItem(position),false);
+ }});
+ mDrawerListAdapter = new NavDrawerListAdapter(getApplicationContext());
+ mDrawerList.setAdapter(mDrawerListAdapter);
+ // enabling action bar app icon and behaving it as toggle button
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setHomeButtonEnabled(true);
+
+ mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
+ R.drawable.ic_drawer, //nav menu toggle icon
+ R.string.app_name, // nav drawer open - description for accessibility
+ R.string.app_name // nav drawer close - description for accessibility
+ ) {
+ public void onDrawerClosed(View view) {
+ getSupportActionBar().setTitle(mTitle);
+ // calling onPrepareOptionsMenu() to show action bar icons
+ supportInvalidateOptionsMenu();
+ }
+
+ public void onDrawerOpened(View drawerView) {
+ getSupportActionBar().setTitle(mDrawerTitle);
+ mDrawerListAdapter.notifyDataSetChanged(); // force redraw of all items (adapter.getView()) in order to adapt changing icons or number of tasks/notices
+ // calling onPrepareOptionsMenu() to hide action bar icons
+ supportInvalidateOptionsMenu();
+ }
+ };
+ mDrawerLayout.setDrawerListener(mDrawerToggle);
+
+
+ // pre-select fragment
+ // 1. check if explicitly requested fragment present
+ // e.g. after initial project attach.
+ int targetFragId = getIntent().getIntExtra("targetFragment", -1);
+
+ // 2. if no explicit request, try to restore previous selection
+ if(targetFragId < 0 && savedInstanceState != null)
+ targetFragId = savedInstanceState.getInt("navBarSelectionId");
+
+ NavDrawerItem item = null;
+ if(targetFragId < 0) {
+ // if non of the above, go to default
+ item = mDrawerListAdapter.getItem(0);
+ } else item = mDrawerListAdapter.getItemForId(targetFragId);
+
+ if(item != null) dispatchNavBarOnClick(item, true);
+ else if(Logging.WARNING) Log.w(Logging.TAG, "onCreate: fragment selection returned null");
+
//bind monitor service
doBindService();
-
- // adapt to custom title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
-
- // get tab host and setup layout
- res = getResources();
- tabHost = getTabHost();
- setupTabLayout();
}
@Override
+ protected void onSaveInstanceState(Bundle outState) {
+ outState.putInt("navBarSelectionId", mDrawerListAdapter.selectedMenuId);
+ super.onSaveInstanceState(outState);
+ }
+
+ @Override
protected void onDestroy() {
if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onDestroy()");
doUnbindService();
@@ -118,8 +182,22 @@ public class BOINCActivity extends TabActivity {
}
@Override
+ protected void onNewIntent(Intent intent) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onNewIntent()");
+ // onNewIntent gets called if activity is brought to front via intent, but was still alive, so onCreate is not called again
+ // getIntent always returns the intent activity was created of, so this method is the only hook to receive an updated intent
+ // e.g. after (not initial) project attach
+ super.onNewIntent(intent);
+ // navigate to explicitly requested fragment (e.g. after project attach)
+ int id = intent.getIntExtra("targetFragment", -1);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onNewIntent() for target fragment: " + id);
+ NavDrawerItem item = mDrawerListAdapter.getItemForId(id);
+ if(item != null) dispatchNavBarOnClick(item,false);
+ else if(Logging.WARNING) Log.w(Logging.TAG, "onNewIntent: requested target fragment is null, for id: " + id);
+ }
+
+ @Override
protected void onResume() { // gets called by system every time activity comes to front. after onCreate upon first creation
- if(Logging.VERBOSE) Log.v(Logging.TAG, "BOINCActivity onResume()");
super.onResume();
registerReceiver(mClientStatusChangeRec, ifcsc);
determineStatus();
@@ -146,154 +224,145 @@ public class BOINCActivity extends TabActivity {
mIsBound = false;
}
}
+ /*
+ public IMonitor getMonitorService() {
+ if(!mIsBound) if(Logging.WARNING) Log.w(Logging.TAG, "Fragment trying to obtain serive reference, but Monitor not bound in BOINCActivity");
+ return monitor;
+ }*/
+
+ public void startAttachProjectListActivity() {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity attempt to start ");
+ startActivity(new Intent(this,SelectionListActivity.class));
+ }
+
+ /**
+ * React to selection of nav bar item
+ * @param item
+ * @param position
+ * @param init
+ */
+ private void dispatchNavBarOnClick(NavDrawerItem item, boolean init) {
+ // update the main content by replacing fragments
+ if(item == null) {
+ if(Logging.WARNING) Log.w(Logging.TAG, "dispatchNavBarOnClick returns, item null.");
+ return;
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "dispatchNavBarOnClick for item with id: " + item.getId() + " title: " + item.getTitle() + " is project? " + item.isProjectItem());
+
+ FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+ Boolean fragmentChanges = false;
+ if(init) {
+ // if init, setup status fragment
+ ft.replace(R.id.status_container, new StatusFragment());
+ }
+ if(!item.isProjectItem()) {
+ switch (item.getId()) {
+ case R.string.tab_tasks:
+ ft.replace(R.id.frame_container, new TasksFragment());
+ fragmentChanges = true;
+ break;
+ case R.string.tab_notices:
+ ft.replace(R.id.frame_container, new NoticesFragment());
+ fragmentChanges = true;
+ break;
+ case R.string.tab_projects:
+ ft.replace(R.id.frame_container, new ProjectsFragment());
+ fragmentChanges = true;
+ break;
+ case R.string.menu_help:
+ Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://boinc.berkeley.edu/wiki/BOINC_Help"));
+ startActivity(i);
+ break;
+ case R.string.menu_about:
+ final Dialog dialog = new Dialog(this);
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(R.layout.dialog_about);
+ Button returnB = (Button) dialog.findViewById(R.id.returnB);
+ TextView tvVersion = (TextView)dialog.findViewById(R.id.version);
+ try {
+ tvVersion.setText(getString(R.string.about_version) + " "
+ + getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
+ } catch (NameNotFoundException e) {if(Logging.WARNING) Log.w(Logging.TAG, "version name not found.");}
+
+ returnB.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ break;
+ case R.string.menu_eventlog:
+ startActivity(new Intent(this,EventLogActivity.class));
+ break;
+ case R.string.projects_add:
+ startActivity(new Intent(this, SelectionListActivity.class));
+ break;
+ case R.string.tab_preferences:
+ ft.replace(R.id.frame_container, new PrefsFragment());
+ fragmentChanges = true;
+ break;
+
+ default:
+ if(Logging.ERROR) Log.d(Logging.TAG, "dispatchNavBarOnClick() could not find corresponding fragment for " + item.getTitle());
+ break;
+ }
+
+ } else {
+ // ProjectDetailsFragment. Data shown based on given master URL
+ Bundle args = new Bundle();
+ args.putString("url", item.getProjectMasterUrl());
+ Fragment frag = new ProjectDetailsFragment();
+ frag.setArguments(args);
+ ft.replace(R.id.frame_container, frag);
+ fragmentChanges = true;
+ }
+
+ mDrawerLayout.closeDrawer(mDrawerList);
+
+ if(fragmentChanges) {
+ ft.commit();
+ setTitle(item.getTitle());
+ mDrawerListAdapter.selectedMenuId = item.getId(); //highlight item persistently
+ mDrawerListAdapter.notifyDataSetChanged(); // force redraw
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "displayFragmentForNavDrawer() " + item.getTitle());
+ }
// tests whether status is available and whether it changed since the last event.
- private void determineStatus() {
- Integer newStatus = -1;
+ private void determineStatus() {
try {
if(mIsBound) {
- newStatus = Monitor.getClientStatus().setupStatus;
- if(newStatus != clientSetupStatus) { //only act, when status actually different form old status
- if(Logging.DEBUG) Log.d(Logging.TAG,"determineStatus() client setup status changed! old clientSetupStatus: " + clientSetupStatus + " - new: " + newStatus);
- clientSetupStatus = newStatus;
- layout();
+ Integer newComputingStatus = monitor.getComputingStatus();
+ if(newComputingStatus != clientComputingStatus) {
+ // computing status has changed, update and invalidate to force adaption of action items
+ clientComputingStatus = newComputingStatus;
+ supportInvalidateOptionsMenu();
}
- if(intialStart && (clientSetupStatus == ClientStatus.SETUP_STATUS_NOPROJECT)) { // if it is first start and no project attached, show login activity
- startActivity(new Intent(this,AttachProjectListActivity.class));
- intialStart = false;
- }
- setAppTitle();
+ if(numberProjectsInNavList != monitor.getProjects().size())
+ numberProjectsInNavList = mDrawerListAdapter.compareAndAddProjects((ArrayList<Project>)monitor.getProjects());
+ //setAppTitle();
}
} catch (Exception e) {}
}
-
- private void layout() {
- TabHost tabLayout = (TabHost) findViewById(android.R.id.tabhost);
- LinearLayout loadingLayout = (LinearLayout) findViewById(R.id.main_loading);
- LinearLayout errorLayout = (LinearLayout) findViewById(R.id.main_error);
- //TextView noProjectWarning = (TextView) findViewById(R.id.noproject_warning);
- HorizontalScrollView noProjectWarning = (HorizontalScrollView) findViewById(R.id.noproject_warning_wrapper);
- TextView launchingHeader = (TextView) findViewById(R.id.loading_header);
- switch (clientSetupStatus) {
- case ClientStatus.SETUP_STATUS_AVAILABLE:
- noProjectWarning.setVisibility(View.GONE);
- loadingLayout.setVisibility(View.GONE);
- errorLayout.setVisibility(View.GONE);
- tabLayout.setVisibility(View.VISIBLE);
- break;
- case ClientStatus.SETUP_STATUS_ERROR:
- tabLayout.setVisibility(View.GONE);
- loadingLayout.setVisibility(View.GONE);
- errorLayout.setVisibility(View.VISIBLE);
- break;
- case ClientStatus.SETUP_STATUS_LAUNCHING:
- tabLayout.setVisibility(View.GONE);
- errorLayout.setVisibility(View.GONE);
- loadingLayout.setVisibility(View.VISIBLE);
- launchingHeader.setText(R.string.status_launching);
- break;
- case ClientStatus.SETUP_STATUS_NOPROJECT:
- loadingLayout.setVisibility(View.GONE);
- errorLayout.setVisibility(View.GONE);
- tabLayout.setVisibility(View.VISIBLE);
- noProjectWarning.setVisibility(View.VISIBLE);
- break;
- case ClientStatus.SETUP_STATUS_CLOSING:
- tabLayout.setVisibility(View.GONE);
- errorLayout.setVisibility(View.GONE);
- loadingLayout.setVisibility(View.VISIBLE);
- launchingHeader.setText(R.string.status_closing);
- break;
- case ClientStatus.SETUP_STATUS_CLOSED:
- finish(); // close application
- break;
- default:
- if(Logging.WARNING) Log.w(Logging.TAG, "could not layout status: " + clientSetupStatus);
- break;
- }
-
- }
-
- /*
- * setup tab layout.
- * which tabs should be set up is defined in resources file: /res/values/configuration.xml
- */
- private void setupTabLayout() {
- // set tabs
- if(res.getBoolean(R.bool.tab_status))
- setupTab(new TextView(this), getResources().getString(R.string.tab_status), R.drawable.icon_status_tab, StatusActivity.class);
- if(res.getBoolean(R.bool.tab_notices))
- setupTab(new TextView(this), getResources().getString(R.string.tab_notices), R.drawable.icon_notices_tab, NoticesActivity.class);
- if(res.getBoolean(R.bool.tab_projects))
- setupTab(new TextView(this), getResources().getString(R.string.tab_projects), R.drawable.icon_projects_tab, ProjectsActivity.class);
- if(res.getBoolean(R.bool.tab_tasks))
- setupTab(new TextView(this), getResources().getString(R.string.tab_tasks), R.drawable.icon_tasks_tab, TasksActivity.class);
- if(res.getBoolean(R.bool.tab_preferences))
- setupTab(new TextView(this), getResources().getString(R.string.tab_preferences), R.drawable.icon_prefs_tab, PrefsActivity.class);
-
- if(Logging.VERBOSE) Log.v(Logging.TAG, "BOINCActivity tab layout setup done");
- }
-
- private void setupTab(final View view, final String tag, int icon, Class<?> target) {
- View tabview = createTabView(tabHost.getContext(), tag, icon);
- TabSpec tabSpec = tabHost.newTabSpec(tag);
- tabSpec.setIndicator(tabview);
- tabSpec.setContent(new Intent(this, target));
- tabHost.addTab(tabSpec);
- }
-
- private static View createTabView(final Context context, final String text, int icon) {
- View view = LayoutInflater.from(context).inflate(R.layout.main_tab_layout, null);
- TextView tv = (TextView) view.findViewById(R.id.tabsText);
- tv.setText(text);
- ImageView iv = (ImageView) view.findViewById(R.id.tabsIcon);
- iv.setImageResource(icon);
- return view;
- }
-
- // set app title to status string of ClientStatus
- private void setAppTitle() {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"TasksActivity: Could not load data, clientStatus not initialized.");
- return;
- }
- TextView statusTV = (TextView) findViewById(R.id.titleStatus);
- statusTV.setText(status.getCurrentStatusString());
- }
-
- // triggered by click on noproject_warning, starts login activity
- public void noProjectClicked(View view) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "noProjectClicked()");
- startActivity(new Intent(this, AttachProjectListActivity.class));
- }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "BOINCActivity onCreateOptionsMenu()");
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onCreateOptionsMenu()");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
-
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"TasksActivity: Could not load data, clientStatus not initialized.");
- return false;
- }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onPrepareOptionsMenu()");
+
// run mode, set title and icon based on status
MenuItem runMode = menu.findItem(R.id.run_mode);
- if(status.computingStatus == ClientStatus.COMPUTING_STATUS_NEVER) {
+ if(clientComputingStatus == ClientStatus.COMPUTING_STATUS_NEVER) {
// display play button
runMode.setTitle(R.string.menu_run_mode_enable);
runMode.setIcon(R.drawable.playw);
@@ -308,36 +377,14 @@ public class BOINCActivity extends TabActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "BOINCActivity onOptionsItemSelected()");
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BOINCActivity onOptionsItemSelected()");
+ // toggle drawer
+ if (mDrawerToggle.onOptionsItemSelected(item)) {
+ return true;
+ }
+
switch (item.getItemId()) {
- case R.id.help:
- Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://boinc.berkeley.edu/wiki/BOINC_Help"));
- startActivity(i);
- return true;
- case R.id.about:
- final Dialog dialog = new Dialog(this);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setContentView(R.layout.dialog_about);
- Button returnB = (Button) dialog.findViewById(R.id.returnB);
- TextView tvVersion = (TextView)dialog.findViewById(R.id.version);
- try {
- tvVersion.setText(getString(R.string.about_version) + " "
- + getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
- } catch (NameNotFoundException e) {if(Logging.WARNING) Log.w(Logging.TAG, "version name not found.");}
-
- returnB.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.dismiss();
- }
- });
- dialog.show();
- return true;
- case R.id.exit_boinc:
- if(Logging.DEBUG) Log.d(Logging.TAG,"exit BOINC");
- new QuitClientAsync().execute();
- return true;
case R.id.run_mode:
if(item.getTitle().equals(getApplication().getString(R.string.menu_run_mode_disable))) {
if(Logging.DEBUG) Log.d(Logging.TAG,"run mode: disable");
@@ -347,23 +394,32 @@ public class BOINCActivity extends TabActivity {
new WriteClientModeAsync().execute(BOINCDefs.RUN_MODE_AUTO);
} else if(Logging.DEBUG) Log.d(Logging.TAG,"run mode: unrecognized command");
return true;
- case R.id.event_log:
- startActivity(new Intent(this,EventLogActivity.class));
+ case R.id.projects_add:
+ startActivity(new Intent(this, SelectionListActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
- // monitor.quitClient is blocking (Thread.sleep)
- // execute in AsyncTask to maintain UI responsiveness
- private final class QuitClientAsync extends AsyncTask<Void, Void, Void> {
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ // Sync the toggle state after onRestoreInstanceState has occurred.
+ mDrawerToggle.syncState();
+ }
- @Override
- protected Void doInBackground(Void... params) {
- monitor.quitClient();
- return null;
- }
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ // Pass any configuration change to the drawer toggls
+ mDrawerToggle.onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ public void setTitle(CharSequence title) {
+ mTitle = title;
+ getSupportActionBar().setTitle(mTitle);
}
private final class WriteClientModeAsync extends AsyncTask<Integer, Void, Boolean> {
@@ -371,14 +427,27 @@ public class BOINCActivity extends TabActivity {
@Override
protected Boolean doInBackground(Integer... params) {
// setting provided mode for both, CPU computation and network.
- Boolean runMode = monitor.clientInterface.setRunMode(params[0]);
- Boolean networkMode = monitor.clientInterface.setNetworkMode(params[0]);
+ Boolean runMode;
+ try {
+ runMode = monitor.setRunMode(params[0]);
+ } catch (RemoteException e) {
+ runMode = false;
+ }
+ Boolean networkMode;
+ try {
+ networkMode = monitor.setNetworkMode(params[0]);
+ } catch (RemoteException e) {
+ networkMode = false;
+ }
return runMode && networkMode;
}
@Override
protected void onPostExecute(Boolean success) {
- if(success) monitor.forceRefresh();
+ if(success)
+ try {
+ monitor.forceRefresh();
+ } catch (RemoteException e) {}
else if(Logging.WARNING) Log.w(Logging.TAG,"setting run and network mode failed");
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/EventLogActivity.java b/android/BOINC/src/edu/berkeley/boinc/EventLogActivity.java
index 18efbf6..779ae6c 100644
--- a/android/BOINC/src/edu/berkeley/boinc/EventLogActivity.java
+++ b/android/BOINC/src/edu/berkeley/boinc/EventLogActivity.java
@@ -20,72 +20,76 @@ package edu.berkeley.boinc;
import edu.berkeley.boinc.utils.*;
import java.util.ArrayList;
-import java.util.List;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
import java.lang.StringBuffer;
import edu.berkeley.boinc.adapter.ClientLogListAdapter;
+import edu.berkeley.boinc.client.IMonitor;
import edu.berkeley.boinc.client.Monitor;
import edu.berkeley.boinc.rpc.Message;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
-import android.support.v4.app.FragmentActivity;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.ActionBar.Tab;
import android.text.ClipboardManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuInflater;
-import android.view.View;
-import android.view.Window;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
-import android.widget.TextView;
import android.widget.Toast;
-
-public class EventLogActivity extends FragmentActivity {
+public class EventLogActivity extends ActionBarActivity {
- private Monitor monitor;
+ private IMonitor monitor;
private Boolean mIsBound = false;
- private ListView clientLogList;
- private ClientLogListAdapter clientLogListAdapter;
- private ArrayList<Message> clientLogData = new ArrayList<Message>();
+ public EventLogClientFragment clientFrag;
+ public ListView clientLogList;
+ public ClientLogListAdapter clientLogListAdapter;
+ public ArrayList<Message> clientLogData = new ArrayList<Message>();
- private ListView guiLogList;
- private ArrayAdapter<String> guiLogListAdapter;
- private ArrayList<String> guiLogData = new ArrayList<String>();
+ public EventLogGuiFragment guiFrag;
+ public ListView guiLogList;
+ public ArrayAdapter<String> guiLogListAdapter;
+ public ArrayList<String> guiLogData = new ArrayList<String>();
+
+ private ArrayList<EventLogActivityTabListener<?>> listener = new ArrayList<EventLogActivityTabListener<?>>();
- // message retrieval
- private Integer pastMsgsLoadingRange = 50; // amount messages loaded when end of list is reached
+ final static int GUI_LOG_TAB_ACTIVE =1;
+ final static int CLIENT_LOG_TAB_ACTIVE =2;
@Override
public void onCreate(Bundle savedInstanceState) {
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- doBindService();
- setLayoutLoading();
-
- // adapt to custom title bar
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
super.onCreate(savedInstanceState);
- }
+
+ // setup action bar
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setTitle(R.string.menu_eventlog);
- @Override
- public void onResume() {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "EventLogActivity onResume()");
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+
+ EventLogActivityTabListener<EventLogClientFragment> clientListener = new EventLogActivityTabListener<EventLogClientFragment>(this, getString(R.string.eventlog_client_header), EventLogClientFragment.class);
+ listener.add(clientListener);
+ Tab tab = actionBar.newTab()
+ .setText(R.string.eventlog_client_header)
+ .setTabListener(clientListener);
+ actionBar.addTab(tab);
+
+ EventLogActivityTabListener<EventLogGuiFragment> guiListener = new EventLogActivityTabListener<EventLogGuiFragment>(this, getString(R.string.eventlog_gui_header), EventLogGuiFragment.class);
+ listener.add(guiListener);
+ tab = actionBar.newTab()
+ .setText(R.string.eventlog_gui_header)
+ .setTabListener(guiListener);
+ actionBar.addTab(tab);
+
+ actionBar.setDisplayHomeAsUpEnabled(true);
- super.onResume();
-
- new RetrieveRecentClientMsgs().execute(); // refresh messages
+ doBindService();
}
@Override
@@ -100,10 +104,12 @@ public class EventLogActivity extends FragmentActivity {
*/
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
- if(Logging.VERBOSE) Log.v(Logging.TAG,"EventLogActivity onServiceConnected");
- monitor = ((Monitor.LocalBinder)service).getService();
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"EventLogActivity onServiceConnected");
+ monitor = IMonitor.Stub.asInterface(service);
mIsBound = true;
- initializeLayout();
+
+ // initialize default fragment
+ ((EventLogClientFragment) getSupportFragmentManager().findFragmentByTag(getString(R.string.eventlog_client_header))).init();
}
public void onServiceDisconnected(ComponentName className) {
@@ -125,61 +131,9 @@ public class EventLogActivity extends FragmentActivity {
}
}
- // updates data list with most recent messages
- private void loadRecentMsgs(ArrayList<Message> tmpA) {
- // Prepend new messages to the event log
- try {
- int y = 0;
- for (int x = tmpA.size()-1; x >= 0; x--) {
- clientLogData.add(y, tmpA.get(x));
- y++;
- }
- } catch (Exception e) {} //IndexOutOfBoundException
- clientLogListAdapter.notifyDataSetChanged();
- }
-
- // appends older messages to data list
- private void loadPastMsgs(List<Message> tmpA) {
- // Append old messages to the event log
- try {
- for(int x = tmpA.size()-1; x >= 0; x--) {
- clientLogData.add(tmpA.get(x));
- }
- } catch (Exception e) {} //IndexOutOfBoundException
-
- clientLogListAdapter.notifyDataSetChanged();
- }
-
- private void initializeLayout() {
- try {
- // check whether monitor is bound
- if(!mIsBound) {
- setLayoutLoading();
- return;
- }
-
- setContentView(R.layout.eventlog_layout);
-
- clientLogList = (ListView) findViewById(R.id.clientLogList);
- clientLogListAdapter = new ClientLogListAdapter(EventLogActivity.this, clientLogList, R.id.clientLogList, clientLogData);
- clientLogList.setOnScrollListener(new EndlessScrollListener(5));
-
- guiLogList = (ListView) findViewById(R.id.guiLogList);
- guiLogListAdapter = new ArrayAdapter<String>(EventLogActivity.this, R.layout.eventlog_gui_listitem_layout, guiLogData);
- guiLogList.setAdapter(guiLogListAdapter);
-
- // initial data retrieval
- new RetrievePastClientMsgs().execute();
- } catch (Exception e) {
- // data retrieval failed, set layout to loading...
- setLayoutLoading();
- }
- }
-
- private void setLayoutLoading() {
- setContentView(R.layout.generic_layout_loading);
- TextView loadingHeader = (TextView)findViewById(R.id.loading_header);
- loadingHeader.setText(R.string.eventlog_loading);
+ public IMonitor getMonitorService() {
+ if(!mIsBound) if(Logging.WARNING) Log.w(Logging.TAG, "Fragment trying to obtain serive reference, but Monitor not bound in EventLogActivity");
+ return monitor;
}
@Override
@@ -190,34 +144,11 @@ public class EventLogActivity extends FragmentActivity {
return true;
}
- public void onClientLog(View v) {
- //adapt header
- v.setBackgroundColor(getResources().getColor(android.R.color.transparent));
- TextView guiLogHeader = (TextView) findViewById(R.id.guiLogHeader);
- guiLogHeader.setBackgroundResource(R.drawable.shape_light_blue_background);
- // change lists
- guiLogList.setVisibility(View.GONE);
- clientLogList.setVisibility(View.VISIBLE);
- }
-
- public void onGuiLog(View v) {
- //adapt header
- v.setBackgroundColor(getResources().getColor(android.R.color.transparent));
- TextView clientLogHeader = (TextView) findViewById(R.id.clientLogHeader);
- clientLogHeader.setBackgroundResource(R.drawable.shape_light_blue_background);
- // change lists
- clientLogList.setVisibility(View.GONE);
- guiLogList.setVisibility(View.VISIBLE);
- // read messages
- readLogcat();
- }
-
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh:
- new RetrieveRecentClientMsgs().execute();
- readLogcat();
+ updateCurrentFragment();
return true;
case R.id.email_to:
onEmailTo();
@@ -226,20 +157,43 @@ public class EventLogActivity extends FragmentActivity {
onCopy();
return true;
}
- return true;
+ return super.onOptionsItemSelected(item);
+ }
+
+ private int getActiveLog() {
+ for(EventLogActivityTabListener<?> tmp: listener) {
+ if(tmp.currentlySelected) {
+ if(tmp.mClass == EventLogClientFragment.class) return CLIENT_LOG_TAB_ACTIVE;
+ else if(tmp.mClass == EventLogGuiFragment.class) return GUI_LOG_TAB_ACTIVE;
+ }
+ }
+ return -1;
+ }
+
+ private void updateCurrentFragment(){
+ for(EventLogActivityTabListener<?> tmp: listener) {
+ if(tmp.currentlySelected) {
+ if(tmp.mClass == EventLogClientFragment.class) {
+ ((EventLogClientFragment) tmp.mFragment).update();
+ } else if(tmp.mClass == EventLogGuiFragment.class) {
+ ((EventLogGuiFragment) tmp.mFragment).update();
+ }
+ break;
+ }
+ }
}
private void onCopy() {
try {
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
- clipboard.setText(getLogDataAsString(clientLogList.getVisibility() == View.VISIBLE));
+ clipboard.setText(getLogDataAsString());
Toast.makeText(getApplicationContext(), R.string.eventlog_copy_toast, Toast.LENGTH_SHORT).show();
} catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"onCopy failed");}
}
private void onEmailTo() {
try {
- String emailText = getLogDataAsString(clientLogList.getVisibility() == View.VISIBLE);
+ String emailText = getLogDataAsString();
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
@@ -257,9 +211,10 @@ public class EventLogActivity extends FragmentActivity {
// returns the content of the log as string
// clientLog = true: client log
// clientlog = false: gui log
- private String getLogDataAsString(Boolean clientLog) {
+ private String getLogDataAsString() {
StringBuffer text = new StringBuffer();
- if(clientLog) {
+ int type = getActiveLog();
+ if(type == CLIENT_LOG_TAB_ACTIVE) {
text.append(getString(R.string.eventlog_client_header) + "\n\n");
for (int index = 0; index < clientLogList.getCount(); index++) {
text.append(clientLogListAdapter.getDate(index));
@@ -269,135 +224,13 @@ public class EventLogActivity extends FragmentActivity {
text.append(clientLogListAdapter.getMessage(index));
text.append("\n");
}
- } else {
+ } else if(type == GUI_LOG_TAB_ACTIVE) {
text.append(getString(R.string.eventlog_gui_header) + "\n\n");
for (String line: guiLogData) {
text.append(line);
text.append("\n");
}
- }
+ }else if(Logging.WARNING) Log.w(Logging.TAG,"EventLogActivity could not determine which log active.");
return text.toString();
}
-
- private void readLogcat() {
- int number = getResources().getInteger(R.integer.eventlog_gui_messages);
- guiLogData.clear();
- try {
- String logLevelFilter = Logging.TAG;
- switch(Logging.LOGLEVEL){
- case 0: return;
- case 1:
- logLevelFilter += ":E";
- break;
- case 2:
- logLevelFilter += ":W";
- break;
- case 3:
- logLevelFilter += ":I";
- break;
- case 4:
- logLevelFilter += ":D";
- break;
- case 5:
- logLevelFilter += ":V";
- break;
- }
- Process process = Runtime.getRuntime().exec("logcat -d -t " + number + " -v time " + logLevelFilter + " *:S");
- // filtering logcat output by application package is not possible on command line
- // devices with SDK > 13 will automatically "session filter"
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-
- String line = "";
- int x = 0;
- while ((line = BOINCUtils.readLineLimit(bufferedReader, 4096)) != null) {
- if(x > 1) guiLogData.add(0,line); // cut off first two lines, prepend to array (most current on top)
- x++;
- }
- if(Logging.VERBOSE) Log.v(Logging.TAG, "readLogcat read " + guiLogData.size() + " lines.");
- guiLogListAdapter.notifyDataSetChanged();
- } catch (IOException e) {if(Logging.WARNING) Log.w(Logging.TAG, "readLogcat failed", e);}
- }
-
- // onScrollListener for list view, implementing "endless scrolling"
- public final class EndlessScrollListener implements OnScrollListener {
-
- private int visibleThreshold = 5;
- private int previousTotal = 0;
- private boolean loading = true;
-
- public EndlessScrollListener(int visibleThreshold) {
- this.visibleThreshold = visibleThreshold;
- }
-
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (loading) {
- if (totalItemCount > previousTotal) {
- loading = false;
- previousTotal = totalItemCount;
- }
- }
- if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
- new RetrievePastClientMsgs().execute();
- loading = true;
- }
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- }
- }
-
- private final class RetrieveRecentClientMsgs extends AsyncTask<Void,Void,ArrayList<Message>> {
-
- private Integer mostRecentSeqNo = 0;
-
- @Override
- protected void onPreExecute() {
- if(!mIsBound) cancel(true); // cancel execution if monitor is not bound yet
- if(!clientLogData.isEmpty()) mostRecentSeqNo = clientLogData.get(0).seqno;
- }
-
- @Override
- protected ArrayList<Message> doInBackground(Void... params) {
- return monitor.clientInterface.getMessages(mostRecentSeqNo);
- }
-
- @Override
- protected void onPostExecute(ArrayList<Message> result) {
- // back in UI thread
- loadRecentMsgs(result);
- }
- }
-
- private final class RetrievePastClientMsgs extends AsyncTask<Void,Void,List<Message>> {
-
- //private int mostRecentSeqNo = 0; // most recent (highest) seqNo
- private int pastSeqNo = -1; // oldest (lowest) seqNo currently loaded to GUI
- //private int lastclientLogDataListIndex = 0; // index of last element (oldest message) in clientLogData
-
- @Override
- protected void onPreExecute() {
- if(!mIsBound) cancel(true); // cancel execution if monitor is not bound yet
- if(!clientLogData.isEmpty()) {
- pastSeqNo = clientLogData.get(clientLogData.size() - 1).seqno;
- if(pastSeqNo==0) {
- if(Logging.DEBUG) Log.d("RetrievePastMsgs", "cancel, oldest messages already loaded");
- cancel(true); // cancel if all past messages are present
- }
- }
- }
-
- @Override
- protected List<Message> doInBackground(Void... params) {
- if(Logging.DEBUG) Log.d("RetrievePastMsgs", "calling monitor with: " + pastSeqNo + " / " + pastMsgsLoadingRange);
- return monitor.clientInterface.getEventLogMessages(pastSeqNo, pastMsgsLoadingRange);
- }
-
- @Override
- protected void onPostExecute(List<Message> result) {
- // back in UI thread
- loadPastMsgs(result);
- }
- }
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/EventLogActivityTabListener.java b/android/BOINC/src/edu/berkeley/boinc/EventLogActivityTabListener.java
new file mode 100644
index 0000000..0229c37
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/EventLogActivityTabListener.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2013 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v7.app.*;
+import android.support.v7.app.ActionBar.Tab;
+
+public class EventLogActivityTabListener<T extends Fragment> implements ActionBar.TabListener {
+
+ public Fragment mFragment;
+ private final FragmentActivity mActivity;
+ private final String mTag;
+ public final Class<T> mClass;
+ public Boolean currentlySelected = false;
+
+ /** Constructor used each time a new tab is created.
+ * @param activity The host Activity, used to instantiate the fragment
+ * @param tag The identifier tag for the fragment
+ * @param clz The fragment's Class, used to instantiate the fragment
+ */
+ public EventLogActivityTabListener(FragmentActivity activity, String tag, Class<T> clz) {
+ mActivity = activity;
+ mTag = tag;
+ mClass = clz;
+
+ // Check to see if we already have a fragment for this tab, probably
+ // from a previously saved state. If so, deactivate it, because our
+ // initial state is that a tab isn't shown.
+ mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
+ if (mFragment != null && !mFragment.isDetached()) {
+ FragmentTransaction ftd = mActivity.getSupportFragmentManager().beginTransaction();
+ ftd.detach(mFragment);
+ ftd.commit();
+ }
+ }
+
+ /* The following are each of the ActionBar.TabListener callbacks */
+
+ public void onTabSelected(Tab tab, FragmentTransaction ft) {
+ // Check if the fragment is already initialized
+ if (mFragment == null) {
+ // If not, instantiate and add it to the activity
+ mFragment = Fragment.instantiate(mActivity, mClass.getName());
+ ft.add(android.R.id.content, mFragment, mTag);
+ } else {
+ // If it exists, simply attach it in order to show it
+ ft.attach(mFragment);
+ }
+ currentlySelected = true;
+ }
+
+ public void onTabUnselected(Tab tab, FragmentTransaction ft) {
+ if (mFragment != null) {
+ // Detach the fragment, because another one is being attached
+ ft.detach(mFragment);
+ }
+ currentlySelected = false;
+ }
+
+ public void onTabReselected(Tab tab, FragmentTransaction ft) {
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/EventLogClientFragment.java b/android/BOINC/src/edu/berkeley/boinc/EventLogClientFragment.java
new file mode 100644
index 0000000..edc0fc0
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/EventLogClientFragment.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.adapter.ClientLogListAdapter;
+import edu.berkeley.boinc.rpc.Message;
+import edu.berkeley.boinc.utils.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.ListView;
+import android.widget.AbsListView.OnScrollListener;
+
+public class EventLogClientFragment extends Fragment {
+
+ // message retrieval
+ private Integer pastMsgsLoadingRange = 50; // amount messages loaded when end of list is reached
+ private EventLogActivity a;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ a = ((EventLogActivity)getActivity());
+
+ View layout = inflater.inflate(R.layout.eventlog_client_layout, container, false);
+
+ a.clientLogList = (ListView) layout.findViewById(R.id.clientLogList);
+ a.clientLogListAdapter = new ClientLogListAdapter(getActivity(), a.clientLogList, R.id.clientLogList, a.clientLogData);
+ a.clientLogList.setOnScrollListener(new EndlessScrollListener(5));
+
+ return layout;
+ }
+
+ public void init() {
+ new RetrievePastClientMsgs().execute(); // read messages
+ }
+
+ public void update() {
+ new RetrieveRecentClientMsgs().execute(); // refresh messages
+ }
+
+ // appends older messages to data list
+ private void loadPastMsgs(List<Message> tmpA) {
+ // Append old messages to the event log
+ try {
+ for(int x = tmpA.size()-1; x >= 0; x--) {
+ a.clientLogData.add(tmpA.get(x));
+ }
+ } catch (Exception e) {} //IndexOutOfBoundException
+
+ a.clientLogListAdapter.notifyDataSetChanged();
+ }
+
+ // updates data list with most recent messages
+ private void loadRecentMsgs(ArrayList<Message> tmpA) {
+ // Prepend new messages to the event log
+ try {
+ int y = 0;
+ for (int x = tmpA.size()-1; x >= 0; x--) {
+ a.clientLogData.add(y, tmpA.get(x));
+ y++;
+ }
+ } catch (Exception e) {} //IndexOutOfBoundException
+ a.clientLogListAdapter.notifyDataSetChanged();
+ }
+
+ // onScrollListener for list view, implementing "endless scrolling"
+ public final class EndlessScrollListener implements OnScrollListener {
+
+ private int visibleThreshold = 5;
+ private int previousTotal = 0;
+ private boolean loading = true;
+
+ public EndlessScrollListener(int visibleThreshold) {
+ this.visibleThreshold = visibleThreshold;
+ }
+
+ @Override
+ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
+ if (loading) {
+ if (totalItemCount > previousTotal) {
+ loading = false;
+ previousTotal = totalItemCount;
+ }
+ }
+ if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
+ new RetrievePastClientMsgs().execute();
+ loading = true;
+ }
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) {
+ }
+ }
+
+ private final class RetrieveRecentClientMsgs extends AsyncTask<Void,Void,ArrayList<Message>> {
+
+ private Integer mostRecentSeqNo = 0;
+
+ @Override
+ protected void onPreExecute() {
+ if(!a.clientLogData.isEmpty()) mostRecentSeqNo = a.clientLogData.get(0).seqno;
+ }
+
+ @Override
+ protected ArrayList<Message> doInBackground(Void... params) {
+ try {
+ return (ArrayList<Message>) ((EventLogActivity)getActivity()).getMonitorService().getMessages(mostRecentSeqNo);
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return new ArrayList<Message>();
+ }
+ }
+
+ @Override
+ protected void onPostExecute(ArrayList<Message> result) {
+ // back in UI thread
+ loadRecentMsgs(result);
+ }
+ }
+
+ private final class RetrievePastClientMsgs extends AsyncTask<Void,Void,List<Message>> {
+
+ //private int mostRecentSeqNo = 0; // most recent (highest) seqNo
+ private int pastSeqNo = -1; // oldest (lowest) seqNo currently loaded to GUI
+ //private int lastclientLogDataListIndex = 0; // index of last element (oldest message) in clientLogData
+
+ @Override
+ protected void onPreExecute() {
+ if(!a.clientLogData.isEmpty()) {
+ pastSeqNo = a.clientLogData.get(a.clientLogData.size() - 1).seqno;
+ if(pastSeqNo==0) {
+ if(Logging.DEBUG) Log.d("RetrievePastMsgs", "cancel, oldest messages already loaded");
+ cancel(true); // cancel if all past messages are present
+ }
+ }
+ }
+
+ @Override
+ protected List<Message> doInBackground(Void... params) {
+ if(Logging.DEBUG) Log.d("RetrievePastMsgs", "calling monitor with: " + pastSeqNo + " / " + pastMsgsLoadingRange);
+ try {
+ return ((EventLogActivity)getActivity()).getMonitorService().getEventLogMessages(pastSeqNo, pastMsgsLoadingRange);
+ } catch (RemoteException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return new ArrayList<Message>();
+ }
+ }
+
+ @Override
+ protected void onPostExecute(List<Message> result) {
+ // back in UI thread
+ loadPastMsgs(result);
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/EventLogGuiFragment.java b/android/BOINC/src/edu/berkeley/boinc/EventLogGuiFragment.java
new file mode 100644
index 0000000..18d0cff
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/EventLogGuiFragment.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+public class EventLogGuiFragment extends Fragment {
+
+ private EventLogActivity a;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ a = ((EventLogActivity)getActivity());
+
+ View layout = inflater.inflate(R.layout.eventlog_gui_layout, container, false);
+
+ a.guiLogList = (ListView) layout.findViewById(R.id.guiLogList);
+ a.guiLogListAdapter = new ArrayAdapter<String>(getActivity(), R.layout.eventlog_gui_listitem_layout, a.guiLogData);
+ a.guiLogList.setAdapter(a.guiLogListAdapter);
+
+ // read messages
+ readLogcat();
+
+ return layout;
+ }
+
+ public void init() {
+ readLogcat();
+ }
+
+ public void update() {
+ readLogcat();
+ }
+
+ private void readLogcat() {
+ int number = getResources().getInteger(R.integer.eventlog_gui_messages);
+ a.guiLogData.clear();
+ try {
+ String logLevelFilter = Logging.TAG;
+ switch(Logging.LOGLEVEL){
+ case 0: return;
+ case 1:
+ logLevelFilter += ":E";
+ break;
+ case 2:
+ logLevelFilter += ":W";
+ break;
+ case 3:
+ logLevelFilter += ":I";
+ break;
+ case 4:
+ logLevelFilter += ":D";
+ break;
+ case 5:
+ logLevelFilter += ":V";
+ break;
+ }
+ Process process = Runtime.getRuntime().exec("logcat -d -t " + number + " -v time " + logLevelFilter + " *:S");
+ // filtering logcat output by application package is not possible on command line
+ // devices with SDK > 13 will automatically "session filter"
+ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+
+ String line = "";
+ int x = 0;
+ while ((line = BOINCUtils.readLineLimit(bufferedReader, 4096)) != null) {
+ if(x > 1) a.guiLogData.add(0,line); // cut off first two lines, prepend to array (most current on top)
+ x++;
+ }
+ if(Logging.VERBOSE) Log.v(Logging.TAG, "readLogcat read " + a.guiLogData.size() + " lines.");
+ a.guiLogListAdapter.notifyDataSetChanged();
+ } catch (IOException e) {if(Logging.WARNING) Log.w(Logging.TAG, "readLogcat failed", e);}
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/ForwardDialog.java b/android/BOINC/src/edu/berkeley/boinc/ForwardDialog.java
new file mode 100644
index 0000000..bba7715
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/ForwardDialog.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+
+/**
+ * Shows dialog to forward or exit if other BONIC based application detected on device.
+ */
+public class ForwardDialog extends Activity {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage(getString(R.string.ptg_dialog_text))
+ .setCancelable(false)
+ .setTitle(getString(R.string.ptg_dialog_header))
+ .setPositiveButton(getString(R.string.ptg_dialog_launch), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ Intent startPTGIntent = new Intent();
+ startPTGIntent.setClassName("com.htc.ptg", "com.htc.ptg.SplashActivity");
+ startActivity(startPTGIntent);
+ finish();
+ }
+ })
+ .setNegativeButton(getString(R.string.ptg_dialog_exit), new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ //BOINCActivity.this.finish();
+ finish();
+ }
+ }).show();
+
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/NoticesActivity.java b/android/BOINC/src/edu/berkeley/boinc/NoticesActivity.java
deleted file mode 100644
index b04aa6c..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/NoticesActivity.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-import java.util.ArrayList;
-import java.util.Collections;
-import edu.berkeley.boinc.adapter.NoticesListAdapter;
-import edu.berkeley.boinc.client.Monitor;
-import edu.berkeley.boinc.rpc.Notice;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.support.v4.app.FragmentActivity;
-import android.util.Log;
-import android.view.View;
-import android.widget.ListView;
-import android.widget.TextView;
-
-public class NoticesActivity extends FragmentActivity {
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- private ListView noticesList;
- private NoticesListAdapter noticesListAdapter;
- private ArrayList<Notice> data = new ArrayList<Notice>();
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
-
- setLayoutLoading();
- doBindService();
-
- super.onCreate(savedInstanceState);
- }
-
- @Override
- public void onResume() {
- if(Logging.VERBOSE) Log.d(Logging.TAG, "NoticesActivity onResume()");
-
- super.onResume();
-
- // data retrieval
- (new NoticesRetrievalAsync()).execute();
- }
-
- @Override
- protected void onDestroy() {
- doUnbindService();
- super.onDestroy();
- }
-
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- if(Logging.VERBOSE) Log.v(Logging.TAG,"EventLogActivity onServiceConnected");
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
-
- // data retrieval
- (new NoticesRetrievalAsync()).execute();
- }
-
- public void onServiceDisconnected(ComponentName className) {
- monitor = null;
- mIsBound = false;
- }
- };
-
- private void doBindService() {
- if(!mIsBound) {
- getApplicationContext().bindService(new Intent(this, Monitor.class), mConnection, 0);
- }
- }
-
- private void doUnbindService() {
- if (mIsBound) {
- getApplicationContext().unbindService(mConnection);
- mIsBound = false;
- }
- }
-
- private void populateLayout() {
- try {
-
- setContentView(R.layout.notices_layout);
-
- noticesList = (ListView) findViewById(R.id.noticesList);
- noticesListAdapter = new NoticesListAdapter(NoticesActivity.this, R.id.noticesList, data);
- noticesList.setAdapter(noticesListAdapter);
-
-
- } catch (Exception e) {
- // data retrieval failed, set layout to loading...
- setLayoutLoading();
- }
- }
-
- private void setLayoutLoading() {
- setContentView(R.layout.generic_layout_loading);
- TextView loadingHeader = (TextView)findViewById(R.id.loading_header);
- loadingHeader.setText(R.string.eventlog_loading);
- }
-
- public void noticeClick(View v) {
- String url = (String) v.getTag();
- if(Logging.DEBUG) Log.d(Logging.TAG,"noticeClick: " + url);
-
- if(url != null && !url.isEmpty()){
- Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- startActivity(i);
- }
- }
-
- /**
- * retrieves all notices from the client
- * starting with seq number 0
- */
- private final class NoticesRetrievalAsync extends AsyncTask<Void,Void,Boolean> {
-
- @Override
- protected void onPreExecute() {
- if(Logging.DEBUG) Log.d(Logging.TAG,"NoticesRetrievalAsync onPreExecute, mIsBound: " + mIsBound);
- if(!mIsBound) cancel(false);
- super.onPreExecute();
- }
-
- @Override
- protected Boolean doInBackground(Void... params) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"NoticesRetrievalAsync doInBackground");
- try{
- ArrayList<Notice> monitorList = monitor.clientInterface.getNotices(0);
- // remove client and scheduler notices
- ArrayList<Notice> rssNotices = new ArrayList<Notice>();
- for(Notice notice: monitorList) {
- if(!notice.isClientNotice && !notice.isServerNotice) rssNotices.add(notice);
- }
-
- // reverse to have most current on top
- Collections.reverse(rssNotices);
- data = rssNotices;
- } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"NoticesRetrievalAsync error in do in background",e);}
- if(data != null) return true;
- else return false;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"NoticesRetrievalAsync success: " + success + " data elements: " + data.size());
- if(success) populateLayout();
- else if(Logging.WARNING) Log.w(Logging.TAG,"NoticesRetrievalAsync failed.");
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/NoticesFragment.java b/android/BOINC/src/edu/berkeley/boinc/NoticesFragment.java
new file mode 100644
index 0000000..c314603
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/NoticesFragment.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import edu.berkeley.boinc.adapter.NoticesListAdapter;
+import edu.berkeley.boinc.rpc.Notice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+public class NoticesFragment extends Fragment {
+
+ private ListView noticesList;
+ private NoticesListAdapter noticesListAdapter;
+ private ArrayList<Notice> data = new ArrayList<Notice>();
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"NoticesFragment onCreateView");
+ View layout = inflater.inflate(R.layout.notices_layout, container, false);
+ noticesList = (ListView) layout.findViewById(R.id.noticesList);
+ updateNotices();
+ noticesListAdapter = new NoticesListAdapter(getActivity(), R.id.noticesList, data);
+ noticesList.setAdapter(noticesListAdapter);
+ return layout;
+ }
+
+ @Override
+ public void onResume() {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "NoticesFragment onResume()");
+ getActivity().registerReceiver(mClientStatusChangeRec,ifcsc);
+
+ // clear notice notification
+ try {
+ BOINCActivity.monitor.cancelNoticeNotification();
+ } catch (Exception e) {}
+ super.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ //unregister receiver, so there are not multiple intents flying in
+ if(Logging.DEBUG) Log.d(Logging.TAG,"NoticesFragment remove receiver");
+ getActivity().unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context,Intent intent) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "NoticesFragment ClientStatusChange - onReceive()");
+
+ // data retrieval
+ updateNotices();
+ noticesListAdapter.clear();
+ for(Notice tmp: data) { // addAll only in API 11
+ noticesListAdapter.add(tmp);
+ }
+ noticesListAdapter.notifyDataSetChanged();
+ }
+ };
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+
+ private void updateNotices() {
+ try{
+ data = (ArrayList<Notice>) BOINCActivity.monitor.getRssNotices();
+ // sorting policy:
+ // latest arrival first.
+ Collections.sort(data, new Comparator<Notice>() {
+ @Override
+ public int compare(Notice lhs, Notice rhs) {
+ return ((Double) (rhs.create_time - lhs.create_time)).intValue();
+ }
+ });
+ } catch(Exception e){}
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/PrefsActivity.java b/android/BOINC/src/edu/berkeley/boinc/PrefsActivity.java
deleted file mode 100644
index 27ecdc5..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/PrefsActivity.java
+++ /dev/null
@@ -1,673 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import java.util.ArrayList;
-import edu.berkeley.boinc.adapter.PrefsListAdapter;
-import edu.berkeley.boinc.adapter.PrefsListItemWrapper;
-import edu.berkeley.boinc.adapter.PrefsListItemWrapperBool;
-import edu.berkeley.boinc.adapter.PrefsListItemWrapperValue;
-import edu.berkeley.boinc.adapter.PrefsSelectionDialogListAdapter;
-import edu.berkeley.boinc.client.ClientNotification;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
-import edu.berkeley.boinc.rpc.GlobalPreferences;
-import edu.berkeley.boinc.rpc.HostInfo;
-import android.app.Dialog;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.support.v4.app.FragmentActivity;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.SeekBar;
-import android.widget.TextView;
-import android.widget.Toast;
-
-public class PrefsActivity extends FragmentActivity {
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- private ListView lv;
- private PrefsListAdapter listAdapter;
-
- private ArrayList<PrefsListItemWrapper> data = new ArrayList<PrefsListItemWrapper>(); //Adapter for list data
- private GlobalPreferences clientPrefs = null; //preferences of the client, read on every onResume via RPC
- private AppPreferences appPrefs = null; //Android specific preferences, singleton of monitor
- private HostInfo hostinfo = null;
-
- private Boolean layoutLoading = true;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- doBindService();
- }
-
- /*
- * Service binding part
- * only necessary, when function on monitor instance has to be called
- */
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"PrefsActivity onServiceConnected");
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
- appPrefs = Monitor.getAppPrefs();
- if(Logging.DEBUG) Log.d(Logging.TAG, "appPrefs available");
- populateLayout();
- }
-
- public void onServiceDisconnected(ComponentName className) {
- monitor = null;
- mIsBound = false;
- }
- };
-
- private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
-
- @Override
- public void onReceive(Context context,Intent intent) {
- if(layoutLoading) {
- // layout was previously loading, i.e. data retrieval failed, retry!
- if(Logging.DEBUG) Log.d(Logging.TAG,"PrefsActivity.onReceive: previous loading failed, re-try.");
- populateLayout();
- }
- }
- };
- private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
-
- @Override
- public void onResume() {
- super.onResume();
- registerReceiver(mClientStatusChangeRec,ifcsc);
- }
-
- @Override
- public void onPause() {
- unregisterReceiver(mClientStatusChangeRec);
- super.onPause();
- }
-
- private void doBindService() {
- if(!mIsBound) {
- getApplicationContext().bindService(new Intent(this, Monitor.class), mConnection, 0); //calling within Tab needs getApplicationContext() for bindService to work!
- }
- }
-
- private void doUnbindService() {
- if (mIsBound) {
- getApplicationContext().unbindService(mConnection);
- mIsBound = false;
- }
- }
-
- private Boolean getPrefs() {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"PrefsActivity: Could not load data, clientStatus not initialized.");
- return false;
- }
- clientPrefs = status.getPrefs(); //read prefs from client via rpc
- if(clientPrefs == null) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "readPrefs: null, return false");
- return false;
- }
- //if(Logging.DEBUG) Log.d(Logging.TAG, "readPrefs done");
- return true;
- }
-
- private Boolean getHostInfo() {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"PrefsActivity: Could not load data, clientStatus not initialized.");
- return false;
- }
- hostinfo = status.getHostInfo(); //Get the hostinfo from client via rpc
- if(hostinfo == null) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "getHostInfo: null, return false");
- return false;
- }
- return true;
- }
-
- private void populateLayout() {
-
- if(!getPrefs() || appPrefs == null || !getHostInfo()) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "populateLayout returns, data is not present");
- setLayoutLoading();
-
- return;
- }
-
- // setup layout
- setContentView(R.layout.prefs_layout);
- lv = (ListView) findViewById(R.id.listview);
- listAdapter = new PrefsListAdapter(PrefsActivity.this,R.id.listview,data);
- lv.setAdapter(listAdapter);
- layoutLoading = false;
-
- data.clear();
-
- Boolean advanced = appPrefs.getShowAdvanced();
- Boolean stationaryDeviceSuspected = false;
- if(mIsBound) stationaryDeviceSuspected = monitor.getDeviceStatus().isStationaryDeviceSuspected();
- Boolean stationaryDeviceMode = appPrefs.getStationaryDeviceMode();
-
- // general
- data.add(new PrefsListItemWrapper(this,R.string.prefs_category_general,true));
- data.add(new PrefsListItemWrapperBool(this,R.string.prefs_autostart_header,R.string.prefs_category_general,appPrefs.getAutostart()));
- data.add(new PrefsListItemWrapperBool(this,R.string.prefs_show_notification_header,R.string.prefs_category_general,appPrefs.getShowNotification()));
- data.add(new PrefsListItemWrapperBool(this,R.string.prefs_show_advanced_header,R.string.prefs_category_general,appPrefs.getShowAdvanced()));
- // network
- data.add(new PrefsListItemWrapper(this,R.string.prefs_category_network,true));
- data.add(new PrefsListItemWrapperBool(this,R.string.prefs_network_wifi_only_header,R.string.prefs_category_network,clientPrefs.network_wifi_only));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_network_daily_xfer_limit_mb_header,R.string.prefs_category_network,clientPrefs.daily_xfer_limit_mb));
- // power
- data.add(new PrefsListItemWrapper(this,R.string.prefs_category_power,true));
- if(stationaryDeviceSuspected) { // API indicates that there is no battery, offer opt-in preference for stationary device mode
- data.add(new PrefsListItemWrapperBool(this,R.string.prefs_stationary_device_mode_header,R.string.prefs_category_power,appPrefs.getStationaryDeviceMode()));
- }
- if(!stationaryDeviceMode) { // client would compute regardless of battery preferences, so only show if that is not the case
- data.add(new PrefsListItemWrapper(this,R.string.prefs_power_source_header,R.string.prefs_category_power));
- data.add(new PrefsListItemWrapperValue(this,R.string.battery_charge_min_pct_header,R.string.prefs_category_power,clientPrefs.battery_charge_min_pct));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.battery_temperature_max_header,R.string.prefs_category_power,clientPrefs.battery_max_temperature));
- }
- // cpu
- if(advanced) data.add(new PrefsListItemWrapper(this,R.string.prefs_category_cpu,true));
- if(advanced && hostinfo.p_ncpus > 1) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_cpu_number_cpus_header,R.string.prefs_category_cpu,pctCpuCoresToNumber(clientPrefs.max_ncpus_pct)));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_cpu_time_max_header,R.string.prefs_category_cpu,clientPrefs.cpu_usage_limit));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_cpu_other_load_suspension_header,R.string.prefs_category_cpu,clientPrefs.suspend_cpu_usage));
- // storage
- if(advanced) data.add(new PrefsListItemWrapper(this,R.string.prefs_category_storage,true));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_disk_max_pct_header,R.string.prefs_category_storage,clientPrefs.disk_max_used_pct));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_disk_min_free_gb_header,R.string.prefs_category_storage,clientPrefs.disk_min_free_gb));
- // memory
- if(advanced) data.add(new PrefsListItemWrapper(this,R.string.prefs_category_memory,true));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_memory_max_idle_header,R.string.prefs_category_memory,clientPrefs.ram_max_used_idle_frac));
- // debug
- if(advanced) data.add(new PrefsListItemWrapper(this,R.string.prefs_category_debug,true));
- if(advanced) data.add(new PrefsListItemWrapper(this,R.string.prefs_client_log_flags_header,R.string.prefs_category_debug));
- if(advanced) data.add(new PrefsListItemWrapperValue(this,R.string.prefs_gui_log_level_header,R.string.prefs_category_debug,(double)appPrefs.getLogLevel()));
- }
-
- private void updateLayout(){
- listAdapter.notifyDataSetChanged();
- }
-
- // updates list item of boolean preference
- // requires updateLayout to be called afterwards
- private void updateBoolPref(int ID, Boolean newValue) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "updateBoolPref for ID: " + ID + " value: " + newValue);
- for (PrefsListItemWrapper item: data) {
- if(item.ID == ID){
- ((PrefsListItemWrapperBool) item).setStatus(newValue);
- continue;
- }
- }
- }
-
- // updates list item of value preference
- // requires updateLayout to be called afterwards
- private void updateValuePref(int ID, Double newValue) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "updateValuePref for ID: " + ID + " value: " + newValue);
- for (PrefsListItemWrapper item: data) {
- if(item.ID == ID){
- ((PrefsListItemWrapperValue) item).status = newValue;
- continue;
- }
- }
- }
-
- private void setLayoutLoading() {
- if(Logging.DEBUG) Log.d(Logging.TAG,"setLayoutLoading()");
- setContentView(R.layout.generic_layout_loading);
- TextView loadingHeader = (TextView)findViewById(R.id.loading_header);
- loadingHeader.setText(R.string.prefs_loading);
- layoutLoading = true;
- }
-
- // onClick of listview items with prefs_layout_listitem_bool
- public void onCbClick (View view) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"onCbClick");
- Integer ID = (Integer) view.getTag();
- CheckBox source = (CheckBox) view;
- Boolean isSet = source.isChecked();
-
- switch (ID) {
- case R.string.prefs_autostart_header: //app pref
- appPrefs.setAutostart(isSet);
- updateBoolPref(ID, isSet);
- updateLayout();
- break;
- case R.string.prefs_show_notification_header: //app pref
- appPrefs.setShowNotification(isSet);
- if(isSet) ClientNotification.getInstance(getApplicationContext()).update();
- else ClientNotification.getInstance(getApplicationContext()).cancel();
- updateBoolPref(ID, isSet);
- updateLayout();
- break;
- case R.string.prefs_show_advanced_header: //app pref
- appPrefs.setShowAdvanced(isSet);
- // reload complete layout to remove/add advanced elements
- populateLayout();
- break;
- case R.string.prefs_network_wifi_only_header: //client pref
- clientPrefs.network_wifi_only = isSet;
- updateBoolPref(ID, isSet);
- new WriteClientPrefsAsync().execute(clientPrefs); //async task triggers layout update
- break;
- case R.string.prefs_stationary_device_mode_header: //app pref
- appPrefs.setStationaryDeviceMode(isSet);
- // reload complete layout to remove/add power preference elements
- populateLayout();
- break;
- }
- }
-
- // onClick of listview items with prefs_layout_listitem
- public void onItemClick (View view) {
- PrefsListItemWrapper item = (PrefsListItemWrapper)view.getTag(); // cast to wrapper super class
- final Dialog dialog = new Dialog(this);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
-
- // setup dialog layout
- switch(item.ID) {
- case R.string.prefs_network_daily_xfer_limit_mb_header:
- dialog.setContentView(R.layout.prefs_layout_dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- setupDialogButtons(item, dialog);
- break;
- case R.string.prefs_power_source_header:
- setupSelectionListDialog(item, dialog);
- break;
- case R.string.battery_charge_min_pct_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- case R.string.battery_temperature_max_header:
- dialog.setContentView(R.layout.prefs_layout_dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- setupDialogButtons(item, dialog);
- break;
- case R.string.prefs_cpu_number_cpus_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- case R.string.prefs_cpu_time_max_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- case R.string.prefs_cpu_other_load_suspension_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- case R.string.prefs_disk_max_pct_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- case R.string.prefs_disk_min_free_gb_header:
- dialog.setContentView(R.layout.prefs_layout_dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- setupDialogButtons(item, dialog);
- break;
- case R.string.prefs_memory_max_idle_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- case R.string.prefs_client_log_flags_header:
- setupSelectionListDialog(item, dialog);
- break;
- case R.string.prefs_gui_log_level_header:
- setupSliderDialog(item, dialog);
- ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
- break;
- default:
- if(Logging.ERROR) Log.d(Logging.TAG,"PrefsActivity onItemClick: could not map ID: " + item.ID);
- return;
- }
-
- // show dialog
- dialog.show();
- }
-
- private void setupSliderDialog(PrefsListItemWrapper item, final Dialog dialog) {
- final PrefsListItemWrapperValue valueWrapper = (PrefsListItemWrapperValue) item;
- dialog.setContentView(R.layout.prefs_layout_dialog_pct);
- TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
- SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
-
- if(valueWrapper.ID == R.string.battery_charge_min_pct_header ||
- valueWrapper.ID == R.string.prefs_disk_max_pct_header ||
- valueWrapper.ID == R.string.prefs_cpu_time_max_header ||
- valueWrapper.ID == R.string.prefs_cpu_other_load_suspension_header ||
- valueWrapper.ID == R.string.prefs_memory_max_idle_header ) {
- sliderProgress.setText(valueWrapper.status.intValue() + " " + getString(R.string.prefs_unit_pct));
- Double seekBarDefault = valueWrapper.status / 10;
- slider.setProgress(seekBarDefault.intValue());
- slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
- String progressString = (progress * 10) + " " + getString(R.string.prefs_unit_pct);
- TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
- sliderProgress.setText(progressString);
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {}
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {}
- });
- } else if(valueWrapper.ID == R.string.prefs_cpu_number_cpus_header) {
- if(!getHostInfo()) {
- if(Logging.WARNING) Log.w(Logging.TAG, "onItemClick missing hostInfo");
- return;
- }
- sliderProgress.setText(""+valueWrapper.status.intValue());
- slider.setMax(hostinfo.p_ncpus);
- slider.setProgress(valueWrapper.status.intValue());
- slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
- if(progress == 0) progress = 1; // do not allow 0 cpus
- String progressString = String.valueOf(progress);
- TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
- sliderProgress.setText(progressString);
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {}
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {}
- });
- } else if(valueWrapper.ID == R.string.prefs_gui_log_level_header) {
- sliderProgress.setText(""+valueWrapper.status.intValue());
- slider.setMax(5);
- slider.setProgress(valueWrapper.status.intValue());
- slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
- String progressString = String.valueOf(progress);
- TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
- sliderProgress.setText(progressString);
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {}
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {}
- });
- }
-
- setupDialogButtons(item, dialog);
- }
-
- private void setupSelectionListDialog(final PrefsListItemWrapper item, final Dialog dialog) {
- dialog.setContentView(R.layout.prefs_layout_dialog_selection);
-
- if(item.ID == R.string.prefs_client_log_flags_header) {
- final ArrayList<SelectionDialogOption> options = new ArrayList<SelectionDialogOption>();
- String[] array = getResources().getStringArray(R.array.prefs_client_log_flags);
- for(String option: array) options.add(new SelectionDialogOption(option));
- ListView lv = (ListView) dialog.findViewById(R.id.selection);
- new PrefsSelectionDialogListAdapter(this, lv, R.id.selection, options);
-
- // setup confirm button action
- Button confirm = (Button) dialog.findViewById(R.id.confirm);
- confirm.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- ArrayList<String> selectedOptions = new ArrayList<String>();
- for(SelectionDialogOption option: options) if(option.selected) selectedOptions.add(option.name);
- if(Logging.DEBUG) Log.d(Logging.TAG, selectedOptions.size() + " log flags selected");
- new SetCcConfigAsync().execute(formatOptionsToCcConfig(selectedOptions));
- dialog.dismiss();
- }
- });
- }else if(item.ID == R.string.prefs_power_source_header) {
- final ArrayList<SelectionDialogOption> options = new ArrayList<SelectionDialogOption>();
- options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_ac), appPrefs.getPowerSourceAc()));
- options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_usb), appPrefs.getPowerSourceUsb()));
- options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_wireless), appPrefs.getPowerSourceWireless()));
- options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_battery), clientPrefs.run_on_batteries, true));
- ListView lv = (ListView) dialog.findViewById(R.id.selection);
- new PrefsSelectionDialogListAdapter(this, lv, R.id.selection, options);
-
- // setup confirm button action
- Button confirm = (Button) dialog.findViewById(R.id.confirm);
- confirm.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- for(SelectionDialogOption option: options) {
- if(option.name == getResources().getString(R.string.prefs_power_source_ac)) appPrefs.setPowerSourceAc(option.selected);
- if(option.name == getResources().getString(R.string.prefs_power_source_usb)) appPrefs.setPowerSourceUsb(option.selected);
- if(option.name == getResources().getString(R.string.prefs_power_source_wireless)) appPrefs.setPowerSourceWireless(option.selected);
- if(option.name == getResources().getString(R.string.prefs_power_source_battery)) {
- clientPrefs.run_on_batteries = option.selected;
- new WriteClientPrefsAsync().execute(clientPrefs); //async task triggers layout update
- }
- }
- dialog.dismiss();
- }
- });
- }
-
- // generic cancel button
- Button cancel = (Button) dialog.findViewById(R.id.cancel);
- cancel.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.dismiss();
- }
- });
- }
-
- private void setupDialogButtons(final PrefsListItemWrapper item, final Dialog dialog) {
- // confirm
- Button confirm = (Button) dialog.findViewById(R.id.confirm);
- confirm.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if(item.ID == R.string.battery_charge_min_pct_header ||
- item.ID == R.string.prefs_disk_max_pct_header ||
- item.ID == R.string.prefs_cpu_time_max_header ||
- item.ID == R.string.prefs_cpu_other_load_suspension_header ||
- item.ID == R.string.prefs_memory_max_idle_header ) {
- SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
- double value = slider.getProgress()*10;
- writeClientValuePreference(item.ID, value);
- } else if(item.ID == R.string.prefs_cpu_number_cpus_header) {
- SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
- int sbProgress = slider.getProgress();
- if(sbProgress == 0) sbProgress = 1;
- double value = numberCpuCoresToPct(sbProgress);
- writeClientValuePreference(item.ID, value);
- } else if(item.ID == R.string.prefs_gui_log_level_header) {
- SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
- int sbProgress = slider.getProgress();
- appPrefs.setLogLevel(sbProgress);
- updateValuePref(item.ID, (double) sbProgress);
- updateLayout();
- } else if(item.ID == R.string.prefs_network_daily_xfer_limit_mb_header || item.ID == R.string.battery_temperature_max_header || item.ID == R.string.prefs_disk_min_free_gb_header) {
- EditText edit = (EditText) dialog.findViewById(R.id.Input);
- String input = edit.getText().toString();
- Double valueTmp = parseInputValueToDouble(input);
- if(valueTmp == null) return;
- double value = valueTmp;
- writeClientValuePreference(item.ID, value);
- }
- dialog.dismiss();
- }
- });
- // cancel
- Button cancel = (Button) dialog.findViewById(R.id.cancel);
- cancel.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.dismiss();
- }
- });
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.VERBOSE) Log.v(Logging.TAG,"PrefsActivity onDestroy()");
- super.onDestroy();
- doUnbindService();
- }
-
- private void writeClientValuePreference(int id, double value) {
- // update preferences
- switch (id) {
- case R.string.prefs_disk_max_pct_header:
- clientPrefs.disk_max_used_pct = value;
- break;
- case R.string.prefs_disk_min_free_gb_header:
- clientPrefs.disk_min_free_gb = value;
- break;
- case R.string.prefs_network_daily_xfer_limit_mb_header:
- clientPrefs.daily_xfer_limit_mb = value;
- break;
- case R.string.battery_charge_min_pct_header:
- clientPrefs.battery_charge_min_pct = value;
- break;
- case R.string.battery_temperature_max_header:
- clientPrefs.battery_max_temperature = value;
- break;
- case R.string.prefs_cpu_number_cpus_header:
- clientPrefs.max_ncpus_pct = value;
- //convert value back to number for layout update
- value = pctCpuCoresToNumber(value);
- break;
- case R.string.prefs_cpu_time_max_header:
- clientPrefs.cpu_usage_limit = value;
- break;
- case R.string.prefs_cpu_other_load_suspension_header:
- clientPrefs.suspend_cpu_usage = value;
- break;
- case R.string.prefs_memory_max_idle_header:
- clientPrefs.ram_max_used_idle_frac = value;
- break;
- default:
- if(Logging.DEBUG) Log.d(Logging.TAG,"onClick (dialog submit button), couldnt match ID");
- Toast toast = Toast.makeText(getApplicationContext(), "ooops! something went wrong...", Toast.LENGTH_SHORT);
- toast.show();
- return;
- }
- // update list item
- updateValuePref(id, value);
- // preferences adapted, write preferences to client
- new WriteClientPrefsAsync().execute(clientPrefs);
- }
-
- private double numberCpuCoresToPct(double ncpus) {
- double pct = (ncpus / (double)hostinfo.p_ncpus) * 100;
- if(Logging.DEBUG) Log.d(Logging.TAG,"numberCpuCoresToPct: " + ncpus + hostinfo.p_ncpus + pct);
- return pct;
- }
-
- private double pctCpuCoresToNumber(double pct) {
- double ncpus = (double)hostinfo.p_ncpus * (pct / 100.0);
- if(ncpus < 1.0) ncpus = 1.0;
- return ncpus;
- }
-
- public Double parseInputValueToDouble(String input) {
- // parse value
- Double value = 0.0;
- try {
- input=input.replaceAll(",","."); //replace e.g. European decimal seperator "," by "."
- value = Double.parseDouble(input);
- if(Logging.DEBUG) Log.d(Logging.TAG,"parseInputValueToDouble: " + value);
- return value;
- } catch (Exception e) {
- if(Logging.WARNING) Log.w(Logging.TAG, e);
- Toast toast = Toast.makeText(getApplicationContext(), "wrong format!", Toast.LENGTH_SHORT);
- toast.show();
- return null;
- }
- }
-
- private String formatOptionsToCcConfig(ArrayList<String> options) {
- StringBuilder builder = new StringBuilder();
- builder.append("<cc_config>\n <log_flags>\n");
- for(String option: options) builder.append(" <" + option + "/>\n");
- builder.append(" </log_flags>\n <options>\n </options>\n</cc_config>");
- return builder.toString();
- }
-
- private final class WriteClientPrefsAsync extends AsyncTask<GlobalPreferences,Void,Boolean> {
- @Override
- protected Boolean doInBackground(GlobalPreferences... params) {
- if(mIsBound) return monitor.clientInterface.setGlobalPreferences(params[0]);
- else return false;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"WriteClientPrefsAsync returned: " + success);
- updateLayout();
- }
- }
-
- private final class SetCcConfigAsync extends AsyncTask<String,Void,Boolean> {
- @Override
- protected Boolean doInBackground(String... params) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"SetCcConfigAsync with: " + params[0]);
- if(mIsBound) monitor.clientInterface.setCcConfig(params[0]);
- else if(Logging.WARNING) Log.w(Logging.TAG,"SetCcConfigAsync monitor not bound!");
- return true;
- }
- }
-
- public class SelectionDialogOption {
- public String name;
- public Boolean selected = false;
- public Boolean highlighted = false;
-
- public SelectionDialogOption(String name) {
- this.name = name;
- }
-
- public SelectionDialogOption(String name, Boolean selected) {
- this.name = name;
- this.selected = selected;
- }
-
- public SelectionDialogOption(String name, Boolean selected, Boolean highlighted) {
- this.name = name;
- this.selected = selected;
- this.highlighted = highlighted;
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/PrefsFragment.java b/android/BOINC/src/edu/berkeley/boinc/PrefsFragment.java
new file mode 100644
index 0000000..a5225d4
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/PrefsFragment.java
@@ -0,0 +1,695 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.adapter.PrefsListAdapter;
+import edu.berkeley.boinc.adapter.PrefsListItemWrapper;
+import edu.berkeley.boinc.adapter.PrefsListItemWrapperBool;
+import edu.berkeley.boinc.adapter.PrefsListItemWrapperValue;
+import edu.berkeley.boinc.adapter.PrefsSelectionDialogListAdapter;
+import edu.berkeley.boinc.rpc.GlobalPreferences;
+import edu.berkeley.boinc.rpc.HostInfo;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.SeekBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class PrefsFragment extends Fragment {
+
+ private ListView lv;
+ private PrefsListAdapter listAdapter;
+
+ private ArrayList<PrefsListItemWrapper> data = new ArrayList<PrefsListItemWrapper>(); //Adapter for list data
+ private GlobalPreferences clientPrefs = null; //preferences of the client, read on every onResume via RPC
+ //private AppPreferences appPrefs = null; //Android specific preferences, singleton of monitor
+ private HostInfo hostinfo = null;
+
+ private boolean layoutSuccessful = false;
+
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context,Intent intent) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "PrefsFragment ClientStatusChange - onReceive()");
+ try {
+ if(!layoutSuccessful) populateLayout();
+ } catch (RemoteException e) {}
+ }
+ };
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+
+ // fragment lifecycle: 2.
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"ProjectsFragment onCreateView");
+ // Inflate the layout for this fragment
+ View layout = inflater.inflate(R.layout.prefs_layout, container, false);
+ lv = (ListView) layout.findViewById(R.id.listview);
+ listAdapter = new PrefsListAdapter(getActivity(),this,R.id.listview,data);
+ lv.setAdapter(listAdapter);
+ return layout;
+ }
+
+ // fragment lifecycle: 1.
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ // fragment lifecycle: 3.
+ @Override
+ public void onResume() {
+ try {
+ populateLayout();
+ } catch (RemoteException e) {}
+ getActivity().registerReceiver(mClientStatusChangeRec,ifcsc);
+ super.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ getActivity().unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ private Boolean getPrefs() {
+ // try to get current client status from monitor
+ //ClientStatus status;
+ try{
+ //status = Monitor.getClientStatus();
+ clientPrefs = BOINCActivity.monitor.getPrefs();
+ } catch (Exception e){
+ if(Logging.WARNING) Log.w(Logging.TAG,"PrefsActivity: Could not load data, clientStatus not initialized.");
+ e.printStackTrace();
+ return false;
+ }
+ //clientPrefs = status.getPrefs(); //read prefs from client via rpc
+ if(clientPrefs == null) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "readPrefs: null, return false");
+ return false;
+ }
+ //if(Logging.DEBUG) Log.d(Logging.TAG, "readPrefs done");
+ return true;
+ }
+
+ private Boolean getHostInfo() {
+ // try to get current client status from monitor
+ //ClientStatus status;
+
+ try{
+ //status = Monitor.getClientStatus();
+ hostinfo = BOINCActivity.monitor.getHostInfo();
+ } catch (Exception e){
+ if(Logging.WARNING) Log.w(Logging.TAG,"PrefsActivity: Could not load data, clientStatus not initialized.");
+ e.printStackTrace();
+ return false;
+ }
+ //hostinfo = status.getHostInfo(); //Get the hostinfo from client via rpc
+ if(hostinfo == null) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "getHostInfo: null, return false");
+ return false;
+ }
+ return true;
+ }
+
+ private void populateLayout() throws RemoteException{
+
+ if(!getPrefs() || BOINCActivity.monitor == null || !getHostInfo()) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "PrefsFragment.populateLayout returns, data is not present");
+ return;
+ }
+
+ data.clear();
+
+ Boolean advanced = BOINCActivity.monitor.getShowAdvanced();
+ Boolean stationaryDeviceMode = BOINCActivity.monitor.getStationaryDeviceMode();
+ Boolean stationaryDeviceSuspected = BOINCActivity.monitor.isStationaryDeviceSuspected();
+
+ // general
+ data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_general,true));
+ data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_autostart_header,R.string.prefs_category_general,BOINCActivity.monitor.getAutostart()));
+ data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_show_notification_notices_header,R.string.prefs_category_general,BOINCActivity.monitor.getShowNotificationForNotices()));
+ data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_show_notification_suspended_header,R.string.prefs_category_general,BOINCActivity.monitor.getShowNotificationDuringSuspend()));
+ data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_show_advanced_header,R.string.prefs_category_general,BOINCActivity.monitor.getShowAdvanced()));
+ if(!stationaryDeviceMode) data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_suspend_when_screen_on,R.string.prefs_category_general,BOINCActivity.monitor.getSuspendWhenScreenOn()));
+ // network
+ data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_network,true));
+ data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_network_wifi_only_header,R.string.prefs_category_network,clientPrefs.network_wifi_only));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_network_daily_xfer_limit_mb_header,R.string.prefs_category_network,clientPrefs.daily_xfer_limit_mb));
+ // power
+ data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_power,true));
+ if(stationaryDeviceSuspected) { // API indicates that there is no battery, offer opt-in preference for stationary device mode
+ data.add(new PrefsListItemWrapperBool(getActivity(),R.string.prefs_stationary_device_mode_header,R.string.prefs_category_power,BOINCActivity.monitor.getStationaryDeviceMode()));
+ }
+ if(!stationaryDeviceMode) { // client would compute regardless of battery preferences, so only show if that is not the case
+ data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_power_source_header,R.string.prefs_category_power));
+ data.add(new PrefsListItemWrapperValue(getActivity(),R.string.battery_charge_min_pct_header,R.string.prefs_category_power,clientPrefs.battery_charge_min_pct));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.battery_temperature_max_header,R.string.prefs_category_power,clientPrefs.battery_max_temperature));
+ }
+ // cpu
+ if(advanced) data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_cpu,true));
+ if(advanced && hostinfo.p_ncpus > 1) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_cpu_number_cpus_header,R.string.prefs_category_cpu,pctCpuCoresToNumber(clientPrefs.max_ncpus_pct)));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_cpu_time_max_header,R.string.prefs_category_cpu,clientPrefs.cpu_usage_limit));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_cpu_other_load_suspension_header,R.string.prefs_category_cpu,clientPrefs.suspend_cpu_usage));
+ // storage
+ if(advanced) data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_storage,true));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_disk_max_pct_header,R.string.prefs_category_storage,clientPrefs.disk_max_used_pct));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_disk_min_free_gb_header,R.string.prefs_category_storage,clientPrefs.disk_min_free_gb));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_disk_access_interval_header,R.string.prefs_category_storage,clientPrefs.disk_interval));
+ // memory
+ if(advanced) data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_memory,true));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_memory_max_idle_header,R.string.prefs_category_memory,clientPrefs.ram_max_used_idle_frac));
+ // debug
+ if(advanced) data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_category_debug,true));
+ if(advanced) data.add(new PrefsListItemWrapper(getActivity(),R.string.prefs_client_log_flags_header,R.string.prefs_category_debug));
+ if(advanced) data.add(new PrefsListItemWrapperValue(getActivity(),R.string.prefs_gui_log_level_header,R.string.prefs_category_debug,(double)BOINCActivity.monitor.getLogLevel()));
+
+ updateLayout();
+ layoutSuccessful = true;
+ }
+
+ private void updateLayout(){
+ listAdapter.notifyDataSetChanged();
+ }
+
+ // updates list item of boolean preference
+ // requires updateLayout to be called afterwards
+ private void updateBoolPref(int ID, Boolean newValue) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "updateBoolPref for ID: " + ID + " value: " + newValue);
+ for (PrefsListItemWrapper item: data) {
+ if(item.ID == ID){
+ ((PrefsListItemWrapperBool) item).setStatus(newValue);
+ continue;
+ }
+ }
+ }
+
+ // updates list item of value preference
+ // requires updateLayout to be called afterwards
+ private void updateValuePref(int ID, Double newValue) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "updateValuePref for ID: " + ID + " value: " + newValue);
+ for (PrefsListItemWrapper item: data) {
+ if(item.ID == ID){
+ ((PrefsListItemWrapperValue) item).status = newValue;
+ continue;
+ }
+ }
+ }
+
+ private void setupSliderDialog(PrefsListItemWrapper item, final Dialog dialog) {
+ final PrefsListItemWrapperValue valueWrapper = (PrefsListItemWrapperValue) item;
+ dialog.setContentView(R.layout.prefs_layout_dialog_pct);
+ TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
+ SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
+
+ if(valueWrapper.ID == R.string.battery_charge_min_pct_header ||
+ valueWrapper.ID == R.string.prefs_disk_max_pct_header ||
+ valueWrapper.ID == R.string.prefs_cpu_time_max_header ||
+ valueWrapper.ID == R.string.prefs_cpu_other_load_suspension_header ||
+ valueWrapper.ID == R.string.prefs_memory_max_idle_header ) {
+ sliderProgress.setText(valueWrapper.status.intValue() + " " + getString(R.string.prefs_unit_pct));
+ Double seekBarDefault = valueWrapper.status / 10;
+ slider.setProgress(seekBarDefault.intValue());
+ slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
+ String progressString = (progress * 10) + " " + getString(R.string.prefs_unit_pct);
+ TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
+ sliderProgress.setText(progressString);
+ }
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+ });
+ } else if(valueWrapper.ID == R.string.prefs_cpu_number_cpus_header) {
+ if(!getHostInfo()) {
+ if(Logging.WARNING) Log.w(Logging.TAG, "onItemClick missing hostInfo");
+ return;
+ }
+ sliderProgress.setText(""+valueWrapper.status.intValue());
+ slider.setMax(hostinfo.p_ncpus);
+ slider.setProgress(valueWrapper.status.intValue());
+ slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
+ if(progress == 0) progress = 1; // do not allow 0 cpus
+ String progressString = String.valueOf(progress);
+ TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
+ sliderProgress.setText(progressString);
+ }
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+ });
+ } else if(valueWrapper.ID == R.string.prefs_gui_log_level_header) {
+ sliderProgress.setText(""+valueWrapper.status.intValue());
+ slider.setMax(5);
+ slider.setProgress(valueWrapper.status.intValue());
+ slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
+ String progressString = String.valueOf(progress);
+ TextView sliderProgress = (TextView) dialog.findViewById(R.id.seekbar_status);
+ sliderProgress.setText(progressString);
+ }
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {}
+ });
+ }
+
+ setupDialogButtons(item, dialog);
+ }
+
+ private void setupSelectionListDialog(final PrefsListItemWrapper item, final Dialog dialog) throws RemoteException{
+ dialog.setContentView(R.layout.prefs_layout_dialog_selection);
+
+ if(item.ID == R.string.prefs_client_log_flags_header) {
+ final ArrayList<SelectionDialogOption> options = new ArrayList<SelectionDialogOption>();
+ String[] array = getResources().getStringArray(R.array.prefs_client_log_flags);
+ for(String option: array) options.add(new SelectionDialogOption(option));
+ ListView lv = (ListView) dialog.findViewById(R.id.selection);
+ new PrefsSelectionDialogListAdapter(getActivity(), lv, R.id.selection, options);
+
+ // setup confirm button action
+ Button confirm = (Button) dialog.findViewById(R.id.confirm);
+ confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ArrayList<String> selectedOptions = new ArrayList<String>();
+ for(SelectionDialogOption option: options) if(option.selected) selectedOptions.add(option.name);
+ if(Logging.DEBUG) Log.d(Logging.TAG, selectedOptions.size() + " log flags selected");
+ new SetCcConfigAsync().execute(formatOptionsToCcConfig(selectedOptions));
+ dialog.dismiss();
+ }
+ });
+ }else if(item.ID == R.string.prefs_power_source_header) {
+ final ArrayList<SelectionDialogOption> options = new ArrayList<SelectionDialogOption>();
+ options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_ac), BOINCActivity.monitor.getPowerSourceAc()));
+ options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_usb), BOINCActivity.monitor.getPowerSourceUsb()));
+ options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_wireless), BOINCActivity.monitor.getPowerSourceWireless()));
+ options.add(new SelectionDialogOption(getResources().getString(R.string.prefs_power_source_battery), clientPrefs.run_on_batteries, true));
+ ListView lv = (ListView) dialog.findViewById(R.id.selection);
+ new PrefsSelectionDialogListAdapter(getActivity(), lv, R.id.selection, options);
+
+ // setup confirm button action
+ Button confirm = (Button) dialog.findViewById(R.id.confirm);
+ confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try{
+ for(SelectionDialogOption option: options) {
+ if(option.name == getResources().getString(R.string.prefs_power_source_ac))
+ BOINCActivity.monitor.setPowerSourceAc(option.selected);
+ if(option.name == getResources().getString(R.string.prefs_power_source_usb))
+ BOINCActivity.monitor.setPowerSourceUsb(option.selected);
+ if(option.name == getResources().getString(R.string.prefs_power_source_wireless))
+ BOINCActivity.monitor.setPowerSourceWireless(option.selected);
+ if(option.name == getResources().getString(R.string.prefs_power_source_battery)) {
+ clientPrefs.run_on_batteries = option.selected;
+ new WriteClientPrefsAsync().execute(clientPrefs); //async task triggers layout update
+ }
+ }
+ dialog.dismiss();
+ } catch(RemoteException e) {}
+ }
+ });
+ }
+
+ // generic cancel button
+ Button cancel = (Button) dialog.findViewById(R.id.cancel);
+ cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ }
+
+ private void setupDialogButtons(final PrefsListItemWrapper item, final Dialog dialog) {
+ // confirm
+ Button confirm = (Button) dialog.findViewById(R.id.confirm);
+ confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(item.ID == R.string.battery_charge_min_pct_header ||
+ item.ID == R.string.prefs_disk_max_pct_header ||
+ item.ID == R.string.prefs_cpu_time_max_header ||
+ item.ID == R.string.prefs_cpu_other_load_suspension_header ||
+ item.ID == R.string.prefs_memory_max_idle_header ) {
+ SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
+ double value = slider.getProgress()*10;
+ writeClientValuePreference(item.ID, value);
+ } else if(item.ID == R.string.prefs_cpu_number_cpus_header) {
+ SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
+ int sbProgress = slider.getProgress();
+ if(sbProgress == 0) sbProgress = 1;
+ double value = numberCpuCoresToPct(sbProgress);
+ writeClientValuePreference(item.ID, value);
+ } else if(item.ID == R.string.prefs_gui_log_level_header) {
+ SeekBar slider = (SeekBar) dialog.findViewById(R.id.seekbar);
+ int sbProgress = slider.getProgress();
+ try {
+ // monitor and UI in two different processes. set static variable in both
+ Logging.setLogLevel(sbProgress);
+ BOINCActivity.monitor.setLogLevel(sbProgress);
+ } catch (RemoteException e) {}
+ updateValuePref(item.ID, (double) sbProgress);
+ updateLayout();
+ } else if(item.ID == R.string.prefs_network_daily_xfer_limit_mb_header ||
+ item.ID == R.string.battery_temperature_max_header ||
+ item.ID == R.string.prefs_disk_min_free_gb_header ||
+ item.ID == R.string.prefs_disk_access_interval_header) {
+ EditText edit = (EditText) dialog.findViewById(R.id.Input);
+ String input = edit.getText().toString();
+ Double valueTmp = parseInputValueToDouble(input);
+ if(valueTmp == null) return;
+ double value = valueTmp;
+ writeClientValuePreference(item.ID, value);
+ }
+ dialog.dismiss();
+ }
+ });
+ // cancel
+ Button cancel = (Button) dialog.findViewById(R.id.cancel);
+ cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ }
+
+ private void writeClientValuePreference(int id, double value) {
+ // update preferences
+ switch (id) {
+ case R.string.prefs_disk_max_pct_header:
+ clientPrefs.disk_max_used_pct = value;
+ break;
+ case R.string.prefs_disk_min_free_gb_header:
+ clientPrefs.disk_min_free_gb = value;
+ break;
+ case R.string.prefs_disk_access_interval_header:
+ clientPrefs.disk_interval = value;
+ break;
+ case R.string.prefs_network_daily_xfer_limit_mb_header:
+ clientPrefs.daily_xfer_limit_mb = value;
+ // also need to set the period!
+ clientPrefs.daily_xfer_period_days = 1;
+ break;
+ case R.string.battery_charge_min_pct_header:
+ clientPrefs.battery_charge_min_pct = value;
+ break;
+ case R.string.battery_temperature_max_header:
+ clientPrefs.battery_max_temperature = value;
+ break;
+ case R.string.prefs_cpu_number_cpus_header:
+ clientPrefs.max_ncpus_pct = value;
+ //convert value back to number for layout update
+ value = pctCpuCoresToNumber(value);
+ break;
+ case R.string.prefs_cpu_time_max_header:
+ clientPrefs.cpu_usage_limit = value;
+ break;
+ case R.string.prefs_cpu_other_load_suspension_header:
+ clientPrefs.suspend_cpu_usage = value;
+ break;
+ case R.string.prefs_memory_max_idle_header:
+ clientPrefs.ram_max_used_idle_frac = value;
+ break;
+ default:
+ if(Logging.DEBUG) Log.d(Logging.TAG,"onClick (dialog submit button), couldnt match ID");
+ Toast toast = Toast.makeText(getActivity(), "ooops! something went wrong...", Toast.LENGTH_SHORT);
+ toast.show();
+ return;
+ }
+ // update list item
+ updateValuePref(id, value);
+ // preferences adapted, write preferences to client
+ new WriteClientPrefsAsync().execute(clientPrefs);
+ }
+
+ private double numberCpuCoresToPct(double ncpus) {
+ double pct = (ncpus / (double)hostinfo.p_ncpus) * 100;
+ if(Logging.DEBUG) Log.d(Logging.TAG,"numberCpuCoresToPct: " + ncpus + hostinfo.p_ncpus + pct);
+ return pct;
+ }
+
+ private double pctCpuCoresToNumber(double pct) {
+ double ncpus = (double)hostinfo.p_ncpus * (pct / 100.0);
+ if(ncpus < 1.0) ncpus = 1.0;
+ return ncpus;
+ }
+
+ public Double parseInputValueToDouble(String input) {
+ // parse value
+ Double value = 0.0;
+ try {
+ input=input.replaceAll(",","."); //replace e.g. European decimal seperator "," by "."
+ value = Double.parseDouble(input);
+ if(Logging.DEBUG) Log.d(Logging.TAG,"parseInputValueToDouble: " + value);
+ return value;
+ } catch (Exception e) {
+ if(Logging.WARNING) Log.w(Logging.TAG, e);
+ Toast toast = Toast.makeText(getActivity(), "wrong format!", Toast.LENGTH_SHORT);
+ toast.show();
+ return null;
+ }
+ }
+
+ private String formatOptionsToCcConfig(ArrayList<String> options) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("<cc_config>\n <log_flags>\n");
+ for(String option: options) builder.append(" <" + option + "/>\n");
+ builder.append(" </log_flags>\n <options>\n </options>\n</cc_config>");
+ return builder.toString();
+ }
+
+ public class BoolOnClick implements OnClickListener {
+
+ private Integer ID;
+ private CheckBox cb;
+
+ public BoolOnClick(Integer ID, CheckBox cb) {
+ this.ID = ID;
+ this.cb = cb;
+ }
+
+ @Override
+ public void onClick(View view) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"onCbClick");
+ Boolean previousState = cb.isChecked();
+ cb.setChecked(!previousState);
+ Boolean isSet = cb.isChecked();
+ try{
+ switch (ID) {
+ case R.string.prefs_autostart_header: //app pref
+ BOINCActivity.monitor.setAutostart(isSet);
+ updateBoolPref(ID, isSet);
+ updateLayout();
+ break;
+ case R.string.prefs_show_notification_notices_header: //app pref
+ BOINCActivity.monitor.setShowNotificationForNotices(isSet);
+ updateBoolPref(ID, isSet);
+ updateLayout();
+ break;
+ case R.string.prefs_show_notification_suspended_header: //app pref
+ BOINCActivity.monitor.setShowNotificationDuringSuspend(isSet);
+ updateBoolPref(ID, isSet);
+ updateLayout();
+ break;
+ case R.string.prefs_show_advanced_header: //app pref
+ BOINCActivity.monitor.setShowAdvanced(isSet);
+ // reload complete layout to remove/add advanced elements
+ populateLayout();
+ break;
+ case R.string.prefs_suspend_when_screen_on: //app pref
+ BOINCActivity.monitor.setSuspendWhenScreenOn(isSet);
+ updateBoolPref(ID, isSet);
+ updateLayout();
+ break;
+ case R.string.prefs_network_wifi_only_header: //client pref
+ clientPrefs.network_wifi_only = isSet;
+ updateBoolPref(ID, isSet);
+ new WriteClientPrefsAsync().execute(clientPrefs); //async task triggers layout update
+ break;
+ case R.string.prefs_stationary_device_mode_header: //app pref
+ BOINCActivity.monitor.setStationaryDeviceMode(isSet);
+ // reload complete layout to remove/add power preference elements
+ populateLayout();
+ break;
+ }
+ } catch(RemoteException e) {}
+ }
+
+ }
+
+ public class ValueOnClick implements OnClickListener {
+
+ private PrefsListItemWrapper item;
+
+ public ValueOnClick(PrefsListItemWrapper wrapper) {
+ this.item = wrapper;
+ }
+
+ @Override
+ public void onClick(View view) {
+ final Dialog dialog = new Dialog(getActivity());
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+
+ // setup dialog layout
+ switch(item.ID) {
+ case R.string.prefs_network_daily_xfer_limit_mb_header:
+ dialog.setContentView(R.layout.prefs_layout_dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ setupDialogButtons(item, dialog);
+ break;
+ case R.string.prefs_power_source_header:
+ try {
+ setupSelectionListDialog(item, dialog);
+ } catch (RemoteException e) {}
+ break;
+ case R.string.battery_charge_min_pct_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ case R.string.battery_temperature_max_header:
+ dialog.setContentView(R.layout.prefs_layout_dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ setupDialogButtons(item, dialog);
+ break;
+ case R.string.prefs_cpu_number_cpus_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ case R.string.prefs_cpu_time_max_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ case R.string.prefs_cpu_other_load_suspension_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ case R.string.prefs_disk_max_pct_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ case R.string.prefs_disk_min_free_gb_header:
+ dialog.setContentView(R.layout.prefs_layout_dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ setupDialogButtons(item, dialog);
+ break;
+ case R.string.prefs_disk_access_interval_header:
+ dialog.setContentView(R.layout.prefs_layout_dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ setupDialogButtons(item, dialog);
+ break;
+ case R.string.prefs_memory_max_idle_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ case R.string.prefs_client_log_flags_header:
+ try {
+ setupSelectionListDialog(item, dialog);
+ } catch (RemoteException e) {}
+ break;
+ case R.string.prefs_gui_log_level_header:
+ setupSliderDialog(item, dialog);
+ ((TextView)dialog.findViewById(R.id.pref)).setText(item.ID);
+ break;
+ default:
+ if(Logging.ERROR) Log.d(Logging.TAG,"PrefsActivity onItemClick: could not map ID: " + item.ID);
+ return;
+ }
+
+ // show dialog
+ dialog.show();
+ }
+ }
+
+ private final class WriteClientPrefsAsync extends AsyncTask<GlobalPreferences,Void,Boolean> {
+ @Override
+ protected Boolean doInBackground(GlobalPreferences... params) {
+ try {
+ return BOINCActivity.monitor.setGlobalPreferences(params[0]);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"WriteClientPrefsAsync returned: " + success);
+ updateLayout();
+ }
+ }
+
+ private final class SetCcConfigAsync extends AsyncTask<String,Void,Boolean> {
+ @Override
+ protected Boolean doInBackground(String... params) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"SetCcConfigAsync with: " + params[0]);
+ try {
+ return BOINCActivity.monitor.setCcConfig(params[0]);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+ }
+
+ public class SelectionDialogOption {
+ public String name;
+ public Boolean selected = false;
+ public Boolean highlighted = false;
+
+ public SelectionDialogOption(String name) {
+ this.name = name;
+ }
+
+ public SelectionDialogOption(String name, Boolean selected) {
+ this.name = name;
+ this.selected = selected;
+ }
+
+ public SelectionDialogOption(String name, Boolean selected, Boolean highlighted) {
+ this.name = name;
+ this.selected = selected;
+ this.highlighted = highlighted;
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/ProjectDetailsFragment.java b/android/BOINC/src/edu/berkeley/boinc/ProjectDetailsFragment.java
new file mode 100644
index 0000000..7d63bc7
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/ProjectDetailsFragment.java
@@ -0,0 +1,384 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+import java.util.ArrayList;
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.v4.app.Fragment;
+import android.text.SpannableString;
+import android.text.style.UnderlineSpan;
+import android.util.Log;
+import android.view.Display;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.HorizontalScrollView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import edu.berkeley.boinc.rpc.ImageWrapper;
+import edu.berkeley.boinc.rpc.Project;
+import edu.berkeley.boinc.rpc.ProjectInfo;
+import edu.berkeley.boinc.rpc.RpcClient;
+
+public class ProjectDetailsFragment extends Fragment {
+
+ private String url;
+ private ProjectInfo projectInfo; // might be null for projects added via manual URL attach
+ private Project project;
+ private ArrayList<ImageWrapper> slideshowImages = new ArrayList<ImageWrapper>();
+
+ private LayoutInflater li;
+ private View root;
+ private HorizontalScrollView slideshowWrapper;
+ private LinearLayout slideshowHook;
+ private ProgressBar slideshowLoading;
+
+ // display dimensions
+ private int width;
+ private int height;
+
+ private boolean retryLayout = true;
+
+ // BroadcastReceiver event is used to update the UI with updated information from
+ // the client. This is generally called once a second.
+ //
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ //if(Logging.DEBUG) Log.d(Logging.TAG, "ClientStatusChange - onReceive()");
+ getCurrentProjectData();
+ if(retryLayout) populateLayout();
+ else updateChangingItems(root);
+
+ }
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ // get data
+ url = getArguments().getString("url");
+ getCurrentProjectData();
+
+ setHasOptionsMenu(true); // enables fragment specific menu
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.VERBOSE) Log.v(Logging.TAG,"ProjectDetailsFragment onCreateView");
+ // Inflate the layout for this fragment
+ this.li = inflater;
+ View layout = inflater.inflate(R.layout.project_details_layout, container, false);
+ root = layout;
+ return layout;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public void onAttach(Activity activity) {
+ // first time fragment can get a valid context (before this, getActivity() will return null!)
+ Display display = activity.getWindowManager().getDefaultDisplay();
+ width = display.getWidth();
+ height = display.getHeight();
+ super.onAttach(activity);
+ }
+
+ @Override
+ public void onPause() {
+ getActivity().unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ getActivity().registerReceiver(mClientStatusChangeRec, ifcsc);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ // appends the project specific menu to the main menu.
+ inflater.inflate(R.menu.project_details_menu, menu);
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ // no new tasks, adapt based on status
+ MenuItem nnt = menu.findItem(R.id.projects_control_nonewtasks);
+ if(project.dont_request_more_work) nnt.setTitle(R.string.projects_control_allownewtasks);
+ else nnt.setTitle(R.string.projects_control_nonewtasks);
+
+ // project suspension, adapt based on status
+ MenuItem suspend = menu.findItem(R.id.projects_control_suspend);
+ if(project.suspended_via_gui) suspend.setTitle(R.string.projects_control_resume);
+ else suspend.setTitle(R.string.projects_control_suspend);
+
+ // detach, only show when project not managed
+ MenuItem remove = menu.findItem(R.id.projects_control_remove);
+ if(project.attached_via_acct_mgr) remove.setVisible(false);
+
+ super.onPrepareOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch(item.getItemId()) {
+ case R.id.projects_control_update:
+ new ProjectOperationAsync().execute(RpcClient.PROJECT_UPDATE);
+ break;
+ case R.id.projects_control_suspend:
+ if(project.suspended_via_gui) new ProjectOperationAsync().execute(RpcClient.PROJECT_RESUME);
+ else new ProjectOperationAsync().execute(RpcClient.PROJECT_SUSPEND);
+ break;
+ case R.id.projects_control_nonewtasks:
+ if(project.dont_request_more_work) new ProjectOperationAsync().execute(RpcClient.PROJECT_ANW);
+ else new ProjectOperationAsync().execute(RpcClient.PROJECT_NNW);
+ break;
+ case R.id.projects_control_reset:
+ showConfirmationDialog(RpcClient.PROJECT_RESET);
+ break;
+ case R.id.projects_control_remove:
+ showConfirmationDialog(RpcClient.PROJECT_DETACH);
+ break;
+ default:
+ if(Logging.WARNING) Log.w(Logging.TAG,"ProjectDetailsFragment onOptionsItemSelected: could not match ID");
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void showConfirmationDialog(final int operation) {
+ final Dialog dialog = new Dialog(getActivity());
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(R.layout.dialog_confirm);
+ Button confirm = (Button) dialog.findViewById(R.id.confirm);
+ TextView tvTitle = (TextView)dialog.findViewById(R.id.title);
+ TextView tvMessage = (TextView)dialog.findViewById(R.id.message);
+
+ // operation dependend texts
+ if (operation == RpcClient.PROJECT_DETACH) {
+ tvTitle.setText(R.string.projects_confirm_detach_title);
+ tvMessage.setText(getString(R.string.projects_confirm_detach_message) + " "
+ + project.project_name + " " + getString(R.string.projects_confirm_detach_message2));
+ confirm.setText(R.string.projects_confirm_detach_confirm);
+ } else if(operation == RpcClient.PROJECT_RESET) {
+ tvTitle.setText(R.string.projects_confirm_reset_title);
+ tvMessage.setText(getString(R.string.projects_confirm_reset_message) + " "
+ + project.project_name + getString(R.string.projects_confirm_reset_message2));
+ confirm.setText(R.string.projects_confirm_reset_confirm);
+ }
+
+ confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new ProjectOperationAsync().execute(operation);
+ dialog.dismiss();
+ }
+ });
+ Button cancel = (Button) dialog.findViewById(R.id.cancel);
+ cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ }
+
+ private void populateLayout() {
+
+ if(project == null) {
+ retryLayout = true;
+ return; // if data not available yet, return. frequently retrys with onReceive
+ }
+
+ retryLayout = false;
+ View v = root;
+
+ updateChangingItems(v);
+
+ slideshowWrapper = (HorizontalScrollView) v.findViewById(R.id.slideshow_wrapper);
+ slideshowHook = (LinearLayout) v.findViewById(R.id.slideshow_hook);
+ slideshowLoading = (ProgressBar) v.findViewById(R.id.slideshow_loading);
+
+ // set website
+ TextView website = (TextView) v.findViewById(R.id.project_url);
+ SpannableString content = new SpannableString(project.master_url);
+ content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
+ website.setText(content);
+ website.setOnClickListener(new OnClickListener(){
+ @Override
+ public void onClick(View v) {
+ Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(project.master_url));
+ startActivity(i);
+ }});
+
+ // set general area
+ if(projectInfo != null && projectInfo.generalArea != null) {
+ TextView generalArea = (TextView) v.findViewById(R.id.general_area);
+ generalArea.setText(projectInfo.generalArea);
+ } else {
+ LinearLayout wrapper = (LinearLayout) v.findViewById(R.id.general_area_wrapper);
+ wrapper.setVisibility(View.GONE);
+ }
+
+ // set specific area
+ if(projectInfo != null && projectInfo.specificArea != null) {
+ TextView specificArea = (TextView) v.findViewById(R.id.specific_area);
+ specificArea.setText(projectInfo.specificArea);
+ } else {
+ LinearLayout wrapper = (LinearLayout) v.findViewById(R.id.specific_area_wrapper);
+ wrapper.setVisibility(View.GONE);
+ }
+
+ // set description
+ if(projectInfo != null && projectInfo.description != null) {
+ TextView description = (TextView) v.findViewById(R.id.description);
+ description.setText(projectInfo.description);
+ } else {
+ LinearLayout wrapper = (LinearLayout) v.findViewById(R.id.description_wrapper);
+ wrapper.setVisibility(View.GONE);
+ }
+
+ // set home
+ if(projectInfo != null && projectInfo.home != null) {
+ TextView home = (TextView) v.findViewById(R.id.based_at);
+ home.setText(projectInfo.home);
+ } else {
+ LinearLayout wrapper = (LinearLayout) v.findViewById(R.id.based_at_wrapper);
+ wrapper.setVisibility(View.GONE);
+ }
+
+ // load slideshow
+ new UpdateSlideshowImagesAsync().execute();
+ }
+
+ private void getCurrentProjectData() {
+ try{
+ ArrayList<Project> allProjects = (ArrayList<Project>) BOINCActivity.monitor.getProjects();
+ for(Project tmpP: allProjects) {
+ if(tmpP.master_url.equals(url)) this.project = tmpP;
+ }
+ this.projectInfo = BOINCActivity.monitor.getProjectInfo(url);
+ }catch(Exception e) {if(Logging.ERROR) Log.e(Logging.TAG,"ProjectDetailsFragment getCurrentProjectData could not retrieve project list");}
+ if(this.project == null) if(Logging.WARNING) Log.w(Logging.TAG,"ProjectDetailsFragment getCurrentProjectData could not find project for URL: " + url);
+ if(this.projectInfo == null) if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectDetailsFragment getCurrentProjectData could not find project attach list for URL: " + url);
+ }
+
+ private void updateChangingItems(View v) {
+ try{
+ // status
+ String newStatus = BOINCActivity.monitor.getProjectStatus(project.master_url);
+ LinearLayout wrapper = (LinearLayout) v.findViewById(R.id.status_wrapper);
+ if(!newStatus.isEmpty()) {
+ wrapper.setVisibility(View.VISIBLE);
+ TextView statusT = (TextView) v.findViewById(R.id.status_text);
+ statusT.setText(newStatus);
+ } else {
+ wrapper.setVisibility(View.GONE);
+ }
+
+ }catch(Exception e){}
+ }
+
+ // executes project operations in new thread
+ private final class ProjectOperationAsync extends AsyncTask<Object,Void,Boolean> {
+
+ @Override
+ protected Boolean doInBackground(Object... params) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectOperationAsync doInBackground");
+ try{
+ Integer operation = (Integer) params[0];
+ return BOINCActivity.monitor.projectOp(operation, project.master_url);
+ } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"ProjectOperationAsync error in do in background",e);}
+ return false;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if(success)
+ try {
+ BOINCActivity.monitor.forceRefresh();
+ } catch (RemoteException e) {}
+ else if(Logging.WARNING) Log.w(Logging.TAG,"ProjectOperationAsync failed.");
+ }
+ }
+
+ private final class UpdateSlideshowImagesAsync extends AsyncTask<Void, Void, Boolean> {
+
+ @Override
+ protected Boolean doInBackground(Void... params) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "UpdateSlideshowImagesAsync updating images in new thread. project: " + project.master_url);
+ try{
+ //status = Monitor.getClientStatus();
+ slideshowImages = (ArrayList<ImageWrapper>) BOINCActivity.monitor.getSlideshowForProject(project.master_url);
+ } catch (Exception e){
+ if(Logging.WARNING) Log.w(Logging.TAG,"UpdateSlideshowImagesAsync: Could not load data, clientStatus not initialized.");
+ return false;
+ }
+ // load slideshow images
+// slideshowImages = status.getSlideshowForProject(project.master_url);
+ if(slideshowImages == null || slideshowImages.size() == 0) return false;
+ return true;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "UpdateSlideshowImagesAsync success: " + success + " images: " + slideshowImages.size());
+
+ if(success && slideshowImages.size() > 0) {
+ slideshowLoading.setVisibility(View.GONE);
+ for(ImageWrapper image: slideshowImages) {
+ ImageView iv = (ImageView) li.inflate(R.layout.project_details_slideshow_image_layout, null);
+ Bitmap bitmap = image.image;
+ if(scaleImages(bitmap.getHeight(), bitmap.getWidth())) bitmap = Bitmap.createScaledBitmap(image.image, image.image.getWidth() * 2, image.image.getHeight() * 2, false);
+ iv.setImageBitmap(bitmap);
+ slideshowHook.addView(iv);
+ }
+ } else{
+ slideshowWrapper.setVisibility(View.GONE);
+ }
+ }
+
+ private boolean scaleImages(int imageHeight, int imageWidth){
+ return (height >= imageHeight * 2 && width >= imageWidth * 2);
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/ProjectsActivity.java b/android/BOINC/src/edu/berkeley/boinc/ProjectsActivity.java
deleted file mode 100644
index 9d7672d..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/ProjectsActivity.java
+++ /dev/null
@@ -1,550 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import android.app.Dialog;
-import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.support.v4.app.FragmentActivity;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.Window;
-import android.widget.Button;
-import android.widget.ListView;
-import android.widget.TextView;
-import edu.berkeley.boinc.adapter.ProjectControlsListAdapter;
-import edu.berkeley.boinc.adapter.ProjectsListAdapter;
-import edu.berkeley.boinc.client.Monitor;
-import edu.berkeley.boinc.rpc.Notice;
-import edu.berkeley.boinc.rpc.AcctMgrInfo;
-import edu.berkeley.boinc.rpc.Project;
-import edu.berkeley.boinc.rpc.RpcClient;
-import edu.berkeley.boinc.rpc.Transfer;
-
-public class ProjectsActivity extends FragmentActivity {
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- private ListView lv;
- private ProjectsListAdapter listAdapter;
- private ArrayList<ProjectsListData> data = new ArrayList<ProjectsListData>();
- private final FragmentActivity activity = this;
-
- // controls popup dialog
- Dialog dialogControls;
-
- // Controls whether initialization of view elements of "projects_layout"
- // is required. This is the case, every time the layout switched.
- private Boolean initialSetupRequired = true;
-
- // This is called when the connection with the service has been established,
- // getService returns the Monitor object that is needed to call functions.
- //
- private ServiceConnection mConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName className, IBinder service) {
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
- if(Logging.VERBOSE) Log.v(Logging.TAG,"ProjectsActivity service bound");
- }
- @Override
- public void onServiceDisconnected(ComponentName className) {
- monitor = null;
- mIsBound = false;
- }
- };
-
- // BroadcastReceiver event is used to update the UI with updated information from
- // the client. This is generally called once a second.
- //
- private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
- private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- //if(Logging.DEBUG) Log.d(Logging.TAG, "ClientStatusChange - onReceive()");
- populateLayout();
- }
- };
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "ProjectsActivity onCreate()");
-
- super.onCreate(savedInstanceState);
-
- // Establish a connection with the service, onServiceConnected gets called when
- // (calling within Tab needs getApplicationContext() for bindService to work!)
- getApplicationContext().bindService(new Intent(this, Monitor.class), mConnection, Service.START_STICKY_COMPATIBILITY);
- }
-
- @Override
- public void onPause() {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectsActivity onPause()");
-
- unregisterReceiver(mClientStatusChangeRec);
- super.onPause();
- }
-
- @Override
- public void onResume() {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectsActivity onResume()");
- super.onResume();
-
- populateLayout();
-
- registerReceiver(mClientStatusChangeRec, ifcsc);
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "ProjectsActivity onDestroy()");
-
- if (mIsBound) {
- getApplicationContext().unbindService(mConnection);
- mIsBound = false;
- }
-
- super.onDestroy();
- }
-
- private void populateLayout() {
- try {
- // read projects from state saved in ClientStatus
- ArrayList<Project> statusProjects = Monitor.getClientStatus().getProjects();
- AcctMgrInfo statusAcctMgr = Monitor.getClientStatus().getAcctMgrInfo();
- ArrayList<Transfer> statusTransfers = Monitor.getClientStatus().getTransfers();
-
- if(statusProjects == null || statusAcctMgr == null || statusTransfers == null) {
- Boolean statusProjectsNull = statusProjects == null;
- Boolean statusAcctMgrNull = statusAcctMgr == null;
- Boolean statusTransfersNull = statusTransfers == null;
- if(Logging.ERROR) Log.d(Logging.TAG,"ProjectsActiviy data retrieval failed: statusProjectsNull: " + statusProjectsNull + " ; statusAcctMgrNull: " + statusAcctMgrNull + " ; statusTransfersNull: " + statusTransfersNull);
- setLayoutLoading();
-
- return;
- }
-
- // get server / scheduler notices to display if device does not meet
- // resource requirements
- ArrayList<Notice> serverNotices = null;
- if(mIsBound) serverNotices = monitor.clientInterface.getServerNotices();
-
- // reading data successful. switch to standard layout, if first time.
- if (initialSetupRequired) {
- initialSetupRequired = false;
- setContentView(R.layout.projects_layout);
- lv = (ListView) findViewById(R.id.projectsList);
- listAdapter = new ProjectsListAdapter(ProjectsActivity.this, lv, R.id.projectsList, data);
- }
-
- // Update Project data
- updateData(statusProjects, statusAcctMgr, serverNotices, statusTransfers);
-
- // Force list adapter to refresh
- listAdapter.notifyDataSetChanged();
-
- } catch (Exception e) {
- // data retrieval failed, set layout to loading...
- setLayoutLoading();
- if(Logging.ERROR) Log.d(Logging.TAG,"ProjectsActiviy data retrieval failed.");
- }
- }
-
- private void updateData(ArrayList<Project> latestRpcProjectsList, AcctMgrInfo acctMgrInfo, ArrayList<Notice> serverNotices, ArrayList<Transfer> ongoingTransfers) {
-
- // ACCOUNT MANAGER
- //loop through list adapter array to find index of account manager entry (0 || 1 manager possible)
- int mgrIndex = -1;
- for(int x = 0; x < data.size(); x++) {
- if(data.get(x).isMgr) {
- mgrIndex = x;
- continue;
- }
- }
- if(mgrIndex < 0) { // no manager present until now
- if(Logging.VERBOSE) Log.d(Logging.TAG,"no manager found in layout list. new entry available: " + acctMgrInfo.present);
- if(acctMgrInfo.present) {
- // add new manager entry, at top of the list
- data.add(new ProjectsListData(null,acctMgrInfo,null));
- if(Logging.DEBUG) Log.d(Logging.TAG,"new acct mgr found: " + acctMgrInfo.acct_mgr_name);
- }
- } else { // manager found in existing list
- if(Logging.VERBOSE) Log.d(Logging.TAG,"manager found in layout list at index: " + mgrIndex);
- if(!acctMgrInfo.present) {
- // manager got detached, remove from list
- data.remove(mgrIndex);
- if(Logging.DEBUG) Log.d(Logging.TAG,"acct mgr removed from list.");
- }
- }
-
- // ATTACHED PROJECTS
- //loop through all received Result items to add new results
- for(Project rpcResult: latestRpcProjectsList) {
- //check whether this Result is new
- Integer index = null;
- for(int x = 0; x < data.size(); x++) {
- if(rpcResult.master_url.equals(data.get(x).id)) {
- index = x;
- continue;
- }
- }
- if(index == null) { // result is new, add
- if(Logging.DEBUG) Log.d(Logging.TAG,"new result found, id: " + rpcResult.master_url + ", managed: " + rpcResult.attached_via_acct_mgr);
- if(rpcResult.attached_via_acct_mgr) data.add(new ProjectsListData(rpcResult,null, mapTransfersToProject(rpcResult.master_url, ongoingTransfers))); // append to end of list (after manager)
- else data.add(0, new ProjectsListData(rpcResult,null, mapTransfersToProject(rpcResult.master_url, ongoingTransfers))); // put at top of list (before manager)
- } else { // result was present before, update its data
- data.get(index).updateProjectData(rpcResult,null,mapTransfersToProject(rpcResult.master_url, ongoingTransfers));
- }
- }
-
- //loop through the list adapter to find removed (ready/aborted) Results
- // use iterator to safely remove while iterating
- Iterator<ProjectsListData> iData = data.iterator();
- while(iData.hasNext()) {
- Boolean found = false;
- ProjectsListData listItem = iData.next();
- if(listItem.isMgr) continue;
- for(Project rpcResult: latestRpcProjectsList) {
- if(listItem.id.equals(rpcResult.master_url)) {
- found = true;
- continue;
- }
- }
- if(!found) iData.remove();
- }
-
- // SERVER NOTICES
- // loop through active projects to add/remove server notices
- if(serverNotices != null) {
- int mappedServerNotices = 0;
- for(ProjectsListData project: data) {
- if(project.isMgr) continue; // do not seek notices in manager entries (crashes)
- boolean noticeFound = false;
- for(Notice serverNotice: serverNotices) {
- if(project.project.project_name.equals(serverNotice.project_name)) {
- project.addServerNotice(serverNotice);
- noticeFound = true;
- mappedServerNotices++;
- continue;
- }
- }
- if(!noticeFound) project.addServerNotice(null);
- }
- if(mappedServerNotices != serverNotices.size()) if(Logging.WARNING) Log.w(Logging.TAG,"could not match notice: " + mappedServerNotices + "/" + serverNotices.size());
- }
- }
-
- // takes list of all ongoing transfers and a project id (url) and returns transfer that belong to given project
- private ArrayList<Transfer> mapTransfersToProject(String id, ArrayList<Transfer> allTransfers) {
- ArrayList<Transfer> projectTransfers = new ArrayList<Transfer>();
- for(Transfer trans: allTransfers) {
- if(trans.project_url.equals(id)) {
- // project id matches url in transfer, add to list
- projectTransfers.add(trans);
- }
- }
- if(Logging.VERBOSE) Log.d(Logging.TAG, "ProjectsActivity mapTransfersToProject() mapped " + projectTransfers.size() + " transfers to project " + id);
- return projectTransfers;
- }
-
- private void setLayoutLoading() {
- setContentView(R.layout.generic_layout_loading);
- TextView loadingHeader = (TextView)findViewById(R.id.loading_header);
- loadingHeader.setText(R.string.projects_loading);
- initialSetupRequired = true;
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "ProjectsActivity onCreateOptionsMenu()");
-
- // call BOINCActivity's onCreateOptionsMenu to combine both menus
- getParent().onCreateOptionsMenu(menu);
-
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.projects_menu, menu);
-
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "ProjectsActivity onOptionsItemSelected()");
-
- switch (item.getItemId()) {
- case R.id.projects_add:
- addProject(null);
- return true;
- default:
- return getParent().onOptionsItemSelected(item); // if item id can not be mapped, call parents method
- }
- }
-
- // on click of project add button
- public void addProject(View view) {
- startActivity(new Intent(this,AttachProjectListActivity.class));
- }
-
- // data wrapper for list view
- public class ProjectsListData {
- // can be either project or account manager
- public Project project = null;
- public Notice lastServerNotice = null;
- public AcctMgrInfo acctMgrInfo = null;
- public ArrayList<Transfer> projectTransfers = null;
- public String id = ""; // == url
- public boolean isMgr;
- public ProjectsListData listEntry = this;
-
- public ProjectsListData(Project data, AcctMgrInfo acctMgrInfo, ArrayList<Transfer> projectTransfers) {
- this.project = data;
- this.acctMgrInfo = acctMgrInfo;
- this.projectTransfers = projectTransfers;
- if (this.project == null && this.acctMgrInfo != null) isMgr = true;
- if(isMgr) {
- this.id = acctMgrInfo.acct_mgr_url;
- } else {
- this.id = data.master_url;
- }
- }
-
- public void updateProjectData(Project data, AcctMgrInfo acctMgrInfo, ArrayList<Transfer> projectTransfers) {
- if(isMgr){
- this.acctMgrInfo = acctMgrInfo;
- } else {
- this.project = data;
- this.projectTransfers = projectTransfers;
- }
- }
-
- public void addServerNotice(Notice notice) {
- this.lastServerNotice = notice;
- }
-
- public Notice getLastServerNotice() {
- return lastServerNotice;
- }
-
- // handles onClick on list element, could be either project or account manager
- // sets up dialog with controls
- public final OnClickListener projectsListClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialogControls = new Dialog(activity);
- // layout
- dialogControls.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialogControls.setContentView(R.layout.dialog_list);
- ListView list = (ListView)dialogControls.findViewById(R.id.options);
-
- // add control items depending on:
- // - type, account manager vs. project
- // - client status, e.g. either suspend or resume
- // - show advanced preference
- // - project attached via account manager (e.g. hide Remove)
- ArrayList<ProjectControl> controls = new ArrayList<ProjectControl>();
- if(isMgr) {
- ((TextView)dialogControls.findViewById(R.id.title)).setText(R.string.projects_control_dialog_title_acctmgr);
-
- controls.add(new ProjectControl(listEntry, ProjectControl.VISIT_WEBSITE));
- controls.add(new ProjectControl(listEntry, RpcClient.MGR_SYNC));
- controls.add(new ProjectControl(listEntry, RpcClient.MGR_DETACH));
- } else {
- ((TextView)dialogControls.findViewById(R.id.title)).setText(R.string.projects_control_dialog_title);
-
- controls.add(new ProjectControl(listEntry, ProjectControl.VISIT_WEBSITE));
- if(projectTransfers != null && !projectTransfers.isEmpty()) controls.add(new ProjectControl(listEntry, RpcClient.TRANSFER_RETRY));
- controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_UPDATE));
- if(project.suspended_via_gui) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_RESUME));
- else controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_SUSPEND));
- if(Monitor.getAppPrefs().getShowAdvanced() && project.dont_request_more_work) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_ANW));
- if(Monitor.getAppPrefs().getShowAdvanced() && !project.dont_request_more_work) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_NNW));
- if(Monitor.getAppPrefs().getShowAdvanced()) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_RESET));
- if(!project.attached_via_acct_mgr)controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_DETACH));
- }
-
- // list adapter
- list.setAdapter(new ProjectControlsListAdapter(activity,list,R.layout.projects_controls_listitem_layout,controls));
- if(Logging.DEBUG) Log.d(Logging.TAG,"dialog list adapter entries: " + controls.size());
-
- // buttons
- Button cancelButton = (Button) dialogControls.findViewById(R.id.cancel);
- cancelButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialogControls.dismiss();
- }
- });
-
- // show dialog
- dialogControls.show();
- }
- };
- }
-
- public class ProjectControl {
- public ProjectsListData data;
- public Integer operation;
-
- // operation that do not imply an RPC are defined here
- public static final int VISIT_WEBSITE = 100;
-
- public ProjectControl(ProjectsListData data, Integer operation) {
- this.operation = operation;
- this.data = data;
- }
-
- // handles onClick on list element in control dialog
- // might show confirmation dialog depending on operation type
- public final OnClickListener projectCommandClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
-
- //check whether command requires confirmation
- if(operation == RpcClient.PROJECT_DETACH
- || operation == RpcClient.PROJECT_RESET
- || operation == RpcClient.MGR_DETACH) {
- final Dialog dialog = new Dialog(activity);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setContentView(R.layout.dialog_confirm);
- Button confirm = (Button) dialog.findViewById(R.id.confirm);
- TextView tvTitle = (TextView)dialog.findViewById(R.id.title);
- TextView tvMessage = (TextView)dialog.findViewById(R.id.message);
-
- // operation dependend texts
- if (operation == RpcClient.PROJECT_DETACH) {
- tvTitle.setText(R.string.projects_confirm_detach_title);
- tvMessage.setText(getString(R.string.projects_confirm_detach_message) + " "
- + data.project.project_name + " " + getString(R.string.projects_confirm_detach_message2));
- confirm.setText(R.string.projects_confirm_detach_confirm);
- } else if(operation == RpcClient.PROJECT_RESET) {
- tvTitle.setText(R.string.projects_confirm_reset_title);
- tvMessage.setText(getString(R.string.projects_confirm_reset_message) + " "
- + data.project.project_name + getString(R.string.projects_confirm_reset_message2));
- confirm.setText(R.string.projects_confirm_reset_confirm);
- } else if(operation == RpcClient.MGR_DETACH) {
- tvTitle.setText(R.string.projects_confirm_remove_acctmgr_title);
- tvMessage.setText(getString(R.string.projects_confirm_remove_acctmgr_message) + " "
- + data.acctMgrInfo.acct_mgr_name + getString(R.string.projects_confirm_remove_acctmgr_message2));
- confirm.setText(R.string.projects_confirm_remove_acctmgr_confirm);
- }
-
- confirm.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- new ProjectOperationAsync().execute(data, operation);
- dialog.dismiss();
- dialogControls.dismiss();
- }
- });
- Button cancel = (Button) dialog.findViewById(R.id.cancel);
- cancel.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.dismiss();
- }
- });
- dialog.show();
- } else if(operation == ProjectControl.VISIT_WEBSITE) { // command does not require confirmation and is not rpc based
- dialogControls.dismiss();
- Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(data.id));
- startActivity(i);
- }
- else { // command does not required confirmation, but is rpc based
- new ProjectOperationAsync().execute(data, operation);
- dialogControls.dismiss();
- }
- }
- };
- }
-
- // executes project operations in new thread
- private final class ProjectOperationAsync extends AsyncTask<Object,Void,Boolean> {
-
- @Override
- protected void onPreExecute() {
- if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectOperationAsync onPreExecute");
- super.onPreExecute();
- }
-
- @Override
- protected Boolean doInBackground(Object... params) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectOperationAsync doInBackground");
- try{
- ProjectsListData data = (ProjectsListData) params[0];
- Integer operation = (Integer) params[1];
- if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectOperationAsync isMgr: " + data.isMgr + "url: " + data.id + " operation: " + operation + " monitor bound: " + mIsBound);
-
- if(mIsBound) {
- switch (operation) {
- // project operations
- case RpcClient.PROJECT_UPDATE:
- case RpcClient.PROJECT_SUSPEND:
- case RpcClient.PROJECT_RESUME:
- case RpcClient.PROJECT_NNW:
- case RpcClient.PROJECT_ANW:
- case RpcClient.PROJECT_DETACH:
- case RpcClient.PROJECT_RESET:
- return monitor.clientInterface.projectOp(operation, data.id);
-
- // acct mgr operations
- case RpcClient.MGR_SYNC:
- return monitor.clientInterface.synchronizeAcctMgr(data.acctMgrInfo.acct_mgr_url);
- case RpcClient.MGR_DETACH:
- return monitor.clientInterface.addAcctMgr("", "", "").error_num == BOINCErrors.ERR_OK;
-
- // transfer operations
- case RpcClient.TRANSFER_RETRY:
- return monitor.clientInterface.transferOperation(data.projectTransfers, operation);
- case RpcClient.TRANSFER_ABORT:
- break;
-
- default:
- if(Logging.ERROR) Log.e(Logging.TAG,"ProjectOperationAsync could not match operation: " + operation);
- }
- }
- else return false;
- } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"ProjectOperationAsync error in do in background",e);}
- return false;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- if(success) monitor.forceRefresh();
- else if(Logging.WARNING) Log.w(Logging.TAG,"ProjectOperationAsync failed.");
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/ProjectsFragment.java b/android/BOINC/src/edu/berkeley/boinc/ProjectsFragment.java
new file mode 100644
index 0000000..5c4d881
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/ProjectsFragment.java
@@ -0,0 +1,497 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.TextView;
+import edu.berkeley.boinc.adapter.ProjectControlsListAdapter;
+import edu.berkeley.boinc.adapter.ProjectsListAdapter;
+import edu.berkeley.boinc.attach.AcctMgrFragment;
+import edu.berkeley.boinc.attach.ManualUrlInputFragment;
+import edu.berkeley.boinc.rpc.Notice;
+import edu.berkeley.boinc.rpc.AcctMgrInfo;
+import edu.berkeley.boinc.rpc.Project;
+import edu.berkeley.boinc.rpc.RpcClient;
+import edu.berkeley.boinc.rpc.Transfer;
+
+public class ProjectsFragment extends Fragment {
+
+ private ListView lv;
+ private ProjectsListAdapter listAdapter;
+ private ArrayList<ProjectsListData> data = new ArrayList<ProjectsListData>();
+ private Boolean acctMgrPresent = false;
+
+ // controls popup dialog
+ Dialog dialogControls;
+
+ // BroadcastReceiver event is used to update the UI with updated information from
+ // the client. This is generally called once a second.
+ //
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ //if(Logging.DEBUG) Log.d(Logging.TAG, "ClientStatusChange - onReceive()");
+ populateLayout();
+ }
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ setHasOptionsMenu(true); // enables fragment specific menu
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.VERBOSE) Log.v(Logging.TAG,"ProjectsFragment onCreateView");
+ // Inflate the layout for this fragment
+ View layout = inflater.inflate(R.layout.projects_layout, container, false);
+ lv = (ListView) layout.findViewById(R.id.projectsList);
+ listAdapter = new ProjectsListAdapter(getActivity(), lv, R.id.projectsList, data);
+ return layout;
+ }
+
+ @Override
+ public void onPause() {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "ProjectsFragment onPause()");
+
+ getActivity().unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ @Override
+ public void onResume() {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "ProjectsFragment onResume()");
+ super.onResume();
+
+ populateLayout();
+
+ getActivity().registerReceiver(mClientStatusChangeRec, ifcsc);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ // appends the project specific menu to the main menu.
+ inflater.inflate(R.menu.projects_menu, menu);
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+
+ // disable "add account manager" button, if account manager already present
+ if(acctMgrPresent) {
+ MenuItem item = menu.findItem(R.id.acctmgr_add);
+ item.setVisible(false);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if(Logging.VERBOSE) Log.v(Logging.TAG, "AttachProjectListActivity onOptionsItemSelected()");
+
+ switch (item.getItemId()) {
+ case R.id.acctmgr_add:
+ AcctMgrFragment dialog = new AcctMgrFragment();
+ dialog.show(getFragmentManager(), getActivity().getString(R.string.attachproject_acctmgr_header));
+ return true;
+ case R.id.projects_add_url:
+ ManualUrlInputFragment dialog2 = new ManualUrlInputFragment();
+ dialog2.show(getFragmentManager(), getActivity().getString(R.string.attachproject_list_manual_button));
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ private void populateLayout() {
+ try {
+ // read projects from state saved in ClientStatus
+ ArrayList<Project> statusProjects = (ArrayList<Project>) BOINCActivity.monitor.getProjects();
+ acctMgrPresent = BOINCActivity.monitor.getAcctMgrInfoPresent();
+ AcctMgrInfo statusAcctMgr = BOINCActivity.monitor.getClientAcctMgrInfo();
+ ArrayList<Transfer> statusTransfers = (ArrayList<Transfer>) BOINCActivity.monitor.getTransfers();
+
+ // get server / scheduler notices to display if device does not meet
+ ArrayList<Notice> serverNotices = (ArrayList<Notice>) BOINCActivity.monitor.getServerNotices();
+
+ // Update Project data
+ updateData(statusProjects, statusAcctMgr, serverNotices, statusTransfers);
+
+ // Force list adapter to refresh
+ listAdapter.notifyDataSetChanged();
+
+ } catch (Exception e) {
+ // data retrieval failed, set layout to loading...
+ if(Logging.ERROR) Log.d(Logging.TAG,"ProjectsActiviy data retrieval failed.");
+ }
+ }
+
+ private void updateData(ArrayList<Project> latestRpcProjectsList, AcctMgrInfo acctMgrInfo, ArrayList<Notice> serverNotices, ArrayList<Transfer> ongoingTransfers) {
+
+ // ACCOUNT MANAGER
+ //loop through list adapter array to find index of account manager entry (0 || 1 manager possible)
+ int mgrIndex = -1;
+ for(int x = 0; x < data.size(); x++) {
+ if(data.get(x).isMgr) {
+ mgrIndex = x;
+ continue;
+ }
+ }
+ if(mgrIndex < 0) { // no manager present until now
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"no manager found in layout list. new entry available: " + acctMgrInfo.present);
+ if(acctMgrInfo.present) {
+ // add new manager entry, at top of the list
+ data.add(new ProjectsListData(null,acctMgrInfo,null));
+ if(Logging.DEBUG) Log.d(Logging.TAG,"new acct mgr found: " + acctMgrInfo.acct_mgr_name);
+ }
+ } else { // manager found in existing list
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"manager found in layout list at index: " + mgrIndex);
+ if(!acctMgrInfo.present) {
+ // manager got detached, remove from list
+ data.remove(mgrIndex);
+ if(Logging.DEBUG) Log.d(Logging.TAG,"acct mgr removed from list.");
+ }
+ }
+
+ // ATTACHED PROJECTS
+ //loop through all received Result items to add new results
+ for(Project rpcResult: latestRpcProjectsList) {
+ //check whether this Result is new
+ Integer index = null;
+ for(int x = 0; x < data.size(); x++) {
+ if(rpcResult.master_url.equals(data.get(x).id)) {
+ index = x;
+ continue;
+ }
+ }
+ if(index == null) { // result is new, add
+ if(Logging.DEBUG) Log.d(Logging.TAG,"new result found, id: " + rpcResult.master_url + ", managed: " + rpcResult.attached_via_acct_mgr);
+ if(rpcResult.attached_via_acct_mgr) data.add(new ProjectsListData(rpcResult,null, mapTransfersToProject(rpcResult.master_url, ongoingTransfers))); // append to end of list (after manager)
+ else data.add(0, new ProjectsListData(rpcResult,null, mapTransfersToProject(rpcResult.master_url, ongoingTransfers))); // put at top of list (before manager)
+ } else { // result was present before, update its data
+ data.get(index).updateProjectData(rpcResult,null,mapTransfersToProject(rpcResult.master_url, ongoingTransfers));
+ }
+ }
+
+ //loop through the list adapter to find removed (ready/aborted) Results
+ // use iterator to safely remove while iterating
+ Iterator<ProjectsListData> iData = data.iterator();
+ while(iData.hasNext()) {
+ Boolean found = false;
+ ProjectsListData listItem = iData.next();
+ if(listItem.isMgr) continue;
+ for(Project rpcResult: latestRpcProjectsList) {
+ if(listItem.id.equals(rpcResult.master_url)) {
+ found = true;
+ continue;
+ }
+ }
+ if(!found) iData.remove();
+ }
+
+ // SERVER NOTICES
+ // loop through active projects to add/remove server notices
+ if(serverNotices != null) {
+ int mappedServerNotices = 0;
+ for(ProjectsListData project: data) {
+ if(project.isMgr) continue; // do not seek notices in manager entries (crashes)
+ boolean noticeFound = false;
+ for(Notice serverNotice: serverNotices) {
+ if(project.project.project_name.equals(serverNotice.project_name)) {
+ project.addServerNotice(serverNotice);
+ noticeFound = true;
+ mappedServerNotices++;
+ continue;
+ }
+ }
+ if(!noticeFound) project.addServerNotice(null);
+ }
+ if(mappedServerNotices != serverNotices.size()) if(Logging.WARNING) Log.w(Logging.TAG,"could not match notice: " + mappedServerNotices + "/" + serverNotices.size());
+ }
+ }
+
+ // takes list of all ongoing transfers and a project id (url) and returns transfer that belong to given project
+ private ArrayList<Transfer> mapTransfersToProject(String id, ArrayList<Transfer> allTransfers) {
+ ArrayList<Transfer> projectTransfers = new ArrayList<Transfer>();
+ for(Transfer trans: allTransfers) {
+ if(trans.project_url.equals(id)) {
+ // project id matches url in transfer, add to list
+ projectTransfers.add(trans);
+ }
+ }
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "ProjectsActivity mapTransfersToProject() mapped " + projectTransfers.size() + " transfers to project " + id);
+ return projectTransfers;
+ }
+
+ // data wrapper for list view
+ public class ProjectsListData {
+ // can be either project or account manager
+ public Project project = null;
+ public Notice lastServerNotice = null;
+ public AcctMgrInfo acctMgrInfo = null;
+ public ArrayList<Transfer> projectTransfers = null;
+ public String id = ""; // == url
+ public boolean isMgr;
+ public ProjectsListData listEntry = this;
+
+ public ProjectsListData(Project data, AcctMgrInfo acctMgrInfo, ArrayList<Transfer> projectTransfers) {
+ this.project = data;
+ this.acctMgrInfo = acctMgrInfo;
+ this.projectTransfers = projectTransfers;
+ if (this.project == null && this.acctMgrInfo != null) isMgr = true;
+ if(isMgr) {
+ this.id = acctMgrInfo.acct_mgr_url;
+ } else {
+ this.id = data.master_url;
+ }
+ }
+
+ public void updateProjectData(Project data, AcctMgrInfo acctMgrInfo, ArrayList<Transfer> projectTransfers) {
+ if(isMgr){
+ this.acctMgrInfo = acctMgrInfo;
+ } else {
+ this.project = data;
+ this.projectTransfers = projectTransfers;
+ }
+ }
+
+ public void addServerNotice(Notice notice) {
+ this.lastServerNotice = notice;
+ }
+
+ public Notice getLastServerNotice() {
+ return lastServerNotice;
+ }
+
+ // handles onClick on list element, could be either project or account manager
+ // sets up dialog with controls
+ public final OnClickListener projectsListClickListener = new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialogControls = new Dialog(getActivity());
+ // layout
+ dialogControls.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialogControls.setContentView(R.layout.dialog_list);
+ ListView list = (ListView)dialogControls.findViewById(R.id.options);
+
+ // add control items depending on:
+ // - type, account manager vs. project
+ // - client status, e.g. either suspend or resume
+ // - show advanced preference
+ // - project attached via account manager (e.g. hide Remove)
+ ArrayList<ProjectControl> controls = new ArrayList<ProjectControl>();
+ if(isMgr) {
+ ((TextView)dialogControls.findViewById(R.id.title)).setText(R.string.projects_control_dialog_title_acctmgr);
+
+ controls.add(new ProjectControl(listEntry, ProjectControl.VISIT_WEBSITE));
+ controls.add(new ProjectControl(listEntry, RpcClient.MGR_SYNC));
+ controls.add(new ProjectControl(listEntry, RpcClient.MGR_DETACH));
+ } else {
+ ((TextView)dialogControls.findViewById(R.id.title)).setText(R.string.projects_control_dialog_title);
+
+ controls.add(new ProjectControl(listEntry, ProjectControl.VISIT_WEBSITE));
+ if(projectTransfers != null && !projectTransfers.isEmpty()) controls.add(new ProjectControl(listEntry, RpcClient.TRANSFER_RETRY));
+ controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_UPDATE));
+ if(project.suspended_via_gui) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_RESUME));
+ else controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_SUSPEND));
+ boolean isShowAdvanced;
+ try {
+ isShowAdvanced = BOINCActivity.monitor.getShowAdvanced();
+ } catch (RemoteException e) {
+ isShowAdvanced = false;
+ }
+ if(isShowAdvanced && project.dont_request_more_work) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_ANW));
+ if(isShowAdvanced && !project.dont_request_more_work) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_NNW));
+ if(isShowAdvanced) controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_RESET));
+ if(!project.attached_via_acct_mgr)controls.add(new ProjectControl(listEntry, RpcClient.PROJECT_DETACH));
+ }
+
+ // list adapter
+ list.setAdapter(new ProjectControlsListAdapter(getActivity(),list,R.layout.projects_controls_listitem_layout,controls));
+ if(Logging.DEBUG) Log.d(Logging.TAG,"dialog list adapter entries: " + controls.size());
+
+ // buttons
+ Button cancelButton = (Button) dialogControls.findViewById(R.id.cancel);
+ cancelButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialogControls.dismiss();
+ }
+ });
+
+ // show dialog
+ dialogControls.show();
+ }
+ };
+ }
+
+ public class ProjectControl {
+ public ProjectsListData data;
+ public Integer operation;
+
+ // operation that do not imply an RPC are defined here
+ public static final int VISIT_WEBSITE = 100;
+
+ public ProjectControl(ProjectsListData data, Integer operation) {
+ this.operation = operation;
+ this.data = data;
+ }
+
+ // handles onClick on list element in control dialog
+ // might show confirmation dialog depending on operation type
+ public final OnClickListener projectCommandClickListener = new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ //check whether command requires confirmation
+ if(operation == RpcClient.PROJECT_DETACH
+ || operation == RpcClient.PROJECT_RESET
+ || operation == RpcClient.MGR_DETACH) {
+ final Dialog dialog = new Dialog(getActivity());
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(R.layout.dialog_confirm);
+ Button confirm = (Button) dialog.findViewById(R.id.confirm);
+ TextView tvTitle = (TextView)dialog.findViewById(R.id.title);
+ TextView tvMessage = (TextView)dialog.findViewById(R.id.message);
+
+ // operation dependend texts
+ if (operation == RpcClient.PROJECT_DETACH) {
+ tvTitle.setText(R.string.projects_confirm_detach_title);
+ tvMessage.setText(getString(R.string.projects_confirm_detach_message) + " "
+ + data.project.project_name + " " + getString(R.string.projects_confirm_detach_message2));
+ confirm.setText(R.string.projects_confirm_detach_confirm);
+ } else if(operation == RpcClient.PROJECT_RESET) {
+ tvTitle.setText(R.string.projects_confirm_reset_title);
+ tvMessage.setText(getString(R.string.projects_confirm_reset_message) + " "
+ + data.project.project_name + getString(R.string.projects_confirm_reset_message2));
+ confirm.setText(R.string.projects_confirm_reset_confirm);
+ } else if(operation == RpcClient.MGR_DETACH) {
+ tvTitle.setText(R.string.projects_confirm_remove_acctmgr_title);
+ tvMessage.setText(getString(R.string.projects_confirm_remove_acctmgr_message) + " "
+ + data.acctMgrInfo.acct_mgr_name + getString(R.string.projects_confirm_remove_acctmgr_message2));
+ confirm.setText(R.string.projects_confirm_remove_acctmgr_confirm);
+ }
+
+ confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new ProjectOperationAsync().execute(data, operation);
+ dialog.dismiss();
+ dialogControls.dismiss();
+ }
+ });
+ Button cancel = (Button) dialog.findViewById(R.id.cancel);
+ cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ } else if(operation == ProjectControl.VISIT_WEBSITE) { // command does not require confirmation and is not rpc based
+ dialogControls.dismiss();
+ Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(data.id));
+ startActivity(i);
+ }
+ else { // command does not required confirmation, but is rpc based
+ new ProjectOperationAsync().execute(data, operation);
+ dialogControls.dismiss();
+ }
+ }
+ };
+ }
+
+ // executes project operations in new thread
+ private final class ProjectOperationAsync extends AsyncTask<Object,Void,Boolean> {
+
+ @Override
+ protected Boolean doInBackground(Object... params) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectOperationAsync doInBackground");
+ try{
+ ProjectsListData data = (ProjectsListData) params[0];
+ Integer operation = (Integer) params[1];
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectOperationAsync isMgr: " + data.isMgr + "url: " + data.id + " operation: " + operation);
+
+ switch (operation) {
+ // project operations
+ case RpcClient.PROJECT_UPDATE:
+ case RpcClient.PROJECT_SUSPEND:
+ case RpcClient.PROJECT_RESUME:
+ case RpcClient.PROJECT_NNW:
+ case RpcClient.PROJECT_ANW:
+ case RpcClient.PROJECT_DETACH:
+ case RpcClient.PROJECT_RESET:
+ return BOINCActivity.monitor.projectOp(operation, data.id);
+
+ // acct mgr operations
+ case RpcClient.MGR_SYNC:
+ return BOINCActivity.monitor.synchronizeAcctMgr(data.acctMgrInfo.acct_mgr_url);
+ case RpcClient.MGR_DETACH:
+ return BOINCActivity.monitor.addAcctMgrErrorNum("", "", "") == BOINCErrors.ERR_OK;
+
+ // transfer operations
+ case RpcClient.TRANSFER_RETRY:
+ return BOINCActivity.monitor.transferOperation(data.projectTransfers, operation);
+ case RpcClient.TRANSFER_ABORT:
+ break;
+
+ default:
+ if(Logging.ERROR) Log.e(Logging.TAG,"ProjectOperationAsync could not match operation: " + operation);
+ }
+ } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"ProjectOperationAsync error in do in background",e);}
+ return false;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if(success)
+ try {
+ BOINCActivity.monitor.forceRefresh();
+ } catch (RemoteException e) { e.printStackTrace();
+ }
+ else if(Logging.WARNING) Log.w(Logging.TAG,"ProjectOperationAsync failed.");
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/SplashActivity.java b/android/BOINC/src/edu/berkeley/boinc/SplashActivity.java
new file mode 100644
index 0000000..2e548d9
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/SplashActivity.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.attach.SelectionListActivity;
+import edu.berkeley.boinc.client.ClientStatus;
+import edu.berkeley.boinc.client.IMonitor;
+import edu.berkeley.boinc.client.Monitor;
+import edu.berkeley.boinc.utils.Logging;
+import android.app.Activity;
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnLongClickListener;
+import android.widget.ImageView;
+
+/**
+ * Activity shown at start. Forwards to BOINCActivity automatically, once Monitor has connected to Client and received first data via RPCs.
+ * This Activity can not be navigated to, it is also not part of the history stack.
+ * Is also shown during shutdown.
+ * Long click on the BOINC logo brings up the EventLog, in case their is a problem with the RPC connection that needs to be debugged.
+ * @author Joachim Fritzsch
+ *
+ */
+public class SplashActivity extends Activity {
+
+ private Boolean mIsBound = false;
+ private Activity activity = this;
+ private static IMonitor monitor = null;
+
+ private ServiceConnection mConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established
+ mIsBound = true;
+ monitor = IMonitor.Stub.asInterface(service);
+ try {
+ // read log level from monitor preferences and adjust accordingly
+ Logging.setLogLevel(monitor.getLogLevel());
+ } catch (RemoteException e) {Log.w(Logging.TAG, "initializing log level failed.");}
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ mIsBound = false;
+ monitor = null;
+ }
+ };
+
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context,Intent intent) {
+ //if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity ClientStatusChange - onReceive()");
+
+ if(mIsBound) {
+ try{
+ int setupStatus = SplashActivity.monitor.getSetupStatus();
+ switch(setupStatus) {
+ case ClientStatus.SETUP_STATUS_AVAILABLE:
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity SETUP_STATUS_AVAILABLE");
+ // forward to BOINCActivity
+ Intent startMain = new Intent(activity,BOINCActivity.class);
+ startActivity(startMain);
+ break;
+ case ClientStatus.SETUP_STATUS_NOPROJECT:
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity SETUP_STATUS_NOPROJECT");
+ // run benchmarks to speed up project initialization
+ boolean benchmarks = monitor.runBenchmarks();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity: runBenchmarks returned: " + benchmarks);
+ // forward to PROJECTATTACH
+ Intent startAttach = new Intent(activity,SelectionListActivity.class);
+ startActivity(startAttach);
+ break;
+ case ClientStatus.SETUP_STATUS_ERROR:
+ if(Logging.ERROR) Log.e(Logging.TAG, "SplashActivity SETUP_STATUS_ERROR");
+ // do not show log here. error is just a notification of timeout, which is followed by an intermediate (and indefinate) retry
+ break;
+ }
+ } catch(Exception e) {}
+ }
+ }
+ };
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_splash);
+
+ //initialize logging with highest verbosity, read actual value when monitor connected.
+ Logging.setLogLevel(5);
+
+ // check whether PTG is installed, if not, do not start.
+ // this check has to be similar to client.Monitor.onCreate()
+ try {
+ getPackageManager().getPackageInfo("com.htc.ptg", 0);
+ if ("com.android.vending".equals(getPackageManager().getInstallerPackageName("com.htc.ptg")) // check if installed through PlayStore
+ || (getPackageManager().getPackageInfo("com.htc.ptg", 0).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) { // check if pre-installed
+ if(Logging.ERROR) Log.e(Logging.TAG, "SplashActivity: PTG found, show forward dialog.");
+ Intent startPTGIntent = new Intent();
+ startPTGIntent.setClassName("edu.berkeley.boinc", "edu.berkeley.boinc.ForwardDialog");
+ startActivity(startPTGIntent);
+ finish();
+ return;
+ } else if(Logging.WARNING) Log.w(Logging.TAG,"SplashActivity: com.htc.ptg found, but unknown vendor, start BOINC...");
+ } catch (Exception ex) {} // NOP Package not found exception.
+
+ //bind monitor service
+ doBindService();
+
+ // set long click listener to go to eventlog
+ ImageView imageView = (ImageView) findViewById(R.id.logo);
+ imageView.setOnLongClickListener(new OnLongClickListener() {
+
+ @Override
+ public boolean onLongClick(View v) {
+ startActivity(new Intent(activity,EventLogActivity.class));
+ return true;
+ }
+ });
+
+ }
+
+ @Override
+ protected void onResume() { // gets called by system every time activity comes to front. after onCreate upon first creation
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity onResume()");
+ super.onResume();
+ registerReceiver(mClientStatusChangeRec, ifcsc);
+ }
+
+ @Override
+ protected void onPause() { // gets called by system every time activity loses focus.
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity onPause()");
+ super.onPause();
+ unregisterReceiver(mClientStatusChangeRec);
+ }
+
+ @Override
+ protected void onDestroy() {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SplashActivity onDestroy()");
+ super.onDestroy();
+ doUnbindService();
+ }
+
+ private void doBindService() {
+ // start service to allow setForeground later on...
+ startService(new Intent(this, Monitor.class));
+ // Establish a connection with the service, onServiceConnected gets called when
+ bindService(new Intent(this, Monitor.class), mConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (mIsBound) {
+ // Detach existing connection.
+ unbindService(mConnection);
+ mIsBound = false;
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/StatusActivity.java b/android/BOINC/src/edu/berkeley/boinc/StatusActivity.java
deleted file mode 100644
index e1ec3d4..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/StatusActivity.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import java.util.ArrayList;
-
-import edu.berkeley.boinc.adapter.GalleryAdapter;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.ClientStatus.ImageWrapper;
-import edu.berkeley.boinc.client.Monitor;
-import edu.berkeley.boinc.utils.BOINCDefs;
-import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.util.Log;
-import android.view.Display;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup.LayoutParams;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.Gallery;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-public class StatusActivity extends Activity{
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- // keep computingStatus and suspend reason to only adapt layout when changes occur
- private Integer computingStatus = -1;
- private Integer suspendReason = -1;
-
- //slide show
- private RelativeLayout slideshowWrapper;
- private Integer screenHeight = 0;
- private Integer screenWidth = 0;
- private Integer minScreenHeightForSlideshow = 1000;
- private Integer minScreenHeightForImage = 1000;
- private ArrayList<ImageWrapper> slideshowImages = new ArrayList<ImageWrapper>();
- private GalleryAdapter galleryAdapter;
- private Activity activity = this;
-
- private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context,Intent intent) {
- //if(Logging.DEBUG) Log.d(TAG+"-localClientStatusRecNoisy","received action " + intent.getAction());
- loadLayout(false); // load layout, function distincts whether there is something to do
- }
- };
- private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
-
- // connection to Monitor Service.
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "StatusActivity onServiceConnected");
-
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
- loadLayout(true);
- }
-
- public void onServiceDisconnected(ComponentName className) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "StatusActivity onServiceDisconnected");
-
- monitor = null;
- mIsBound = false;
- }
- };
-
- void doBindService() {
- if(!mIsBound) {
- getApplicationContext().bindService(new Intent(this, Monitor.class), mConnection, 0); //calling within Tab needs getApplicationContext() for bindService to work!
- }
- }
-
- void doUnbindService() {
- if (mIsBound) {
- getApplicationContext().unbindService(mConnection);
- mIsBound = false;
- }
- }
-
- public void onCreate(Bundle savedInstanceState) {
- //bind to monitor in order to call its functions and access ClientStatus singleton
- doBindService();
- super.onCreate(savedInstanceState);
- }
-
- public void onResume() {
- //register noisy clientStatusChangeReceiver here, so only active when Activity is visible
- if(Logging.VERBOSE) Log.v(Logging.TAG,"StatusActivity register receiver");
- registerReceiver(mClientStatusChangeRec,ifcsc);
-
- Display display = getWindowManager().getDefaultDisplay();
- screenWidth = display.getWidth();
- screenHeight = display.getHeight();
- if(Logging.DEBUG) Log.d(Logging.TAG,"screen dimensions: " + screenWidth + "*" + screenHeight);
-
- try{
- minScreenHeightForSlideshow = getResources().getInteger(R.integer.status_min_screen_height_for_slideshow_px);
- minScreenHeightForImage = getResources().getInteger(R.integer.status_min_screen_height_for_image_px);
- } catch(Exception e){}
-
- loadLayout(true);
- super.onResume();
- }
-
- public void onPause() {
- //unregister receiver, so there are not multiple intents flying in
- if(Logging.VERBOSE) Log.v(Logging.TAG,"StatusActivity remove receiver");
- unregisterReceiver(mClientStatusChangeRec);
- super.onPause();
- }
-
- @Override
- protected void onDestroy() {
- doUnbindService();
- super.onDestroy();
- }
-
- private void loadLayout(Boolean forceUpdate) {
- //load layout, if service is available and ClientStatus can be accessed.
- //if this is not the case, "onServiceConnected" will call "loadLayout" as soon as the service is bound
- if(mIsBound) {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"StatusActivity: Could not load data, clientStatus not initialized.");
- return;
- }
-
- // layout only if client RPC connection is established
- // otherwise BOINCActivity does not start Tabs
- if(status.setupStatus == ClientStatus.SETUP_STATUS_AVAILABLE) {
-
- // return in cases nothing has changed
- if (!forceUpdate && computingStatus == status.computingStatus && computingStatus != ClientStatus.COMPUTING_STATUS_SUSPENDED) return;
- if (!forceUpdate && computingStatus == status.computingStatus && computingStatus == ClientStatus.COMPUTING_STATUS_SUSPENDED && status.computingSuspendReason == suspendReason) return;
-
- // set layout and retrieve elements
- setContentView(R.layout.status_layout);
- LinearLayout centerWrapper = (LinearLayout) findViewById(R.id.center_wrapper);
- TextView statusHeader = (TextView) findViewById(R.id.status_header);
- ImageView statusImage = (ImageView) findViewById(R.id.status_image);
- TextView statusDescriptor = (TextView) findViewById(R.id.status_long);
- slideshowWrapper = (RelativeLayout) findViewById(R.id.slideshow_wrapper);
-
- // adapt to specific computing status
- switch(status.computingStatus) {
- case ClientStatus.COMPUTING_STATUS_NEVER:
- slideshowWrapper.setVisibility(View.GONE);
- statusHeader.setText(R.string.status_computing_disabled);
- statusImage.setImageResource(R.drawable.playb48);
- statusImage.setContentDescription(getString(R.string.status_computing_disabled));
- statusDescriptor.setText(R.string.status_computing_disabled_long);
- centerWrapper.setVisibility(View.VISIBLE);
- centerWrapper.setClickable(true);
- centerWrapper.setOnClickListener(runModeOnClickListener);
- break;
- case ClientStatus.COMPUTING_STATUS_SUSPENDED:
- slideshowWrapper.setVisibility(View.GONE);
- statusHeader.setText(R.string.status_paused);
- statusImage.setImageResource(R.drawable.pauseb48);
- statusImage.setContentDescription(getString(R.string.status_paused));
- statusImage.setClickable(false);
- centerWrapper.setVisibility(View.VISIBLE);
- switch(status.computingSuspendReason) {
- case BOINCDefs.SUSPEND_REASON_BATTERIES:
- statusDescriptor.setText(R.string.suspend_batteries);
- statusImage.setImageResource(R.drawable.notconnectedb48);
- statusHeader.setVisibility(View.GONE);
- break;
- case BOINCDefs.SUSPEND_REASON_USER_ACTIVE:
- statusDescriptor.setText(R.string.suspend_useractive);
- break;
- case BOINCDefs.SUSPEND_REASON_USER_REQ:
- // state after user stops and restarts computation
- centerWrapper.setVisibility(View.GONE);
- LinearLayout restartingWrapper = (LinearLayout) findViewById(R.id.restarting_wrapper);
- restartingWrapper.setVisibility(View.VISIBLE);
- statusDescriptor.setText(R.string.suspend_user_req);
- break;
- case BOINCDefs.SUSPEND_REASON_TIME_OF_DAY:
- statusDescriptor.setText(R.string.suspend_tod);
- break;
- case BOINCDefs.SUSPEND_REASON_BENCHMARKS:
- statusDescriptor.setText(R.string.suspend_bm);
- statusImage.setImageResource(R.drawable.watchb48);
- statusHeader.setVisibility(View.GONE);
- break;
- case BOINCDefs.SUSPEND_REASON_DISK_SIZE:
- statusDescriptor.setText(R.string.suspend_disksize);
- break;
- case BOINCDefs.SUSPEND_REASON_CPU_THROTTLE:
- statusDescriptor.setText(R.string.suspend_cputhrottle);
- break;
- case BOINCDefs.SUSPEND_REASON_NO_RECENT_INPUT:
- statusDescriptor.setText(R.string.suspend_noinput);
- break;
- case BOINCDefs.SUSPEND_REASON_INITIAL_DELAY:
- statusDescriptor.setText(R.string.suspend_delay);
- break;
- case BOINCDefs.SUSPEND_REASON_EXCLUSIVE_APP_RUNNING:
- statusDescriptor.setText(R.string.suspend_exclusiveapp);
- break;
- case BOINCDefs.SUSPEND_REASON_CPU_USAGE:
- statusDescriptor.setText(R.string.suspend_cpu);
- break;
- case BOINCDefs.SUSPEND_REASON_NETWORK_QUOTA_EXCEEDED:
- statusDescriptor.setText(R.string.suspend_network_quota);
- break;
- case BOINCDefs.SUSPEND_REASON_OS:
- statusDescriptor.setText(R.string.suspend_os);
- break;
- case BOINCDefs.SUSPEND_REASON_WIFI_STATE:
- statusDescriptor.setText(R.string.suspend_wifi);
- break;
- case BOINCDefs.SUSPEND_REASON_BATTERY_CHARGING:
- String text = getString(R.string.suspend_battery_charging);
- if(mIsBound) {
- try{
- Double minCharge = Monitor.getClientStatus().getPrefs().battery_charge_min_pct;
- Integer currentCharge = monitor.getDeviceStatus().getStatus().battery_charge_pct;
- text = getString(R.string.suspend_battery_charging_long) + " " + minCharge.intValue()
- + "% (" + getString(R.string.suspend_battery_charging_current) + " " + currentCharge + "%) "
- + getString(R.string.suspend_battery_charging_long2);
- } catch (Exception e) {}
- }
- statusDescriptor.setText(text);
- statusImage.setImageResource(R.drawable.batteryb48);
- statusHeader.setVisibility(View.GONE);
- break;
- case BOINCDefs.SUSPEND_REASON_BATTERY_OVERHEATED:
- statusDescriptor.setText(R.string.suspend_battery_overheating);
- statusImage.setImageResource(R.drawable.batteryb48);
- statusHeader.setVisibility(View.GONE);
- break;
- default:
- statusDescriptor.setText(R.string.suspend_unknown);
- break;
- }
- suspendReason = status.computingSuspendReason;
- break;
- case ClientStatus.COMPUTING_STATUS_IDLE:
- slideshowWrapper.setVisibility(View.GONE);
- centerWrapper.setVisibility(View.VISIBLE);
- statusHeader.setText(R.string.status_idle);
- statusImage.setImageResource(R.drawable.pauseb48);
- statusImage.setContentDescription(getString(R.string.status_idle));
- statusImage.setClickable(false);
- Integer networkState = 0;
- try{
- networkState = status.networkSuspendReason;
- } catch (Exception e) {}
- if(networkState == BOINCDefs.SUSPEND_REASON_WIFI_STATE){
- // Network suspended due to wifi state
- statusDescriptor.setText(R.string.suspend_wifi);
- }else {
- statusDescriptor.setText(R.string.status_idle_long);
- }
- break;
- case ClientStatus.COMPUTING_STATUS_COMPUTING:
- // check if screen is high enough for slideshow
- if(screenHeight < minScreenHeightForSlideshow) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "loadPlainOldComputingScreen, screen too small.");
- loadPlainOldComputingScreen();
- } else new UpdateSlideshowImagesAsync().execute();
- break;
- }
- computingStatus = status.computingStatus; //save new computing status
- } else { // BOINC client is not available
- //invalid computingStatus, forces layout on next event
- computingStatus = -1;
- }
- }
- }
-
- // load computing screen, if
- // no slideshow images available, or
- // screen too small for slideshow
- private void loadPlainOldComputingScreen() {
- LinearLayout centerWrapper = (LinearLayout) findViewById(R.id.center_wrapper);
- centerWrapper.setVisibility(View.VISIBLE);
- TextView statusHeader = (TextView) findViewById(R.id.status_header);
- ImageView statusImage = (ImageView) findViewById(R.id.status_image);
- TextView statusDescriptor = (TextView) findViewById(R.id.status_long);
- statusHeader.setText(R.string.status_running);
- statusImage.setImageResource(R.drawable.cogsb48);
- statusImage.setContentDescription(getString(R.string.status_running));
- statusDescriptor.setText(R.string.status_running_long);
- }
-
- private OnClickListener runModeOnClickListener = new OnClickListener(){
- @Override
- public void onClick(View v) {
- new WriteClientRunModeAsync().execute(BOINCDefs.RUN_MODE_AUTO);
- }
- };
-
- private final class WriteClientRunModeAsync extends AsyncTask<Integer, Void, Boolean> {
-
- @Override
- protected Boolean doInBackground(Integer... params) {
- // setting provided mode for both, CPU computation and network.
- Boolean runMode = monitor.clientInterface.setRunMode(params[0]);
- Boolean networkMode = monitor.clientInterface.setNetworkMode(params[0]);
- return runMode && networkMode;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- if(success) monitor.forceRefresh();
- else if(Logging.WARNING) Log.w(Logging.TAG,"setting run mode failed");
- }
- }
-
- private final class UpdateSlideshowImagesAsync extends AsyncTask<Void, Void, Boolean> {
-
- @Override
- protected Boolean doInBackground(Void... params) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "UpdateSlideshowImagesAsync updating images in new thread.");
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"UpdateSlideshowImagesAsync: Could not load data, clientStatus not initialized.");
- return false;
- }
- // load slideshow images
- status.updateSlideshowImages(slideshowImages);
- if(slideshowImages == null || slideshowImages.size() == 0) return false;
- return true;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "UpdateSlideshowImagesAsync success: " + success);
-
- // check whether computingStatus has changed in the meantime.
- if(computingStatus != ClientStatus.COMPUTING_STATUS_COMPUTING) return;
-
- if(success) {
- // images available, adapt layout
- Gallery gallery = (Gallery) findViewById(R.id.gallery);
- final ImageView imageView = (ImageView) findViewById(R.id.image_view);
- final TextView imageDesc = (TextView)findViewById(R.id.image_description);
- imageDesc.setText(slideshowImages.get(0).projectName);
- LinearLayout centerWrapper = (LinearLayout) findViewById(R.id.center_wrapper);
- centerWrapper.setVisibility(View.GONE);
- slideshowWrapper.setVisibility(View.VISIBLE);
-
- //setup adapter
- galleryAdapter = new GalleryAdapter(activity, slideshowImages);
- gallery.setAdapter(galleryAdapter);
-
- // adapt layout according to screen size
- if(screenHeight < minScreenHeightForImage) {
- // screen is not high enough for large image
- imageView.setVisibility(View.GONE);
- RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
- params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
- LinearLayout galleryWrapper = (LinearLayout) findViewById(R.id.gallery_wrapper);
- galleryWrapper.setLayoutParams(params);
- galleryWrapper.setPadding(0, 0, 0, 5);
- gallery.setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
- imageDesc.setText(slideshowImages.get(position).projectName);
- }
- });
- } else {
- // screen is high enough, fully blown layout
- imageView.setImageBitmap(slideshowImages.get(0).image);
- gallery.setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
- imageView.setImageBitmap(slideshowImages.get(position).image);
- imageDesc.setText(slideshowImages.get(position).projectName);
- }
- });
- }
- } else loadPlainOldComputingScreen();
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/StatusFragment.java b/android/BOINC/src/edu/berkeley/boinc/StatusFragment.java
new file mode 100644
index 0000000..63abe3d
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/StatusFragment.java
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+import edu.berkeley.boinc.attach.SelectionListActivity;
+import edu.berkeley.boinc.client.ClientStatus;
+import edu.berkeley.boinc.utils.BOINCDefs;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class StatusFragment extends Fragment{
+
+ // keep computingStatus and suspend reason to only adapt layout when changes occur
+ private Integer computingStatus = -1;
+ private Integer computingSuspendReason = -1;
+ private Integer networkSuspendReason = -1;
+ private Integer setupStatus = -1;
+
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context,Intent intent) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "StatusFragment ClientStatusChange - onReceive()");
+ loadLayout(false);
+ }
+ };
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+
+ public void onResume() {
+ //register noisy clientStatusChangeReceiver here, so only active when Activity is visible
+ if(Logging.VERBOSE) Log.v(Logging.TAG,"StatusFragment register receiver");
+ getActivity().registerReceiver(mClientStatusChangeRec,ifcsc);
+
+ //loadLayout(true);
+ super.onResume();
+ }
+
+ public void onPause() {
+ //unregister receiver, so there are not multiple intents flying in
+ if(Logging.VERBOSE) Log.v(Logging.TAG,"StatusFragment remove receiver");
+ getActivity().unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.VERBOSE) Log.v(Logging.TAG,"StatusFragment onCreateView");
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.status_layout, container, false);
+ }
+
+ private void loadLayout(Boolean forceUpdate) {
+ //load layout, if if ClientStatus can be accessed.
+ //if this is not the case, the broadcast receiver will call "loadLayout" again
+ try {
+
+ int currentSetupStatus = BOINCActivity.monitor.getSetupStatus();
+ int currentComputingStatus = BOINCActivity.monitor.getComputingStatus();
+ int currentComputingSuspendReason = BOINCActivity.monitor.getComputingSuspendReason();
+ int currentNetworkSuspendReason = BOINCActivity.monitor.getNetworkSuspendReason();
+
+ // layout only if client RPC connection is established
+ // otherwise BOINCActivity does not start Tabs
+ if(currentSetupStatus == ClientStatus.SETUP_STATUS_AVAILABLE) {
+ // return in cases nothing has changed
+ if (forceUpdate ||
+ computingStatus != currentComputingStatus ||
+ currentComputingSuspendReason != computingSuspendReason ||
+ currentNetworkSuspendReason != networkSuspendReason) {
+
+ // set layout and retrieve elements
+ LinearLayout statusWrapper = (LinearLayout) getView().findViewById(R.id.status_wrapper);
+ LinearLayout centerWrapper = (LinearLayout) getView().findViewById(R.id.center_wrapper);
+ LinearLayout restartingWrapper = (LinearLayout) getView().findViewById(R.id.restarting_wrapper);
+ TextView statusHeader = (TextView) getView().findViewById(R.id.status_header);
+ ImageView statusImage = (ImageView) getView().findViewById(R.id.status_image);
+ TextView statusDescriptor = (TextView) getView().findViewById(R.id.status_long);
+
+ restartingWrapper.setVisibility(View.GONE);
+
+ // adapt to specific computing status
+ switch(currentComputingStatus) {
+ case ClientStatus.COMPUTING_STATUS_NEVER:
+ statusWrapper.setVisibility(View.VISIBLE);
+ statusHeader.setText(BOINCActivity.monitor.getCurrentStatusTitle());
+ statusHeader.setVisibility(View.VISIBLE);
+ statusImage.setImageResource(R.drawable.playb48);
+ statusImage.setContentDescription(BOINCActivity.monitor.getCurrentStatusTitle());
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ centerWrapper.setVisibility(View.VISIBLE);
+ centerWrapper.setOnClickListener(runModeOnClickListener);
+ break;
+ case ClientStatus.COMPUTING_STATUS_SUSPENDED:
+ statusWrapper.setVisibility(View.VISIBLE);
+ statusHeader.setText(BOINCActivity.monitor.getCurrentStatusTitle());
+ statusHeader.setVisibility(View.VISIBLE);
+ statusImage.setImageResource(R.drawable.pauseb48);
+ statusImage.setContentDescription(BOINCActivity.monitor.getCurrentStatusTitle());
+ statusImage.setClickable(false);
+ centerWrapper.setVisibility(View.VISIBLE);
+ switch(currentComputingSuspendReason) {
+ case BOINCDefs.SUSPEND_REASON_BATTERIES:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ statusImage.setImageResource(R.drawable.notconnectedb48);
+ statusHeader.setVisibility(View.GONE);
+ break;
+ case BOINCDefs.SUSPEND_REASON_USER_ACTIVE:
+ Boolean suspendDueToScreenOn = false;
+ try{ suspendDueToScreenOn = BOINCActivity.monitor.getSuspendWhenScreenOn();} catch(RemoteException e){}
+ if(suspendDueToScreenOn){
+ statusImage.setImageResource(R.drawable.screen48b);
+ statusHeader.setVisibility(View.GONE);
+ }
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_USER_REQ:
+ // state after user stops and restarts computation
+ centerWrapper.setVisibility(View.GONE);
+ restartingWrapper.setVisibility(View.VISIBLE);
+ break;
+ case BOINCDefs.SUSPEND_REASON_TIME_OF_DAY:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_BENCHMARKS:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ statusImage.setImageResource(R.drawable.watchb48);
+ statusHeader.setVisibility(View.GONE);
+ break;
+ case BOINCDefs.SUSPEND_REASON_DISK_SIZE:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_CPU_THROTTLE:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_NO_RECENT_INPUT:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_INITIAL_DELAY:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_EXCLUSIVE_APP_RUNNING:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_CPU_USAGE:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_NETWORK_QUOTA_EXCEEDED:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_OS:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_WIFI_STATE:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case BOINCDefs.SUSPEND_REASON_BATTERY_CHARGING:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ statusImage.setImageResource(R.drawable.batteryb48);
+ statusHeader.setVisibility(View.GONE);
+ break;
+ case BOINCDefs.SUSPEND_REASON_BATTERY_OVERHEATED:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ statusImage.setImageResource(R.drawable.batteryb48);
+ statusHeader.setVisibility(View.GONE);
+ break;
+ default:
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ }
+ break;
+ case ClientStatus.COMPUTING_STATUS_IDLE:
+ statusWrapper.setVisibility(View.VISIBLE);
+ centerWrapper.setVisibility(View.VISIBLE);
+ statusHeader.setText(BOINCActivity.monitor.getCurrentStatusTitle());
+ statusHeader.setVisibility(View.VISIBLE);
+ statusImage.setImageResource(R.drawable.pauseb48);
+ statusImage.setContentDescription(BOINCActivity.monitor.getCurrentStatusTitle());
+ statusImage.setClickable(false);
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusDescription());
+ break;
+ case ClientStatus.COMPUTING_STATUS_COMPUTING:
+ statusWrapper.setVisibility(View.GONE);
+ break;
+ }
+ //save new computing status
+ computingStatus = currentComputingStatus;
+ computingSuspendReason = currentComputingSuspendReason;
+ networkSuspendReason = currentNetworkSuspendReason;
+ setupStatus = -1; // invalidate to force update next time no project
+ }
+ } else if (currentSetupStatus == ClientStatus.SETUP_STATUS_NOPROJECT) {
+
+ if(setupStatus != ClientStatus.SETUP_STATUS_NOPROJECT) {
+ // set layout and retrieve elements
+ LinearLayout statusWrapper = (LinearLayout) getView().findViewById(R.id.status_wrapper);
+ LinearLayout centerWrapper = (LinearLayout) getView().findViewById(R.id.center_wrapper);
+ LinearLayout restartingWrapper = (LinearLayout) getView().findViewById(R.id.restarting_wrapper);
+ TextView statusHeader = (TextView) getView().findViewById(R.id.status_header);
+ ImageView statusImage = (ImageView) getView().findViewById(R.id.status_image);
+ TextView statusDescriptor = (TextView) getView().findViewById(R.id.status_long);
+
+ statusWrapper.setVisibility(View.VISIBLE);
+ restartingWrapper.setVisibility(View.GONE);
+ centerWrapper.setVisibility(View.VISIBLE);
+ centerWrapper.setOnClickListener(addProjectOnClickListener);
+ statusImage.setImageResource(R.drawable.projectsb48);
+ statusHeader.setVisibility(View.GONE);
+ statusDescriptor.setText(BOINCActivity.monitor.getCurrentStatusTitle());
+ setupStatus = ClientStatus.SETUP_STATUS_NOPROJECT;
+ computingStatus = -1;
+ }
+ }
+ else { // BOINC client is not available
+ //invalid computingStatus, forces layout on next event
+ setupStatus = -1;
+ computingStatus = -1;
+ }
+ } catch(Exception e){}
+ }
+
+ private OnClickListener runModeOnClickListener = new OnClickListener(){
+ @Override
+ public void onClick(View v) {
+ new WriteClientRunModeAsync().execute(BOINCDefs.RUN_MODE_AUTO);
+ }
+ };
+
+ private OnClickListener addProjectOnClickListener = new OnClickListener(){
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(getActivity(), SelectionListActivity.class));
+ }
+ };
+
+ private final class WriteClientRunModeAsync extends AsyncTask<Integer, Void, Boolean> {
+
+ @Override
+ protected Boolean doInBackground(Integer... params) {
+ // setting provided mode for both, CPU computation and network.
+ Boolean runMode;
+ try {
+ runMode = BOINCActivity.monitor.setRunMode(params[0]);
+ } catch (RemoteException e) {
+ runMode = false;
+ }
+ Boolean networkMode;
+ try {
+ networkMode = BOINCActivity.monitor.setNetworkMode(params[0]);
+ } catch (RemoteException e) {
+ networkMode = false;
+ }
+ return runMode && networkMode;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if(success)
+ try {
+ BOINCActivity.monitor.forceRefresh();
+ } catch (RemoteException e) {}
+ else if(Logging.WARNING) Log.w(Logging.TAG,"StatusFragment: setting run mode failed");
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/TasksActivity.java b/android/BOINC/src/edu/berkeley/boinc/TasksActivity.java
deleted file mode 100644
index 28d9458..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/TasksActivity.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc;
-
-import edu.berkeley.boinc.utils.*;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import edu.berkeley.boinc.adapter.TasksListAdapter;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
-import edu.berkeley.boinc.rpc.Result;
-import edu.berkeley.boinc.rpc.RpcClient;
-import edu.berkeley.boinc.utils.BOINCDefs;
-import android.app.Dialog;
-import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.support.v4.app.FragmentActivity;
-import android.util.Log;
-import android.view.View;
-import android.view.Window;
-import android.view.View.OnClickListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.Button;
-import android.widget.ListView;
-import android.widget.TextView;
-
-public class TasksActivity extends FragmentActivity {
-
- private Monitor monitor;
- private Boolean mIsBound = false;
-
- //private ClientStatus status; //client status, new information gets parsed by monitor, changes notified by "clientstatus" broadcast. read Result from here, to get information about tasks.
-
- private ListView lv;
- private TasksListAdapter listAdapter;
- private FragmentActivity activity = this;
-
- private ArrayList<TaskData> data = new ArrayList<TaskData>(); //Adapter for list data
- private Boolean setup = false;
-
- // This is called when the connection with the service has been established,
- // getService returns the Monitor object that is needed to call functions.
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsBound = true;
- }
-
- public void onServiceDisconnected(ComponentName className) {
- monitor = null;
- mIsBound = false;
- }
- };
-
- private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
-
- //private final String TAG = "TasksActivity-Receiver";
- @Override
- public void onReceive(Context context,Intent intent) {
- //if(Logging.DEBUG) Log.d(Logging.TAG,"TasksActivity onReceive");
- loadData();
- }
- };
- private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.tasks_layout);
- // Establish a connection with the service, onServiceConnected gets called when
- // (calling within Tab needs getApplicationContext() for bindService to work!)
- getApplicationContext().bindService(new Intent(this, Monitor.class), mConnection, Service.START_STICKY_COMPATIBILITY);
-
- //load data model
- loadData();
- }
-
- public void onResume() {
- super.onResume();
- //register noisy clientStatusChangeReceiver here, so only active when Activity is visible
- if(Logging.DEBUG) Log.d(Logging.TAG,"TasksActivity register receiver");
- registerReceiver(mClientStatusChangeRec,ifcsc);
- loadData();
- }
-
- public void onPause() {
- //unregister receiver, so there are not multiple intents flying in
- if(Logging.DEBUG) Log.d(Logging.TAG,"TasksActivity remove receiver");
- unregisterReceiver(mClientStatusChangeRec);
- super.onPause();
- }
-
- @Override
- protected void onDestroy() {
- if(Logging.VERBOSE) Log.v(Logging.TAG, "TasksActivity onDestroy()");
-
- if (mIsBound) {
- getApplicationContext().unbindService(mConnection);
- mIsBound = false;
- }
-
- super.onDestroy();
- }
-
- private void loadData() {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"TasksActivity: Could not load data, clientStatus not initialized.");
- return;
- }
- //setup list and adapter
- ArrayList<Result> tmpA = status.getTasks();
- if(tmpA!=null) { //can be null before first monitor status cycle (e.g. when not logged in or during startup)
-
- //deep copy, so ArrayList adapter actually recognizes the difference
- updateData(tmpA);
-
- if(!setup) { //first time we got proper results, setup adapter
- lv = (ListView) findViewById(R.id.tasksList);
- listAdapter = new TasksListAdapter(TasksActivity.this,R.id.tasksList,data);
- lv.setAdapter(listAdapter);
- lv.setOnItemClickListener(itemClickListener);
-
- setup = true;
- }
-
- //if(Logging.DEBUG) Log.d(Logging.TAG,"loadData: data set contains " + data.size() + " results.");
- listAdapter.notifyDataSetChanged(); //force list adapter to refresh
-
- } else {
- if(Logging.WARNING) Log.w(Logging.TAG, "loadData: array is null, rpc failed");
- }
- }
-
- private void updateData(ArrayList<Result> newData) {
- //loop through all received Result items to add new results
- for(Result rpcResult: newData) {
- //check whether this Result is new
- Integer index = null;
- for(int x = 0; x < data.size(); x++) {
- if(rpcResult.name.equals(data.get(x).id)) {
- index = x;
- continue;
- }
- }
- if(index == null) { // result is new, add
- if(Logging.DEBUG) Log.d(Logging.TAG,"new result found, id: " + rpcResult.name);
- data.add(new TaskData(rpcResult));
- } else { // result was present before, update its data
- data.get(index).updateResultData(rpcResult);
- }
- }
-
- //loop through the list adapter to find removed (ready/aborted) Results
- // use iterator to safely remove while iterating
- Iterator<TaskData> iData = data.iterator();
- while(iData.hasNext()) {
- Boolean found = false;
- TaskData listItem = iData.next();
- for(Result rpcResult: newData) {
- if(listItem.id.equals(rpcResult.name)) {
- found = true;
- continue;
- }
- }
- if(!found) iData.remove();
- }
- }
-
- public class TaskData {
- public Result result = null;
- public boolean expanded = false;
- public String id = "";
- public int nextState = -1;
- public int loopCounter = 0;
- public int transistionTimeout = 10; // amount of refresh, until transition times out
-
- public TaskData(Result data) {
- this.result = data;
- this.expanded = false;
- this.id = data.name;
- this.transistionTimeout = getResources().getInteger(R.integer.tasks_transistion_timeout_number_monitor_loops);
- }
-
- public void updateResultData(Result data) {
- this.result = data;
- Integer currentState = determineState();
- if (nextState == -1) return;
- if(currentState == nextState) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"nextState met! " + nextState);
- nextState = -1;
- loopCounter = 0;
- } else {
- if(loopCounter<transistionTimeout) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"nextState not met yet! " + nextState + " vs " + currentState + " loopCounter: " + loopCounter);
- loopCounter++;
- } else {
- if(Logging.DEBUG) Log.d(Logging.TAG,"transition timed out! " + nextState + " vs " + currentState + " loopCounter: " + loopCounter);
- nextState = -1;
- loopCounter = 0;
- }
- }
- }
-
- public final OnClickListener iconClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- final Integer operation = (Integer)v.getTag();
- switch(operation) {
- case RpcClient.RESULT_SUSPEND:
- nextState = BOINCDefs.RESULT_SUSPENDED_VIA_GUI;
- new ResultOperationAsync().execute(result.project_url, result.name, operation.toString());
- break;
- case RpcClient.RESULT_RESUME:
- nextState = BOINCDefs.PROCESS_EXECUTING;
- new ResultOperationAsync().execute(result.project_url, result.name, operation.toString());
- break;
- case RpcClient.RESULT_ABORT:
- final Dialog dialog = new Dialog(activity);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setContentView(R.layout.dialog_confirm);
- Button confirm = (Button) dialog.findViewById(R.id.confirm);
- TextView tvTitle = (TextView)dialog.findViewById(R.id.title);
- TextView tvMessage = (TextView)dialog.findViewById(R.id.message);
-
- tvTitle.setText(R.string.confirm_abort_task_title);
- tvMessage.setText(getString(R.string.confirm_abort_task_message) + " "
- + result.name);
- confirm.setText(R.string.confirm_abort_task_confirm);
- confirm.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- nextState = BOINCDefs.RESULT_ABORTED;
- new ResultOperationAsync().execute(result.project_url, result.name, operation.toString());
- dialog.dismiss();
- }
- });
- Button cancel = (Button) dialog.findViewById(R.id.cancel);
- cancel.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.dismiss();
- }
- });
- dialog.show();
- break;
- default:
- if(Logging.WARNING) Log.w(Logging.TAG,"could not map operation tag");
- }
- listAdapter.notifyDataSetChanged(); //force list adapter to refresh
- } catch (Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"failed parsing view tag");}
- }
- };
-
- public int determineState() {
- if(result.suspended_via_gui) return BOINCDefs.RESULT_SUSPENDED_VIA_GUI;
- if(result.project_suspended_via_gui) return BOINCDefs.RESULT_PROJECT_SUSPENDED;
- if(result.ready_to_report && result.state != BOINCDefs.RESULT_ABORTED && result.state != BOINCDefs.RESULT_COMPUTE_ERROR) return BOINCDefs.RESULT_READY_TO_REPORT;
- if(result.active_task){
- return result.active_task_state;
- } else {
- return result.state;
- }
- }
-
- public boolean isTaskActive() {
- return result.active_task;
- }
- }
-
- public final OnItemClickListener itemClickListener = new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
- TaskData task = listAdapter.getItem(position);
- task.expanded = !task.expanded;
- listAdapter.notifyDataSetChanged();
- }
- };
-
- private final class ResultOperationAsync extends AsyncTask<String,Void,Boolean> {
-
- @Override
- protected Boolean doInBackground(String... params) {
- try{
- String url = params[0];
- String name = params[1];
- Integer operation = Integer.parseInt(params[2]);
- if(Logging.DEBUG) Log.d(Logging.TAG,"url: " + url + " Name: " + name + " operation: " + operation);
-
- if(mIsBound) return monitor.clientInterface.resultOp(operation, url, name);
- else return false;
- } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"SuspendResultAsync error in do in background",e);}
- return false;
- }
-
- @Override
- protected void onPostExecute(Boolean success) {
- if(success) monitor.forceRefresh();
- else if(Logging.WARNING) Log.w(Logging.TAG,"SuspendResultAsync failed.");
- }
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/TasksFragment.java b/android/BOINC/src/edu/berkeley/boinc/TasksFragment.java
new file mode 100644
index 0000000..b47a9a2
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/TasksFragment.java
@@ -0,0 +1,287 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc;
+
+import edu.berkeley.boinc.utils.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import edu.berkeley.boinc.adapter.TasksListAdapter;
+import edu.berkeley.boinc.rpc.Result;
+import edu.berkeley.boinc.rpc.RpcClient;
+import edu.berkeley.boinc.utils.BOINCDefs;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.View.OnClickListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.TextView;
+
+public class TasksFragment extends Fragment {
+
+ private ListView lv;
+ private TasksListAdapter listAdapter;
+ private ArrayList<TaskData> data = new ArrayList<TaskData>();
+
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context,Intent intent) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"TasksActivity onReceive");
+ loadData();
+ }
+ };
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"TasksFragment onCreateView");
+ // Inflate the layout for this fragment
+ View layout = inflater.inflate(R.layout.tasks_layout, container, false);
+ lv = (ListView) layout.findViewById(R.id.tasksList);
+ listAdapter = new TasksListAdapter(getActivity(),R.id.tasksList,data);
+ lv.setAdapter(listAdapter);
+ lv.setOnItemClickListener(itemClickListener);
+ return layout;
+ }
+
+ public void onResume() {
+ super.onResume();
+ //register noisy clientStatusChangeReceiver here, so only active when Activity is visible
+ if(Logging.DEBUG) Log.d(Logging.TAG,"TasksFragment register receiver");
+ getActivity().registerReceiver(mClientStatusChangeRec,ifcsc);
+ loadData();
+ }
+
+ public void onPause() {
+ //unregister receiver, so there are not multiple intents flying in
+ if(Logging.DEBUG) Log.d(Logging.TAG,"TasksFragment remove receiver");
+ getActivity().unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ private void loadData() {
+ // try to get current client status from monitor
+ //ClientStatus status;
+ ArrayList<Result> tmpA = null;
+ try{
+ //status = Monitor.getClientStatus();
+ tmpA = (ArrayList<Result>) BOINCActivity.monitor.getTasks();
+ } catch (Exception e){
+ if(Logging.WARNING) Log.w(Logging.TAG,"TasksActivity: Could not load data, clientStatus not initialized.");
+ return;
+ }
+ //setup list and adapter
+ //ArrayList<Result> tmpA = status.getTasks();
+ if(tmpA!=null) { //can be null before first monitor status cycle (e.g. when not logged in or during startup)
+
+ //deep copy, so ArrayList adapter actually recognizes the difference
+ updateData(tmpA);
+
+ //if(Logging.DEBUG) Log.d(Logging.TAG,"loadData: data set contains " + data.size() + " results.");
+ listAdapter.notifyDataSetChanged(); //force list adapter to refresh
+
+ } else {
+ if(Logging.WARNING) Log.w(Logging.TAG, "loadData: array is null, rpc failed");
+ }
+ }
+
+ private void updateData(ArrayList<Result> newData) {
+ //loop through all received Result items to add new results
+ for(Result rpcResult: newData) {
+ //check whether this Result is new
+ Integer index = null;
+ for(int x = 0; x < data.size(); x++) {
+ if(rpcResult.name.equals(data.get(x).id)) {
+ index = x;
+ continue;
+ }
+ }
+ if(index == null) { // result is new, add
+ if(Logging.DEBUG) Log.d(Logging.TAG,"new result found, id: " + rpcResult.name);
+ data.add(new TaskData(rpcResult));
+ } else { // result was present before, update its data
+ data.get(index).updateResultData(rpcResult);
+ }
+ }
+
+ //loop through the list adapter to find removed (ready/aborted) Results
+ // use iterator to safely remove while iterating
+ Iterator<TaskData> iData = data.iterator();
+ while(iData.hasNext()) {
+ Boolean found = false;
+ TaskData listItem = iData.next();
+ for(Result rpcResult: newData) {
+ if(listItem.id.equals(rpcResult.name)) {
+ found = true;
+ continue;
+ }
+ }
+ if(!found) iData.remove();
+ }
+ }
+
+ public class TaskData {
+ public Result result = null;
+ public boolean expanded = false;
+ public String id = "";
+ public int nextState = -1;
+ public int loopCounter = 0;
+ public int transistionTimeout = 10; // amount of refresh, until transition times out
+
+ public TaskData(Result data) {
+ this.result = data;
+ this.expanded = false;
+ this.id = data.name;
+ this.transistionTimeout = getResources().getInteger(R.integer.tasks_transistion_timeout_number_monitor_loops);
+ }
+
+ public void updateResultData(Result data) {
+ this.result = data;
+ Integer currentState = determineState();
+ if (nextState == -1) return;
+ if(currentState == nextState) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"nextState met! " + nextState);
+ nextState = -1;
+ loopCounter = 0;
+ } else {
+ if(loopCounter<transistionTimeout) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"nextState not met yet! " + nextState + " vs " + currentState + " loopCounter: " + loopCounter);
+ loopCounter++;
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"transition timed out! " + nextState + " vs " + currentState + " loopCounter: " + loopCounter);
+ nextState = -1;
+ loopCounter = 0;
+ }
+ }
+ }
+
+ public final OnClickListener iconClickListener = new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ final Integer operation = (Integer)v.getTag();
+ switch(operation) {
+ case RpcClient.RESULT_SUSPEND:
+ nextState = BOINCDefs.RESULT_SUSPENDED_VIA_GUI;
+ new ResultOperationAsync().execute(result.project_url, result.name, operation.toString());
+ break;
+ case RpcClient.RESULT_RESUME:
+ nextState = BOINCDefs.PROCESS_EXECUTING;
+ new ResultOperationAsync().execute(result.project_url, result.name, operation.toString());
+ break;
+ case RpcClient.RESULT_ABORT:
+ final Dialog dialog = new Dialog(getActivity());
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(R.layout.dialog_confirm);
+ Button confirm = (Button) dialog.findViewById(R.id.confirm);
+ TextView tvTitle = (TextView)dialog.findViewById(R.id.title);
+ TextView tvMessage = (TextView)dialog.findViewById(R.id.message);
+
+ tvTitle.setText(R.string.confirm_abort_task_title);
+ tvMessage.setText(getString(R.string.confirm_abort_task_message) + " "
+ + result.name);
+ confirm.setText(R.string.confirm_abort_task_confirm);
+ confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ nextState = BOINCDefs.RESULT_ABORTED;
+ new ResultOperationAsync().execute(result.project_url, result.name, operation.toString());
+ dialog.dismiss();
+ }
+ });
+ Button cancel = (Button) dialog.findViewById(R.id.cancel);
+ cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ break;
+ default:
+ if(Logging.WARNING) Log.w(Logging.TAG,"could not map operation tag");
+ }
+ listAdapter.notifyDataSetChanged(); //force list adapter to refresh
+ } catch (Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"failed parsing view tag");}
+ }
+ };
+
+ public int determineState() {
+ if(result.suspended_via_gui) return BOINCDefs.RESULT_SUSPENDED_VIA_GUI;
+ if(result.project_suspended_via_gui) return BOINCDefs.RESULT_PROJECT_SUSPENDED;
+ if(result.ready_to_report && result.state != BOINCDefs.RESULT_ABORTED && result.state != BOINCDefs.RESULT_COMPUTE_ERROR) return BOINCDefs.RESULT_READY_TO_REPORT;
+ if(result.active_task){
+ return result.active_task_state;
+ } else {
+ return result.state;
+ }
+ }
+
+ public boolean isTaskActive() {
+ return result.active_task;
+ }
+ }
+
+ public final OnItemClickListener itemClickListener = new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
+ TaskData task = listAdapter.getItem(position);
+ task.expanded = !task.expanded;
+ listAdapter.notifyDataSetChanged();
+ }
+ };
+
+ private final class ResultOperationAsync extends AsyncTask<String,Void,Boolean> {
+
+ @Override
+ protected Boolean doInBackground(String... params) {
+ try{
+ String url = params[0];
+ String name = params[1];
+ Integer operation = Integer.parseInt(params[2]);
+ if(Logging.DEBUG) Log.d(Logging.TAG,"url: " + url + " Name: " + name + " operation: " + operation);
+
+ return BOINCActivity.monitor.resultOp(operation, url, name);
+ } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"SuspendResultAsync error in do in background",e);}
+ return false;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ if(success)
+ try {
+ BOINCActivity.monitor.forceRefresh();
+ } catch (RemoteException e) {}
+ else if(Logging.WARNING) Log.w(Logging.TAG,"SuspendResultAsync failed.");
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/AttachProjectListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/AttachProjectListAdapter.java
deleted file mode 100644
index aa009d0..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/AttachProjectListAdapter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-package edu.berkeley.boinc.adapter;
-
-import java.util.ArrayList;
-
-import edu.berkeley.boinc.R;
-import edu.berkeley.boinc.rpc.ProjectInfo;
-
-import android.app.Activity;
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-public class AttachProjectListAdapter extends ArrayAdapter<ProjectInfo>{
-
- //private final String TAG = "AttachProjectListAdapter";
- private ArrayList<ProjectInfo> entries;
- private Activity activity;
-
- public AttachProjectListAdapter(Activity a, int textViewResourceId, ArrayList<ProjectInfo> entries) {
- super(a, textViewResourceId, entries);
- this.entries = entries;
- this.activity = a;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
-
- View v = convertView;
- LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- ProjectInfo listItem = entries.get(position);
-
- v = vi.inflate(R.layout.attach_project_list_layout_listitem, null);
- TextView name = (TextView) v.findViewById(R.id.name);
- TextView description = (TextView) v.findViewById(R.id.description);
- name.setText(listItem.name);
- description.setText(listItem.generalArea);
- v.setTag(listItem); //add ProjectInfo to view
-
- return v;
- }
-
- @Override
- public int getCount() {
- return entries.size();
- }
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/GalleryAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/GalleryAdapter.java
index 5cc23ef..84c14df 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/GalleryAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/GalleryAdapter.java
@@ -20,7 +20,7 @@ package edu.berkeley.boinc.adapter;
import java.util.ArrayList;
-import edu.berkeley.boinc.client.ClientStatus.ImageWrapper;
+import edu.berkeley.boinc.rpc.ImageWrapper;
import android.content.Context;
import android.view.View;
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/NavDrawerListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/NavDrawerListAdapter.java
new file mode 100644
index 0000000..82c9ae5
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/NavDrawerListAdapter.java
@@ -0,0 +1,272 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.adapter;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import edu.berkeley.boinc.BOINCActivity;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.rpc.Project;
+import edu.berkeley.boinc.utils.Logging;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+public class NavDrawerListAdapter extends BaseAdapter{
+
+ //private final String TAG = "NavDrawerListAdapter";
+ private Context context;
+ private ArrayList<NavDrawerItem> navDrawerItems = new ArrayList<NavDrawerItem>();
+
+ public int selectedMenuId = 0;
+
+ public NavDrawerListAdapter(Context context){
+ this.context = context;
+
+ // populate items
+ navDrawerItems.add(new NavDrawerItem(R.string.tab_tasks, R.drawable.tabtaskb, true));
+ navDrawerItems.add(new NavDrawerItem(R.string.tab_notices, R.drawable.mailb, true));
+ navDrawerItems.add(new NavDrawerItem(R.string.tab_projects, R.drawable.projectsb));
+ navDrawerItems.add(new NavDrawerItem(R.string.projects_add, R.drawable.sqplusb, false, true));
+ navDrawerItems.add(new NavDrawerItem(R.string.tab_preferences, R.drawable.cogsb));
+ navDrawerItems.add(new NavDrawerItem(R.string.menu_help, R.drawable.helpb));
+ navDrawerItems.add(new NavDrawerItem(R.string.menu_about, R.drawable.infob));
+ navDrawerItems.add(new NavDrawerItem(R.string.menu_eventlog, R.drawable.bugb));
+ }
+
+ @Override
+ public int getCount() {
+ return navDrawerItems.size();
+ }
+
+ @Override
+ public NavDrawerItem getItem(int position) {
+ return navDrawerItems.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return navDrawerItems.get(position).id;
+ }
+
+ public NavDrawerItem getItemForId(int id) {
+ for(NavDrawerItem item: navDrawerItems) {
+ if (item.id == id) return item;
+ }
+ return null;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "NavDrawerListAdapter.getView() for : " + navDrawerItems.get(position).title + navDrawerItems.get(position).isCounterVisible + navDrawerItems.get(position).isSubItem + navDrawerItems.get(position).isProjectItem);
+ if (convertView == null || !((String)convertView.getTag()).equals(navDrawerItems.get(position).title)) {
+ int layoutId = R.layout.navlist_listitem;
+ if(navDrawerItems.get(position).isSubItem()) layoutId = R.layout.navlist_listitem_subitem;
+ LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
+ convertView = mInflater.inflate(layoutId, null);
+ }
+
+ RelativeLayout wrapper = (RelativeLayout) convertView.findViewById(R.id.listitem);
+ ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon);
+ TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
+ TextView txtCount = (TextView) convertView.findViewById(R.id.counter);
+
+ if(navDrawerItems.get(position).isProjectItem) {
+ Bitmap icon = navDrawerItems.get(position).getProjectIcon();
+ if(icon == null) navDrawerItems.get(position).updateProjectIcon();
+ if(icon != null) imgIcon.setImageBitmap(icon);
+ }
+ else imgIcon.setImageResource(navDrawerItems.get(position).getIcon());
+ txtTitle.setText(navDrawerItems.get(position).getTitle());
+
+ // displaying count
+ // check whether it set visible or not
+ if(navDrawerItems.get(position).getCounterVisibility()){
+ Integer counter = 0;
+ switch(navDrawerItems.get(position).id) {
+ case R.string.tab_tasks:
+ try {counter = BOINCActivity.monitor.getTasks().size();}catch(Exception e) {}
+ break;
+ case R.string.tab_notices:
+ try {counter = BOINCActivity.monitor.getRssNotices().size();}catch(Exception e) {}
+ break;
+ }
+ txtCount.setText(counter.toString());
+ }else{
+ // hide the counter view
+ txtCount.setVisibility(View.GONE);
+ }
+
+ // highligt entry of currently activated item
+ if(navDrawerItems.get(position).id == selectedMenuId) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "NavDrawerListAdapter.getView() highlighted! ID : " + selectedMenuId);
+ wrapper.setBackgroundResource(R.drawable.navlist_selector_pressed);
+ } else wrapper.setBackgroundResource(R.drawable.navlist_selector);
+
+ convertView.setTag(navDrawerItems.get(position).title);
+ return convertView;
+ }
+
+ public Bitmap getProjectIconForMasterUrl(String masterUrl) {
+ Bitmap bm = null;
+ try {
+ bm = BOINCActivity.monitor.getProjectIcon(masterUrl);
+ } catch (Exception e) {}
+ return bm;
+ }
+
+ /**
+ * Compares list of projects to items represented in nav bar.
+ * @param projects
+ * @return Returns number of project items in nav bar after adding
+ */
+ public Integer compareAndAddProjects(ArrayList<Project> projects){
+ // delete all old projects from nav items
+ Iterator<NavDrawerItem> it = navDrawerItems.iterator();
+ while(it.hasNext()) {
+ NavDrawerItem item = it.next();
+ if(item.isProjectItem) it.remove();
+ }
+
+ Integer numberAdded = 0;
+
+ for(Project project: projects) {
+ NavDrawerItem newProjectItem = new NavDrawerItem(project.project_name, getProjectIconForMasterUrl(project.master_url), project.master_url);
+ navDrawerItems.add(3, newProjectItem);
+ numberAdded++;
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "NavDrawerListAdapter.compareAndAddProjects() added: " + numberAdded);
+ this.notifyDataSetChanged();
+ return numberAdded;
+ }
+
+ public class NavDrawerItem {
+
+ private int id = 0;
+ private String title;
+ private int icon;
+ private boolean isCounterVisible = false;
+ private boolean isSubItem = false;
+ private boolean isProjectItem = false;
+ private Bitmap projectIcon;
+ private String projectMasterUrl;
+
+ public NavDrawerItem(){}
+
+ /**
+ * Creates default item
+ */
+ public NavDrawerItem(int id, int icon){
+ this.id = id;
+ this.title = context.getString(id);
+ this.icon = icon;
+ }
+
+ /**
+ * Creates sub item under previous element
+ */
+ public NavDrawerItem(int id, int icon, boolean isCounterVisible, boolean isSubItem) {
+ this.id = id;
+ this.title = context.getString(id);
+ this.icon = icon;
+ this.isSubItem = isSubItem;
+ this.isCounterVisible = isCounterVisible;
+ }
+
+ /**
+ * Creates item for project, which is sub item of Projects by default
+ */
+ public NavDrawerItem(String name, Bitmap icon, String masterUrl) {
+ this.id = masterUrl.hashCode();
+ this.title = name;
+ this.projectIcon = icon;
+ this.projectMasterUrl = masterUrl;
+ this.isProjectItem = true;
+ this.isSubItem = true;
+ if(Logging.DEBUG) Log.d(Logging.TAG, "NavDrawerItem: created hash code " + id + " for project " + name);
+ }
+
+ /**
+ * Creates item with number counter on right
+ */
+ public NavDrawerItem(int id, int icon, boolean isCounterVisible){
+ this.id = id;
+ this.title = context.getString(id);
+ this.icon = icon;
+ this.isCounterVisible = isCounterVisible;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getTitle(){
+ return this.title;
+ }
+
+ public int getIcon(){
+ return this.icon;
+ }
+
+ public String getProjectMasterUrl(){
+ return this.projectMasterUrl;
+ }
+
+ public boolean getCounterVisibility(){
+ return this.isCounterVisible;
+ }
+
+ public boolean isSubItem() {
+ return this.isSubItem;
+ }
+
+ public boolean isProjectItem() {
+ return this.isProjectItem;
+ }
+
+ public Bitmap getProjectIcon() {
+ return this.projectIcon;
+ }
+
+ public void updateProjectIcon() {
+ this.projectIcon = getProjectIconForMasterUrl(projectMasterUrl);
+ }
+
+ public void setTitle(String title){
+ this.title = title;
+ }
+
+ public void setIcon(int icon){
+ this.icon = icon;
+ }
+
+ public void setCounterVisibility(boolean isCounterVisible){
+ this.isCounterVisible = isCounterVisible;
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/NoticesListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/NoticesListAdapter.java
index 5af8b78..8b4284d 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/NoticesListAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/NoticesListAdapter.java
@@ -21,17 +21,19 @@ package edu.berkeley.boinc.adapter;
import edu.berkeley.boinc.utils.*;
import java.util.ArrayList;
import org.apache.http.impl.cookie.DateUtils;
+import edu.berkeley.boinc.BOINCActivity;
import edu.berkeley.boinc.R;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
import edu.berkeley.boinc.rpc.Notice;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Bitmap;
+import android.net.Uri;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
@@ -50,7 +52,7 @@ public class NoticesListAdapter extends ArrayAdapter<Notice>{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- Notice listItem = entries.get(position);
+ final Notice listItem = entries.get(position);
LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.notices_layout_listitem, null);
@@ -76,22 +78,33 @@ public class NoticesListAdapter extends ArrayAdapter<Notice>{
TextView tvNoticeTime = (TextView) v.findViewById(R.id.noticeTime);
tvNoticeTime.setText(DateUtils.formatDate(new java.util.Date((long)listItem.create_time*1000)));
- // set tag for onClic
- if(!listItem.link.isEmpty()) v.setTag(listItem.link);
+ v.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"noticeClick: " + listItem.link);
+
+ if(listItem.link != null && !listItem.link.isEmpty()){
+ Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(listItem.link));
+ activity.startActivity(i);
+ }
+
+ }
+ });
return v;
}
private Bitmap getIcon(int position) {
// try to get current client status from monitor
- ClientStatus status;
+ //ClientStatus status;
try{
- status = Monitor.getClientStatus();
+ //status = Monitor.getClientStatus();
+ return BOINCActivity.monitor.getProjectIconByName(entries.get(position).project_name);
} catch (Exception e){
if(Logging.WARNING) Log.w(Logging.TAG,"TasksListAdapter: Could not load data, clientStatus not initialized.");
return null;
}
- return status.getProjectIconByName(entries.get(position).project_name);
+ //return status.getProjectIconByName(entries.get(position).project_name);
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListAdapter.java
index f9bae9c..ede6c39 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListAdapter.java
@@ -19,9 +19,9 @@
package edu.berkeley.boinc.adapter;
import java.util.ArrayList;
-
+import edu.berkeley.boinc.PrefsFragment;
+import edu.berkeley.boinc.PrefsFragment.BoolOnClick;
import edu.berkeley.boinc.R;
-
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
@@ -29,6 +29,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
import android.widget.TextView;
public class PrefsListAdapter extends ArrayAdapter<PrefsListItemWrapper>{
@@ -36,11 +38,13 @@ public class PrefsListAdapter extends ArrayAdapter<PrefsListItemWrapper>{
//private final String TAG = "PrefsListAdapter";
private ArrayList<PrefsListItemWrapper> entries;
private Activity activity;
-
- public PrefsListAdapter(Activity a, int textViewResourceId, ArrayList<PrefsListItemWrapper> entries) {
+ private PrefsFragment frag;
+
+ public PrefsListAdapter(Activity a, PrefsFragment frag, int textViewResourceId, ArrayList<PrefsListItemWrapper> entries) {
super(a, textViewResourceId, entries);
this.entries = entries;
this.activity = a;
+ this.frag = frag;
}
@Override
@@ -58,40 +62,51 @@ public class PrefsListAdapter extends ArrayAdapter<PrefsListItemWrapper>{
} else { // item is element
if(listItem instanceof PrefsListItemWrapperBool) {
v = vi.inflate(R.layout.prefs_layout_listitem_bool, null);
- CheckBox header = (CheckBox) v.findViewById(R.id.checkbox);
+ CheckBox cb = (CheckBox) v.findViewById(R.id.checkbox);
+ cb.setChecked(((PrefsListItemWrapperBool) listItem).getStatus());
+ BoolOnClick listener = frag.new BoolOnClick(listItem.ID, cb);
+ RelativeLayout wrapper = (RelativeLayout) v.findViewById(R.id.checkbox_wrapper);
+ wrapper.setClickable(true);
+ wrapper.setOnClickListener(listener);
+ TextView header = (TextView) v.findViewById(R.id.checkbox_text);
header.setText(((PrefsListItemWrapperBool) listItem).header);
- header.setTag(listItem.ID); //set ID as tag to checkbox, since checkbox is clicked
- header.setChecked(((PrefsListItemWrapperBool) listItem).getStatus());
} else if(listItem instanceof PrefsListItemWrapperValue) {
PrefsListItemWrapperValue item = (PrefsListItemWrapperValue) listItem;
v = vi.inflate(R.layout.prefs_layout_listitem, null);
- v.setTag(listItem); //set listItem as tag to view, since root layout defines onClick method
+ RelativeLayout wrapper = (RelativeLayout) v.findViewById(R.id.wrapper);
+ wrapper.setOnClickListener(frag.new ValueOnClick(listItem));
TextView header = (TextView) v.findViewById(R.id.header);
header.setText(item.header);
TextView description = (TextView) v.findViewById(R.id.description);
description.setText(item.description);
- String value = item.status.toString();
- if(item.isPct || item.isNumber) {
- value = "" + item.status.intValue();
- }
- TextView status = (TextView) v.findViewById(R.id.status);
- status.setText(value + " " + item.unit);
+ // set status value or hide if 0
+ LinearLayout statusWrapper = (LinearLayout) v.findViewById(R.id.status_wrapper);
+ if(item.status > 0) {
+ statusWrapper.setVisibility(View.VISIBLE);
+ String value = item.status.toString();
+ if(item.isPct || item.isNumber) {
+ value = "" + item.status.intValue();
+ }
+ TextView status = (TextView) v.findViewById(R.id.status);
+ status.setText(value + " " + item.unit);
+ } else statusWrapper.setVisibility(View.GONE);
} else {
v = vi.inflate(R.layout.prefs_layout_listitem, null);
- v.setTag(listItem); //set listItem as tag to view, since root layout defines onClick method
+ RelativeLayout wrapper = (RelativeLayout) v.findViewById(R.id.wrapper);
+ wrapper.setOnClickListener(frag.new ValueOnClick(listItem));
TextView header = (TextView) v.findViewById(R.id.header);
header.setText(listItem.header);
if(listItem.ID == R.string.prefs_client_log_flags_header) {
TextView description = (TextView) v.findViewById(R.id.description);
description.setVisibility(View.GONE);
- TextView status = (TextView) v.findViewById(R.id.status);
- status.setVisibility(View.INVISIBLE);
+ LinearLayout statusWrapper = (LinearLayout) v.findViewById(R.id.status_wrapper);
+ statusWrapper.setVisibility(View.GONE);
} else if(listItem.ID == R.string.prefs_power_source_header) {
TextView description = (TextView) v.findViewById(R.id.description);
description.setText(listItem.description);
- TextView status = (TextView) v.findViewById(R.id.status);
- status.setVisibility(View.INVISIBLE);
+ LinearLayout statusWrapper = (LinearLayout) v.findViewById(R.id.status_wrapper);
+ statusWrapper.setVisibility(View.GONE);
}
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListItemWrapperValue.java b/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListItemWrapperValue.java
index 0e7a0ed..67c1910 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListItemWrapperValue.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsListItemWrapperValue.java
@@ -55,6 +55,10 @@ public class PrefsListItemWrapperValue extends PrefsListItemWrapper {
description = ctx.getString(R.string.prefs_disk_min_free_gb_description);
unit = ctx.getString(R.string.prefs_unit_gb);
break;
+ case R.string.prefs_disk_access_interval_header:
+ description = ctx.getString(R.string.prefs_disk_access_interval_description);
+ unit = ctx.getString(R.string.prefs_unit_seconds);
+ break;
case R.string.prefs_network_daily_xfer_limit_mb_header:
description = ctx.getString(R.string.prefs_network_daily_xfer_limit_mb_description);
unit = ctx.getString(R.string.prefs_unit_mb);
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsSelectionDialogListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsSelectionDialogListAdapter.java
index 29466f7..38d0f75 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsSelectionDialogListAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/PrefsSelectionDialogListAdapter.java
@@ -29,7 +29,9 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
-import edu.berkeley.boinc.PrefsActivity.SelectionDialogOption;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import edu.berkeley.boinc.PrefsFragment.SelectionDialogOption;
import edu.berkeley.boinc.R;
import edu.berkeley.boinc.utils.Logging;
@@ -70,15 +72,20 @@ public class PrefsSelectionDialogListAdapter extends ArrayAdapter<SelectionDialo
if(v == null) {
LayoutInflater li = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- v = li.inflate(R.layout.dialog_list_cbitem, null);
+ v = li.inflate(R.layout.prefs_layout_listitem_bool, null);
CheckBox cb = (CheckBox) v.findViewById(R.id.checkbox);
cb.setChecked(listItem.selected);
- cb.setOnClickListener(this);
- cb.setTag(position);
- cb.setText(listItem.name);
+ cb.setClickable(false);
+ TextView text = (TextView) v.findViewById(R.id.checkbox_text);
+ text.setText(listItem.name);
+ RelativeLayout wrapper = (RelativeLayout) v.findViewById(R.id.checkbox_wrapper);
+ wrapper.setClickable(true);
+ wrapper.setOnClickListener(this);
+ wrapper.setTag(position);
if(getItem(position).highlighted) {
- v.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.shape_light_red_background));
- cb.setBackgroundColor(activity.getResources().getColor(R.color.light_red));
+ v.setBackgroundResource(R.drawable.shape_light_red_background_wo_stroke);
+ //v.setBackgroundDrawable(activity.getResources().getDrawable());
+ //cb.setBackgroundColor(activity.getResources().getColor(R.color.light_red));
}
}
return v;
@@ -86,11 +93,12 @@ public class PrefsSelectionDialogListAdapter extends ArrayAdapter<SelectionDialo
@Override
public void onClick(View v) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"PrefsSelectionDialogListAdapter onClick");
- CheckBox cb = (CheckBox) v;
- Integer position = (Integer) cb.getTag();
- Boolean checked = cb.isChecked();
- entries.get(position).selected = checked;
-
+ Log.d(Logging.TAG,"PrefsSelectionDialogListAdapter onClick");
+ RelativeLayout wrapper = (RelativeLayout) v;
+ Integer position = (Integer) v.getTag();
+ CheckBox cb = (CheckBox) wrapper.findViewById(R.id.checkbox);
+ Boolean previousState = cb.isChecked();
+ cb.setChecked(!previousState);
+ entries.get(position).selected = cb.isChecked();
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectControlsListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectControlsListAdapter.java
index 86b1444..1ca4fe8 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectControlsListAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectControlsListAdapter.java
@@ -27,7 +27,7 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
-import edu.berkeley.boinc.ProjectsActivity.ProjectControl;
+import edu.berkeley.boinc.ProjectsFragment.ProjectControl;
import edu.berkeley.boinc.R;
import edu.berkeley.boinc.rpc.RpcClient;
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectsListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectsListAdapter.java
index 798f758..b5c99fb 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectsListAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/ProjectsListAdapter.java
@@ -33,14 +33,11 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
-import edu.berkeley.boinc.ProjectsActivity.ProjectsListData;
+import edu.berkeley.boinc.ProjectsFragment.ProjectsListData;
+import edu.berkeley.boinc.BOINCActivity;
import edu.berkeley.boinc.R;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
import edu.berkeley.boinc.rpc.Notice;
-import edu.berkeley.boinc.rpc.Project;
import edu.berkeley.boinc.rpc.Transfer;
-import edu.berkeley.boinc.utils.BOINCUtils;
import edu.berkeley.boinc.utils.Logging;
public class ProjectsListAdapter extends ArrayAdapter<ProjectsListData> {
@@ -94,64 +91,15 @@ public class ProjectsListAdapter extends ArrayAdapter<ProjectsListData> {
public Bitmap getIcon(int position) {
// try to get current client status from monitor
- ClientStatus status;
+ //ClientStatus status;
try{
- status = Monitor.getClientStatus();
+ //status = Monitor.getClientStatus();
+ return BOINCActivity.monitor.getProjectIcon(entries.get(position).id);
} catch (Exception e){
if(Logging.WARNING) Log.w(Logging.TAG,"ProjectsListAdapter: Could not load data, clientStatus not initialized.");
return null;
}
- return status.getProjectIcon(entries.get(position).id);
- }
-
- public String getStatus(int position) {
- Project project = getItem(position).project;
- StringBuffer sb = new StringBuffer();
-
- if (project.suspended_via_gui) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_suspendedviagui));
- }
- if (project.dont_request_more_work) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_dontrequestmorework));
- }
- if (project.ended) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_ended));
- }
- if (project.detach_when_done) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_detachwhendone));
- }
- if (project.sched_rpc_pending > 0) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_schedrpcpending));
- appendToStatus(sb, BOINCUtils.translateRPCReason(activity, project.sched_rpc_pending));
- }
- if (project.scheduler_rpc_in_progress) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_schedrpcinprogress));
- }
- if (project.trickle_up_pending) {
- appendToStatus(sb, activity.getResources().getString(R.string.projects_status_trickleuppending));
- }
-
- Calendar minRPCTime = Calendar.getInstance();
- Calendar now = Calendar.getInstance();
- minRPCTime.setTimeInMillis((long)project.min_rpc_time*1000);
- if (minRPCTime.compareTo(now) > 0) {
- appendToStatus(
- sb,
- activity.getResources().getString(R.string.projects_status_backoff) + " " +
- DateUtils.formatElapsedTime((minRPCTime.getTimeInMillis() - now.getTimeInMillis()) / 1000)
- );
- }
-
- return sb.toString();
- }
-
- private void appendToStatus(StringBuffer existing, String additional) {
- if (existing.length() == 0) {
- existing.append(additional);
- } else {
- existing.append(", ");
- existing.append(additional);
- }
+ //return status.getProjectIcon(entries.get(position).id);
}
@Override
@@ -206,7 +154,8 @@ public class ProjectsListAdapter extends ArrayAdapter<ProjectsListData> {
tvUser.setText(userText);
}
- String statusText = getStatus(position);
+ String statusText = "";
+ try{statusText = BOINCActivity.monitor.getProjectStatus(data.project.master_url);}catch(Exception e){}
TextView tvStatus = (TextView)vi.findViewById(R.id.project_status);
if(statusText.isEmpty()) tvStatus.setVisibility(View.GONE);
else {
diff --git a/android/BOINC/src/edu/berkeley/boinc/adapter/TasksListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/adapter/TasksListAdapter.java
index 693af60..854a1eb 100644
--- a/android/BOINC/src/edu/berkeley/boinc/adapter/TasksListAdapter.java
+++ b/android/BOINC/src/edu/berkeley/boinc/adapter/TasksListAdapter.java
@@ -19,17 +19,13 @@
package edu.berkeley.boinc.adapter;
import edu.berkeley.boinc.utils.*;
-
import java.sql.Date;
import java.util.ArrayList;
-
+import edu.berkeley.boinc.BOINCActivity;
import edu.berkeley.boinc.R;
-import edu.berkeley.boinc.TasksActivity.TaskData;
-import edu.berkeley.boinc.client.ClientStatus;
-import edu.berkeley.boinc.client.Monitor;
+import edu.berkeley.boinc.TasksFragment.TaskData;
import edu.berkeley.boinc.rpc.RpcClient;
import edu.berkeley.boinc.utils.BOINCDefs;
-
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
@@ -212,14 +208,15 @@ public class TasksListAdapter extends ArrayAdapter<TaskData>{
private Bitmap getIcon(int position) {
// try to get current client status from monitor
- ClientStatus status;
+ //ClientStatus status;
try{
- status = Monitor.getClientStatus();
+ //status = Monitor.getClientStatus();
+ return BOINCActivity.monitor.getProjectIcon(entries.get(position).result.project_url);
} catch (Exception e){
if(Logging.WARNING) Log.w(Logging.TAG,"TasksListAdapter: Could not load data, clientStatus not initialized.");
return null;
}
- return status.getProjectIcon(entries.get(position).result.project_url);
+ //return status.getProjectIcon(entries.get(position).result.project_url);
}
private String determineStatusText(TaskData tmp) {
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/AcctMgrFragment.java b/android/BOINC/src/edu/berkeley/boinc/attach/AcctMgrFragment.java
new file mode 100644
index 0000000..3526383
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/AcctMgrFragment.java
@@ -0,0 +1,266 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import android.app.Dialog;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v4.app.DialogFragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class AcctMgrFragment extends DialogFragment{
+
+ private ProjectAttachService attachService = null;
+ private boolean asIsBound = false;
+
+ private Spinner urlSpinner;
+ private EditText nameInput;
+ private EditText pwdInput;
+ private TextView warning;
+ private LinearLayout ongoingWrapper;
+ private Button continueB;
+
+ private AttachProjectAsyncTask asyncTask;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AcctMgrFragment onCreateView");
+ doBindService();
+ View v = inflater.inflate(R.layout.attach_project_acctmgr_dialog, container, false);
+
+ urlSpinner = (Spinner) v.findViewById(R.id.url_spinner);
+ ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),R.array.acct_mgr_url_list, android.R.layout.simple_spinner_item);
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ urlSpinner.setAdapter(adapter);
+
+ nameInput = (EditText) v.findViewById(R.id.name_input);
+ pwdInput = (EditText) v.findViewById(R.id.pwd_input);
+ warning = (TextView) v.findViewById(R.id.warning);
+ ongoingWrapper = (LinearLayout) v.findViewById(R.id.ongoing_wrapper);
+ continueB = (Button) v.findViewById(R.id.continue_button);
+ continueB.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AcctMgrFragment continue clicked");
+ if(!checkDeviceOnline()) return;
+ if(asIsBound) {
+
+ // get user input
+ String url = urlSpinner.getSelectedItem().toString();
+ String name = nameInput.getText().toString();
+ String pwd = pwdInput.getText().toString();
+
+ // verify input
+ int res;
+ if((res = verifyInput(url, name, pwd)) != 0){
+ warning.setText(res);
+ warning.setVisibility(View.VISIBLE);
+ return;
+ }
+
+ // adapt layout
+ continueB.setVisibility(View.GONE);
+ warning.setVisibility(View.GONE);
+ ongoingWrapper.setVisibility(View.VISIBLE);
+
+ String[] params = new String[3];
+ params[0] = url;
+ params[1] = name;
+ params[2] = pwd;
+ asyncTask = new AttachProjectAsyncTask();
+ asyncTask.execute(params);
+
+ } else if(Logging.DEBUG) Log.d(Logging.TAG, "AcctMgrFragment service not bound, do nothing...");
+ }
+ });
+
+ return v;
+ }
+
+ @Override
+ public void onDestroyView() {
+ doUnbindService();
+ if(asyncTask != null) asyncTask.cancel(true);
+ super.onDestroyView();
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+
+ // request a window without the title
+ dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ return dialog;
+ }
+
+ private int verifyInput(String url, String name, String pwd) {
+ int stringResource = 0;
+
+ // check input
+ if(url.length() == 0) {
+ stringResource = R.string.attachproject_error_no_url;
+ }
+ else if(name.length() == 0) {
+ stringResource = R.string.attachproject_error_no_name;
+ }
+ else if(pwd.length() == 0) {
+ stringResource = R.string.attachproject_error_no_pwd;
+ }
+
+ return stringResource;
+ }
+
+ // check whether device is online before starting connection attempt
+ // as needed for AttachProjectLoginActivity (retrieval of ProjectConfig)
+ // note: available internet does not imply connection to project server
+ // is possible!
+ private Boolean checkDeviceOnline() {
+ ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
+ Boolean online = activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
+ if(!online) {
+ Toast toast = Toast.makeText(getActivity(), R.string.attachproject_list_no_internet, Toast.LENGTH_SHORT);
+ toast.show();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectListActivity not online, stop!");
+ }
+ return online;
+ }
+
+ private ServiceConnection mASConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ attachService = ((ProjectAttachService.LocalBinder)service).getService();
+ asIsBound = true;
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ attachService = null;
+ asIsBound = false;
+ }
+ };
+
+ private void doBindService() {
+ // bind to attach service
+ getActivity().bindService(new Intent(getActivity(), ProjectAttachService.class), mASConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (asIsBound) {
+ // Detach existing connection.
+ getActivity().unbindService(mASConnection);
+ asIsBound = false;
+ }
+ }
+
+ private String mapErrorNumToString(int code) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"mapErrorNumToString for error: " + code);
+ int stringResource;
+ switch (code) {
+ case BOINCErrors.ERR_DB_NOT_FOUND:
+ stringResource = R.string.attachproject_error_wrong_name;
+ break;
+ case BOINCErrors.ERR_GETHOSTBYNAME:
+ stringResource = R.string.attachproject_error_no_internet;
+ break;
+ case BOINCErrors.ERR_NONUNIQUE_EMAIL: // treat the same as -137, ERR_DB_NOT_UNIQUE
+ // no break!!
+ case BOINCErrors.ERR_DB_NOT_UNIQUE:
+ stringResource = R.string.attachproject_error_email_in_use;
+ break;
+ case BOINCErrors.ERR_PROJECT_DOWN:
+ stringResource = R.string.attachproject_error_project_down;
+ break;
+ case BOINCErrors.ERR_BAD_EMAIL_ADDR:
+ stringResource = R.string.attachproject_error_email_bad_syntax;
+ break;
+ case BOINCErrors.ERR_BAD_PASSWD:
+ stringResource = R.string.attachproject_error_bad_pwd;
+ break;
+ case BOINCErrors.ERR_BAD_USER_NAME:
+ stringResource = R.string.attachproject_error_bad_username;
+ break;
+ case BOINCErrors.ERR_ACCT_CREATION_DISABLED:
+ stringResource = R.string.attachproject_error_creation_disabled;
+ break;
+ case BOINCErrors.ERR_INVALID_URL:
+ stringResource = R.string.attachproject_error_invalid_url;
+ break;
+ default:
+ stringResource = R.string.attachproject_error_unknown;
+ break;
+ }
+ return getString(stringResource);
+ }
+
+ private class AttachProjectAsyncTask extends AsyncTask<String, Void, Integer> {
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ }
+
+ @Override
+ protected Integer doInBackground(String... arg0) {
+
+ String url = arg0[0];
+ String name = arg0[1];
+ String pwd = arg0[2];
+
+ return attachService.attachAcctMgr(url,name,pwd);
+ }
+
+ @Override
+ protected void onPostExecute(Integer result) {
+ super.onPostExecute(result);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AcctMgrFragment.AttachProjectAsyncTask onPostExecute, returned: " + result);
+ if(result == BOINCErrors.ERR_OK) dismiss();
+ else {
+ ongoingWrapper.setVisibility(View.GONE);
+ continueB.setVisibility(View.VISIBLE);
+ warning.setVisibility(View.VISIBLE);
+ warning.setText(mapErrorNumToString(result));
+ }
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/BatchConflictListActivity.java b/android/BOINC/src/edu/berkeley/boinc/attach/BatchConflictListActivity.java
new file mode 100644
index 0000000..80a7f5c
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/BatchConflictListActivity.java
@@ -0,0 +1,226 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import java.util.ArrayList;
+import edu.berkeley.boinc.BOINCActivity;
+import edu.berkeley.boinc.attach.IndividualCredentialInputFragment.IndividualCredentialInputFragmentListener;
+import edu.berkeley.boinc.attach.ProjectAttachService.ProjectAttachWrapper;
+import android.app.Service;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v4.app.FragmentActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.TextView;
+
+public class BatchConflictListActivity extends FragmentActivity implements IndividualCredentialInputFragmentListener{
+
+ private ListView lv;
+ private BatchConflictListAdapter listAdapter;
+ private ArrayList<ProjectAttachWrapper> results = new ArrayList<ProjectAttachWrapper>();
+
+ private ProjectAttachService attachService = null;
+ private boolean asIsBound = false;
+
+ private String manualUrl;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchConflictListActivity onCreate");
+ doBindService();
+ // setup layout
+ setContentView(R.layout.attach_project_batch_conflicts_layout);
+ lv = (ListView) findViewById(R.id.listview);
+ // adapt text
+ Intent intent = getIntent();
+ Boolean conflicts = intent.getBooleanExtra("conflicts", false);
+ manualUrl = intent.getStringExtra("manualUrl");
+ TextView title = (TextView) findViewById(R.id.desc);
+ if(conflicts) title.setText(R.string.attachproject_conflicts_desc);
+ else title.setText(R.string.attachproject_credential_input_desc);
+ }
+
+ @Override
+ protected void onDestroy() {
+ if(Logging.VERBOSE) Log.v(Logging.TAG, "BatchConflictListActivity onDestroy");
+ doUnbindService();
+ super.onDestroy();
+ }
+
+ @Override
+ public void onResume() {
+ registerReceiver(mClientStatusChangeRec,ifcsc);
+ super.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ unregisterReceiver(mClientStatusChangeRec);
+ super.onPause();
+ }
+
+ // not related to client status change, just used to implement cyclic checking of
+ // results.
+ private BroadcastReceiver mClientStatusChangeRec = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context,Intent intent) {
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "BatchConflictListActivity ClientStatusChange - onReceive()");
+ if(asIsBound) listAdapter.notifyDataSetChanged();
+ }
+ };
+ private IntentFilter ifcsc = new IntentFilter("edu.berkeley.boinc.clientstatuschange");
+
+
+ // triggered by finish button
+ public void finishClicked(View v) {
+ // finally, start BOINCActivity
+ Intent intent = new Intent(this, BOINCActivity.class);
+ // add flags to return to main activity and clearing all others and clear the back stack
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra("targetFragment", R.string.tab_projects); // make activity display projects fragment
+ startActivity(intent);
+ }
+
+ private ServiceConnection mASConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ attachService = ((ProjectAttachService.LocalBinder)service).getService();
+ asIsBound = true;
+
+ // set data, if manual url
+ if(manualUrl != null && !manualUrl.isEmpty()) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchConflictListActivity manual URL found: " + manualUrl);
+ attachService.setManuallySelectedProject(manualUrl);
+ manualUrl = "";
+ }
+
+ // retrieve data
+ results = attachService.getSelectedProjects();
+ listAdapter = new BatchConflictListAdapter(BatchConflictListActivity.this,R.id.listview,results,getSupportFragmentManager());
+ lv.setAdapter(listAdapter);
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchConflictListActivity setup list with " + results.size() + " elements.");
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ attachService = null;
+ asIsBound = false;
+ }
+ };
+
+ private void doBindService() {
+ // bind to attach service
+ bindService(new Intent(this, ProjectAttachService.class), mASConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (asIsBound) {
+ // Detach existing connection.
+ unbindService(mASConnection);
+ asIsBound = false;
+ }
+ }
+
+ @Override
+ public void onFinish(ProjectAttachWrapper project, Boolean login, String email, String name, String pwd) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchConflictListActivity onFinish of dialog");
+
+ if(asIsBound && !attachService.verifyInput(email, name, pwd)) return;
+
+ new AttachProjectAsyncTask(project, login, email, name, pwd).execute();
+ }
+
+ @Override
+ public ArrayList<String> getDefaultInput() {
+ ArrayList<String> values = new ArrayList<String>();
+ if(asIsBound) {
+ values = attachService.getUserDefaultValues();
+ }
+ return values;
+ }
+
+ private class AttachProjectAsyncTask extends AsyncTask<Void, String, Void> {
+
+ ProjectAttachWrapper project;
+ Boolean login;
+ String email;
+ String name;
+ String pwd;
+
+ public AttachProjectAsyncTask(ProjectAttachWrapper project, Boolean login, String email, String name, String pwd) {
+ this.project = project;
+ this.login = login;
+ this.email = email;
+ this.name = name;
+ this.pwd = pwd;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: " + project.config.name);
+ if(asIsBound){
+ project.result = ProjectAttachWrapper.RESULT_ONGOING;
+ // adapt layout to changed state
+ listAdapter.notifyDataSetChanged();
+ } else {
+ if(Logging.ERROR) Log.e(Logging.TAG, "AttachProjectAsyncTask: service not bound, cancel.");
+ cancel(false);
+ }
+
+ super.onPreExecute();
+ }
+
+ @Override
+ protected Void doInBackground(Void... arg0) {
+ // set input credentials
+ attachService.setCredentials(email, name, pwd);
+
+ // try attach
+ project.lookupAndAttach(login);
+
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask.onPostExecute: finished, result: " + project.result);
+
+ // adapt layout to changed state
+ listAdapter.notifyDataSetChanged();
+ super.onPostExecute(result);
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/BatchConflictListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/attach/BatchConflictListAdapter.java
new file mode 100644
index 0000000..e2c9e28
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/BatchConflictListAdapter.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.attach;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.attach.ProjectAttachService.ProjectAttachWrapper;
+import edu.berkeley.boinc.utils.Logging;
+import android.app.Activity;
+import android.content.Context;
+import android.support.v4.app.FragmentManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+public class BatchConflictListAdapter extends ArrayAdapter<ProjectAttachWrapper>{
+
+ private ArrayList<ProjectAttachWrapper> entries;
+ private Activity activity;
+ private FragmentManager fmgr;
+
+ public BatchConflictListAdapter(Activity a, int textViewResourceId, ArrayList<ProjectAttachWrapper> entries, FragmentManager fm) {
+ super(a, textViewResourceId, entries);
+ this.entries = entries;
+ this.activity = a;
+ this.fmgr = fm;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+
+ final ProjectAttachWrapper listItem = entries.get(position);
+
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "BatchConflictListAdapter.getView for: " + listItem.name + " at position: " + position + " with result: " + listItem.result);
+
+ LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View v = vi.inflate(R.layout.attach_project_batch_conflicts_listitem, null);
+ TextView name = (TextView) v.findViewById(R.id.name);
+ name.setText(listItem.name);
+ TextView status = (TextView) v.findViewById(R.id.status);
+ ImageView resolveIv = (ImageView) v.findViewById(R.id.resolve_button_image);
+ ImageView statusImage = (ImageView) v.findViewById(R.id.status_image);
+ ProgressBar statusPb = (ProgressBar) v.findViewById(R.id.status_pb);
+ RelativeLayout itemWrapper = (RelativeLayout) v.findViewById(R.id.resolve_item_wrapper);
+ if(listItem.result == ProjectAttachWrapper.RESULT_SUCCESS) {
+ // success
+ status.setVisibility(View.GONE);
+ resolveIv.setVisibility(View.GONE);
+ statusPb.setVisibility(View.GONE);
+ statusImage.setVisibility(View.VISIBLE);
+ statusImage.setImageDrawable(activity.getResources().getDrawable(R.drawable.checkb));
+ } else if(listItem.result == ProjectAttachWrapper.RESULT_ONGOING || listItem.result == ProjectAttachWrapper.RESULT_UNINITIALIZED){
+ // ongoing
+ status.setVisibility(View.GONE);
+ resolveIv.setVisibility(View.GONE);
+ statusImage.setVisibility(View.GONE);
+ statusPb.setVisibility(View.VISIBLE);
+ } else if(listItem.result == ProjectAttachWrapper.RESULT_READY) {
+ // ready
+ status.setVisibility(View.VISIBLE);
+ status.setText(listItem.getResultDescription());
+ resolveIv.setVisibility(View.VISIBLE);
+ itemWrapper.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchConflictListAdapter: start resolution dialog for: " + listItem.name);
+ IndividualCredentialInputFragment dialog = IndividualCredentialInputFragment.newInstance(listItem);
+ dialog.show(fmgr, listItem.name);
+ }
+ });
+ } else if(listItem.result == ProjectAttachWrapper.RESULT_CONFIG_DOWNLOAD_FAILED) {
+ // download failed, can not continue from here.
+ // if user wants to retry, need to go back to selection activity
+ status.setVisibility(View.VISIBLE);
+ status.setText(listItem.getResultDescription());
+ resolveIv.setVisibility(View.GONE);
+ statusPb.setVisibility(View.GONE);
+ statusImage.setVisibility(View.VISIBLE);
+ statusImage.setImageDrawable(activity.getResources().getDrawable(R.drawable.failedb));
+ } else {
+ // failed
+ status.setVisibility(View.VISIBLE);
+ status.setText(listItem.getResultDescription());
+ resolveIv.setVisibility(View.VISIBLE);
+ itemWrapper.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchConflictListAdapter: start resolution dialog for: " + listItem.name);
+ IndividualCredentialInputFragment dialog = IndividualCredentialInputFragment.newInstance(listItem);
+ dialog.show(fmgr, listItem.name);
+ }
+ });
+ statusPb.setVisibility(View.GONE);
+ statusImage.setVisibility(View.VISIBLE);
+ statusImage.setImageDrawable(activity.getResources().getDrawable(R.drawable.failedb));
+ }
+ return v;
+ }
+
+ @Override
+ public int getCount() {
+ return entries.size();
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/BatchProcessingActivity.java b/android/BOINC/src/edu/berkeley/boinc/attach/BatchProcessingActivity.java
new file mode 100644
index 0000000..44bce50
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/BatchProcessingActivity.java
@@ -0,0 +1,263 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import edu.berkeley.boinc.BOINCActivity;
+import edu.berkeley.boinc.attach.ProjectAttachService.ProjectAttachWrapper;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class BatchProcessingActivity extends FragmentActivity{
+
+ private ProjectAttachService attachService = null;
+ private boolean asIsBound = false;
+
+ private static final int NUM_HINTS = 3; // number of available hint screens
+ private ViewPager mPager; // pager widget, handles animation and horizontal swiping gestures
+ private PagerAdapter mPagerAdapter; // provides content to pager
+ private ArrayList<HintFragment> hints = new ArrayList<HintFragment>(); // hint fragments
+
+ //header
+ private TextView hintTv;
+ private ImageView hintIvRight;
+ private ImageView hintIvLeft;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchProcessingActivity onCreate");
+
+ // setup layout
+ setContentView(R.layout.attach_project_batch_processing_layout);
+
+ hintTv = (TextView)findViewById(R.id.hint_header_text);
+ hintIvRight = (ImageView)findViewById(R.id.hint_header_image_right);
+ hintIvLeft = (ImageView)findViewById(R.id.hint_header_image_left);
+
+ // create hint fragments
+ hints.add(HintFragment.newInstance(HintFragment.HINT_TYPE_CONTRIBUTION));
+ hints.add(HintFragment.newInstance(HintFragment.HINT_TYPE_PROJECTWEBSITE));
+ hints.add(HintFragment.newInstance(HintFragment.HINT_TYPE_PLATFORMS));
+
+ // Instantiate a ViewPager and a PagerAdapter.
+ mPager = (ViewPager) findViewById(R.id.hint_container);
+ mPagerAdapter = new HintPagerAdapter(getSupportFragmentManager());
+ mPager.setAdapter(mPagerAdapter);
+ mPager.setOnPageChangeListener(new OnPageChangeListener() {
+ @Override
+ public void onPageScrollStateChanged(int arg0) {}
+ @Override
+ public void onPageScrolled(int arg0, float arg1, int arg2) {}
+ @Override
+ public void onPageSelected(int arg0) {
+ adaptHintHeader();
+ }
+ });
+ adaptHintHeader();
+
+ doBindService();
+ }
+
+ @Override
+ protected void onDestroy() {
+ if(Logging.VERBOSE) Log.v(Logging.TAG, "BatchProcessingActivity onDestroy");
+ super.onDestroy();
+ doUnbindService();
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mPager.getCurrentItem() == 0) {
+ // If the user is currently looking at the first step, allow the system to handle the
+ // Back button. This calls finish() on this activity and pops the back stack.
+ super.onBackPressed();
+ } else {
+ // Otherwise, select the previous step.
+ mPager.setCurrentItem(mPager.getCurrentItem() - 1);
+ }
+ }
+
+ // triggered by continue button
+ // button only visible if no conflicts occured.
+ public void continueClicked(View v) {
+ boolean conflicts = attachService.unresolvedConflicts();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchProcessingActivity.continueClicked: conflicts? " + conflicts);
+
+ if(conflicts) {
+ // conflicts occured, bring up resolution screen
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: conflicts exists, open resolution activity...");
+ Intent intent = new Intent(BatchProcessingActivity.this, BatchConflictListActivity.class);
+ intent.putExtra("conflicts", true);
+ startActivity(intent);
+ } else {
+ // everything successful, go back to projects screen and clear history
+ Intent intent = new Intent(this, BOINCActivity.class);
+ // add flags to return to main activity and clearing all others and clear the back stack
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.putExtra("targetFragment", R.string.tab_projects); // make activity display projects fragment
+ startActivity(intent);
+ }
+ }
+
+ // adapts header text and icons when hint selection changes
+ private void adaptHintHeader() {
+ int position = mPager.getCurrentItem();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchProcessingActivity.adaptHintHeader position: " + position);
+ String hintText = getString(R.string.attachproject_hints_header) + " " + (position + 1) + "/" + NUM_HINTS;
+ hintTv.setText(hintText);
+ int leftVisibility = View.VISIBLE;
+ int rightVisibility = View.VISIBLE;
+ if(position == 0) {
+ // first element reached
+ leftVisibility = View.GONE;
+ } else if (position == NUM_HINTS - 1) {
+ // last element reached
+ rightVisibility = View.GONE;
+ }
+ hintIvLeft.setVisibility(leftVisibility);
+ hintIvRight.setVisibility(rightVisibility);
+ }
+
+ // previous image in hint header clicked
+ public void previousHintClicked(View view) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchProcessingActivity.previousHintClicked.");
+ mPager.setCurrentItem(mPager.getCurrentItem() - 1);
+ }
+
+ // previous image in hint header clicked
+ public void nextHintClicked(View view) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "BatchProcessingActivity.nextHintClicked.");
+ mPager.setCurrentItem(mPager.getCurrentItem() + 1);
+ }
+
+ private ServiceConnection mASConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ attachService = ((ProjectAttachService.LocalBinder)service).getService();
+ asIsBound = true;
+
+ // start attaching projects
+ new AttachProjectAsyncTask().execute();
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ attachService = null;
+ asIsBound = false;
+ }
+ };
+
+ private void doBindService() {
+ // bind to attach service
+ bindService(new Intent(this, ProjectAttachService.class), mASConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (asIsBound) {
+ // Detach existing connection.
+ unbindService(mASConnection);
+ asIsBound = false;
+ }
+ }
+
+ private class AttachProjectAsyncTask extends AsyncTask<Void, String, Void> {
+
+ @Override
+ protected void onPreExecute() {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: " + attachService.getNumberSelectedProjects() + " projects to attach....");
+ ((TextView) findViewById(R.id.attach_status_text)).setText(getString(R.string.attachproject_login_loading)); // shown while project configs are loaded
+ super.onPreExecute();
+ }
+
+ @Override
+ protected Void doInBackground(Void... arg0) {
+ // wait until service is ready
+ while(!attachService.projectConfigRetrievalFinished) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: project config retrieval has not finished yet, wait...");
+ try{Thread.sleep(1000);} catch(Exception e){}
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: project config retrieval finished, continue with attach.");
+ // attach projects, one at a time
+ ArrayList<ProjectAttachWrapper> selectedProjects = attachService.getSelectedProjects();
+ for(ProjectAttachWrapper selectedProject: selectedProjects) {
+ if(selectedProject.result != ProjectAttachWrapper.RESULT_READY) continue; // skip already tried projects in batch processing
+ publishProgress(selectedProject.info.name);
+ int conflict = selectedProject.lookupAndAttach(false);
+ if(conflict != ProjectAttachWrapper.RESULT_SUCCESS) if(Logging.ERROR) Log.e(Logging.TAG,"AttachProjectAsyncTask attach returned conflict: " + conflict);
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: finsihed.");
+ return null;
+ }
+
+ @Override
+ protected void onProgressUpdate(String... values) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: trying: " + values[0]);
+ ((TextView) findViewById(R.id.attach_status_text)).setText(getString(R.string.attachproject_working_attaching) + " " + values[0]);
+ super.onProgressUpdate(values);
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ ((LinearLayout) findViewById(R.id.attach_status_ongoing_wrapper)).setVisibility(View.GONE);
+ ((Button) findViewById(R.id.continue_button)).setVisibility(View.VISIBLE);
+ super.onPostExecute(result);
+ }
+ }
+
+ private class HintPagerAdapter extends FragmentStatePagerAdapter {
+
+ public HintPagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return hints.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return NUM_HINTS;
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/CredentialInputActivity.java b/android/BOINC/src/edu/berkeley/boinc/attach/CredentialInputActivity.java
new file mode 100644
index 0000000..af64f15
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/CredentialInputActivity.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import android.app.Activity;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.text.InputType;
+import android.text.method.PasswordTransformationMethod;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.CheckBox;
+import android.widget.EditText;
+
+public class CredentialInputActivity extends Activity{
+
+ private EditText emailET;
+ private EditText nameET;
+ private EditText pwdET;
+
+ private ProjectAttachService attachService = null;
+ private boolean asIsBound = false;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "CredentialInputActivity onCreate");
+ doBindService();
+ setContentView(R.layout.attach_project_credential_input_layout);
+ emailET = (EditText) findViewById(R.id.email_input);
+ nameET = (EditText) findViewById(R.id.name_input);
+ pwdET = (EditText) findViewById(R.id.pwd_input);
+
+ CheckBox showPwdCb = (CheckBox) findViewById(R.id.show_pwd_cb);
+ showPwdCb.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(((CheckBox) v).isChecked()) {
+ pwdET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
+ } else {
+ pwdET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
+ pwdET.setTransformationMethod(PasswordTransformationMethod.getInstance());
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void onDestroy() {
+ doUnbindService();
+ super.onDestroy();
+ }
+
+ // triggered by continue button
+ public void continueClicked(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "CredentialInputActivity.continueClicked.");
+
+
+ // set credentials in service
+ if(asIsBound) {
+ // verfiy input, return if failed.
+ if(!attachService.verifyInput(emailET.getText().toString(), nameET.getText().toString(), pwdET.getText().toString())) return;
+ // set credentials
+ attachService.setCredentials(emailET.getText().toString(), nameET.getText().toString(), pwdET.getText().toString());
+ }
+ else {
+ if(Logging.ERROR) Log.e(Logging.TAG, "CredentialInputActivity.continueClicked: service not bound.");
+ return;
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "CredentialInputActivity.continueClicked: starting BatchProcessingActivity...");
+ startActivity(new Intent(this, BatchProcessingActivity.class));
+ }
+
+ // triggered by individual button
+ public void individualClicked(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "CredentialInputActivity.individualClicked.");
+
+ // set credentials in service, in case user typed before deciding btwn batch and individual attach
+ if(asIsBound) attachService.setCredentials(emailET.getText().toString(), nameET.getText().toString(), pwdET.getText().toString());
+
+ //startActivity(new Intent(this, IndividualAttachActivity.class));
+ Intent intent = new Intent(this, BatchConflictListActivity.class);
+ intent.putExtra("conflicts", false);
+ startActivity(new Intent(this, BatchConflictListActivity.class));
+ }
+
+ private ServiceConnection mASConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ attachService = ((ProjectAttachService.LocalBinder)service).getService();
+ asIsBound = true;
+
+ ArrayList<String> values = attachService.getUserDefaultValues();
+ emailET.setText(values.get(0));
+ nameET.setText(values.get(1));
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ attachService = null;
+ asIsBound = false;
+ }
+ };
+
+ private void doBindService() {
+ // bind to attach service
+ bindService(new Intent(this, ProjectAttachService.class), mASConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (asIsBound) {
+ // Detach existing connection.
+ unbindService(mASConnection);
+ asIsBound = false;
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/HintFragment.java b/android/BOINC/src/edu/berkeley/boinc/attach/HintFragment.java
new file mode 100644
index 0000000..cccb648
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/HintFragment.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class HintFragment extends Fragment{
+
+ private int type;
+ public static final int HINT_TYPE_CONTRIBUTION = 1;
+ public static final int HINT_TYPE_PROJECTWEBSITE = 2;
+ public static final int HINT_TYPE_PLATFORMS = 3;
+
+ static HintFragment newInstance(int hintType) {
+ HintFragment frag = new HintFragment();
+ frag.type = hintType;
+ return frag;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "HintFragment onCreateView for hint type: " + type);
+ View v = null;
+ switch(type) {
+ case HINT_TYPE_CONTRIBUTION:
+ v = inflater.inflate(R.layout.attach_project_hint_contribution_layout, container, false);
+ break;
+ case HINT_TYPE_PROJECTWEBSITE:
+ v = inflater.inflate(R.layout.attach_project_hint_projectwebsite_layout, container, false);
+ break;
+ case HINT_TYPE_PLATFORMS:
+ v = inflater.inflate(R.layout.attach_project_hint_platforms_layout, container, false);
+ break;
+ }
+ return v;
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/IndividualCredentialInputFragment.java b/android/BOINC/src/edu/berkeley/boinc/attach/IndividualCredentialInputFragment.java
new file mode 100644
index 0000000..d8f33cc
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/IndividualCredentialInputFragment.java
@@ -0,0 +1,159 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import java.util.ArrayList;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import edu.berkeley.boinc.attach.ProjectAttachService.ProjectAttachWrapper;
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.text.InputType;
+import android.text.method.PasswordTransformationMethod;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.TextView;
+
+public class IndividualCredentialInputFragment extends DialogFragment{
+
+ private String projectName;
+ private String errorMessage;
+ private String forgotPwdLink;
+ private ProjectAttachWrapper project;
+
+ private EditText emailET;
+ private EditText nameET;
+ private EditText pwdET;
+
+ static IndividualCredentialInputFragment newInstance(ProjectAttachWrapper item) {
+ IndividualCredentialInputFragment frag = new IndividualCredentialInputFragment();
+ frag.projectName = item.config.name;
+ frag.errorMessage = item.getResultDescription();
+ frag.forgotPwdLink = item.config.masterUrl + "/get_passwd.php";
+ frag.project = item;
+ return frag;
+ }
+
+ public interface IndividualCredentialInputFragmentListener {
+ public void onFinish(ProjectAttachWrapper project, Boolean login, String email, String name, String pwd);
+ public ArrayList<String> getDefaultInput();
+ }
+
+ IndividualCredentialInputFragmentListener mListener;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.attach_project_credential_input_dialog, container, false);
+
+ TextView title = (TextView) v.findViewById(R.id.title);
+ title.setText(projectName);
+ TextView message = (TextView) v.findViewById(R.id.message);
+ message.setText(errorMessage);
+
+ ArrayList<String> defaultValues = mListener.getDefaultInput();
+ emailET = (EditText) v.findViewById(R.id.email_input);
+ emailET.setText(defaultValues.get(0));
+ nameET = (EditText) v.findViewById(R.id.name_input);
+ nameET.setText(defaultValues.get(1));
+ pwdET = (EditText) v.findViewById(R.id.pwd_input);
+
+ Button loginButton = (Button) v.findViewById(R.id.login_button);
+ loginButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "IndividualCredentialInputFragment: login clicked");
+ mListener.onFinish(project, true, emailET.getText().toString(), nameET.getText().toString(), pwdET.getText().toString());
+ dismiss();
+ }
+ });
+
+ Button registerButton = (Button) v.findViewById(R.id.register_button);
+ registerButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "IndividualCredentialInputFragment: register clicked, client account creation disabled: " + project.config.clientAccountCreationDisabled);
+ if(project.config.clientAccountCreationDisabled) {
+ // cannot register in client, open website
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(project.config.masterUrl));
+ startActivity(i);
+ } else {
+ mListener.onFinish(project, false, emailET.getText().toString(), nameET.getText().toString(), pwdET.getText().toString());
+ dismiss();
+ }
+ }
+ });
+
+ TextView forgotPwdButton = (TextView) v.findViewById(R.id.forgotpwd_text);
+ forgotPwdButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "IndividualCredentialInputFragment: forgot pwd clicked");
+ Intent i = new Intent(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(forgotPwdLink));
+ startActivity(i);
+ }
+ });
+
+ CheckBox showPwdCb = (CheckBox) v.findViewById(R.id.show_pwd_cb);
+ showPwdCb.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(((CheckBox) v).isChecked()) {
+ pwdET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
+ } else {
+ pwdET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
+ pwdET.setTransformationMethod(PasswordTransformationMethod.getInstance());
+ }
+ }
+ });
+
+ return v;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (IndividualCredentialInputFragmentListener) activity;
+ } catch (ClassCastException e) {} //The activity doesn't implement the interface, throw exception
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+
+ // request a window without the title
+ dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ return dialog;
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/ManualUrlInputFragment.java b/android/BOINC/src/edu/berkeley/boinc/attach/ManualUrlInputFragment.java
new file mode 100644
index 0000000..8340352
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/ManualUrlInputFragment.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+public class ManualUrlInputFragment extends DialogFragment{
+
+ private EditText urlInputET;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.attach_project_manual_url_input_dialog, container, false);
+
+ urlInputET = (EditText) v.findViewById(R.id.url_input);
+
+ Button continueButton = (Button) v.findViewById(R.id.continue_button);
+ continueButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ManualUrlInputFragment: continue clicked");
+
+ if(!checkDeviceOnline()) return;
+
+ //startActivity
+ Intent intent = new Intent(getActivity(), BatchConflictListActivity.class);
+ intent.putExtra("conflicts", false);
+ intent.putExtra("manualUrl", urlInputET.getText().toString());
+ startActivity(intent);
+ dismiss();
+ }
+ });
+
+ return v;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+
+ // request a window without the title
+ dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ return dialog;
+ }
+
+ // check whether device is online before starting connection attempt
+ // as needed for AttachProjectLoginActivity (retrieval of ProjectConfig)
+ // note: available internet does not imply connection to project server
+ // is possible!
+ private Boolean checkDeviceOnline() {
+ ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
+ Boolean online = activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
+ if(!online) {
+ Toast toast = Toast.makeText(getActivity(), R.string.attachproject_list_no_internet, Toast.LENGTH_SHORT);
+ toast.show();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ManualUrlInputFragment not online, stop!");
+ }
+ return online;
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/ProjectAttachService.java b/android/BOINC/src/edu/berkeley/boinc/attach/ProjectAttachService.java
new file mode 100644
index 0000000..1581804
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/ProjectAttachService.java
@@ -0,0 +1,636 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.attach;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.client.IMonitor;
+import edu.berkeley.boinc.client.Monitor;
+import edu.berkeley.boinc.client.PersistentStorage;
+import edu.berkeley.boinc.rpc.AccountIn;
+import edu.berkeley.boinc.rpc.AccountOut;
+import edu.berkeley.boinc.rpc.AcctMgrInfo;
+import edu.berkeley.boinc.rpc.ProjectConfig;
+import edu.berkeley.boinc.rpc.ProjectInfo;
+import edu.berkeley.boinc.utils.BOINCErrors;
+import edu.berkeley.boinc.utils.Logging;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.AsyncTask;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Log;
+import android.widget.Toast;
+
+public class ProjectAttachService extends Service {
+
+// life-cycle
+ private IBinder mBinder = new LocalBinder();
+ public class LocalBinder extends Binder {
+ ProjectAttachService getService() {
+ return ProjectAttachService.this;
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.onBind");
+ return mBinder;
+ }
+
+ @Override
+ public void onCreate() {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.onCreate");
+ doBindService();
+ store = new PersistentStorage(this);
+ }
+
+ @Override
+ public void onDestroy() {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.onDestroy");
+ doUnbindService();
+ }
+// --END-- life-cycle
+
+// monitor service binding
+ private IMonitor monitor = null;
+ private boolean mIsBound = false;
+
+ private ServiceConnection mConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ monitor = IMonitor.Stub.asInterface(service);
+ mIsBound = true;
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ monitor = null;
+ mIsBound = false;
+ }
+ };
+
+ private void doBindService() {
+ // Establish a connection with the service, onServiceConnected gets called when
+ bindService(new Intent(this, Monitor.class), mConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (mIsBound) {
+ // Detach existing connection.
+ unbindService(mConnection);
+ mIsBound = false;
+ }
+ }
+// --END-- monitor service binding
+
+ private PersistentStorage store;
+
+ private ArrayList<ProjectAttachWrapper> selectedProjects = new ArrayList<ProjectAttachWrapper>();
+
+ public boolean projectConfigRetrievalFinished = true; // shows whether project retrieval is ongoing
+
+ //credentials
+ private String email = "";
+ private String user = "";
+ private String pwd = "";
+
+ /**
+ * Set credentials to be used in account RPCs.
+ * Set / update prior to calling attach or register
+ * Saves email and user persistently to pre-populate fields
+ * @param email
+ * @param user
+ * @param pwd
+ */
+ public void setCredentials(String email, String user, String pwd) {
+ this.email = email;
+ this.user = user;
+ this.pwd = pwd;
+
+ store.setLastEmailAddress(email);
+ store.setLastUserName(user);
+ }
+
+ /**
+ * Returns last user input to be able to pre-populate fields.
+ * @return array of values, index 0: email address, index 1: user name
+ */
+ public ArrayList<String> getUserDefaultValues() {
+ ArrayList<String> values = new ArrayList<String>();
+ values.add(store.getLastEmailAddress());
+ values.add(store.getLastUserName());
+ return values;
+ }
+
+ /**
+ * sets selected projects and downloads their configuration files
+ * configuration download in new thread, returns immediately.
+ * Check projectConfigRetrievalFinished to see whether job finished.
+ *
+ * @param selected list of selected projects
+ * @return success
+ */
+ public boolean setSelectedProjects (ArrayList<ProjectInfo> selected) {
+ if(!projectConfigRetrievalFinished) {
+ if(Logging.ERROR) Log.e(Logging.TAG,"ProjectAttachService.setSelectedProjects: stop, async task already running.");
+ return false;
+ }
+
+ selectedProjects.clear();
+ for(ProjectInfo tmp: selected) {
+ selectedProjects.add(new ProjectAttachWrapper(tmp));
+ }
+
+ if(mIsBound) {
+ new GetProjectConfigsAsync().execute();
+ } else {
+ if(Logging.ERROR) Log.e(Logging.TAG,"ProjectAttachService.setSelectedProjects: could not load configuration files, monitor not bound.");
+ return false;
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.setSelectedProjects: number of selected projects: " + selectedProjects.size());
+ return true;
+ }
+
+ /**
+ * sets single selected project with URL inserted manually, not chosen from list.
+ * Starts configuration download in new thread and returns immediately.
+ * Check projectConfigRetrievalFinished to see whether job finished.
+ * @param url
+ * @return success
+ */
+ public boolean setManuallySelectedProject(String url) {
+ if(!projectConfigRetrievalFinished) {
+ if(Logging.ERROR) Log.e(Logging.TAG,"ProjectAttachService.setManuallySelectedProject: stop, async task already running.");
+ return false;
+ }
+
+ selectedProjects.clear();
+ selectedProjects.add(new ProjectAttachWrapper(url));
+
+ // get projectConfig
+ if(mIsBound) {
+ new GetProjectConfigsAsync().execute();
+ } else {
+ if(Logging.ERROR) Log.e(Logging.TAG,"ProjectAttachService.setManuallySelectedProject: could not load configuration file, monitor not bound.");
+ return false;
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.setManuallySelectedProject: url of selected project: " + url + ", list size: " + selectedProjects.size());
+ return true;
+
+ }
+
+ public int getNumberSelectedProjects(){
+ return selectedProjects.size();
+ }
+
+ public ArrayList<ProjectAttachWrapper> getSelectedProjects() {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.getSelectedProjects: returning list of size: " + selectedProjects.size());
+ return this.selectedProjects;
+ }
+
+ /**
+ * Returns selected but untried project to be attached
+ * @return project or null if no more untried projects
+ */
+ public ProjectAttachWrapper getNextSelectedProject() {
+ for(ProjectAttachWrapper tmp: selectedProjects) {
+ if(tmp.result == ProjectAttachWrapper.RESULT_READY || tmp.result == ProjectAttachWrapper.RESULT_UNINITIALIZED)
+ return tmp;
+ }
+ return null;
+ }
+
+ /**
+ * Checks user input, e.g. length of input. Shows an error toast if problem detected
+ * @param email
+ * @param user
+ * @param pwd
+ * @return true if input verified
+ */
+ public Boolean verifyInput(String email, String user, String pwd) {
+ int stringResource = 0;
+
+ // check input
+ if(email.length() == 0) {
+ stringResource = R.string.attachproject_error_no_email;
+ }
+ else if(user.length() == 0) {
+ stringResource = R.string.attachproject_error_no_name;
+ }
+ else if(pwd != null && pwd.length() == 0) {
+ stringResource = R.string.attachproject_error_no_pwd;
+ }
+ else if(pwd != null && pwd.length() < 6) { // appropriate for min pwd length?!
+ stringResource = R.string.attachproject_error_short_pwd;
+ }
+
+ if(stringResource != 0) {
+ Toast toast = Toast.makeText(getApplicationContext(), stringResource, Toast.LENGTH_LONG);
+ toast.show();
+ return false;
+ } else return true;
+ }
+
+ /**
+ * Returns true as long as there have been unresolved conflicts.
+ *
+ * @return indicator whether conflicts exist
+ */
+ public boolean unresolvedConflicts() {
+ for(ProjectAttachWrapper project: selectedProjects) {
+ if(project.result != ProjectAttachWrapper.RESULT_SUCCESS) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Attempts attach of account manager with credentials provided as parameter.
+ * Does not require to select project or set credentials beforehand.
+ *
+ * @param url acct mgr url
+ * @param name user name
+ * @param pwd password
+ * @return result code, see BOINCErrors
+ */
+ public int attachAcctMgr(String url, String name, String pwd) {
+
+ int reply = -1;
+ Integer maxAttempts = getResources().getInteger(R.integer.attach_acctmgr_retries);
+ Integer attemptCounter = 0;
+ Boolean retry = true;
+ if(Logging.DEBUG) Log.d(Logging.TAG,"account manager with: " + url + name + maxAttempts);
+ // retry a defined number of times, if non deterministic failure occurs.
+ // makes login more robust on bad network connections
+ while(retry && attemptCounter < maxAttempts) {
+ try {
+ reply = monitor.addAcctMgrErrorNum(url, name, pwd);
+ } catch (RemoteException e1) {}
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectAttachService.attachAcctMgr returned: " + reply);
+ switch(reply) {
+ case BOINCErrors.ERR_GETHOSTBYNAME: // no internet
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_CONNECT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_HTTP_TRANSIENT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_RETRY: // client currently busy with another HTTP request, retry unlimited
+ break;
+ default: // success or final error, stop retrying
+ retry = false;
+ break;
+ }
+ if(retry) try{Thread.sleep(getResources().getInteger(R.integer.attach_step_interval_ms));} catch(Exception e) {}
+ }
+
+ if(reply !=BOINCErrors.ERR_OK ) return reply;
+
+ AcctMgrInfo info = null;
+ try {info = monitor.getAcctMgrInfo();} catch (RemoteException e1) {}
+ if(info == null) return -1;
+
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.attachAcctMgr successful: " + info.acct_mgr_url + info.acct_mgr_name + info.have_credentials);
+ return BOINCErrors.ERR_OK;
+ }
+
+ public class ProjectAttachWrapper {
+ public String url = ""; // URL, manually inserted, or from projectInfo
+ public ProjectInfo info; // chosen from list
+ public String name = ""; // name of project in debug messages, do not use otherwise!
+ public ProjectConfig config; // has to be downloaded, available if RESULT_READY
+ public int result = RESULT_UNINITIALIZED;
+
+ public static final int RESULT_UNINITIALIZED = 0; // config not downloaded yet, download!
+ public static final int RESULT_READY = 1; // config is available, project is ready to be attached
+ public static final int RESULT_ONGOING = 2; // ongoing attach
+ public static final int RESULT_SUCCESS = 3; // successful, -X otherwise
+ public static final int RESULT_UNDEFINED= -1;
+ public static final int RESULT_NAME_NOT_UNIQUE = -2; // registration failed, either password wrong or ID taken
+ public static final int RESULT_BAD_PASSWORD = -3; // login failed (creation disabled or login button pressed), password wrong
+ public static final int RESULT_UNKNOWN_USER = -4; // login failed (creation disabled or login button pressed), user does not exist
+ public static final int RESULT_REQUIRES_TOS_AGGREEMENT = -5;
+ public static final int RESULT_CONFIG_DOWNLOAD_FAILED = -6; // download of configuration failed, but required for attach (retry?)
+
+
+ public ProjectAttachWrapper(ProjectInfo info) {
+ this.info = info;
+ this.name = info.name;
+ this.url = info.url;
+ }
+
+ public ProjectAttachWrapper(String url) {
+ this.url = url;
+ this.name = url;
+ }
+
+ public String getResultDescription() {
+ switch(result) {
+ case RESULT_UNINITIALIZED:
+ return getString(R.string.attachproject_login_loading);
+ case RESULT_READY:
+ return getString(R.string.attachproject_credential_input_sing_desc);
+ case RESULT_ONGOING:
+ return getString(R.string.attachproject_working_attaching) + " " + this.name + "...";
+ case RESULT_UNDEFINED:
+ return getString(R.string.attachproject_conflict_undefined);
+ case RESULT_NAME_NOT_UNIQUE:
+ return getString(R.string.attachproject_conflict_not_unique);
+ case RESULT_BAD_PASSWORD:
+ return getString(R.string.attachproject_conflict_bad_password);
+ case RESULT_UNKNOWN_USER:
+ if(config.clientAccountCreationDisabled) {
+ return getString(R.string.attachproject_conflict_unknown_user_creation_disabled);
+ } else {
+ return getString(R.string.attachproject_conflict_unknown_user);
+ }
+ case RESULT_CONFIG_DOWNLOAD_FAILED:
+ return getString(R.string.attachproject_conflict_undefined);
+ }
+ return "";
+ }
+
+ /**
+ * Attaches this project to BOINC client.
+ * Account lookup/registration using credentials set at service.
+ *
+ * Using registration RPC if client side registration is enabled,
+ * succeeds also if account exists and password is correct.
+ *
+ * Using login RPC if client side registration is disabled.
+ *
+ * Attaches project if account lookup succeeded.
+ *
+ * Retries in case of non-deterministic errors
+ * Long-running and network communication, do not execute in UI thread.
+ * @return returns status conflict
+ */
+ public int lookupAndAttach(boolean forceLookup) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectAttachWrapper.attach: attempting: " + name);
+
+ // check if project config is loaded, return if not.
+ // activity needs to check, wait and re-try
+ if(result == RESULT_UNINITIALIZED || !projectConfigRetrievalFinished || config == null) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ProjectAttachWrapper.attach: no projectConfig for: " + name);
+ result = RESULT_UNDEFINED;
+ return RESULT_UNDEFINED;
+ }
+
+ result = RESULT_ONGOING;
+
+ // get credentials
+ AccountOut statusCredentials;
+ // check if project allows registration
+ if(forceLookup || config.clientAccountCreationDisabled) {
+ // registration disabled, e.g. WCG
+ if(Logging.DEBUG) Log.d(Logging.TAG,"AttachProjectAsyncTask: account creation disabled, try login. for: " + config.name);
+ statusCredentials = login();
+ } else {
+ // registration enabled
+ statusCredentials = register();
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: retrieving credentials returned: " + statusCredentials.error_num + ":" + statusCredentials.error_msg + ". for: " + config.name);
+
+ // check success
+ if(statusCredentials == null) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "AttachProjectAsyncTask: credential retrieval failed, is null, for: " + name);
+ result = RESULT_UNDEFINED;
+ return RESULT_UNDEFINED;
+ } else if(statusCredentials.error_num != BOINCErrors.ERR_OK) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "AttachProjectAsyncTask: credential retrieval failed, returned error: " + statusCredentials.error_num);
+ switch(statusCredentials.error_num) {
+ case BOINCErrors.ERR_DB_NOT_UNIQUE:
+ result = RESULT_NAME_NOT_UNIQUE;
+ return RESULT_NAME_NOT_UNIQUE;
+ case BOINCErrors.ERR_BAD_PASSWD:
+ result = RESULT_BAD_PASSWORD;
+ return RESULT_BAD_PASSWORD;
+ case BOINCErrors.ERR_DB_NOT_FOUND:
+ result = RESULT_UNKNOWN_USER;
+ return RESULT_UNKNOWN_USER;
+ default:
+ if(Logging.WARNING) Log.w(Logging.TAG, "AttachProjectAsyncTask: unable to map error number, returned error: " + statusCredentials.error_num);
+ result = RESULT_UNDEFINED;
+ return RESULT_UNDEFINED;
+ }
+ }
+
+ // attach project;
+ boolean statusAttach = false;
+ statusAttach = attach(statusCredentials.authenticator);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectAsyncTask: attach returned: " + statusAttach + ". for: " + config.name);
+
+ if(!statusAttach) {
+ result = RESULT_UNDEFINED;
+ return RESULT_UNDEFINED;
+ }
+
+ result = RESULT_SUCCESS;
+ return RESULT_SUCCESS;
+ }
+
+ /**
+ * Attempts account registration with the credentials previously set in service.
+ * Registration also succeeds if account exists and password is correct.
+ *
+ * Retries in case of non-deterministic errors
+ * Long-running and network communication, do not execute in UI thread.
+ * @return credentials
+ */
+ public AccountOut register() {
+ AccountOut credentials = null;
+ boolean retry = true;
+ Integer attemptCounter = 0;
+ Integer maxAttempts = getResources().getInteger(R.integer.attach_creation_retries);
+ // retry a defined number of times, if non deterministic failure occurs.
+ // makes login more robust on bad network connections
+ while(retry && attemptCounter < maxAttempts) {
+ if (mIsBound) try {credentials = monitor.createAccountPolling(getAccountIn(email, user, pwd));} catch (RemoteException e) {}
+ if(credentials == null) {
+ // call failed
+ if(Logging.WARNING) Log.w(Logging.TAG, "ProjectAttachWrapper.register register: auth null, retry...");
+ attemptCounter++; // limit number of retries
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectAttachWrapper.register returned: " + config.error_num + " for " + name);
+ switch(config.error_num) {
+ case BOINCErrors.ERR_GETHOSTBYNAME: // no internet
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_CONNECT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_HTTP_TRANSIENT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_RETRY: // client currently busy with another HTTP request, retry unlimited
+ break;
+ default: // success or final error, stop retrying
+ retry = false;
+ break;
+ }
+ }
+ }
+
+ return credentials;
+ }
+
+ /**
+ * Attempts account lookup with the credentials previously set in service.
+ *
+ * Retries in case of non-deterministic errors
+ * Long-running and network communication, do not execute in UI thread.
+ * @return credentials
+ */
+ public AccountOut login() {
+ AccountOut credentials = null;
+ boolean retry = true;
+ Integer attemptCounter = 0;
+ Integer maxAttempts = getResources().getInteger(R.integer.attach_login_retries);
+ // retry a defined number of times, if non deterministic failure occurs.
+ // makes login more robust on bad network connections
+ while(retry && attemptCounter < maxAttempts) {
+ if (mIsBound) try {credentials = monitor.lookupCredentials(getAccountIn(email, user, pwd));} catch (RemoteException e) {}
+ if(credentials == null) {
+ // call failed
+ if(Logging.WARNING) Log.w(Logging.TAG, "ProjectAttachWrapper.login failed: auth null, retry...");
+ attemptCounter++; // limit number of retries
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectAttachWrapper.login returned: " + config.error_num + " for " + name);
+ switch(config.error_num) {
+ case BOINCErrors.ERR_GETHOSTBYNAME: // no internet
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_CONNECT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_HTTP_TRANSIENT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_RETRY: // client currently busy with another HTTP request, retry unlimited
+ break;
+ default: // success or final error, stop retrying
+ retry = false;
+ break;
+ }
+ }
+
+ if(retry) try{Thread.sleep(getResources().getInteger(R.integer.attach_step_interval_ms));} catch(Exception e) {}
+ }
+
+ return credentials;
+ }
+
+ private boolean attach(String authenticator) {
+ if (mIsBound) try {return monitor.attachProject(config.masterUrl, config.name, authenticator);} catch (RemoteException e) {}
+ return false;
+ }
+
+ private AccountIn getAccountIn(String email, String user, String pwd) {
+ return new AccountIn(config.getSecureUrlIfAvailable(), email, user, config.usesName, pwd, "");
+ }
+ }
+
+ private class GetProjectConfigsAsync extends AsyncTask<Void, Void, Void> {
+
+ Integer maxAttempts = getResources().getInteger(R.integer.attach_get_project_config_retries);
+
+ @Override
+ protected void onPreExecute() {
+ projectConfigRetrievalFinished = false;
+ super.onPreExecute();
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.GetProjectConfigAsync: number of selected projects: " + selectedProjects.size());
+ for(ProjectAttachWrapper tmp: selectedProjects) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.GetProjectConfigAsync: configuration download started for: " + tmp.name + " with URL: " + tmp.url);
+ ProjectConfig config = getProjectConfig(tmp.url);
+ if(config != null && config.error_num == BOINCErrors.ERR_OK) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.GetProjectConfigAsync: configuration download succeeded for: " + tmp.name);
+ tmp.config = config;
+ tmp.name = config.name;
+ tmp.result = ProjectAttachWrapper.RESULT_READY;
+ } else {
+ // error occurred
+ if(Logging.WARNING) Log.w(Logging.TAG,"ProjectAttachService.GetProjectConfigAsync: could not load configuration for: " + tmp.name);
+ tmp.result = ProjectAttachWrapper.RESULT_CONFIG_DOWNLOAD_FAILED;
+ }
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ProjectAttachService.GetProjectConfigAsync: end.");
+ return null;
+ }
+
+ private ProjectConfig getProjectConfig(String url) {
+ ProjectConfig config = null;
+ boolean retry = true;
+ Integer attemptCounter = 0;
+ // retry a defined number of times, if non deterministic failure occurs.
+ // makes login more robust on bad network connections
+ while(retry && attemptCounter < maxAttempts) {
+ if (mIsBound) try {config = monitor.getProjectConfigPolling(url);} catch (RemoteException e) {}
+ if(config == null) {
+ // call failed
+ if(Logging.WARNING) Log.w(Logging.TAG, "ProjectAttachWrapper.getProjectConfig failed: config null, mIsBound: " + mIsBound + " for " + url + ". retry...");
+ attemptCounter++; // limit number of retries
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "GetProjectConfigsAsync.getProjectConfig returned: " + config.error_num + " for " + url);
+ switch(config.error_num) {
+ case BOINCErrors.ERR_GETHOSTBYNAME: // no internet
+ attemptCounter++; // limit number of retries
+ break;
+ /* disable retries fo ERR_CONNECT because timeout can be very long (over 60sec)
+ case BOINCErrors.ERR_CONNECT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;*/
+ case BOINCErrors.ERR_HTTP_TRANSIENT: // connection problems
+ attemptCounter++; // limit number of retries
+ break;
+ case BOINCErrors.ERR_RETRY: // client currently busy with another HTTP request, retry unlimited
+ break;
+ default: // success or final error, stop retrying
+ retry = false;
+ break;
+ }
+ }
+
+ if(retry) try{Thread.sleep(getResources().getInteger(R.integer.attach_step_interval_ms));} catch(Exception e) {}
+ }
+ return config;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ projectConfigRetrievalFinished = true;
+ super.onPostExecute(result);
+ }
+
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/ProjectInfoFragment.java b/android/BOINC/src/edu/berkeley/boinc/attach/ProjectInfoFragment.java
new file mode 100644
index 0000000..e1cd1c6
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/ProjectInfoFragment.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import java.io.InputStream;
+import java.net.URL;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.rpc.ProjectInfo;
+import edu.berkeley.boinc.utils.*;
+import android.app.Dialog;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+public class ProjectInfoFragment extends DialogFragment{
+
+ ProjectInfo info;
+ LinearLayout logoWrapper;
+ ProgressBar logoPb;
+ ImageView logoIv;
+
+ public static ProjectInfoFragment newInstance(ProjectInfo info) {
+ ProjectInfoFragment f = new ProjectInfoFragment();
+ Bundle args = new Bundle();
+ args.putParcelable("info", info);
+ f.setArguments(args);
+ return f;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectInfoFragment onCreateView");
+ View v = inflater.inflate(R.layout.attach_project_info_layout, container, false);
+
+ // get data
+ info = this.getArguments().getParcelable("info");
+ if(info == null) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ProjectInfoFragment info is null, return.");
+ dismiss();
+ return v;
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectInfoFragment project: " + info.name);
+
+ // set texts
+ ((TextView) v.findViewById(R.id.project_name)).setText(info.name);
+ ((TextView) v.findViewById(R.id.project_summary)).setText(info.summary);
+ ((TextView) v.findViewById(R.id.project_area)).setText(info.generalArea + ": " + info.specificArea);
+ ((TextView) v.findViewById(R.id.project_desc)).setText(info.description);
+ ((TextView) v.findViewById(R.id.project_home)).setText(getResources().getString(R.string.attachproject_login_header_home) + " " + info.home);
+
+ // find view elements for later use in image download
+ logoWrapper = (LinearLayout) v.findViewById(R.id.project_logo_wrapper);
+ logoPb = (ProgressBar) v.findViewById(R.id.project_logo_loading_pb);
+ logoIv = (ImageView) v.findViewById(R.id.project_logo);
+
+ // setup return button
+ Button continueB = (Button) v.findViewById(R.id.continue_button);
+ continueB.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectInfoFragment continue clicked");
+ dismiss();
+ }
+ });
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectInfoFragment image url: " + info.imageUrl);
+ new DownloadLogoAsync().execute(info.imageUrl);
+
+ return v;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+
+ // request a window without the title
+ dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
+ return dialog;
+ }
+
+ private class DownloadLogoAsync extends AsyncTask<String, Void, Bitmap> {
+
+ @Override
+ protected Bitmap doInBackground(String... params) {
+ String url = params[0];
+ if(url == null || url.isEmpty()) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ProjectInfoFragment DownloadLogoAsync url is empty, return.");
+ return null;
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectInfoFragment DownloadLogoAsync for url: " + url);
+ Bitmap logo = null;
+
+ try{
+ InputStream in = new URL(url).openStream();
+ logo = BitmapFactory.decodeStream(in);
+ // scale
+ logo = Bitmap.createScaledBitmap(logo, logo.getWidth() * 2, logo.getHeight() * 2, false);
+ } catch(Exception e) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ProjectInfoFragment DownloadLogoAsync image download failed");
+ return null;
+ }
+
+ return logo;
+ }
+
+ protected void onPostExecute(Bitmap logo) {
+ if(logo == null) {
+ // failed.
+ if(Logging.ERROR) Log.e(Logging.TAG, "ProjectInfoFragment DownloadLogoAsync failed.");
+ logoWrapper.setVisibility(View.GONE);
+ } else {
+ // success.
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectInfoFragment DownloadLogoAsync successful.");
+ logoPb.setVisibility(View.GONE);
+ logoIv.setVisibility(View.VISIBLE);
+ logoIv.setImageBitmap(logo);
+ }
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/SelectionListActivity.java b/android/BOINC/src/edu/berkeley/boinc/attach/SelectionListActivity.java
new file mode 100644
index 0000000..523a4f0
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/SelectionListActivity.java
@@ -0,0 +1,221 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+
+package edu.berkeley.boinc.attach;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import java.util.ArrayList;
+import edu.berkeley.boinc.client.IMonitor;
+import edu.berkeley.boinc.client.Monitor;
+import edu.berkeley.boinc.rpc.ProjectInfo;
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.support.v4.app.FragmentActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.Toast;
+
+public class SelectionListActivity extends FragmentActivity{
+
+ private ListView lv;
+ ArrayList<ProjectListEntry> entries = new ArrayList<ProjectListEntry>();
+ ArrayList<ProjectInfo> selected = new ArrayList<ProjectInfo>();
+
+ // services
+ private IMonitor monitor = null;
+ private boolean mIsBound = false;
+ private ProjectAttachService attachService = null;
+ private boolean asIsBound = false;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectListActivity onCreate");
+
+ doBindService();
+
+ // setup layout
+ setContentView(R.layout.attach_project_list_layout);
+ lv = (ListView) findViewById(R.id.listview);
+ }
+
+ @Override
+ protected void onDestroy() {
+ if(Logging.VERBOSE) Log.v(Logging.TAG, "AttachProjectListActivity onDestroy");
+ doUnbindService();
+ super.onDestroy();
+ }
+
+ // check whether user has checked at least a single project
+ // shows toast otherwise
+ private Boolean checkProjectChecked() {
+ for(ProjectListEntry tmp: entries) {
+ if(tmp.checked) return true;
+ }
+ Toast toast = Toast.makeText(getApplicationContext(), R.string.attachproject_list_header, Toast.LENGTH_SHORT);
+ toast.show();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectListActivity no project selected, stop!");
+ return false;
+ }
+
+ // check whether device is online before starting connection attempt
+ // as needed for AttachProjectLoginActivity (retrieval of ProjectConfig)
+ // note: available internet does not guarantee connection to project server
+ // is possible!
+ private Boolean checkDeviceOnline() {
+ ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
+ Boolean online = activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
+ if(!online) {
+ Toast toast = Toast.makeText(getApplicationContext(), R.string.attachproject_list_no_internet, Toast.LENGTH_SHORT);
+ toast.show();
+ if(Logging.DEBUG) Log.d(Logging.TAG, "AttachProjectListActivity not online, stop!");
+ }
+ return online;
+ }
+
+ // triggered by continue button
+ public void continueClicked(View v) {
+ if(!checkProjectChecked()) return;
+ if(!checkDeviceOnline()) return;
+
+ String selectedProjectsDebug = "";
+ // get selected projects
+ selected.clear();
+ for(ProjectListEntry tmp: entries) {
+ if(tmp.checked) {
+ selected.add(tmp.info);
+ selectedProjectsDebug += tmp.info.name + ",";
+ }
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SelectionListActivity: selected projects: " + selectedProjectsDebug);
+
+ attachService.setSelectedProjects(selected); // returns immediately
+
+ // start credential input activity
+ startActivity(new Intent(this, CredentialInputActivity.class));
+ }
+
+ private ServiceConnection mMonitorConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ monitor = IMonitor.Stub.asInterface(service);
+ mIsBound = true;
+
+ UpdateProjectListAsyncTask task = new UpdateProjectListAsyncTask();
+ task.execute();
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ monitor = null;
+ mIsBound = false;
+ }
+ };
+
+ private ServiceConnection mASConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been established, getService returns
+ // the Monitor object that is needed to call functions.
+ attachService = ((ProjectAttachService.LocalBinder)service).getService();
+ asIsBound = true;
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This should not happen
+ attachService = null;
+ asIsBound = false;
+ }
+ };
+
+ private void doBindService() {
+ // start service to allow setForeground later on...
+ startService(new Intent(this, Monitor.class));
+ // Establish a connection with the service, onServiceConnected gets called when
+ bindService(new Intent(this, Monitor.class), mMonitorConnection, Service.BIND_AUTO_CREATE);
+ // bind to attach service
+ bindService(new Intent(this, ProjectAttachService.class), mASConnection, Service.BIND_AUTO_CREATE);
+ }
+
+ private void doUnbindService() {
+ if (mIsBound) {
+ // Detach existing connection.
+ unbindService(mMonitorConnection);
+ mIsBound = false;
+ }
+ if (asIsBound) {
+ // Detach existing connection.
+ unbindService(mASConnection);
+ asIsBound = false;
+ }
+ }
+
+ private class UpdateProjectListAsyncTask extends AsyncTask<Void, Void, ArrayList<ProjectInfo>> {
+
+ @Override
+ protected ArrayList<ProjectInfo> doInBackground(Void... arg0) {
+
+ ArrayList<ProjectInfo> data = null;
+ Boolean retry = true;
+ while(retry) {
+ try{data = (ArrayList<ProjectInfo>) monitor.getAttachableProjects();} catch (RemoteException e){}
+ if(data == null) {
+ if(Logging.WARNING) Log.w(Logging.TAG,"UpdateProjectListAsyncTask: failed to retrieve data, retry....");
+ try{Thread.sleep(500);} catch(Exception e) {}
+ } else retry = false;
+ }
+ if(Logging.DEBUG) Log.d( Logging.TAG,"monitor.getAttachableProjects returned with " + data.size() + " elements");
+ return data;
+ }
+
+ protected void onPostExecute(ArrayList<ProjectInfo> result) {
+ if (result != null) {
+ entries.clear();
+ for(ProjectInfo tmp: result) {
+ entries.add(new ProjectListEntry(tmp));
+ }
+ SelectionListAdapter listAdapter = new SelectionListAdapter(SelectionListActivity.this,R.id.listview,entries);
+ lv.setAdapter(listAdapter);
+ }
+ }
+ }
+
+ class ProjectListEntry {
+ public ProjectInfo info;
+ public boolean checked;
+
+ public ProjectListEntry(ProjectInfo info) {
+ this.info = info;
+ this.checked = false;
+ }
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/attach/SelectionListAdapter.java b/android/BOINC/src/edu/berkeley/boinc/attach/SelectionListAdapter.java
new file mode 100644
index 0000000..d0254a3
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/attach/SelectionListAdapter.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.attach;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.attach.SelectionListActivity.ProjectListEntry;
+import edu.berkeley.boinc.utils.Logging;
+import android.content.Context;
+import android.support.v4.app.FragmentActivity;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class SelectionListAdapter extends ArrayAdapter<ProjectListEntry>{
+
+ private ArrayList<ProjectListEntry> entries;
+ private FragmentActivity activity;
+
+ public SelectionListAdapter(FragmentActivity a, int textViewResourceId, ArrayList<ProjectListEntry> entries) {
+ super(a, textViewResourceId, entries);
+ this.entries = entries;
+ this.activity = a;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+
+ View v = convertView;
+
+ LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ final ProjectListEntry listItem = entries.get(position);
+
+ v = vi.inflate(R.layout.attach_project_list_layout_listitem, null);
+ TextView name = (TextView) v.findViewById(R.id.name);
+ name.setText(listItem.info.name);
+ TextView description = (TextView) v.findViewById(R.id.description);
+ description.setText(listItem.info.generalArea);
+ TextView summary = (TextView) v.findViewById(R.id.summary);
+ summary.setText(listItem.info.summary);
+ CheckBox cb = (CheckBox) v.findViewById(R.id.cb);
+ cb.setChecked(listItem.checked);
+ cb.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ listItem.checked = !listItem.checked;
+ }
+ });
+ LinearLayout textWrapper = (LinearLayout) v.findViewById(R.id.text_wrapper);
+ textWrapper.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "SelectionListAdapter: onProjectClick open info for: " + listItem.info.name);
+
+ ProjectInfoFragment dialog = ProjectInfoFragment.newInstance(listItem.info);
+ dialog.show(activity.getSupportFragmentManager(), "ProjectInfoFragment");
+ }
+ });
+ return v;
+ }
+
+ @Override
+ public int getCount() {
+ return entries.size();
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/AppPreferences.java b/android/BOINC/src/edu/berkeley/boinc/client/AppPreferences.java
new file mode 100644
index 0000000..5cf5410
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/client/AppPreferences.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.client;
+
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.utils.*;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.util.Log;
+
+public class AppPreferences {
+
+ private final String PREFS = "PREFS";
+ private SharedPreferences prefs;
+
+ private Boolean autostart;
+ private Boolean showNotificationForNotices;
+ private Boolean showNotificationDuringSuspend;
+ private Boolean showAdvanced;
+ private Integer logLevel;
+ private Boolean powerSourceAc;
+ private Boolean powerSourceUsb;
+ private Boolean powerSourceWireless;
+ private Boolean stationaryDeviceMode; // disable battery status parsing
+ private Boolean suspendWhenScreenOn;
+
+ public void readPrefs (Context ctx) {
+ if(prefs == null) {
+ prefs = ctx.getSharedPreferences(PREFS, 0);
+ }
+ //second parameter of reading function is the initial value after installation.
+ autostart = prefs.getBoolean("autostart", ctx.getResources().getBoolean(R.bool.prefs_default_autostart));
+ showNotificationForNotices = prefs.getBoolean("showNotification", ctx.getResources().getBoolean(R.bool.prefs_default_notification_notices));
+ showNotificationDuringSuspend = prefs.getBoolean("showNotificationDuringSuspend", ctx.getResources().getBoolean(R.bool.prefs_default_notification_suspended));
+ showAdvanced = prefs.getBoolean("showAdvanced", ctx.getResources().getBoolean(R.bool.prefs_default_advanced));
+ logLevel = prefs.getInt("logLevel", ctx.getResources().getInteger(R.integer.prefs_default_loglevel));
+ Logging.setLogLevel(logLevel);
+ powerSourceAc = prefs.getBoolean("powerSourceAc", ctx.getResources().getBoolean(R.bool.prefs_power_source_ac));
+ powerSourceUsb = prefs.getBoolean("powerSourceUsb", ctx.getResources().getBoolean(R.bool.prefs_power_source_usb));
+ powerSourceWireless = prefs.getBoolean("powerSourceWireless", ctx.getResources().getBoolean(R.bool.prefs_power_source_wireless));
+ stationaryDeviceMode = prefs.getBoolean("stationaryDeviceMode", ctx.getResources().getBoolean(R.bool.prefs_stationary_device_mode));
+ suspendWhenScreenOn = prefs.getBoolean("suspendWhenScreenOn", ctx.getResources().getBoolean(R.bool.prefs_suspend_when_screen_on));
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "appPrefs read successful." + autostart + showNotificationForNotices + showAdvanced + logLevel + powerSourceAc + powerSourceUsb + powerSourceWireless);
+ }
+
+ public void setAutostart(Boolean as) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("autostart", as);
+ editor.commit();
+ this.autostart = as;
+ }
+
+ public Boolean getAutostart () {
+ return this.autostart;
+ }
+
+ public void setShowNotificationForNotices(Boolean as) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("showNotification", as);
+ editor.commit();
+ this.showNotificationForNotices = as;
+ }
+
+ public Boolean getShowNotificationForNotices() {
+ return this.showNotificationForNotices;
+ }
+
+ public void setShowNotificationDuringSuspend(Boolean ns) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("showNotificationDuringSuspend", ns);
+ editor.commit();
+ this.showNotificationDuringSuspend = ns;
+ }
+
+ public Boolean getShowNotificationDuringSuspend() {
+ return this.showNotificationDuringSuspend;
+ }
+
+ public void setShowAdvanced(Boolean as) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("showAdvanced", as);
+ editor.commit();
+ this.showAdvanced = as;
+ }
+
+ public Boolean getShowAdvanced () {
+ return this.showAdvanced;
+ }
+
+ public void setLogLevel(Integer logLevel) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putInt("logLevel", logLevel);
+ editor.commit();
+ this.logLevel = logLevel;
+ Logging.setLogLevel(logLevel);
+ }
+
+ public Integer getLogLevel () {
+ return this.logLevel;
+ }
+
+ public void setPowerSourceAc(Boolean ac) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("powerSourceAc", ac);
+ editor.commit();
+ this.powerSourceAc = ac;
+ }
+
+ public void setPowerSourceUsb(Boolean usb) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("powerSourceUsb", usb);
+ editor.commit();
+ this.powerSourceUsb = usb;
+ }
+
+ public void setPowerSourceWireless(Boolean wireless) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("powerSourceWireless", wireless);
+ editor.commit();
+ this.powerSourceWireless = wireless;
+ }
+
+ public Boolean getPowerSourceAc() {
+ return this.powerSourceAc;
+ }
+
+ public Boolean getPowerSourceUsb() {
+ return this.powerSourceUsb;
+ }
+
+ public Boolean getPowerSourceWireless() {
+ return this.powerSourceWireless;
+ }
+
+ public void setStationaryDeviceMode(Boolean sdm) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("stationaryDeviceMode", sdm);
+ editor.commit();
+ this.stationaryDeviceMode = sdm;
+ }
+
+ public Boolean getStationaryDeviceMode () {
+ return this.stationaryDeviceMode;
+ }
+
+ public void setSuspendWhenScreenOn(Boolean swso) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean("suspendWhenScreenOn", swso);
+ editor.commit();
+ this.suspendWhenScreenOn = swso;
+ }
+
+ public Boolean getSuspendWhenScreenOn () {
+ return this.suspendWhenScreenOn;
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/ClientInterfaceImplementation.java b/android/BOINC/src/edu/berkeley/boinc/client/ClientInterfaceImplementation.java
index b031cff..3397f9d 100644
--- a/android/BOINC/src/edu/berkeley/boinc/client/ClientInterfaceImplementation.java
+++ b/android/BOINC/src/edu/berkeley/boinc/client/ClientInterfaceImplementation.java
@@ -13,12 +13,13 @@ import edu.berkeley.boinc.rpc.AccountOut;
import edu.berkeley.boinc.rpc.AcctMgrRPCReply;
import edu.berkeley.boinc.rpc.GlobalPreferences;
import edu.berkeley.boinc.rpc.Message;
-import edu.berkeley.boinc.rpc.Notice;
import edu.berkeley.boinc.rpc.Project;
import edu.berkeley.boinc.rpc.ProjectAttachReply;
import edu.berkeley.boinc.rpc.ProjectConfig;
+import edu.berkeley.boinc.rpc.ProjectInfo;
import edu.berkeley.boinc.rpc.RpcClient;
import edu.berkeley.boinc.rpc.Transfer;
+import edu.berkeley.boinc.utils.BOINCErrors;
import edu.berkeley.boinc.utils.Logging;
/**
@@ -27,20 +28,9 @@ import edu.berkeley.boinc.utils.Logging;
* Most functions can block executing thread, do not call them from UI thread!
*/
public class ClientInterfaceImplementation extends RpcClient{
-
- // maximum polling retry duration in ms
- private final Integer maxRetryDuration = 3000;
+
// interval between polling retries in ms
- private final Integer minRetryInterval = 500;
-
- /**
- * Establishes socket connection to BOINC client.
- * Requirement for information exchange via RPC
- * @return success
- */
- public Boolean connect() {
- return open("127.0.0.1", 31416);
- }
+ private final Integer minRetryInterval = 1000;
/**
* Reads authentication key from specified file path and authenticates GUI for advanced RPCs with the client
@@ -105,11 +95,11 @@ public class ClientInterfaceImplementation extends RpcClient{
* @return GUI RPC authentication code
*/
public String readAuthToken(String authFilePath) {
- File authFile = new File(authFilePath);
StringBuffer fileData = new StringBuffer(100);
char[] buf = new char[1024];
int read = 0;
try{
+ File authFile = new File(authFilePath);
BufferedReader br = new BufferedReader(new FileReader(authFile));
while((read=br.read(buf)) != -1){
String readData = String.valueOf(buf, 0, read);
@@ -141,27 +131,23 @@ public class ClientInterfaceImplementation extends RpcClient{
Boolean success = getProjectConfig(url); //asynchronous call
if(success) { //only continue if attach command did not fail
// verify success of getProjectConfig with poll function
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
Boolean loop = true;
- while(loop && (counter < maxLoops)) {
+ while(loop) {
loop = false;
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
+ try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
config = getProjectConfigPoll();
if(config==null) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ClientInterfaceImplementation.getProjectConfigPolling: returned null.");
return null;
}
- if (config.error_num == -204) {
+ if (config.error_num == BOINCErrors.ERR_IN_PROGRESS) {
loop = true; //no result yet, keep looping
} else {
//final result ready
if(config.error_num == 0) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ProjectConfig retrieved: " + config.name);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.getProjectConfigPolling: ProjectConfig retrieved: " + config.name);
} else {
- if(Logging.DEBUG) Log.d(Logging.TAG, "final result with error_num: " + config.error_num);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.getProjectConfigPolling: final result with error_num: " + config.error_num);
}
}
}
@@ -171,33 +157,24 @@ public class ClientInterfaceImplementation extends RpcClient{
/**
* Attaches project, requires authenticator
- * @param url master URL of project to be attached
+ * @param url URL of project to be attached, either masterUrl(HTTP) or webRpcUrlBase(HTTPS)
* @param projectName name of project as shown in the manager
* @param authenticator user authentication key, has to be obtained first
* @return success
*/
public Boolean attachProject(String url, String projectName, String authenticator) {
- Boolean success = false;
- success = projectAttach(url, authenticator, projectName); //asynchronous call to attach project
- if(success) { //only continue if attach command did not fail
+ Boolean success = projectAttach(url, authenticator, projectName); //asynchronous call to attach project
+ if(success) {
// verify success of projectAttach with poll function
- success = false;
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
- while(!success && (counter < maxLoops)) {
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
- ProjectAttachReply reply = projectAttachPoll();
- if(reply != null) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "rpc.projectAttachPoll reply error_num: " + reply.error_num);
- if(reply.error_num == 0) success = true;
- }
+ ProjectAttachReply reply = projectAttachPoll();
+ while(reply != null && reply.error_num == BOINCErrors.ERR_IN_PROGRESS) { // loop as long as reply.error_num == BOINCErrors.ERR_IN_PROGRESS
+ try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
+ reply = projectAttachPoll();
}
+ if(reply != null && reply.error_num == BOINCErrors.ERR_OK) return true;
} else if(Logging.DEBUG) Log.d(Logging.TAG, "rpc.projectAttach failed.");
- return success;
+ return false;
}
/**
@@ -224,44 +201,36 @@ public class ClientInterfaceImplementation extends RpcClient{
/**
* Looks up account credentials for given user data.
* Contains authentication key for project attachment.
- * @param url master URL of project
+ * @param url URL of project, either masterUrl(HTTP) or webRpcUrlBase(HTTPS)
* @param id user ID, can be either name or eMail, see usesName
* @param pwd password
* @param usesName if true, id represents a user name, if not, the user's email address
* @return account credentials
*/
- public AccountOut lookupCredentials(String url, String id, String pwd, Boolean usesName) {
+ public AccountOut lookupCredentials(AccountIn credentials) {
AccountOut auth = null;
- AccountIn credentials = new AccountIn();
- if(usesName) credentials.user_name = id;
- else credentials.email_addr = id;
- credentials.passwd = pwd;
- credentials.url = url;
Boolean success = lookupAccount(credentials); //asynch
- if(success) { //only continue if lookupAccount command did not fail
- //get authentication token from lookupAccountPoll
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
+ if(success) {
+ // get authentication token from lookupAccountPoll
Boolean loop = true;
- while(loop && (counter < maxLoops)) {
+ while(loop) {
loop = false;
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
+ try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
auth = lookupAccountPoll();
if(auth==null) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"error in rpc.lookupAccountPoll.");
+ if(Logging.ERROR) Log.e(Logging.TAG, "ClientInterfaceImplementation.lookupCredentials: returned null.");
return null;
}
- if (auth.error_num == -204) {
+ if (auth.error_num == BOINCErrors.ERR_IN_PROGRESS) {
loop = true; //no result yet, keep looping
- }
- else {
+ } else {
//final result ready
- if(auth.error_num == 0) if(Logging.DEBUG) Log.d(Logging.TAG, "credentials verification result, retrieved authenticator.");
- else Log.d(Logging.TAG, "credentials verification result, error: " + auth.error_num);
+ if(auth.error_num == 0) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.lookupCredentials: authenticator retrieved.");
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.lookupCredentials: final result with error_num: " + auth.error_num);
+ }
}
}
} else if(Logging.DEBUG) Log.d(Logging.TAG, "rpc.lookupAccount failed.");
@@ -307,40 +276,29 @@ public class ClientInterfaceImplementation extends RpcClient{
* @return account credentials (see status inside, to check success)
*/
- public AccountOut createAccountPolling(String url, String email, String userName, String pwd, String teamName) {
- AccountIn information = new AccountIn();
- information.url = url;
- information.email_addr = email;
- information.user_name = userName;
- information.passwd = pwd;
- information.team_name = teamName;
-
+ public AccountOut createAccountPolling(AccountIn information) {
AccountOut auth = null;
Boolean success = createAccount(information); //asynchronous call to attach project
- if(success) { //only continue if attach command did not fail
- // verify success of projectAttach with poll function
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
+ if(success) {
Boolean loop = true;
- while(loop && (counter < maxLoops)) {
+ while(loop) {
loop = false;
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
+ try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
auth = createAccountPoll();
if(auth==null) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"error in rpc.createAccountPoll.");
+ if(Logging.ERROR) Log.e(Logging.TAG, "ClientInterfaceImplementation.createAccountPolling: returned null.");
return null;
}
- if (auth.error_num == -204) {
+ if (auth.error_num == BOINCErrors.ERR_IN_PROGRESS) {
loop = true; //no result yet, keep looping
- }
- else {
+ } else {
//final result ready
- if(auth.error_num == 0) if(Logging.DEBUG) Log.d(Logging.TAG, "account creation result, retrieved authenticator.");
- else if(Logging.DEBUG) Log.d(Logging.TAG, "account creation result, error: " + auth.error_num);
+ if(auth.error_num == 0) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.createAccountPolling: authenticator retrieved.");
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.createAccountPolling: final result with error_num: " + auth.error_num);
+ }
}
}
} else {if(Logging.DEBUG) Log.d(Logging.TAG,"rpc.createAccount returned false.");}
@@ -358,31 +316,17 @@ public class ClientInterfaceImplementation extends RpcClient{
public AcctMgrRPCReply addAcctMgr(String url, String userName, String pwd) {
AcctMgrRPCReply reply = null;
- Boolean success = acctMgrRPC(url, userName, pwd); //asynchronous call to attach account manager
- if(success) { //only continue if rpc command did not fail
- // verify success of acctMgrRPC with poll function
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
+ Boolean success = acctMgrRPC(url, userName, pwd);
+ if(success) {
Boolean loop = true;
- while(loop && (counter < maxLoops)) {
- loop = false;
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
+ while(loop) {
reply = acctMgrRPCPoll();
- if(reply == null) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"error in rpc.addAcctMgr.");
- return null;
- }
- if (reply.error_num == -204) {
- loop = true; //no result yet, keep looping
- }
- else {
+ if(reply == null || reply.error_num != BOINCErrors.ERR_IN_PROGRESS) {
+ loop = false;
//final result ready
- if(reply.error_num == 0) if(Logging.DEBUG) Log.d(Logging.TAG, "account manager attach successful.");
- else if(Logging.DEBUG) Log.d(Logging.TAG, "account manager attach failed, error: " + reply.error_num);
- }
+ if(reply == null) {if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.addAcctMgr: failed, reply null.");}
+ else {if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.addAcctMgr: returned " + reply.error_num);}
+ } else try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
}
} else {if(Logging.DEBUG) Log.d(Logging.TAG,"rpc.acctMgrRPC returned false.");}
return reply;
@@ -401,31 +345,24 @@ public class ClientInterfaceImplementation extends RpcClient{
Boolean success = false;
ProjectConfig reply = null;
success = getProjectConfig(url);
- if(success) { //only continue if rpc command did not fail
- // verify success of getProjectConfig with poll function
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
+ if(success) {
Boolean loop = true;
- while(loop && (counter < maxLoops)) {
+ while(loop) {
loop = false;
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
+ try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
reply = getProjectConfigPoll();
- if(reply == null) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"error in rpc.getProjectConfig.");
- return false;
+ if(reply==null) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ClientInterfaceImplementation.synchronizeAcctMgr: getProjectConfigreturned null.");
+ return null;
}
- if (reply.error_num == -204) {
+ if (reply.error_num == BOINCErrors.ERR_IN_PROGRESS) {
loop = true; //no result yet, keep looping
- }
- else {
+ } else {
//final result ready
- if(reply.error_num == 0) if(Logging.DEBUG) Log.d(Logging.TAG, "getting project config for account manager synchronization successful.");
- else {
- if(Logging.DEBUG) Log.d(Logging.TAG, "getting project config for account manager synchronization failed, error: " + reply.error_num);
- return false;
+ if(reply.error_num == 0) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.synchronizeAcctMgr: project config retrieved.");
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.synchronizeAcctMgr: final result with error_num: " + reply.error_num);
}
}
}
@@ -435,31 +372,24 @@ public class ClientInterfaceImplementation extends RpcClient{
success = false;
AcctMgrRPCReply reply2 = null;
success = acctMgrRPC(); //asynchronous call to synchronize account manager
- if(success) { //only continue if rpc command did not fail
- // verify success of acctMgrRPC with poll function
- Integer counter = 0;
- Integer maxLoops = maxRetryDuration / minRetryInterval;
+ if(success) {
Boolean loop = true;
- while(loop && (counter < maxLoops)) {
+ while(loop) {
loop = false;
- try {
- Thread.sleep(minRetryInterval);
- } catch (Exception e) {}
- counter ++;
+ try {Thread.sleep(minRetryInterval);} catch (Exception e) {}
reply2 = acctMgrRPCPoll();
- if(reply2 == null) {
- if(Logging.DEBUG) Log.d(Logging.TAG,"error in rpc.addAcctMgr.");
- return false;
+ if(reply2==null) {
+ if(Logging.ERROR) Log.e(Logging.TAG, "ClientInterfaceImplementation.synchronizeAcctMgr: acctMgrRPCPoll returned null.");
+ return null;
}
- if (reply2.error_num == -204) {
+ if (reply2.error_num == BOINCErrors.ERR_IN_PROGRESS) {
loop = true; //no result yet, keep looping
- }
- else {
+ } else {
//final result ready
- if(reply2.error_num == 0) if(Logging.DEBUG) Log.d(Logging.TAG, "account manager synchronization successful.");
- else {
- if(Logging.DEBUG) Log.d(Logging.TAG, "account manager synchronization failed, error: " + reply2.error_num);
- return false;
+ if(reply2.error_num == 0) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.synchronizeAcctMgr: acct mngr reply retrieved.");
+ } else {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientInterfaceImplementation.synchronizeAcctMgr: final result with error_num: " + reply2.error_num);
}
}
}
@@ -468,6 +398,13 @@ public class ClientInterfaceImplementation extends RpcClient{
return true;
}
+ @Override
+ public boolean setCcConfig(String ccConfig) {
+ // set CC config and trigger re-read.
+ super.setCcConfig(ccConfig);
+ return super.readCcConfig();
+ }
+
/**
* Returns List of event log messages
* @param seqNo lower bound of sequence number
@@ -486,6 +423,7 @@ public class ClientInterfaceImplementation extends RpcClient{
// less than desired number of messsages available, adapt lower bound
if(lowerBound < 0) lowerBound = 0;
ArrayList<Message> msgs= getMessages(lowerBound); // returns ever messages with seqNo > lowerBound
+ if(msgs == null) msgs = new ArrayList<Message>(); // getMessages might return null in case of parsing or IO error
if(seqNo > 0) {
// remove messages that are >= seqNo
@@ -504,17 +442,55 @@ public class ClientInterfaceImplementation extends RpcClient{
}
/**
- * Returns list of server notices.
- * Filters only server notices out of all notices, used for showing scheduler reply related messages.
- * e.g. "device does not have enough memory for work unit"
- * @return list of server notices
+ * Returns list of projects from all_projects_list.xml that...
+ * - support Android
+ * - support CPU architecture
+ * - are not yet attached
+ * @return list of attachable projects
*/
- public ArrayList<Notice> getServerNotices() {
- ArrayList<Notice> allNotices = getNotices(0);
- ArrayList<Notice> serverNotices = new ArrayList<Notice>();
- for(Notice notice: allNotices) {
- if(notice.isServerNotice) serverNotices.add(notice);
+ public ArrayList<ProjectInfo> getAttachableProjects(String boincPlatformName) {
+ if(Logging.DEBUG) Log.d(Logging.TAG, "getAttachableProjects for platform: " + boincPlatformName);
+
+ ArrayList<ProjectInfo> allProjectsList = getAllProjectsList(); // all_proejcts_list.xml
+ ArrayList<Project> attachedProjects = getState().projects; // currently attached projects
+
+ ArrayList<ProjectInfo> attachableProjects = new ArrayList<ProjectInfo>(); // array to be filled and returned
+
+ if(allProjectsList == null || attachedProjects == null) return null;
+
+ //filter projects that do not support Android
+ for (ProjectInfo candidate: allProjectsList) {
+ // check whether already attached
+ Boolean alreadyAttached = false;
+ for(Project attachedProject: attachedProjects) {
+ if(attachedProject.master_url.equals(candidate.url)) {
+ alreadyAttached = true;
+ break;
+ }
+ }
+ if(alreadyAttached) continue;
+
+ // project is not yet attached, check whether it supports CPU architecture
+ for(String supportedPlatform: candidate.platforms) {
+ if(supportedPlatform.contains(boincPlatformName)) {
+ // project is not yet attached and does support platform
+ // add to list, if not already in it
+ if(!attachableProjects.contains(candidate) )attachableProjects.add(candidate);
+ break;
+ }
+ }
+ }
+
+ if(Logging.DEBUG) Log.d(Logging.TAG, "getAttachableProjects: number of candidates found: " + attachableProjects.size());
+ return attachableProjects;
+ }
+
+ public ProjectInfo getProjectInfo(String url) {
+ ArrayList<ProjectInfo> allProjectsList = getAllProjectsList(); // all_proejcts_list.xml
+ for(ProjectInfo tmp: allProjectsList) {
+ if(tmp.url.equals(url)) return tmp;
}
- return serverNotices;
+ if(Logging.ERROR) Log.e(Logging.TAG, "getProjectInfo: could not find info for: " + url);
+ return null;
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/ClientNotification.java b/android/BOINC/src/edu/berkeley/boinc/client/ClientNotification.java
index db85d2b..a7ce93f 100644
--- a/android/BOINC/src/edu/berkeley/boinc/client/ClientNotification.java
+++ b/android/BOINC/src/edu/berkeley/boinc/client/ClientNotification.java
@@ -1,8 +1,12 @@
package edu.berkeley.boinc.client;
+import java.util.ArrayList;
+
import edu.berkeley.boinc.BOINCActivity;
import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.rpc.Result;
import edu.berkeley.boinc.utils.Logging;
+import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -13,7 +17,6 @@ import android.support.v4.app.NotificationCompat;
import android.util.Log;
public class ClientNotification {
- //private static final String TAG = "ClientNotification";
private static ClientNotification clientNotification = null;
@@ -21,10 +24,12 @@ public class ClientNotification {
private NotificationManager nm;
private Integer notificationId;
private PendingIntent contentIntent;
- private Notification n = null;
+ private Notification n;
private int mOldComputingStatus = -1;
private int mOldSuspendReason = -1;
+ private ArrayList<Result> mOldActiveTasks = new ArrayList<Result>();
+ private boolean notificationShown = false;
// debug foreground state by running
// adb shell: dumpsys activity services edu.berkeley.boinc
private boolean foreground = false;
@@ -34,7 +39,7 @@ public class ClientNotification {
* Constructs a new instance of the ClientNotification if not already constructed.
* @return ClientNotification static instance
*/
- public static synchronized ClientNotification getInstance(Context ctx) {
+ public static ClientNotification getInstance(Context ctx) {
if (clientNotification == null) {
clientNotification = new ClientNotification(ctx);
}
@@ -46,79 +51,161 @@ public class ClientNotification {
this.nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationId = context.getResources().getInteger(R.integer.autostart_notification_id);
Intent intent = new Intent(context, BOINCActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
- contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ contentIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
}
/**
* Updates notification with client's current status
*/
- public synchronized void update() {
- try {
- ClientStatus updatedStatus = Monitor.getClientStatus();
-
- // update notification, only after change in status
- if (clientNotification.mOldComputingStatus == -1
- || updatedStatus.computingStatus.intValue() != clientNotification.mOldComputingStatus
- || (updatedStatus.computingStatus == ClientStatus.COMPUTING_STATUS_SUSPENDED
- && updatedStatus.computingSuspendReason != clientNotification.mOldSuspendReason)) {
-
- buildNotification(updatedStatus);
-
- // update notification
- if(foreground || Monitor.getAppPrefs().getShowNotification()) nm.notify(notificationId, n);
-
- // save status for comparison next time
- clientNotification.mOldComputingStatus = updatedStatus.computingStatus;
- clientNotification.mOldSuspendReason = updatedStatus.computingSuspendReason;
+ /**
+ * Updates notification with client's current status. Notifies if not present. Checking notification related preferences.
+ * @param updatedStatus client status data
+ * @param service reference to service, sets to foreground if active
+ * @param active indicator whether BOINC should stay in foreground (during computing and idle, i.e. not suspended)
+ */
+ public void update(ClientStatus updatedStatus, Monitor service, Boolean active) {
+
+ // nop if data is not present
+ if(service == null || updatedStatus == null) return;
+
+ // stop service foreground, if not active anymore
+ if(!active && foreground) setForegroundState(service, false);
+
+ // if not active, check preference whether to show notification during suspension
+ if(!active && !Monitor.getAppPrefs().getShowNotificationDuringSuspend()) {
+ // cancel notification if necessary
+ if(notificationShown) {
+ Log.d(Logging.TAG, "ClientNotification: cancel suspension notification due to preference.");
+ nm.cancel(notificationId);
+ notificationShown = false;
}
- } catch (Exception e) {if(Logging.WARNING) Log.d(Logging.TAG, "ClientNotification.update failed.");}
- }
-
- // called by Monitor to enable foreground with notification
- public synchronized void setForeground(Boolean setForeground, Monitor service) {
- if(foreground != setForeground) {
- if(setForeground) {
- // check whether notification is available
- if (n == null) update();
- // set service foreground
- service.startForeground(notificationId, n);
- if(Logging.DEBUG) Log.d(Logging.TAG,"ClientNotification.setForeground() start service as foreground.");
- foreground = true;
- } else {
- // set service background
- foreground = false;
- Boolean remove = !Monitor.getAppPrefs().getShowNotification();
- service.stopForeground(remove);
- if(Logging.DEBUG) Log.d(Logging.TAG,"ClientNotification.setForeground() stop service as foreground.");
+ return;
+ }
+
+ //check if active tasks have changed to force update
+ Boolean activeTasksChanged = false;
+ if(updatedStatus.computingStatus == ClientStatus.COMPUTING_STATUS_COMPUTING) {
+ ArrayList<Result> activeTasks = updatedStatus.getExecutingTasks();
+ if(activeTasks.size() != mOldActiveTasks.size()) activeTasksChanged = true;
+ else {
+ for(int x = 0; x < activeTasks.size(); x++) {
+ if(!activeTasks.get(x).name.equals(mOldActiveTasks.get(x).name)) {
+ activeTasksChanged = true;
+ Log.d("blub", "bla " + activeTasks.get(x).name + " vs. " + mOldActiveTasks.get(x).name); //TODO
+ break;
+ }
+ }
}
+ if(activeTasksChanged) mOldActiveTasks = activeTasks;
+ }
+
+ // update notification, only
+ // if it hasn't been shown before, or
+ // after change in status
+ if(Logging.VERBOSE) Log.d(Logging.TAG, "ClientNotification: notification needs update? "+ (clientNotification.mOldComputingStatus == -1)
+ + activeTasksChanged
+ + !notificationShown
+ + (updatedStatus.computingStatus.intValue() != clientNotification.mOldComputingStatus)
+ + (updatedStatus.computingStatus == ClientStatus.COMPUTING_STATUS_SUSPENDED
+ && updatedStatus.computingSuspendReason != clientNotification.mOldSuspendReason));
+ if (clientNotification.mOldComputingStatus == -1
+ || activeTasksChanged
+ || !notificationShown
+ || updatedStatus.computingStatus.intValue() != clientNotification.mOldComputingStatus
+ || (updatedStatus.computingStatus == ClientStatus.COMPUTING_STATUS_SUSPENDED
+ && updatedStatus.computingSuspendReason != clientNotification.mOldSuspendReason)) {
+
+ // update, build and notify
+ nm.notify(notificationId, buildNotification(updatedStatus, active, mOldActiveTasks));
+ if(Logging.DEBUG) Log.d(Logging.TAG, "ClientNotification: update");
+ notificationShown = true;
+
+ // save status for comparison next time
+ clientNotification.mOldComputingStatus = updatedStatus.computingStatus;
+ clientNotification.mOldSuspendReason = updatedStatus.computingSuspendReason;
}
+
+ // start foreground service, if requested
+ // notification instance exists now, but might be out-dated (if screen is off)
+ if(active && !foreground) setForegroundState(service, true);
}
- // cancels notification, called during client shutdown or when disabling preference
- public synchronized void cancel() {
- nm.cancel(notificationId);
- clientNotification.mOldComputingStatus = -1;
+ // Notification must be built, before setting service to foreground!
+ private void setForegroundState(Monitor service, Boolean foregroundState) {
+ if(foregroundState) {
+ service.startForeground(notificationId, n);
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ClientNotification.setForeground() start service as foreground.");
+ foreground = true;
+ } else {
+ foreground = false;
+ service.stopForeground(true);
+ notificationShown = false;
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ClientNotification.setForeground() stop service as foreground.");
+ }
}
- private Notification buildNotification(ClientStatus status) {
+ @SuppressLint("InlinedApi")
+ private Notification buildNotification(ClientStatus status, Boolean active, ArrayList<Result> activeTasks) {
// get current client computingstatus
Integer computingStatus = status.computingStatus;
- // get status string from ClientStatus
- String statusText = status.getCurrentStatusString();
+ // get status strings from ClientStatus
+ String statusDesc = status.getCurrentStatusDescription();
+ String statusTitle = status.getCurrentStatusTitle();
// build notification
- n = new NotificationCompat.Builder(context)
- .setContentTitle(context.getString(R.string.app_name))
- .setContentText(statusText)
+ NotificationCompat.Builder nb = new NotificationCompat.Builder(context);
+ nb.setContentTitle(statusTitle)
.setSmallIcon(getIcon(computingStatus))
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), getIcon(computingStatus)))
- .setContentIntent(contentIntent)
- .setOngoing(true)
- .build();
+ .setContentIntent(contentIntent);
+
+ // adapt priority based on computing status
+ // computing: IDLE and COMPUTING (see wakelock handling)
+ if(active) {
+ nb.setPriority(Notification.PRIORITY_HIGH);
+ }
+ else {
+ nb.setPriority(Notification.PRIORITY_MIN);
+ }
+
+ // set action based on computing status
+ if(computingStatus == ClientStatus.COMPUTING_STATUS_NEVER) {
+ // add resume button
+ nb.addAction(R.drawable.playw, context.getString(R.string.menu_run_mode_enable), getActionIntent(2));
+ } else {
+ // add suspend button
+ nb.addAction(R.drawable.pausew, context.getString(R.string.menu_run_mode_disable), getActionIntent(1));
+ }
+
+ // set tasks if computing
+ if(computingStatus == ClientStatus.COMPUTING_STATUS_COMPUTING) {
+ // set summary text
+ nb.setSubText(statusDesc);
+ // set number as content info
+ nb.setNumber(activeTasks.size());
+ // set names in list
+ NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
+ for(Result task: activeTasks) {
+ inboxStyle.addLine(task.project.getName() + ": " + task.app.getName());
+ }
+ nb.setStyle(inboxStyle);
+ } else {
+ nb.setContentText(statusDesc);
+ }
+
+ n = nb.build();
return n;
}
+
+ // creates pending intent to service with specified action code
+ private PendingIntent getActionIntent(int actionCode) {
+ Intent si = new Intent(context,Monitor.class);
+ si.putExtra("action", actionCode);
+ return PendingIntent.getService(context, 0, si, PendingIntent.FLAG_CANCEL_CURRENT);
+ }
// returns resource id of icon
private int getIcon(int status) {
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/ClientRemoteService.java b/android/BOINC/src/edu/berkeley/boinc/client/ClientRemoteService.java
deleted file mode 100644
index 8968c47..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/client/ClientRemoteService.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package edu.berkeley.boinc.client;
-
-import edu.berkeley.boinc.utils.*;
-
-import edu.berkeley.boinc.rpc.AccountOut;
-import edu.berkeley.boinc.rpc.RpcClient;
-import android.app.Service;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.Log;
-
-public class ClientRemoteService extends Service {
-
- private Monitor monitor;
- private Boolean mIsMonitorBound = false;
-
- @Override
- public void onCreate() {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ClientRemoteService onCreate()");
- doBindService();
- }
-
- @Override
- public void onDestroy() {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ClientRemoteService onDestroy()");
- doUnbindService();
- }
-
- @Override
- public IBinder onBind(Intent arg0) {
- return mBinder; //return binder for remote interface, specified in IClientRemoteService.aidl
- }
-
- private final IClientRemoteService.Stub mBinder = new IClientRemoteService.Stub() {
-
- @Override
- public boolean isReady() throws RemoteException {
- return mIsMonitorBound;
- }
-
- @Override
- public int getVersionCode() throws RemoteException {
- Integer version = 0;
- try {
- version = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
- } catch (NameNotFoundException e) {
- if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not retrieve own version code!", e);
- }
- return version;
- }
-
- @Override
- public boolean attachProject(String packageName, String url, String id, String pwd) throws RemoteException {
- // TODO store packageName in AppPreferences
- if(mIsMonitorBound) {
- return monitor.clientInterface.attachProject(url, id, pwd);
- } else {if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not attach project, service not bound!"); return false;}
- }
-
- @Override
- public boolean checkProjectAttached(String url) throws RemoteException {
- if(mIsMonitorBound) {
- return monitor.clientInterface.checkProjectAttached(url);
- } else {if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not attach project, service not bound!"); return false;}
- }
-
- @Override
- public AccountOut verifyCredentials(String url, String id, String pwd, boolean usesName) throws RemoteException {
- if(mIsMonitorBound) {
- return monitor.clientInterface.lookupCredentials(url, id, pwd, usesName);
- } else {if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not verify credentials, service not bound!"); return null;}
- }
-
- @Override
- public boolean detachProject(String packageName, String url) throws RemoteException {
- // TODO remove packageName in AppPreferences
- if(mIsMonitorBound) {
- return monitor.clientInterface.projectOp(RpcClient.PROJECT_DETACH,url);
- } else {if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not detach project, service not bound!"); return false;}
- }
-
- @Override
- public AccountOut createAccount(String url, String email, String userName, String pwd, String teamName) throws RemoteException {
- if(mIsMonitorBound) {
- return monitor.clientInterface.createAccountPolling(url, email, userName, pwd, teamName);
- } else {if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not create account, service not bound!"); return null;}
- }
-
- @Override
- public String getRpcAuthToken() throws RemoteException {
- if(mIsMonitorBound) {
- return monitor.clientInterface.readAuthToken(monitor.getAuthFilePath());
- } else {if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "ClientRemoteService could not read auth token, service not bound!"); return null;}
- }
- };
-
- /*
- * ClientRemoteService needs to bind to Monitor service, since it is using the web RPC methods.
- * the following methods are required...
- */
- private ServiceConnection mConnection = new ServiceConnection() {
- public void onServiceConnected(ComponentName className, IBinder service) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ClientRemoteService onServiceConnected - local Monitor service bound.");
- monitor = ((Monitor.LocalBinder)service).getService();
- mIsMonitorBound = true;
- }
-
- public void onServiceDisconnected(ComponentName className) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ClientRemoteService onServiceDisconnected - local Monitor service bound.");
- monitor = null;
- mIsMonitorBound = false;
- }
- };
-
- private void doBindService() {
- if(!mIsMonitorBound) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "ClientRemoteService binding local Monitor service...");
- getApplicationContext().bindService(new Intent(this, Monitor.class), mConnection, Context.BIND_AUTO_CREATE);
- }
- }
-
- private void doUnbindService() {
- if(mIsMonitorBound) {
- getApplicationContext().unbindService(mConnection);
- mIsMonitorBound = false;
- }
- }
-
-}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/ClientStatus.java b/android/BOINC/src/edu/berkeley/boinc/client/ClientStatus.java
index 65289b9..0565102 100644
--- a/android/BOINC/src/edu/berkeley/boinc/client/ClientStatus.java
+++ b/android/BOINC/src/edu/berkeley/boinc/client/ClientStatus.java
@@ -19,7 +19,6 @@
package edu.berkeley.boinc.client;
import edu.berkeley.boinc.utils.*;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
@@ -28,10 +27,9 @@ import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
@@ -40,13 +38,15 @@ import android.graphics.BitmapFactory;
import android.net.wifi.WifiManager;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
+import android.text.format.DateUtils;
import android.util.Log;
import edu.berkeley.boinc.R;
import edu.berkeley.boinc.rpc.AcctMgrInfo;
import edu.berkeley.boinc.rpc.CcStatus;
import edu.berkeley.boinc.rpc.GlobalPreferences;
+import edu.berkeley.boinc.rpc.ImageWrapper;
+import edu.berkeley.boinc.rpc.Notice;
import edu.berkeley.boinc.rpc.Project;
-import edu.berkeley.boinc.rpc.ProjectInfo;
import edu.berkeley.boinc.rpc.Result;
import edu.berkeley.boinc.rpc.Transfer;
import edu.berkeley.boinc.rpc.HostInfo;
@@ -80,8 +80,6 @@ public class ClientStatus {
public static final int SETUP_STATUS_AVAILABLE = 1; // 1 = client is launched and available for RPC (connected and authorized)
public static final int SETUP_STATUS_ERROR = 2; // 2 = client is in a permanent error state
public static final int SETUP_STATUS_NOPROJECT = 3; // 3 = client is launched but not attached to a project (login)
- public static final int SETUP_STATUS_CLOSING = 4; // 4 = client is shutting down
- public static final int SETUP_STATUS_CLOSED = 5; // 5 = client shut down
private Boolean setupStatusParseError = false;
// computing status
@@ -101,8 +99,10 @@ public class ClientStatus {
public Integer networkSuspendReason = 0; //reason why network activity got suspended, only if NETWORK_STATUS_SUSPENDED
private Boolean networkParseError = false; //indicates that status could not be parsed and is therefore invalid
- // supported projects
- private ArrayList<ProjectInfo> supportedProjects = new ArrayList<ProjectInfo>();
+ // notices
+ private ArrayList<Notice> rssNotices = new ArrayList<Notice>();
+ private ArrayList<Notice> serverNotices = new ArrayList<Notice>();
+ private int mostRecentNoticeSeqNo = 0;
public ClientStatus(Context ctx) {
this.ctx = ctx;
@@ -170,7 +170,7 @@ public class ClientStatus {
/*
* called frequently by Monitor to set the RPC data. These objects are used to determine the client status and parse it in the data model of this class.
*/
- public synchronized void setClientStatus(CcStatus status,ArrayList<Result> results,ArrayList<Project> projects, ArrayList<Transfer> transfers, HostInfo hostinfo, AcctMgrInfo acctMgrInfo) {
+ public synchronized void setClientStatus(CcStatus status,ArrayList<Result> results,ArrayList<Project> projects, ArrayList<Transfer> transfers, HostInfo hostinfo, AcctMgrInfo acctMgrInfo, ArrayList<Notice> newNotices) {
this.status = status;
this.results = results;
this.projects = projects;
@@ -178,6 +178,7 @@ public class ClientStatus {
this.hostinfo = hostinfo;
this.acctMgrInfo = acctMgrInfo;
parseClientStatus();
+ appendNewNotices(newNotices);
if(Logging.VERBOSE) Log.v(Logging.TAG,"setClientStatus: #results:" + results.size() + " #projects:" + projects.size() + " #transfers:" + transfers.size() + " // computing: " + computingParseError + computingStatus + computingSuspendReason + " - network: " + networkParseError + networkStatus + networkSuspendReason);
if(!computingParseError && !networkParseError && !setupStatusParseError) {
fire(); // broadcast that status has changed
@@ -204,12 +205,16 @@ public class ClientStatus {
this.prefs = prefs;
}
- public synchronized void setSupportedProjects (ArrayList<ProjectInfo> projects) {
- this.supportedProjects = projects;
+ public int getMostRecentNoticeSeqNo() {
+ return mostRecentNoticeSeqNo;
}
- public synchronized ArrayList<ProjectInfo> getSupportedProjects () {
- return supportedProjects;
+ public synchronized ArrayList<Notice> getRssNotices() {
+ return rssNotices;
+ }
+
+ public synchronized ArrayList<Notice> getServerNotices() {
+ return serverNotices;
}
public synchronized CcStatus getClientStatus() {
@@ -252,6 +257,57 @@ public class ClientStatus {
return projects;
}
+ public synchronized String getProjectStatus(String master_url) {
+ StringBuffer sb = new StringBuffer();
+ for(Project project: projects) {
+ if(!project.master_url.equals(master_url)) continue;
+
+ if (project.suspended_via_gui) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_suspendedviagui));
+ }
+ if (project.dont_request_more_work) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_dontrequestmorework));
+ }
+ if (project.ended) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_ended));
+ }
+ if (project.detach_when_done) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_detachwhendone));
+ }
+ if (project.sched_rpc_pending > 0) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_schedrpcpending));
+ appendToStatus(sb, BOINCUtils.translateRPCReason(ctx, project.sched_rpc_pending));
+ }
+ if (project.scheduler_rpc_in_progress) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_schedrpcinprogress));
+ }
+ if (project.trickle_up_pending) {
+ appendToStatus(sb, ctx.getResources().getString(R.string.projects_status_trickleuppending));
+ }
+
+ Calendar minRPCTime = Calendar.getInstance();
+ Calendar now = Calendar.getInstance();
+ minRPCTime.setTimeInMillis((long)project.min_rpc_time*1000);
+ if (minRPCTime.compareTo(now) > 0) {
+ appendToStatus(
+ sb,
+ ctx.getResources().getString(R.string.projects_status_backoff) + " " +
+ DateUtils.formatElapsedTime((minRPCTime.getTimeInMillis() - now.getTimeInMillis()) / 1000)
+ );
+ }
+ }
+ return sb.toString();
+ }
+
+ private void appendToStatus(StringBuffer existing, String additional) {
+ if (existing.length() == 0) {
+ existing.append(additional);
+ } else {
+ existing.append(", ");
+ existing.append(additional);
+ }
+ }
+
public synchronized HostInfo getHostInfo() {
if(hostinfo == null) {
if(Logging.DEBUG) Log.d(Logging.TAG, "getHostInfo() state is null");
@@ -263,97 +319,41 @@ public class ClientStatus {
public synchronized AcctMgrInfo getAcctMgrInfo() {
return acctMgrInfo; // can be null
}
-
- // updates list of slideshow images of all projects
- // takes list and updates content
- // returns true, if changes found.
- // 126 * 290 pixel from /projects/PNAME/slideshow_appname_n
- // not aware of project or application!
- public synchronized Boolean updateSlideshowImages(ArrayList<ImageWrapper> slideshowImages) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "updateSlideshowImages()");
-
- int maxImagesPerProject = ctx.getResources().getInteger(R.integer.status_max_slideshow_images_per_project);
- Boolean change = false;
-
- // removing images of detached projects
- // use iterator to safely remove while iterating
- Iterator<ImageWrapper> iImage = slideshowImages.iterator();
- Integer counter = 0;
- while(iImage.hasNext()) {
- Boolean found = false;
- ImageWrapper image = iImage.next();
- for (Project project: projects) {
- if(project.project_name.equals(image.projectName)){
- found = true;
- continue;
- }
- }
- if(!found) {
- iImage.remove();
- counter++;
+
+ // returns all slideshow images for given project
+ // images: 126 * 290 pixel from /projects/PNAME/slideshow_appname_n
+ // not aware of application!
+ public synchronized ArrayList<ImageWrapper> getSlideshowForProject(String masterUrl) {
+ ArrayList<ImageWrapper> images = new ArrayList<ImageWrapper>();
+ for(Project project: projects) {
+ if(!project.master_url.equals(masterUrl)) continue;
+ // get file paths of soft link files
+ File dir = new File(project.project_dir);
+ File[] foundFiles = dir.listFiles(new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.startsWith("slideshow_") && !name.endsWith(".png");
+ }
+ });
+ if(foundFiles == null) continue; // prevent NPE
+
+ ArrayList<String> allImagePaths = new ArrayList<String>();
+ for (File file: foundFiles) {
+ String slideshowImagePath = parseSoftLinkToAbsPath(file.getAbsolutePath(), project.project_dir);
+ //check whether path is not empty, and avoid duplicates (slideshow images can
+ //re-occur for multiple apps, since we do not distinct apps, skip duplicates.
+ if(slideshowImagePath != null && !slideshowImagePath.isEmpty() && !allImagePaths.contains(slideshowImagePath)) allImagePaths.add(slideshowImagePath);
+ //if(Logging.DEBUG) Log.d(Logging.TAG, "getSlideshowImages() path: " + slideshowImagePath);
}
- }
- if(Logging.DEBUG) Log.d(Logging.TAG, "updateSlideshowImages() has removed " + counter + " images.");
-
- // adding new images
- counter = 0;
- for (Project project: projects) {
- try{
- // check how many images project is allowed to add
- int numberOfLoadedImages = 0;
- for(ImageWrapper image: slideshowImages){
- if(image.projectName.equals(project.project_name)) numberOfLoadedImages++;
- }
- if(numberOfLoadedImages >= maxImagesPerProject) continue;
-
- // get file paths of soft link files
- File dir = new File(project.project_dir);
- File[] foundFiles = dir.listFiles(new FilenameFilter() {
- public boolean accept(File dir, String name) {
- return name.startsWith("slideshow_") && !name.endsWith(".png");
- }
- });
- if(foundFiles == null) continue; // prevent NPE
-
- ArrayList<String> allImagePaths = new ArrayList<String>();
- for (File file: foundFiles) {
- String slideshowImagePath = parseSoftLinkToAbsPath(file.getAbsolutePath(), project.project_dir);
- //check whether path is not empty, and avoid duplicates (slideshow images can
- //re-occur for multiple apps, since we do not distinct apps, skip duplicates.
- if(slideshowImagePath != null && !slideshowImagePath.isEmpty() && !allImagePaths.contains(slideshowImagePath)) allImagePaths.add(slideshowImagePath);
- //if(Logging.DEBUG) Log.d(Logging.TAG, "getSlideshowImages() path: " + slideshowImagePath);
- }
- //if(Logging.DEBUG) Log.d(Logging.TAG,"getSlideshowImages() retrieve number file paths: " + filePaths.size());
-
- // load images from paths
- for (String filePath : allImagePaths) {
- Boolean load = true;
- if(numberOfLoadedImages >= maxImagesPerProject) load = false;
- // check whether image is new
- for (ImageWrapper image: slideshowImages) {
- if(image.path.equals(filePath)) load = false;
- }
-
- // project is allowed to add new images
- // this image is not loaded yet
- // -> load!
- if(load){
- Bitmap tmp = BitmapFactory.decodeFile(filePath);
- if(tmp!=null) {
- slideshowImages.add(new ImageWrapper(tmp,project.project_name, filePath));
- numberOfLoadedImages++;
- change = true;
- counter++;
- }
- else if(Logging.DEBUG) Log.d(Logging.TAG,"loadSlideshowImagesFromFile(): null for path: " + filePath);
- }
+ //if(Logging.DEBUG) Log.d(Logging.TAG,"getSlideshowImages() retrieve number file paths: " + filePaths.size());
+
+ // load images from paths
+ for (String filePath : allImagePaths) {
+ Bitmap tmp = BitmapFactory.decodeFile(filePath);
+ if(tmp!=null) images.add(new ImageWrapper(tmp,project.project_name, filePath));
+ else if(Logging.DEBUG) Log.d(Logging.TAG,"loadSlideshowImagesFromFile(): null for path: " + filePath);
}
- } catch(Exception e) {if(Logging.WARNING) Log.w(Logging.TAG,"exception for project " + project.master_url,e);}
- catch (OutOfMemoryError oome) {if(Logging.WARNING) Log.w(Logging.TAG,"updateSlideshowImages, OutOfMemeryError");}
}
- if(Logging.DEBUG) Log.d(Logging.TAG, "updateSlideshowImages() has added " + counter + " images.");
- if(Logging.DEBUG) Log.d(Logging.TAG,"updateSlideshowImages() slideshow contains " + slideshowImages.size() + " bitmaps.");
- return change;
+ return images;
}
// returns project icon for given master url
@@ -408,47 +408,132 @@ public class ClientStatus {
return null;
}
- // returns a string describing the current client status.
- // use this method, to harmonize UI text, e.g. in Notification, Status Tab, App Title.
- public String getCurrentStatusString() {
- String statusString = "";
+ public ArrayList<Result> getExecutingTasks() {
+ ArrayList<Result> activeTasks = new ArrayList<Result>();
+ for(Result tmp: results) {
+ if(tmp.active_task && tmp.active_task_state == BOINCDefs.PROCESS_EXECUTING)
+ activeTasks.add(tmp);
+ }
+ return activeTasks;
+ }
+
+ public String getCurrentStatusTitle() {
+ String statusTitle = "";
try {
switch(setupStatus) {
case SETUP_STATUS_AVAILABLE:
switch(computingStatus) {
case COMPUTING_STATUS_COMPUTING:
- statusString = ctx.getString(R.string.status_running);
+ statusTitle = ctx.getString(R.string.status_running);
break;
case COMPUTING_STATUS_IDLE:
- statusString = ctx.getString(R.string.status_idle);
+ statusTitle = ctx.getString(R.string.status_idle);
break;
case COMPUTING_STATUS_SUSPENDED:
- switch(computingSuspendReason) {
- case BOINCDefs.SUSPEND_REASON_USER_REQ:
- // restarting after user has previously manually suspended computation
- statusString = ctx.getString(R.string.suspend_user_req);
- break;
- case BOINCDefs.SUSPEND_REASON_BENCHMARKS:
- statusString = ctx.getString(R.string.status_benchmarking);
- break;
- default:
- statusString = ctx.getString(R.string.status_paused);
- break;
- }
+ statusTitle = ctx.getString(R.string.status_paused);
break;
case COMPUTING_STATUS_NEVER:
- statusString = ctx.getString(R.string.status_computing_disabled);
+ statusTitle = ctx.getString(R.string.status_computing_disabled);
break;
}
break;
- case SETUP_STATUS_CLOSING:
- statusString = ctx.getString(R.string.status_closing);
- break;
case SETUP_STATUS_LAUNCHING:
- statusString = ctx.getString(R.string.status_launching);
+ statusTitle = ctx.getString(R.string.status_launching);
break;
case SETUP_STATUS_NOPROJECT:
- statusString = ctx.getString(R.string.status_noproject);
+ statusTitle = ctx.getString(R.string.status_noproject);
+ break;
+ }
+ } catch (Exception e) {
+ if(Logging.WARNING) Log.w(Logging.TAG, "error parsing setup status string",e);
+ }
+ return statusTitle;
+ }
+
+ public String getCurrentStatusDescription() {
+ String statusString = "";
+ try {
+ switch(computingStatus) {
+ case COMPUTING_STATUS_COMPUTING:
+ statusString = ctx.getString(R.string.status_running_long);
+ break;
+ case COMPUTING_STATUS_IDLE:
+ if(networkSuspendReason == BOINCDefs.SUSPEND_REASON_WIFI_STATE){
+ // Network suspended due to wifi state
+ statusString = ctx.getString(R.string.suspend_wifi);
+ } else if(networkSuspendReason == BOINCDefs.SUSPEND_REASON_NETWORK_QUOTA_EXCEEDED) {
+ // network suspend due to traffic quota
+ statusString = ctx.getString(R.string.suspend_network_quota);
+ } else statusString = ctx.getString(R.string.status_idle_long);
+ break;
+ case COMPUTING_STATUS_SUSPENDED:
+ switch(computingSuspendReason) {
+ case BOINCDefs.SUSPEND_REASON_USER_REQ:
+ // restarting after user has previously manually suspended computation
+ statusString = ctx.getString(R.string.suspend_user_req);
+ break;
+ case BOINCDefs.SUSPEND_REASON_BENCHMARKS:
+ statusString = ctx.getString(R.string.status_benchmarking);
+ break;
+ case BOINCDefs.SUSPEND_REASON_BATTERIES:
+ statusString = ctx.getString(R.string.suspend_batteries);
+ break;
+ case BOINCDefs.SUSPEND_REASON_BATTERY_CHARGING:
+ statusString = ctx.getString(R.string.suspend_battery_charging);
+ try{
+ Double minCharge = prefs.battery_charge_min_pct;
+ Integer currentCharge = Monitor.getDeviceStatus().getStatus().battery_charge_pct;
+ statusString = ctx.getString(R.string.suspend_battery_charging_long) + " " + minCharge.intValue()
+ + "% (" + ctx.getString(R.string.suspend_battery_charging_current) + " " + currentCharge + "%) "
+ + ctx.getString(R.string.suspend_battery_charging_long2);
+ } catch (Exception e) {}
+ break;
+ case BOINCDefs.SUSPEND_REASON_BATTERY_OVERHEATED:
+ statusString = ctx.getString(R.string.suspend_battery_overheating);
+ break;
+ case BOINCDefs.SUSPEND_REASON_USER_ACTIVE:
+ Boolean suspendDueToScreenOn = false;
+ suspendDueToScreenOn = Monitor.getAppPrefs().getSuspendWhenScreenOn();
+ if(suspendDueToScreenOn) statusString = ctx.getString(R.string.suspend_screen_on);
+ else statusString = ctx.getString(R.string.suspend_useractive);
+ break;
+ case BOINCDefs.SUSPEND_REASON_TIME_OF_DAY:
+ statusString = ctx.getString(R.string.suspend_tod);
+ break;
+ case BOINCDefs.SUSPEND_REASON_DISK_SIZE:
+ statusString = ctx.getString(R.string.suspend_disksize);
+ break;
+ case BOINCDefs.SUSPEND_REASON_CPU_THROTTLE:
+ statusString = ctx.getString(R.string.suspend_cputhrottle);
+ break;
+ case BOINCDefs.SUSPEND_REASON_NO_RECENT_INPUT:
+ statusString = ctx.getString(R.string.suspend_noinput);
+ break;
+ case BOINCDefs.SUSPEND_REASON_INITIAL_DELAY:
+ statusString = ctx.getString(R.string.suspend_delay);
+ break;
+ case BOINCDefs.SUSPEND_REASON_EXCLUSIVE_APP_RUNNING:
+ statusString = ctx.getString(R.string.suspend_exclusiveapp);
+ break;
+ case BOINCDefs.SUSPEND_REASON_CPU_USAGE:
+ statusString = ctx.getString(R.string.suspend_cpu);
+ break;
+ case BOINCDefs.SUSPEND_REASON_NETWORK_QUOTA_EXCEEDED:
+ statusString = ctx.getString(R.string.suspend_network_quota);
+ break;
+ case BOINCDefs.SUSPEND_REASON_OS:
+ statusString = ctx.getString(R.string.suspend_os);
+ break;
+ case BOINCDefs.SUSPEND_REASON_WIFI_STATE:
+ statusString = ctx.getString(R.string.suspend_wifi);
+ break;
+ default:
+ statusString = ctx.getString(R.string.suspend_unknown);
+ break;
+ }
+ break;
+ case COMPUTING_STATUS_NEVER:
+ statusString = ctx.getString(R.string.status_computing_disabled_long);
break;
}
} catch (Exception e) {
@@ -555,6 +640,17 @@ public class ClientStatus {
if(Logging.DEBUG) Log.d(Logging.TAG, "ClientStatus error - client network status");
}
}
+
+ private void appendNewNotices(ArrayList<Notice> newNotices) {
+ for(Notice newNotice: newNotices) {
+ if(Logging.DEBUG) Log.d(Logging.TAG,"ClientStatus.appendNewNotices new notice with seq number: " + newNotice.seqno + " is server notice: " + newNotice.isServerNotice);
+ if(newNotice.seqno > mostRecentNoticeSeqNo) {
+ if(!newNotice.isClientNotice && !newNotice.isServerNotice) rssNotices.add(newNotice);
+ if(newNotice.isServerNotice) serverNotices.add(newNotice);
+ mostRecentNoticeSeqNo = newNotice.seqno;
+ }
+ }
+ }
// helper method for loading images from file
// reads the symbolic link provided in pathOfSoftLink file
@@ -601,14 +697,14 @@ public class ClientStatus {
}
// Wrapper for slideshow images
- public class ImageWrapper {
- public Bitmap image;
- public String projectName;
- public String path;
- public ImageWrapper(Bitmap image, String projectName, String path) {
- this.image = image;
- this.projectName = projectName;
- this.path = path;
- }
- }
+// public class ImageWrapper {
+// public Bitmap image;
+// public String projectName;
+// public String path;
+// public ImageWrapper(Bitmap image, String projectName, String path) {
+// this.image = image;
+// this.projectName = projectName;
+// this.path = path;
+// }
+// }
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/DeviceStatus.java b/android/BOINC/src/edu/berkeley/boinc/client/DeviceStatus.java
index a207e0f..f532cbb 100644
--- a/android/BOINC/src/edu/berkeley/boinc/client/DeviceStatus.java
+++ b/android/BOINC/src/edu/berkeley/boinc/client/DeviceStatus.java
@@ -18,7 +18,6 @@
******************************************************************************/
package edu.berkeley.boinc.client;
-import edu.berkeley.boinc.AppPreferences;
import edu.berkeley.boinc.rpc.DeviceStatusData;
import edu.berkeley.boinc.utils.*;
@@ -39,6 +38,7 @@ public class DeviceStatus {
// additional device status
private boolean stationaryDeviceMode = false; // true, if operating in stationary device mode
private boolean stationaryDeviceSuspected = false; // true, if API returns no battery. offer preference to go into stationary device mode
+ private boolean screenOn = true;
// android specifics
private Context ctx;// context required for reading device status
@@ -61,15 +61,17 @@ public class DeviceStatus {
/**
* Updates device status and returns the newly received values
+ * @param screenOn indicator whether device screen is currently on (checked in Monitor)
* @return DeviceStatusData, wrapper for device status
* @throws Exception if error occurs
*/
- public DeviceStatusData update() throws Exception {
+ public DeviceStatusData update(Boolean screenOn) throws Exception {
if(ctx == null) throw new Exception ("DeviceStatus: can not update, Context not set.");
+ this.screenOn = screenOn;
Boolean change = determineBatteryStatus();
change = change | determineNetworkStatus();
- change = change | determinePhoneStatus();
+ change = change | determineUserActive();
if(change) if(Logging.DEBUG) Log.i(Logging.TAG, "change: " + change +
" - stationary device: " + stationaryDeviceMode +
@@ -102,22 +104,31 @@ public class DeviceStatus {
}
/**
- * Determines phone status, i.e. whether user is in an active call
+ * Determines whether user is considered active.
+ * Decision is also based on App preferences. User is considered active, when:
+ * - telephone is active (call)
+ * - screen is on AND preference "suspendWhenScreenOn" set AND NOT preference "stationaryDeviceMode" set
* @return true, if change since last run
* @throws Exception if error occurs
*/
- private Boolean determinePhoneStatus() throws Exception {
+ private Boolean determineUserActive() throws Exception {
Boolean change = false;
+ Boolean newUserActive = status.user_active;
int telStatus = telManager.getCallState();
- if(telStatus == TelephonyManager.CALL_STATE_IDLE) {
- // phone is idle
- if(status.user_active) change = true;
- status.user_active = false;
+
+ if(telStatus != TelephonyManager.CALL_STATE_IDLE) {
+ newUserActive = true;
+ } else if(screenOn && appPrefs.getSuspendWhenScreenOn() && !appPrefs.getStationaryDeviceMode()) {
+ newUserActive = true;
} else {
- // phone is busy, either ringing, or offhook
- if(!status.user_active) change = true;
- status.user_active = true;
+ newUserActive = false;
+ }
+
+ if(status.user_active != newUserActive) {
+ change = true;
+ status.user_active = newUserActive;
}
+
return change;
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/IClientRemoteService.aidl b/android/BOINC/src/edu/berkeley/boinc/client/IClientRemoteService.aidl
deleted file mode 100644
index d882948..0000000
--- a/android/BOINC/src/edu/berkeley/boinc/client/IClientRemoteService.aidl
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * This file is part of BOINC.
- * http://boinc.berkeley.edu
- * Copyright (C) 2012 University of California
- *
- * BOINC is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * BOINC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
-
-/*
- * IClientRemoteService AIDL interface.
- * This AIDL file provides an interface to manage projects in an organized manner.
- * In order to use this interface, bind to edu.berkeley.boinc.client.ClientRemoteService.
- */
-
-package edu.berkeley.boinc.client;
-
-import java.util.List;
-import edu.berkeley.boinc.rpc.AccountOut;
-
-interface IClientRemoteService {
-
- /* Checks whether interface recipient is ready to serve commands.
- * returns success*/
- boolean isReady();
-
- /* Returns the version code specified in AndroidManifest.xml.
- * can be used to detect new AIDL versions.
- * returns version code as Integer*/
- int getVersionCode();
-
-//== project management ==
- /* Attach project to BOINC application.
- * packageName: package name of Android application causing this attach
- * url: project URL
- * id: project login identifier, i.e. email address
- * pwd: project login password in plain text. Password gets encrypted by BOINC before transmitted over the internet.
- * returns success*/
- boolean attachProject(in String packageName, in String url, in String id, in String authenticator);
-
- /* Check whether given project URL is attached to BOINC
- * url: project URL
- * returns success*/
- boolean checkProjectAttached(in String url);
-
- /* Verifies given credentials to project account
- * url: project URL
- * id: project login identifier, i.e. email address
- * pwd: project login password in plain text. Password gets encrypted by BOINC before transmitted over the internet.
- * usesName: set flag if project uses user name instead of email adress for login
- *
- * returns AccountOut object including status code (0:verified, -206:pwd incorrect, -136:id unknown,
- * -113:internet connection error) status message and authenticator required by attachProject*/
- AccountOut verifyCredentials(in String url, in String id, in String pwd, in boolean usesName);
-
- /* Detaches given project from BOINC application.
- * packageName: package name of Android application causing this detach
- * url: project URL
- * returns success*/
- boolean detachProject(in String packageName, in String url);
-
- /* Creates new account at specified project URL
- * url: project URL
- * email: email address
- * userName: user name, optional
- * pwd: project login password in plain text. Password gets encrypted by BOINC before transmitted over the internet.
- * teamName: team name, optional
- *
- * returns AccountOut object including status code, status message and authenticator required by attachProject*/
- AccountOut createAccount(in String url, in String email, in String userName, in String pwd, in String teamName);
-
-//== authentication ==
- /* Retrieval the web-RPC authentication token, required to open a socket connection to the BOINC Client directly.
- * please make sure, you attached all required projects using this interface!
- * returns token, null if error*/
- String getRpcAuthToken();
-}
-
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/IMonitor.aidl b/android/BOINC/src/edu/berkeley/boinc/client/IMonitor.aidl
new file mode 100644
index 0000000..77be728
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/client/IMonitor.aidl
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.client;
+
+import java.util.List;
+import edu.berkeley.boinc.rpc.AccountOut;
+import edu.berkeley.boinc.rpc.AccountIn;
+import edu.berkeley.boinc.rpc.ProjectConfig;
+import edu.berkeley.boinc.rpc.AcctMgrInfo;
+import edu.berkeley.boinc.rpc.Message;
+import edu.berkeley.boinc.rpc.Notice;
+import edu.berkeley.boinc.rpc.Transfer;
+import edu.berkeley.boinc.rpc.GlobalPreferences;
+import edu.berkeley.boinc.rpc.HostInfo;
+import edu.berkeley.boinc.rpc.ProjectInfo;
+import edu.berkeley.boinc.rpc.Project;
+import edu.berkeley.boinc.rpc.Result;
+import edu.berkeley.boinc.rpc.ImageWrapper;
+
+interface IMonitor {
+/////// client interface //////////////////////////////////////////
+boolean attachProject(in String url, in String projectName, in String authenticator); // implement: call clientInterface.attachProject(url, projectName, authenticator);
+boolean checkProjectAttached(in String url); // implement: call clientInterface.checkProjectAttached(url);
+AccountOut lookupCredentials(in AccountIn credentials); // implement: call clientInterface.lookupCredentials(credentials);
+boolean projectOp(in int status, String url); // implement: call clientInterface.projectOp(RpcClient.PROJECT_DETACH,url);
+boolean resultOp(in int op, in String url, in String name); // implement: call clientInterface.resultOp(int, String, String);
+AccountOut createAccountPolling(in AccountIn information); // implement: call clientInterface.createAccountPolling(information);
+String readAuthToken(in String path); // implement: call clientInterface.readAuthToken(String);
+ProjectConfig getProjectConfigPolling(in String url); // implement: call clientInterface.getProjectConfigPolling(url);
+int addAcctMgrErrorNum(in String url, in String userName, in String pwd); // implement: return clientInterface.addAcctMgr(url, userName, pwd).error_num; check return null!=clientInterface.addAcctMgr(url, userName, pwd)
+AcctMgrInfo getAcctMgrInfo(); // implement: call clientInterface.getAcctMgrInfo();
+boolean synchronizeAcctMgr(in String url); // implement: call clientInterface.synchronizeAcctMgr(String);
+boolean setRunMode(in int mode); // implement: call clientInterface.setRunMode(Integer);
+boolean setNetworkMode(in int mode); // implement: call clientInterface.setNetworkMode(Integer);
+List<Message> getEventLogMessages(in int seq, in int num); // implement: call clientInterface.getEventLogMessages(int, Integer);
+List<Message> getMessages(in int seq); // implement: call clientInterface.getMessages(Integer);
+List<Notice> getNotices(in int seq); // implement: call clientInterface.getNotices(int);
+boolean setCcConfig(in String config); // implement: call clientInterface.setCcConfig(String);
+boolean setGlobalPreferences(in GlobalPreferences pref); // implement: call clientInterface.setGlobalPreferences(GlobalPreferences);
+boolean transferOperation(in List<Transfer> list, in int op); // implement: call clientInterface.transferOperation(ArrayList<transfer>, int);
+List<Notice> getServerNotices(); // implement: call clientInterface.getServerNotices()
+boolean runBenchmarks();
+List<ProjectInfo> getAttachableProjects(); // clientInterface.getAttachableProjects();
+ProjectInfo getProjectInfo(String url); // clientInterface.getProjectInfo(String url);
+
+/////// general //////////////////////////////////////////
+void forceRefresh(); // implement: call Monitor.forceRefresh();
+boolean isStationaryDeviceSuspected(); // implement: call Monitor.getDeviceStatus().isStationaryDevice();
+int getBatteryChargeStatus(); // implement: return getDeviceStatus().getStatus().battery_charge_pct;
+String getAuthFilePath(); // implement: return Monitor.getAuthFilePath();
+int getBoincPlatform(); // should be not necessary to be implemented as monitor interface
+void cancelNoticeNotification();
+
+/////// client status //////////////////////////////////////////
+boolean getAcctMgrInfoPresent(); // clientStatus.getAcctMgrInfo().present;
+int getSetupStatus(); // clientStatus.setupStatus;
+int getComputingStatus(); // clientStatus.computingStatus;
+int getComputingSuspendReason(); // clientStatus.computingSuspendReason;
+int getNetworkSuspendReason(); // clientStatus.networkSuspendReason;
+String getCurrentStatusTitle(); // status.getCurrentStatusTitle()
+String getCurrentStatusDescription(); // status.getCurrentStatusDescription()
+HostInfo getHostInfo(); // clientStatus.getHostInfo()
+GlobalPreferences getPrefs(); // clientStatus.getPrefs()
+List<Project> getProjects(); // clientStatus.getProjects();
+AcctMgrInfo getClientAcctMgrInfo(); // clientStatus.getAcctMgrInfo();
+List<Transfer> getTransfers(); // clientStatus.getTransfers();
+List<Result> getTasks(); // clientStatus.getTasks();
+Bitmap getProjectIconByName(in String name); // clientStatus.getProjectIconByName(entries.get(position).project_name);
+Bitmap getProjectIcon(in String id); // clientStatus.getProjectIcon(entries.get(position).id);
+String getProjectStatus(in String url); // clientStatus.getProjectStatus(url);
+List<Notice> getRssNotices(); // clientStatus.getRssNotices();
+List<ImageWrapper> getSlideshowForProject(in String url); // clientStatus.getSlideshowForProject(url);
+
+////// app preference ////////////////////////////////////////////
+void setAutostart(in boolean isAutoStart); // Monitor.getAppPrefs().setAutostart(boolean);
+void setShowNotificationForNotices(in boolean isShow); // Monitor.getAppPrefs().setShowNotificationForNotices(boolean);
+void setShowNotificationDuringSuspend(in boolean isShow); // Monitor.getAppPrefs().setShowNotificationDuringSuspend(boolean);
+boolean getShowAdvanced(); // Monitor.getAppPrefs().getShowAdvanced();
+boolean getAutostart(); // Monitor.getAppPrefs().getAutostart();
+boolean getShowNotificationForNotices(); // Monitor.getAppPrefs().getShowNotificationForNotices();
+boolean getShowNotificationDuringSuspend(); // Monitor.getAppPrefs().getShowNotificationDuringSuspend();
+int getLogLevel(); // Monitor.getAppPrefs().getLogLevel();
+void setLogLevel(in int level); // Monitor.getAppPrefs().setLogLevel(int);
+void setPowerSourceAc(in boolean src); // Monitor.getAppPrefs().setPowerSourceAc(boolean);
+void setPowerSourceUsb(in boolean src); // Monitor.getAppPrefs().setPowerSourceUsb(boolean);
+void setPowerSourceWireless(in boolean src); // Monitor.getAppPrefs().setPowerSourceWireless(boolean);
+boolean getStationaryDeviceMode(); // Monitor.getAppPrefs().getStationaryDeviceMode();
+boolean getPowerSourceAc();
+boolean getPowerSourceUsb();
+boolean getPowerSourceWireless();
+void setShowAdvanced(in boolean isShow);
+void setStationaryDeviceMode(in boolean mode);
+boolean getSuspendWhenScreenOn();
+void setSuspendWhenScreenOn(in boolean swso);
+}
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/Monitor.java b/android/BOINC/src/edu/berkeley/boinc/client/Monitor.java
index 25afcd1..ae6a91c 100644
--- a/android/BOINC/src/edu/berkeley/boinc/client/Monitor.java
+++ b/android/BOINC/src/edu/berkeley/boinc/client/Monitor.java
@@ -19,6 +19,7 @@
package edu.berkeley.boinc.client;
import edu.berkeley.boinc.utils.*;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -29,26 +30,42 @@ import java.io.OutputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
+
import android.app.NotificationManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.os.Binder;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.Bitmap;
+import android.os.AsyncTask;
import android.os.Build;
import android.os.IBinder;
import android.os.PowerManager;
+import android.os.RemoteException;
import android.util.Log;
-import edu.berkeley.boinc.AppPreferences;
import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.SplashActivity;
+import edu.berkeley.boinc.rpc.AccountIn;
+import edu.berkeley.boinc.rpc.AccountOut;
+import edu.berkeley.boinc.rpc.AcctMgrRPCReply;
import edu.berkeley.boinc.rpc.CcState;
import edu.berkeley.boinc.rpc.CcStatus;
import edu.berkeley.boinc.rpc.GlobalPreferences;
+import edu.berkeley.boinc.rpc.HostInfo;
+import edu.berkeley.boinc.rpc.ImageWrapper;
+import edu.berkeley.boinc.rpc.Message;
+import edu.berkeley.boinc.rpc.Notice;
+import edu.berkeley.boinc.rpc.Project;
+import edu.berkeley.boinc.rpc.ProjectConfig;
import edu.berkeley.boinc.rpc.ProjectInfo;
+import edu.berkeley.boinc.rpc.Result;
import edu.berkeley.boinc.rpc.Transfer;
import edu.berkeley.boinc.rpc.AcctMgrInfo;
@@ -63,6 +80,7 @@ public class Monitor extends Service {
private static ClientStatus clientStatus; //holds the status of the client as determined by the Monitor
private static AppPreferences appPrefs; //hold the status of the app, controlled by AppPreferences
+ private static DeviceStatus deviceStatus; // holds the status of the device, i.e. status information that can only be obtained trough Java APIs
public ClientInterfaceImplementation clientInterface = new ClientInterfaceImplementation(); //provides functions for interaction with client via rpc
@@ -78,27 +96,17 @@ public class Monitor extends Service {
private String boincWorkingDir;
private Integer clientStatusInterval;
private Integer deviceStatusIntervalScreenOff;
+ private String clientSocketAddress;
private Timer updateTimer = new Timer(true); // schedules frequent client status update
private TimerTask statusUpdateTask = new StatusUpdateTimerTask();
private boolean updateBroadcastEnabled = true;
- private DeviceStatus deviceStatus = null;
private Integer screenOffStatusOmitCounter = 0;
// screen on/off updated by screenOnOffBroadcastReceiver
private boolean screenOn = false;
-// attributes and methods related to Android Service life-cycle
- /**
- * Extension of Android's Binder class to return instance of this service
- * allows components bound to this service, to access its functions and attributes
- */
- public class LocalBinder extends Binder {
- public Monitor getService() {
- return Monitor.this;
- }
- }
- private final IBinder mBinder = new LocalBinder();
+ private boolean forceReinstall = true; // for debugging purposes //TODO
@Override
public IBinder onBind(Intent intent) {
@@ -108,7 +116,29 @@ public class Monitor extends Service {
@Override
public void onCreate() {
- if(Logging.ERROR) Log.d(Logging.TAG,"Monitor onCreate()");
+
+ Log.d(Logging.TAG,"Monitor onCreate()");
+
+ // check whether PTG is installed, if so, do not start service.
+ // this check has to be similar to SpalshActivity.onCreate()
+ try {
+ getPackageManager().getPackageInfo("com.htc.ptg", 0);
+ if ("com.android.vending".equals(getPackageManager().getInstallerPackageName("com.htc.ptg")) // check if installed through PlayStore
+ || (getPackageManager().getPackageInfo("com.htc.ptg", 0).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) { // check if pre-installed
+ Log.e(Logging.TAG,"Monitor onCreate(): PTG found, do not start.");
+ stopSelf();
+ return;
+ } else Log.w(Logging.TAG,"Monitor.onCreate(): com.htc.ptg found, but unknown vendor, start...");
+ }
+ catch (NameNotFoundException ex) {
+ // catch exception and then skip once Power To Give is not found.
+ }
+
+ // register listener for installation of incompatible apps
+ IntentFilter packageAddedIF = new IntentFilter();
+ packageAddedIF.addAction(Intent.ACTION_PACKAGE_ADDED);
+ packageAddedIF.addDataScheme("package");
+ registerReceiver(packageAddedReceiver, packageAddedIF);
// populate attributes with XML resource values
boincWorkingDir = getString(R.string.client_path);
@@ -120,10 +150,13 @@ public class Monitor extends Service {
fileNameAllProjectsList = getString(R.string.all_projects_list);
clientStatusInterval = getResources().getInteger(R.integer.status_update_interval_ms);
deviceStatusIntervalScreenOff = getResources().getInteger(R.integer.device_status_update_screen_off_every_X_loop);
+ clientSocketAddress = getString(R.string.client_socket_address);
// initialize singleton helper classes and provide application context
clientStatus = new ClientStatus(this);
getAppPrefs().readPrefs(this);
+ deviceStatus = new DeviceStatus(this, getAppPrefs());
+ if(Logging.ERROR) Log.d(Logging.TAG,"Monitor onCreate(): singletons initialized");
// set current screen on/off status
PowerManager pm = (PowerManager)
@@ -149,24 +182,48 @@ public class Monitor extends Service {
public void onDestroy() {
if(Logging.ERROR) Log.d(Logging.TAG,"Monitor onDestroy()");
- // remove screen on/off receiver
- unregisterReceiver(screenOnOffReceiver);
-
- // Cancel the persistent notification.
- ((NotificationManager)getSystemService(Service.NOTIFICATION_SERVICE)).cancel(getResources().getInteger(R.integer.autostart_notification_id));
+ updateBroadcastEnabled = false; // prevent broadcast from currently running update task
+ updateTimer.cancel(); // cancel task
+
+ // there might be still other AsyncTasks executing RPCs
+ // close sockets in a synchronized way
+ clientInterface.close();
+
+ try {
+ unregisterReceiver(packageAddedReceiver);
+ // remove screen on/off receiver
+ unregisterReceiver(screenOnOffReceiver);
+ } catch (Exception ex) {}
updateBroadcastEnabled = false; // prevent broadcast from currently running update task
updateTimer.cancel(); // cancel task
// release locks, if held.
- clientStatus.setWakeLock(false);
- clientStatus.setWifiLock(false);
+ try {
+ clientStatus.setWakeLock(false);
+ clientStatus.setWifiLock(false);
+ } catch (Exception ex) {}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//this gets called after startService(intent) (either by BootReceiver or AndroidBOINCActivity, depending on the user's autostart configuration)
if(Logging.ERROR) Log.d(Logging.TAG, "Monitor onStartCommand()");
+
+ // execute action if one is explicitly requested (e.g. from notification)
+ if(intent != null) {
+ int actionCode = intent.getIntExtra("action", -1);
+ if(Logging.DEBUG) Log.d(Logging.TAG, "Monitor.onStartCommand() with action code: " + actionCode);
+ switch(actionCode) {
+ case 1: // suspend
+ new SetClientRunModeAsync().execute(BOINCDefs.RUN_MODE_NEVER);
+ break;
+ case 2: // resume
+ new SetClientRunModeAsync().execute(BOINCDefs.RUN_MODE_AUTO);
+ break;
+ }
+ }
+
/*
* START_STICKY causes service to stay in memory until stopSelf() is called, even if all
* Activities get destroyed by the system. Important for GUI keep-alive
@@ -203,47 +260,25 @@ public class Monitor extends Service {
}
return appPrefs;
}
+
+ /**
+ * Retrieve singleton of DeviceStatus.
+ * @return DeviceStatus, represents data model of device information reported to the client
+ * @throws Exception if deviceStatus hast not been initialized
+ */
+ public static DeviceStatus getDeviceStatus() throws Exception {//singleton pattern
+ if (deviceStatus == null) {
+ // device status needs application context, but context might not be available
+ // in static code. functions have to deal with Exception!
+ if(Logging.WARNING) Log.w(Logging.TAG,"getDeviceStatus: deviceStatus not yet initialized");
+ throw new Exception("deviceStatus not initialized");
+ }
+ return deviceStatus;
+ }
// --end-- singleton getter
// public methods for Activities
/**
- * read BOINC's all_project_list.xml and filters output for device's BOINC platform
- * stores list of projects in ClienStatus class.
- * Content does not change during runtime, call only upon start.
- */
- public void readAndroidProjectsList() {
- // try to get current client status from monitor
- ClientStatus status;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"Monitor.readAndroidProjectList: Could not load data, clientStatus not initialized.");
- return;
- }
-
- ArrayList<ProjectInfo> allProjects = clientInterface.getAllProjectsList();
- ArrayList<ProjectInfo> androidProjects = new ArrayList<ProjectInfo>();
-
- if(allProjects == null) return;
-
- String platform = getString(getBoincPlatform());
- if(Logging.DEBUG) Log.d(Logging.TAG, "readAndroidProjectsList for platform: " + platform);
-
- //filter projects that do not support Android
- for (ProjectInfo project: allProjects) {
- for(String supportedPlatform: project.platforms) {
- if(supportedPlatform.contains(platform) && !androidProjects.contains(project)) {
- androidProjects.add(project);
- break;
- }
- }
- }
-
- // set list in ClientStatus
- status.setSupportedProjects(androidProjects);
- }
-
- /**
* Force refresh of client status data model, will fire Broadcast upon success.
*/
public void forceRefresh() {
@@ -252,66 +287,6 @@ public class Monitor extends Service {
updateTimer.schedule(new StatusUpdateTimerTask(), 0);
} catch (Exception e){} // throws IllegalStateException if called after timer got cancelled, i.e. after manual shutdown
}
-
- /**
- * Quit BOINC client.
- * Tries to quit BOINC client process gracefully, kills the process if no reaction within defined time frame
- */
- public void quitClient() {
- // try to get current client status from monitor
- ClientStatus status = null;
- try{
- status = Monitor.getClientStatus();
- } catch (Exception e){
- if(Logging.WARNING) Log.w(Logging.TAG,"Monitor.quitClient: Could not load data, clientStatus not initialized.");
- // do not return here, try to shut down without publishing status
- }
- String processName = boincWorkingDir + fileNameClient;
-
- updateBroadcastEnabled = false; // prevent broadcast from currently running update task
- updateTimer.cancel(); // cancel task
- // no scheduled RPCs anymore
-
- // set client status to SETUP_STATUS_CLOSING to adapt layout accordingly
- if(status!=null)status.setSetupStatus(ClientStatus.SETUP_STATUS_CLOSING,true);
-
- // try graceful shutdown via RPC
- clientInterface.quit();
-
- // there might be still other AsyncTasks executing RPCs
- // close sockets in a synchronized way
- clientInterface.close();
- // there are now no more RPCs...
-
- // graceful RPC shutdown waiting period...
- Boolean success = false;
- Integer attempts = getApplicationContext().getResources().getInteger(R.integer.shutdown_graceful_rpc_check_attempts);
- Integer sleepPeriod = getApplicationContext().getResources().getInteger(R.integer.shutdown_graceful_rpc_check_rate_ms);
- for(int x = 0; x < attempts; x++) {
- try {
- Thread.sleep(sleepPeriod);
- } catch (Exception e) {}
- if(getPidForProcessName(processName) == null) { //client is now closed
- if(Logging.DEBUG) Log.d(Logging.TAG,"quitClient: gracefull RPC shutdown successful after " + x + " seconds");
- success = true;
- x = attempts;
- }
- }
-
- if(!success) {
- // graceful RPC shutdown was not successful, try OS signals
- quitProcessOsLevel(processName);
- }
-
- // cancel notification
- ClientNotification.getInstance(getApplicationContext()).cancel();
-
- // set client status to SETUP_STATUS_CLOSED to adapt layout accordingly
- if(status!=null)status.setSetupStatus(ClientStatus.SETUP_STATUS_CLOSED,true);
-
- //stop service, triggers onDestroy
- stopSelf();
- }
/**
* Determines BOINC platform name corresponding to device's cpu architecture (ARM, x86 or MIPS).
@@ -341,17 +316,6 @@ public class Monitor extends Service {
public String getAuthFilePath(){
return boincWorkingDir + fileNameGuiAuthentication;
}
-
- /**
- * Returns DeviceStatus class. Initializes it, if necessary.
- * @return device status class. containing the current status data
- */
- public DeviceStatus getDeviceStatus() {
- if(deviceStatus == null) {
- deviceStatus = new DeviceStatus(getApplicationContext(), getAppPrefs());
- }
- return deviceStatus;
- }
// --end-- public methods for Activities
// multi-threaded frequent information polling
@@ -397,16 +361,7 @@ public class Monitor extends Service {
*/
private void readClientStatus(Boolean forceCompleteUpdate) {
try{
- // read ccStatus and adjust wakelocks and service state independently of screen status
- // wake locks and foreground enabled when Client is not suspended, therefore also during
- // idle.
- CcStatus status = clientInterface.getCcStatus();
- // treat cpu throttling as if it was computing
- Boolean computing = (status.task_suspend_reason == BOINCDefs.SUSPEND_NOT_SUSPENDED) || (status.task_suspend_reason == BOINCDefs.SUSPEND_REASON_CPU_THROTTLE);
- if(Logging.VERBOSE) Log.d(Logging.TAG,"readClientStatus(): computation enabled: " + computing);
- Monitor.getClientStatus().setWifiLock(computing);
- Monitor.getClientStatus().setWakeLock(computing);
- ClientNotification.getInstance(getApplicationContext()).setForeground(computing, this);
+ CcStatus status; // read independently of screen status
// complete status read, depending on screen status
// screen off: only read computing status to adjust wakelock, do not send broadcast
@@ -415,14 +370,14 @@ public class Monitor extends Service {
if(screenOn || forceCompleteUpdate) {
// complete status read, with broadcast
if(Logging.VERBOSE) Log.d(Logging.TAG, "readClientStatus(): screen on, get complete status");
+ status = clientInterface.getCcStatus();
CcState state = clientInterface.getState();
ArrayList<Transfer> transfers = clientInterface.getFileTransfers();
AcctMgrInfo acctMgrInfo = clientInterface.getAcctMgrInfo();
+ ArrayList<Notice> newNotices = clientInterface.getNotices(Monitor.getClientStatus().getMostRecentNoticeSeqNo());
if( (status != null) && (state != null) && (state.results != null) && (state.projects != null) && (transfers != null) && (state.host_info != null) && (acctMgrInfo != null)) {
- Monitor.getClientStatus().setClientStatus(status, state.results, state.projects, transfers, state.host_info, acctMgrInfo);
- // Update status bar notification
- ClientNotification.getInstance(getApplicationContext()).update();
+ Monitor.getClientStatus().setClientStatus(status, state.results, state.projects, transfers, state.host_info, acctMgrInfo, newNotices);
} else {
String nullValues = "";
try{
@@ -436,13 +391,29 @@ public class Monitor extends Service {
if(Logging.ERROR) Log.e(Logging.TAG, "readClientStatus(): connection problem, null: " + nullValues);
}
+ // update notices notification
+ NoticeNotification.getInstance(getApplicationContext()).update(Monitor.getClientStatus().getRssNotices(), Monitor.getAppPrefs().getShowNotificationForNotices());
+
// check whether monitor is still intended to update, if not, skip broadcast and exit...
if(updateBroadcastEnabled) {
Intent clientStatus = new Intent();
clientStatus.setAction("edu.berkeley.boinc.clientstatus");
getApplicationContext().sendBroadcast(clientStatus);
}
- }
+ } else {
+ // read only ccStatus to adjust wakelocks and service state independently of screen status
+ status = clientInterface.getCcStatus();
+ }
+
+ // independent of screen on off:
+ // wake locks and foreground enabled when Client is not suspended, therefore also during
+ // idle.
+ // treat cpu throttling as if it was computing.
+ Boolean computing = (status.task_suspend_reason == BOINCDefs.SUSPEND_NOT_SUSPENDED) || (status.task_suspend_reason == BOINCDefs.SUSPEND_REASON_CPU_THROTTLE);
+ if(Logging.VERBOSE) Log.d(Logging.TAG,"readClientStatus(): computation enabled: " + computing);
+ Monitor.getClientStatus().setWifiLock(computing);
+ Monitor.getClientStatus().setWakeLock(computing);
+ ClientNotification.getInstance(getApplicationContext()).update(Monitor.getClientStatus(), this, computing);
}catch(Exception e) {
if(Logging.ERROR) Log.e(Logging.TAG, "Monitor.readClientStatus excpetion: " + e.getMessage(),e);
@@ -460,7 +431,7 @@ public class Monitor extends Service {
try{
// set devices status
if(deviceStatus != null) { // make sure deviceStatus is initialized
- Boolean reportStatusSuccess = clientInterface.reportDeviceStatus(deviceStatus.update()); // transmit device status via rpc
+ Boolean reportStatusSuccess = clientInterface.reportDeviceStatus(deviceStatus.update(screenOn)); // transmit device status via rpc
if(reportStatusSuccess) screenOffStatusOmitCounter = 0;
else if(Logging.DEBUG) Log.d(Logging.TAG,"reporting device status returned false.");
} else if(Logging.WARNING) Log.w(Logging.TAG,"reporting device status failed, wrapper not initialized.");
@@ -501,7 +472,7 @@ public class Monitor extends Service {
// If client hashes do not match, we need to install the one that is a part
// of the package. Shutdown the currently running client if needed.
//
- if (!md5InstalledClient.equals(md5AssetClient)) {
+ if (forceReinstall || !md5InstalledClient.equals(md5AssetClient)) {
if(Logging.DEBUG) Log.d(Logging.TAG,"Hashes of installed client does not match binary in assets - re-install.");
// try graceful shutdown using RPC (faster)
@@ -561,26 +532,29 @@ public class Monitor extends Service {
} catch (Exception e) {}
}
+ Boolean init = false;
if(connected) { // connection established
- // make client read override settings from file
- clientInterface.readGlobalPrefsOverride();
- // read preferences for GUI to be able to display data
- GlobalPreferences clientPrefs = clientInterface.getGlobalPrefsWorkingStruct();
- status.setPrefs(clientPrefs);
- // read supported projects
- readAndroidProjectsList();
- // set Android model as hostinfo
- // should output something like "Samsung Galaxy SII - SDK:15 ABI:armeabi-v7a"
- String model = Build.MANUFACTURER + " " + Build.MODEL + " - SDK:" + Build.VERSION.SDK_INT + " ABI: " + Build.CPU_ABI;
- if(Logging.DEBUG) Log.d(Logging.TAG,"reporting hostinfo model name: " + model);
- clientInterface.setHostInfo(model);
- }
-
- if(connected) {
+ try {
+ // read preferences for GUI to be able to display data
+ GlobalPreferences clientPrefs = clientInterface.getGlobalPrefsWorkingStruct();
+ if(clientPrefs == null) throw new Exception("client prefs null");
+ status.setPrefs(clientPrefs);
+
+ // set Android model as hostinfo
+ // should output something like "Samsung Galaxy SII - SDK:15 ABI:armeabi-v7a"
+ String model = Build.MANUFACTURER + " " + Build.MODEL + " - SDK:" + Build.VERSION.SDK_INT + " ABI: " + Build.CPU_ABI;
+ if(Logging.DEBUG) Log.d(Logging.TAG,"reporting hostinfo model name: " + model);
+ clientInterface.setHostInfo(model);
+
+ init = true;
+ } catch(Exception e) {if(Logging.ERROR) Log.e(Logging.TAG,"Monitor.clientSetup() init failed: " + e.getMessage());}
+ }
+
+ if(init) {
if(Logging.DEBUG) Log.d(Logging.TAG, "setup completed successfully");
status.setSetupStatus(ClientStatus.SETUP_STATUS_AVAILABLE,false);
} else {
- if(Logging.DEBUG) Log.d(Logging.TAG, "onPostExecute - setup experienced an error");
+ if(Logging.ERROR) Log.e(Logging.TAG, "onPostExecute - setup experienced an error");
status.setSetupStatus(ClientStatus.SETUP_STATUS_ERROR,true);
}
@@ -595,10 +569,11 @@ public class Monitor extends Service {
private Boolean runClient() {
Boolean success = false;
try {
- String[] cmd = new String[2];
+ String[] cmd = new String[3];
cmd[0] = boincWorkingDir + fileNameClient;
cmd[1] = "--daemon";
+ cmd[2] = "--gui_rpc_unix_domain";
Runtime.getRuntime().exec(cmd, null, new File(boincWorkingDir));
success = true;
@@ -616,16 +591,16 @@ public class Monitor extends Service {
private Boolean connectClient() {
Boolean success = false;
- success = clientInterface.connect();
+ success = clientInterface.open(clientSocketAddress);
if(!success) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "connection failed!");
+ if(Logging.ERROR) Log.e(Logging.TAG, "connection failed!");
return success;
}
//authorize
success = clientInterface.authorizeGuiFromFile(boincWorkingDir + fileNameGuiAuthentication);
if(!success) {
- if(Logging.DEBUG) Log.d(Logging.TAG, "authorization failed!");
+ if(Logging.ERROR) Log.e(Logging.TAG, "authorization failed!");
}
return success;
}
@@ -887,7 +862,7 @@ public class Monitor extends Service {
}
// --end-- BOINC client installation and run-time management
-// screen on/off receiver
+// broadcast receiver
/**
* broadcast receiver to detect changes to screen on or off, used to adapt scheduling of StatusUpdateTimerTask
* e.g. avoid polling GUI status RPCs while screen is off in order to save battery
@@ -898,6 +873,9 @@ public class Monitor extends Service {
String action = intent.getAction();
if(action.equals(Intent.ACTION_SCREEN_OFF)) {
screenOn = false;
+ // forces report of device status at next scheduled update
+ // allows timely reaction to screen off for resume of computation
+ screenOffStatusOmitCounter = deviceStatusIntervalScreenOff;
if(Logging.DEBUG) Log.d(Logging.TAG, "screenOnOffReceiver: screen turned off");
}
if(action.equals(Intent.ACTION_SCREEN_ON)) {
@@ -907,5 +885,411 @@ public class Monitor extends Service {
}
}
};
-// --end-- screen on/off receiver
+
+ /**
+ * broadcast receiver to detect added/installed packages. If package not compatible with BOINC
+ * shutdown service.
+ */
+ BroadcastReceiver packageAddedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
+ if (intent.hasExtra(Intent.EXTRA_UID)) {
+ int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
+ if (uid > -1) {
+ String[] packages = context.getPackageManager().getPackagesForUid(uid);
+ for (String pkg : packages) {
+ if (pkg.equals("com.htc.ptg")) {
+ if(Logging.ERROR) Log.d(Logging.TAG,"packageAddedReceiver: PTG added, stop Monitor...");
+ // cancel notifications
+ NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
+ nm.cancelAll();
+ // cancel async task
+ statusUpdateTask.cancel();
+ // open exit splash activity. implies destruction (and unbound) of all others
+ Intent exitSplash = new Intent(getApplicationContext(),SplashActivity.class);
+ exitSplash.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ startActivity(exitSplash);
+ stopSelf();
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+// --end-- broadcast receiver
+
+// async tasks
+ private final class SetClientRunModeAsync extends AsyncTask<Integer, Void, Void> {
+ @Override
+ protected Void doInBackground(Integer... params) {
+ try {
+ mBinder.setRunMode(params[0]);
+ } catch (RemoteException e) {}
+ return null;
+ }
+ }
+// --end -- async tasks
+
+// remote service
+ private final IMonitor.Stub mBinder = new IMonitor.Stub() {
+
+ @Override
+ public boolean transferOperation(List<Transfer> list, int op) throws RemoteException {
+ return clientInterface.transferOperation((ArrayList<Transfer>)list, op);
+ }
+
+ @Override
+ public boolean synchronizeAcctMgr(String url) throws RemoteException {
+ return clientInterface.synchronizeAcctMgr(url);
+ }
+
+ @Override
+ public boolean setRunMode(int mode) throws RemoteException {
+ return clientInterface.setRunMode(mode);
+ }
+
+ @Override
+ public boolean setNetworkMode(int mode) throws RemoteException {
+ return clientInterface.setNetworkMode(mode);
+ }
+
+ @Override
+ public boolean setGlobalPreferences(GlobalPreferences pref)
+ throws RemoteException {
+ return clientInterface.setGlobalPreferences(pref);
+ }
+
+ @Override
+ public boolean setCcConfig(String config) throws RemoteException {
+ return clientInterface.setCcConfig(config);
+ }
+
+ @Override
+ public boolean resultOp(int op, String url, String name)
+ throws RemoteException {
+ return clientInterface.resultOp(op, url, name);
+ }
+
+ @Override
+ public String readAuthToken(String path) throws RemoteException {
+ return clientInterface.readAuthToken(path);
+ }
+
+ @Override
+ public boolean projectOp(int status, String url) throws RemoteException {
+ return clientInterface.projectOp(status, url);
+ }
+
+ @Override
+ public int getBoincPlatform() throws RemoteException {
+ return Monitor.this.getBoincPlatform();
+ }
+
+ @Override
+ public AccountOut lookupCredentials(AccountIn credentials) throws RemoteException {
+ return clientInterface.lookupCredentials(credentials);
+ }
+
+ @Override
+ public boolean isStationaryDeviceSuspected() throws RemoteException {
+ try {
+ return Monitor.getDeviceStatus().isStationaryDeviceSuspected();
+ } catch (Exception e) {}
+ return false;
+ }
+
+ @Override
+ public List<Notice> getServerNotices() throws RemoteException {
+ return clientStatus.getServerNotices();
+ }
+
+ @Override
+ public ProjectConfig getProjectConfigPolling(String url)
+ throws RemoteException {
+ return clientInterface.getProjectConfigPolling(url);
+ }
+
+ @Override
+ public List<Notice> getNotices(int seq) throws RemoteException {
+ return clientInterface.getNotices(seq);
+ }
+
+ @Override
+ public List<Message> getMessages(int seq) throws RemoteException {
+ return clientInterface.getMessages(seq);
+ }
+
+ @Override
+ public List<Message> getEventLogMessages(int seq, int num)
+ throws RemoteException {
+ return clientInterface.getEventLogMessages(seq, num);
+ }
+
+ @Override
+ public int getBatteryChargeStatus() throws RemoteException{
+ try {
+ return getDeviceStatus().getStatus().battery_charge_pct;
+ } catch (Exception e) {}
+ return 0;
+ }
+
+ @Override
+ public AcctMgrInfo getAcctMgrInfo() throws RemoteException {
+ return clientInterface.getAcctMgrInfo();
+ }
+
+ @Override
+ public void forceRefresh() throws RemoteException {
+ Monitor.this.forceRefresh();
+ }
+
+ @Override
+ public AccountOut createAccountPolling(AccountIn information) throws RemoteException {
+ return clientInterface.createAccountPolling(information);
+ }
+
+ @Override
+ public boolean checkProjectAttached(String url) throws RemoteException {
+ return clientInterface.checkProjectAttached(url);
+ }
+
+ @Override
+ public boolean attachProject(String url, String projectName, String authenticator)
+ throws RemoteException {
+ return clientInterface.attachProject(url, projectName, authenticator);
+ }
+
+ @Override
+ public int addAcctMgrErrorNum(String url, String userName, String pwd)
+ throws RemoteException {
+ AcctMgrRPCReply acctMgr =clientInterface.addAcctMgr(url, userName, pwd);
+ if (acctMgr!=null) {
+ return acctMgr.error_num;
+ }
+ return -1;
+ }
+
+ @Override
+ public String getAuthFilePath() throws RemoteException {
+ return Monitor.this.getAuthFilePath();
+ }
+
+ @Override
+ public List<ProjectInfo> getAttachableProjects() throws RemoteException {
+ return clientInterface.getAttachableProjects(getString(getBoincPlatform()));
+ }
+
+ @Override
+ public boolean getAcctMgrInfoPresent() throws RemoteException {
+ return clientStatus.getAcctMgrInfo().present;
+ }
+
+ @Override
+ public int getSetupStatus() throws RemoteException {
+ return clientStatus.setupStatus;
+ }
+
+ @Override
+ public int getComputingStatus() throws RemoteException {
+ return clientStatus.computingStatus;
+ }
+
+ @Override
+ public int getComputingSuspendReason() throws RemoteException {
+ return clientStatus.computingSuspendReason;
+ }
+
+ @Override
+ public int getNetworkSuspendReason() throws RemoteException {
+ return clientStatus.networkSuspendReason;
+ }
+
+ @Override
+ public HostInfo getHostInfo() throws RemoteException {
+ return clientStatus.getHostInfo();
+ }
+
+ @Override
+ public GlobalPreferences getPrefs() throws RemoteException {
+ return clientStatus.getPrefs();
+ }
+
+ @Override
+ public List<Project> getProjects() throws RemoteException {
+ return clientStatus.getProjects();
+ }
+
+ @Override
+ public AcctMgrInfo getClientAcctMgrInfo() throws RemoteException {
+ return clientStatus.getAcctMgrInfo();
+ }
+
+ @Override
+ public List<Transfer> getTransfers() throws RemoteException {
+ return clientStatus.getTransfers();
+ }
+
+ @Override
+ public void setAutostart(boolean isAutoStart) throws RemoteException {
+ Monitor.getAppPrefs().setAutostart(isAutoStart);
+ }
+
+ @Override
+ public void setShowNotificationForNotices(boolean isShow) throws RemoteException {
+ Monitor.getAppPrefs().setShowNotificationForNotices(isShow);
+ }
+
+ @Override
+ public boolean getShowAdvanced() throws RemoteException {
+ return Monitor.getAppPrefs().getShowAdvanced();
+ }
+
+ @Override
+ public boolean getAutostart() throws RemoteException {
+ return Monitor.getAppPrefs().getAutostart();
+ }
+
+ @Override
+ public boolean getShowNotificationForNotices() throws RemoteException {
+ return Monitor.getAppPrefs().getShowNotificationForNotices();
+ }
+
+ @Override
+ public int getLogLevel() throws RemoteException {
+ return Monitor.getAppPrefs().getLogLevel();
+ }
+
+ @Override
+ public void setLogLevel(int level) throws RemoteException {
+ Monitor.getAppPrefs().setLogLevel(level);
+ }
+
+ @Override
+ public void setPowerSourceAc(boolean src) throws RemoteException {
+ Monitor.getAppPrefs().setPowerSourceAc(src);
+ }
+
+ @Override
+ public void setPowerSourceUsb(boolean src) throws RemoteException {
+ Monitor.getAppPrefs().setPowerSourceUsb(src);
+ }
+
+ @Override
+ public void setPowerSourceWireless(boolean src) throws RemoteException {
+ Monitor.getAppPrefs().setPowerSourceWireless(src);
+ }
+
+ @Override
+ public List<Result> getTasks() throws RemoteException {
+ return clientStatus.getTasks();
+ }
+
+ @Override
+ public String getProjectStatus(String url) throws RemoteException {
+ return clientStatus.getProjectStatus(url);
+ }
+
+ @Override
+ public List<Notice> getRssNotices() throws RemoteException {
+ return clientStatus.getRssNotices();
+ }
+
+ @Override
+ public List<ImageWrapper> getSlideshowForProject(String url)
+ throws RemoteException {
+ return clientStatus.getSlideshowForProject(url);
+ }
+
+ @Override
+ public boolean getStationaryDeviceMode() throws RemoteException {
+ return Monitor.getAppPrefs().getStationaryDeviceMode();
+ }
+
+ @Override
+ public boolean getPowerSourceAc() throws RemoteException {
+ return Monitor.getAppPrefs().getPowerSourceAc();
+ }
+
+ @Override
+ public boolean getPowerSourceUsb() throws RemoteException {
+ return Monitor.getAppPrefs().getPowerSourceUsb();
+ }
+
+ @Override
+ public boolean getPowerSourceWireless() throws RemoteException {
+ return Monitor.getAppPrefs().getPowerSourceWireless();
+ }
+
+ @Override
+ public void setShowAdvanced(boolean isShow) throws RemoteException {
+ Monitor.getAppPrefs().setShowAdvanced(isShow);
+ }
+
+ @Override
+ public void setStationaryDeviceMode(boolean mode)
+ throws RemoteException {
+ Monitor.getAppPrefs().setStationaryDeviceMode(mode);
+
+ }
+
+ @Override
+ public Bitmap getProjectIconByName(String name) throws RemoteException {
+ return clientStatus.getProjectIconByName(name);
+ }
+
+ @Override
+ public Bitmap getProjectIcon(String id) throws RemoteException {
+ return clientStatus.getProjectIcon(id);
+ }
+
+ @Override
+ public boolean getSuspendWhenScreenOn() throws RemoteException {
+ return Monitor.getAppPrefs().getSuspendWhenScreenOn();
+ }
+
+ @Override
+ public void setSuspendWhenScreenOn(boolean swso) throws RemoteException {
+ Monitor.getAppPrefs().setSuspendWhenScreenOn(swso);
+ }
+
+ @Override
+ public String getCurrentStatusTitle() throws RemoteException {
+ return clientStatus.getCurrentStatusTitle();
+ }
+
+ @Override
+ public String getCurrentStatusDescription() throws RemoteException {
+ return clientStatus.getCurrentStatusDescription();
+ }
+
+ @Override
+ public void cancelNoticeNotification() throws RemoteException {
+ NoticeNotification.getInstance(getApplicationContext()).cancelNotification();
+ }
+
+ @Override
+ public void setShowNotificationDuringSuspend(boolean isShow) throws RemoteException {
+ Monitor.getAppPrefs().setShowNotificationDuringSuspend(isShow);
+
+ }
+
+ @Override
+ public boolean getShowNotificationDuringSuspend() throws RemoteException {
+ return Monitor.getAppPrefs().getShowNotificationDuringSuspend();
+ }
+
+ @Override
+ public boolean runBenchmarks() throws RemoteException {
+ return clientInterface.runBenchmarks();
+ }
+
+ @Override
+ public ProjectInfo getProjectInfo(String url) throws RemoteException {
+ return clientInterface.getProjectInfo(url);
+ }
+ };
+// --end-- remote service
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/NoticeNotification.java b/android/BOINC/src/edu/berkeley/boinc/client/NoticeNotification.java
new file mode 100644
index 0000000..eb74f18
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/client/NoticeNotification.java
@@ -0,0 +1,149 @@
+package edu.berkeley.boinc.client;
+
+import java.util.ArrayList;
+import edu.berkeley.boinc.BOINCActivity;
+import edu.berkeley.boinc.R;
+import edu.berkeley.boinc.rpc.Notice;
+import android.annotation.SuppressLint;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.support.v4.app.NotificationCompat;
+
+public class NoticeNotification {
+
+ private static NoticeNotification noticeNotification = null;
+
+ private Context context;
+ private PersistentStorage store;
+ private NotificationManager nm;
+ private Integer notificationId;
+ private PendingIntent contentIntent;
+ private Notification n;
+
+ private ArrayList<Notice> currentlyNotifiedNotices = new ArrayList<Notice>();
+ private Boolean isNotificationShown = false;
+
+ //private Boolean debug = true;
+ /**
+ * Returns a reference to a singleton noticeNotification object.
+ * Constructs a new instance of the noticeNotification if not already constructed.
+ * @return noticeNotification static instance
+ */
+ public static NoticeNotification getInstance(Context ctx) {
+ if (noticeNotification == null) {
+ noticeNotification = new NoticeNotification(ctx);
+ }
+ return noticeNotification;
+ }
+
+ public NoticeNotification (Context ctx) {
+ this.context = ctx;
+ this.store = new PersistentStorage(ctx);
+ this.nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationId = context.getResources().getInteger(R.integer.notice_notification_id);
+ Intent intent = new Intent(context, BOINCActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ intent.putExtra("targetFragment", R.string.tab_notices);
+ contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ /**
+ * cancels currently shown notice and clears data
+ * called when user clicks notice
+ */
+ public void cancelNotification() {
+ if(isNotificationShown) {
+ nm.cancel(notificationId);
+ isNotificationShown = false;
+ currentlyNotifiedNotices.clear();
+ }
+ }
+
+ /**
+ * Updates notification with current notices
+ */
+ public void update(ArrayList<Notice> notices, Boolean isPreferenceEnabled) {
+
+ if(!isPreferenceEnabled) {
+ if(isNotificationShown) {
+ nm.cancel(notificationId);
+ isNotificationShown = false;
+ }
+ return;
+ }
+
+ // filter new notices
+ Boolean newNotice = false;
+ double mostRecentSeenArrivalTime = 0;
+ double lastNotifiedArrivalTime = store.getLastNotifiedNoticeArrivalTime();
+ /*
+ if(debug) {
+ lastNotifiedArrivalTime = 0;
+ debug = false;
+ }*/
+ for(Notice tmp : notices) {
+ if(tmp.arrival_time > lastNotifiedArrivalTime) {
+ // multiple new notices might have same arrival time -> write back after adding all
+ currentlyNotifiedNotices.add(tmp);
+ newNotice = true;
+ if(tmp.arrival_time > mostRecentSeenArrivalTime) mostRecentSeenArrivalTime = tmp.arrival_time;
+ }
+ }
+
+ if(newNotice) {
+ // new notices came in
+ store.setLastNotifiedNoticeArrivalTime(mostRecentSeenArrivalTime);
+ nm.notify(notificationId, buildNotification());
+ isNotificationShown = true;
+ }
+ }
+
+ @SuppressLint("InlinedApi")
+ private Notification buildNotification() {
+ // build new notification from scratch every time a notice arrives
+ NotificationCompat.Builder nb = new NotificationCompat.Builder(context);
+
+ if(currentlyNotifiedNotices.size() == 1) {
+ // single notice view
+ nb.setContentTitle(context.getString(R.string.notice_notification_single_header) + " " + currentlyNotifiedNotices.get(0).project_name)
+ .setContentText(currentlyNotifiedNotices.get(0).title)
+ .setSmallIcon(R.drawable.mailw)
+ .setContentIntent(contentIntent);
+
+ // scale project image
+ try {
+ Bitmap unscaled = Monitor.getClientStatus().getProjectIconByName(currentlyNotifiedNotices.get(0).project_name);
+ if(unscaled != null) {
+ Bitmap scaled = Bitmap.createScaledBitmap(unscaled, unscaled.getWidth() * 2, unscaled.getHeight() * 2, false);
+ nb.setLargeIcon(scaled);
+ } else {
+ nb.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_notify_boinc_normal));
+ }
+ } catch (Exception e) {}
+ } else {
+ // multi notice view
+ nb.setContentTitle(currentlyNotifiedNotices.size() + " " + context.getString(R.string.notice_notification_multiple_header))
+ .setNumber(currentlyNotifiedNotices.size())
+ .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_stat_notify_boinc_normal))
+ .setSmallIcon(R.drawable.mailw)
+ .setContentIntent(contentIntent)
+ .setSubText(context.getString(R.string.app_name));
+
+ // append notice titles to list
+ NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
+ for(Notice tmp: currentlyNotifiedNotices) {
+ inboxStyle.addLine(tmp.project_name + ": " + tmp.title);
+ }
+ nb.setStyle(inboxStyle);
+ }
+
+ n = nb.build();
+
+ return n;
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/client/PersistentStorage.java b/android/BOINC/src/edu/berkeley/boinc/client/PersistentStorage.java
new file mode 100644
index 0000000..9e37ea1
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/client/PersistentStorage.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.client;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+/**
+ * This class wraps persistent key value pairs.
+ * Similar technique to AppPrefs, but with a non-preference incentive.
+ */
+public class PersistentStorage {
+
+ private final String STORE = "Store";
+ private SharedPreferences store;
+
+ public PersistentStorage (Context ctx) {
+ this.store = ctx.getSharedPreferences(STORE, 0);
+ }
+
+ public double getLastNotifiedNoticeArrivalTime() {
+ long defaultValue = 0;
+ return Double.longBitsToDouble(store.getLong("lastNotifiedNoticeArrivalTime", Double.doubleToRawLongBits(defaultValue)));
+ }
+
+ public void setLastNotifiedNoticeArrivalTime(double arrivalTime) {
+ SharedPreferences.Editor editor = store.edit();
+ editor.putLong("lastNotifiedNoticeArrivalTime", Double.doubleToRawLongBits(arrivalTime));
+ editor.commit();
+ }
+
+ public String getLastEmailAddress() {
+ return store.getString("lastEmailAddress", "");
+ }
+
+ public void setLastEmailAddress(String email) {
+ SharedPreferences.Editor editor = store.edit();
+ editor.putString("lastEmailAddress", email);
+ editor.commit();
+ }
+
+ public String getLastUserName() {
+ return store.getString("lastUserName", "");
+ }
+
+ public void setLastUserName(String name) {
+ SharedPreferences.Editor editor = store.edit();
+ editor.putString("lastUserName", name);
+ editor.commit();
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/receiver/BootReceiver.java b/android/BOINC/src/edu/berkeley/boinc/receiver/BootReceiver.java
index 63ca06e..1a58c40 100644
--- a/android/BOINC/src/edu/berkeley/boinc/receiver/BootReceiver.java
+++ b/android/BOINC/src/edu/berkeley/boinc/receiver/BootReceiver.java
@@ -20,7 +20,7 @@ package edu.berkeley.boinc.receiver;
import edu.berkeley.boinc.utils.*;
-import edu.berkeley.boinc.AppPreferences;
+import edu.berkeley.boinc.client.AppPreferences;
import edu.berkeley.boinc.client.Monitor;
import android.content.BroadcastReceiver;
import android.content.Context;
diff --git a/android/BOINC/src/edu/berkeley/boinc/receiver/PackageReplacedReceiver.java b/android/BOINC/src/edu/berkeley/boinc/receiver/PackageReplacedReceiver.java
index 1f728fb..c991414 100644
--- a/android/BOINC/src/edu/berkeley/boinc/receiver/PackageReplacedReceiver.java
+++ b/android/BOINC/src/edu/berkeley/boinc/receiver/PackageReplacedReceiver.java
@@ -36,12 +36,13 @@ public class PackageReplacedReceiver extends BroadcastReceiver {
*/
@Override
public void onReceive(Context context, Intent intent) {
-
- if (intent.getDataString().contains("edu.berkeley.boinc")){
- Log.d(Logging.TAG,"PackageReplacedReceiver: starting service...");
- Intent startServiceIntent = new Intent(context, Monitor.class);
- context.startService(startServiceIntent);
- } else Log.d(Logging.TAG,"PackageReplacedReceiver: other package: " + intent.getDataString());
+ if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)){
+ if (intent.getDataString().contains("edu.berkeley.boinc")){
+ if(Logging.ERROR) Log.d(Logging.TAG,"PackageReplacedReceiver: starting service...");
+ Intent startServiceIntent = new Intent(context, Monitor.class);
+ context.startService(startServiceIntent);
+ } else if(Logging.DEBUG) Log.d(Logging.TAG,"PackageReplacedReceiver: other package: " + intent.getDataString());
+ }
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/receiver/PowerConnectedReceiver.java b/android/BOINC/src/edu/berkeley/boinc/receiver/PowerConnectedReceiver.java
new file mode 100644
index 0000000..3477ef7
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/receiver/PowerConnectedReceiver.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.receiver;
+
+import edu.berkeley.boinc.client.Monitor;
+import edu.berkeley.boinc.utils.Logging;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+public class PowerConnectedReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ Log.d(Logging.TAG, "power connected, start service...");
+ Intent startServiceIntent = new Intent(context, Monitor.class);
+ context.startService(startServiceIntent);
+ }
+}
+
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.aidl
new file mode 100644
index 0000000..47ff859
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable AccountIn;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.java b/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.java
index ad6519e..4e1a667 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/AccountIn.java
@@ -18,10 +18,63 @@
******************************************************************************/
package edu.berkeley.boinc.rpc;
-public class AccountIn {
- public String url;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class AccountIn implements Parcelable{
+ public String url; // either master_url or web_rpc_url_base (HTTPS), if present
public String email_addr;
public String user_name;
+ public Boolean uses_name;
public String passwd;
public String team_name;
+
+ public static final Parcelable.Creator<AccountIn> CREATOR = new Parcelable.Creator<AccountIn>() {
+ public AccountIn createFromParcel(Parcel in) {
+ return new AccountIn(in);
+ }
+ public AccountIn[] newArray(int size) {
+ return null;
+ }
+ };
+
+ public AccountIn() {
+ super();
+ }
+
+ public AccountIn(String url, String email, String userName, Boolean usesName, String password, String teamName) {
+ this.url = url;
+ this.email_addr = email;
+ this.user_name = userName;
+ this.uses_name = usesName;
+ this.passwd = password;
+ this.team_name = teamName;
+ }
+
+ private AccountIn(Parcel in) {
+ readFromParcel(in);
+ }
+
+ public int describeContents() {
+ return 0;
+ }
+
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeString(url);
+ out.writeString(email_addr);
+ out.writeString(user_name);
+ out.writeString(passwd);
+ out.writeString(team_name);
+ out.writeBooleanArray(new boolean[]{
+ uses_name});
+ }
+ public void readFromParcel(Parcel in) {
+ url = in.readString();
+ email_addr = in.readString();
+ user_name = in.readString();
+ passwd = in.readString();
+ team_name = in.readString();
+ boolean[] bArray = in.createBooleanArray();
+ uses_name = bArray[0];
+ }
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/AccountOut.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/AccountOut.aidl
index a292fd8..0d0a8ef 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/AccountOut.aidl
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/AccountOut.aidl
@@ -1,3 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
package edu.berkeley.boinc.rpc;
parcelable AccountOut;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.aidl
new file mode 100644
index 0000000..c80631f
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable AcctMgrInfo;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.java b/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.java
index f809e13..5bca4f6 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/AcctMgrInfo.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class AcctMgrInfo {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class AcctMgrInfo implements Parcelable {
public String acct_mgr_name;
public String acct_mgr_url;
public boolean have_credentials;
@@ -27,4 +30,45 @@ public class AcctMgrInfo {
public String cookie_failure_url;
public boolean present;
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(acct_mgr_name);
+ dest.writeString(acct_mgr_url);
+ dest.writeString(cookie_failure_url);
+
+ dest.writeBooleanArray(new boolean[]{
+ have_credentials,
+ cookie_required,
+ present});
+
+ }
+
+ public AcctMgrInfo() {}
+
+ private AcctMgrInfo(Parcel in) {
+ acct_mgr_name = in.readString();
+ acct_mgr_url = in.readString();
+ cookie_failure_url = in.readString();
+
+ boolean[] bArray = in.createBooleanArray();
+ have_credentials = bArray[0];
+ cookie_required = bArray[1];
+ present = bArray[2];
+ }
+
+ public static final Parcelable.Creator<AcctMgrInfo> CREATOR = new Parcelable.Creator<AcctMgrInfo>() {
+ public AcctMgrInfo createFromParcel(Parcel in) {
+ return new AcctMgrInfo(in);
+ }
+ public AcctMgrInfo[] newArray(int size) {
+ return null;
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/App.java b/android/BOINC/src/edu/berkeley/boinc/rpc/App.java
index c30b6b3..8182d28 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/App.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/App.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class App {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class App implements Parcelable{
public String name = "";
public String user_friendly_name = "";
public int non_cpu_intensive = 0;
@@ -36,4 +39,37 @@ public class App {
public final String getName() {
return user_friendly_name.equals("") ? name : user_friendly_name;
}
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(name);
+ dest.writeString(user_friendly_name);
+ dest.writeInt(non_cpu_intensive);
+ dest.writeValue(project);
+ }
+
+ public App() {}
+
+ private App(Parcel in) {
+ name = in.readString();
+ user_friendly_name = in.readString();
+ non_cpu_intensive = in.readInt();
+ project = (Project) in.readValue(Project.class.getClassLoader());
+
+ }
+
+ public static final Parcelable.Creator<App> CREATOR = new Parcelable.Creator<App>() {
+ public App createFromParcel(Parcel in) {
+ return new App(in);
+ }
+ public App[] newArray(int size) {
+ return new App[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/AppVersion.java b/android/BOINC/src/edu/berkeley/boinc/rpc/AppVersion.java
index bf6e068..d3bed75 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/AppVersion.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/AppVersion.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class AppVersion {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class AppVersion implements Parcelable{
public String app_name;
public int version_num;
public String platform;
@@ -32,4 +35,48 @@ public class AppVersion {
App app;
Project project;
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(app_name);
+ dest.writeInt(version_num);
+ dest.writeString(platform);
+ dest.writeString(plan_class);
+ dest.writeString(api_version);
+ dest.writeDouble(avg_ncpus);
+ dest.writeDouble(max_ncpus);
+ dest.writeDouble(gpu_ram);
+
+ dest.writeValue(app);
+ dest.writeValue(project);
+ }
+
+ public AppVersion() {}
+
+ private AppVersion(Parcel in) {
+ app_name = in.readString();
+ version_num = in.readInt();
+ platform = in.readString();
+ plan_class = in.readString();
+ api_version = in.readString();
+ avg_ncpus = in.readDouble();
+ max_ncpus = in.readDouble();
+ gpu_ram = in.readDouble();
+
+ app = (App)in.readValue(App.class.getClassLoader());
+ project = (Project)in.readValue(Project.class.getClassLoader());
+ }
+
+ public static final Parcelable.Creator<AppVersion> CREATOR = new Parcelable.Creator<AppVersion>() {
+ public AppVersion createFromParcel(Parcel in) {
+ return new AppVersion(in);
+ }
+ public AppVersion[] newArray(int size) {
+ return new AppVersion[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/CcStatusParser.java b/android/BOINC/src/edu/berkeley/boinc/rpc/CcStatusParser.java
index 8915a0d..b322c1e 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/CcStatusParser.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/CcStatusParser.java
@@ -21,6 +21,8 @@ package edu.berkeley.boinc.rpc;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+
+import android.util.Log;
import android.util.Xml;
public class CcStatusParser extends BaseParser {
@@ -39,6 +41,8 @@ public class CcStatusParser extends BaseParser {
return parser.getCcStatus();
}
catch (SAXException e) {
+ e.printStackTrace();
+ Log.v("Larry", e.getMessage());
return null;
}
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.aidl
new file mode 100644
index 0000000..4d95e4c
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable GlobalPreferences;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.java b/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.java
index 3e95cd8..e72f2d9 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/GlobalPreferences.java
@@ -18,7 +18,10 @@
******************************************************************************/
package edu.berkeley.boinc.rpc;
-public class GlobalPreferences{
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class GlobalPreferences implements Parcelable{
public double battery_charge_min_pct;
public double battery_max_temperature;
@@ -56,4 +59,91 @@ public class GlobalPreferences{
public TimePreferences cpu_times = new TimePreferences();
public TimePreferences net_times = new TimePreferences();
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // TODO Auto-generated method stub
+ dest.writeDouble(battery_charge_min_pct);
+ dest.writeDouble(battery_max_temperature);
+ dest.writeDouble(idle_time_to_run);
+ dest.writeDouble(suspend_cpu_usage);
+ dest.writeDouble(work_buf_min_days);
+ dest.writeDouble(work_buf_additional_days);
+ dest.writeDouble(max_ncpus_pct);
+ dest.writeDouble(cpu_scheduling_period_minutes);
+ dest.writeDouble(disk_interval);
+ dest.writeDouble(disk_max_used_gb);
+ dest.writeDouble(disk_max_used_pct);
+ dest.writeDouble(disk_min_free_gb);
+ dest.writeDouble(ram_max_used_busy_frac);
+ dest.writeDouble(ram_max_used_idle_frac);
+ dest.writeDouble(max_bytes_sec_up);
+ dest.writeDouble(max_bytes_sec_down);
+ dest.writeDouble(cpu_usage_limit);
+ dest.writeDouble(daily_xfer_limit_mb);
+ dest.writeInt(daily_xfer_period_days);
+
+ dest.writeValue(cpu_times);
+ dest.writeValue(net_times);
+
+ dest.writeBooleanArray(new boolean[]{
+ run_on_batteries,
+ run_if_user_active,
+ run_gpu_if_user_active,
+ leave_apps_in_memory,
+ dont_verify_images,
+ override_file_present,
+ network_wifi_only
+ });
+ }
+
+ public GlobalPreferences() {}
+
+ private GlobalPreferences(Parcel in) {
+ battery_charge_min_pct = in.readDouble();
+ battery_max_temperature = in.readDouble();
+ idle_time_to_run = in.readDouble();
+ suspend_cpu_usage = in.readDouble();
+ work_buf_min_days = in.readDouble();
+ work_buf_additional_days = in.readDouble();
+ max_ncpus_pct = in.readDouble();
+ cpu_scheduling_period_minutes = in.readDouble();
+ disk_interval = in.readDouble();
+ disk_max_used_gb = in.readDouble();
+ disk_max_used_pct = in.readDouble();
+ disk_min_free_gb = in.readDouble();
+ ram_max_used_busy_frac = in.readDouble();
+ ram_max_used_idle_frac = in.readDouble();
+ max_bytes_sec_up = in.readDouble();
+ max_bytes_sec_down = in.readDouble();
+ cpu_usage_limit = in.readDouble();
+ daily_xfer_limit_mb = in.readDouble();
+ daily_xfer_period_days = in.readInt();
+
+ cpu_times = (TimePreferences) in.readValue(TimePreferences.class.getClassLoader());
+ net_times = (TimePreferences) in.readValue(TimePreferences.class.getClassLoader());
+
+ boolean[] bArray = in.createBooleanArray();
+ run_on_batteries = bArray[0];
+ run_if_user_active = bArray[1];
+ run_gpu_if_user_active = bArray[2];
+ leave_apps_in_memory = bArray[3];
+ dont_verify_images = bArray[4];
+ override_file_present = bArray[5];
+ network_wifi_only = bArray[6];
+ }
+
+ public static final Parcelable.Creator<GlobalPreferences> CREATOR = new Parcelable.Creator<GlobalPreferences>() {
+ public GlobalPreferences createFromParcel(Parcel in) {
+ return new GlobalPreferences(in);
+ }
+ public GlobalPreferences[] newArray(int size) {
+ return new GlobalPreferences[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/GuiUrl.java b/android/BOINC/src/edu/berkeley/boinc/rpc/GuiUrl.java
index 5ce25d3..25be805 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/GuiUrl.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/GuiUrl.java
@@ -19,8 +19,39 @@
package edu.berkeley.boinc.rpc;
-public class GuiUrl {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class GuiUrl implements Parcelable{
public String name;
public String description;
public String url;
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int arg1) {
+ dest.writeString(name);
+ dest.writeString(description);
+ dest.writeString(url);
+ }
+
+ public GuiUrl() {}
+
+ private GuiUrl(Parcel in) {
+ name = in.readString();
+ description = in.readString();
+ url = in.readString();
+ }
+
+ public static final Parcelable.Creator<GuiUrl> CREATOR = new Parcelable.Creator<GuiUrl>() {
+ public GuiUrl createFromParcel(Parcel in) {
+ return new GuiUrl(in);
+ }
+ public GuiUrl[] newArray(int size) {
+ return new GuiUrl[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.aidl
new file mode 100644
index 0000000..b550424
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable HostInfo;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.java b/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.java
index 7f497c7..39087ea 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/HostInfo.java
@@ -19,8 +19,11 @@
package edu.berkeley.boinc.rpc;
+import android.os.Parcel;
+import android.os.Parcelable;
-public class HostInfo {
+
+public class HostInfo implements Parcelable {
// all attributes are public for simple access
/** Local STANDARD time - UTC time (in seconds) */
public int timezone;
@@ -49,4 +52,69 @@ public class HostInfo {
public String os_name;
public String os_version;
public String virtualbox_version = null;
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(timezone);
+ dest.writeString(domain_name);
+ dest.writeString(ip_addr);
+ dest.writeString(host_cpid);
+ dest.writeInt(p_ncpus);
+ dest.writeString(p_vendor);
+ dest.writeString(p_model);
+ dest.writeString(p_features);
+ dest.writeDouble(p_fpops);
+ dest.writeDouble(p_iops);
+ dest.writeDouble(p_membw);
+ dest.writeString(product_name);
+ dest.writeLong(p_calculated);
+ dest.writeDouble(m_nbytes);
+ dest.writeDouble(m_cache);
+ dest.writeDouble(m_swap);
+ dest.writeDouble(d_total);
+ dest.writeDouble(d_free);
+ dest.writeString(os_name);
+ dest.writeString(os_version);
+ dest.writeString(virtualbox_version);
+ }
+
+ public HostInfo() {}
+
+ private HostInfo(Parcel in) {
+ timezone = in.readInt();
+ domain_name = in.readString();
+ ip_addr = in.readString();
+ host_cpid = in.readString();
+ p_ncpus = in.readInt();
+ p_vendor = in.readString();
+ p_model = in.readString();
+ p_features = in.readString();
+ p_fpops = in.readDouble();
+ p_iops = in.readDouble();
+ p_membw = in.readDouble();
+ product_name = in.readString();
+ p_calculated = in.readLong();
+ m_nbytes = in.readDouble();
+ m_cache = in.readDouble();
+ m_swap = in.readDouble();
+ d_total = in.readDouble();
+ d_free = in.readDouble();
+ os_name = in.readString();
+ os_version = in.readString();
+ virtualbox_version = in.readString();
+
+ }
+
+ public static final Parcelable.Creator<HostInfo> CREATOR = new Parcelable.Creator<HostInfo>() {
+ public HostInfo createFromParcel(Parcel in) {
+ return new HostInfo(in);
+ }
+ public HostInfo[] newArray(int size) {
+ return new HostInfo[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ImageWrapper.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/ImageWrapper.aidl
new file mode 100644
index 0000000..71e52b3
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ImageWrapper.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable ImageWrapper;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ImageWrapper.java b/android/BOINC/src/edu/berkeley/boinc/rpc/ImageWrapper.java
new file mode 100644
index 0000000..73adcd9
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ImageWrapper.java
@@ -0,0 +1,37 @@
+package edu.berkeley.boinc.rpc;
+
+import android.graphics.Bitmap;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class ImageWrapper implements Parcelable{
+ public Bitmap image;
+ public String projectName;
+ public String path;
+ public ImageWrapper(Bitmap image, String projectName, String path) {
+ this.image = image;
+ this.projectName = projectName;
+ this.path = path;
+ }
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int arg1) {
+ dest.writeValue(image);
+ dest.writeString(projectName);
+ dest.writeString(path);
+ }
+
+ public static final Parcelable.Creator<ImageWrapper> CREATOR = new Parcelable.Creator<ImageWrapper>() {
+ public ImageWrapper createFromParcel(Parcel in) {
+ return new ImageWrapper((Bitmap)in.readValue(Bitmap.class.getClassLoader()), in.readString(), in.readString());
+ }
+ public ImageWrapper[] newArray(int size) {
+ return new ImageWrapper[size];
+ }
+ };
+
+}
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Message.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/Message.aidl
new file mode 100644
index 0000000..d643b00
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Message.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable Message;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Message.java b/android/BOINC/src/edu/berkeley/boinc/rpc/Message.java
index 3cc31c9..c42a476 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/Message.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Message.java
@@ -22,7 +22,10 @@ package edu.berkeley.boinc.rpc;
import java.io.Serializable;
-public class Message implements Serializable{
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Message implements Serializable, Parcelable{
private static final long serialVersionUID = 1L;
public static final int MSG_INFO = 1;
public static final int MSG_USER_ALERT = 2;
@@ -35,4 +38,38 @@ public class Message implements Serializable{
public int seqno;
public long timestamp;
public String body;
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // TODO Auto-generated method stub
+ dest.writeString(project);
+ dest.writeInt(priority);
+ dest.writeInt(seqno);
+ dest.writeLong(timestamp);
+ dest.writeString(body);
+ }
+
+ public Message() {}
+
+ private Message(Parcel in) {
+ project = in.readString();
+ priority = in.readInt();
+ seqno = in.readInt();
+ timestamp = in.readLong();
+ body = in.readString();
+ }
+
+ public static final Parcelable.Creator<Message> CREATOR = new Parcelable.Creator<Message>() {
+ public Message createFromParcel(Parcel in) {
+ return new Message(in);
+ }
+ public Message[] newArray(int size) {
+ return new Message[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.aidl
new file mode 100644
index 0000000..76435d8
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable Notice;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.java b/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.java
index 31ee95a..da9e00c 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Notice.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class Notice {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Notice implements Parcelable {
public int seqno = -1;
public String title = "";
public String description = "";
@@ -37,4 +40,55 @@ public class Notice {
public boolean isServerNotice;
public boolean isClientNotice;
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // TODO Auto-generated method stub
+ dest.writeInt(seqno);
+ dest.writeString(title);
+ dest.writeString(description);
+ dest.writeDouble(create_time);
+ dest.writeDouble(arrival_time);
+ dest.writeString(category);
+ dest.writeString(link);
+ dest.writeString(project_name);
+
+ dest.writeBooleanArray(new boolean[] {
+ is_private,
+ isServerNotice,
+ isClientNotice});
+ }
+
+ public Notice() {}
+
+ private Notice(Parcel in) {
+ seqno = in.readInt();
+ title = in.readString();
+ description = in.readString();
+ create_time = in.readDouble();
+ arrival_time = in.readDouble();
+ category = in.readString();
+ link = in.readString();
+ project_name = in.readString();
+
+ boolean[] bArray = in.createBooleanArray();
+ is_private = bArray[0];
+ isServerNotice = bArray[1];
+ isClientNotice = bArray[2];
+
+ }
+
+ public static final Parcelable.Creator<Notice> CREATOR = new Parcelable.Creator<Notice>() {
+ public Notice createFromParcel(Parcel in) {
+ return new Notice(in);
+ }
+ public Notice[] newArray(int size) {
+ return new Notice[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/PlatformInfo.java b/android/BOINC/src/edu/berkeley/boinc/rpc/PlatformInfo.java
index 4002ceb..b666e35 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/PlatformInfo.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/PlatformInfo.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class PlatformInfo {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class PlatformInfo implements Parcelable{
public String name;
public String friendlyName;
public String planClass;
@@ -29,4 +32,34 @@ public class PlatformInfo {
this.friendlyName = friendlyName;
this.planClass = planClass;
}
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int arg1) {
+ dest.writeString(name);
+ dest.writeString(friendlyName);
+ dest.writeString(planClass);
+ }
+
+ public PlatformInfo() {}
+
+ private PlatformInfo(Parcel in) {
+ name = in.readString();
+ friendlyName = in.readString();
+ planClass = in.readString();
+ }
+
+ public static final Parcelable.Creator<PlatformInfo> CREATOR = new Parcelable.Creator<PlatformInfo>() {
+ public PlatformInfo createFromParcel(Parcel in) {
+ return new PlatformInfo(in);
+ }
+ public PlatformInfo[] newArray(int size) {
+ return new PlatformInfo[size];
+ }
+ };
+
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Project.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/Project.aidl
new file mode 100644
index 0000000..3daf21f
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Project.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable Project;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Project.java b/android/BOINC/src/edu/berkeley/boinc/rpc/Project.java
index 0b475ff..7eecdc1 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/Project.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Project.java
@@ -21,8 +21,11 @@ package edu.berkeley.boinc.rpc;
import java.util.ArrayList;
+import android.os.Parcel;
+import android.os.Parcelable;
-public class Project {
+
+public class Project implements Parcelable{
// all attributes are public for simple access
public String master_url = "";
public String project_dir = "";
@@ -105,4 +108,135 @@ public class Project {
}
return true;
}
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(master_url);
+ dest.writeString(project_dir);
+ dest.writeFloat(resource_share);
+ dest.writeString(project_name);
+ dest.writeString(user_name);
+ dest.writeString(team_name);
+ dest.writeString(venue);
+ dest.writeInt(hostid);
+ dest.writeList(gui_urls);
+ dest.writeDouble(user_total_credit);
+ dest.writeDouble(user_expavg_credit);
+
+ dest.writeDouble(host_total_credit);
+ dest.writeDouble(host_expavg_credit);
+ dest.writeDouble(disk_usage);
+
+ dest.writeInt(nrpc_failures);
+ dest.writeInt(master_fetch_failures);
+
+ dest.writeDouble(min_rpc_time);
+ dest.writeDouble(download_backoff);
+ dest.writeDouble(upload_backoff);
+ dest.writeDouble(cpu_short_term_debt);
+ dest.writeDouble(cpu_backoff_time);
+ dest.writeDouble(cpu_backoff_interval);
+ dest.writeDouble(cuda_debt);
+ dest.writeDouble(cuda_short_term_debt);
+ dest.writeDouble(cuda_backoff_time);
+ dest.writeDouble(cuda_backoff_interval);
+ dest.writeDouble(ati_debt);
+ dest.writeDouble(ati_short_term_debt);
+ dest.writeDouble(ati_backoff_time);
+ dest.writeDouble(ati_backoff_interval);
+ dest.writeDouble(duration_correction_factor);
+
+ dest.writeInt(sched_rpc_pending);
+ dest.writeDouble(project_files_downloaded_time);
+ dest.writeDouble(last_rpc_time);
+
+ dest.writeBooleanArray(new boolean[]{
+ master_url_fetch_pending,
+ non_cpu_intensive,
+ suspended_via_gui,
+ dont_request_more_work,
+ scheduler_rpc_in_progress,
+ attached_via_acct_mgr,
+ detach_when_done,
+ ended,
+ trickle_up_pending,
+ no_cpu_pref,
+ no_cuda_pref,
+ no_ati_pref
+ });
+ }
+
+ public Project() {}
+
+ private Project(Parcel in) {
+ master_url = in.readString();
+ project_dir = in.readString();
+ resource_share = in.readFloat();
+ project_name = in.readString();
+ user_name = in.readString();
+ team_name = in.readString();
+ venue = in.readString();
+ hostid = in.readInt();
+ in.readList(gui_urls, GuiUrl.class.getClassLoader());
+ user_total_credit = in.readDouble();
+ user_expavg_credit = in.readDouble();
+
+ host_total_credit = in.readDouble();
+ host_expavg_credit = in.readDouble();
+ disk_usage = in.readDouble();
+
+ nrpc_failures = in.readInt();
+ master_fetch_failures = in.readInt();
+
+ min_rpc_time = in.readDouble();
+ download_backoff = in.readDouble();
+ upload_backoff = in.readDouble();
+ cpu_short_term_debt = in.readDouble();
+ cpu_backoff_time = in.readDouble();
+ cpu_backoff_interval = in.readDouble();
+ cuda_debt = in.readDouble();
+ cuda_short_term_debt = in.readDouble();
+ cuda_backoff_time = in.readDouble();
+ cuda_backoff_interval = in.readDouble();
+ ati_debt = in.readDouble();
+ ati_short_term_debt = in.readDouble();
+ ati_backoff_time = in.readDouble();
+ ati_backoff_interval = in.readDouble();
+ duration_correction_factor = in.readDouble();
+
+ sched_rpc_pending = in.readInt();
+ project_files_downloaded_time = in.readDouble();
+ last_rpc_time = in.readDouble();
+
+ boolean[] bArray = in.createBooleanArray();
+
+ master_url_fetch_pending = bArray[0];
+ non_cpu_intensive = bArray[1];
+ suspended_via_gui = bArray[2];
+ dont_request_more_work = bArray[3];
+ scheduler_rpc_in_progress = bArray[4];
+ attached_via_acct_mgr = bArray[5];
+ detach_when_done = bArray[6];
+ ended = bArray[7];
+ trickle_up_pending = bArray[8];
+ no_cpu_pref = bArray[9];
+ no_cuda_pref = bArray[10];
+ no_ati_pref = bArray[11];
+
+ }
+
+ public static final Parcelable.Creator<Project> CREATOR = new Parcelable.Creator<Project>() {
+ public Project createFromParcel(Parcel in) {
+ return new Project(in);
+ }
+ public Project[] newArray(int size) {
+ return new Project[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.aidl
new file mode 100644
index 0000000..4541113
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable ProjectConfig;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.java b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.java
index 3bd99c6..1189c30 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfig.java
@@ -21,15 +21,19 @@ package edu.berkeley.boinc.rpc;
import java.util.ArrayList;
+import android.os.Parcel;
+import android.os.Parcelable;
+
// according to http://boinc.berkeley.edu/trac/wiki/WebRpc
-public class ProjectConfig{
+public class ProjectConfig implements Parcelable{
public Integer error_num = 0; // if results are not present yet. (polling)
public String name = "";
public String masterUrl = "";
+ public String webRpcUrlBase = "";
public String localRevision = ""; // e.g. 4.3.2 can't be parse as int or float.
public Integer minPwdLength = 0;
- public Boolean userName = false;
+ public Boolean usesName = false;
public Boolean webStopped = false;
public Boolean schedulerStopped = false;
public Boolean accountCreationDisabled = false;
@@ -40,4 +44,76 @@ public class ProjectConfig{
public ArrayList<PlatformInfo> platforms = new ArrayList<PlatformInfo>();
public String termsOfUse;
+ /**
+ * Returns the URL for HTTPS requests, if available.
+ * master URL otherwise.
+ * Use HTTPS URL for account look up and registration
+ * CAUTION: DO NOT use HTTPS URL for attach!
+ * @return URL for accoutn look up and registration RPCs
+ */
+ public String getSecureUrlIfAvailable() {
+ if(webRpcUrlBase != null && !webRpcUrlBase.isEmpty()) return webRpcUrlBase;
+ else return masterUrl;
+ }
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // TODO Auto-generated method stub
+ dest.writeInt(error_num);
+ dest.writeString(name);
+ dest.writeString(masterUrl);
+ dest.writeString(webRpcUrlBase);
+ dest.writeString(localRevision);
+ dest.writeInt(minPwdLength);
+ dest.writeInt(minClientVersion);
+ dest.writeString(rpcPrefix);
+ dest.writeList(platforms);
+ dest.writeString(termsOfUse);
+
+ dest.writeBooleanArray(new boolean[]{
+ usesName,
+ webStopped,
+ schedulerStopped,
+ accountCreationDisabled,
+ clientAccountCreationDisabled,
+ accountManager});
+
+ }
+
+ public ProjectConfig() {}
+
+ private ProjectConfig(Parcel in) {
+ error_num = in.readInt();
+ name = in.readString();
+ masterUrl = in.readString();
+ webRpcUrlBase = in.readString();
+ localRevision = in.readString();
+ minPwdLength = in.readInt();
+ minClientVersion = in.readInt();
+ rpcPrefix = in.readString();
+ in.readList(platforms, PlatformInfo.class.getClassLoader());
+ termsOfUse = in.readString();
+
+ boolean[] bArray = in.createBooleanArray();
+ usesName = bArray[0];
+ webStopped = bArray[1];
+ schedulerStopped = bArray[2];
+ accountCreationDisabled = bArray[3];
+ clientAccountCreationDisabled = bArray[4];
+ accountManager = bArray[5];
+ }
+
+ public static final Parcelable.Creator<ProjectConfig> CREATOR = new Parcelable.Creator<ProjectConfig>() {
+ public ProjectConfig createFromParcel(Parcel in) {
+ return new ProjectConfig(in);
+ }
+ public ProjectConfig[] newArray(int size) {
+ return null;
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfigReplyParser.java b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfigReplyParser.java
index 6b569a2..b4787f6 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfigReplyParser.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectConfigReplyParser.java
@@ -20,7 +20,6 @@
package edu.berkeley.boinc.rpc;
import java.util.ArrayList;
-
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import android.util.Xml;
@@ -96,6 +95,9 @@ public class ProjectConfigReplyParser extends BaseParser {
else if (localName.equalsIgnoreCase("master_url")) {
mProjectConfig.masterUrl = mCurrentElement.toString();
}
+ else if (localName.equalsIgnoreCase("web_rpc_url_base")) {
+ mProjectConfig.webRpcUrlBase = mCurrentElement.toString();
+ }
else if (localName.equalsIgnoreCase("local_revision")) {
mProjectConfig.localRevision = mCurrentElement.toString();
}
@@ -103,10 +105,10 @@ public class ProjectConfigReplyParser extends BaseParser {
mProjectConfig.minPwdLength = Integer.parseInt(mCurrentElement.toString());
}
else if (localName.equalsIgnoreCase("user_name")) {
- mProjectConfig.userName = true;
+ mProjectConfig.usesName = true;
}
else if (localName.equalsIgnoreCase("uses_username")) {
- mProjectConfig.userName = true;
+ mProjectConfig.usesName = true;
}
else if (localName.equalsIgnoreCase("web_stopped")) {
mProjectConfig.webStopped = false; //default in case parsing fails
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.aidl
new file mode 100644
index 0000000..cf6b95a
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable ProjectInfo;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.java b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.java
index c9b1017..d3c162d 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfo.java
@@ -22,8 +22,11 @@ package edu.berkeley.boinc.rpc;
import java.io.Serializable;
import java.util.ArrayList;
+import android.os.Parcel;
+import android.os.Parcelable;
+
// needs to be serializable to be put into Activity start Intent
-public class ProjectInfo implements Serializable{
+public class ProjectInfo implements Serializable, Parcelable{
private static final long serialVersionUID = -5944047529950035455L; // auto generated
public String name = "";
public String url = "";
@@ -33,6 +36,7 @@ public class ProjectInfo implements Serializable{
public String home;
public ArrayList<String> platforms;
public String imageUrl;
+ public String summary;
@Override
public String toString() {
@@ -40,4 +44,49 @@ public class ProjectInfo implements Serializable{
for (String platform : platforms) { platformString = platformString + platform + "/";}
return "ProjectInfo: " + name + " ; " + url + " ; " + generalArea + " ; " + specificArea + " ; " + description + " ; " + home + " ; " + platformString + " ; " + imageUrl;
}
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int arg1) {
+ dest.writeString(name);
+ dest.writeString(url);
+ dest.writeString(generalArea);
+ dest.writeString(specificArea);
+ dest.writeString(description);
+ dest.writeString(home);
+ //dest.writeList(platforms);
+ dest.writeSerializable(platforms);
+ dest.writeString(imageUrl);
+ dest.writeString(summary);
+ }
+
+ public ProjectInfo() {}
+
+ private ProjectInfo(Parcel in) {
+ name = in.readString();
+ url = in.readString();
+ generalArea = in.readString();
+ specificArea = in.readString();
+ description = in.readString();
+ home = in.readString();
+ //in.readList(platforms, String.class.getClassLoader());
+ platforms = (ArrayList<String>) in.readSerializable();
+ imageUrl = in.readString();
+ summary = in.readString();
+
+ }
+
+ public static final Parcelable.Creator<ProjectInfo> CREATOR = new Parcelable.Creator<ProjectInfo>() {
+ public ProjectInfo createFromParcel(Parcel in) {
+ return new ProjectInfo(in);
+ }
+ public ProjectInfo[] newArray(int size) {
+ return new ProjectInfo[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfoParser.java b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfoParser.java
index 54e62a9..99a54d4 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfoParser.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/ProjectInfoParser.java
@@ -20,7 +20,6 @@
package edu.berkeley.boinc.rpc;
import java.util.ArrayList;
-
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import android.util.Xml;
@@ -114,6 +113,9 @@ public class ProjectInfoParser extends BaseParser {
else if (localName.equalsIgnoreCase("image")) {
mProjectInfo.imageUrl = mCurrentElement.toString();
}
+ else if (localName.equalsIgnoreCase("summary")) {
+ mProjectInfo.summary = mCurrentElement.toString();
+ }
}
}
mElementStarted = false;
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Result.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/Result.aidl
new file mode 100644
index 0000000..b729566
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Result.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable Result;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Result.java b/android/BOINC/src/edu/berkeley/boinc/rpc/Result.java
index 6c2b83b..f65f536 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/Result.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Result.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class Result {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Result implements Parcelable{
public String name = "";
public String wu_name = "";
public String project_url = "";
@@ -70,5 +73,130 @@ public class Result {
public AppVersion avp;
public App app;
public Workunit wup;
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(name);
+ dest.writeString(wu_name);
+ dest.writeString(project_url);
+ dest.writeInt(version_num);
+ dest.writeString(plan_class);
+ dest.writeLong(report_deadline);
+ dest.writeLong(received_time);
+
+ dest.writeDouble(final_cpu_time);
+ dest.writeDouble(final_elapsed_time);
+ dest.writeInt(state);
+ dest.writeInt(scheduler_state);
+ dest.writeInt(exit_status);
+ dest.writeInt(signal);
+ dest.writeString(stderr_out);
+
+ dest.writeInt(active_task_state);
+ dest.writeInt(app_version_num);
+ dest.writeInt(slot);
+ dest.writeInt(pid);
+ dest.writeDouble(checkpoint_cpu_time);
+ dest.writeDouble(current_cpu_time);
+ dest.writeFloat(fraction_done);
+ dest.writeDouble(elapsed_time);
+ dest.writeDouble(swap_size);
+ dest.writeDouble(working_set_size_smoothed);
+ dest.writeDouble(estimated_cpu_time_remaining);
+ dest.writeInt(graphics_mode_acked);
+ dest.writeString(graphics_exec_path);
+
+ dest.writeString(slot_path);
+
+ dest.writeString(resources);
+
+ dest.writeValue(project);
+ dest.writeValue(avp);
+ dest.writeValue(app);
+ dest.writeValue(wup);
+
+ dest.writeBooleanArray(new boolean[]{
+ ready_to_report,
+ got_server_ack,
+ suspended_via_gui,
+ project_suspended_via_gui,
+ coproc_missing,
+ gpu_mem_wait,
+ active_task,
+ supports_graphics,
+ too_large,
+ needs_shmem,
+ edf_scheduled
+ });
+ }
+
+ public Result() {}
+
+ private Result(Parcel in) {
+ name = in.readString();
+ wu_name = in.readString();
+ project_url = in.readString();
+ version_num = in.readInt();
+ plan_class = in.readString();
+ report_deadline = in.readLong();
+ received_time = in.readLong();
+
+ final_cpu_time = in.readDouble();
+ final_elapsed_time = in.readDouble();
+ state = in.readInt();
+ scheduler_state = in.readInt();
+ exit_status = in.readInt();
+ signal = in.readInt();
+ stderr_out = in.readString();
+ active_task_state = in.readInt();
+ app_version_num = in.readInt();
+ slot = in.readInt();
+ pid = in.readInt();
+ checkpoint_cpu_time = in.readDouble();
+ current_cpu_time = in.readDouble();
+ fraction_done = in.readFloat();
+ elapsed_time = in.readDouble();
+ swap_size = in.readDouble();
+ working_set_size_smoothed = in.readDouble();
+ estimated_cpu_time_remaining = in.readDouble();
+ graphics_mode_acked = in.readInt();
+ graphics_exec_path = in.readString();
+
+ slot_path = in.readString();
+
+ resources = in.readString();
+
+ project = (Project) in.readValue(Project.class.getClassLoader());
+ avp = (AppVersion) in.readValue(AppVersion.class.getClassLoader());
+ app = (App) in.readValue(App.class.getClassLoader());
+ wup = (Workunit) in.readValue(Workunit.class.getClassLoader());
+
+ boolean[] bArray = in.createBooleanArray();
+ ready_to_report = bArray[0];
+ got_server_ack = bArray[1];
+ suspended_via_gui = bArray[2];
+ project_suspended_via_gui = bArray[3];
+ coproc_missing = bArray[4];
+ gpu_mem_wait = bArray[5];
+ active_task = bArray[6];
+ supports_graphics = bArray[7];
+ too_large = bArray[8];
+ needs_shmem = bArray[9];
+ edf_scheduled = bArray[10];
+ }
+
+ public static final Parcelable.Creator<Result> CREATOR = new Parcelable.Creator<Result>() {
+ public Result createFromParcel(Parcel in) {
+ return new Result(in);
+ }
+ public Result[] newArray(int size) {
+ return new Result[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/RpcClient.java b/android/BOINC/src/edu/berkeley/boinc/rpc/RpcClient.java
index ea99a54..b21e897 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/RpcClient.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/RpcClient.java
@@ -24,14 +24,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Locale;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
+
+import android.net.LocalSocket;
+import android.net.LocalSocketAddress;
import android.util.Log;
import android.util.Xml;
import edu.berkeley.boinc.utils.BOINCDefs;
@@ -47,7 +47,6 @@ import edu.berkeley.boinc.utils.Logging;
* get_cc_status() becomes getCcStatus() etc.
*/
public class RpcClient {
- private static final int CONNECT_TIMEOUT = 30000; // 30s
private static final int READ_TIMEOUT = 15000; // 15s
private static final int READ_BUF_SIZE = 2048;
private static final int RESULT_BUILDER_INIT_SIZE = 131072; // Yes, 128K
@@ -75,7 +74,7 @@ public class RpcClient {
public static final int MGR_DETACH = 30;
public static final int MGR_SYNC = 31;
- private Socket mSocket;
+ private LocalSocket mSocket;
private OutputStreamWriter mOutput;
private InputStream mInput;
private byte[] mReadBuffer = new byte[READ_BUF_SIZE];
@@ -159,12 +158,10 @@ public class RpcClient {
*/
/**
- * Connect to BOINC core client
- * @param address Internet address of client (hostname or IP-address)
- * @param port Port of BOINC client (default port is 31416)
+ * Connect to BOINC core client via Unix Domain Socket (abstract, "boinc_socket")
* @return true for success, false for failure
*/
- public boolean open(String address, int port) {
+ public boolean open(String socketAddress) {
if (isConnected()) {
// Already connected
if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "Attempt to connect when already connected");
@@ -172,17 +169,12 @@ public class RpcClient {
close();
}
try {
- mSocket = new Socket();
- mSocket.connect(new InetSocketAddress(address, port), CONNECT_TIMEOUT);
+ mSocket = new LocalSocket();
+ mSocket.connect(new LocalSocketAddress(socketAddress));
mSocket.setSoTimeout(READ_TIMEOUT);
mInput = mSocket.getInputStream();
mOutput = new OutputStreamWriter(mSocket.getOutputStream(), "ISO8859_1");
}
- catch (UnknownHostException e) {
- if(Logging.WARNING) Log.w(Logging.TAG, "connect failure: unknown host \"" + address + "\"", e);
- mSocket = null;
- return false;
- }
catch (IllegalArgumentException e) {
if(edu.berkeley.boinc.utils.Logging.LOGLEVEL <= 4) Log.e(Logging.TAG, "connect failure: illegal argument", e);
mSocket = null;
@@ -193,7 +185,12 @@ public class RpcClient {
mSocket = null;
return false;
}
- if(Logging.DEBUG) Log.d(Logging.TAG, "open(" + address + ", " + port + ") - Connected successfully");
+ catch (Exception e) {
+ if(Logging.WARNING) Log.w(Logging.TAG, "connect failure", e);
+ mSocket = null;
+ return false;
+ }
+ if(Logging.DEBUG) Log.d(Logging.TAG, "Connected successfully");
return true;
}
@@ -242,6 +239,7 @@ public class RpcClient {
if (!isConnected()) {
return false;
}
+ if(password.length() == 0) return false;
try {
// Phase 1: get nonce
sendRequest("<auth1/>\n");
@@ -423,6 +421,7 @@ public class RpcClient {
}
catch (IOException e) {
if(Logging.WARNING) Log.w(Logging.TAG, "error in getCcStatus()", e);
+ e.printStackTrace();
return null;
}
}
@@ -502,7 +501,6 @@ public class RpcClient {
}
sendRequest(request);
ArrayList<Message> messages = MessagesParser.parse(receiveReply());
- if(messages == null) messages = new ArrayList<Message>(); // do not return null
return messages;
}
catch (IOException e) {
@@ -816,7 +814,7 @@ public class RpcClient {
public synchronized boolean lookupAccount(AccountIn accountIn) {
try {
String id;
- if(accountIn.email_addr == null || accountIn.email_addr.isEmpty()) id = accountIn.user_name;
+ if(accountIn.uses_name) id = accountIn.user_name;
else id = accountIn.email_addr;
mRequest.setLength(0);
mRequest.append("<lookup_account>\n <url>");
@@ -1394,4 +1392,22 @@ public class RpcClient {
return false;
}
}
+
+ public synchronized Boolean runBenchmarks() {
+ try {
+ mRequest.setLength(0);
+ mRequest.append("<run_benchmarks/>");
+
+ sendRequest(mRequest.toString());
+ SimpleReplyParser parser = SimpleReplyParser.parse(receiveReply());
+ if (parser == null)
+ return false;
+ mLastErrorMessage = parser.getErrorMessage();
+ return parser.result();
+ } catch (IOException e) {
+ if(Logging.WARNING) Log.w(Logging.TAG, "error in runBenchmark()", e);
+ return false;
+ }
+
+ }
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/TimePreferences.java b/android/BOINC/src/edu/berkeley/boinc/rpc/TimePreferences.java
index ebcf948..d209a43 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/TimePreferences.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/TimePreferences.java
@@ -20,7 +20,10 @@ package edu.berkeley.boinc.rpc;
import java.util.Locale;
-public class TimePreferences {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class TimePreferences implements Parcelable{
public double start_hour, end_hour;
private static final String hourToString(double value) {
@@ -52,4 +55,90 @@ public class TimePreferences {
public String endHourString() {
return hourToString(end_hour);
}
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // TODO Auto-generated method stub
+ dest.writeDoubleArray(new double[]{
+ start_hour, end_hour,
+ week_prefs[0]!=null?week_prefs[0].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[0]!=null?week_prefs[0].end_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[1]!=null?week_prefs[1].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[1]!=null?week_prefs[1].end_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[2]!=null?week_prefs[2].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[2]!=null?week_prefs[2].end_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[3]!=null?week_prefs[3].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[3]!=null?week_prefs[3].end_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[4]!=null?week_prefs[4].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[4]!=null?week_prefs[4].end_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[5]!=null?week_prefs[5].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[5]!=null?week_prefs[5].end_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[6]!=null?week_prefs[6].start_hour:Double.NEGATIVE_INFINITY,
+ week_prefs[6]!=null?week_prefs[6].end_hour:Double.NEGATIVE_INFINITY
+ });
+ }
+
+ public TimePreferences() {}
+
+ private TimePreferences(Parcel in) {
+ double[] dArray = in.createDoubleArray();
+ start_hour = dArray[0];
+ end_hour = dArray[1];
+ if (dArray[2]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[0].start_hour = dArray[2];
+ week_prefs[0].end_hour = dArray[3];
+ }else
+ week_prefs[0] = null;
+
+ if (dArray[4]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[1].start_hour = dArray[4];
+ week_prefs[1].end_hour = dArray[5];
+ } else
+ week_prefs[1] = null;
+
+ if (dArray[6]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[2].start_hour = dArray[6];
+ week_prefs[2].end_hour = dArray[7];
+ } else
+ week_prefs[2] = null;
+
+ if (dArray[8]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[3].start_hour = dArray[8];
+ week_prefs[3].end_hour = dArray[9];
+ } else
+ week_prefs[3] = null;
+
+ if (dArray[10]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[4].start_hour = dArray[10];
+ week_prefs[4].end_hour = dArray[11];
+ } else
+ week_prefs[4] = null;
+
+ if (dArray[12]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[5].start_hour = dArray[12];
+ week_prefs[5].end_hour = dArray[13];
+ } else
+ week_prefs[5] = null;
+
+ if (dArray[14]!=Double.NEGATIVE_INFINITY) {
+ week_prefs[6].start_hour = dArray[14];
+ week_prefs[6].end_hour = dArray[15];
+ } else
+ week_prefs[6] = null;
+ }
+ public static final Parcelable.Creator<TimePreferences> CREATOR = new Parcelable.Creator<TimePreferences>() {
+ @Override
+ public TimePreferences createFromParcel(Parcel in) {
+ return new TimePreferences(in);
+ }
+ public TimePreferences[] newArray(int size) {
+ return new TimePreferences[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.aidl b/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.aidl
new file mode 100644
index 0000000..4654e41
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.aidl
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * This file is part of BOINC.
+ * http://boinc.berkeley.edu
+ * Copyright (C) 2012 University of California
+ *
+ * BOINC is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * BOINC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+ ******************************************************************************/
+package edu.berkeley.boinc.rpc;
+
+parcelable Transfer;
\ No newline at end of file
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.java b/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.java
index 1bb14cd..33a3254 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Transfer.java
@@ -21,7 +21,10 @@ package edu.berkeley.boinc.rpc;
import java.io.Serializable;
-public class Transfer implements Serializable {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Transfer implements Serializable, Parcelable {
private static final long serialVersionUID = 1L;
public String name;
public String project_url;
@@ -35,4 +38,57 @@ public class Transfer implements Serializable {
public long bytes_xferred;
public float xfer_speed;
public long project_backoff;
+
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // TODO Auto-generated method stub
+ dest.writeString(name);
+ dest.writeString(project_url);
+ dest.writeLong(nbytes);
+ dest.writeInt(status);
+ dest.writeLong(next_request_time);
+ dest.writeLong(time_so_far);
+ dest.writeLong(bytes_xferred);
+ dest.writeFloat(xfer_speed);
+ dest.writeLong(project_backoff);
+
+ dest.writeBooleanArray(new boolean[]{
+ generated_locally,
+ xfer_active,
+ is_upload
+ });
+ }
+
+ public Transfer() {}
+
+ private Transfer(Parcel in) {
+ name = in.readString();
+ project_url = in.readString();
+ nbytes = in.readLong();
+ status = in.readInt();
+ next_request_time = in.readLong();
+ time_so_far = in.readLong();
+ bytes_xferred = in.readLong();
+ xfer_speed = in.readFloat();
+ project_backoff = in.readLong();
+
+ boolean[] bArray = in.createBooleanArray();
+ generated_locally = bArray[0];
+ xfer_active = bArray[1];
+ is_upload = bArray[2];
+ }
+
+ public static final Parcelable.Creator<Transfer> CREATOR = new Parcelable.Creator<Transfer>() {
+ public Transfer createFromParcel(Parcel in) {
+ return new Transfer(in);
+ }
+ public Transfer[] newArray(int size) {
+ return new Transfer[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/rpc/Workunit.java b/android/BOINC/src/edu/berkeley/boinc/rpc/Workunit.java
index 38fb750..cbaa71f 100644
--- a/android/BOINC/src/edu/berkeley/boinc/rpc/Workunit.java
+++ b/android/BOINC/src/edu/berkeley/boinc/rpc/Workunit.java
@@ -19,7 +19,10 @@
package edu.berkeley.boinc.rpc;
-public class Workunit {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Workunit implements Parcelable{
public String name = "";
public String app_name = "";
public int version_num;
@@ -30,4 +33,46 @@ public class Workunit {
public Project project;
public App app;
+ @Override
+ public int describeContents() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(name);
+ dest.writeString(app_name);
+ dest.writeInt(version_num);
+ dest.writeDouble(rsc_fpops_est);
+ dest.writeDouble(rsc_fpops_bound);
+ dest.writeDouble(rsc_memory_bound);
+ dest.writeDouble(rsc_disk_bound);
+
+ dest.writeValue(project);
+ dest.writeValue(app);
+ }
+
+ public Workunit() {}
+
+ private Workunit(Parcel in) {
+ name = in.readString();
+ app_name = in.readString();
+ version_num = in.readInt();
+ rsc_fpops_est = in.readDouble();
+ rsc_fpops_bound = in.readDouble();
+ rsc_memory_bound = in.readDouble();
+ rsc_disk_bound = in.readDouble();
+
+ project = (Project) in.readValue(Project.class.getClassLoader());
+ app = (App) in.readValue(App.class.getClassLoader());
+ }
+
+ public static final Parcelable.Creator<Workunit> CREATOR = new Parcelable.Creator<Workunit>() {
+ public Workunit createFromParcel(Parcel in) {
+ return new Workunit(in);
+ }
+ public Workunit[] newArray(int size) {
+ return new Workunit[size];
+ }
+ };
}
diff --git a/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHider.java b/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHider.java
new file mode 100644
index 0000000..9df65cb
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHider.java
@@ -0,0 +1,178 @@
+package edu.berkeley.boinc.util;
+
+import android.app.Activity;
+import android.os.Build;
+import android.view.View;
+
+/**
+ * A utility class that helps with showing and hiding system UI such as the
+ * status bar and navigation/system bar. This class uses backward-compatibility
+ * techniques described in <a href=
+ * "http://developer.android.com/training/backward-compatible-ui/index.html">
+ * Creating Backward-Compatible UIs</a> to ensure that devices running any
+ * version of ndroid OS are supported. More specifically, there are separate
+ * implementations of this abstract class: for newer devices,
+ * {@link #getInstance} will return a {@link SystemUiHiderHoneycomb} instance,
+ * while on older devices {@link #getInstance} will return a
+ * {@link SystemUiHiderBase} instance.
+ * <p>
+ * For more on system bars, see <a href=
+ * "http://developer.android.com/design/get-started/ui-overview.html#system-bars"
+ * > System Bars</a>.
+ *
+ * @see android.view.View#setSystemUiVisibility(int)
+ * @see android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN
+ */
+public abstract class SystemUiHider {
+ /**
+ * When this flag is set, the
+ * {@link android.view.WindowManager.LayoutParams#FLAG_LAYOUT_IN_SCREEN}
+ * flag will be set on older devices, making the status bar "float" on top
+ * of the activity layout. This is most useful when there are no controls at
+ * the top of the activity layout.
+ * <p>
+ * This flag isn't used on newer devices because the <a
+ * href="http://developer.android.com/design/patterns/actionbar.html">action
+ * bar</a>, the most important structural element of an Android app, should
+ * be visible and not obscured by the system UI.
+ */
+ public static final int FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES = 0x1;
+
+ /**
+ * When this flag is set, {@link #show()} and {@link #hide()} will toggle
+ * the visibility of the status bar. If there is a navigation bar, show and
+ * hide will toggle low profile mode.
+ */
+ public static final int FLAG_FULLSCREEN = 0x2;
+
+ /**
+ * When this flag is set, {@link #show()} and {@link #hide()} will toggle
+ * the visibility of the navigation bar, if it's present on the device and
+ * the device allows hiding it. In cases where the navigation bar is present
+ * but cannot be hidden, show and hide will toggle low profile mode.
+ */
+ public static final int FLAG_HIDE_NAVIGATION = FLAG_FULLSCREEN | 0x4;
+
+ /**
+ * The activity associated with this UI hider object.
+ */
+ protected Activity mActivity;
+
+ /**
+ * The view on which {@link View#setSystemUiVisibility(int)} will be called.
+ */
+ protected View mAnchorView;
+
+ /**
+ * The current UI hider flags.
+ *
+ * @see #FLAG_FULLSCREEN
+ * @see #FLAG_HIDE_NAVIGATION
+ * @see #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES
+ */
+ protected int mFlags;
+
+ /**
+ * The current visibility callback.
+ */
+ protected OnVisibilityChangeListener mOnVisibilityChangeListener = sDummyListener;
+
+ /**
+ * Creates and returns an instance of {@link SystemUiHider} that is
+ * appropriate for this device. The object will be either a
+ * {@link SystemUiHiderBase} or {@link SystemUiHiderHoneycomb} depending on
+ * the device.
+ *
+ * @param activity
+ * The activity whose window's system UI should be controlled by
+ * this class.
+ * @param anchorView
+ * The view on which {@link View#setSystemUiVisibility(int)} will
+ * be called.
+ * @param flags
+ * Either 0 or any combination of {@link #FLAG_FULLSCREEN},
+ * {@link #FLAG_HIDE_NAVIGATION}, and
+ * {@link #FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES}.
+ */
+ public static SystemUiHider getInstance(Activity activity, View anchorView,
+ int flags) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ return new SystemUiHiderHoneycomb(activity, anchorView, flags);
+ } else {
+ return new SystemUiHiderBase(activity, anchorView, flags);
+ }
+ }
+
+ protected SystemUiHider(Activity activity, View anchorView, int flags) {
+ mActivity = activity;
+ mAnchorView = anchorView;
+ mFlags = flags;
+ }
+
+ /**
+ * Sets up the system UI hider. Should be called from
+ * {@link Activity#onCreate}.
+ */
+ public abstract void setup();
+
+ /**
+ * Returns whether or not the system UI is visible.
+ */
+ public abstract boolean isVisible();
+
+ /**
+ * Hide the system UI.
+ */
+ public abstract void hide();
+
+ /**
+ * Show the system UI.
+ */
+ public abstract void show();
+
+ /**
+ * Toggle the visibility of the system UI.
+ */
+ public void toggle() {
+ if (isVisible()) {
+ hide();
+ } else {
+ show();
+ }
+ }
+
+ /**
+ * Registers a callback, to be triggered when the system UI visibility
+ * changes.
+ */
+ public void setOnVisibilityChangeListener(
+ OnVisibilityChangeListener listener) {
+ if (listener == null) {
+ listener = sDummyListener;
+ }
+
+ mOnVisibilityChangeListener = listener;
+ }
+
+ /**
+ * A dummy no-op callback for use when there is no other listener set.
+ */
+ private static OnVisibilityChangeListener sDummyListener = new OnVisibilityChangeListener() {
+ @Override
+ public void onVisibilityChange(boolean visible) {
+ }
+ };
+
+ /**
+ * A callback interface used to listen for system UI visibility changes.
+ */
+ public interface OnVisibilityChangeListener {
+ /**
+ * Called when the system UI visibility has changed.
+ *
+ * @param visible
+ * True if the system UI is visible.
+ */
+ public void onVisibilityChange(boolean visible);
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHiderBase.java b/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHiderBase.java
new file mode 100644
index 0000000..f109278
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHiderBase.java
@@ -0,0 +1,62 @@
+package edu.berkeley.boinc.util;
+
+import android.app.Activity;
+import android.view.View;
+import android.view.WindowManager;
+
+/**
+ * A base implementation of {@link SystemUiHider}. Uses APIs available in all
+ * API levels to show and hide the status bar.
+ */
+public class SystemUiHiderBase extends SystemUiHider {
+ /**
+ * Whether or not the system UI is currently visible. This is a cached value
+ * from calls to {@link #hide()} and {@link #show()}.
+ */
+ private boolean mVisible = true;
+
+ /**
+ * Constructor not intended to be called by clients. Use
+ * {@link SystemUiHider#getInstance} to obtain an instance.
+ */
+ protected SystemUiHiderBase(Activity activity, View anchorView, int flags) {
+ super(activity, anchorView, flags);
+ }
+
+ @Override
+ public void setup() {
+ if ((mFlags & FLAG_LAYOUT_IN_SCREEN_OLDER_DEVICES) == 0) {
+ mActivity.getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+ | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+ | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
+ }
+ }
+
+ @Override
+ public boolean isVisible() {
+ return mVisible;
+ }
+
+ @Override
+ public void hide() {
+ if ((mFlags & FLAG_FULLSCREEN) != 0) {
+ mActivity.getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
+ mOnVisibilityChangeListener.onVisibilityChange(false);
+ mVisible = false;
+ }
+
+ @Override
+ public void show() {
+ if ((mFlags & FLAG_FULLSCREEN) != 0) {
+ mActivity.getWindow().setFlags(0,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
+ mOnVisibilityChangeListener.onVisibilityChange(true);
+ mVisible = true;
+ }
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHiderHoneycomb.java b/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHiderHoneycomb.java
new file mode 100644
index 0000000..aaafe01
--- /dev/null
+++ b/android/BOINC/src/edu/berkeley/boinc/util/SystemUiHiderHoneycomb.java
@@ -0,0 +1,133 @@
+package edu.berkeley.boinc.util;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.os.Build;
+import android.view.View;
+import android.view.WindowManager;
+
+/**
+ * An API 11+ implementation of {@link SystemUiHider}. Uses APIs available in
+ * Honeycomb and later (specifically {@link View#setSystemUiVisibility(int)}) to
+ * show and hide the system UI.
+ */
+ at TargetApi(Build.VERSION_CODES.HONEYCOMB)
+public class SystemUiHiderHoneycomb extends SystemUiHiderBase {
+ /**
+ * Flags for {@link View#setSystemUiVisibility(int)} to use when showing the
+ * system UI.
+ */
+ private int mShowFlags;
+
+ /**
+ * Flags for {@link View#setSystemUiVisibility(int)} to use when hiding the
+ * system UI.
+ */
+ private int mHideFlags;
+
+ /**
+ * Flags to test against the first parameter in
+ * {@link android.view.View.OnSystemUiVisibilityChangeListener#onSystemUiVisibilityChange(int)}
+ * to determine the system UI visibility state.
+ */
+ private int mTestFlags;
+
+ /**
+ * Whether or not the system UI is currently visible. This is cached from
+ * {@link android.view.View.OnSystemUiVisibilityChangeListener}.
+ */
+ private boolean mVisible = true;
+
+ /**
+ * Constructor not intended to be called by clients. Use
+ * {@link SystemUiHider#getInstance} to obtain an instance.
+ */
+ protected SystemUiHiderHoneycomb(Activity activity, View anchorView,
+ int flags) {
+ super(activity, anchorView, flags);
+
+ mShowFlags = View.SYSTEM_UI_FLAG_VISIBLE;
+ mHideFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
+ mTestFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
+
+ if ((mFlags & FLAG_FULLSCREEN) != 0) {
+ // If the client requested fullscreen, add flags relevant to hiding
+ // the status bar. Note that some of these constants are new as of
+ // API 16 (Jelly Bean). It is safe to use them, as they are inlined
+ // at compile-time and do nothing on pre-Jelly Bean devices.
+ mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_FULLSCREEN;
+ }
+
+ if ((mFlags & FLAG_HIDE_NAVIGATION) != 0) {
+ // If the client requested hiding navigation, add relevant flags.
+ mShowFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ mHideFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ mTestFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setup() {
+ mAnchorView
+ .setOnSystemUiVisibilityChangeListener(mSystemUiVisibilityChangeListener);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void hide() {
+ mAnchorView.setSystemUiVisibility(mHideFlags);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void show() {
+ mAnchorView.setSystemUiVisibility(mShowFlags);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isVisible() {
+ return mVisible;
+ }
+
+ private View.OnSystemUiVisibilityChangeListener mSystemUiVisibilityChangeListener = new View.OnSystemUiVisibilityChangeListener() {
+ @Override
+ public void onSystemUiVisibilityChange(int vis) {
+ // Test against mTestFlags to see if the system UI is visible.
+ if ((vis & mTestFlags) != 0) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ // Pre-Jelly Bean, we must manually hide the action bar
+ // and use the old window flags API.
+ mActivity.getActionBar().hide();
+ mActivity.getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
+
+ // Trigger the registered listener and cache the visibility
+ // state.
+ mOnVisibilityChangeListener.onVisibilityChange(false);
+ mVisible = false;
+
+ } else {
+ mAnchorView.setSystemUiVisibility(mShowFlags);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ // Pre-Jelly Bean, we must manually show the action bar
+ // and use the old window flags API.
+ mActivity.getActionBar().show();
+ mActivity.getWindow().setFlags(0,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ }
+
+ // Trigger the registered listener and cache the visibility
+ // state.
+ mOnVisibilityChangeListener.onVisibilityChange(true);
+ mVisible = true;
+ }
+ }
+ };
+}
diff --git a/android/BOINC/src/edu/berkeley/boinc/utils/BOINCErrors.java b/android/BOINC/src/edu/berkeley/boinc/utils/BOINCErrors.java
index 2ec26e4..a53de72 100644
--- a/android/BOINC/src/edu/berkeley/boinc/utils/BOINCErrors.java
+++ b/android/BOINC/src/edu/berkeley/boinc/utils/BOINCErrors.java
@@ -30,14 +30,19 @@ public class BOINCErrors {
// Add a text description of your error to boincerror() in util.C.
//
public final static int ERR_OK = 0;
+ public final static int ERR_CONNECT = -107; // connection problems
+ public final static int ERR_XML_PARSE = -112; // XML parsing error on client side
public final static int ERR_GETHOSTBYNAME = -113; // can not resolve name. no DNS -> no Internet?!
public static final int ERR_GIVEUP_DOWNLOAD = -114;
public static final int ERR_GIVEUP_UPLOAD = -115;
public final static int ERR_DB_NOT_FOUND = -136; // e.g. eMail invalid
public final static int ERR_DB_NOT_UNIQUE = -137; // name not unique, i.e. email already in use
public final static int ERR_PROJECT_DOWN = -183; // i.e. project error
+ public final static int ERR_HTTP_TRANSIENT = -184; // connection problems
public final static int ERR_BAD_USER_NAME = -188; // i.e. user name required
public final static int ERR_INVALID_URL = -189;
+ public final static int ERR_RETRY = -199; // i.e. client currently busy with another GUI HTTP request
+ public final static int ERR_IN_PROGRESS = -204;
public final static int ERR_BAD_EMAIL_ADDR = -205; // i.e. email has invalid syntax
public final static int ERR_BAD_PASSWD = -206;
public final static int ERR_NONUNIQUE_EMAIL = -207;
diff --git a/android/BOINC/src/edu/berkeley/boinc/utils/BOINCUtils.java b/android/BOINC/src/edu/berkeley/boinc/utils/BOINCUtils.java
index 338a090..618c170 100644
--- a/android/BOINC/src/edu/berkeley/boinc/utils/BOINCUtils.java
+++ b/android/BOINC/src/edu/berkeley/boinc/utils/BOINCUtils.java
@@ -2,9 +2,7 @@ package edu.berkeley.boinc.utils;
import java.io.IOException;
import java.io.Reader;
-
import android.annotation.SuppressLint;
-import android.app.Activity;
import android.content.Context;
import edu.berkeley.boinc.R;
@@ -29,24 +27,24 @@ public class BOINCUtils {
return sb.toString(); //end of line was found.
}
- public static String translateRPCReason(Activity activity, int reason) {
+ public static String translateRPCReason(Context ctx, int reason) {
switch (reason) {
case BOINCDefs.RPC_REASON_USER_REQ:
- return activity.getResources().getString(R.string.rpcreason_userreq);
+ return ctx.getResources().getString(R.string.rpcreason_userreq);
case BOINCDefs.RPC_REASON_NEED_WORK:
- return activity.getResources().getString(R.string.rpcreason_needwork);
+ return ctx.getResources().getString(R.string.rpcreason_needwork);
case BOINCDefs.RPC_REASON_RESULTS_DUE:
- return activity.getResources().getString(R.string.rpcreason_resultsdue);
+ return ctx.getResources().getString(R.string.rpcreason_resultsdue);
case BOINCDefs.RPC_REASON_TRICKLE_UP:
- return activity.getResources().getString(R.string.rpcreason_trickleup);
+ return ctx.getResources().getString(R.string.rpcreason_trickleup);
case BOINCDefs.RPC_REASON_ACCT_MGR_REQ:
- return activity.getResources().getString(R.string.rpcreason_acctmgrreq);
+ return ctx.getResources().getString(R.string.rpcreason_acctmgrreq);
case BOINCDefs.RPC_REASON_INIT:
- return activity.getResources().getString(R.string.rpcreason_init);
+ return ctx.getResources().getString(R.string.rpcreason_init);
case BOINCDefs.RPC_REASON_PROJECT_REQ:
- return activity.getResources().getString(R.string.rpcreason_projectreq);
+ return ctx.getResources().getString(R.string.rpcreason_projectreq);
default:
- return activity.getResources().getString(R.string.rpcreason_unknown);
+ return ctx.getResources().getString(R.string.rpcreason_unknown);
}
}
diff --git a/android/build_libraries_arm.sh b/android/build_libraries_arm.sh
index a77850a..94d7a91 100755
--- a/android/build_libraries_arm.sh
+++ b/android/build_libraries_arm.sh
@@ -33,6 +33,7 @@ export PKG_CONFIG_SYSROOT_DIR=$TCSYSROOT
./build_androidtc_arm.sh
if [ -n "$COMPILEBOINC" ]; then
+
echo "==================building Libraries from $BOINC=========================="
cd $BOINC
if [ -n "$MAKECLEAN" ]; then
@@ -40,10 +41,11 @@ make clean
fi
if [ -n "$CONFIGURE" ]; then
./_autosetup
-./configure --host=arm-linux --with-boinc-platform="arm-android-linux-gnu" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static
+./configure --host=arm-linux --with-boinc-platform="arm-android-linux-gnu" --prefix=$TCINCLUDES --libdir="$TCINCLUDES/lib" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static --enable-boinczip
fi
make
make stage
+make install
echo "=============================BOINC done============================="
diff --git a/android/build_libraries_mips.sh b/android/build_libraries_mips.sh
index 63ed546..50973e7 100755
--- a/android/build_libraries_mips.sh
+++ b/android/build_libraries_mips.sh
@@ -33,6 +33,7 @@ export PKG_CONFIG_SYSROOT_DIR=$TCSYSROOT
./build_androidtc_mips.sh
if [ -n "$COMPILEBOINC" ]; then
+
echo "==================building Libraries from $BOINC=========================="
cd $BOINC
if [ -n "$MAKECLEAN" ]; then
@@ -40,10 +41,11 @@ make clean
fi
if [ -n "$CONFIGURE" ]; then
./_autosetup
-./configure --host=mipsel-linux --with-boinc-platform="mipsel-android-linux-gnu" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static
+./configure --host=mipsel-linux --with-boinc-platform="mipsel-android-linux-gnu" --prefix=$TCINCLUDES --libdir="$TCINCLUDES/lib" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static --enable-boinczip
fi
make
make stage
+make install
echo "=============================BOINC done============================="
diff --git a/android/build_libraries_x86.sh b/android/build_libraries_x86.sh
index 14fa201..de9deb9 100755
--- a/android/build_libraries_x86.sh
+++ b/android/build_libraries_x86.sh
@@ -15,14 +15,14 @@ export BOINC=".." #BOINC source code
export ANDROIDTC="$HOME/androidx86-tc"
export TCBINARIES="$ANDROIDTC/bin"
-export TCINCLUDES="$ANDROIDTC/i686-android-linux"
+export TCINCLUDES="$ANDROIDTC/i686-linux-android"
export TCSYSROOT="$ANDROIDTC/sysroot"
export STDCPPTC="$TCINCLUDES/lib/libstdc++.a"
export PATH="$PATH:$TCBINARIES:$TCINCLUDES/bin"
-export CC=i686-android-linux-gcc
-export CXX=i686-android-linux-g++
-export LD=i686-android-linux-ld
+export CC=i686-linux-android-gcc
+export CXX=i686-linux-android-g++
+export LD=i686-linux-android-ld
export CFLAGS="--sysroot=$TCSYSROOT -DANDROID -DDECLARE_TIMEZONE -Wall -I$TCINCLUDES/include -O3 -fomit-frame-pointer"
export CXXFLAGS="--sysroot=$TCSYSROOT -DANDROID -Wall -I$TCINCLUDES/include -funroll-loops -fexceptions -O3 -fomit-frame-pointer"
export LDFLAGS="-L$TCSYSROOT/usr/lib -L$TCINCLUDES/lib -llog"
@@ -33,6 +33,7 @@ export PKG_CONFIG_SYSROOT_DIR=$TCSYSROOT
./build_androidtc_x86.sh
if [ -n "$COMPILEBOINC" ]; then
+
echo "==================building Libraries from $BOINC=========================="
cd $BOINC
if [ -n "$MAKECLEAN" ]; then
@@ -40,10 +41,11 @@ make clean
fi
if [ -n "$CONFIGURE" ]; then
./_autosetup
-./configure --host=i686-linux --with-boinc-platform="x86-android-linux-gnu" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static
+./configure --host=i686-linux --with-boinc-platform="x86-android-linux-gnu" --prefix=$TCINCLUDES --libdir="$TCINCLUDES/lib" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static --enable-boinczip
fi
make
make stage
+make install
echo "=============================BOINC done============================="
diff --git a/android/build_wrapper_arm.sh b/android/build_wrapper_arm.sh
new file mode 100755
index 0000000..bbe267d
--- /dev/null
+++ b/android/build_wrapper_arm.sh
@@ -0,0 +1,60 @@
+#/bin/sh
+
+#
+# See: http://boinc.berkeley.edu/trac/wiki/AndroidBuildApp#
+#
+
+# Script to compile various BOINC libraries for Android to be used
+# by science applications
+
+COMPILEBOINC="yes"
+CONFIGURE="yes"
+MAKECLEAN="yes"
+
+export BOINC=".." #BOINC source code
+
+export ANDROIDTC="$HOME/androidarm-tc"
+export TCBINARIES="$ANDROIDTC/bin"
+export TCINCLUDES="$ANDROIDTC/arm-linux-androideabi"
+export TCSYSROOT="$ANDROIDTC/sysroot"
+export STDCPPTC="$TCINCLUDES/lib/libstdc++.a"
+
+export PATH="$PATH:$TCBINARIES:$TCINCLUDES/bin"
+export CC=arm-linux-androideabi-gcc
+export CXX=arm-linux-androideabi-g++
+export LD=arm-linux-androideabi-ld
+export CFLAGS="--sysroot=$TCSYSROOT -DANDROID -DDECLARE_TIMEZONE -Wall -I$TCINCLUDES/include -O3 -fomit-frame-pointer"
+export CXXFLAGS="--sysroot=$TCSYSROOT -DANDROID -Wall -I$TCINCLUDES/include -funroll-loops -fexceptions -O3 -fomit-frame-pointer"
+export LDFLAGS="-L$TCSYSROOT/usr/lib -L$TCINCLUDES/lib -llog"
+export GDB_CFLAGS="--sysroot=$TCSYSROOT -Wall -g -I$TCINCLUDES/include"
+export PKG_CONFIG_SYSROOT_DIR=$TCSYSROOT
+export PTHREAD=-L.
+
+# Prepare android toolchain and environment
+./build_androidtc_arm.sh
+
+if [ -n "$COMPILEBOINC" ]; then
+
+echo "==================building Wrapper from $BOINC=========================="
+cd $BOINC
+
+if [ -n "$MAKECLEAN" ]; then
+make clean
+cd samples/wrapper
+make clean
+cd ../..
+fi
+
+if [ -n "$CONFIGURE" ]; then
+./_autosetup
+./configure --host=arm-linux --with-boinc-platform="arm-android-linux-gnu" --prefix=$TCINCLUDES --libdir="$TCINCLUDES/lib" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static --enable-boinczip
+fi
+
+make
+
+cd samples/wrapper
+make
+
+echo "=============================Wrapper done============================="
+
+fi
diff --git a/android/build_wrapper_mips.sh b/android/build_wrapper_mips.sh
new file mode 100755
index 0000000..5203e45
--- /dev/null
+++ b/android/build_wrapper_mips.sh
@@ -0,0 +1,60 @@
+#/bin/sh
+
+#
+# See: http://boinc.berkeley.edu/trac/wiki/AndroidBuildApp#
+#
+
+# Script to compile various BOINC libraries for Android to be used
+# by science applications
+
+COMPILEBOINC="yes"
+CONFIGURE="yes"
+MAKECLEAN="yes"
+
+export BOINC=".." #BOINC source code
+
+export ANDROIDTC="$HOME/androidmips-tc"
+export TCBINARIES="$ANDROIDTC/bin"
+export TCINCLUDES="$ANDROIDTC/mipsel-linux-android"
+export TCSYSROOT="$ANDROIDTC/sysroot"
+export STDCPPTC="$TCINCLUDES/lib/libstdc++.a"
+
+export PATH="$PATH:$TCBINARIES:$TCINCLUDES/bin"
+export CC=mipsel-linux-android-gcc
+export CXX=mipsel-linux-android-g++
+export LD=mipsel-linux-android-ld
+export CFLAGS="--sysroot=$TCSYSROOT -DANDROID -DDECLARE_TIMEZONE -Wall -I$TCINCLUDES/include -O3 -fomit-frame-pointer"
+export CXXFLAGS="--sysroot=$TCSYSROOT -DANDROID -Wall -I$TCINCLUDES/include -funroll-loops -fexceptions -O3 -fomit-frame-pointer"
+export LDFLAGS="-L$TCSYSROOT/usr/lib -L$TCINCLUDES/lib -llog"
+export GDB_CFLAGS="--sysroot=$TCSYSROOT -Wall -g -I$TCINCLUDES/include"
+export PKG_CONFIG_SYSROOT_DIR=$TCSYSROOT
+export PTHREAD=-L.
+
+# Prepare android toolchain and environment
+./build_androidtc_mips.sh
+
+if [ -n "$COMPILEBOINC" ]; then
+
+echo "==================building Wrapper from $BOINC=========================="
+cd $BOINC
+
+if [ -n "$MAKECLEAN" ]; then
+make clean
+cd samples/wrapper
+make clean
+cd ../..
+fi
+
+if [ -n "$CONFIGURE" ]; then
+./_autosetup
+./configure --host=mipsel-linux --with-boinc-platform="mipsel-android-linux-gnu" --prefix=$TCINCLUDES --libdir="$TCINCLUDES/lib" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static --enable-boinczip
+fi
+
+make
+
+cd samples/wrapper
+make
+
+echo "=============================Wrapper done============================="
+
+fi
diff --git a/android/build_wrapper_x86.sh b/android/build_wrapper_x86.sh
new file mode 100755
index 0000000..dc7f6be
--- /dev/null
+++ b/android/build_wrapper_x86.sh
@@ -0,0 +1,60 @@
+#/bin/sh
+
+#
+# See: http://boinc.berkeley.edu/trac/wiki/AndroidBuildApp#
+#
+
+# Script to compile various BOINC libraries for Android to be used
+# by science applications
+
+COMPILEBOINC="yes"
+CONFIGURE="yes"
+MAKECLEAN="yes"
+
+export BOINC=".." #BOINC source code
+
+export ANDROIDTC="$HOME/androidx86-tc"
+export TCBINARIES="$ANDROIDTC/bin"
+export TCINCLUDES="$ANDROIDTC/i686-linux-android"
+export TCSYSROOT="$ANDROIDTC/sysroot"
+export STDCPPTC="$TCINCLUDES/lib/libstdc++.a"
+
+export PATH="$PATH:$TCBINARIES:$TCINCLUDES/bin"
+export CC=i686-linux-android-gcc
+export CXX=i686-linux-android-g++
+export LD=i686-linux-android-ld
+export CFLAGS="--sysroot=$TCSYSROOT -DANDROID -DDECLARE_TIMEZONE -Wall -I$TCINCLUDES/include -O3 -fomit-frame-pointer"
+export CXXFLAGS="--sysroot=$TCSYSROOT -DANDROID -Wall -I$TCINCLUDES/include -funroll-loops -fexceptions -O3 -fomit-frame-pointer"
+export LDFLAGS="-L$TCSYSROOT/usr/lib -L$TCINCLUDES/lib -llog"
+export GDB_CFLAGS="--sysroot=$TCSYSROOT -Wall -g -I$TCINCLUDES/include"
+export PKG_CONFIG_SYSROOT_DIR=$TCSYSROOT
+export PTHREAD=-L.
+
+# Prepare android toolchain and environment
+./build_androidtc_x86.sh
+
+if [ -n "$COMPILEBOINC" ]; then
+
+echo "==================building Wrapper from $BOINC=========================="
+cd $BOINC
+
+if [ -n "$MAKECLEAN" ]; then
+make clean
+cd samples/wrapper
+make clean
+cd ../..
+fi
+
+if [ -n "$CONFIGURE" ]; then
+./_autosetup
+./configure --host=i686-linux --with-boinc-platform="x86-android-linux-gnu" --prefix=$TCINCLUDES --libdir="$TCINCLUDES/lib" --with-ssl=$TCINCLUDES --disable-server --disable-manager --disable-client --disable-shared --enable-static --enable-boinczip
+fi
+
+make
+
+cd samples/wrapper
+make
+
+echo "=============================Wrapper done============================="
+
+fi
diff --git a/api/Makefile.am b/api/Makefile.am
index 1339dd5..2663f9a 100644
--- a/api/Makefile.am
+++ b/api/Makefile.am
@@ -16,8 +16,15 @@ graphics2_files = \
gutil.cpp \
gutil_text.cpp \
reduce_lib.cpp \
- graphics2.cpp \
- graphics2_unix.cpp
+ graphics2.cpp
+
+if OS_WIN32
+ graphics2_files += graphics2_win.cpp \
+ $(top_srcdir)/samples/image_libs/bmplib.cpp \
+ $(top_srcdir)/samples/image_libs/tgalib.cpp
+else
+ graphics2_files += graphics2_unix.cpp
+endif
if OS_DARWIN
graphics2_files += mac_icon.cpp
@@ -36,12 +43,12 @@ endif
lib_LTLIBRARIES = libboinc_api.la
libboinc_api_la_SOURCES = $(api_files)
-libboinc_api_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION) -lpthread
+libboinc_api_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
if BUILD_GRAPHICS_API
lib_LTLIBRARIES += libboinc_graphics2.la
libboinc_graphics2_la_SOURCES = $(graphics2_files)
-# libboinc_graphics2_la_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/lib
+libboinc_graphics2_la_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_srcdir)/samples/image_libs
libboinc_graphics2_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION) -ljpeg
endif #BUILD_GRAPHICS_API
diff --git a/api/boinc_api.cpp b/api/boinc_api.cpp
index 74baed7..77602d9 100644
--- a/api/boinc_api.cpp
+++ b/api/boinc_api.cpp
@@ -120,7 +120,7 @@ using std::vector;
// CPPFLAGS=-DGETRUSAGE_IN_TIMER_THREAD
#endif
-const char* api_version="API_VERSION_"PACKAGE_VERSION;
+const char* api_version = "API_VERSION_" PACKAGE_VERSION;
static APP_INIT_DATA aid;
static FILE_LOCK file_lock;
APP_CLIENT_SHM* app_client_shm = 0;
@@ -189,6 +189,7 @@ static volatile bool worker_thread_exit_flag = false;
static volatile int worker_thread_exit_status;
// the above are used by the timer thread to tell
// the worker thread to exit
+static pthread_t worker_thread_handle;
static pthread_t timer_thread_handle;
#ifndef GETRUSAGE_IN_TIMER_THREAD
static struct rusage worker_thread_ru;
@@ -312,9 +313,21 @@ static inline void release_mutex() {
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static void init_mutex() {}
static inline void acquire_mutex() {
+#ifdef DEBUG_BOINC_API
+ char buf[256];
+ fprintf(stderr, "%s acquiring mutex\n",
+ boinc_msg_prefix(buf, sizeof(buf))
+ );
+#endif
pthread_mutex_lock(&mutex);
}
static inline void release_mutex() {
+#ifdef DEBUG_BOINC_API
+ char buf[256];
+ fprintf(stderr, "%s releasing mutex\n",
+ boinc_msg_prefix(buf, sizeof(buf))
+ );
+#endif
pthread_mutex_unlock(&mutex);
}
#endif
@@ -404,6 +417,7 @@ static void handle_heartbeat_msg() {
}
static bool client_dead() {
+ char buf[256];
bool dead;
if (aid.client_pid) {
// check every 10 sec
@@ -411,10 +425,13 @@ static bool client_dead() {
if (interrupt_count%(TIMERS_PER_SEC*10)) return false;
#ifdef _WIN32
HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, aid.client_pid);
- if (h == NULL) {
+ // If the process exists but is running under a different user account (boinc_master)
+ // then the handle returned is NULL and GetLastError() returns ERROR_ACCESS_DENIED.
+ //
+ if ((h == NULL) && (GetLastError() != ERROR_ACCESS_DENIED)) {
dead = true;
} else {
- CloseHandle(h);
+ if (h) CloseHandle(h);
dead = false;
}
#else
@@ -425,7 +442,6 @@ static bool client_dead() {
dead = (interrupt_count > heartbeat_giveup_count);
}
if (dead) {
- char buf[256];
boinc_msg_prefix(buf, sizeof(buf));
fputs(buf, stderr); // don't use fprintf() here
if (aid.client_pid) {
@@ -670,8 +686,8 @@ int boinc_finish(int status) {
char buf[256];
fraction_done = 1;
fprintf(stderr,
- "%s called boinc_finish\n",
- boinc_msg_prefix(buf, sizeof(buf))
+ "%s called boinc_finish(%d)\n",
+ boinc_msg_prefix(buf, sizeof(buf)), status
);
finishing = true;
boinc_sleep(2.0); // let the timer thread send final messages
@@ -833,6 +849,8 @@ int boinc_parse_init_data_file() {
return 0;
}
+// used by wrappers
+//
int boinc_report_app_status_aux(
double cpu_time,
double checkpoint_cpu_time,
@@ -1098,9 +1116,11 @@ static void timer_handler() {
return;
}
if (finishing) {
- double cur_cpu = boinc_worker_thread_cpu_time();
- last_wu_cpu_time = cur_cpu + initial_wu_cpu_time;
- update_app_progress(last_wu_cpu_time, last_checkpoint_cpu_time);
+ if (options.send_status_msgs) {
+ double cur_cpu = boinc_worker_thread_cpu_time();
+ last_wu_cpu_time = cur_cpu + initial_wu_cpu_time;
+ update_app_progress(last_wu_cpu_time, last_checkpoint_cpu_time);
+ }
boinc_disable_timer_thread = true;
return;
}
@@ -1228,6 +1248,17 @@ static void worker_signal_handler(int) {
}
if (options.direct_process_action) {
while (boinc_status.suspended && in_critical_section==0) {
+#ifdef ANDROID
+ // per-thread signal masking doesn't work
+ // on old (pre-4.1) versions of Android.
+ // If we're handling this signal in the timer thread,
+ // send signal explicitly to worker thread.
+ //
+ if (pthread_self() == timer_thread_handle) {
+ pthread_kill(worker_thread_handle, SIGALRM);
+ return;
+ }
+#endif
sleep(1); // don't use boinc_sleep() because it does FP math
}
}
@@ -1271,6 +1302,7 @@ int start_timer_thread() {
SetThreadPriority(worker_thread_handle, THREAD_PRIORITY_IDLE);
}
#else
+ worker_thread_handle = pthread_self();
pthread_attr_t thread_attrs;
pthread_attr_init(&thread_attrs);
pthread_attr_setstacksize(&thread_attrs, 32768);
diff --git a/api/boinc_api_fortran.cpp b/api/boinc_api_fortran.cpp
index 0b02748..dee4756 100644
--- a/api/boinc_api_fortran.cpp
+++ b/api/boinc_api_fortran.cpp
@@ -20,13 +20,18 @@
// Define this symbol (here or in Makefile) if you want graphics functions
//#define GRAPHICS
+// Define this symbol (here or in Makefile) if you want zip/unzip functions
+//#define INCLUDE_ZIP
+
#include "config.h"
#include "util.h"
#include "boinc_api.h"
#ifdef GRAPHICS
#include "graphics_api.h"
#endif
+#ifdef INCLUDE_ZIP
#include "boinc_zip.h"
+#endif
// helper class that makes a C-string from a character array and length,
// automatically deleted on destruction.
@@ -90,10 +95,6 @@ void boinc_parse_init_data_file_() {
boinc_parse_init_data_file();
}
-void boinc_write_init_data_file_() {
- boinc_write_init_data_file();
-}
-
void boinc_time_to_checkpoint_(int* result) {
*result = boinc_time_to_checkpoint();
}
@@ -114,6 +115,7 @@ void boinc_calling_thread_cpu_time_(double* d) {
boinc_calling_thread_cpu_time(*d);
}
+#ifdef INCLUDE_ZIP
void boinc_zip_(int* zipmode, const char* zipfile,
const char* path, int zipfile_len, int path_len
) {
@@ -125,6 +127,7 @@ void boinc_zip_(int* zipmode, const char* zipfile,
pathff.strip_whitespace();
boinc_zip(*zipmode,zipfileff.c_str(),pathff.c_str());
}
+#endif
} // extern "C"
diff --git a/api/boinc_opencl.cpp b/api/boinc_opencl.cpp
index 288577a..7b0fa9a 100644
--- a/api/boinc_opencl.cpp
+++ b/api/boinc_opencl.cpp
@@ -110,16 +110,19 @@ int boinc_get_opencl_ids_aux(
// Use gpu_opencl_dev_index if available
if (opencl_device_index >= 0) {
- if (opencl_device_index < (int)num_devices) {
- device_id = devices[opencl_device_index];
- retval = get_vendor(device_id, vendor, sizeof(vendor));
- if (retval != CL_SUCCESS) continue;
+ if (opencl_device_index >= (int)num_devices) {
+ fprintf(stderr, "Invalid OpenCL GPU index: %d \n", opencl_device_index);
+ return CL_INVALID_DEVICE;
+ }
- if (!strcmp(vendor, type)) {
- *device = device_id;
- *platform = platforms[platform_index];
- return 0;
- }
+ device_id = devices[opencl_device_index];
+ retval = get_vendor(device_id, vendor, sizeof(vendor));
+ if (retval != CL_SUCCESS) continue;
+
+ if (!strcmp(vendor, type)) {
+ *device = device_id;
+ *platform = platforms[platform_index];
+ return 0;
}
continue;
@@ -127,7 +130,7 @@ int boinc_get_opencl_ids_aux(
// Older versions of init_data.xml don't have gpu_opencl_dev_index field
// NOTE: This may return the wrong device on older versions of BOINC if
- // OpenCL does not recognize all GPU models detected by CUDA
+ // OpenCL does not recognize all GPU models detected by CUDA or CAL
for (device_index=0; device_index<(int)num_devices; ++device_index) {
device_id = devices[device_index];
diff --git a/api/graphics2.cpp b/api/graphics2.cpp
index 2ab102b..56b0fa9 100644
--- a/api/graphics2.cpp
+++ b/api/graphics2.cpp
@@ -22,6 +22,9 @@
#define strdup _strdup
#define snprintf _snprintf
#endif
+#ifdef _WIN32
+#include <boinc_win.h>
+#endif
#include "util.h"
#include "app_ipc.h"
diff --git a/api/graphics2_util.cpp b/api/graphics2_util.cpp
index 36fb3bf..91f2dd2 100644
--- a/api/graphics2_util.cpp
+++ b/api/graphics2_util.cpp
@@ -70,9 +70,9 @@ void* boinc_graphics_make_shmem(const char* prog_name, int size) {
char shmem_name[MAXPATHLEN];
get_shmem_name(prog_name, shmem_name);
int retval = create_shmem_mmap(shmem_name, size, &p);
- // Graphics app may be run by a different user & group than worker app
- // Although create_shmem passed 0666 to open(), it was modified by umask
- if (retval == 0) chmod(shmem_name, 0666);
+ // make sure user/group RW permissions are set, but not other.
+ //
+ if (retval == 0) chmod(shmem_name, 0660);
#endif
if (retval) return 0;
return p;
diff --git a/api/ttfont.cpp b/api/ttfont.cpp
index 070f974..5dbcd01 100644
--- a/api/ttfont.cpp
+++ b/api/ttfont.cpp
@@ -26,7 +26,8 @@
// freetype2 library: http://www.freetype.org/
// this should basically be a drop-in for the old boinc txf_* functions i.e.
-// txf_load_fonts and txf_render_string, with extra options on the latter for rotating etc
+// txf_load_fonts and txf_render_string,
+// with extra options on the latter for rotating etc
// originally adapted by Carl Christensen
@@ -41,6 +42,7 @@
#include "filesys.h" // from boinc for file_exists
// I put in it's own namespace so call TTFont::ttf_load_fonts() etc
+//
namespace TTFont {
// The Liberation version 2.00.0 fonts referenced below are free
@@ -53,6 +55,7 @@ namespace TTFont {
// you'll want to define a 2-d array of char as appropriate for your
// truetype font filenames (path is set in the call to ttf_load_fonts)
+//
static const char *g_cstrFont[] = {
"LiberationSans-Regular.ttf", // 0, this is the default
"LiberationSans-Bold.ttf", // 1
@@ -74,14 +77,24 @@ static const char *g_cstrFont[] = {
FTFont* g_font[NUM_FONT];
int g_iFont = -1;
-// load fonts. call once.
-// pass in the font directory, and any special-scaling font name & size (e.g. if I want a huge typeface for Sans-Serif Regular then I pass in "LiberationSans-Regular.ttf", 3000)
-void ttf_load_fonts(const char* dir, const char* strScaleFont, const int& iScaleFont) {
- static bool bInit = false; // flag so we don't call again, otherwise we'll have memory leaks each subsequent call to new FTTextureFont etc
+// Load fonts. call once.
+// Pass in the font directory (normally the project directory:
+// APP_INIT_DATA::project_dir for BOINC apps),
+// and any special-scaling font name & size
+// (e.g. if I want a huge typeface for Sans-Serif Regular
+// then I pass in "LiberationSans-Regular.ttf", 3000)
+//
+void ttf_load_fonts(
+ const char* dir, const char* strScaleFont, const int& iScaleFont
+) {
+ static bool bInit = false;
+ // flag so we don't call again, otherwise we'll have memory leaks
+ // each subsequent call to new FTTextureFont etc
if (bInit) return; // we've already been here
bInit = true; // we're in now!
ttf_cleanup();
- memset(g_font, 0x00, sizeof(FTFont*) * NUM_FONT); // initialize to null's for error checking later
+ memset(g_font, 0x00, sizeof(FTFont*) * NUM_FONT);
+ // initialize to null's for error checking later
char vpath[MAXPATHLEN];
g_iFont = -1;
for (unsigned int i=0 ; i < NUM_FONT; i++){
@@ -97,8 +110,7 @@ void ttf_load_fonts(const char* dir, const char* strScaleFont, const int& iScale
#endif
int iScale = 30;
if (strScaleFont && !strcmp(strScaleFont, g_cstrFont[i])) iScale = iScaleFont;
- if(!g_font[i]->FaceSize(iScale))
- {
+ if(!g_font[i]->FaceSize(iScale)) {
fprintf(stderr, "Failed to set size");
}
@@ -110,7 +122,7 @@ void ttf_load_fonts(const char* dir, const char* strScaleFont, const int& iScale
}
#ifdef _DEBUG
- else {
+ else {
fprintf(stderr, "Failed to load '%s'...\n", vpath);
}
#endif
@@ -118,9 +130,9 @@ void ttf_load_fonts(const char* dir, const char* strScaleFont, const int& iScale
}
}
-// remove our objects?
-void ttf_cleanup()
-{
+// remove our objects
+//
+void ttf_cleanup() {
for (unsigned int i = 0; i < NUM_FONT; i++) {
if (g_font[i]) {
delete g_font[i];
@@ -143,8 +155,7 @@ void ttf_render_string(
const float& fRotY, // optional rotation vector for Y
const float& fRotZ, // optional rotation vector for Z
const float& fRadius // circular radius to draw along
-)
-{
+) {
// http://ftgl.sourceforge.net/docs/html/
// if requested font isn't available, find first one that is
diff --git a/api/ttfont.h b/api/ttfont.h
index a4c5c2f..c8b1b0e 100644
--- a/api/ttfont.h
+++ b/api/ttfont.h
@@ -25,8 +25,9 @@
// ftgl library: http://sourceforge.net/projects/ftgl/files/FTGL%20Source/
// freetype2 library: http://www.freetype.org/
-// this should basically be a drop-in for the old boinc txf_* functions i.e.
-// txf_load_font and txf_render_string, with extra options on the latter for rotating etc
+// this should basically be a drop-in for the old boinc txf_* functions,
+// i.e. txf_load_font and txf_render_string,
+// with extra options on the latter for rotating etc
// originally adapted by Carl Christensen
@@ -34,30 +35,33 @@
#ifndef _TTFONT_H_
#define _TTFONT_H_
-// I put in it's own namespace so call TTFont::ttf_load_fonts() etc
+// I put in its own namespace so call TTFont::ttf_load_fonts() etc
+
namespace TTFont {
- extern int g_iFont;
-
- extern void ttf_load_fonts(const char* dir = NULL, const char* strScaleFont = NULL, const int& iScaleFont =30);
-
- extern void ttf_render_string(
- const double& x,
- const double& y,
- const double& z, // text position
- const float& fscale, // scale factor
- const GLfloat * col, // colour
- const char* s, // string ptr
- const int& iFont = 0, // font index
- const float& fRotAngle = 0.0f, // optional rotation angle
- const float& fRotX = 0.0f, // optional rotation vector for X
- const float& fRotY = 0.0f, // optional rotation vector for Y
- const float& fRotZ = 1.0f, // optional rotation vector for Z
- const float& fRadius = 0.0f // circular radius to draw along
- );
-
- void ttf_cleanup();
-} // namespace
+ extern int g_iFont;
-#endif // inclusion
+ extern void ttf_load_fonts(
+ const char* dir = NULL,
+ const char* strScaleFont = NULL,
+ const int& iScaleFont =30
+ );
+ extern void ttf_render_string(
+ const double& x,
+ const double& y,
+ const double& z, // text position
+ const float& fscale, // scale factor
+ const GLfloat * col, // colour
+ const char* s, // string ptr
+ const int& iFont = 0, // font index
+ const float& fRotAngle = 0.0f, // optional rotation angle
+ const float& fRotX = 0.0f, // optional rotation vector for X
+ const float& fRotY = 0.0f, // optional rotation vector for Y
+ const float& fRotZ = 1.0f, // optional rotation vector for Z
+ const float& fRadius = 0.0f // circular radius to draw along
+ );
+ void ttf_cleanup();
+} // namespace
+
+#endif // inclusion
diff --git a/build_pos b/build_pos
new file mode 100755
index 0000000..f8c6247
--- /dev/null
+++ b/build_pos
@@ -0,0 +1,37 @@
+#! /usr/bin/env php
+<?php
+
+// Generate translation templates from source code.
+// Compare them with the current versions in trunk;
+// if they differ, send email telling us to validate and commit
+// the new versions.
+
+$emails = "davea at ssl.berkeley.edu rwalton at ssl.berkeley.edu";
+$tdir = "locale/templates";
+
+system("cd doc; ./build_po.php");
+system("tools/compare_pot doc/BOINC-Web.pot $tdir/BOINC-Web.pot $emails");
+
+system("cd html/ops; ./build_po_boinc.php");
+system("tools/compare_pot html/ops/BOINC-Project-Generic.pot $tdir/BOINC-Project-Generic.pot $emails");
+
+system("cd client; ./build_po");
+system("tools/compare_pot client/BOINC-Client.pot $tdir/BOINC-Client.pot $emails");
+
+system("cd clientgui; ./build_po");
+system("tools/compare_pot clientgui/BOINC-Manager.pot $tdir/BOINC-Manager.pot $emails");
+
+system("cd mac_installer; ./build_po");
+system("tools/compare_pot mac_installer/BOINC-Setup.pot $tdir/BOINC-Setup.pot $emails");
+
+//system("cd android; a2po export -v");
+//system("tools/compare_pot android/BOINC-Android.pot $tdir/BOINC-Android.pot $emails");
+
+// generate translations for BOINC web site
+//
+system("cd doc; ./update_translations.php");
+
+// copy generic web files to html/translations
+//
+system("cd locale; ./copy_files.php");
+?>
diff --git a/client/Makefile.am b/client/Makefile.am
index 9144c6a..3b5e690 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -22,12 +22,15 @@ if OS_DARWIN
LIBS += -framework IOKit -framework Foundation -framework ScreenSaver -framework Cocoa -framework CoreServices
endif
-bin_PROGRAMS = boinc_client switcher boinccmd
+bin_PROGRAMS = boinc_client boinccmd
+if !OS_WIN32
+bin_PROGRAMS += switcher
+endif
boinccmd_SOURCES = boinc_cmd.cpp
boinccmd_DEPENDENCIES = $(LIBBOINC)
boinccmd_CPPFLAGS = $(AM_CPPFLAGS)
-boinccmd_LDFLAGS = $(AM_LDFLAGS) -L../lib
+boinccmd_LDFLAGS = $(AM_LDFLAGS) -L$(top_srcdir)/lib
boinccmd_LDADD = $(LIBBOINC) $(BOINC_EXTRA_LIBS) $(PTHREAD_LIBS)
boinc_client_SOURCES = \
@@ -37,11 +40,12 @@ boinc_client_SOURCES = \
app_config.cpp \
app_control.cpp \
app_start.cpp \
- async_file.cpp \
+ async_file.cpp \
check_state.cpp \
client_msgs.cpp \
client_state.cpp \
client_types.cpp \
+ coproc_sched.cpp \
cpu_sched.cpp \
cs_account.cpp \
cs_apps.cpp \
@@ -55,33 +59,32 @@ boinc_client_SOURCES = \
cs_scheduler.cpp \
cs_statefile.cpp \
cs_trickle.cpp \
- current_version.cpp \
+ current_version.cpp \
dhrystone.cpp \
dhrystone2.cpp \
file_names.cpp \
file_xfer.cpp \
- gpu_amd.cpp \
- gpu_detect.cpp \
- gpu_intel.cpp \
- gpu_nvidia.cpp \
- gpu_opencl.cpp \
+ gpu_amd.cpp \
+ gpu_detect.cpp \
+ gpu_intel.cpp \
+ gpu_nvidia.cpp \
+ gpu_opencl.cpp \
gui_http.cpp \
gui_rpc_server.cpp \
gui_rpc_server_ops.cpp \
hostinfo_network.cpp \
- hostinfo_unix.cpp \
http_curl.cpp \
log_flags.cpp \
- mac_address.cpp \
+ mac_address.cpp \
main.cpp \
net_stats.cpp \
pers_file_xfer.cpp \
- project.cpp \
- result.cpp \
+ project.cpp \
+ result.cpp \
rr_sim.cpp \
sandbox.cpp \
scheduler_op.cpp \
- thread.cpp \
+ thread.cpp \
time_stats.cpp \
whetstone.cpp \
work_fetch.cpp
@@ -89,9 +92,19 @@ boinc_client_SOURCES = \
boinc_client_DEPENDENCIES = $(LIBBOINC)
boinc_client_CPPFLAGS = $(AM_CPPFLAGS)
boinc_client_CXXFLAGS = $(AM_CXXFLAGS) $(SSL_CXXFLAGS)
-boinc_client_LDFLAGS = $(AM_LDFLAGS) $(SSL_LDFLAGS) -L../lib
+boinc_client_LDFLAGS = $(AM_LDFLAGS) $(SSL_LDFLAGS) -L$(top_srcdir)/lib
+if OS_WIN32
+boinc_client_CXXFLAGS += -I$(top_srcdir)/coprocs/NVIDIA/include
+boinc_client_SOURCES += hostinfo_win.cpp \
+ sysmon_win.cpp \
+ win/boinc_cli.rc \
+ win/res/boinc.ico
+else
if OS_DARWIN
boinc_client_LDFLAGS += -Wl,-flat_namespace,-undefined,dynamic_lookup
+else
+boinc_client_SOURCES += hostinfo_unix.cpp
+endif
endif
boinc_client_LDADD = $(LIBBOINC) $(LIBBOINC_CRYPT) $(BOINC_EXTRA_LIBS) $(PTHREAD_LIBS)
diff --git a/client/acct_mgr.cpp b/client/acct_mgr.cpp
index bb2e42d..6da5441 100644
--- a/client/acct_mgr.cpp
+++ b/client/acct_mgr.cpp
@@ -188,7 +188,7 @@ int ACCT_MGR_OP::do_rpc(
fclose(fprefs);
}
}
- gstate.host_info.write(mf, !config.suppress_net_info, true);
+ gstate.host_info.write(mf, !cc_config.suppress_net_info, true);
if (strlen(gstate.acct_mgr_info.opaque)) {
fprintf(f,
" <opaque>\n%s\n"
@@ -278,6 +278,7 @@ int AM_ACCOUNT::parse(XML_PARSER& xp) {
if (xp.parse_str("no_rsc", buf, sizeof(buf))) {
handle_no_rsc(buf, true);
+ continue;
}
if (xp.parse_bool("dont_request_more_work", btemp)) {
dont_request_more_work.set(btemp);
@@ -454,11 +455,20 @@ void ACCT_MGR_OP::handle_reply(int http_op_retval) {
error_num = ERR_XML_PARSE;
}
} else if (error_num) {
- msg_printf(&ami, MSG_USER_ALERT,
- "%s: %s",
- _("Message from account manager"),
- boincerror(error_num)
- );
+ if (error_num == http_op_retval) {
+ // if it was an HTTP error, don't notify the user;
+ // probably the acct mgr server is down
+ //
+ msg_printf(&ami, MSG_INFO,
+ "Account manager RPC failed: %s", boincerror(error_num)
+ );
+ } else {
+ msg_printf(&ami, MSG_USER_ALERT,
+ "%s: %s",
+ _("Message from account manager"),
+ boincerror(error_num)
+ );
+ }
}
if (error_num) {
diff --git a/client/acct_setup.cpp b/client/acct_setup.cpp
index 4be785f..5faaff4 100644
--- a/client/acct_setup.cpp
+++ b/client/acct_setup.cpp
@@ -254,7 +254,7 @@ void GET_PROJECT_LIST_OP::handle_reply(int http_op_retval) {
}
void CLIENT_STATE::all_projects_list_check() {
- if (config.dont_contact_ref_site) return;
+ if (cc_config.dont_contact_ref_site) return;
if (all_projects_list_check_time) {
if (now - all_projects_list_check_time < ALL_PROJECTS_LIST_CHECK_PERIOD) {
return;
diff --git a/client/app.cpp b/client/app.cpp
index 319dec4..1e6ab4c 100644
--- a/client/app.cpp
+++ b/client/app.cpp
@@ -101,6 +101,9 @@ ACTIVE_TASK::ACTIVE_TASK() {
checkpoint_fraction_done = 0;
checkpoint_fraction_done_elapsed_time = 0;
current_cpu_time = 0;
+ peak_working_set_size = 0;
+ peak_swap_size = 0;
+ peak_disk_usage = 0;
once_ran_edf = false;
fraction_done = 0;
@@ -110,6 +113,8 @@ ACTIVE_TASK::ACTIVE_TASK() {
run_interval_start_wall_time = gstate.now;
checkpoint_wall_time = 0;
elapsed_time = 0;
+ bytes_sent_episode = 0;
+ bytes_received_episode = 0;
bytes_sent = 0;
bytes_received = 0;
strcpy(slot_dir, "");
@@ -185,7 +190,7 @@ int ACTIVE_TASK::preempt(int preempt_type, int reason) {
result->name
);
}
- if (task_state() != PROCESS_EXECUTING) return 0;
+ if (task_state() != PROCESS_EXECUTING) return 0;
return suspend();
}
return 0;
@@ -236,7 +241,7 @@ void ACTIVE_TASK::cleanup_task() {
}
#endif
- if (config.exit_after_finish) {
+ if (cc_config.exit_after_finish) {
gstate.write_state_file();
exit(0);
}
@@ -336,6 +341,10 @@ void ACTIVE_TASK_SET::get_memory_usage() {
}
return;
}
+ PROCINFO boinc_total;
+ if (log_flags.mem_usage_debug) {
+ memset(&boinc_total, 0, sizeof(boinc_total));
+ }
for (i=0; i<active_tasks.size(); i++) {
ACTIVE_TASK* atp = active_tasks[i];
if (atp->task_state() == PROCESS_UNINITIALIZED) continue;
@@ -366,31 +375,55 @@ void ACTIVE_TASK_SET::get_memory_usage() {
pi.working_set_size_smoothed = .5*(pi.working_set_size_smoothed + pi.working_set_size);
}
+ if (pi.working_set_size > atp->peak_working_set_size) {
+ atp->peak_working_set_size = pi.working_set_size;
+ }
+ if (pi.swap_size > atp->peak_swap_size) {
+ atp->peak_swap_size = pi.swap_size;
+ }
+
if (!first) {
int pf = pi.page_fault_count - last_page_fault_count;
pi.page_fault_rate = pf/diff;
if (log_flags.mem_usage_debug) {
msg_printf(atp->result->project, MSG_INFO,
- "[mem_usage] %s: WS %.2fMB, smoothed %.2fMB, page %.2fMB, %.2f page faults/sec, user CPU %.3f, kernel CPU %.3f",
+ "[mem_usage] %s: WS %.2fMB, smoothed %.2fMB, swap %.2fMB, %.2f page faults/sec, user CPU %.3f, kernel CPU %.3f",
atp->result->name,
pi.working_set_size/MEGA,
pi.working_set_size_smoothed/MEGA,
pi.swap_size/MEGA,
pi.page_fault_rate,
- pi.user_time, pi.kernel_time
+ pi.user_time,
+ pi.kernel_time
);
+ boinc_total.working_set_size += pi.working_set_size;
+ boinc_total.working_set_size_smoothed += pi.working_set_size_smoothed;
+ boinc_total.swap_size += pi.swap_size;
+ boinc_total.page_fault_rate += pi.page_fault_rate;
}
}
}
- for (i=0; i<config.exclusive_apps.size(); i++) {
- if (app_running(pm, config.exclusive_apps[i].c_str())) {
+ if (!first) {
+ if (log_flags.mem_usage_debug) {
+ msg_printf(0, MSG_INFO,
+ "[mem_usage] BOINC totals: WS %.2fMB, smoothed %.2fMB, swap %.2fMB, %.2f page faults/sec",
+ boinc_total.working_set_size/MEGA,
+ boinc_total.working_set_size_smoothed/MEGA,
+ boinc_total.swap_size/MEGA,
+ boinc_total.page_fault_rate
+ );
+ }
+ }
+
+ for (i=0; i<cc_config.exclusive_apps.size(); i++) {
+ if (app_running(pm, cc_config.exclusive_apps[i].c_str())) {
exclusive_app_running = gstate.now;
break;
}
}
- for (i=0; i<config.exclusive_gpu_apps.size(); i++) {
- if (app_running(pm, config.exclusive_gpu_apps[i].c_str())) {
+ for (i=0; i<cc_config.exclusive_gpu_apps.size(); i++) {
+ if (app_running(pm, cc_config.exclusive_gpu_apps[i].c_str())) {
exclusive_gpu_app_running = gstate.now;
break;
}
@@ -408,7 +441,7 @@ void ACTIVE_TASK_SET::get_memory_usage() {
procinfo_non_boinc(pi, pm);
if (log_flags.mem_usage_debug) {
msg_printf(NULL, MSG_INFO,
- "[mem_usage] All others: RAM %.2fMB, page %.2fMB, user %.3f, kernel %.3f",
+ "[mem_usage] All others: WS %.2fMB, swap %.2fMB, user %.3fs, kernel %.3fs",
pi.working_set_size/MEGA, pi.swap_size/MEGA,
pi.user_time, pi.kernel_time
);
@@ -471,6 +504,9 @@ int ACTIVE_TASK::current_disk_usage(double& size) {
retval = file_size(path, x);
if (!retval) size += x;
}
+ if (size > peak_disk_usage) {
+ peak_disk_usage = size;
+ }
return 0;
}
@@ -563,7 +599,9 @@ int ACTIVE_TASK::write(MIOFILE& fout) {
" <swap_size>%f</swap_size>\n"
" <working_set_size>%f</working_set_size>\n"
" <working_set_size_smoothed>%f</working_set_size_smoothed>\n"
- " <page_fault_rate>%f</page_fault_rate>\n",
+ " <page_fault_rate>%f</page_fault_rate>\n"
+ " <bytes_sent>%f</bytes_sent>\n"
+ " <bytes_received>%f</bytes_received>\n",
result->project->master_url,
result->name,
task_state(),
@@ -578,7 +616,9 @@ int ACTIVE_TASK::write(MIOFILE& fout) {
procinfo.swap_size,
procinfo.working_set_size,
procinfo.working_set_size_smoothed,
- procinfo.page_fault_rate
+ procinfo.page_fault_rate,
+ bytes_sent,
+ bytes_received
);
fout.printf("</active_task>\n");
return 0;
@@ -594,7 +634,7 @@ int ACTIVE_TASK::write_gui(MIOFILE& fout) {
if (fd == 0 && elapsed_time > 0) {
double est_time = wup->rsc_fpops_est/app_version->flops;
double x = elapsed_time/est_time;
- fd = 1 - exp(-x);
+ fd = 1 - exp(-x);
}
fout.printf(
"<active_task>\n"
@@ -611,6 +651,8 @@ int ACTIVE_TASK::write_gui(MIOFILE& fout) {
" <working_set_size>%f</working_set_size>\n"
" <working_set_size_smoothed>%f</working_set_size_smoothed>\n"
" <page_fault_rate>%f</page_fault_rate>\n"
+ " <bytes_sent>%f</bytes_sent>\n"
+ " <bytes_received>%f</bytes_received>\n"
"%s"
"%s",
task_state(),
@@ -626,6 +668,8 @@ int ACTIVE_TASK::write_gui(MIOFILE& fout) {
procinfo.working_set_size,
procinfo.working_set_size_smoothed,
procinfo.page_fault_rate,
+ bytes_sent,
+ bytes_received,
too_large?" <too_large/>\n":"",
needs_shmem?" <needs_shmem/>\n":""
);
@@ -758,6 +802,8 @@ int ACTIVE_TASK::parse(XML_PARSER& xp) {
else if (xp.parse_double("working_set_size_smoothed", procinfo.working_set_size_smoothed)) continue;
else if (xp.parse_double("page_fault_rate", procinfo.page_fault_rate)) continue;
else if (xp.parse_double("current_cpu_time", x)) continue;
+ else if (xp.parse_double("bytes_sent", bytes_sent)) continue;
+ else if (xp.parse_double("bytes_received", bytes_received)) continue;
else {
if (log_flags.unparsed_xml) {
msg_printf(project, MSG_INFO,
@@ -1029,16 +1075,17 @@ void ACTIVE_TASK::set_task_state(int val, const char* where) {
}
}
+#ifndef SIM
#ifdef NEW_CPU_THROTTLE
#ifdef _WIN32
DWORD WINAPI throttler(LPVOID) {
#else
void* throttler(void*) {
#endif
-
+
// Initialize diagnostics framework for this thread
//
- diagnostics_thread_init(BOINC_DIAG_DEFAULTS);
+ diagnostics_thread_init();
while (1) {
client_mutex.lock();
@@ -1047,7 +1094,7 @@ void* throttler(void*) {
boinc_sleep(10);
continue;
}
- double on, off, on_frac = gstate.global_prefs.cpu_usage_limit / 100;
+ double on, off, on_frac = gstate.global_prefs.cpu_usage_limit / 100;
#if 0
// sub-second CPU throttling
#define THROTTLE_PERIOD 1.
@@ -1055,13 +1102,13 @@ void* throttler(void*) {
off = THROTTLE_PERIOD - on;
#else
// throttling w/ at least 1 sec between suspend/resume
- if (on_frac > .5) {
- off = 1;
- on = on_frac/(1.-on_frac);
- } else {
- on = 1;
- off = (1.-on_frac)/on_frac;
- }
+ if (on_frac > .5) {
+ off = 1;
+ on = on_frac/(1.-on_frac);
+ } else {
+ on = 1;
+ off = (1.-on_frac)/on_frac;
+ }
#endif
gstate.tasks_throttled = true;
@@ -1079,3 +1126,4 @@ void* throttler(void*) {
return 0;
}
#endif
+#endif
diff --git a/client/app.h b/client/app.h
index cad7371..8221f8c 100644
--- a/client/app.h
+++ b/client/app.h
@@ -72,11 +72,9 @@ struct ACTIVE_TASK {
PROCESS_ID pid;
PROCINFO procinfo;
- // START OF ITEMS SAVED IN STATE FILE
- int _task_state;
- // PROCESS_*; see common_defs.h
- int slot;
- // subdirectory of slots/ where this runs
+ // START OF ITEMS SAVED IN TASK STATE FILE
+ // (in addition to result name and project URL)
+
double checkpoint_cpu_time;
// CPU at the last checkpoint
// Note: "CPU time" refers to the sum over all episodes.
@@ -84,6 +82,16 @@ struct ACTIVE_TASK {
// in episodes before the current one)
double checkpoint_elapsed_time;
// elapsed time at last checkpoint
+ double peak_working_set_size;
+ double peak_swap_size;
+ double peak_disk_usage;
+
+ // START OF ITEMS ALSO SAVED IN CLIENT STATE FILE
+
+ int _task_state;
+ // PROCESS_*; see common_defs.h
+ int slot;
+ // subdirectory of slots/ where this runs
double checkpoint_fraction_done;
// fraction done at last checkpoint
double checkpoint_fraction_done_elapsed_time;
@@ -109,8 +117,12 @@ struct ACTIVE_TASK {
// wall time at the last checkpoint
double elapsed_time;
// current total elapsed (running) time
+ double bytes_sent_episode;
+ // bytes sent in current episode of job,
+ // as (optionally) reported by boinc_network_usage()
+ double bytes_received_episode;
double bytes_sent;
- // reported by the app if it does network I/O
+ // bytes in all episodes
double bytes_received;
char slot_dir[256];
// directory where process runs (relative)
@@ -179,6 +191,8 @@ struct ACTIVE_TASK {
|| _task_state == PROCESS_EXECUTING
|| _task_state == PROCESS_SUSPENDED;
}
+ void copy_final_info();
+ // copy final CPU time etc. to result
ACTIVE_TASK();
~ACTIVE_TASK();
@@ -218,6 +232,12 @@ struct ACTIVE_TASK {
int abort_task(int exit_status, const char*);
// can be called whether or not process exists
+ // is the GPU task running or suspended (due to CPU throttling)
+ //
+ inline bool is_gpu_task_running() {
+ int s = task_state();
+ return s == PROCESS_EXECUTING || s == PROCESS_SUSPENDED;
+ }
// Implementation stuff related to termination
//
diff --git a/client/app_config.cpp b/client/app_config.cpp
index 26780aa..13b2a75 100644
--- a/client/app_config.cpp
+++ b/client/app_config.cpp
@@ -45,6 +45,9 @@ int APP_CONFIG::parse(XML_PARSER& xp, PROJECT* p) {
}
continue;
}
+ if (xp.parse_bool("fraction_done_exact", fraction_done_exact)) {
+ continue;
+ }
if (log_flags.unparsed_xml) {
msg_printf(p, MSG_INFO,
"Unparsed line in app_config.xml: %s",
@@ -134,6 +137,8 @@ void APP_CONFIGS::config_app_versions(PROJECT* p, bool show_warnings) {
continue;
}
app->max_concurrent = ac.max_concurrent;
+ app->fraction_done_exact = ac.fraction_done_exact;
+
if (!ac.gpu_gpu_usage || !ac.gpu_cpu_usage) continue;
for (unsigned int j=0; j<gstate.app_versions.size(); j++) {
APP_VERSION* avp = gstate.app_versions[j];
@@ -193,6 +198,9 @@ static void clear_app_config(PROJECT* p) {
}
}
+// check for app_config.xml files, and parse them.
+// Called at startup and on read_cc_config() RPC
+//
void check_app_config() {
char path[MAXPATHLEN];
FILE* f;
@@ -205,9 +213,7 @@ void check_app_config() {
clear_app_config(p);
continue;
}
- msg_printf(p, MSG_INFO,
- "Found %s", APP_CONFIG_FILE_NAME
- );
+ msg_printf(p, MSG_INFO, "Found %s", APP_CONFIG_FILE_NAME);
int retval = p->app_configs.parse_file(f, p);
if (!retval) {
p->app_configs.config_app_versions(p, true);
diff --git a/client/app_config.h b/client/app_config.h
index 9abb037..d2e9eac 100644
--- a/client/app_config.h
+++ b/client/app_config.h
@@ -32,6 +32,7 @@ struct APP_CONFIG {
int max_concurrent;
double gpu_gpu_usage;
double gpu_cpu_usage;
+ bool fraction_done_exact;
int parse(XML_PARSER&, PROJECT*);
};
diff --git a/client/app_control.cpp b/client/app_control.cpp
index 7c52c09..ad143ea 100644
--- a/client/app_control.cpp
+++ b/client/app_control.cpp
@@ -379,6 +379,16 @@ void ACTIVE_TASK::handle_temporary_exit(
}
}
+void ACTIVE_TASK::copy_final_info() {
+ result->final_cpu_time = current_cpu_time;
+ result->final_elapsed_time = elapsed_time;
+ result->final_peak_working_set_size = peak_working_set_size;
+ result->final_peak_swap_size = peak_swap_size;
+ result->final_peak_disk_usage = peak_disk_usage;
+ result->final_bytes_sent = bytes_sent;
+ result->final_bytes_received = bytes_received;
+}
+
// deal with a process that has exited, for whatever reason:
// - completion
// - crash
@@ -406,8 +416,7 @@ void ACTIVE_TASK::handle_exited_app(int stat) {
get_app_status_msg();
get_trickle_up_msg();
- result->final_cpu_time = current_cpu_time;
- result->final_elapsed_time = elapsed_time;
+ copy_final_info();
// if an abort or quit is pending,
// the process may have exited itself, or we may have killed it.
@@ -775,12 +784,17 @@ bool ACTIVE_TASK::check_max_disk_exceeded() {
// Check if any of the active tasks have exceeded their
// resource limits on disk, CPU time or memory
//
+// TODO: this gets called ever 1 sec,
+// but mem and disk usage are computed less often.
+// refactor.
+//
bool ACTIVE_TASK_SET::check_rsc_limits_exceeded() {
unsigned int i;
ACTIVE_TASK *atp;
static double last_disk_check_time = 0;
bool do_disk_check = false;
bool did_anything = false;
+ char buf[256];
double ram_left = gstate.available_ram();
double max_ram = gstate.max_available_ram();
@@ -797,31 +811,62 @@ bool ACTIVE_TASK_SET::check_rsc_limits_exceeded() {
atp = active_tasks[i];
if (atp->task_state() != PROCESS_EXECUTING) continue;
if (!atp->result->non_cpu_intensive() && (atp->elapsed_time > atp->max_elapsed_time)) {
- msg_printf(atp->result->project, MSG_INFO,
- "Aborting task %s: exceeded elapsed time limit %.2f (%.2fG/%.2fG)",
- atp->result->name, atp->max_elapsed_time,
+ sprintf(buf, "exceeded elapsed time limit %.2f (%.2fG/%.2fG)",
+ atp->max_elapsed_time,
atp->result->wup->rsc_fpops_bound/1e9,
atp->result->avp->flops/1e9
);
- atp->abort_task(EXIT_TIME_LIMIT_EXCEEDED, "Maximum elapsed time exceeded");
+ msg_printf(atp->result->project, MSG_INFO,
+ "Aborting task %s: %s", atp->result->name, buf
+ );
+ atp->abort_task(EXIT_TIME_LIMIT_EXCEEDED, buf);
did_anything = true;
continue;
}
- if (atp->procinfo.working_set_size_smoothed > max_ram) {
+#if 0
+ // removing this for now because most projects currently
+ // have too-low values of workunit.rsc_memory_bound
+ // (causing lots of aborts)
+ // and I don't think we can expect projects to provide
+ // accurate bounds.
+ //
+ if (atp->procinfo.working_set_size_smoothed > atp->max_mem_usage) {
+ sprintf(buf, "working set size > workunit.rsc_memory_bound: %.2fMB > %.2fMB",
+ atp->procinfo.working_set_size_smoothed/MEGA, atp->max_mem_usage/MEGA
+ );
msg_printf(atp->result->project, MSG_INFO,
- "Aborting task %s: exceeded memory limit %.2fMB > %.2fMB\n",
- atp->result->name,
- atp->procinfo.working_set_size_smoothed/MEGA, max_ram/MEGA
+ "Aborting task %s: %s",
+ atp->result->name, buf
);
- atp->abort_task(EXIT_MEM_LIMIT_EXCEEDED, "Maximum memory exceeded");
+ atp->abort_task(EXIT_MEM_LIMIT_EXCEEDED, buf);
did_anything = true;
continue;
}
- if (do_disk_check && atp->check_max_disk_exceeded()) {
+#endif
+ if (atp->procinfo.working_set_size_smoothed > max_ram) {
+ sprintf(buf, "working set size > client RAM limit: %.2fMB > %.2fMB",
+ atp->procinfo.working_set_size_smoothed/MEGA, max_ram/MEGA
+ );
+ msg_printf(atp->result->project, MSG_INFO,
+ "Aborting task %s: %s",
+ atp->result->name, buf
+ );
+ atp->abort_task(EXIT_MEM_LIMIT_EXCEEDED, buf);
did_anything = true;
continue;
}
- ram_left -= atp->procinfo.working_set_size_smoothed;
+ if (do_disk_check || atp->peak_disk_usage == 0) {
+ if (atp->check_max_disk_exceeded()) {
+ did_anything = true;
+ continue;
+ }
+ }
+
+ // don't count RAM usage of non-CPU-intensive jobs
+ //
+ if (!atp->result->non_cpu_intensive()) {
+ ram_left -= atp->procinfo.working_set_size_smoothed;
+ }
}
if (ram_left < 0) {
gstate.request_schedule_cpus("RAM usage limit exceeded");
@@ -848,6 +893,10 @@ int ACTIVE_TASK::abort_task(int exit_status, const char* msg) {
result->exit_status = exit_status;
gstate.report_result_error(*result, msg);
result->set_state(RESULT_ABORTED, "abort_task");
+ if (task_state() == PROCESS_ABORTED) {
+ copy_final_info();
+ read_stderr_file();
+ }
return 0;
}
@@ -863,7 +912,7 @@ int ACTIVE_TASK::read_stderr_file() {
int max_len = 63*1024;
sprintf(path, "%s/%s", slot_dir, STDERR_FILE);
if (!boinc_file_exists(path)) return 0;
- if (read_file_malloc(path, buf1, max_len, !config.stderr_head)) {
+ if (read_file_malloc(path, buf1, max_len, !cc_config.stderr_head)) {
return ERR_MALLOC;
}
@@ -1284,16 +1333,20 @@ bool ACTIVE_TASK::get_app_status_msg() {
parse_double(msg_buf, "<intops_per_cpu_sec>", result->intops_per_cpu_sec);
parse_double(msg_buf, "<intops_cumulative>", result->intops_cumulative);
if (parse_double(msg_buf, "<bytes_sent>", dtemp)) {
- if (dtemp > bytes_sent) {
- daily_xfer_history.add(dtemp - bytes_sent, true);
+ if (dtemp > bytes_sent_episode) {
+ double nbytes = dtemp - bytes_sent_episode;
+ daily_xfer_history.add(nbytes, true);
+ bytes_sent += nbytes;
}
- bytes_sent = dtemp;
+ bytes_sent_episode = dtemp;
}
if (parse_double(msg_buf, "<bytes_received>", dtemp)) {
- if (dtemp > bytes_received) {
- daily_xfer_history.add(dtemp - bytes_received, false);
+ if (dtemp > bytes_received_episode) {
+ double nbytes = dtemp - bytes_received_episode;
+ daily_xfer_history.add(nbytes, false);
+ bytes_received += nbytes;
}
- bytes_received = dtemp;
+ bytes_received_episode = dtemp;
}
parse_int(msg_buf, "<want_network>", want_network);
if (parse_int(msg_buf, "<other_pid>", other_pid)) {
@@ -1388,17 +1441,17 @@ void ACTIVE_TASK_SET::get_msgs() {
}
last_time = gstate.now;
- double et_diff, et_diff_throttle;
- switch (gstate.suspend_reason) {
- case 0:
- case SUSPEND_REASON_CPU_THROTTLE:
- et_diff = delta_t;
- et_diff_throttle = delta_t * gstate.global_prefs.cpu_usage_limit/100;
- break;
- default:
- et_diff = et_diff_throttle = 0;
- break;
- }
+ double et_diff, et_diff_throttle;
+ switch (gstate.suspend_reason) {
+ case 0:
+ case SUSPEND_REASON_CPU_THROTTLE:
+ et_diff = delta_t;
+ et_diff_throttle = delta_t * gstate.global_prefs.cpu_usage_limit/100;
+ break;
+ default:
+ et_diff = et_diff_throttle = 0;
+ break;
+ }
for (i=0; i<active_tasks.size(); i++) {
atp = active_tasks[i];
@@ -1438,7 +1491,8 @@ void ACTIVE_TASK_SET::get_msgs() {
}
}
-// write checkpoint state to a file in the slot dir
+// The job just checkpointed.
+// Write some state items to a file in the slot dir
// (this avoids rewriting the state file on each checkpoint)
//
void ACTIVE_TASK::write_task_state_file() {
@@ -1453,18 +1507,24 @@ void ACTIVE_TASK::write_task_state_file() {
" <checkpoint_cpu_time>%f</checkpoint_cpu_time>\n"
" <checkpoint_elapsed_time>%f</checkpoint_elapsed_time>\n"
" <fraction_done>%f</fraction_done>\n"
+ " <peak_working_set_size>%.0f</peak_working_set_size>\n"
+ " <peak_swap_size>%.0f</peak_swap_size>\n"
+ " <peak_disk_usage>%.0f</peak_disk_usage>\n"
"</active_task>\n",
result->project->master_url,
result->name,
checkpoint_cpu_time,
checkpoint_elapsed_time,
- fraction_done
+ checkpoint_fraction_done,
+ peak_working_set_size,
+ peak_swap_size,
+ peak_disk_usage
);
fclose(f);
}
// called on startup; read the task state file in case it's more recent
-// then the main state file
+// than the main state file
//
void ACTIVE_TASK::read_task_state_file() {
char buf[4096], path[MAXPATHLEN], s[1024];
@@ -1476,6 +1536,8 @@ void ACTIVE_TASK::read_task_state_file() {
fclose(f);
buf[4095] = 0;
double x;
+ // TODO: use XML parser
+
// sanity checks - project and result name must match
//
if (!parse_str(buf, "<project_master_url>", s, sizeof(s))) {
@@ -1512,4 +1574,13 @@ void ACTIVE_TASK::read_task_state_file() {
checkpoint_elapsed_time = x;
}
}
+ if (parse_double(buf, "<peak_working_set_size>", x)) {
+ peak_working_set_size = x;
+ }
+ if (parse_double(buf, "<peak_swap_size>", x)) {
+ peak_swap_size = x;
+ }
+ if (parse_double(buf, "<peak_disk_usage>", x)) {
+ peak_disk_usage = x;
+ }
}
diff --git a/client/app_start.cpp b/client/app_start.cpp
index 31d24ff..58fb736 100644
--- a/client/app_start.cpp
+++ b/client/app_start.cpp
@@ -271,7 +271,7 @@ void ACTIVE_TASK::init_app_init_data(APP_INIT_DATA& aid) {
aid.gpu_usage = 0;
}
aid.ncpus = app_version->avg_ncpus;
- aid.vbox_window = config.vbox_window;
+ aid.vbox_window = cc_config.vbox_window;
aid.checkpoint_period = gstate.global_prefs.disk_interval;
aid.fraction_done_start = 0;
aid.fraction_done_end = 1;
@@ -292,9 +292,9 @@ int ACTIVE_TASK::write_app_init_file(APP_INIT_DATA& aid) {
char init_data_path[MAXPATHLEN];
#if 0
- msg_printf(wup->project, MSG_INFO,
- "writing app_init.xml for %s; slot %d rt %s gpu_device_num %d", result->name, slot, aid.gpu_type, aid.gpu_device_num
- );
+ msg_printf(wup->project, MSG_INFO,
+ "writing app_init.xml for %s; slot %d rt %s gpu_device_num %d", result->name, slot, aid.gpu_type, aid.gpu_device_num
+ );
#endif
sprintf(init_data_path, "%s/%s", slot_dir, INIT_DATA_FILE);
@@ -510,6 +510,10 @@ int ACTIVE_TASK::start(bool test) {
FILE_INFO* fip;
int retval, rt;
APP_INIT_DATA aid;
+#ifdef _WIN32
+ bool success = false;
+ LPVOID environment_block=NULL;
+#endif
if (async_copy) {
if (log_flags.task_debug) {
@@ -550,8 +554,8 @@ int ACTIVE_TASK::start(bool test) {
graphics_request_queue.init(result->name); // reset message queues
process_control_queue.init(result->name);
- bytes_sent = 0;
- bytes_received = 0;
+ bytes_sent_episode = 0;
+ bytes_received_episode = 0;
if (!app_client_shm.shm) {
retval = get_shmem_seg_name();
@@ -650,7 +654,7 @@ int ACTIVE_TASK::start(bool test) {
sprintf(file_path, "%s/%s", slot_dir, TEMPORARY_EXIT_FILE);
delete_project_owned_file(file_path, true);
- if (config.exit_before_start) {
+ if (cc_config.exit_before_start) {
msg_printf(0, MSG_INFO, "about to start a job; exiting");
exit(0);
}
@@ -658,7 +662,6 @@ int ACTIVE_TASK::start(bool test) {
#ifdef _WIN32
PROCESS_INFORMATION process_info;
STARTUPINFO startup_info;
- LPVOID environment_block = NULL;
char slotdirpath[MAXPATHLEN];
char error_msg[1024];
char error_msg2[1024];
@@ -673,7 +676,7 @@ int ACTIVE_TASK::start(bool test) {
app_client_shm.reset_msgs();
- if (config.run_apps_manually) {
+ if (cc_config.run_apps_manually) {
// fill in client's PID so we won't think app has exited
//
pid = GetCurrentProcessId();
@@ -691,9 +694,8 @@ int ACTIVE_TASK::start(bool test) {
}
relative_to_absolute(slot_dir, slotdirpath);
- bool success = false;
int prio_mask;
- if (config.no_priority_change) {
+ if (cc_config.no_priority_change) {
prio_mask = 0;
} else if (high_priority) {
prio_mask = BELOW_NORMAL_PRIORITY_CLASS;
@@ -703,18 +705,8 @@ int ACTIVE_TASK::start(bool test) {
for (i=0; i<5; i++) {
if (sandbox_account_service_token != NULL) {
- // Find CreateEnvironmentBlock/DestroyEnvironmentBlock pointers
- tCEB pCEB = NULL;
- tDEB pDEB = NULL;
- HMODULE hUserEnvLib = NULL;
-
- hUserEnvLib = LoadLibrary("userenv.dll");
- if (hUserEnvLib) {
- pCEB = (tCEB) GetProcAddress(hUserEnvLib, "CreateEnvironmentBlock");
- pDEB = (tDEB) GetProcAddress(hUserEnvLib, "DestroyEnvironmentBlock");
- }
- if (!pCEB(&environment_block, sandbox_account_service_token, FALSE)) {
+ if (!CreateEnvironmentBlock(&environment_block, sandbox_account_service_token, FALSE)) {
if (log_flags.task) {
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg));
msg_printf(wup->project, MSG_INFO,
@@ -745,7 +737,7 @@ int ACTIVE_TASK::start(bool test) {
);
}
- if (!pDEB(environment_block)) {
+ if (!DestroyEnvironmentBlock(environment_block)) {
if (log_flags.task) {
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg2));
msg_printf(wup->project, MSG_INFO,
@@ -755,12 +747,6 @@ int ACTIVE_TASK::start(bool test) {
}
}
- if (hUserEnvLib) {
- pCEB = NULL;
- pDEB = NULL;
- FreeLibrary(hUserEnvLib);
- }
-
} else {
if (CreateProcess(
exec_path,
@@ -855,7 +841,7 @@ int ACTIVE_TASK::start(bool test) {
);
}
- if (!config.no_priority_change) {
+ if (!cc_config.no_priority_change) {
if (setpriority(PRIO_PROCESS, pid,
high_priority?PROCESS_MEDIUM_PRIORITY:PROCESS_IDLE_PRIORITY)
) {
@@ -935,7 +921,7 @@ int ACTIVE_TASK::start(bool test) {
// PowerPC apps emulated on i386 Macs crash if running graphics
powerpc_emulated_on_i386 = ! is_native_i386_app(exec_path);
#endif
- if (config.run_apps_manually) {
+ if (cc_config.run_apps_manually) {
pid = getpid(); // use the client's PID
set_task_state(PROCESS_EXECUTING, "start");
return 0;
@@ -1021,7 +1007,9 @@ int ACTIVE_TASK::start(bool test) {
//
(void) freopen(STDERR_FILE, "a", stderr);
- if (!config.no_priority_change) {
+ // lower our priority if needed
+ //
+ if (!cc_config.no_priority_change) {
#if HAVE_SETPRIORITY
if (setpriority(PRIO_PROCESS, 0,
high_priority?PROCESS_MEDIUM_PRIORITY:PROCESS_IDLE_PRIORITY)
@@ -1029,6 +1017,18 @@ int ACTIVE_TASK::start(bool test) {
perror("setpriority");
}
#endif
+#ifdef ANDROID
+ // Android has its own notion of background scheduling
+ if (!high_priority) {
+ FILE* f = fopen("/dev/cpuctl/apps/bg_non_interactive/tasks", "w");
+ if (!f) {
+ msg_printf(NULL, MSG_INFO, "Can't open /dev/cpuctl/apps/bg_non_interactive/tasks");
+ } else {
+ fprintf(f, "%d", getpid());
+ fclose(f);
+ }
+ }
+#endif
#if HAVE_SCHED_SETSCHEDULER && defined(SCHED_BATCH) && defined (__linux__)
if (!high_priority) {
struct sched_param sp;
@@ -1039,6 +1039,11 @@ int ACTIVE_TASK::start(bool test) {
}
#endif
}
+
+ // Run the application program.
+ // If using account-based sandboxing, use a helper app
+ // to do this, to set the right user ID
+ //
if (test) {
strcpy(buf, exec_path);
} else {
@@ -1076,12 +1081,17 @@ int ACTIVE_TASK::start(bool test) {
_exit(errno);
}
+ // parent process (client) continues here
+ //
if (log_flags.task_debug) {
msg_printf(wup->project, MSG_INFO,
"[task] ACTIVE_TASK::start(): forked process: pid %d\n", pid
);
}
+#ifdef ANDROID
+#endif
+
#endif
set_task_state(PROCESS_EXECUTING, "start");
return 0;
@@ -1144,11 +1154,11 @@ int ACTIVE_TASK::resume_or_start(bool first_time) {
return 0;
}
if (log_flags.task && first_time) {
- msg_printf(result->project, MSG_INFO,
- "Starting task %s", result->name
- );
- }
- if (log_flags.cpu_sched) {
+ msg_printf(result->project, MSG_INFO,
+ "Starting task %s", result->name
+ );
+ }
+ if (log_flags.cpu_sched) {
char buf[256];
strcpy(buf, "");
if (strlen(app_version->plan_class)) {
@@ -1181,7 +1191,7 @@ union headeru {
//
int ACTIVE_TASK::is_native_i386_app(char* exec_path) {
FILE *f;
- int result = 0;
+ int retval = 0;
headeru myHeader;
fat_arch fatHeader;
@@ -1192,7 +1202,7 @@ int ACTIVE_TASK::is_native_i386_app(char* exec_path) {
f = boinc_fopen(exec_path, "rb");
if (!f) {
- return result; // Should never happen
+ return retval; // Should never happen
}
myHeader.fat.magic = 0;
@@ -1210,7 +1220,7 @@ int ACTIVE_TASK::is_native_i386_app(char* exec_path) {
theType = OSSwapInt32(theType);
}
if ((theType == CPU_TYPE_I386) || (theType == CPU_TYPE_X86_64)) {
- result = 1; // Single-architecture i386or x86_64 file
+ retval = 1; // Single-architecture i386or x86_64 file
}
break;
case FAT_MAGIC:
@@ -1230,7 +1240,7 @@ int ACTIVE_TASK::is_native_i386_app(char* exec_path) {
theType = OSSwapInt32(theType);
}
if ((theType == CPU_TYPE_I386) || (theType == CPU_TYPE_X86_64)) {
- result = 1;
+ retval = 1;
break;
}
}
@@ -1240,7 +1250,7 @@ int ACTIVE_TASK::is_native_i386_app(char* exec_path) {
}
fclose (f);
- return result;
+ return retval;
}
#endif
@@ -1255,6 +1265,7 @@ void run_test_app() {
ACTIVE_TASK at;
ACTIVE_TASK_SET ats;
RESULT result;
+ int retval;
char buf[256];
getcwd(buf, sizeof(buf)); // so we can see where we're running
@@ -1283,13 +1294,31 @@ void run_test_app() {
at.max_mem_usage = 1e14;
strcpy(at.slot_dir, ".");
+#if 1
+ // test file copy
+ //
+ ASYNC_COPY* ac = new ASYNC_COPY;
+ FILE_INFO fi;
+ retval = ac->init(&at, &fi, "big_file", "./big_file_copy");
+ if (retval) {
+ exit(1);
+ }
+ while (1) {
+ do_async_file_ops();
+ if (at.async_copy == NULL) {
+ break;
+ }
+ }
+ fprintf(stderr, "done\n");
+ exit(0);
+#endif
ats.active_tasks.push_back(&at);
unlink("boinc_finish_called");
unlink("boinc_lockfile");
unlink("boinc_temporary_exit");
unlink("stderr.txt");
- int retval = at.start(true);
+ retval = at.start(true);
if (retval) {
fprintf(stderr, "start() failed: %s\n", boincerror(retval));
}
diff --git a/client/async_file.cpp b/client/async_file.cpp
index b0acecb..428da7b 100644
--- a/client/async_file.cpp
+++ b/client/async_file.cpp
@@ -272,7 +272,7 @@ int ASYNC_VERIFY::verify_chunk() {
md5_append(&md5_state, buf, n);
}
} else {
- n = fread(buf, 1, BUFSIZE, in);
+ n = (int)fread(buf, 1, BUFSIZE, in);
if (n <= 0) {
fclose(in);
finish();
diff --git a/client/boinc.xml b/client/boinc.xml
index 0735e75..0e7903a 100644
--- a/client/boinc.xml
+++ b/client/boinc.xml
@@ -1,13 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>BOINC Client</description>
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
- </requestedPrivileges>
- </security>
- </trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista -->
diff --git a/client/boinc_cmd.cpp b/client/boinc_cmd.cpp
index 3c35577..652aa09 100644
--- a/client/boinc_cmd.cpp
+++ b/client/boinc_cmd.cpp
@@ -54,8 +54,11 @@ void version(){
void usage() {
fprintf(stderr, "\n\
-usage: boinccmd [--host hostname] [--passwd passwd] command\n\n\
+usage: boinccmd [--host hostname] [--passwd passwd] [--unix_domain] command\n\n\
+default hostname: localhost\n\
+default password: contents of gui_rpc_auth.cfg\n\
Commands:\n\
+ --client_version show client version\n\
--create_account URL email passwd name\n\
--file_transfer URL filename op file transfer operation\n\
op = retry | abort\n\
@@ -95,7 +98,6 @@ Commands:\n\
mode = always | auto | never\n\
--task url task_name op task operation\n\
op = suspend | resume | abort\n\
- --version, -V show client version\n\
"
);
exit(1);
@@ -126,6 +128,7 @@ int main(int argc, char** argv) {
NOTICES notices;
char passwd_buf[256], hostname_buf[256], *hostname=0;
char* passwd = passwd_buf, *p;
+ bool unix_domain = false;
#ifdef _WIN32
chdir_to_data_dir();
@@ -164,14 +167,28 @@ int main(int argc, char** argv) {
passwd = argv[i];
i++;
}
+ if (i == argc) usage();
+ if (!strcmp(argv[i], "--unix_domain")) {
+ unix_domain = true;
+ i++;
+ }
+ if (i == argc) usage();
// change the following to debug GUI RPC's asynchronous connection mechanism
//
#if 1
- retval = rpc.init(hostname, port);
- if (retval) {
- fprintf(stderr, "can't connect to %s\n", hostname?hostname:"local host");
- exit(1);
+ if (unix_domain) {
+ retval = rpc.init_unix_domain();
+ if (retval) {
+ fprintf(stderr, "can't connect to Unix domain socket\n");
+ exit(1);
+ }
+ } else {
+ retval = rpc.init(hostname, port);
+ if (retval) {
+ fprintf(stderr, "can't connect to %s\n", hostname?hostname:"local host");
+ exit(1);
+ }
}
#else
retval = rpc.init_asynch(hostname, 60., false);
@@ -198,7 +215,13 @@ int main(int argc, char** argv) {
}
char* cmd = next_arg(argc, argv, i);
- if (!strcmp(cmd, "--get_state")) {
+ if (!strcmp(cmd, "--client_version")) {
+ VERSION_INFO vi;
+ retval = rpc.exchange_versions(vi);
+ if (!retval) {
+ printf("Client version: %d.%d.%d\n", vi.major, vi.minor, vi.release);
+ }
+ } else if (!strcmp(cmd, "--get_state")) {
CC_STATE state;
retval = rpc.get_state(state);
if (!retval) state.print();
@@ -227,6 +250,10 @@ int main(int argc, char** argv) {
PROJECTS ps;
retval = rpc.get_project_status(ps);
if (!retval) ps.print();
+ } else if (!strcmp(cmd, "--get_project_urls")) {
+ PROJECTS ps;
+ retval = rpc.get_project_status(ps);
+ if (!retval) ps.print_urls();
} else if (!strcmp(cmd, "--get_simple_gui_info")) {
SIMPLE_GUI_INFO info;
retval = rpc.get_simple_gui_info(info);
@@ -266,10 +293,6 @@ int main(int argc, char** argv) {
retval = rpc.project_op(project, "detach");
} else if (!strcmp(op, "update")) {
retval = rpc.project_op(project, "update");
- } else if (!strcmp(op, "suspend")) {
- retval = rpc.project_op(project, "suspend");
- } else if (!strcmp(op, "resume")) {
- retval = rpc.project_op(project, "resume");
} else if (!strcmp(op, "nomorework")) {
retval = rpc.project_op(project, "nomorework");
} else if (!strcmp(op, "allowmorework")) {
diff --git a/client/build_po b/client/build_po
index 872e1e1..26f921e 100755
--- a/client/build_po
+++ b/client/build_po
@@ -1,3 +1,3 @@
#! /bin/sh
-xgettext --keyword=_ -C -o ../locale/templates/BOINC-Client.pot *.cpp ../sched/*.cpp
+xgettext --keyword=_ -C -o BOINC-Client.pot *.cpp ../sched/*.cpp
diff --git a/client/check_security.cpp b/client/check_security.cpp
index d567983..4868bfa 100644
--- a/client/check_security.cpp
+++ b/client/check_security.cpp
@@ -25,11 +25,6 @@
#include <grp.h>
#include <dirent.h>
#include <cerrno>
-
-#if (defined(__APPLE__) && defined(_DEBUG))
-#include <Carbon/Carbon.h>
-#endif
-
#include "util.h"
#include "error_numbers.h"
#include "file_names.h"
@@ -81,10 +76,6 @@ int use_sandbox, int isManager, char* path_to_error, int len
struct stat sbuf;
int retval;
int useFakeProjectUserAndGroup = 0;
-#if (defined(__APPLE__) && defined(_DEBUG))
- long response;
- OSStatus err = noErr;
-#endif
#ifdef __WXMAC__ // If Mac BOINC Manager
ProcessSerialNumber ourPSN;
ProcessInfoRec pInfo;
@@ -104,11 +95,6 @@ saverName[2] = "Progress Thru Processors";
#ifdef DEBUG_WITH_FAKE_PROJECT_USER_AND_GROUP
useFakeProjectUserAndGroup = 1;
#endif
-#ifdef __APPLE__
- err = Gestalt(gestaltSystemVersion, (SInt32*)&response);
- if ((err == noErr) && (response < 0x1040))
- useFakeProjectUserAndGroup = 1;
-#endif // __APPLE__
#endif // _DEBUG
// GDB can't attach to applications which are running as a diferent user or group so
diff --git a/client/client_msgs.cpp b/client/client_msgs.cpp
index acc31a2..30c5a69 100644
--- a/client/client_msgs.cpp
+++ b/client/client_msgs.cpp
@@ -55,7 +55,7 @@ void show_message(
PROJ_AM *p, char* msg, int priority, bool is_html, const char* link
) {
const char* x;
- char message[1024], event_msg[1024];
+ char message[1024], event_msg[1024], evt_message[2048];
char* time_string = time_to_string(gstate.now);
// Cycle the log files if needed
@@ -119,18 +119,15 @@ void show_message(
} else {
x = "---";
}
- printf("%s [%s] %s\n", time_string, x, message);
-#if defined(_WIN32) || defined(ANDROID)
- char evt_message[2048];
+ // Construct message to be logged/displayed
snprintf(evt_message, sizeof(evt_message), "%s [%s] %s\n", time_string, x, message);
-#ifdef _WIN32 // print message to the debugger view port
- ::OutputDebugString(evt_message);
-#endif
-
-#endif
+ // print message to the console
+ printf("%s", evt_message);
+ // print message to the debugger view port
+ diagnostics_trace_to_debugger(evt_message);
}
#endif
diff --git a/client/client_msgs.h b/client/client_msgs.h
index 99656c2..6449c2b 100644
--- a/client/client_msgs.h
+++ b/client/client_msgs.h
@@ -73,7 +73,7 @@ extern void msg_printf_notice(PROJ_AM *p, bool is_html, const char* link, const
__attribute__ ((format (printf, 4, 5)))
;
-#define _(x) "_(\""x"\")"
+#define _(x) "_(\"" x "\")"
extern std::string app_list_string(PROJECT*);
diff --git a/client/client_state.cpp b/client/client_state.cpp
index a5335a6..dde7acf 100644
--- a/client/client_state.cpp
+++ b/client/client_state.cpp
@@ -74,10 +74,12 @@ using std::max;
CLIENT_STATE gstate;
COPROCS coprocs;
+#ifndef SIM
#ifdef NEW_CPU_THROTTLE
THREAD_LOCK client_mutex;
THREAD throttle_thread;
#endif
+#endif
CLIENT_STATE::CLIENT_STATE()
: lookup_website_op(&gui_http),
@@ -111,7 +113,7 @@ CLIENT_STATE::CLIENT_STATE()
#else
core_client_version.prerelease = false;
#endif
- strcpy(language, "");
+ strcpy(language, "");
exit_after_app_start_secs = 0;
app_started = 0;
exit_before_upload = false;
@@ -150,6 +152,7 @@ CLIENT_STATE::CLIENT_STATE()
retry_shmem_time = 0;
must_schedule_cpus = true;
no_gui_rpc = false;
+ gui_rpc_unix_domain = false;
new_version_check_time = 0;
all_projects_list_check_time = 0;
detach_console = false;
@@ -253,10 +256,18 @@ int rsc_index(const char* name) {
return -1;
}
+// used in XML and COPROC::type
+//
const char* rsc_name(int i) {
return coprocs.coprocs[i].type;
}
+// user-friendly version
+//
+const char* rsc_name_long(int i) {
+ return proc_type_name(coproc_type_name_to_num(coprocs.coprocs[i].type));
+}
+
// alert user if any jobs need more RAM than available
//
static void check_too_large_jobs() {
@@ -333,6 +344,9 @@ int CLIENT_STATE::init() {
srand((unsigned int)time(0));
now = dtime();
+#ifdef ANDROID
+ device_status_time = dtime();
+#endif
scheduler_op->url_random = drand();
notices.init();
@@ -391,7 +405,7 @@ int CLIENT_STATE::init() {
coprocs.coprocs[j].type
);
}
- if (!config.no_gpus
+ if (!cc_config.no_gpus
#ifdef _WIN32
&& !executing_as_daemon
#endif
@@ -399,7 +413,7 @@ int CLIENT_STATE::init() {
vector<string> descs;
vector<string> warnings;
coprocs.get(
- config.use_all_gpus, descs, warnings, config.ignore_gpu_instance
+ cc_config.use_all_gpus, descs, warnings, cc_config.ignore_gpu_instance
);
for (i=0; i<descs.size(); i++) {
msg_printf(NULL, MSG_INFO, "%s", descs[i].c_str());
@@ -484,7 +498,7 @@ int CLIENT_STATE::init() {
// this needs to go after parse_state_file() because
// GPU exclusions refer to projects
//
- config.show();
+ cc_config.show();
// inform the user if there's a newer version of client
//
@@ -583,7 +597,7 @@ int CLIENT_STATE::init() {
if (new_client) {
run_cpu_benchmarks = true;
all_projects_list_check_time = 0;
- if (config.dont_contact_ref_site) {
+ if (cc_config.dont_contact_ref_site) {
if (projects.size() > 0) {
projects[0]->master_url_fetch_pending = true;
}
@@ -592,6 +606,8 @@ int CLIENT_STATE::init() {
}
}
+ check_if_need_benchmarks();
+
log_show_projects();
read_global_prefs();
@@ -626,15 +642,19 @@ int CLIENT_STATE::init() {
// set up for handling GUI RPCs
//
if (!no_gui_rpc) {
- // When we're running at boot time,
- // it may be a few seconds before we can socket/bind/listen.
- // So retry a few times.
- //
- for (i=0; i<30; i++) {
- bool last_time = (i==29);
- retval = gui_rpcs.init(last_time);
- if (!retval) break;
- boinc_sleep(1.0);
+ if (gui_rpc_unix_domain) {
+ retval = gui_rpcs.init_unix_domain();
+ } else {
+ // When we're running at boot time,
+ // it may be a few seconds before we can socket/bind/listen.
+ // So retry a few times.
+ //
+ for (i=0; i<30; i++) {
+ bool last_time = (i==29);
+ retval = gui_rpcs.init_tcp(last_time);
+ if (!retval) break;
+ boinc_sleep(1.0);
+ }
}
if (retval) return retval;
}
@@ -679,7 +699,7 @@ int CLIENT_STATE::init() {
// get list of BOINC projects occasionally,
// and initialize notice RSS feeds
//
- if (!config.no_info_fetch) {
+ if (!cc_config.no_info_fetch) {
all_projects_list_check();
notices.init_rss();
}
@@ -809,7 +829,7 @@ bool CLIENT_STATE::poll_slow_events() {
last_wakeup_time = now;
}
- if (should_run_cpu_benchmarks() && !benchmarks_running) {
+ if (run_cpu_benchmarks && can_run_cpu_benchmarks()) {
run_cpu_benchmarks = false;
start_cpu_benchmarks();
}
@@ -983,7 +1003,7 @@ bool CLIENT_STATE::poll_slow_events() {
// handle transient and permanent failures
// delete the FILE_XFER
- if (!config.no_info_fetch) {
+ if (!cc_config.no_info_fetch) {
POLL_ACTION(rss_feed_op , rss_feed_op.poll );
}
}
@@ -1166,7 +1186,7 @@ int CLIENT_STATE::link_app_version(PROJECT* p, APP_VERSION* avp) {
// any file associated with an app version must be signed
//
- if (!config.unsigned_apps_ok) {
+ if (!cc_config.unsigned_apps_ok) {
fip->signature_required = true;
}
@@ -1695,7 +1715,7 @@ bool CLIENT_STATE::time_to_exit() {
);
return true;
}
- if (config.exit_when_idle
+ if (cc_config.exit_when_idle
&& (results.size() == 0)
&& had_or_requested_work
) {
@@ -2121,6 +2141,7 @@ void CLIENT_STATE::log_show_projects() {
if (p->ended) {
msg_printf(p, MSG_INFO, "Project has ended - OK to detach");
}
+ p->show_no_work_notice();
}
}
diff --git a/client/client_state.h b/client/client_state.h
index f625d46..2bcb395 100644
--- a/client/client_state.h
+++ b/client/client_state.h
@@ -109,7 +109,7 @@ struct CLIENT_STATE {
DEVICE_STATUS device_status;
double device_status_time;
- char language[16]; // ISO language code reported by GUI
+ char language[16]; // ISO language code reported by GUI
VERSION_INFO core_client_version;
string statefile_platform_name;
int file_xfer_giveup_period;
@@ -220,10 +220,7 @@ struct CLIENT_STATE {
int old_minor_version;
int old_release;
bool run_cpu_benchmarks;
- // if set, run benchmarks on client startup
- bool cpu_benchmarks_pending;
- // set if a benchmark fails to start because of a job that doesn't exit
- // Persists so that the next start of BOINC runs the benchmarks.
+ // if set, run benchmarks when possible
int exit_after_app_start_secs;
// if nonzero, exit this many seconds after starting an app
@@ -265,6 +262,8 @@ struct CLIENT_STATE {
int report_result_error(RESULT&, const char *format, ...);
int reset_project(PROJECT*, bool detaching);
bool no_gui_rpc;
+ bool gui_rpc_unix_domain;
+ // do GUI RPC over Unix-domain sockets rather than TCP
void start_abort_sequence();
bool abort_sequence_done();
int quit_activities();
@@ -369,7 +368,8 @@ struct CLIENT_STATE {
// --------------- cs_benchmark.cpp:
bool benchmarks_running;
- bool should_run_cpu_benchmarks();
+ void check_if_need_benchmarks();
+ bool can_run_cpu_benchmarks();
void start_cpu_benchmarks();
bool cpu_benchmarks_poll();
void abort_cpu_benchmarks();
@@ -567,7 +567,7 @@ extern THREAD throttle_thread;
// so if the project develops a GPU app,
// we'll find out about it within a day.
-#define WF_DEFER_INTERVAL 300
+#define WF_UPLOAD_DEFER_INTERVAL 300
// if a project is uploading,
// and the last upload started within this interval,
// don't fetch work from it.
@@ -628,4 +628,7 @@ extern THREAD throttle_thread;
// Don't do this on Android
#endif
+#define NEED_NETWORK_MSG _("BOINC can't access Internet - check network connection or proxy configuration.")
+#define NO_WORK_MSG _("Your current settings do not allow tasks from this project.")
+
#endif
diff --git a/client/client_types.cpp b/client/client_types.cpp
index b1dbbc6..a641e3d 100644
--- a/client/client_types.cpp
+++ b/client/client_types.cpp
@@ -134,6 +134,7 @@ int APP::parse(XML_PARSER& xp) {
if (xp.parse_str("name", name, sizeof(name))) continue;
if (xp.parse_str("user_friendly_name", user_friendly_name, sizeof(user_friendly_name))) continue;
if (xp.parse_bool("non_cpu_intensive", non_cpu_intensive)) continue;
+ if (xp.parse_bool("fraction_done_exact", fraction_done_exact)) continue;
#ifdef SIM
if (xp.parse_double("latency_bound", latency_bound)) continue;
if (xp.parse_double("fpops_est", fpops_est)) continue;
@@ -759,7 +760,7 @@ int APP_VERSION::parse(XML_PARSER& xp) {
if (xp.match_tag("/app_version")) {
rt = gpu_usage.rsc_type;
if (rt) {
- dont_throttle = true; // don't throttle GPU apps
+ dont_throttle = true; // don't throttle GPU apps
if (strstr(plan_class, "opencl")) {
if (!coprocs.coprocs[rt].have_opencl) {
msg_printf(0, MSG_INFO,
diff --git a/client/client_types.h b/client/client_types.h
index b0f8500..325dd10 100644
--- a/client/client_types.h
+++ b/client/client_types.h
@@ -58,6 +58,7 @@
extern int rsc_index(const char*);
extern const char* rsc_name(int);
+extern const char* rsc_name_long(int);
extern COPROCS coprocs;
struct FILE_INFO;
@@ -243,6 +244,7 @@ struct APP {
char name[256];
char user_friendly_name[256];
bool non_cpu_intensive;
+ bool fraction_done_exact;
PROJECT* project;
int max_concurrent;
// Limit on # of concurrent jobs of this app; 0 if none
@@ -331,6 +333,9 @@ struct APP_VERSION {
inline int rsc_type() {
return gpu_usage.rsc_type;
}
+ inline bool is_opencl() {
+ return (strstr(plan_class, "opencl") != NULL);
+ }
};
struct WORKUNIT {
diff --git a/client/coproc_sched.cpp b/client/coproc_sched.cpp
new file mode 100644
index 0000000..5459992
--- /dev/null
+++ b/client/coproc_sched.cpp
@@ -0,0 +1,460 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+#include <vector>
+
+#include "client_msgs.h"
+#include "client_state.h"
+#include "client_types.h"
+#include "coproc.h"
+#include "result.h"
+
+#include "coproc_sched.h"
+
+using std::vector;
+
+////////// Coprocessor scheduling ////////////////
+//
+// theory of operation:
+//
+// Jobs can use one or more integral instances, or a fractional instance
+//
+// RESULT::coproc_indices
+// for a running job, the coprocessor instances it's using
+// COPROC::pending_usage[]: for each instance, its usage by running jobs
+// Note: "running" includes jobs suspended due to CPU throttling.
+// That's the only kind of suspended GPU job.
+// CORPOC::usage[]: for each instance, its usage
+//
+// enforce_run_list() calls assign_coprocs(),
+// which assigns coproc instances to scheduled jobs,
+// and prunes jobs for which we can't make an assignment
+// (the job list is in order of decreasing priority)
+//
+// assign_coprocs():
+// clear usage and pending_usage of all instances
+// for each running/suspended job J
+// increment pending_usage for the instances assigned to J
+// for each scheduled job J
+// if J is running
+// if J's assignment fits
+// confirm assignment: dec pending_usage, inc usage
+// else
+// prune J
+// else
+// if J.usage is fractional
+// look for an instance that's already fractionally assigned
+// if that fails, look for a free instance
+// if that fails, prune J
+// else
+// if there are enough instances with usage=0
+// assign instances with pending_usage = usage = 0
+// (avoid preempting running jobs)
+// if need more, assign instances with usage = 0
+// else
+// prune J
+
+// can the given task use this GPU instance? Enforce
+// - GPU exclusions
+// - OpenCL availability (relevant if use_all_gpus set)
+//
+static inline bool can_use_gpu(RESULT* rp, COPROC* cp, int i) {
+ if (gpu_excluded(rp->app, *cp, i)) return false;
+ if (rp->avp->is_opencl()) {
+ if (!cp->have_opencls[i]) return false;
+ }
+ return true;
+}
+
+static inline void increment_pending_usage(
+ RESULT* rp, double usage, COPROC* cp
+) {
+ double x = (usage<1)?usage:1;
+ for (int i=0; i<usage; i++) {
+ int j = rp->coproc_indices[i];
+ cp->pending_usage[j] += x;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] %s instance %d; %f pending for %s", cp->type, i, x, rp->name
+ );
+ if (cp->pending_usage[j] > 1) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] huh? %s %d %s pending usage > 1",
+ cp->type, i, rp->name
+ );
+ }
+ }
+ }
+}
+
+// check the GPU assignment for a currently-running app.
+// Note: don't check available RAM.
+// It may not be known (e.g. NVIDIA) and in any case,
+// if the app is still running, it has enough RAM
+//
+static inline bool current_assignment_ok(
+ RESULT* rp, double usage, COPROC* cp, bool& defer_sched
+) {
+ defer_sched = false;
+ double x = (usage<1)?usage:1;
+ for (int i=0; i<usage; i++) {
+ int j = rp->coproc_indices[i];
+ if (cp->usage[j] + x > 1) {
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] %s %f instance of device %d already assigned to task %s",
+ cp->type, x, j, rp->name
+ );
+ }
+ return false;
+ }
+ }
+ return true;
+}
+
+static inline void confirm_current_assignment(
+ RESULT* rp, double usage, COPROC* cp
+) {
+ double x = (usage<1)?usage:1;
+ for (int i=0; i<usage; i++) {
+ int j = rp->coproc_indices[i];
+ cp->usage[j] +=x;
+ cp->pending_usage[j] -=x;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] %s instance %d: confirming %f instance for %s",
+ cp->type, j, x, rp->name
+ );
+ }
+#if DEFER_ON_GPU_AVAIL_RAM
+ cp->available_ram_temp[j] -= rp->avp->gpu_ram;
+#endif
+ }
+}
+
+static inline bool get_fractional_assignment(
+ RESULT* rp, double usage, COPROC* cp, bool& defer_sched
+) {
+ int i;
+ defer_sched = false;
+
+ // try to assign an instance that's already fractionally assigned
+ //
+ for (i=0; i<cp->count; i++) {
+ if (!can_use_gpu(rp, cp, i)) {
+ continue;
+ }
+ if ((cp->usage[i] || cp->pending_usage[i])
+ && (cp->usage[i] + cp->pending_usage[i] + usage <= 1)
+ ) {
+#if DEFER_ON_GPU_AVAIL_RAM
+ if (rp->avp->gpu_ram > cp->available_ram_temp[i]) {
+ defer_sched = true;
+ continue;
+ }
+ cp->available_ram_temp[i] -= rp->avp->gpu_ram;
+#endif
+ rp->coproc_indices[0] = i;
+ cp->usage[i] += usage;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] Assigning %f of %s instance %d to %s",
+ usage, cp->type, i, rp->name
+ );
+ }
+ return true;
+ }
+ }
+
+ // failing that, assign an unreserved instance
+ //
+ for (i=0; i<cp->count; i++) {
+ if (!can_use_gpu(rp, cp, i)) {
+ continue;
+ }
+ if (!cp->usage[i]) {
+#if DEFER_ON_GPU_AVAIL_RAM
+ if (rp->avp->gpu_ram > cp->available_ram_temp[i]) {
+ defer_sched = true;
+ continue;
+ }
+ cp->available_ram_temp[i] -= rp->avp->gpu_ram;
+#endif
+ rp->coproc_indices[0] = i;
+ cp->usage[i] += usage;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] Assigning %f of %s free instance %d to %s",
+ usage, cp->type, i, rp->name
+ );
+ }
+ return true;
+ }
+ }
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] Insufficient %s for %s: need %f",
+ cp->type, rp->name, usage
+ );
+ }
+
+ return false;
+}
+
+static inline bool get_integer_assignment(
+ RESULT* rp, double usage, COPROC* cp, bool& defer_sched
+) {
+ int i;
+ defer_sched = false;
+
+ // make sure we have enough free instances
+ //
+ int nfree = 0;
+ for (i=0; i<cp->count; i++) {
+ if (!can_use_gpu(rp, cp, i)) {
+ continue;
+ }
+ if (!cp->usage[i]) {
+#if DEFER_ON_GPU_AVAIL_RAM
+ if (rp->avp->gpu_ram > cp->available_ram_temp[i]) {
+ defer_sched = true;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] task %s needs %.0fMB RAM, %s GPU %d has %.0fMB available",
+ rp->name, rp->avp->gpu_ram/MEGA, cp->type, i, cp->available_ram_temp[i]/MEGA
+ );
+ }
+ continue;
+ };
+#endif
+ nfree++;
+ }
+ }
+ if (nfree < usage) {
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] Insufficient %s for %s; need %d, available %d",
+ cp->type, rp->name, (int)usage, nfree
+ );
+ if (defer_sched) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] some instances lack available memory"
+ );
+ }
+ }
+ return false;
+ }
+
+ int n = 0;
+
+ // assign non-pending instances first
+
+ for (i=0; i<cp->count; i++) {
+ if (!can_use_gpu(rp, cp, i)) {
+ continue;
+ }
+ if (!cp->usage[i]
+ && !cp->pending_usage[i]
+#if DEFER_ON_GPU_AVAIL_RAM
+ && (rp->avp->gpu_ram <= cp->available_ram_temp[i])
+#endif
+ ) {
+ cp->usage[i] = 1;
+#if DEFER_ON_GPU_AVAIL_RAM
+ cp->available_ram_temp[i] -= rp->avp->gpu_ram;
+#endif
+ rp->coproc_indices[n++] = i;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] Assigning %s instance %d to %s",
+ cp->type, i, rp->name
+ );
+ }
+ if (n == usage) return true;
+ }
+ }
+
+ // if needed, assign pending instances
+
+ for (i=0; i<cp->count; i++) {
+ if (!can_use_gpu(rp, cp, i)) {
+ continue;
+ }
+ if (!cp->usage[i]
+#if DEFER_ON_GPU_AVAIL_RAM
+ && (rp->avp->gpu_ram <= cp->available_ram_temp[i])
+#endif
+ ) {
+ cp->usage[i] = 1;
+#if DEFER_ON_GPU_AVAIL_RAM
+ cp->available_ram_temp[i] -= rp->avp->gpu_ram;
+#endif
+ rp->coproc_indices[n++] = i;
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] Assigning %s pending instance %d to %s",
+ cp->type, i, rp->name
+ );
+ }
+ if (n == usage) return true;
+ }
+ }
+ if (log_flags.coproc_debug) {
+ msg_printf(rp->project, MSG_INFO,
+ "[coproc] huh??? ran out of %s instances for %s",
+ cp->type, rp->name
+ );
+ }
+ return false;
+}
+
+static inline void mark_as_defer_sched(RESULT* rp) {
+ int i = rp->avp->gpu_usage.rsc_type;
+ if (i) {
+ rp->project->rsc_defer_sched[i] = true;
+ }
+ rp->schedule_backoff = gstate.now + 300; // try again in 5 minutes
+ gstate.request_schedule_cpus("insufficient GPU RAM");
+}
+
+#if DEFER_ON_GPU_AVAIL_RAM
+static void copy_available_ram(COPROC& cp, const char* name) {
+ int rt = rsc_index(name);
+ if (rt > 0) {
+ for (int i=0; i<MAX_COPROC_INSTANCES; i++) {
+ coprocs.coprocs[rt].available_ram_temp[i] = cp.available_ram;
+ }
+ }
+}
+#endif
+
+void assign_coprocs(vector<RESULT*>& jobs) {
+ unsigned int i;
+ COPROC* cp;
+ double usage;
+
+ coprocs.clear_usage();
+#if DEFER_ON_GPU_AVAIL_RAM
+ if (coprocs.have_nvidia()) {
+ copy_available_ram(coprocs.nvidia, GPU_TYPE_NVIDIA);
+ }
+ if (coprocs.have_ati()) {
+ copy_available_ram(coprocs.ati, GPU_TYPE_ATI);
+ }
+ if (coprocs.have_intel()) {
+ copy_available_ram(coprocs.intel_gpu, GPU_TYPE_INTEL);
+ }
+#endif
+
+ // fill in pending usage
+ //
+ for (i=0; i<jobs.size(); i++) {
+ RESULT* rp = jobs[i];
+ APP_VERSION* avp = rp->avp;
+ int rt = avp->gpu_usage.rsc_type;
+ if (rt) {
+ usage = avp->gpu_usage.usage;
+ cp = &coprocs.coprocs[rt];
+ } else {
+ continue;
+ }
+ ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(rp);
+ if (!atp) continue;
+ if (atp->is_gpu_task_running()) {
+ increment_pending_usage(rp, usage, cp);
+ }
+ }
+
+ vector<RESULT*>::iterator job_iter;
+ job_iter = jobs.begin();
+ while (job_iter != jobs.end()) {
+ RESULT* rp = *job_iter;
+ APP_VERSION* avp = rp->avp;
+ int rt = avp->gpu_usage.rsc_type;
+ if (rt) {
+ usage = avp->gpu_usage.usage;
+ cp = &coprocs.coprocs[rt];
+ } else {
+ job_iter++;
+ continue;
+ }
+
+ ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(rp);
+ bool defer_sched;
+ if (atp && atp->is_gpu_task_running()) {
+ if (current_assignment_ok(rp, usage, cp, defer_sched)) {
+ confirm_current_assignment(rp, usage, cp);
+ job_iter++;
+ } else {
+ if (defer_sched) {
+ mark_as_defer_sched(rp);
+ }
+ job_iter = jobs.erase(job_iter);
+ }
+ } else {
+ if (usage < 1) {
+ if (get_fractional_assignment(rp, usage, cp, defer_sched)) {
+ job_iter++;
+ } else {
+ if (defer_sched) {
+ mark_as_defer_sched(rp);
+ }
+ job_iter = jobs.erase(job_iter);
+ }
+ } else {
+ if (get_integer_assignment(rp, usage, cp, defer_sched)) {
+ job_iter++;
+ } else {
+ if (defer_sched) {
+ mark_as_defer_sched(rp);
+ }
+ job_iter = jobs.erase(job_iter);
+ }
+ }
+ }
+ }
+
+#if 0
+ // enforce "don't use GPUs while active" pref in NVIDIA case;
+ // it applies only to GPUs running a graphics app
+ //
+ if (gstate.host_info.coprocs.nvidia.count && gstate.user_active && !gstate.global_prefs.run_gpu_if_user_active) {
+ job_iter = jobs.begin();
+ while (job_iter != jobs.end()) {
+ RESULT* rp = *job_iter;
+ if (!rp->avp->ncudas) {
+ job_iter++;
+ continue;
+ }
+ ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(rp);
+ bool some_gpu_busy = false;
+ for (i=0; i<rp->avp->ncudas; i++) {
+ int dev = atp->coproc_indices[i];
+ if (gstate.host_info.coprocs.cuda.running_graphics_app[dev]) {
+ some_gpu_busy = true;
+ break;
+ }
+ }
+ if (some_gpu_busy) {
+ job_iter = jobs.erase(job_iter);
+ } else {
+ job_iter++;
+ }
+ }
+ }
+#endif
+}
diff --git a/client/coproc_sched.h b/client/coproc_sched.h
new file mode 100644
index 0000000..4525558
--- /dev/null
+++ b/client/coproc_sched.h
@@ -0,0 +1,22 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+#include <vector>
+
+struct RESULT;
+
+extern void assign_coprocs(std::vector<RESULT*>& jobs);
diff --git a/client/cpp.h b/client/cpp.h
index 99f6626..e98abb4 100644
--- a/client/cpp.h
+++ b/client/cpp.h
@@ -17,7 +17,7 @@
#if defined(_WIN32) && !defined(__CYGWIN32__)
-#if defined(_WIN64) && defined(_M_X64)
+#if defined(_WIN64) && (defined(_M_X64) || defined(__x86_64__))
#define HOSTTYPE "windows_x86_64"
#define HOSTTYPEALT "windows_intelx86"
#else
diff --git a/client/cpu_sched.cpp b/client/cpu_sched.cpp
index e616464..29eb03b 100644
--- a/client/cpu_sched.cpp
+++ b/client/cpu_sched.cpp
@@ -17,7 +17,7 @@
// CPU scheduling logic.
//
-// - create an ordered "run list" (schedule_cpus).
+// - create an ordered "run list" (make_run_list()).
// The ordering is roughly as follows:
// - GPU jobs first, then CPU jobs
// - for a given resource, jobs in deadline danger first
@@ -39,8 +39,8 @@
// - sort the list according to "more_important()"
// - shuffle the list to avoid starving multi-thread jobs
//
-// - scan through the resulting list,
-// running the jobs and preempting other jobs.
+// - scan through the resulting list, running the jobs and preempting
+// other jobs (enforce_run_list).
// Don't run a job if
// - its GPUs can't be assigned (possible if need >1 GPU)
// - it's a multi-thread job, and CPU usage would be #CPUs+1 or more
@@ -55,7 +55,7 @@
#ifdef _WIN32
#include "boinc_win.h"
-#include "win_util.h"
+#include "sysmon_win.h"
#else
#include "config.h"
#include <string>
@@ -74,6 +74,7 @@
#include "app_config.h"
#include "client_msgs.h"
#include "client_state.h"
+#include "coproc_sched.h"
#include "log_flags.h"
#include "project.h"
#include "result.h"
@@ -84,13 +85,6 @@ using std::list;
static double rec_sum;
-// is the GPU task running or suspended (due to CPU throttling)
-//
-static inline bool is_gpu_task_running(ACTIVE_TASK* atp) {
- int s = atp->task_state();
- return s == PROCESS_EXECUTING || s == PROCESS_SUSPENDED;
-}
-
// used in make_run_list() to keep track of resources used
// by jobs tentatively scheduled so far
//
@@ -99,7 +93,6 @@ struct PROC_RESOURCES {
double ncpus_used_st; // #CPUs of GPU or single-thread jobs
double ncpus_used_mt; // #CPUs of multi-thread jobs
COPROCS pr_coprocs;
- double ram_left;
void init() {
ncpus = gstate.ncpus;
@@ -107,7 +100,6 @@ struct PROC_RESOURCES {
ncpus_used_mt = 0;
pr_coprocs.clone(coprocs, false);
pr_coprocs.clear_usage();
- ram_left = gstate.available_ram();
if (have_max_concurrent) {
max_concurrent_init();
}
@@ -116,7 +108,11 @@ struct PROC_RESOURCES {
// should we stop scanning jobs?
//
inline bool stop_scan_cpu() {
- return ncpus_used_st >= ncpus;
+ if (ncpus_used_st >= ncpus) return true;
+ if (ncpus_used_mt >= 2*ncpus) return true;
+ // kind of arbitrary, but need to have some limit
+ // in case there are only MT jobs, and lots of them
+ return false;
}
inline bool stop_scan_coproc(int rsc_type) {
@@ -131,16 +127,15 @@ struct PROC_RESOURCES {
// (i.e add it to the runnable list; not actually run it)
//
bool can_schedule(RESULT* rp, ACTIVE_TASK* atp) {
- double wss;
if (max_concurrent_exceeded(rp)) return false;
if (atp) {
- // don't schedule if something's pending
- //
- switch (atp->task_state()) {
- case PROCESS_ABORT_PENDING:
- case PROCESS_QUIT_PENDING:
- return false;
- }
+ // don't schedule if something's pending
+ //
+ switch (atp->task_state()) {
+ case PROCESS_ABORT_PENDING:
+ case PROCESS_QUIT_PENDING:
+ return false;
+ }
if (gstate.retry_shmem_time > gstate.now) {
if (atp->app_client_shm.shm == NULL) {
if (log_flags.cpu_sched_debug) {
@@ -154,11 +149,7 @@ struct PROC_RESOURCES {
}
atp->needs_shmem = false;
}
- wss = atp->procinfo.working_set_size_smoothed;
- } else {
- wss = rp->avp->max_working_set_size;
}
- if (wss > ram_left) return false;
if (rp->schedule_backoff > gstate.now) return false;
if (rp->uses_coprocs()) {
if (gpu_suspend_reason) return false;
@@ -195,7 +186,7 @@ struct PROC_RESOURCES {
bool dont_reserve =
rsc_work_fetch[rt].has_exclusions
&& atp != NULL
- && is_gpu_task_running(atp);
+ && atp->is_gpu_task_running();
if (!dont_reserve) {
reserve_coprocs(*rp);
}
@@ -211,13 +202,6 @@ struct PROC_RESOURCES {
} else {
ncpus_used_st += rp->avp->avg_ncpus;
}
- double wss;
- if (atp) {
- wss = atp->procinfo.working_set_size_smoothed;
- } else {
- wss = rp->avp->max_working_set_size;
- }
- ram_left -= wss;
adjust_rec_sched(rp);
max_concurrent_inc(rp);
@@ -445,9 +429,9 @@ RESULT* first_coproc_result(int rsc_type) {
RESULT* rp = gstate.results[i];
if (rp->resource_type() != rsc_type) continue;
if (!rp->runnable()) {
- //msg_printf(rp->project, MSG_INFO, "not runnable: %s", rp->name);
- continue;
- }
+ //msg_printf(rp->project, MSG_INFO, "not runnable: %s", rp->name);
+ continue;
+ }
if (rp->non_cpu_intensive()) continue;
if (rp->already_selected) continue;
prio = rp->project->sched_priority;
@@ -594,7 +578,7 @@ static void update_rec() {
gstate.now,
gstate.rec_interval_start,
x,
- config.rec_half_life,
+ cc_config.rec_half_life,
p->pwf.rec,
p->pwf.rec_time
);
@@ -1080,426 +1064,6 @@ void CLIENT_STATE::append_unfinished_time_slice(vector<RESULT*> &run_list) {
}
}
-////////// Coprocessor scheduling ////////////////
-//
-// theory of operation:
-//
-// Jobs can use one or more integral instances, or a fractional instance
-//
-// RESULT::coproc_indices
-// for a running job, the coprocessor instances it's using
-// COPROC::pending_usage[]: for each instance, its usage by running jobs
-// Note: "running" includes jobs suspended due to CPU throttling.
-// That's the only kind of suspended GPU job.
-// CORPOC::usage[]: for each instance, its usage
-//
-// enforce_schedule() calls assign_coprocs(),
-// which assigns coproc instances to scheduled jobs,
-// and prunes jobs for which we can't make an assignment
-// (the job list is in order of decreasing priority)
-//
-// assign_coprocs():
-// clear usage and pending_usage of all instances
-// for each running/suspended job J
-// increment pending_usage for the instances assigned to J
-// for each scheduled job J
-// if J is running
-// if J's assignment fits
-// confirm assignment: dec pending_usage, inc usage
-// else
-// prune J
-// else
-// if J.usage is fractional
-// look for an instance that's already fractionally assigned
-// if that fails, look for a free instance
-// if that fails, prune J
-// else
-// if there are enough instances with usage=0
-// assign instances with pending_usage = usage = 0
-// (avoid preempting running jobs)
-// if need more, assign instances with usage = 0
-// else
-// prune J
-
-static inline void increment_pending_usage(
- RESULT* rp, double usage, COPROC* cp
-) {
- double x = (usage<1)?usage:1;
- for (int i=0; i<usage; i++) {
- int j = rp->coproc_indices[i];
- cp->pending_usage[j] += x;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] %s instance %d; %f pending for %s", cp->type, i, x, rp->name
- );
- if (cp->pending_usage[j] > 1) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] huh? %s %d %s pending usage > 1",
- cp->type, i, rp->name
- );
- }
- }
- }
-}
-
-// check the GPU assignment for a currently-running app.
-// Note: don't check available RAM.
-// It may not be known (e.g. NVIDIA) and in any case,
-// if the app is still running, it has enough RAM
-//
-static inline bool current_assignment_ok(
- RESULT* rp, double usage, COPROC* cp, bool& defer_sched
-) {
- defer_sched = false;
- double x = (usage<1)?usage:1;
- for (int i=0; i<usage; i++) {
- int j = rp->coproc_indices[i];
- if (cp->usage[j] + x > 1) {
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] %s %f instance of device %d already assigned to task %s",
- cp->type, x, j, rp->name
- );
- }
- return false;
- }
- }
- return true;
-}
-
-static inline void confirm_current_assignment(
- RESULT* rp, double usage, COPROC* cp
-) {
- double x = (usage<1)?usage:1;
- for (int i=0; i<usage; i++) {
- int j = rp->coproc_indices[i];
- cp->usage[j] +=x;
- cp->pending_usage[j] -=x;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] %s instance %d: confirming %f instance for %s",
- cp->type, j, x, rp->name
- );
- }
-#if DEFER_ON_GPU_AVAIL_RAM
- cp->available_ram_temp[j] -= rp->avp->gpu_ram;
-#endif
- }
-}
-
-static inline bool get_fractional_assignment(
- RESULT* rp, double usage, COPROC* cp, bool& defer_sched
-) {
- int i;
- defer_sched = false;
-
- // try to assign an instance that's already fractionally assigned
- //
- for (i=0; i<cp->count; i++) {
- if (gpu_excluded(rp->app, *cp, i)) {
- continue;
- }
- if ((cp->usage[i] || cp->pending_usage[i])
- && (cp->usage[i] + cp->pending_usage[i] + usage <= 1)
- ) {
-#if DEFER_ON_GPU_AVAIL_RAM
- if (rp->avp->gpu_ram > cp->available_ram_temp[i]) {
- defer_sched = true;
- continue;
- }
- cp->available_ram_temp[i] -= rp->avp->gpu_ram;
-#endif
- rp->coproc_indices[0] = i;
- cp->usage[i] += usage;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] Assigning %f of %s instance %d to %s",
- usage, cp->type, i, rp->name
- );
- }
- return true;
- }
- }
-
- // failing that, assign an unreserved instance
- //
- for (i=0; i<cp->count; i++) {
- if (gpu_excluded(rp->app, *cp, i)) {
- continue;
- }
- if (!cp->usage[i]) {
-#if DEFER_ON_GPU_AVAIL_RAM
- if (rp->avp->gpu_ram > cp->available_ram_temp[i]) {
- defer_sched = true;
- continue;
- }
- cp->available_ram_temp[i] -= rp->avp->gpu_ram;
-#endif
- rp->coproc_indices[0] = i;
- cp->usage[i] += usage;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] Assigning %f of %s free instance %d to %s",
- usage, cp->type, i, rp->name
- );
- }
- return true;
- }
- }
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] Insufficient %s for %s: need %f",
- cp->type, rp->name, usage
- );
- }
-
- return false;
-}
-
-static inline bool get_integer_assignment(
- RESULT* rp, double usage, COPROC* cp, bool& defer_sched
-) {
- int i;
- defer_sched = false;
-
- // make sure we have enough free instances
- //
- int nfree = 0;
- for (i=0; i<cp->count; i++) {
- if (gpu_excluded(rp->app, *cp, i)) {
- continue;
- }
- if (!cp->usage[i]) {
-#if DEFER_ON_GPU_AVAIL_RAM
- if (rp->avp->gpu_ram > cp->available_ram_temp[i]) {
- defer_sched = true;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] task %s needs %.0fMB RAM, %s GPU %d has %.0fMB available",
- rp->name, rp->avp->gpu_ram/MEGA, cp->type, i, cp->available_ram_temp[i]/MEGA
- );
- }
- continue;
- };
-#endif
- nfree++;
- }
- }
- if (nfree < usage) {
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] Insufficient %s for %s; need %d, available %d",
- cp->type, rp->name, (int)usage, nfree
- );
- if (defer_sched) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] some instances lack available memory"
- );
- }
- }
- return false;
- }
-
- int n = 0;
-
- // assign non-pending instances first
-
- for (i=0; i<cp->count; i++) {
- if (gpu_excluded(rp->app, *cp, i)) {
- continue;
- }
- if (!cp->usage[i]
- && !cp->pending_usage[i]
-#if DEFER_ON_GPU_AVAIL_RAM
- && (rp->avp->gpu_ram <= cp->available_ram_temp[i])
-#endif
- ) {
- cp->usage[i] = 1;
-#if DEFER_ON_GPU_AVAIL_RAM
- cp->available_ram_temp[i] -= rp->avp->gpu_ram;
-#endif
- rp->coproc_indices[n++] = i;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] Assigning %s instance %d to %s",
- cp->type, i, rp->name
- );
- }
- if (n == usage) return true;
- }
- }
-
- // if needed, assign pending instances
-
- for (i=0; i<cp->count; i++) {
- if (gpu_excluded(rp->app, *cp, i)) {
- continue;
- }
- if (!cp->usage[i]
-#if DEFER_ON_GPU_AVAIL_RAM
- && (rp->avp->gpu_ram <= cp->available_ram_temp[i])
-#endif
- ) {
- cp->usage[i] = 1;
-#if DEFER_ON_GPU_AVAIL_RAM
- cp->available_ram_temp[i] -= rp->avp->gpu_ram;
-#endif
- rp->coproc_indices[n++] = i;
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] Assigning %s pending instance %d to %s",
- cp->type, i, rp->name
- );
- }
- if (n == usage) return true;
- }
- }
- if (log_flags.coproc_debug) {
- msg_printf(rp->project, MSG_INFO,
- "[coproc] huh??? ran out of %s instances for %s",
- cp->type, rp->name
- );
- }
- return false;
-}
-
-static inline void mark_as_defer_sched(RESULT* rp) {
- int i = rp->avp->gpu_usage.rsc_type;
- if (i) {
- rp->project->rsc_defer_sched[i] = true;
- }
- rp->schedule_backoff = gstate.now + 300; // try again in 5 minutes
- gstate.request_schedule_cpus("insufficient GPU RAM");
-}
-
-#if DEFER_ON_GPU_AVAIL_RAM
-static void copy_available_ram(COPROC& cp, const char* name) {
- int rt = rsc_index(name);
- if (rt > 0) {
- for (int i=0; i<MAX_COPROC_INSTANCES; i++) {
- coprocs.coprocs[rt].available_ram_temp[i] = cp.available_ram;
- }
- }
-}
-#endif
-
-static inline void assign_coprocs(vector<RESULT*>& jobs) {
- unsigned int i;
- COPROC* cp;
- double usage;
-
- coprocs.clear_usage();
-#if DEFER_ON_GPU_AVAIL_RAM
- if (coprocs.have_nvidia()) {
- copy_available_ram(coprocs.nvidia, GPU_TYPE_NVIDIA);
- }
- if (coprocs.have_ati()) {
- copy_available_ram(coprocs.ati, GPU_TYPE_ATI);
- }
- if (coprocs.have_intel()) {
- copy_available_ram(coprocs.intel_gpu, GPU_TYPE_INTEL);
- }
-#endif
-
- // fill in pending usage
- //
- for (i=0; i<jobs.size(); i++) {
- RESULT* rp = jobs[i];
- APP_VERSION* avp = rp->avp;
- int rt = avp->gpu_usage.rsc_type;
- if (rt) {
- usage = avp->gpu_usage.usage;
- cp = &coprocs.coprocs[rt];
- } else {
- continue;
- }
- ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(rp);
- if (!atp) continue;
- if (is_gpu_task_running(atp)) {
- increment_pending_usage(rp, usage, cp);
- }
- }
-
- vector<RESULT*>::iterator job_iter;
- job_iter = jobs.begin();
- while (job_iter != jobs.end()) {
- RESULT* rp = *job_iter;
- APP_VERSION* avp = rp->avp;
- int rt = avp->gpu_usage.rsc_type;
- if (rt) {
- usage = avp->gpu_usage.usage;
- cp = &coprocs.coprocs[rt];
- } else {
- job_iter++;
- continue;
- }
-
- ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(rp);
- bool defer_sched;
- if (atp && is_gpu_task_running(atp)) {
- if (current_assignment_ok(rp, usage, cp, defer_sched)) {
- confirm_current_assignment(rp, usage, cp);
- job_iter++;
- } else {
- if (defer_sched) {
- mark_as_defer_sched(rp);
- }
- job_iter = jobs.erase(job_iter);
- }
- } else {
- if (usage < 1) {
- if (get_fractional_assignment(rp, usage, cp, defer_sched)) {
- job_iter++;
- } else {
- if (defer_sched) {
- mark_as_defer_sched(rp);
- }
- job_iter = jobs.erase(job_iter);
- }
- } else {
- if (get_integer_assignment(rp, usage, cp, defer_sched)) {
- job_iter++;
- } else {
- if (defer_sched) {
- mark_as_defer_sched(rp);
- }
- job_iter = jobs.erase(job_iter);
- }
- }
- }
- }
-
-#if 0
- // enforce "don't use GPUs while active" pref in NVIDIA case;
- // it applies only to GPUs running a graphics app
- //
- if (gstate.host_info.coprocs.nvidia.count && gstate.user_active && !gstate.global_prefs.run_gpu_if_user_active) {
- job_iter = jobs.begin();
- while (job_iter != jobs.end()) {
- RESULT* rp = *job_iter;
- if (!rp->avp->ncudas) {
- job_iter++;
- continue;
- }
- ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(rp);
- bool some_gpu_busy = false;
- for (i=0; i<rp->avp->ncudas; i++) {
- int dev = atp->coproc_indices[i];
- if (gstate.host_info.coprocs.cuda.running_graphics_app[dev]) {
- some_gpu_busy = true;
- break;
- }
- }
- if (some_gpu_busy) {
- job_iter = jobs.erase(job_iter);
- } else {
- job_iter++;
- }
- }
- }
-#endif
-}
-
// Enforce the CPU schedule.
// Inputs:
// ordered_scheduled_results
@@ -1536,7 +1100,7 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
#endif
if (log_flags.cpu_sched_debug) {
- msg_printf(0, MSG_INFO, "[cpu_sched_debug] enforce_schedule(): start");
+ msg_printf(0, MSG_INFO, "[cpu_sched_debug] enforce_run_list(): start");
msg_printf(0, MSG_INFO, "[cpu_sched_debug] preliminary job list:");
print_job_list(run_list);
}
@@ -1793,14 +1357,14 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
atp->preempt(preempt_type);
break;
case PROCESS_SUSPENDED:
- // remove from memory GPU jobs that were suspended by CPU throttling
- // and are now unscheduled.
- //
- if (atp->result->uses_coprocs()) {
- atp->preempt(REMOVE_ALWAYS);
- request_schedule_cpus("removed suspended GPU task");
- break;
- }
+ // remove from memory GPU jobs that were suspended by CPU throttling
+ // and are now unscheduled.
+ //
+ if (atp->result->uses_coprocs()) {
+ atp->preempt(REMOVE_ALWAYS);
+ request_schedule_cpus("removed suspended GPU task");
+ break;
+ }
// Handle the case where user changes prefs from
// "leave in memory" to "remove from memory";
@@ -1901,7 +1465,7 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
set_client_state_dirty("enforce_cpu_schedule");
}
if (log_flags.cpu_sched_debug) {
- msg_printf(0, MSG_INFO, "[cpu_sched_debug] enforce_schedule: end");
+ msg_printf(0, MSG_INFO, "[cpu_sched_debug] enforce_run_list: end");
}
if (coproc_start_deferred) {
if (log_flags.cpu_sched_debug) {
@@ -2027,8 +1591,8 @@ ACTIVE_TASK* CLIENT_STATE::get_task(RESULT* rp) {
void CLIENT_STATE::set_ncpus() {
int ncpus_old = ncpus;
- if (config.ncpus>0) {
- ncpus = config.ncpus;
+ if (cc_config.ncpus>0) {
+ ncpus = cc_config.ncpus;
host_info.p_ncpus = ncpus;
} else if (host_info.p_ncpus>0) {
ncpus = host_info.p_ncpus;
diff --git a/client/cs_account.cpp b/client/cs_account.cpp
index eadf23f..15ed20e 100644
--- a/client/cs_account.cpp
+++ b/client/cs_account.cpp
@@ -100,6 +100,8 @@ int PROJECT::parse_account(FILE* in) {
char buf2[256];
int retval;
bool in_project_prefs = false, btemp;
+ double dtemp;
+
for (int i=0; i<coprocs.n_rsc; i++) {
no_rsc_pref[i] = false;
}
@@ -130,7 +132,12 @@ int PROJECT::parse_account(FILE* in) {
canonicalize_master_url(master_url, sizeof(master_url));
continue;
} else if (xp.parse_str("authenticator", authenticator, sizeof(authenticator))) continue;
- else if (xp.parse_double("resource_share", resource_share)) continue;
+ else if (xp.parse_double("resource_share", dtemp)) {
+ if (ams_resource_share < 0) {
+ resource_share = dtemp;
+ }
+ continue;
+ }
else if (xp.parse_bool("no_cpu", btemp)) {
if (btemp) handle_no_rsc_pref(this, "CPU");
continue;
@@ -193,11 +200,13 @@ int PROJECT::parse_account_file_venue() {
char attr_buf[256], venue[256], path[MAXPATHLEN], buf2[256];
int retval;
bool in_right_venue = false, btemp;
+ double dtemp;
get_account_filename(master_url, path);
FILE* in = boinc_fopen(path, "r");
if (!in) return ERR_FOPEN;
+ //msg_printf(this, MSG_INFO, "parsing project prefs, looking for venue %s", host_venue);
MIOFILE mf;
XML_PARSER xp(&mf);
mf.init_file(in);
@@ -208,6 +217,7 @@ int PROJECT::parse_account_file_venue() {
} else if (xp.match_tag("venue")) {
parse_attr(attr_buf, "name", venue, sizeof(venue));
if (!strcmp(venue, host_venue)) {
+ //msg_printf(this, MSG_INFO, "found venue %s", host_venue);
using_venue_specific_prefs = true;
in_right_venue = true;
@@ -235,7 +245,12 @@ int PROJECT::parse_account_file_venue() {
);
if (retval) return retval;
continue;
- } else if (xp.parse_double("resource_share", resource_share)) {
+ } else if (xp.parse_double("resource_share", dtemp)) {
+ // if account manager has specified resource share, don't override
+ //
+ if (ams_resource_share < 0) {
+ resource_share = dtemp;
+ }
continue;
}
else if (xp.parse_bool("no_cpu", btemp)) {
@@ -281,7 +296,11 @@ int PROJECT::parse_account_file() {
if (!f) return ERR_FOPEN;
retval = parse_account(f);
fclose(f);
- return retval;
+ if (retval) return retval;
+ if (strlen(host_venue)) {
+ return parse_account_file_venue();
+ }
+ return 0;
}
int CLIENT_STATE::parse_account_files_venue() {
@@ -492,7 +511,7 @@ int CLIENT_STATE::add_project(
FILE* f;
int retval;
- if (config.disallow_attach) {
+ if (cc_config.disallow_attach) {
return ERR_USER_PERMISSION;
}
diff --git a/client/cs_apps.cpp b/client/cs_apps.cpp
index b107c53..88f0d4a 100644
--- a/client/cs_apps.cpp
+++ b/client/cs_apps.cpp
@@ -205,6 +205,10 @@ int CLIENT_STATE::app_finished(ACTIVE_TASK& at) {
double elapsed_time = now - rec_interval_start;
work_fetch.accumulate_inst_sec(&at, elapsed_time);
+ rp->project->pwf.request_if_idle_and_uploading = true;
+ // set this to allow work fetch if idle instance,
+ // even before upload finishes
+
return 0;
}
diff --git a/client/cs_benchmark.cpp b/client/cs_benchmark.cpp
index 7488674..85a1aa6 100644
--- a/client/cs_benchmark.cpp
+++ b/client/cs_benchmark.cpp
@@ -92,9 +92,8 @@ static int bm_state;
static bool did_benchmarks = false;
// true if we successfully did benchmarks.
- // don't do them again during this run of client
-#define BENCHMARK_PERIOD (SECONDS_PER_DAY*5)
+#define BENCHMARK_PERIOD (SECONDS_PER_DAY*30)
// rerun CPU benchmarks this often (hardware may have been upgraded)
// represents a benchmark thread/process, in progress or completed
@@ -241,7 +240,7 @@ void CLIENT_STATE::start_cpu_benchmarks() {
return;
}
- if (config.skip_cpu_benchmarks) {
+ if (cc_config.skip_cpu_benchmarks) {
if (log_flags.benchmark_debug) {
msg_printf(0, MSG_INFO,
"[benchmark] start_cpu_benchmarks(): Skipping CPU benchmarks"
@@ -252,8 +251,6 @@ void CLIENT_STATE::start_cpu_benchmarks() {
}
msg_printf(NULL, MSG_INFO, "Running CPU benchmarks");
- cpu_benchmarks_pending = false;
-
bm_state = BM_FP_INIT;
remove_benchmark_file(BM_TYPE_FP);
remove_benchmark_file(BM_TYPE_INT);
@@ -296,27 +293,32 @@ void CLIENT_STATE::start_cpu_benchmarks() {
}
}
-// Returns true if CPU benchmarks should be run:
-// flag is set or it's been 5 days since we last ran
+// called at startup to decide if we need to do benchmarks;
+// set run_cpu_benchmarks if so.
//
-bool CLIENT_STATE::should_run_cpu_benchmarks() {
- if (did_benchmarks) return false;
- // Note: if skip_cpu_benchmarks we still should "run" cpu benchmarks
- // (we'll just use default values in cpu_benchmarks())
- //
- if (tasks_suspended) return false;
-
+void CLIENT_STATE::check_if_need_benchmarks() {
+ if (run_cpu_benchmarks) return;
// if user has changed p_calculated into the future
// (as part of cheating, presumably) always run benchmarks
//
double diff = now - host_info.p_calculated;
- if (diff < 0) return true;
+ if (diff < 0) {
+ run_cpu_benchmarks = true;
+ } else if (diff > BENCHMARK_PERIOD) {
+ run_cpu_benchmarks = true;
+ }
+}
+
+// Returns true if CPU benchmarks can be run
+//
+bool CLIENT_STATE::can_run_cpu_benchmarks() {
+ if (tasks_suspended) return false;
// if no projects attached yet, don't run
//
- if (projects.size()==0 && !run_cpu_benchmarks) return false;
+ if (projects.size()==0) return false;
- return ((run_cpu_benchmarks || diff > BENCHMARK_PERIOD));
+ return true;
}
// abort a running benchmark thread/process
@@ -390,7 +392,7 @@ bool CLIENT_STATE::cpu_benchmarks_poll() {
abort_cpu_benchmarks();
benchmarks_running = false;
set_client_state_dirty("CPU benchmarks");
- cpu_benchmarks_pending = true;
+ cpu_benchmarks_set_defaults();
return false;
}
diff --git a/client/cs_cmdline.cpp b/client/cs_cmdline.cpp
index 33ead59..4194df5 100644
--- a/client/cs_cmdline.cpp
+++ b/client/cs_cmdline.cpp
@@ -66,6 +66,7 @@ static void print_options(char* prog) {
" --fetch_minimal_work fetch only 1 job per device\n"
" --file_xfer_giveup_period N give up on file xfers after N sec\n"
" --gui_rpc_port <port> port for GUI RPCs\n"
+ " --gui_rpc_unix_domain use Unix domain for GUI RPCs\n"
" --help show options\n"
#ifdef SANDBOX
" --insecure disable app sandboxing (Unix)\n"
@@ -126,11 +127,11 @@ void CLIENT_STATE::parse_cmdline(int argc, char** argv) {
for (i=1; i<argc; i++) {
if (0) {
} else if (ARG(abort_jobs_on_exit)) {
- config.abort_jobs_on_exit = true;
+ cc_config.abort_jobs_on_exit = true;
} else if (ARG(allow_multiple_clients)) {
- config.allow_multiple_clients = true;
+ cc_config.allow_multiple_clients = true;
} else if (ARG(allow_remote_gui_rpc)) {
- config.allow_remote_gui_rpc = true;
+ cc_config.allow_remote_gui_rpc = true;
} else if (ARG(attach_project)) {
if (i >= argc-2) {
show_options = true;
@@ -160,22 +161,24 @@ void CLIENT_STATE::parse_cmdline(int argc, char** argv) {
if (i == argc-1) show_options = true;
else exit_after_app_start_secs = atoi(argv[++i]);
} else if (ARG(exit_after_finish)) {
- config.exit_after_finish = true;
+ cc_config.exit_after_finish = true;
} else if (ARG(exit_before_start)) {
- config.exit_before_start = true;
+ cc_config.exit_before_start = true;
} else if (ARG(exit_before_upload)) {
exit_before_upload = true;
} else if (ARG(exit_when_idle)) {
- config.exit_when_idle = true;
- config.report_results_immediately = true;
+ cc_config.exit_when_idle = true;
+ cc_config.report_results_immediately = true;
} else if (ARG(fetch_minimal_work)) {
- config.fetch_minimal_work = true;
+ cc_config.fetch_minimal_work = true;
} else if (ARG(file_xfer_giveup_period)) {
if (i == argc-1) show_options = true;
else file_xfer_giveup_period = atoi(argv[++i]);
} else if (ARG(gui_rpc_port)) {
if (i == argc-1) show_options = true;
else cmdline_gui_rpc_port = atoi(argv[++i]);
+ } else if (ARG(gui_rpc_unix_domain)) {
+ gui_rpc_unix_domain = true;
} else if (ARG(help)) {
print_options(argv[0]);
exit(0);
@@ -195,13 +198,13 @@ void CLIENT_STATE::parse_cmdline(int argc, char** argv) {
if (i == argc-1) show_options = true;
else master_fetch_retry_cap = atoi(argv[++i]);
} else if (ARG(no_gpus)) {
- config.no_gpus = true;
+ cc_config.no_gpus = true;
} else if (ARG(no_gui_rpc)) {
no_gui_rpc = true;
} else if (ARG(no_info_fetch)) {
- config.no_info_fetch = true;
+ cc_config.no_info_fetch = true;
} else if (ARG(no_priority_change)) {
- config.no_priority_change = true;
+ cc_config.no_priority_change = true;
} else if (ARG(pers_giveup)) {
if (i == argc-1) show_options = true;
else pers_giveup = atoi(argv[++i]);
@@ -236,14 +239,15 @@ void CLIENT_STATE::parse_cmdline(int argc, char** argv) {
} else if (ARG(show_projects)) {
show_projects = true;
} else if (ARG(skip_cpu_benchmarks)) {
- config.skip_cpu_benchmarks = true;
+ cc_config.skip_cpu_benchmarks = true;
} else if (ARG(start_delay)) {
if (i == argc-1) show_options = true;
- else config.start_delay = atof(argv[++i]);
+ else cc_config.start_delay = atof(argv[++i]);
} else if (ARG(suppress_net_info)) {
- config.suppress_net_info = true;
+ cc_config.suppress_net_info = true;
} else if (ARG(unsigned_apps_ok)) {
- config.unsigned_apps_ok = true;
+ cc_config.unsigned_apps_ok = true;
+ cc_config.dont_check_file_sizes = true;
} else if (ARG(update_prefs)) {
if (i == argc-1) show_options = true;
else safe_strcpy(update_prefs_url, argv[++i]);
diff --git a/client/cs_files.cpp b/client/cs_files.cpp
index dcd7aa7..0233f94 100644
--- a/client/cs_files.cpp
+++ b/client/cs_files.cpp
@@ -70,8 +70,8 @@ bool CLIENT_STATE::start_new_file_xfer(PERS_FILE_XFER& pfx) {
}
}
}
- if (nproj >= config.max_file_xfers_per_project) return false;
- if (ntotal >= config.max_file_xfers) return false;
+ if (nproj >= cc_config.max_file_xfers_per_project) return false;
+ if (ntotal >= cc_config.max_file_xfers) return false;
return true;
}
@@ -216,7 +216,7 @@ int FILE_INFO::verify_file(
return 0;
}
- if (nbytes && (nbytes != size) && (!config.dont_check_file_sizes)) {
+ if (nbytes && (nbytes != size) && (!cc_config.dont_check_file_sizes)) {
if (show_errors) {
msg_printf(project, MSG_INTERNAL_ERROR,
"File %s has wrong size: expected %.0f, got %.0f",
@@ -241,13 +241,13 @@ int FILE_INFO::verify_file(
status = ERR_NO_SIGNATURE;
return ERR_NO_SIGNATURE;
}
- if (config.use_certs || config.use_certs_only) {
+ if (cc_config.use_certs || cc_config.use_certs_only) {
if (verify_file_certs()) {
verified = true;
return 0;
}
}
- if (config.use_certs_only) {
+ if (cc_config.use_certs_only) {
msg_printf(project, MSG_INTERNAL_ERROR,
"Unable to verify %s using certificates", name
);
@@ -470,7 +470,7 @@ void CLIENT_STATE::check_file_existence() {
fip->reset();
continue;
}
- if (config.dont_check_file_sizes) continue;
+ if (cc_config.dont_check_file_sizes) continue;
if (fip->status == FILE_PRESENT) {
get_pathname(fip, path, sizeof(path));
double size;
diff --git a/client/cs_notice.cpp b/client/cs_notice.cpp
index 43fee55..4482b06 100644
--- a/client/cs_notice.cpp
+++ b/client/cs_notice.cpp
@@ -482,43 +482,35 @@ void NOTICES::write_archive(RSS_FEED* rfp) {
fclose(f);
}
-// Remove "need network access" notices
+// Remove outdated notices
//
-void NOTICES::remove_network_msg() {
+void NOTICES::remove_notices(PROJECT* p, int which) {
deque<NOTICE>::iterator i = notices.begin();
while (i != notices.end()) {
NOTICE& n = *i;
- if (!strcmp(n.description.c_str(), NEED_NETWORK_MSG)) {
- i = notices.erase(i);
-#ifndef SIM
- gstate.gui_rpcs.set_notice_refresh();
-#endif
- if (log_flags.notice_debug) {
- msg_printf(0, MSG_INFO, "REMOVING NETWORK MESSAGE");
- }
- } else {
+ if (p && strcmp(n.project_name, p->get_project_name())) {
++i;
+ continue;
}
- }
-}
-
-// Remove scheduler notices from the given project.
-// This is called if we did an RPC to the project requesting work,
-// and no notices were returned.
-//
-void NOTICES::remove_scheduler_notices(PROJECT* p) {
- deque<NOTICE>::iterator i = notices.begin();
- while (i != notices.end()) {
- NOTICE& n = *i;
- if (!strcmp(n.project_name, p->get_project_name())
- && !strcmp(n.category, "scheduler")
- ) {
+ bool remove = false;
+ switch (which) {
+ case REMOVE_NETWORK_MSG:
+ remove = !strcmp(n.description.c_str(), NEED_NETWORK_MSG);
+ break;
+ case REMOVE_SCHEDULER_MSG:
+ remove = !strcmp(n.category, "scheduler");
+ break;
+ case REMOVE_NO_WORK_MSG:
+ remove = !strcmp(n.description.c_str(), NO_WORK_MSG);
+ break;
+ }
+ if (remove) {
i = notices.erase(i);
#ifndef SIM
gstate.gui_rpcs.set_notice_refresh();
#endif
if (log_flags.notice_debug) {
- msg_printf(0, MSG_INFO, "REMOVING PROJECT MESSAGE");
+ msg_printf(p, MSG_INFO, "Removing notices of type %d", which);
}
} else {
++i;
@@ -534,7 +526,7 @@ void NOTICES::write(int seqno, GUI_RPC_CONN& grc, bool public_only) {
MIOFILE mf;
if (!net_status.need_physical_connection) {
- remove_network_msg();
+ remove_notices(NULL, REMOVE_NETWORK_MSG);
}
if (log_flags.notice_debug) {
msg_printf(0, MSG_INFO, "NOTICES::write: seqno %d, refresh %s, %d notices",
diff --git a/client/cs_notice.h b/client/cs_notice.h
index 384868e..8e1d5b4 100644
--- a/client/cs_notice.h
+++ b/client/cs_notice.h
@@ -71,8 +71,7 @@ struct NOTICES {
int read_archive_file(const char* file, struct RSS_FEED*);
void write_archive(struct RSS_FEED*);
bool remove_dups(NOTICE&);
- void remove_network_msg();
- void remove_scheduler_notices(PROJECT*);
+ void remove_notices(PROJECT*, int which);
void clear_keep();
// prior to parsing an RSS feed, we mark all notices as "don't keep".
// We clear this flag if the notice is present in the feed.
@@ -84,6 +83,14 @@ struct NOTICES {
}
};
+// args to remove_notices()
+#define REMOVE_NETWORK_MSG 0
+ // "need network access" notice
+#define REMOVE_SCHEDULER_MSG 1
+ // msgs from scheduler
+#define REMOVE_NO_WORK_MSG 2
+ // msgs about no work due to settings
+
extern NOTICES notices;
struct RSS_FEED {
diff --git a/client/cs_platforms.cpp b/client/cs_platforms.cpp
index fd1545d..bd257b5 100644
--- a/client/cs_platforms.cpp
+++ b/client/cs_platforms.cpp
@@ -41,7 +41,6 @@ LPFN_ISWOW64PROCESS fnIsWow64Process;
#endif
#if defined(__APPLE__) && (defined(__i386__) || defined(__x86_64__))
-#include <CoreServices/CoreServices.h>
#include <sys/sysctl.h>
#endif
@@ -100,15 +99,12 @@ void CLIENT_STATE::detect_platforms() {
#elif defined(__APPLE__)
#if defined(__i386__) || defined(__x86_64__)
- OSStatus err = noErr;
- SInt32 version = 0;
int response = 0;
int retval = 0;
size_t len = sizeof(response);
- err = Gestalt(gestaltSystemVersion, &version);
retval = sysctlbyname("hw.optional.x86_64", &response, &len, NULL, 0);
- if ((err == noErr) && (version >= 0x1050) && response && (!retval)) {
+ if (!retval) {
add_platform("x86_64-apple-darwin");
}
@@ -299,7 +295,7 @@ void CLIENT_STATE::detect_platforms() {
#endif
- if (config.no_alt_platform) {
+ if (cc_config.no_alt_platform) {
PLATFORM p = platforms[0];
platforms.clear();
platforms.push_back(p);
@@ -307,8 +303,8 @@ void CLIENT_STATE::detect_platforms() {
// add platforms listed in cc_config.xml AFTER the above.
//
- for (unsigned int i=0; i<config.alt_platforms.size(); i++) {
- add_platform(config.alt_platforms[i].c_str());
+ for (unsigned int i=0; i<cc_config.alt_platforms.size(); i++) {
+ add_platform(cc_config.alt_platforms[i].c_str());
}
}
diff --git a/client/cs_prefs.cpp b/client/cs_prefs.cpp
index 2a6ae2e..df7e1d4 100644
--- a/client/cs_prefs.cpp
+++ b/client/cs_prefs.cpp
@@ -207,7 +207,7 @@ int CLIENT_STATE::check_suspend_processing() {
return SUSPEND_REASON_BENCHMARKS;
}
- if (config.start_delay && now < time_stats.client_start_time + config.start_delay) {
+ if (cc_config.start_delay && now < time_stats.client_start_time + cc_config.start_delay) {
return SUSPEND_REASON_INITIAL_DELAY;
}
@@ -227,9 +227,12 @@ int CLIENT_STATE::check_suspend_processing() {
) {
return SUSPEND_REASON_BATTERIES;
}
+#ifndef ANDROID
+ // perform this check after SUSPEND_REASON_BATTERY_CHARGING on Android
if (!global_prefs.run_if_user_active && user_active) {
return SUSPEND_REASON_USER_ACTIVE;
}
+#endif
if (global_prefs.cpu_times.suspended(now)) {
return SUSPEND_REASON_TIME_OF_DAY;
}
@@ -251,6 +254,7 @@ int CLIENT_STATE::check_suspend_processing() {
#ifdef ANDROID
if (now > device_status_time + ANDROID_KEEPALIVE_TIMEOUT) {
+ requested_exit = true;
return SUSPEND_REASON_NO_GUI_KEEPALIVE;
}
@@ -273,6 +277,16 @@ int CLIENT_STATE::check_suspend_processing() {
return SUSPEND_REASON_BATTERY_CHARGING;
}
}
+
+ // user active.
+ // Do this check after checks that user can not influence on Android.
+ // E.g.
+ // 1. "connect to charger to continue computing"
+ // 2. "charge battery until 90%"
+ // 3. "turn screen off to continue computing"
+ if (!global_prefs.run_if_user_active && user_active) {
+ return SUSPEND_REASON_USER_ACTIVE;
+ }
#endif
#ifndef NEW_CPU_THROTTLE
@@ -397,7 +411,7 @@ void CLIENT_STATE::check_suspend_network() {
// no network traffic if we're allowing unsigned apps
//
- if (config.unsigned_apps_ok) {
+ if (cc_config.unsigned_apps_ok) {
network_suspended = true;
file_xfers_suspended = true;
network_suspend_reason = SUSPEND_REASON_USER_REQ;
@@ -422,6 +436,7 @@ void CLIENT_STATE::check_suspend_network() {
#ifdef ANDROID
if (now > device_status_time + ANDROID_KEEPALIVE_TIMEOUT) {
+ requested_exit = true;
file_xfers_suspended = true;
if (!recent_rpc) network_suspended = true;
network_suspend_reason = SUSPEND_REASON_NO_GUI_KEEPALIVE;
@@ -447,11 +462,15 @@ void CLIENT_STATE::check_suspend_network() {
}
}
+#ifndef ANDROID
+// allow network transfers while user active, i.e. screen on.
+// otherwise nothing (visible to the user) happens after intial attach
if (!global_prefs.run_if_user_active && user_active) {
file_xfers_suspended = true;
if (!recent_rpc) network_suspended = true;
network_suspend_reason = SUSPEND_REASON_USER_ACTIVE;
}
+#endif
if (global_prefs.net_times.suspended(now)) {
file_xfers_suspended = true;
if (!recent_rpc) network_suspended = true;
diff --git a/client/cs_scheduler.cpp b/client/cs_scheduler.cpp
index aa8db81..ad7f007 100644
--- a/client/cs_scheduler.cpp
+++ b/client/cs_scheduler.cpp
@@ -136,7 +136,7 @@ int CLIENT_STATE::make_scheduler_request(PROJECT* p) {
rrs_fraction,
prrs_fraction,
p->duration_correction_factor,
- config.allow_multiple_clients?1:0,
+ cc_config.allow_multiple_clients?1:0,
g_use_sandbox?1:0
);
work_fetch.write_request(f, p);
@@ -210,7 +210,7 @@ int CLIENT_STATE::make_scheduler_request(PROJECT* p) {
//
host_info.get_host_info();
set_ncpus();
- host_info.write(mf, !config.suppress_net_info, false);
+ host_info.write(mf, !cc_config.suppress_net_info, false);
// get and write disk usage
//
@@ -260,8 +260,8 @@ int CLIENT_STATE::make_scheduler_request(PROJECT* p) {
p->nresults_returned++;
rp->write(mf, true);
}
- if (config.max_tasks_reported
- && (p->nresults_returned >= config.max_tasks_reported)
+ if (cc_config.max_tasks_reported
+ && (p->nresults_returned >= cc_config.max_tasks_reported)
) {
last_reported_index = i;
break;
@@ -406,7 +406,7 @@ static inline bool actively_uploading(PROJECT* p) {
FILE_XFER* fxp = gstate.file_xfers->file_xfers[i];
if (fxp->fip->project != p) continue;
if (!fxp->is_upload) continue;
- if (gstate.now - fxp->start_time > WF_DEFER_INTERVAL) continue;
+ if (gstate.now - fxp->start_time > WF_UPLOAD_DEFER_INTERVAL) continue;
//msg_printf(p, MSG_INFO, "actively uploading");
return true;
}
@@ -527,14 +527,20 @@ bool CLIENT_STATE::scheduler_rpc_poll() {
default:
return false;
}
- if (config.fetch_minimal_work && had_or_requested_work) {
+ if (cc_config.fetch_minimal_work && had_or_requested_work) {
return false;
}
p = work_fetch.choose_project();
if (p) {
if (actively_uploading(p)) {
- if (!idle_request()) {
+ bool dont_request = true;
+ if (p->pwf.request_if_idle_and_uploading) {
+ if (idle_request()) {
+ dont_request = false;
+ }
+ }
+ if (dont_request) {
if (log_flags.work_fetch_debug) {
msg_printf(p, MSG_INFO,
"[work_fetch] deferring work fetch; upload active"
@@ -654,11 +660,12 @@ int CLIENT_STATE::handle_scheduler_reply(
}
msg_printf(project, prio, "%s", um.message.c_str());
}
+
// if we requested work and didn't get notices,
// clear scheduler notices from this project
//
if (work_fetch.requested_work() && !got_notice) {
- notices.remove_scheduler_notices(project);
+ notices.remove_notices(project, REMOVE_SCHEDULER_MSG);
}
if (log_flags.sched_op_debug && sr.request_delay) {
@@ -702,7 +709,6 @@ int CLIENT_STATE::handle_scheduler_reply(
}
}
-#ifdef USE_NET_PREFS
// see if we have a new venue from this project
// (this must go AFTER the above, since otherwise
// global_prefs_source_project() is meaningless)
@@ -711,16 +717,17 @@ int CLIENT_STATE::handle_scheduler_reply(
safe_strcpy(project->host_venue, sr.host_venue);
msg_printf(project, MSG_INFO, "New computer location: %s", sr.host_venue);
update_project_prefs = true;
+#ifdef USE_NET_PREFS
if (project == global_prefs_source_project()) {
safe_strcpy(main_host_venue, sr.host_venue);
update_global_prefs = true;
}
+#endif
}
if (update_global_prefs) {
read_global_prefs();
}
-#endif
// deal with project preferences (should always be there)
// If they've changed, write to account file,
@@ -748,13 +755,15 @@ int CLIENT_STATE::handle_scheduler_reply(
if (update_project_prefs) {
project->parse_account_file();
- if (strlen(project->host_venue)) {
- project->parse_account_file_venue();
- }
project->parse_preferences_for_user_files();
active_tasks.request_reread_prefs(project);
}
+ // show notice if we can't possibly get work from this project.
+ // This must come after parsing project prefs
+ //
+ project->show_no_work_notice();
+
// if the scheduler reply includes a code-signing key,
// accept it if we don't already have one from the project.
// Otherwise verify its signature, using the key we already have.
@@ -789,7 +798,11 @@ int CLIENT_STATE::handle_scheduler_reply(
for (i=0; i<sr.apps.size(); i++) {
APP* app = lookup_app(project, sr.apps[i].name);
if (app) {
+ // update app attributes; they may have changed on server
+ //
safe_strcpy(app->user_friendly_name, sr.apps[i].user_friendly_name);
+ app->non_cpu_intensive = sr.apps[i].non_cpu_intensive;
+ app->fraction_done_exact = sr.apps[i].fraction_done_exact;
} else {
app = new APP;
*app = sr.apps[i];
@@ -870,9 +883,7 @@ int CLIENT_STATE::handle_scheduler_reply(
app, avpp.platform, avpp.version_num, avpp.plan_class
);
if (avp) {
- // update performance-related info;
- // generally this shouldn't change,
- // but if it does it's better to use the new stuff
+ // update app version attributes in case they changed on server
//
avp->avg_ncpus = avpp.avg_ncpus;
avp->max_ncpus = avpp.max_ncpus;
@@ -978,7 +989,7 @@ int CLIENT_STATE::handle_scheduler_reply(
for (int j=0; j<coprocs.n_rsc; j++) {
msg_printf(project, MSG_INFO,
"[sched_op] estimated total %s task duration: %.0f seconds",
- rsc_name(j),
+ rsc_name_long(j),
est_rsc_runtime[j]/time_stats.availability_frac(j)
);
}
@@ -1281,7 +1292,7 @@ PROJECT* CLIENT_STATE::find_project_with_overdue_results(
return p;
}
- if (config.report_results_immediately) {
+ if (cc_config.report_results_immediately) {
return p;
}
diff --git a/client/cs_statefile.cpp b/client/cs_statefile.cpp
index fcabee4..a353d19 100644
--- a/client/cs_statefile.cpp
+++ b/client/cs_statefile.cpp
@@ -117,7 +117,6 @@ int CLIENT_STATE::parse_state_file_aux(const char* fname) {
PROJECT *project=NULL;
int retval=0;
int failnum;
- bool btemp;
string stemp;
FILE* f = fopen(fname, "r");
@@ -475,11 +474,7 @@ int CLIENT_STATE::parse_state_file_aux(const char* fname) {
if (xp.parse_int("core_client_release", old_release)) {
continue;
}
- if (xp.parse_str("language", language, sizeof(language))) {
- continue;
- }
- if (xp.parse_bool("cpu_benchmarks_pending", btemp)) {
- if (btemp) run_cpu_benchmarks = true;
+ if (xp.parse_str("language", language, sizeof(language))) {
continue;
}
if (xp.match_tag("proxy_info")) {
@@ -755,7 +750,6 @@ int CLIENT_STATE::write_state(MIOFILE& f) {
"<user_gpu_request>%d</user_gpu_request>\n"
"<user_gpu_prev_request>%d</user_gpu_prev_request>\n"
"<user_network_request>%d</user_network_request>\n"
- "%s"
"<new_version_check_time>%f</new_version_check_time>\n"
"<all_projects_list_check_time>%f</all_projects_list_check_time>\n",
get_primary_platform(),
@@ -767,13 +761,12 @@ int CLIENT_STATE::write_state(MIOFILE& f) {
gpu_run_mode.get_perm(),
gpu_run_mode.get_prev(),
network_run_mode.get_perm(),
- cpu_benchmarks_pending?"<cpu_benchmarks_pending/>\n":"",
new_version_check_time,
all_projects_list_check_time
);
- if (strlen(language)) {
- f.printf("<language>%s</language>\n", language);
- }
+ if (strlen(language)) {
+ f.printf("<language>%s</language>\n", language);
+ }
if (newer_version.size()) {
f.printf("<newer_version>%s</newer_version>\n", newer_version.c_str());
}
diff --git a/client/current_version.cpp b/client/current_version.cpp
index b37b02c..2a7519a 100644
--- a/client/current_version.cpp
+++ b/client/current_version.cpp
@@ -32,7 +32,7 @@ int GET_CURRENT_VERSION_OP::do_rpc() {
int retval;
retval = gui_http->do_rpc(
- this, config.client_version_check_url.c_str(),
+ this, cc_config.client_version_check_url.c_str(),
GET_CURRENT_VERSION_FILENAME,
true
);
@@ -84,21 +84,21 @@ static bool parse_version(FILE* f, char* new_version, int len) {
}
static void show_newer_version_msg(const char* new_vers) {
- if (config.client_new_version_text.empty()) {
+ if (cc_config.client_new_version_text.empty()) {
msg_printf_notice(0, true,
"http://boinc.berkeley.edu/manager_links.php?target=notice&controlid=download",
"%s (%s) <a href=%s>%s</a>",
_("A new version of BOINC is available."),
new_vers,
- config.client_download_url.c_str(),
+ cc_config.client_download_url.c_str(),
_("Download")
);
} else {
msg_printf_notice(0, true, NULL,
"%s (%s) <a href=%s>%s</a>",
- config.client_new_version_text.c_str(),
+ cc_config.client_new_version_text.c_str(),
new_vers,
- config.client_download_url.c_str(),
+ cc_config.client_download_url.c_str(),
_("Download")
);
}
diff --git a/client/file_xfer.cpp b/client/file_xfer.cpp
index 1203887..ca32df4 100644
--- a/client/file_xfer.cpp
+++ b/client/file_xfer.cpp
@@ -320,6 +320,16 @@ bool FILE_XFER_SET::poll() {
//
if (fxp->fip->nbytes) {
if (size == fxp->fip->nbytes) continue;
+
+ // but skip this check if it's an image file
+ // and user has image verification disabled
+ // (i.e. they're behind a proxy that shrinks images)
+ // The shrunk image could be < 5 KB
+ //
+ if (is_image_file(pathname) && gstate.global_prefs.dont_verify_images) {
+ continue;
+ }
+
if (diff>0 && diff<MIN_DOWNLOAD_INCREMENT) {
msg_printf(fxp->fip->project, MSG_INFO,
"Incomplete read of %f < 5KB for %s - truncating",
diff --git a/client/gpu_amd.cpp b/client/gpu_amd.cpp
index adb499f..e89640b 100644
--- a/client/gpu_amd.cpp
+++ b/client/gpu_amd.cpp
@@ -276,16 +276,16 @@ void COPROC_ATI::get(
break;
case 10:
gpu_name="ATI Radeon HD 5500/5600 series (Redwood)";
- break;
+ break;
case 11:
gpu_name="ATI Radeon HD 5400 series (Cedar)";
- break;
+ break;
case 12:
gpu_name="AMD Radeon HD 6370D/6380G/6410D/6480G (Sumo)";
- break;
+ break;
case 13:
gpu_name="AMD Radeon HD 6520G/6530D/6550D/6620G (SuperSumo)";
- break;
+ break;
case 14:
gpu_name="AMD Radeon HD 6200/6300/7200/7300 series (Wrestler)";
break;
@@ -294,7 +294,7 @@ void COPROC_ATI::get(
break;
case 16:
gpu_name="AMD Radeon HD (Kauai)";
- break;
+ break;
case 17:
gpu_name="AMD Radeon HD 6790/6850/6870 series (Barts)";
break;
@@ -325,21 +325,21 @@ void COPROC_ATI::get(
case 26:
gpu_name="AMD Radeon HD 7790/R7 260X (Bonaire)";
break;
- case 27:
- gpu_name="AMD Radeon HD (Spectre)"; // Kaveri
- break;
+ case 27:
+ gpu_name="AMD Radeon HD (Spectre)"; // Kaveri
+ break;
case 28:
- gpu_name="AMD Radeon HD (Spooky)"; // Kaveri
- break;
+ gpu_name="AMD Radeon HD (Spooky)"; // Kaveri
+ break;
case 29:
- gpu_name="AMD Radeon HD 8200/8300/8400 series (Kalindi)"; // Kabini
- break;
+ gpu_name="AMD Radeon HD 8200/8300/8400 series (Kalindi)"; // Kabini
+ break;
case 30:
- gpu_name="AMD Radeon HD 8600M (Hainan)";
- break;
+ gpu_name="AMD Radeon HD 8600M (Hainan)";
+ break;
case 31:
- gpu_name="AMD Radeon R9 270X (Curacao)";
- break;
+ gpu_name="AMD Radeon R9 270X (Curacao)";
+ break;
case 32:
gpu_name="AMD Radeon R9 290 (Hawaii)";
break;
@@ -404,6 +404,10 @@ void COPROC_ATI::correlate(
ati_gpus[i].description(buf, sizeof(buf));
if (in_vector(ati_gpus[i].device_num, ignore_devs)) {
ati_gpus[i].is_used = COPROC_IGNORED;
+ } else if (this->have_opencl && !ati_gpus[i].have_opencl) {
+ ati_gpus[i].is_used = COPROC_UNUSED;
+ } else if (this->have_cal && !ati_gpus[i].have_cal) {
+ ati_gpus[i].is_used = COPROC_UNUSED;
} else if (use_all || !ati_compare(ati_gpus[i], *this, true)) {
device_nums[count] = ati_gpus[i].device_num;
count++;
diff --git a/client/gpu_detect.cpp b/client/gpu_detect.cpp
index 9383f60..d604d97 100644
--- a/client/gpu_detect.cpp
+++ b/client/gpu_detect.cpp
@@ -63,7 +63,10 @@ vector<OPENCL_DEVICE_PROP> intel_gpu_opencls;
vector<OPENCL_CPU_PROP> cpu_opencls;
static char* client_path;
+ // argv[0] from the command used to run client.
+ // May be absolute or relative.
static char client_dir[MAXPATHLEN];
+ // current directory at start of client
void COPROCS::get(
bool use_all, vector<string>&descs, vector<string>&warnings,
@@ -170,7 +173,7 @@ void COPROCS::correlate_gpus(
// NOTE: OpenCL can report a max of only 4GB.
for (i=0; i<cpu_opencls.size(); i++) {
- gstate.host_info.cpu_opencl_prop[gstate.host_info.num_cpu_opencl_platforms++] = cpu_opencls[i];
+ gstate.host_info.opencl_cpu_prop[gstate.host_info.num_opencl_cpu_platforms++] = cpu_opencls[i];
}
for (i=0; i<nvidia_gpus.size(); i++) {
@@ -367,7 +370,7 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
if (retval) {
my_ati_gpu.clear();
} else {
- my_ati_gpu.device_num = ati_gpus.size();
+ my_ati_gpu.device_num = (int)ati_gpus.size();
ati_gpus.push_back(my_ati_gpu);
}
continue;
@@ -377,7 +380,7 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
if (retval) {
my_nvidia_gpu.clear();
} else {
- my_nvidia_gpu.device_num = nvidia_gpus.size();
+ my_nvidia_gpu.device_num = (int)nvidia_gpus.size();
my_nvidia_gpu.pci_info = my_nvidia_gpu.pci_infos[0];
memset(&my_nvidia_gpu.pci_infos[0], 0, sizeof(struct PCI_INFO));
nvidia_gpus.push_back(my_nvidia_gpu);
@@ -389,7 +392,7 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
if (retval) {
my_intel_gpu.clear();
} else {
- my_intel_gpu.device_num = intel_gpus.size();
+ my_intel_gpu.device_num = (int)intel_gpus.size();
intel_gpus.push_back(my_intel_gpu);
}
continue;
@@ -448,11 +451,9 @@ int COPROCS::read_coproc_info_file(vector<string> &warnings) {
continue;
}
-
-
- // TODO: parse OpenCL info for CPU when implemented:
- // gstate.host_info.have_cpu_opencl
- // gstate.host_info.cpu_opencl_prop
+ // TODO: parse OpenCL info for CPU when implemented:
+ // gstate.host_info.have_cpu_opencl
+ // gstate.host_info.cpu_opencl_prop
}
fclose(f);
@@ -465,8 +466,8 @@ int COPROCS::launch_child_process_to_detect_gpus() {
#else
int prog;
#endif
- char quotedDataDir[MAXPATHLEN+2];
- char dataDir[MAXPATHLEN];
+ char quoted_data_dir[MAXPATHLEN+2];
+ char data_dir[MAXPATHLEN];
int retval = 0;
retval = boinc_delete_file(COPROC_INFO_FILENAME);
@@ -482,14 +483,14 @@ int COPROCS::launch_child_process_to_detect_gpus() {
}
}
- boinc_getcwd(dataDir);
+ boinc_getcwd(data_dir);
#ifdef _WIN32
- strlcpy(quotedDataDir, "\"", sizeof(quotedDataDir));
- strlcat(quotedDataDir, dataDir, sizeof(quotedDataDir));
- strlcat(quotedDataDir, "\"", sizeof(quotedDataDir));
+ strlcpy(quoted_data_dir, "\"", sizeof(quoted_data_dir));
+ strlcat(quoted_data_dir, data_dir, sizeof(quoted_data_dir));
+ strlcat(quoted_data_dir, "\"", sizeof(quoted_data_dir));
#else
- strlcpy(quotedDataDir, dataDir, sizeof(quotedDataDir));
+ strlcpy(quoted_data_dir, data_dir, sizeof(quoted_data_dir));
#endif
if (log_flags.coproc_debug) {
@@ -503,16 +504,20 @@ int COPROCS::launch_child_process_to_detect_gpus() {
);
msg_printf(0, MSG_INFO,
"[coproc] with data directory %s",
- quotedDataDir
+ quoted_data_dir
);
}
int argc = 4;
char* const argv[5] = {
+#ifdef _WIN32
+ const_cast<char *>("boinc.exe"),
+#else
const_cast<char *>("boinc"),
+#endif
const_cast<char *>("--detect_gpus"),
const_cast<char *>("--dir"),
- const_cast<char *>(quotedDataDir),
+ const_cast<char *>(quoted_data_dir),
NULL
};
@@ -527,7 +532,7 @@ int COPROCS::launch_child_process_to_detect_gpus() {
prog
);
- chdir(dataDir);
+ chdir(data_dir);
if (retval) {
if (log_flags.coproc_debug) {
diff --git a/client/gpu_nvidia.cpp b/client/gpu_nvidia.cpp
index f279f52..9f20296 100644
--- a/client/gpu_nvidia.cpp
+++ b/client/gpu_nvidia.cpp
@@ -19,6 +19,53 @@
#ifdef _WIN32
#include "boinc_win.h"
+/* get annotation macros from sal.h */
+/* define the ones that don't exist */
+#include "sal.h"
+/* These are just an annotations. They don't do anything */
+#ifndef __success
+#define __success(x)
+#endif
+#ifndef __in
+#define __in
+#endif
+#ifndef __out
+#define __out
+#endif
+#ifndef __in_ecount
+#define __in_ecount(x)
+#endif
+#ifndef __out_ecount
+#define __out_ecount(x)
+#endif
+#ifndef __in_opt
+#define __in_opt
+#endif
+#ifndef __out_opt
+#define __out_opt
+#endif
+#ifndef __inout
+#define __inout
+#endif
+#ifndef __inout_opt
+#define __inout_opt
+#endif
+#ifndef __inout_ecount
+#define __inout_ecount(x)
+#endif
+#ifndef __inout_ecount_full
+#define __inout_ecount_full(x)
+#endif
+#ifndef __inout_ecount_part_opt
+#define __inout_ecount_part_opt(x,y)
+#endif
+#ifndef __inout_ecount_full_opt
+#define __inout_ecount_full_opt(x,y)
+#endif
+#ifndef __out_ecount_full_opt
+#define __out_ecount_full_opt(x)
+#endif
+
#include "nvapi.h"
#ifdef _MSC_VER
#define snprintf _snprintf
@@ -47,6 +94,36 @@ using std::string;
static void get_available_nvidia_ram(COPROC_NVIDIA &cc, vector<string>& warnings);
+#if !(defined(_WIN32) || defined(__APPLE__))
+
+static int nvidia_driver_version() {
+ int (*nvml_init)() = NULL;
+ int (*nvml_finish)() = NULL;
+ int (*nvml_driver)(char *f, unsigned int len) = NULL;
+ int dri_ver = 0;
+ void *handle = NULL;
+ char driver_string[81];
+
+ handle = dlopen("libnvidia-ml.so", RTLD_NOW);
+ if (!handle) goto end;
+
+ nvml_driver = (int(*)(char *, unsigned int)) dlsym(handle, "nvmlSystemGetDriverVersion");
+ nvml_init = (int(*)(void)) dlsym(handle, "nvmlInit");
+ nvml_finish = (int(*)(void)) dlsym(handle, "nvmlShutdown");
+ if (!nvml_driver || !nvml_init || !nvml_finish) goto end;
+
+ if (nvml_init()) goto end;
+ if (nvml_driver(driver_string, 80)) goto end;
+ dri_ver = (int) (100. * atof(driver_string));
+
+end:
+ if (nvml_finish) nvml_finish();
+ if (handle) dlclose(handle);
+ return dri_ver;
+}
+
+#endif
+
// return 1/-1/0 if device 1 is more/less/same capable than device 2.
// factors (decreasing priority):
// - compute capability
@@ -177,13 +254,25 @@ void COPROC_NVIDIA::get(
__cuMemGetInfo = (CUDA_MGI)GetProcAddress( cudalib, "cuMemGetInfo" );
#ifndef SIM
- NvAPI_Status nvapiStatus;
- NV_DISPLAY_DRIVER_VERSION Version;
- memset(&Version, 0, sizeof(Version));
- Version.version = NV_DISPLAY_DRIVER_VERSION_VER;
-
NvAPI_Initialize();
- nvapiStatus = NvAPI_GetDisplayDriverVersion(NULL, &Version);
+ NvAPI_ShortString ss;
+ NvU32 Version = 0;
+ NvAPI_SYS_GetDriverAndBranchVersion(&Version, ss);
+
+#if 0
+ // NvAPI now provides an API for getting #cores :-)
+ // But not FLOPs per clock cycle :-(
+ // Anyway, don't use this for now because server code estimates FLOPS
+ // based on compute capability, so we may as well do the same
+ // See http://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/
+ //
+ NvPhysicalGpuHandle GPUHandle[NVAPI_MAX_PHYSICAL_GPUS];
+ NvU32 GpuCount, nc;
+ NvAPI_EnumPhysicalGPUs(GPUHandle, &GpuCount);
+ for (unsigned int i=0; i<GpuCount; i++) {
+ NvAPI_GPU_GetGpuCoreCount(GPUHandle[i], &nc);
+ }
+#endif
#endif
#else
@@ -319,11 +408,11 @@ void COPROC_NVIDIA::get(
if (cc.prop.major <= 0) continue; // major == 0 means emulation
if (cc.prop.major > 100) continue; // e.g. 9999 is an error
#if defined(_WIN32) && !defined(SIM)
- cc.display_driver_version = Version.drvVersion;
+ cc.display_driver_version = Version;
#elif defined(__APPLE__)
cc.display_driver_version = NSVersionOfRunTimeLibrary("cuda");
#else
- cc.display_driver_version = 0;
+ cc.display_driver_version = nvidia_driver_version();
#endif
have_cuda = true;
cc.have_cuda = true;
@@ -367,6 +456,10 @@ void COPROC_NVIDIA::correlate(
for (i=0; i<nvidia_gpus.size(); i++) {
if (in_vector(nvidia_gpus[i].device_num, ignore_devs)) {
nvidia_gpus[i].is_used = COPROC_IGNORED;
+ } else if (this->have_opencl && !nvidia_gpus[i].have_opencl) {
+ nvidia_gpus[i].is_used = COPROC_UNUSED;
+ } else if (this->have_cuda && !nvidia_gpus[i].have_cuda) {
+ nvidia_gpus[i].is_used = COPROC_UNUSED;
} else if (use_all || !nvidia_compare(nvidia_gpus[i], *this, true)) {
device_nums[count] = nvidia_gpus[i].device_num;
pci_infos[count] = nvidia_gpus[i].pci_info;
diff --git a/client/gpu_opencl.cpp b/client/gpu_opencl.cpp
index 8e8572b..ba30333 100644
--- a/client/gpu_opencl.cpp
+++ b/client/gpu_opencl.cpp
@@ -824,6 +824,7 @@ void COPROC::merge_opencl(
opencls[j].is_used = COPROC_USED;
opencl_device_indexes[opencl_device_count] = opencls[j].opencl_device_index;
opencl_device_ids[opencl_device_count++] = opencls[j].device_id;
+ have_opencls[i] = true;
}
}
}
@@ -873,6 +874,7 @@ void COPROC::find_best_opencls(
continue;
}
if (use_all || !opencl_compare(opencls[i], opencl_prop, true)) {
+ have_opencls[count] = true;
device_nums[count++] = opencls[i].device_num;
opencl_device_indexes[opencl_device_count] = opencls[i].opencl_device_index;
opencl_device_ids[opencl_device_count++] = opencls[i].device_id;
diff --git a/client/gui_rpc_server.cpp b/client/gui_rpc_server.cpp
index a471f67..b4c425e 100644
--- a/client/gui_rpc_server.cpp
+++ b/client/gui_rpc_server.cpp
@@ -25,6 +25,7 @@
#else
#include "config.h"
#include <cstdio>
+#include <cstddef>
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -35,9 +36,7 @@
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
-#if HAVE_SYS_UN_H
#include <sys/un.h>
-#endif
#include <vector>
#include <cstring>
#if HAVE_NETINET_IN_H
@@ -138,7 +137,7 @@ void GUI_RPC_CONN_SET::get_password() {
//
retval = make_random_string(password);
if (retval) {
- if (config.os_random_only) {
+ if (cc_config.os_random_only) {
msg_printf(
NULL, MSG_INTERNAL_ERROR,
"OS random string generation failed, exiting"
@@ -224,13 +223,61 @@ int GUI_RPC_CONN_SET::insert(GUI_RPC_CONN* p) {
return 0;
}
+int GUI_RPC_CONN_SET::init_unix_domain() {
+#if !defined(_WIN32)
+ struct sockaddr_un addr;
+ get_password();
+ int retval = boinc_socket(lsock, AF_UNIX);
+ if (retval) {
+ msg_printf(NULL, MSG_INTERNAL_ERROR,
+ "Failed to create Unix domain socket: %s", boincerror(retval)
+ );
+ return retval;
+ }
+ addr.sun_family = AF_UNIX;
+#ifdef ANDROID
+ // bind socket in abstract address space, i.e. start with 0 byte
+ addr.sun_path[0] = '\0';
+ // using app specific socket name instead of GUI_RPC_FILE defintion
+ // to avoid interference with other BOINC based Android apps.
+ strcpy(&addr.sun_path[1], "edu_berkeley_boinc_client_socket");
+ socklen_t len = offsetof(struct sockaddr_un, sun_path) + 1 + strlen(&addr.sun_path[1]);
+#else
+ // NOTE: if we ever add Mac OS X support, need to change this
+ //
+#ifdef __APPLE__
+ addr.sun_len = sizeof(addr);
+#endif
+ strcpy(addr.sun_path, GUI_RPC_FILE);
+ socklen_t len = offsetof(sockaddr_un, sun_path) + strlen(GUI_RPC_FILE);
+#endif
+ unlink(GUI_RPC_FILE);
+ if (bind(lsock, (struct sockaddr*)&addr, len) < 0) {
+ msg_printf(NULL, MSG_INTERNAL_ERROR,
+ "Failed to bind Unix domain socket"
+ );
+ boinc_close_socket(lsock);
+ return ERR_BIND;
+ }
+ retval = listen(lsock, 999);
+ if (retval < 0) {
+ msg_printf(NULL, MSG_INTERNAL_ERROR,
+ "Failed to listen on Unix domain socket"
+ );
+ boinc_close_socket(lsock);
+ return ERR_LISTEN;
+ }
+#endif
+ return 0;
+}
+
// If the client runs at boot time,
// it may be a while (~10 sec) before the DNS system is working.
// If this returns an error,
// it will get called once a second for up to 30 seconds.
// On the last call, "last_time" is set; print error messages then.
//
-int GUI_RPC_CONN_SET::init(bool last_time) {
+int GUI_RPC_CONN_SET::init_tcp(bool last_time) {
sockaddr_in addr;
int retval;
bool first = true;
@@ -241,11 +288,11 @@ int GUI_RPC_CONN_SET::init(bool last_time) {
first = false;
}
- retval = boinc_socket(lsock);
+ retval = boinc_socket(lsock, AF_INET);
if (retval) {
if (last_time) {
msg_printf(NULL, MSG_INTERNAL_ERROR,
- "GUI RPC failed to create socket: %d", lsock
+ "Failed to create TCP socket: %s", boincerror(retval)
);
}
return retval;
@@ -263,7 +310,7 @@ int GUI_RPC_CONN_SET::init(bool last_time) {
#ifdef __APPLE__
addr.sin_addr.s_addr = htonl(INADDR_ANY);
#else
- if (config.allow_remote_gui_rpc || remote_hosts_file_exists) {
+ if (cc_config.allow_remote_gui_rpc || remote_hosts_file_exists) {
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (log_flags.gui_rpc_debug) {
msg_printf(NULL, MSG_INFO, "[gui_rpc] Remote control allowed");
@@ -419,7 +466,9 @@ void GUI_RPC_CONN_SET::got_select(FDSET_GROUP& fg) {
// 2) client host is included in "remote_hosts" file or
// 3) client is on localhost
//
- if (config.allow_remote_gui_rpc) {
+ if (gstate.gui_rpc_unix_domain) {
+ host_allowed = true;
+ } else if (cc_config.allow_remote_gui_rpc) {
host_allowed = true;
} else if (is_localhost(addr)) {
host_allowed = true;
@@ -438,7 +487,11 @@ void GUI_RPC_CONN_SET::got_select(FDSET_GROUP& fg) {
if (strlen(password)) {
gr->auth_needed = true;
}
- gr->is_local = is_localhost(addr);
+ if (gstate.gui_rpc_unix_domain) {
+ gr->is_local = true;
+ } else {
+ gr->is_local = is_localhost(addr);
+ }
if (log_flags.gui_rpc_debug) {
msg_printf(0, MSG_INFO,
"[gui_rpc] got new GUI RPC connection"
diff --git a/client/gui_rpc_server.h b/client/gui_rpc_server.h
index f76d0b7..420a291 100644
--- a/client/gui_rpc_server.h
+++ b/client/gui_rpc_server.h
@@ -109,7 +109,8 @@ public:
char password[256];
void get_fdset(FDSET_GROUP&, FDSET_GROUP&);
void got_select(FDSET_GROUP&);
- int init(bool last_time);
+ int init_tcp(bool last_time);
+ int init_unix_domain();
void close();
bool recent_rpc_needs_network(double interval);
void send_quits();
diff --git a/client/gui_rpc_server_ops.cpp b/client/gui_rpc_server_ops.cpp
index f3c470e..24d90db 100644
--- a/client/gui_rpc_server_ops.cpp
+++ b/client/gui_rpc_server_ops.cpp
@@ -678,9 +678,9 @@ static void handle_get_cc_status(GUI_RPC_CONN& grc) {
gstate.network_run_mode.get_current(),
gstate.network_run_mode.get_perm(),
gstate.network_run_mode.delay(),
- config.disallow_attach?1:0,
- config.simple_gui_only?1:0,
- config.max_event_log_lines
+ cc_config.disallow_attach?1:0,
+ cc_config.simple_gui_only?1:0,
+ cc_config.max_event_log_lines
);
if (grc.au_mgr_state == AU_MGR_QUIT_REQ) {
grc.mfout.printf(
@@ -972,7 +972,7 @@ static void handle_get_newer_version(GUI_RPC_CONN& grc) {
"<newer_version>%s</newer_version>\n"
"<download_url>%s</download_url>\n",
gstate.newer_version.c_str(),
- config.client_download_url.c_str()
+ cc_config.client_download_url.c_str()
);
}
@@ -1127,7 +1127,7 @@ static void handle_read_global_prefs_override(GUI_RPC_CONN& grc) {
static void handle_read_cc_config(GUI_RPC_CONN& grc) {
grc.mfout.printf("<success/>\n");
read_config_file(false);
- config.show();
+ cc_config.show();
log_flags.show();
gstate.set_ncpus();
process_gpu_exclusions();
@@ -1159,14 +1159,14 @@ static bool complete_post_request(char* buf) {
}
static void handle_set_language(GUI_RPC_CONN& grc) {
- while (!grc.xp.get_tag()) {
+ while (!grc.xp.get_tag()) {
if (grc.xp.parse_str("language", gstate.language, sizeof(gstate.language))) {
- gstate.set_client_state_dirty("set_language");
- grc.mfout.printf("<success/>\n");
- return;
- }
- }
- grc.mfout.printf("<error>no language found</error>\n");
+ gstate.set_client_state_dirty("set_language");
+ grc.mfout.printf("<success/>\n");
+ return;
+ }
+ }
+ grc.mfout.printf("<error>no language found</error>\n");
}
static void handle_report_device_status(GUI_RPC_CONN& grc) {
@@ -1376,7 +1376,7 @@ static int handle_rpc_aux(GUI_RPC_CONN& grc) {
gstate.gui_rpcs.time_of_last_rpc_needing_network = gstate.now;
}
(*gr.handler)(grc);
- return 0;;
+ return 0;
}
grc.mfout.printf("<error>unrecognized op: %s</error>\n", grc.xp.parsed_tag);
return 0;
@@ -1417,7 +1417,7 @@ int GUI_RPC_CONN::handle_rpc() {
"Connection: Keep-Alive\n"
"Content-Type: text/plain\n\n"
);
- send(sock, buf, strlen(buf), 0);
+ send(sock, buf, (int)strlen(buf), 0);
request_nbytes = 0;
if (log_flags.gui_rpc_debug) {
msg_printf(0, MSG_INFO,
@@ -1494,7 +1494,7 @@ int GUI_RPC_CONN::handle_rpc() {
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n",
n
);
- send(sock, buf, strlen(buf), 0);
+ send(sock, buf, (int)strlen(buf), 0);
}
if (p) {
send(sock, p, n, 0);
diff --git a/client/hostinfo_network.cpp b/client/hostinfo_network.cpp
index 1a3e18e..f672250 100644
--- a/client/hostinfo_network.cpp
+++ b/client/hostinfo_network.cpp
@@ -123,7 +123,8 @@ void HOST_INFO::make_random_string(const char* salt, char* out) {
//
void HOST_INFO::generate_host_cpid() {
int retval;
- char buf[256];
+ char buf[256+MAXPATHLEN];
+ char dir[MAXPATHLEN];
// if a MAC address is available, compute an ID based on it;
// this has the advantage of stability
@@ -134,5 +135,13 @@ void HOST_INFO::generate_host_cpid() {
make_random_string("", host_cpid);
return;
}
+
+ // append the current dir to the MAC address;
+ // that way if there are multiple instances per host
+ // (used by some grid installations)
+ // the instances will get different CPIDs
+ //
+ boinc_getcwd(dir);
+ strcat(buf, dir);
md5_block((const unsigned char*) buf, (int)strlen(buf), host_cpid);
}
diff --git a/client/hostinfo_network.h b/client/hostinfo_network.h
deleted file mode 100644
index 9f684a7..0000000
--- a/client/hostinfo_network.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-
-extern int get_local_network_info(char* dom, int ,char* ip, int iplen);
diff --git a/client/hostinfo_unix.cpp b/client/hostinfo_unix.cpp
index 7c466f4..bab1fe5 100644
--- a/client/hostinfo_unix.cpp
+++ b/client/hostinfo_unix.cpp
@@ -1104,7 +1104,7 @@ kern_return_t SMCReadKey(UInt32 key, SMCBytes_t val) {
inputStructure.key = key;
inputStructure.data8 = SMC_CMD_READ_KEYINFO;
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
+#if 1 // Requires OS 10.5
result = IOConnectCallStructMethod(conn,
KERNEL_INDEX_SMC,
&inputStructure,
@@ -1112,7 +1112,7 @@ kern_return_t SMCReadKey(UInt32 key, SMCBytes_t val) {
&outputStructure,
&structureOutputSize
);
-#else
+#else // Deprecated in OS 10.5
result = IOConnectMethodStructureIStructureO(conn,
KERNEL_INDEX_SMC,
sizeof(inputStructure),
@@ -1128,7 +1128,7 @@ kern_return_t SMCReadKey(UInt32 key, SMCBytes_t val) {
inputStructure.keyInfo.dataSize = outputStructure.keyInfo.dataSize;
inputStructure.data8 = SMC_CMD_READ_BYTES;
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
+#if 1 // Requires OS 10.5
result = IOConnectCallStructMethod(conn,
KERNEL_INDEX_SMC,
&inputStructure,
@@ -1136,7 +1136,7 @@ kern_return_t SMCReadKey(UInt32 key, SMCBytes_t val) {
&outputStructure,
&structureOutputSize
);
-#else
+#else // Deprecated in OS 10.5
result = IOConnectMethodStructureIStructureO(conn,
KERNEL_INDEX_SMC,
sizeof(inputStructure),
@@ -1155,13 +1155,14 @@ kern_return_t SMCReadKey(UInt32 key, SMCBytes_t val) {
}
-// Check up to 10 die temperatures (TC0D, TC1D, etc.) and
-// 10 heatsink temperatures (TCAH, TCBH, etc.)
+// Check die temperatures (TC0D, TC1D, etc.) and
+// heatsink temperatures (TCAH, TCBH, etc.)
// Returns the highest current CPU temperature as degrees Celsius.
// Returns zero if it fails (or on a PowerPC Mac).
-int get_max_cpu_temperature() {
+double get_max_cpu_temperature() {
kern_return_t result;
- int maxTemp = 0, thisTemp, i;
+ double maxTemp = 0, thisTemp;
+ int i;
union tempKey {
UInt32 word;
char bytes[4];
@@ -1178,33 +1179,44 @@ int get_max_cpu_temperature() {
}
}
- for (i=0; i<20; ++i) {
+ for (i=0; i<36; ++i) {
if (skip[i]) continue;
if (i < 10) {
- key.word = 'TC0D';
- key.bytes[1] += i; // TC0D, TC1D, TC2D, etc.
+ key.word = 'TC0D'; // Standard sensors
+ key.bytes[1] += i; // TC0D, TC1D ... TC9D
+ } else if (i < 20){
+ key.word = 'TC0H'; // iMac and perhaps others
+ key.bytes[1] += (i - 10); // TC0H, TC1H ... TC9H
+ } else if (i < 26){
+ key.word = 'TCAH'; // MacPro
+ key.bytes[1] += (i - 20); // TCAH, TCBH ... TCFH
} else {
- key.word = 'TCAH';
- key.bytes[1] += (i - 10); // TCAH, TCBH, TCCH, etc.
+ key.word = 'TC0F'; // MacBookPro
+ key.bytes[1] += (i - 26); // TC0F, TC1F ... TC9F
}
+
result = SMCReadKey(key.word, val);
if (result != kIOReturnSuccess) {
+ //printf("%c%c%c%c returned result %d\n", key.bytes[3], key.bytes[2], key.bytes[1], key.bytes[0], result);
skip[i] = true;
continue;
}
if (val[0] < 1) {
+ //printf("%c%c%c%c returned val[0] = %d\n", key.bytes[3], key.bytes[2], key.bytes[1], key.bytes[0], (int)val[0]);
skip[i] = true;
continue;
}
- thisTemp = val[0];
- if (val[1] & 0x80) ++thisTemp;
+ thisTemp = (double)val[0];
+ thisTemp += ((double)val[1]) / 256;
+ //printf("%c%c%c%c returned temperature = %f\n", key.bytes[3], key.bytes[2], key.bytes[1], key.bytes[0], thisTemp);
if (thisTemp > maxTemp) {
maxTemp = thisTemp;
}
}
-
+
+ //printf("max temperature = %f\n", maxTemp);
return maxTemp;
}
@@ -1234,37 +1246,14 @@ int HOST_INFO::get_virtualbox_version() {
char *newlinePtr;
FILE* fd;
-#if LINUX_LIKE_SYSTEM
safe_strcpy(path, "/usr/bin/VBoxManage");
-#elif defined( __APPLE__)
- FSRef theFSRef;
- OSStatus status = noErr;
-
- // First try to locate the VirtualBox application by Bundle ID and Creator Code
- status = LSFindApplicationForInfo(
- 'VBOX', CFSTR("org.virtualbox.app.VirtualBox"), NULL, &theFSRef, NULL
- );
- if (status == noErr) {
- status = FSRefMakePath(&theFSRef, (unsigned char *)path, sizeof(path));
- }
- // If that failed, try its default location
- if (status != noErr) {
- strcpy(path, "/Applications/VirtualBox.app");
- }
-#endif
if (boinc_file_exists(path)) {
-#if LINUX_LIKE_SYSTEM
if (access(path, X_OK)) {
return 0;
}
safe_strcpy(cmd, path);
safe_strcat(cmd, " --version");
-#elif defined( __APPLE__)
- safe_strcpy(cmd, "defaults read ");
- safe_strcat(cmd, path);
- safe_strcat(cmd, "/Contents/Info CFBundleShortVersionString");
-#endif
fd = popen(cmd, "r");
if (fd) {
if (fgets(virtualbox_version, sizeof(virtualbox_version), fd)) {
@@ -1509,7 +1498,7 @@ int HOST_INFO::get_host_info() {
// http://developer.apple.com/documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html says:
// Unlike most UNIX-based operating systems, Mac OS X does not use a
// preallocated swap partition for virtual memory. Instead, it uses all
- // of the available space on the machine�s boot partition.
+ // of the available space on the machine's boot partition.
struct statfs fs_info;
statfs(".", &fs_info);
@@ -1756,8 +1745,6 @@ bool HOST_INFO::users_idle(
bool check_all_logins, double idle_time_to_run, double *actual_idle_time
) {
static bool error_posted = false;
- static long OSVersionInfo = 0;
- OSStatus err = noErr;
double idleTime = 0;
double idleTimeFromCG = 0;
io_service_t service;
@@ -1772,9 +1759,7 @@ bool HOST_INFO::users_idle(
if (!triedToLoadNXIdleTime) {
triedToLoadNXIdleTime = true;
- err = Gestalt(gestaltSystemVersion, &OSVersionInfo);
- if (err) OSVersionInfo = 0;
-
+
IOKitlib = dlopen ("/System/Library/Frameworks/IOKit.framework/IOKit", RTLD_NOW );
if (IOKitlib) {
myNxIdleTimeProc = (nxIdleTimeProc)dlsym(IOKitlib, "NXIdleTime");
@@ -1883,73 +1868,86 @@ bool interrupts_idle(time_t t) {
#if HAVE_XSS
// Ask the X server for user idle time (using XScreenSaver API)
-// Returns true if the idle_treshold is smaller than the
-// idle time of the user (means: true = user is idle)
-bool xss_idle(long idle_treshold) {
+// Return true if the idle time exceeds idle_threshold.
+//
+bool xss_idle(long idle_threshold) {
static XScreenSaverInfo* xssInfo = NULL;
static Display* disp = NULL;
+ static bool error = false;
+ // some X call failed - always return not idle
+ if (error) return false;
+
long idle_time = 0;
- if(disp != NULL) {
- XScreenSaverQueryInfo(disp, DefaultRootWindow(disp), xssInfo);
+ if (disp == NULL) {
+ disp = XOpenDisplay(NULL);
+ // XOpenDisplay may return NULL if there is no running X
+ // or DISPLAY points to wrong/invalid display
+ //
+ if (disp == NULL) {
+ error = true;
+ return false;
+ }
+ int event_base_return, error_base_return;
+ xssInfo = XScreenSaverAllocInfo();
+ if (!XScreenSaverQueryExtension(
+ disp, &event_base_return, &error_base_return
+ )){
+ error = true;
+ return false;
+ }
+ }
- idle_time = xssInfo->idle;
+ XScreenSaverQueryInfo(disp, DefaultRootWindow(disp), xssInfo);
+ idle_time = xssInfo->idle;
#if HAVE_DPMS
- // XIdleTime Detection
- // See header for location and copywrites.
- //
- int dummy;
- CARD16 standby, suspend, off;
- CARD16 state;
- BOOL onoff;
-
- if (DPMSQueryExtension(disp, &dummy, &dummy)) {
- if (DPMSCapable(disp)) {
- DPMSGetTimeouts(disp, &standby, &suspend, &off);
- DPMSInfo(disp, &state, &onoff);
-
- if (onoff) {
- switch (state) {
- case DPMSModeStandby:
- /* this check is a littlebit paranoid, but be sure */
- if (idle_time < (unsigned) (standby * 1000)) {
- idle_time += (standby * 1000);
- }
- break;
- case DPMSModeSuspend:
- if (idle_time < (unsigned) ((suspend + standby) * 1000)) {
- idle_time += ((suspend + standby) * 1000);
- }
- break;
- case DPMSModeOff:
- if (idle_time < (unsigned) ((off + suspend + standby) * 1000)) {
- idle_time += ((off + suspend + standby) * 1000);
- }
- break;
- case DPMSModeOn:
- default:
- break;
+ // XIdleTime Detection
+ // See header for location and copywrites.
+ //
+ int dummy;
+ CARD16 standby, suspend, off;
+ CARD16 state;
+ BOOL onoff;
+
+ if (DPMSQueryExtension(disp, &dummy, &dummy)) {
+ if (DPMSCapable(disp)) {
+ DPMSGetTimeouts(disp, &standby, &suspend, &off);
+ DPMSInfo(disp, &state, &onoff);
+
+ if (onoff) {
+ switch (state) {
+ case DPMSModeStandby:
+ // this check is a littlebit paranoid, but be sure
+ if (idle_time < (unsigned) (standby * 1000)) {
+ idle_time += (standby * 1000);
+ }
+ break;
+ case DPMSModeSuspend:
+ if (idle_time < (unsigned) ((suspend + standby) * 1000)) {
+ idle_time += ((suspend + standby) * 1000);
}
+ break;
+ case DPMSModeOff:
+ if (idle_time < (unsigned) ((off + suspend + standby) * 1000)) {
+ idle_time += ((off + suspend + standby) * 1000);
+ }
+ break;
+ case DPMSModeOn:
+ default:
+ break;
}
- }
- }
+ }
+ }
+ }
#endif
- // convert from milliseconds to seconds
- idle_time = idle_time / 1000;
-
- } else {
- disp = XOpenDisplay(NULL);
- // XOpenDisplay may return NULL if there is no running X
- // or DISPLAY points to wrong/invalid display
- if(disp != NULL) {
- xssInfo = XScreenSaverAllocInfo();
- }
- }
+ // convert from milliseconds to seconds
+ //
+ idle_time = idle_time / 1000;
- return idle_treshold < idle_time;
+ return idle_threshold < idle_time;
}
#endif // HAVE_XSS
#endif // LINUX_LIKE_SYSTEM
diff --git a/client/hostinfo_win.cpp b/client/hostinfo_win.cpp
index f28034c..195e963 100644
--- a/client/hostinfo_win.cpp
+++ b/client/hostinfo_win.cpp
@@ -40,231 +40,8 @@
#include "idlemon.h"
-// Newer system metrics values than what is currently defined in
-// Visual Studio 2005
-#ifndef SM_TABLETPC
-#define SM_TABLETPC 86
-#endif
-#ifndef SM_MEDIACENTER
-#define SM_MEDIACENTER 87
-#endif
-#ifndef SM_STARTER
-#define SM_STARTER 88
-#endif
-#ifndef SM_SERVERR2
-#define SM_SERVERR2 89
-#endif
-
-
// Newer product types than what is currently defined in
-// Visual Studio 2005
-#ifndef PRODUCT_ULTIMATE
-#define PRODUCT_ULTIMATE 0x00000001
-#endif
-#ifndef PRODUCT_HOME_BASIC
-#define PRODUCT_HOME_BASIC 0x00000002
-#endif
-#ifndef PRODUCT_HOME_PREMIUM
-#define PRODUCT_HOME_PREMIUM 0x00000003
-#endif
-#ifndef PRODUCT_ENTERPRISE
-#define PRODUCT_ENTERPRISE 0x00000004
-#endif
-#ifndef PRODUCT_HOME_BASIC_N
-#define PRODUCT_HOME_BASIC_N 0x00000005
-#endif
-#ifndef PRODUCT_BUSINESS
-#define PRODUCT_BUSINESS 0x00000006
-#endif
-#ifndef PRODUCT_STANDARD_SERVER
-#define PRODUCT_STANDARD_SERVER 0x00000007
-#endif
-#ifndef PRODUCT_DATACENTER_SERVER
-#define PRODUCT_DATACENTER_SERVER 0x00000008
-#endif
-#ifndef PRODUCT_SMALLBUSINESS_SERVER
-#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
-#endif
-#ifndef PRODUCT_ENTERPRISE_SERVER
-#define PRODUCT_ENTERPRISE_SERVER 0x0000000A
-#endif
-#ifndef PRODUCT_STARTER
-#define PRODUCT_STARTER 0x0000000B
-#endif
-#ifndef PRODUCT_DATACENTER_SERVER_CORE
-#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
-#endif
-#ifndef PRODUCT_STANDARD_SERVER_CORE
-#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
-#endif
-#ifndef PRODUCT_ENTERPRISE_SERVER_CORE
-#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
-#endif
-#ifndef PRODUCT_ENTERPRISE_SERVER_IA64
-#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
-#endif
-#ifndef PRODUCT_BUSINESS_N
-#define PRODUCT_BUSINESS_N 0x00000010
-#endif
-#ifndef PRODUCT_WEB_SERVER
-#define PRODUCT_WEB_SERVER 0x00000011
-#endif
-#ifndef PRODUCT_CLUSTER_SERVER
-#define PRODUCT_CLUSTER_SERVER 0x00000012
-#endif
-#ifndef PRODUCT_HOME_SERVER
-#define PRODUCT_HOME_SERVER 0x00000013
-#endif
-#ifndef PRODUCT_STORAGE_EXPRESS_SERVER
-#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
-#endif
-#ifndef PRODUCT_STORAGE_STANDARD_SERVER
-#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
-#endif
-#ifndef PRODUCT_STORAGE_WORKGROUP_SERVER
-#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
-#endif
-#ifndef PRODUCT_STORAGE_ENTERPRISE_SERVER
-#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
-#endif
-#ifndef PRODUCT_SERVER_FOR_SMALLBUSINESS
-#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
-#endif
-#ifndef PRODUCT_SMALLBUSINESS_SERVER_PREMIUM
-#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
-#endif
-#ifndef PRODUCT_HOME_PREMIUM_N
-#define PRODUCT_HOME_PREMIUM_N 0x0000001A
-#endif
-#ifndef PRODUCT_ENTERPRISE_N
-#define PRODUCT_ENTERPRISE_N 0x0000001B
-#endif
-#ifndef PRODUCT_ULTIMATE_N
-#define PRODUCT_ULTIMATE_N 0x0000001C
-#endif
-#ifndef PRODUCT_WEB_SERVER_CORE
-#define PRODUCT_WEB_SERVER_CORE 0x0000001D
-#endif
-#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT
-#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
-#endif
-#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY
-#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
-#endif
-#ifndef PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING
-#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
-#endif
-#ifndef PRODUCT_SMALLBUSINESS_SERVER_PRIME
-#define PRODUCT_SMALLBUSINESS_SERVER_PRIME 0x00000021
-#endif
-#ifndef PRODUCT_HOME_PREMIUM_SERVER
-#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
-#endif
-#ifndef PRODUCT_SERVER_FOR_SMALLBUSINESS_V
-#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
-#endif
-#ifndef PRODUCT_STANDARD_SERVER_V
-#define PRODUCT_STANDARD_SERVER_V 0x00000024
-#endif
-#ifndef PRODUCT_DATACENTER_SERVER_V
-#define PRODUCT_DATACENTER_SERVER_V 0x00000025
-#endif
-#ifndef PRODUCT_ENTERPRISE_SERVER_V
-#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
-#endif
-#ifndef PRODUCT_DATACENTER_SERVER_CORE_V
-#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
-#endif
-#ifndef PRODUCT_STANDARD_SERVER_CORE_V
-#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
-#endif
-#ifndef PRODUCT_ENTERPRISE_SERVER_CORE_V
-#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
-#endif
-#ifndef PRODUCT_HYPERV
-#define PRODUCT_HYPERV 0x0000002A
-#endif
-#ifndef PRODUCT_STORAGE_EXPRESS_SERVER_CORE
-#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
-#endif
-#ifndef PRODUCT_STORAGE_STANDARD_SERVER_CORE
-#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
-#endif
-#ifndef PRODUCT_STORAGE_WORKGROUP_SERVER_CORE
-#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
-#endif
-#ifndef PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE
-#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
-#endif
-#ifndef PRODUCT_PROFESSIONAL
-#define PRODUCT_PROFESSIONAL 0x00000030
-#endif
-#ifndef PRODUCT_PROFESSIONAL_N
-#define PRODUCT_PROFESSIONAL_N 0x00000031
-#endif
-#ifndef PRODUCT_SB_SOLUTION_SERVER
-#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
-#endif
-#ifndef PRODUCT_SERVER_FOR_SB_SOLUTIONS
-#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
-#endif
-#ifndef PRODUCT_STANDARD_SERVER_SOLUTIONS
-#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
-#endif
-#ifndef PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE
-#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
-#endif
-#ifndef PRODUCT_SB_SOLUTION_SERVER_EM
-#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
-#endif
-#ifndef PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM
-#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
-#endif
-#ifndef PRODUCT_SOLUTION_EMBEDDEDSERVER
-#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
-#endif
-#ifndef PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE
-#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
-#endif
-#ifndef PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE
-#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
-#endif
-#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
-#endif
-#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
-#endif
-#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
-#endif
-#ifndef PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC
-#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
-#endif
-#ifndef PRODUCT_CLUSTER_SERVER_V
-#define PRODUCT_CLUSTER_SERVER_V 0x00000040
-#endif
-#ifndef PRODUCT_EMBEDDED
-#define PRODUCT_EMBEDDED 0x00000041
-#endif
-#ifndef PRODUCT_STARTER_E
-#define PRODUCT_STARTER_E 0x00000042
-#endif
-#ifndef PRODUCT_HOME_BASIC_E
-#define PRODUCT_HOME_BASIC_E 0x00000043
-#endif
-#ifndef PRODUCT_HOME_PREMIUM_E
-#define PRODUCT_HOME_PREMIUM_E 0x00000044
-#endif
-#ifndef PRODUCT_PROFESSIONAL_E
-#define PRODUCT_PROFESSIONAL_E 0x00000045
-#endif
-#ifndef PRODUCT_ENTERPRISE_E
-#define PRODUCT_ENTERPRISE_E 0x00000046
-#endif
-#ifndef PRODUCT_ULTIMATE_E
-#define PRODUCT_ULTIMATE_E 0x00000047
-#endif
+// Visual Studio 2010
#ifndef PRODUCT_ENTERPRISE_EVALUATION
#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
#endif
@@ -343,13 +120,25 @@
#ifndef PRODUCT_MOBILE_CORE
#define PRODUCT_MOBILE_CORE 0x00000068
#endif
-// Newer suite types than what is currently defined in
-// Visual Studio 2005
-#ifndef VER_SUITE_WH_SERVER
-#define VER_SUITE_WH_SERVER 0x00008000
+// Windows NT 6.3
+#ifndef PRODUCT_EMBEDDED_INDUSTRY_EVAL
+#define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
+#endif
+#ifndef PRODUCT_EMBEDDED_INDUSTRY_E_EVAL
+#define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
+#endif
+#ifndef PRODUCT_EMBEDDED_EVAL
+#define PRODUCT_EMBEDDED_EVAL 0x0000006B
+#endif
+#ifndef PRODUCT_EMBEDDED_E_EVAL
+#define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
+#endif
+#ifndef PRODUCT_CORE_SERVER
+#define PRODUCT_CORE_SERVER 0x0000006D
+#endif
+#ifndef PRODUCT_CLOUD_STORAGE_SERVER
+#define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
#endif
-
-
// Returns the number of seconds difference from UTC
@@ -383,7 +172,6 @@ int get_memory_info(double& bytes, double& swap) {
// Returns the OS name and version
//
-typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
int get_os_information(
@@ -397,7 +185,6 @@ int get_os_information(
char szServicePack[128];
OSVERSIONINFOEX osvi;
SYSTEM_INFO si;
- PGNSI pGNSI;
PGPI pGPI;
BOOL bOsVersionInfoEx;
DWORD dwType = 0;
@@ -410,24 +197,20 @@ int get_os_information(
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+ // GetProductInfo is a Vista+ API
+ pGPI = (PGPI) GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "GetProductInfo");
+
+
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails, try using the OSVERSIONINFO structure.
- bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi);
+ bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO*)&osvi);
if(!bOsVersionInfoEx) {
- osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
- GetVersionEx ( (OSVERSIONINFO *) &osvi );
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx ((OSVERSIONINFO*)&osvi);
}
- // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
- pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "GetNativeSystemInfo");
- if(NULL != pGNSI) {
- pGNSI(&si);
- } else {
- GetSystemInfo(&si);
- }
-
- pGPI = (PGPI) GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "GetProductInfo");
+ GetNativeSystemInfo(&si);
// Windows is a Microsoft OS
@@ -765,7 +548,11 @@ int get_os_information(
case PROCESSOR_ARCHITECTURE_AMD64:
strcat(szSKU, "x64 ");
break;
- case PROCESSOR_ARCHITECTURE_UNKNOWN:
+ // could be needed for Windows RT Boinc ?
+ case PROCESSOR_ARCHITECTURE_ARM:
+ strcat(szSKU, "ARM");
+ break;
+ case PROCESSOR_ARCHITECTURE_UNKNOWN:
strcat(szSKU, "Unknown ");
break;
}
@@ -883,7 +670,7 @@ int get_cpuid(unsigned int info_type, unsigned int& a, unsigned int& b, unsigned
#elif defined(__GNUC__)
// GCC compiler
- __asm__ __volatile__ ("cpuid": "=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (info_type));
+ __asm__ __volatile__ ("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (info_type));
return 0;
#else
@@ -985,6 +772,7 @@ int get_processor_name(char* name, int name_size) {
// see: http://msdn.microsoft.com/en-us/library/hskdteyh.aspx
// see: http://www.intel.com/Assets/PDF/appnote/241618.pdf
// see: http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/25481.pdf
+//
int get_processor_cache(int& cache) {
unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0;
@@ -998,6 +786,43 @@ int get_processor_cache(int& cache) {
}
+// Returns true if the AVX instruction set is supported with the current
+// combination of OS and CPU.
+// see: http://insufficientlycomplicated.wordpress.com/2011/11/07/detecting-intel-advanced-vector-extensions-avx-in-visual-studio/
+//
+bool is_avx_supported() {
+
+ bool supported = false;
+
+ // If Visual Studio 2010 SP1 or later
+#if (_MSC_FULL_VER >= 160040219)
+ // Checking for AVX requires 3 things:
+ // 1) CPUID indicates that the OS uses XSAVE and XRSTORE
+ // instructions (allowing saving YMM registers on context
+ // switch)
+ // 2) CPUID indicates support for AVX
+ // 3) XGETBV indicates the AVX registers will be saved and
+ // restored on context switch
+ //
+ // Note that XGETBV is only available on 686 or later CPUs, so
+ // the instruction needs to be conditionally run.
+ int cpuInfo[4];
+ __cpuid(cpuInfo, 1);
+
+ bool osUsesXSAVE_XRSTORE = cpuInfo[2] & (1 << 27) || false;
+ bool cpuAVXSuport = cpuInfo[2] & (1 << 28) || false;
+
+ if (osUsesXSAVE_XRSTORE && cpuAVXSuport)
+ {
+ // Check if the OS will save the YMM registers
+ unsigned long long xcrFeatureMask = _xgetbv(_XCR_XFEATURE_ENABLED_MASK);
+ supported = (xcrFeatureMask & 0x6) || false;
+ }
+#endif
+
+ return supported;
+}
+
// Returns the features supported by the processor, use the
// Linux CPU processor feature mnemonics.
// see: http://msdn.microsoft.com/en-us/library/hskdteyh.aspx
@@ -1009,7 +834,8 @@ int get_processor_cache(int& cache) {
int get_processor_features(char* vendor, char* features, int features_size) {
unsigned int std_eax = 0, std_ebx = 0, std_ecx = 0, std_edx = 0;
unsigned int ext_eax = 0, ext_ebx = 0, ext_ecx = 0, ext_edx = 0;
- unsigned int std_supported = 0, ext_supported = 0, intel_supported = 0, amd_supported = 0;
+ unsigned int struc_eax = 0, struc_ebx = 0, struc_ecx = 0, struc_edx = 0;
+ unsigned int std_supported = 0, ext_supported = 0, struc_ext_supported = 0, intel_supported = 0, amd_supported = 0;
if (!vendor) return ERR_INVALID_PARAM;
if (!features) return ERR_INVALID_PARAM;
@@ -1036,6 +862,12 @@ int get_processor_features(char* vendor, char* features, int features_size) {
get_cpuid(0x80000001, ext_eax, ext_ebx, ext_ecx, ext_edx);
}
+ get_cpuid(0x00000000, struc_eax, struc_ebx, struc_ecx, struc_edx);
+ if (struc_eax >= 0x00000007) {
+ struc_ext_supported = 1;
+ get_cpuid(0x00000007, struc_eax, struc_ebx, struc_ecx, struc_edx);
+ }
+
FEATURE_TEST(std_supported, (std_edx & (1 << 0)), "fpu ");
FEATURE_TEST(std_supported, (std_edx & (1 << 1)), "vme ");
FEATURE_TEST(std_supported, (std_edx & (1 << 2)), "de ");
@@ -1065,21 +897,30 @@ int get_processor_features(char* vendor, char* features, int features_size) {
FEATURE_TEST(std_supported, (std_edx & (1 << 28)), "htt ");
FEATURE_TEST(std_supported, (std_edx & (1 << 29)), "tm ");
- FEATURE_TEST(std_supported, (std_ecx & (1 << 0)), "pni "); // should be named like it is definded - SSE3 and not PNI !
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 0)), "pni ");
FEATURE_TEST(std_supported, (std_ecx & (1 << 9)), "ssse3 ");
- FEATURE_TEST(std_supported, (std_ecx & (1 << 12)), "fma "); // removed from Intel only because AMD Family 15h & 16h support it too
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 12)), "fma ");
FEATURE_TEST(std_supported, (std_ecx & (1 << 13)), "cx16 ");
FEATURE_TEST(std_supported, (std_ecx & (1 << 19)), "sse4_1 ");
FEATURE_TEST(std_supported, (std_ecx & (1 << 20)), "sse4_2 ");
- FEATURE_TEST(std_supported, (std_ecx & (1 << 22)), "movebe "); // removed from Intel only because AMD Family 16h support it too
- FEATURE_TEST(std_supported, (std_ecx & (1 << 23)), "popcnt "); // removed from Intel only because AMD Family 10h/11h/12h/14h/15h/16h support it too
- FEATURE_TEST(std_supported, (std_ecx & (1 << 25)), "aes "); // removed from Intel only because AMD Family 15h & 16h support it too
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 22)), "movebe ");
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 23)), "popcnt ");
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 25)), "aes ");
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 29)), "f16c ");
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 30)), "rdrand");
-
FEATURE_TEST(ext_supported, (ext_edx & (1 << 11)), "syscall ");
FEATURE_TEST(ext_supported, (ext_edx & (1 << 20)), "nx ");
FEATURE_TEST(ext_supported, (ext_edx & (1 << 29)), "lm ");
+ if (is_avx_supported()) {
+ FEATURE_TEST(std_supported, (std_ecx & (1 << 28)), "avx ");
+ }
+
+ if (is_avx_supported() && struc_ext_supported) {
+ FEATURE_TEST(struc_ext_supported, (struc_ebx & (1 << 5)), "avx2 ");
+ }
+
if (intel_supported) {
// Intel only features
FEATURE_TEST(std_supported, (std_ecx & (1 << 5)), "vmx ");
@@ -1101,10 +942,10 @@ int get_processor_features(char* vendor, char* features, int features_size) {
FEATURE_TEST(ext_supported, (ext_ecx & (1 << 13)), "wdt ");
FEATURE_TEST(ext_supported, (ext_ecx & (1 << 15)), "lwp ");
FEATURE_TEST(ext_supported, (ext_ecx & (1 << 16)), "fma4 ");
- FEATURE_TEST(ext_supported, (ext_ecx & (1 << 17)), "tce "); // new - translation cache extension
+ FEATURE_TEST(ext_supported, (ext_ecx & (1 << 17)), "tce ");
FEATURE_TEST(ext_supported, (ext_ecx & (1 << 18)), "cvt16 ");
- FEATURE_TEST(ext_supported, (ext_ecx & (1 << 21)), "tbm "); // new - trailing bit manipulation instruction
- FEATURE_TEST(ext_supported, (ext_ecx & (1 << 22)), "topx "); // new - topology extensions
+ FEATURE_TEST(ext_supported, (ext_ecx & (1 << 21)), "tbm ");
+ FEATURE_TEST(ext_supported, (ext_ecx & (1 << 22)), "topx ");
FEATURE_TEST(ext_supported, (ext_edx & (1 << 26)), "page1gb ");
FEATURE_TEST(ext_supported, (ext_edx & (1 << 27)), "rdtscp ");
@@ -1112,8 +953,17 @@ int get_processor_features(char* vendor, char* features, int features_size) {
FEATURE_TEST(ext_supported, (ext_edx & (1 << 31)), "3dnow ");
}
- strip_whitespace(features);
+ if (struc_ext_supported) {
+ // Structured Ext. Feature Flags
+ // used by newer Intel and newer AMD CPUs
+ FEATURE_TEST(struc_ext_supported, (struc_ebx & (1 << 0)), "fsgsbase ");
+ FEATURE_TEST(struc_ext_supported, (struc_ebx & (1 << 3)), "bmi1 ");
+ FEATURE_TEST(struc_ext_supported, (struc_ebx & (1 << 4)), "hle ");
+ FEATURE_TEST(struc_ext_supported, (struc_ebx & (1 << 7)), "smep ");
+ FEATURE_TEST(struc_ext_supported, (struc_ebx & (1 << 8)), "bmi2 ");
+ }
+ strip_whitespace(features);
return 0;
}
@@ -1167,10 +1017,7 @@ int get_processor_info(
processor_name, family, model, stepping
);
- snprintf(p_features, p_features_size,
- "%s",
- features
- );
+ snprintf(p_features, p_features_size, "%s", features);
p_cache = (double)cache;
diff --git a/client/http_curl.cpp b/client/http_curl.cpp
index 615511d..ea2b6c32 100644
--- a/client/http_curl.cpp
+++ b/client/http_curl.cpp
@@ -412,8 +412,6 @@ int HTTP_OP::libcurl_exec(
char buf[256];
static int outfile_seqno=0;
- safe_strcpy(m_url, url);
-
if (g_user_agent_string[0] == 0x00) {
get_user_agent_string();
}
@@ -441,9 +439,8 @@ int HTTP_OP::libcurl_exec(
// the following seems to be a no-op
// curl_easy_setopt(curlEasy, CURLOPT_ERRORBUFFER, error_msg);
- char esc_url[1024];
- string_substitute(m_url, esc_url, sizeof(esc_url), " ", "%20");
- curl_easy_setopt(curlEasy, CURLOPT_URL, esc_url);
+ string_substitute(url, m_url, sizeof(m_url), " ", "%20");
+ curl_easy_setopt(curlEasy, CURLOPT_URL, m_url);
// This option determines whether curl verifies that the server
// claims to be who you want it to be.
@@ -466,6 +463,7 @@ int HTTP_OP::libcurl_exec(
// To control lying, see CURLOPT_SSL_VERIFYPEER.
//
curl_easy_setopt(curlEasy, CURLOPT_SSL_VERIFYHOST, 2L);
+ //curl_easy_setopt(curlEasy, CURLOPT_SSL_VERIFYHOST, 0);
// the following sets "tough" certificate checking
// (i.e. whether self-signed is OK)
@@ -474,6 +472,7 @@ int HTTP_OP::libcurl_exec(
// if non-zero below, you need a valid 3rd party CA (i.e. Verisign, Thawte)
//
curl_easy_setopt(curlEasy, CURLOPT_SSL_VERIFYPEER, 1L);
+ //curl_easy_setopt(curlEasy, CURLOPT_SSL_VERIFYPEER, FALSE);
// if the above is nonzero, you need the following:
//
@@ -550,14 +549,14 @@ int HTTP_OP::libcurl_exec(
// setup timeouts
//
curl_easy_setopt(curlEasy, CURLOPT_TIMEOUT, 0L);
- curl_easy_setopt(curlEasy, CURLOPT_LOW_SPEED_LIMIT, config.http_transfer_timeout_bps);
- curl_easy_setopt(curlEasy, CURLOPT_LOW_SPEED_TIME, config.http_transfer_timeout);
+ curl_easy_setopt(curlEasy, CURLOPT_LOW_SPEED_LIMIT, cc_config.http_transfer_timeout_bps);
+ curl_easy_setopt(curlEasy, CURLOPT_LOW_SPEED_TIME, cc_config.http_transfer_timeout);
curl_easy_setopt(curlEasy, CURLOPT_CONNECTTIMEOUT, 120L);
// force curl to use HTTP/1.0 if config specifies it
// (curl uses 1.1 by default)
//
- if (config.http_1_0 || (config.force_auth == "ntlm")) {
+ if (cc_config.http_1_0 || (cc_config.force_auth == "ntlm")) {
curl_easy_setopt(curlEasy, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
}
curl_easy_setopt(curlEasy, CURLOPT_MAXREDIRS, 50L);
@@ -573,9 +572,9 @@ int HTTP_OP::libcurl_exec(
// Per: http://curl.haxx.se/dev/readme-encoding.html
// NULL disables, empty string accepts all.
if (out) {
- if (ends_with(out, ".gzt")) {
+ if (ends_with(out, ".gzt") || ends_with(out, ".gz") || ends_with(out, ".tgz")) {
curl_easy_setopt(curlEasy, CURLOPT_ENCODING, NULL);
- } else if (!ends_with(out, ".gz")) {
+ } else {
curl_easy_setopt(curlEasy, CURLOPT_ENCODING, "");
}
} else {
@@ -591,10 +590,10 @@ int HTTP_OP::libcurl_exec(
//
pcurlList = curl_slist_append(pcurlList, g_content_type);
- if (strlen(gstate.language)) {
- sprintf(buf, "ACCEPT_LANGUAGE: %s", gstate.language);
- pcurlList = curl_slist_append(pcurlList, buf);
- }
+ if (strlen(gstate.language)) {
+ sprintf(buf, "Accept-Language: %s", gstate.language);
+ pcurlList = curl_slist_append(pcurlList, buf);
+ }
// set the file offset for resumable downloads
//
@@ -830,13 +829,13 @@ void HTTP_OP::setup_proxy_session(bool no_proxy) {
curl_easy_setopt(curlEasy, CURLOPT_PROXY, (char*) pi.http_server_name);
if (pi.use_http_auth) {
- if (config.force_auth == "basic") {
+ if (cc_config.force_auth == "basic") {
curl_easy_setopt(curlEasy, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
- } else if (config.force_auth == "digest") {
+ } else if (cc_config.force_auth == "digest") {
curl_easy_setopt(curlEasy, CURLOPT_PROXYAUTH, CURLAUTH_DIGEST);
- } else if (config.force_auth == "gss-negotiate") {
+ } else if (cc_config.force_auth == "gss-negotiate") {
curl_easy_setopt(curlEasy, CURLOPT_PROXYAUTH, CURLAUTH_GSSNEGOTIATE);
- } else if (config.force_auth == "ntlm") {
+ } else if (cc_config.force_auth == "ntlm") {
curl_easy_setopt(curlEasy, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
} else {
curl_easy_setopt(curlEasy, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
@@ -1001,16 +1000,16 @@ void HTTP_OP::handle_messages(CURLMsg *pcurlMsg) {
if (CurlResult == CURLE_OK) {
switch ((response/100)*100) {
- case HTTP_STATUS_OK:
+ case HTTP_STATUS_OK: // 200
http_op_retval = 0;
break;
- case HTTP_STATUS_CONTINUE:
+ case HTTP_STATUS_CONTINUE: // 100
return;
- case HTTP_STATUS_INTERNAL_SERVER_ERROR:
+ case HTTP_STATUS_INTERNAL_SERVER_ERROR: // 500
http_op_retval = ERR_HTTP_TRANSIENT;
safe_strcpy(error_msg, boincerror(response));
break;
- default:
+ default: // 400
http_op_retval = ERR_HTTP_PERMANENT;
safe_strcpy(error_msg, boincerror(response));
break;
diff --git a/client/http_curl.h b/client/http_curl.h
index 0dd5c60..68135a7 100644
--- a/client/http_curl.h
+++ b/client/http_curl.h
@@ -57,7 +57,7 @@ public:
PROXY_INFO pi;
PROJECT* project; // associated project, if any
- char m_url[256];
+ char m_url[1024];
char m_curl_ca_bundle_location[256];
// string needed for ssl support
char m_curl_user_credentials[128];
diff --git a/client/log_flags.cpp b/client/log_flags.cpp
index 8d75e55..6df25fa 100644
--- a/client/log_flags.cpp
+++ b/client/log_flags.cpp
@@ -48,7 +48,7 @@
using std::string;
LOG_FLAGS log_flags;
-CONFIG config;
+CC_CONFIG cc_config;
static void show_flag(char* buf, bool flag, const char* flag_name) {
if (!flag) return;
@@ -151,10 +151,10 @@ static void show_exclude_gpu(EXCLUDE_GPU& e) {
//
// TODO: show other config options
//
-void CONFIG::show() {
+void CC_CONFIG::show() {
unsigned int i;
if (ncpus>0) {
- msg_printf(NULL, MSG_INFO, "Config: simulate %d CPUs", config.ncpus);
+ msg_printf(NULL, MSG_INFO, "Config: simulate %d CPUs", cc_config.ncpus);
}
if (no_gpus) {
msg_printf(NULL, MSG_INFO, "Config: don't use coprocessors");
@@ -241,10 +241,10 @@ void CONFIG::show() {
}
// This is used by the BOINC client.
-// KEEP IN SYNCH WITH CONFIG::parse_options()!!
+// KEEP IN SYNCH WITH CC_CONFIG::parse_options()!!
// (It's separate so that we can write messages in it)
-int CONFIG::parse_options_client(XML_PARSER& xp) {
+int CC_CONFIG::parse_options_client(XML_PARSER& xp) {
char path[MAXPATHLEN];
string s;
int n, retval;
@@ -423,12 +423,12 @@ int CONFIG::parse_options_client(XML_PARSER& xp) {
_("Unrecognized tag in cc_config.xml"),
xp.parsed_tag
);
- xp.skip_unexpected(true, "CONFIG::parse_options");
+ xp.skip_unexpected(true, "CC_CONFIG::parse_options");
}
return ERR_XML_PARSE;
}
-int CONFIG::parse_client(FILE* f) {
+int CC_CONFIG::parse_client(FILE* f) {
MIOFILE mf;
XML_PARSER xp(&mf);
@@ -475,7 +475,7 @@ int CONFIG::parse_client(FILE* f) {
_("Unrecognized tag in cc_config.xml"),
xp.parsed_tag
);
- xp.skip_unexpected(true, "CONFIG.parse");
+ xp.skip_unexpected(true, "CC_CONFIG.parse");
}
msg_printf_notice(NULL, false,
"http://boinc.berkeley.edu/manager_links.php?target=notice&controlid=config",
@@ -485,7 +485,7 @@ int CONFIG::parse_client(FILE* f) {
return ERR_XML_PARSE;
}
-int CONFIG::parse(FILE* f) {
+int CC_CONFIG::parse(FILE* f) {
MIOFILE mf;
mf.init_file(f);
XML_PARSER xp(&mf);
@@ -499,7 +499,7 @@ int CONFIG::parse(FILE* f) {
int read_config_file(bool init, const char* fname) {
if (!init) {
msg_printf(NULL, MSG_INFO, "Re-reading %s", fname);
- config.defaults();
+ cc_config.defaults();
log_flags.init();
}
FILE* f = boinc_fopen(fname, "r");
@@ -507,25 +507,25 @@ int read_config_file(bool init, const char* fname) {
msg_printf(NULL, MSG_INFO, "cc_config.xml not found - using defaults");
return ERR_FOPEN;
}
- config.parse_client(f);
+ cc_config.parse_client(f);
fclose(f);
#ifndef SIM
diagnostics_set_max_file_sizes(
- config.max_stdout_file_size, config.max_stderr_file_size
+ cc_config.max_stdout_file_size, cc_config.max_stderr_file_size
);
#endif
- config_proxy_info = config.proxy_info;
+ config_proxy_info = cc_config.proxy_info;
if (init) {
- coprocs = config.config_coprocs;
- if (strlen(config.data_dir)) {
+ coprocs = cc_config.config_coprocs;
+ if (strlen(cc_config.data_dir)) {
#ifdef _WIN32
- _chdir(config.data_dir);
+ _chdir(cc_config.data_dir);
#else
- if (chdir(config.data_dir)) {
+ if (chdir(cc_config.data_dir)) {
msg_printf(NULL, MSG_INFO,
"Couldn't change to directory specified in cc_config.xml: %s",
- config.data_dir
+ cc_config.data_dir
);
return ERR_OPENDIR;
}
@@ -556,8 +556,8 @@ void process_gpu_exclusions() {
// check the syntactic validity of the exclusions
//
- for (i=0; i<config.exclude_gpus.size(); i++) {
- EXCLUDE_GPU& eg = config.exclude_gpus[i];
+ for (i=0; i<cc_config.exclude_gpus.size(); i++) {
+ EXCLUDE_GPU& eg = cc_config.exclude_gpus[i];
p = gstate.lookup_project(eg.url.c_str());
if (!p) {
msg_printf(0, MSG_USER_ALERT,
@@ -615,8 +615,8 @@ void process_gpu_exclusions() {
for (int k=1; k<coprocs.n_rsc; k++) {
COPROC& cp = coprocs.coprocs[k];
int all_instances = (1<<cp.count)-1; // bitmap of 1 for all inst
- for (j=0; j<config.exclude_gpus.size(); j++) {
- EXCLUDE_GPU& eg = config.exclude_gpus[j];
+ for (j=0; j<cc_config.exclude_gpus.size(); j++) {
+ EXCLUDE_GPU& eg = cc_config.exclude_gpus[j];
if (!eg.type.empty() && (eg.type != cp.type)) continue;
if (strcmp(eg.url.c_str(), p->master_url)) continue;
int mask;
@@ -708,10 +708,10 @@ void process_gpu_exclusions() {
}
bool gpu_excluded(APP* app, COPROC& cp, int ind) {
- if (config.no_gpus) return true;
+ if (cc_config.no_gpus) return true;
PROJECT* p = app->project;
- for (unsigned int i=0; i<config.exclude_gpus.size(); i++) {
- EXCLUDE_GPU& eg = config.exclude_gpus[i];
+ for (unsigned int i=0; i<cc_config.exclude_gpus.size(); i++) {
+ EXCLUDE_GPU& eg = cc_config.exclude_gpus[i];
if (strcmp(eg.url.c_str(), p->master_url)) continue;
if (!eg.type.empty() && (eg.type != cp.type)) continue;
if (!eg.appname.empty() && (eg.appname != app->name)) continue;
diff --git a/client/log_flags.h b/client/log_flags.h
index 2060ab0..9eeb47a 100644
--- a/client/log_flags.h
+++ b/client/log_flags.h
@@ -35,7 +35,7 @@
#include "cc_config.h"
extern LOG_FLAGS log_flags;
-extern CONFIG config;
+extern CC_CONFIG cc_config;
extern int read_config_file(bool init, const char* fname=CONFIG_FILE);
extern void process_gpu_exclusions();
extern bool gpu_excluded(APP* app, COPROC& cp, int ind);
diff --git a/client/mac_address.cpp b/client/mac_address.cpp
index 26bda73..e08a25a 100644
--- a/client/mac_address.cpp
+++ b/client/mac_address.cpp
@@ -21,7 +21,7 @@
#include <string.h>
#if defined(_WIN32)
-#include <windows.h>
+#include <boinc_win.h>
#include <Iphlpapi.h>
#elif defined(__APPLE__)
#include <cstdio>
@@ -149,27 +149,27 @@ GetMACAddress(io_iterator_t intfIterator, char* buffer)
int get_mac_address(char* address) {
#if defined(_WIN32)
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
- DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
- // Call GetAdapterInfo
- DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
+ DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
+ // Call GetAdapterInfo
+ DWORD dwStatus = GetAdaptersInfo(AdapterInfo, &dwBufLen);
- if(dwStatus != ERROR_SUCCESS) {
- return -1;
- }
- strcpy(address, "");
- PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to current adapter info
- while (pAdapterInfo) {
- sprintf(address, "%02x:%02x:%02x:%02x:%02x:%02x",
- pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2],
- pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]
- );
- if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) break;
- pAdapterInfo = pAdapterInfo->Next;
- }
- return 0;
+ if(dwStatus != ERROR_SUCCESS) {
+ return -1;
+ }
+ strcpy(address, "");
+ PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to current adapter info
+ while (pAdapterInfo) {
+ sprintf(address, "%02x:%02x:%02x:%02x:%02x:%02x",
+ pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2],
+ pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]
+ );
+ if (pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) break;
+ pAdapterInfo = pAdapterInfo->Next;
+ }
+ return 0;
#elif defined(__APPLE__)
- kern_return_t kernResult = KERN_SUCCESS; // on PowerPC this is an int (4 bytes)
+ kern_return_t kernResult = KERN_SUCCESS; // on PowerPC this is an int (4 bytes)
/*
* error number layout as follows (see mach/error.h and IOKitLib/IOReturn.h):
*
@@ -177,21 +177,21 @@ int get_mac_address(char* address) {
* | system(6) | subsystem(12) | code(14) |
*/
io_iterator_t intfIterator;
- int retval = 0;
+ int retval = 0;
kernResult = FindEthernetInterfaces(&intfIterator);
if (KERN_SUCCESS != kernResult) {
- fprintf(stderr, "FindEthernetInterfaces returned 0x%08x\n", kernResult);
- retval = -1;
- } else {
+ fprintf(stderr, "FindEthernetInterfaces returned 0x%08x\n", kernResult);
+ retval = -1;
+ } else {
kernResult = GetMACAddress(intfIterator, address);
if (KERN_SUCCESS != kernResult) {
- fprintf(stderr, "GetMACAddress returned 0x%08x\n", kernResult);
- retval = -1;
- }
+ fprintf(stderr, "GetMACAddress returned 0x%08x\n", kernResult);
+ retval = -1;
+ }
}
IOObjectRelease(intfIterator);
- return retval;
+ return retval;
#elif defined(SIOCGIFCONF) || defined(SIOCGLIFCONF)
char buf[1024];
@@ -235,7 +235,7 @@ int get_mac_address(char* address) {
ifr = ifc.lifc_req;
nInterfaces = ifc.lifc_len / sizeof(struct lifreq);
#else
- ifr = ifc.ifc_req;
+ ifr = ifc.ifc_req;
nInterfaces = ifc.ifc_len / sizeof(struct ifreq);
#endif
strcpy(address, "");
@@ -264,7 +264,11 @@ int get_mac_address(char* address) {
hw_addr = (struct ether_addr *)&(item->lifr_lifru.lifru_enaddr);
#endif
strcpy(address, ether_ntoa(hw_addr));
- if (strstr(item->ifr_ifrn.ifrn_name, "eth")) break;
+#ifdef HAVE_STRUCT_LIFCONF
+ if (strstr(item->lifr_name, "eth")) break;
+#else
+ if (strstr(item->ifr_name, "eth")) break;
+#endif
}
close(sck);
if (!strcmp(address, "")) return -1;
diff --git a/client/mac_address.h b/client/mac_address.h
index ae9833d..d4a1727 100644
--- a/client/mac_address.h
+++ b/client/mac_address.h
@@ -21,7 +21,7 @@
// Get the MAC address of a network interface.
// If there's more than one, prefer eth0
// Note: the code on Mac OS X requires the following linkage flags
-// -framework CoreFoundation -lIOKit
+// -framework CoreFoundation -lIOKit
//
int get_mac_address(char* address);
diff --git a/client/main.cpp b/client/main.cpp
index 38c9edc..9cf60bc 100644
--- a/client/main.cpp
+++ b/client/main.cpp
@@ -101,11 +101,12 @@ void log_message_error(const char* msg) {
char evt_msg[2048];
char* time_string = time_to_string(dtime());
#ifdef _WIN32
+ char buf[1024];
snprintf(evt_msg, sizeof(evt_msg),
"%s %s\n"
"GLE: %s\n",
time_string, msg,
- windows_format_error_string(GetLastError(), evt_msg, (sizeof(evt_msg)-((int)strlen(msg)+7)))
+ windows_format_error_string(GetLastError(), buf, sizeof(buf))
);
#else
snprintf(evt_msg, sizeof(evt_msg),
@@ -178,12 +179,12 @@ static void init_core_client(int argc, char** argv) {
setbuf(stdout, 0);
setbuf(stderr, 0);
- config.defaults();
+ cc_config.defaults();
gstate.parse_cmdline(argc, argv);
gstate.now = dtime();
#ifdef _WIN32
- if (!config.allow_multiple_clients) {
+ if (!cc_config.allow_multiple_clients) {
chdir_to_data_dir();
}
#endif
@@ -282,7 +283,7 @@ static void do_gpu_detection(int argc, char** argv) {
static int initialize() {
int retval;
- if (!config.allow_multiple_clients) {
+ if (!cc_config.allow_multiple_clients) {
retval = wait_client_mutex(".", 10);
if (retval) {
log_message_error("Another instance of BOINC is running.");
@@ -371,7 +372,7 @@ int boinc_main_loop() {
break;
}
if (gstate.requested_exit) {
- if (config.abort_jobs_on_exit) {
+ if (cc_config.abort_jobs_on_exit) {
if (!gstate.in_abort_sequence) {
msg_printf(NULL, MSG_INFO,
"Exit requested; starting abort sequence"
@@ -379,7 +380,7 @@ int boinc_main_loop() {
gstate.start_abort_sequence();
}
} else {
- msg_printf(NULL, MSG_INFO, "Exit requested by user");
+ msg_printf(NULL, MSG_INFO, "Exiting");
break;
}
}
diff --git a/client/makefile_sim b/client/makefile_sim
index 6aee9dd..b259144 100644
--- a/client/makefile_sim
+++ b/client/makefile_sim
@@ -60,6 +60,7 @@ OBJS = \
../lib/msg_log.o \
../lib/network.o \
../lib/notice.o \
+ ../lib/opencl_boinc.o \
../lib/parse.o \
../lib/prefs.o \
../lib/proxy_info.o \
diff --git a/client/net_stats.cpp b/client/net_stats.cpp
index b83190b..a76869b 100644
--- a/client/net_stats.cpp
+++ b/client/net_stats.cpp
@@ -198,7 +198,7 @@ void NET_STATUS::got_http_error() {
// Don't spam the reference site when a project is down
if (need_physical_connection) return;
- if (config.dont_contact_ref_site) return;
+ if (cc_config.dont_contact_ref_site) return;
if (log_flags.network_status_debug) {
msg_printf(0, MSG_INFO,
@@ -217,10 +217,10 @@ void NET_STATUS::contact_reference_site() {
if (log_flags.network_status_debug) {
msg_printf(0, MSG_INFO,
"[network_status] need_phys_conn %d; trying %s",
- need_physical_connection, config.network_test_url.c_str()
+ need_physical_connection, cc_config.network_test_url.c_str()
);
}
- gstate.lookup_website_op.do_rpc(config.network_test_url);
+ gstate.lookup_website_op.do_rpc(cc_config.network_test_url);
need_to_contact_reference_site = false;
}
diff --git a/client/net_stats.h b/client/net_stats.h
index 299eef2..2388860 100644
--- a/client/net_stats.h
+++ b/client/net_stats.h
@@ -31,8 +31,6 @@ using std::deque;
#include "miofile.h"
-#define NEED_NETWORK_MSG _("BOINC can't access Internet - check network connection or proxy configuration.")
-
class FILE_XFER_SET;
class HTTP_OP_SET;
diff --git a/client/pers_file_xfer.cpp b/client/pers_file_xfer.cpp
index a2c3347..de10eb7 100644
--- a/client/pers_file_xfer.cpp
+++ b/client/pers_file_xfer.cpp
@@ -260,9 +260,6 @@ bool PERS_FILE_XFER::poll() {
// the project must not have a file_upload_handler.
// Treat this as a transient error.
//
- msg_printf(fip->project, MSG_INFO,
- "Project file upload handler is missing"
- );
transient_failure(fxp->file_xfer_retval);
} else {
permanent_failure(fxp->file_xfer_retval);
@@ -437,6 +434,9 @@ int PERS_FILE_XFER::write(MIOFILE& fout) {
last_bytes_xferred,
is_upload?1:0
);
+
+ // the following is for GUI RPCs
+ //
if (fxp) {
fout.printf(
" <file_xfer>\n"
diff --git a/client/project.cpp b/client/project.cpp
index 080332c..3eca55c 100644
--- a/client/project.cpp
+++ b/client/project.cpp
@@ -14,6 +14,9 @@
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+#ifdef _WIN32
+#include <boinc_win.h>
+#endif
#include <string.h>
@@ -837,7 +840,7 @@ bool PROJECT::waiting_until_min_rpc_time() {
}
void PROJECT::trim_statistics() {
- double cutoff = dday() - config.save_stats_days*86400;
+ double cutoff = dday() - cc_config.save_stats_days*86400;
// delete old stats; fill in the gaps if some days missing
//
while (!statistics.empty()) {
@@ -892,7 +895,7 @@ void PROJECT::check_no_rsc_apps() {
}
}
-// set no_X_apps for anonymous platform project
+// set no_rsc_apps[] for anonymous platform project
//
void PROJECT::check_no_apps() {
for (int i=0; i<coprocs.n_rsc; i++) {
@@ -905,3 +908,55 @@ void PROJECT::check_no_apps() {
no_rsc_apps[avp->gpu_usage.rsc_type] = false;
}
}
+
+// show a notice if we can't possibly get work from this project,
+// and there's something the user could do about it
+//
+void PROJECT::show_no_work_notice() {
+ bool show_ams = false, show_prefs=false, show_config = false;
+ bool user_action_possible = false;
+ for (int i=0; i<coprocs.n_rsc; i++) {
+ if (no_rsc_apps[i]) continue;
+ bool banned_by_user = no_rsc_pref[i] || no_rsc_config[i] || no_rsc_ams[i];
+ if (!banned_by_user) {
+ // work for this resource is possible; return
+ notices.remove_notices(this, REMOVE_NO_WORK_MSG);
+ return;
+ }
+ if (no_rsc_pref[i]) show_prefs = true;
+ if (no_rsc_config[i]) show_config = true;
+ if (no_rsc_ams[i]) show_ams = true;
+ user_action_possible = true;
+ }
+ if (!user_action_possible) {
+ // no work is possible because project has no apps for any resource
+ //
+ notices.remove_notices(this, REMOVE_NO_WORK_MSG);
+ return;
+ }
+
+ bool first = true;
+ string x;
+ x = NO_WORK_MSG;
+ x += " ";
+ x += _("To fix this, you can ");
+ if (show_prefs) {
+ first = false;
+ x += _("change Project Preferences on the project's web site");
+ }
+ if (show_config) {
+ if (!first) {
+ x += ", or ";
+ }
+ x += _("remove GPU exclusions in your cc_config.xml file");
+ first = false;
+ }
+ if (show_ams) {
+ if (!first) {
+ x += ", or ";
+ }
+ x += _("change your settings at your account manager web site");
+ }
+ x += ".";
+ msg_printf(this, MSG_USER_ALERT, "%s", x.c_str());
+}
diff --git a/client/project.h b/client/project.h
index 0020226..43258f4 100644
--- a/client/project.h
+++ b/client/project.h
@@ -107,7 +107,7 @@ struct PROJECT : PROJ_AM {
double host_create_time;
double ams_resource_share;
// resource share according to AMS; overrides project
- // -1 means not specified by AMS
+ // -1 means not specified by AMS, or not using an AMS
// stuff related to scheduler RPCs and master fetch
//
@@ -305,6 +305,7 @@ struct PROJECT : PROJ_AM {
int write_state(MIOFILE&, bool gui_rpc=false);
const char* project_dir();
const char* project_dir_absolute();
+ void show_no_work_notice();
// statistic of the last x days
std::vector<DAILY_STATS> statistics;
@@ -322,10 +323,16 @@ struct PROJECT : PROJ_AM {
// clear AMS-related fields
inline void detach_ams() {
attached_via_acct_mgr = false;
- ams_resource_share = -1;
for (int i=0; i<MAX_RSC; i++) {
no_rsc_ams[i] = false;
}
+
+ ams_resource_share = -1;
+
+ // parse the account file to get right resource share
+ // in case AMS had set it
+ //
+ parse_account_file();
}
#ifdef SIM
diff --git a/client/result.cpp b/client/result.cpp
index e39335d..0f223ad 100644
--- a/client/result.cpp
+++ b/client/result.cpp
@@ -54,6 +54,11 @@ void RESULT::clear() {
got_server_ack = false;
final_cpu_time = 0;
final_elapsed_time = 0;
+ final_peak_working_set_size = 0;
+ final_peak_swap_size = 0;
+ final_peak_disk_usage = 0;
+ final_bytes_sent = 0;
+ final_bytes_received = 0;
#ifdef SIM
peak_flop_count = 0;
#endif
@@ -145,6 +150,11 @@ int RESULT::parse_state(XML_PARSER& xp) {
}
if (xp.parse_double("final_cpu_time", final_cpu_time)) continue;
if (xp.parse_double("final_elapsed_time", final_elapsed_time)) continue;
+ if (xp.parse_double("final_peak_working_set_size", final_peak_working_set_size)) continue;
+ if (xp.parse_double("final_peak_swap_size", final_peak_swap_size)) continue;
+ if (xp.parse_double("final_peak_disk_usage", final_peak_disk_usage)) continue;
+ if (xp.parse_double("final_bytes_sent", final_bytes_sent)) continue;
+ if (xp.parse_double("final_bytes_received", final_bytes_received)) continue;
if (xp.parse_int("exit_status", exit_status)) continue;
if (xp.parse_bool("got_server_ack", got_server_ack)) continue;
if (xp.parse_bool("ready_to_report", ready_to_report)) continue;
@@ -208,6 +218,36 @@ int RESULT::write(MIOFILE& out, bool to_server) {
if (intops_cumulative) {
out.printf(" <intops_cumulative>%f</intops_cumulative>\n", intops_cumulative);
}
+ if (final_peak_working_set_size) {
+ out.printf(
+ " <final_peak_working_set_size>%.0f</final_peak_working_set_size>\n",
+ final_peak_working_set_size
+ );
+ }
+ if (final_peak_swap_size) {
+ out.printf(
+ " <final_peak_swap_size>%.0f</final_peak_swap_size>\n",
+ final_peak_swap_size
+ );
+ }
+ if (final_peak_disk_usage) {
+ out.printf(
+ " <final_peak_disk_usage>%.0f</final_peak_disk_usage>\n",
+ final_peak_disk_usage
+ );
+ }
+ if (final_bytes_sent) {
+ out.printf(
+ " <final_bytes_sent>%.0f</final_bytes_sent>\n",
+ final_bytes_sent
+ );
+ }
+ if (final_bytes_received) {
+ out.printf(
+ " <final_bytes_received>%.0f</final_bytes_received>\n",
+ final_bytes_received
+ );
+ }
if (to_server) {
out.printf(
" <app_version_num>%d</app_version_num>\n",
@@ -328,16 +368,16 @@ int RESULT::write_gui(MIOFILE& out) {
if (avp->gpu_usage.rsc_type) {
if (avp->gpu_usage.usage == 1) {
sprintf(resources,
- "%.3g CPUs + 1 %s GPU",
+ "%.3g CPUs + 1 %s",
avp->avg_ncpus,
- rsc_name(avp->gpu_usage.rsc_type)
+ rsc_name_long(avp->gpu_usage.rsc_type)
);
} else {
sprintf(resources,
- "%.3g CPUs + %.3g %s GPUs",
+ "%.3g CPUs + %.3g %ss",
avp->avg_ncpus,
avp->gpu_usage.usage,
- rsc_name(avp->gpu_usage.rsc_type)
+ rsc_name_long(avp->gpu_usage.rsc_type)
);
}
} else if (avp->missing_coproc) {
diff --git a/client/result.h b/client/result.h
index f4b851f..0a9c91d 100644
--- a/client/result.h
+++ b/client/result.h
@@ -40,6 +40,11 @@ struct RESULT {
// we've received the ack for this result from the server
double final_cpu_time;
double final_elapsed_time;
+ double final_peak_working_set_size;
+ double final_peak_swap_size;
+ double final_peak_disk_usage;
+ double final_bytes_sent;
+ double final_bytes_received;
#ifdef SIM
double peak_flop_count;
double sim_flops_left;
diff --git a/client/rr_sim.cpp b/client/rr_sim.cpp
index 0d54595..484d284 100644
--- a/client/rr_sim.cpp
+++ b/client/rr_sim.cpp
@@ -53,7 +53,7 @@ inline void rsc_string(RESULT* rp, char* buf) {
if (avp->gpu_usage.rsc_type) {
sprintf(buf, "%.2f CPU + %.2f %s",
avp->avg_ncpus, avp->gpu_usage.usage,
- rsc_name(avp->gpu_usage.rsc_type)
+ rsc_name_long(avp->gpu_usage.rsc_type)
);
} else {
sprintf(buf, "%.2f CPU", avp->avg_ncpus);
@@ -156,7 +156,7 @@ void print_deadline_misses() {
msg_printf(p, MSG_INFO,
"[rr_sim] Project has %d projected %s deadline misses",
p->rsc_pwf[j].deadlines_missed,
- rsc_name(j)
+ rsc_name_long(j)
);
}
}
@@ -510,7 +510,7 @@ void RR_SIM::simulate() {
sim_now+delta_t,
sim_now,
x,
- config.rec_half_life,
+ cc_config.rec_half_life,
p->pwf.rec_temp,
dtemp
);
diff --git a/client/scheduler_op.cpp b/client/scheduler_op.cpp
index 24f6fa6..6a05cfa 100644
--- a/client/scheduler_op.cpp
+++ b/client/scheduler_op.cpp
@@ -128,7 +128,7 @@ int SCHEDULER_OP::init_op_project(PROJECT* p, int r) {
// Now's a good time to check for new BOINC versions
// and project list
//
- if (!config.no_info_fetch) {
+ if (!cc_config.no_info_fetch) {
gstate.new_version_check();
gstate.all_projects_list_check();
}
@@ -216,7 +216,7 @@ static void request_string(char* buf) {
for (int i=0; i<coprocs.n_rsc; i++) {
if (rsc_work_fetch[i].req_secs) {
if (!first) strcat(buf, " and ");
- strcat(buf, rsc_name(i));
+ strcat(buf, rsc_name_long(i));
first = false;
}
}
@@ -228,7 +228,7 @@ static void request_string(char* buf) {
//
int SCHEDULER_OP::start_rpc(PROJECT* p) {
int retval;
- char request_file[1024], reply_file[1024], buf[256];
+ char request_file[1024], reply_file[1024], buf[1024];
safe_strcpy(scheduler_url, p->get_scheduler_url(url_index, url_random));
if (log_flags.sched_ops) {
@@ -249,8 +249,7 @@ int SCHEDULER_OP::start_rpc(PROJECT* p) {
} else {
if (p->pwf.cant_fetch_work_reason) {
msg_printf(p, MSG_INFO,
- "Not requesting tasks: %s",
- cant_fetch_work_string(p->pwf.cant_fetch_work_reason)
+ "Not requesting tasks: %s", cant_fetch_work_string(p, buf)
);
} else {
msg_printf(p, MSG_INFO, "Not requesting tasks");
@@ -261,7 +260,7 @@ int SCHEDULER_OP::start_rpc(PROJECT* p) {
for (int i=0; i<coprocs.n_rsc; i++) {
msg_printf(p, MSG_INFO,
"[sched_op] %s work request: %.2f seconds; %.2f devices",
- rsc_name(i),
+ rsc_name_long(i),
rsc_work_fetch[i].req_secs,
rsc_work_fetch[i].req_instances
);
diff --git a/client/sim_util.cpp b/client/sim_util.cpp
index ec15ee2..bd8c323 100644
--- a/client/sim_util.cpp
+++ b/client/sim_util.cpp
@@ -101,7 +101,6 @@ void show_message(PROJ_AM *p, char* msg, int priority, bool, const char*) {
}
APP_CLIENT_SHM::APP_CLIENT_SHM() {}
-GRAPHICS_MSG::GRAPHICS_MSG() {}
int FILE_INFO::verify_file(bool, bool, bool) {return 0;}
diff --git a/client/sysmon_win.cpp b/client/sysmon_win.cpp
index b1fc763..20a65bb 100644
--- a/client/sysmon_win.cpp
+++ b/client/sysmon_win.cpp
@@ -16,6 +16,7 @@
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
#include "boinc_win.h"
+
#include "diagnostics.h"
#include "error_numbers.h"
#include "filesys.h"
@@ -43,6 +44,46 @@ static HWND g_hWndWindowsMonitorSystemPower = NULL;
static HANDLE g_hWindowsMonitorSystemProxyThread = NULL;
+// return true if running under remote desktop
+// (in which case CUDA and Stream apps don't work)
+//
+bool is_remote_desktop() {
+ LPTSTR pBuf = NULL;
+ DWORD dwLength;
+ USHORT usProtocol=0, usConnectionState=0;
+
+ if (WTSQuerySessionInformation(
+ WTS_CURRENT_SERVER_HANDLE,
+ WTS_CURRENT_SESSION,
+ WTSClientProtocolType,
+ &pBuf,
+ &dwLength
+ )) {
+ usProtocol = *(USHORT*)pBuf;
+ WTSFreeMemory(pBuf);
+ }
+
+ if (WTSQuerySessionInformation(
+ WTS_CURRENT_SERVER_HANDLE,
+ WTS_CURRENT_SESSION,
+ WTSConnectState,
+ &pBuf,
+ &dwLength
+ )) {
+ usConnectionState = *(USHORT*)pBuf;
+ WTSFreeMemory(pBuf);
+ }
+
+ // RDP Session implies Remote Desktop
+ if (usProtocol == 2) return true;
+
+ // Fast User Switching keeps the protocol set to the console but changes
+ // the connected state to disconnected.
+ if ((usProtocol == 0) && (usConnectionState == 4)) return true;
+
+ return false;
+}
+
// The following 3 functions are called in a separate thread,
// so we can't do anything directly.
// Set flags telling the main thread what to do.
@@ -188,7 +229,7 @@ static DWORD WINAPI WindowsMonitorSystemPowerThread( LPVOID ) {
// Initialize diagnostics framework for this thread
//
- diagnostics_thread_init(BOINC_DIAG_DEFAULTS);
+ diagnostics_thread_init();
wc.style = CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)WindowsMonitorSystemPowerWndProc;
@@ -237,26 +278,6 @@ static void windows_detect_autoproxy_settings() {
post_sysmon_msg("[proxy] automatic proxy check in progress");
}
- HMODULE hModWinHttp = LoadLibrary("winhttp.dll");
- if (!hModWinHttp) {
- return;
- }
- pfnWinHttpOpen pWinHttpOpen =
- (pfnWinHttpOpen)GetProcAddress(hModWinHttp, "WinHttpOpen");
- if (!pWinHttpOpen) {
- return;
- }
- pfnWinHttpCloseHandle pWinHttpCloseHandle =
- (pfnWinHttpCloseHandle)(GetProcAddress(hModWinHttp, "WinHttpCloseHandle"));
- if (!pWinHttpCloseHandle) {
- return;
- }
- pfnWinHttpGetProxyForUrl pWinHttpGetProxyForUrl =
- (pfnWinHttpGetProxyForUrl)(GetProcAddress(hModWinHttp, "WinHttpGetProxyForUrl"));
- if (!pWinHttpGetProxyForUrl) {
- return;
- }
-
HINTERNET hWinHttp = NULL;
WINHTTP_AUTOPROXY_OPTIONS autoproxy_options;
WINHTTP_PROXY_INFO proxy_info;
@@ -274,9 +295,9 @@ static void windows_detect_autoproxy_settings() {
WINHTTP_AUTO_DETECT_TYPE_DHCP | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
autoproxy_options.fAutoLogonIfChallenged = TRUE;
- network_test_url = A2W(config.network_test_url).c_str();
+ network_test_url = A2W(cc_config.network_test_url).c_str();
- hWinHttp = pWinHttpOpen(
+ hWinHttp = WinHttpOpen(
L"BOINC client",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
@@ -287,7 +308,7 @@ static void windows_detect_autoproxy_settings() {
char msg[1024], buf[1024];
strcpy(msg, "[proxy] ");
- if (pWinHttpGetProxyForUrl(hWinHttp, network_test_url.c_str(), &autoproxy_options, &proxy_info)) {
+ if (WinHttpGetProxyForUrl(hWinHttp, network_test_url.c_str(), &autoproxy_options, &proxy_info)) {
// Apparently there are some conditions where WinHttpGetProxyForUrl can return
// success but where proxy_info.lpszProxy is null. Maybe related to UPNP?
@@ -355,8 +376,7 @@ static void windows_detect_autoproxy_settings() {
strcat(msg, "no automatic proxy detected");
}
}
- if (hWinHttp) pWinHttpCloseHandle(hWinHttp);
- FreeLibrary(hModWinHttp);
+ if (hWinHttp) WinHttpCloseHandle(hWinHttp);
if (log_flags.proxy_debug) {
post_sysmon_msg(msg);
}
@@ -366,7 +386,7 @@ static DWORD WINAPI WindowsMonitorSystemProxyThread( LPVOID ) {
// Initialize diagnostics framework for this thread
//
- diagnostics_thread_init(BOINC_DIAG_DEFAULTS);
+ diagnostics_thread_init();
// notify the main client thread that detecting proxies is
// supported.
diff --git a/client/sysmon_win.h b/client/sysmon_win.h
index e49bd3b..0a29454 100644
--- a/client/sysmon_win.h
+++ b/client/sysmon_win.h
@@ -22,6 +22,8 @@
extern "C" {
#endif
+extern bool is_remote_desktop();
+
extern int initialize_system_monitor(int argc, char** argv);
extern int initialize_service_dispatcher(int argc, char** argv);
extern int cleanup_system_monitor();
@@ -49,70 +51,6 @@ extern VOID LogEventErrorMessage(LPTSTR lpszMsg);
extern VOID LogEventWarningMessage(LPTSTR lpszMsg);
extern VOID LogEventInfoMessage(LPTSTR lpszMsg);
-
-// Originally from WinHttp.h
-// Which is not included in the VS 2005 platform SDK
-
-typedef LPVOID HINTERNET;
-
-typedef struct {
- DWORD dwAccessType; // see WINHTTP_ACCESS_* types below
- LPWSTR lpszProxy; // proxy server list
- LPWSTR lpszProxyBypass; // proxy bypass list
-} WINHTTP_PROXY_INFO, * LPWINHTTP_PROXY_INFO;
-
-typedef struct {
- DWORD dwFlags;
- DWORD dwAutoDetectFlags;
- LPCWSTR lpszAutoConfigUrl;
- LPVOID lpvReserved;
- DWORD dwReserved;
- BOOL fAutoLogonIfChallenged;
-} WINHTTP_AUTOPROXY_OPTIONS;
-
-typedef struct {
- BOOL fAutoDetect;
- LPWSTR lpszAutoConfigUrl;
- LPWSTR lpszProxy;
- LPWSTR lpszProxyBypass;
-} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;
-
-typedef HINTERNET (WINAPI * pfnWinHttpOpen)
-(
- IN LPCWSTR pwszUserAgent,
- IN DWORD dwAccessType,
- IN LPCWSTR pwszProxyName OPTIONAL,
- IN LPCWSTR pwszProxyBypass OPTIONAL,
- IN DWORD dwFlags
-);
-typedef BOOL (STDAPICALLTYPE * pfnWinHttpCloseHandle)
-(
- IN HINTERNET hInternet
-);
-typedef BOOL (STDAPICALLTYPE * pfnWinHttpGetProxyForUrl)
-(
- IN HINTERNET hSession,
- IN LPCWSTR lpcwszUrl,
- IN WINHTTP_AUTOPROXY_OPTIONS * pAutoProxyOptions,
- OUT WINHTTP_PROXY_INFO * pProxyInfo
-);
-typedef BOOL (STDAPICALLTYPE * pfnWinHttpGetIEProxyConfig)
-(
- IN OUT WINHTTP_CURRENT_USER_IE_PROXY_CONFIG * pProxyConfig
-);
-
-#define WINHTTP_AUTOPROXY_AUTO_DETECT 0x00000001
-#define WINHTTP_AUTOPROXY_CONFIG_URL 0x00000002
-#define WINHTTP_AUTOPROXY_RUN_INPROCESS 0x00010000
-#define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY 0x00020000
-#define WINHTTP_AUTO_DETECT_TYPE_DHCP 0x00000001
-#define WINHTTP_AUTO_DETECT_TYPE_DNS_A 0x00000002
-#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY 0
-#define WINHTTP_ACCESS_TYPE_NO_PROXY 1
-#define WINHTTP_ACCESS_TYPE_NAMED_PROXY 3
-#define WINHTTP_NO_PROXY_NAME NULL
-#define WINHTTP_NO_PROXY_BYPASS NULL
-
#ifdef __cplusplus
}
#endif
diff --git a/client/thread.cpp b/client/thread.cpp
index 9a21462..a8fc096 100644
--- a/client/thread.cpp
+++ b/client/thread.cpp
@@ -15,6 +15,10 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+#ifdef _WIN32
+#include <boinc_win.h>
+#endif
+
#include "thread.h"
#ifdef _WIN32
diff --git a/client/whetstone.h b/client/whetstone.h
deleted file mode 100644
index 1970f28..0000000
--- a/client/whetstone.h
+++ /dev/null
@@ -1,20 +0,0 @@
-
-// CMC here
-// separate different compilations of whetstone.cpp which will utilize
-// various ARM fp features ie neon, vfp, or "normal"
-#ifdef ANDROID
-#ifdef ANDROID_NEON
- // add CXXFLAGS/CFLAGS for gcc: -DANDROID_NEON -mfloat-abi=softfp -mfpu=neon
- #include <arm_neon.h>
-#endif // ANDROID_NEON
-
-namespace android_neon {
- int whetstone(double& flops, double& cpu_time, double min_cpu_time);
-}
-
-namespace android_vfp {
- int whetstone(double& flops, double& cpu_time, double min_cpu_time);
-}
-
-#endif // ANDROID
-
diff --git a/client/work_fetch.cpp b/client/work_fetch.cpp
index 7012113..31ce772 100644
--- a/client/work_fetch.cpp
+++ b/client/work_fetch.cpp
@@ -44,12 +44,12 @@ using std::vector;
RSC_WORK_FETCH rsc_work_fetch[MAX_RSC];
WORK_FETCH work_fetch;
-static inline bool dont_fetch(PROJECT* p, int rsc_type) {
- if (p->no_rsc_pref[rsc_type]) return true;
- if (p->no_rsc_config[rsc_type]) return true;
- if (p->no_rsc_apps[rsc_type]) return true;
- if (p->no_rsc_ams[rsc_type]) return true;
- return false;
+static inline int dont_fetch(PROJECT* p, int rsc_type) {
+ if (p->no_rsc_pref[rsc_type]) return DONT_FETCH_PREFS;
+ if (p->no_rsc_config[rsc_type]) return DONT_FETCH_CONFIG;
+ if (p->no_rsc_apps[rsc_type]) return DONT_FETCH_NO_APPS;
+ if (p->no_rsc_ams[rsc_type]) return DONT_FETCH_AMS;
+ return 0;
}
// if the configuration file disallows the use of a GPU type
@@ -65,8 +65,8 @@ void set_no_rsc_config() {
for (int k=0; k<c.count; k++) {
allowed[c.device_nums[k]] = true;
}
- for (unsigned int k=0; k<config.exclude_gpus.size(); k++) {
- EXCLUDE_GPU& e = config.exclude_gpus[k];
+ for (unsigned int k=0; k<cc_config.exclude_gpus.size(); k++) {
+ EXCLUDE_GPU& e = cc_config.exclude_gpus[k];
if (strcmp(e.url.c_str(), p.master_url)) continue;
if (!e.type.empty() && strcmp(e.type.c_str(), c.type)) continue;
if (!e.appname.empty()) continue;
@@ -199,7 +199,7 @@ void RSC_WORK_FETCH::set_request(PROJECT* p) {
req_secs = 1;
return;
}
- if (config.fetch_minimal_work) {
+ if (cc_config.fetch_minimal_work) {
req_instances = ninstances;
req_secs = 1;
return;
@@ -229,8 +229,8 @@ void RSC_WORK_FETCH::set_request(PROJECT* p) {
if (log_flags.work_fetch_debug) {
msg_printf(p, MSG_INFO,
- "[work_fetch] set_request() for %s: ninst %d nused_total %f nidle_now %f fetch share %f req_inst %f req_secs %f",
- rsc_name(rsc_type), ninstances, w.nused_total, nidle_now,
+ "[work_fetch] set_request() for %s: ninst %d nused_total %.2f nidle_now %.2f fetch share %.2f req_inst %.2f req_secs %.2f",
+ rsc_name_long(rsc_type), ninstances, w.nused_total, nidle_now,
w.fetchable_share, req_instances, req_secs
);
}
@@ -256,7 +256,7 @@ void RSC_WORK_FETCH::set_request_excluded(PROJECT* p) {
}
DEBUG(msg_printf(p, MSG_INFO, "set_request_excluded() %d %d %d", sim_excluded_instances, pwf.non_excluded_instances, n));
req_instances = n;
- if (p->resource_share == 0 || config.fetch_minimal_work) {
+ if (p->resource_share == 0 || cc_config.fetch_minimal_work) {
req_secs = 1;
} else {
req_secs = n*gstate.work_buf_total();
@@ -370,7 +370,7 @@ void RSC_WORK_FETCH::supplement(PROJECT* pp) {
if (log_flags.work_fetch_debug) {
msg_printf(pp, MSG_INFO,
"[work_fetch]: not requesting work for %s: %s has higher priority",
- rsc_name(rsc_type), p->get_project_name()
+ rsc_name_long(rsc_type), p->get_project_name()
);
}
return;
@@ -427,16 +427,13 @@ void WORK_FETCH::print_state() {
msg_printf(0, MSG_INFO, "[work_fetch] --- project states ---");
for (unsigned int i=0; i<gstate.projects.size(); i++) {
PROJECT* p = gstate.projects[i];
- char buf[256];
+ char buf[1024], buf2[1024];
if (p->pwf.cant_fetch_work_reason) {
- sprintf(buf, "can't req work: %s",
- cant_fetch_work_string(p->pwf.cant_fetch_work_reason)
- );
+ sprintf(buf, "can't req work: %s", cant_fetch_work_string(p, buf2));
} else {
strcpy(buf, "can req work");
}
if (p->min_rpc_time > gstate.now) {
- char buf2[256];
sprintf(buf2, " (backoff: %.2f sec)", p->min_rpc_time - gstate.now);
strcat(buf, buf2);
}
@@ -447,7 +444,7 @@ void WORK_FETCH::print_state() {
);
}
for (int i=0; i<coprocs.n_rsc; i++) {
- rsc_work_fetch[i].print_state(rsc_name(i));
+ rsc_work_fetch[i].print_state(rsc_name_long(i));
}
msg_printf(0, MSG_INFO, "[work_fetch] ------- end work fetch state -------");
}
@@ -472,7 +469,7 @@ bool WORK_FETCH::requested_work() {
void WORK_FETCH::piggyback_work_request(PROJECT* p) {
DEBUG(msg_printf(p, MSG_INFO, "piggyback_work_request()");)
clear_request();
- if (config.fetch_minimal_work && gstate.had_or_requested_work) return;
+ if (cc_config.fetch_minimal_work && gstate.had_or_requested_work) return;
if (p->non_cpu_intensive) {
if (!has_a_job_in_progress(p) && !p->dont_request_more_work) {
rsc_work_fetch[0].req_secs = 1;
@@ -495,7 +492,7 @@ void WORK_FETCH::piggyback_work_request(PROJECT* p) {
// able to fetch it
//
bool check_higher_priority_projects = true;
- if (p->sched_rpc_pending && config.fetch_on_update) {
+ if (p->sched_rpc_pending && cc_config.fetch_on_update) {
check_higher_priority_projects = false;
}
@@ -505,11 +502,15 @@ void WORK_FETCH::piggyback_work_request(PROJECT* p) {
// If not, and the resource needs topping off, do so
//
for (int i=0; i<coprocs.n_rsc; i++) {
- DEBUG(msg_printf(p, MSG_INFO, "piggyback: resource %s", rsc_name(i));)
- if (i && !gpus_usable) continue;
+ DEBUG(msg_printf(p, MSG_INFO, "piggyback: resource %s", rsc_name_long(i));)
RSC_WORK_FETCH& rwf = rsc_work_fetch[i];
- if (!rwf.can_fetch(p)) {
- DEBUG(msg_printf(p, MSG_INFO, "piggyback: can't fetch %s", rsc_name(i));)
+ if (i && !gpus_usable) {
+ rwf.dont_fetch_reason = DONT_FETCH_GPUS_NOT_USABLE;
+ continue;
+ }
+ rwf.dont_fetch_reason = rwf.cant_fetch(p);
+ if (rwf.dont_fetch_reason) {
+ DEBUG(msg_printf(p, MSG_INFO, "piggyback: can't fetch %s", rsc_name_long(i));)
continue;
}
bool buffer_low = (rwf.saturated_time < gstate.work_buf_total());
@@ -518,7 +519,8 @@ void WORK_FETCH::piggyback_work_request(PROJECT* p) {
need_work = true;
}
if (!need_work) {
- DEBUG(msg_printf(p, MSG_INFO, "piggyback: don't need %s", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "piggyback: don't need %s", rsc_name_long(i));)
+ rwf.dont_fetch_reason = DONT_FETCH_BUFFER_FULL;
continue;
}
if (check_higher_priority_projects) {
@@ -526,18 +528,22 @@ void WORK_FETCH::piggyback_work_request(PROJECT* p) {
for (unsigned int j=0; j<gstate.projects.size(); j++) {
p2 = gstate.projects[j];
if (p2 == p) break;
+ if (p2->sched_priority == p->sched_priority) continue;
if (p2->pwf.cant_fetch_work_reason) {
DEBUG(msg_printf(p, MSG_INFO, "piggyback: %s can't fetch work", p2->project_name);)
continue;
}
- if (rwf.can_fetch(p2) && !rwf.backed_off(p2)) {
+ if (!rwf.cant_fetch(p2) && !rwf.backed_off(p2)) {
DEBUG(msg_printf(p, MSG_INFO, "piggyback: better proj %s", p2->project_name);)
break;
}
}
- if (p != p2) continue;
+ if (p != p2) {
+ rwf.dont_fetch_reason = DONT_FETCH_NOT_HIGHEST_PRIO;
+ continue;
+ }
}
- DEBUG(msg_printf(p, MSG_INFO, "piggyback: requesting %s", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "piggyback: requesting %s", rsc_name_long(i));)
if (buffer_low) {
rwf.set_request(p);
} else {
@@ -582,13 +588,14 @@ bool RSC_WORK_FETCH::backed_off(PROJECT* p) {
// a variety of checks for whether we should ask this project
// for work of this type
//
-bool RSC_WORK_FETCH::can_fetch(PROJECT *p) {
+int RSC_WORK_FETCH::cant_fetch(PROJECT *p) {
// see whether work fetch for this resource is banned
// by prefs, config, project, or acct mgr
//
- if (dont_fetch(p, rsc_type)) {
+ int reason = dont_fetch(p, rsc_type);
+ if (reason) {
DEBUG(msg_printf(p, MSG_INFO, "skip: dont_fetch");)
- return false;
+ return reason;
}
RSC_PROJECT_WORK_FETCH& rpwf = project_state(p);
@@ -598,7 +605,7 @@ bool RSC_WORK_FETCH::can_fetch(PROJECT *p) {
//
if (p->resource_share == 0 && nidle_now == 0) {
DEBUG(msg_printf(p, MSG_INFO, "skip: zero share");)
- return false;
+ return DONT_FETCH_ZERO_SHARE;
}
// if project has excluded GPUs of this type,
@@ -622,15 +629,15 @@ bool RSC_WORK_FETCH::can_fetch(PROJECT *p) {
&& rpwf.queue_est > (gstate.work_buf_min() * n_not_excluded)/ninstances
) {
DEBUG(msg_printf(p, MSG_INFO, "skip: too much work");)
- return false;
+ return DONT_FETCH_BUFFER_FULL;
}
}
if (rpwf.anon_skip) {
DEBUG(msg_printf(p, MSG_INFO, "skip: anon");)
- return false;
+ return DONT_FETCH_NO_APPS;
}
- return true;
+ return 0;
}
// return true if there is exclusion starvation
@@ -732,22 +739,22 @@ PROJECT* WORK_FETCH::choose_project() {
for (int i=0; i<coprocs.n_rsc; i++) {
if (i && !gpus_usable) continue;
RSC_WORK_FETCH& rwf = rsc_work_fetch[i];
- if (rwf.can_fetch(p) && !rwf.backed_off(p)) {
+ if (!rwf.cant_fetch(p) && !rwf.backed_off(p)) {
if (!rwf.found_project) {
rwf.found_project = p;
}
- DEBUG(msg_printf(p, MSG_INFO, "can fetch %s", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "can fetch %s", rsc_name_long(i));)
} else {
- DEBUG(msg_printf(p, MSG_INFO, "can't fetch %s", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "can't fetch %s", rsc_name_long(i));)
continue;
}
if (rwf.saturated_time < gstate.work_buf_min()) {
- DEBUG(msg_printf(p, MSG_INFO, "%s needs work - buffer low", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "%s needs work - buffer low", rsc_name_long(i));)
rsc_index = i;
break;
}
if (rwf.has_exclusions && rwf.uses_starved_excluded_instances(p)) {
- DEBUG(msg_printf(p, MSG_INFO, "%s needs work - excluded instance starved", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "%s needs work - excluded instance starved", rsc_name_long(i));)
rsc_index = i;
break;
}
@@ -766,12 +773,12 @@ PROJECT* WORK_FETCH::choose_project() {
if (i && !gpus_usable) continue;
RSC_WORK_FETCH& rwf = rsc_work_fetch[i];
bool buffer_low;
- DEBUG(msg_printf(p, MSG_INFO, "checking %s", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "checking %s", rsc_name_long(i));)
if (i == rsc_index) {
buffer_low = (rwf.saturated_time < gstate.work_buf_min());
} else {
if (rwf.found_project && rwf.found_project != p) {
- DEBUG(msg_printf(p, MSG_INFO, "%s not high prio proj", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "%s not high prio proj", rsc_name_long(i));)
continue;
}
buffer_low = (rwf.saturated_time < gstate.work_buf_total());
@@ -780,20 +787,21 @@ PROJECT* WORK_FETCH::choose_project() {
need_work = true;
}
if (!need_work) {
- DEBUG(msg_printf(p, MSG_INFO, "%s don't need", rsc_name(i));)
+ DEBUG(msg_printf(p, MSG_INFO, "%s don't need", rsc_name_long(i));)
continue;
}
- if (!rwf.can_fetch(p)) {
- DEBUG(msg_printf(p, MSG_INFO, "%s can't fetch", rsc_name(i));)
+ int reason = rwf.cant_fetch(p);
+ if (reason) {
+ DEBUG(msg_printf(p, MSG_INFO, "%s can't fetch", rsc_name_long(i));)
continue;
}
}
if (buffer_low) {
rwf.set_request(p);
- DEBUG(msg_printf(p, MSG_INFO, "%s set_request: %f", rsc_name(i), rwf.req_secs);)
+ DEBUG(msg_printf(p, MSG_INFO, "%s set_request: %f", rsc_name_long(i), rwf.req_secs);)
} else {
rwf.set_request_excluded(p);
- DEBUG(msg_printf(p, MSG_INFO, "%s set_request_excluded: %f", rsc_name(i), rwf.req_secs);)
+ DEBUG(msg_printf(p, MSG_INFO, "%s set_request_excluded: %f", rsc_name_long(i), rwf.req_secs);)
}
if (rwf.req_secs > 0) {
any_request = true;
@@ -867,7 +875,7 @@ void WORK_FETCH::request_string(char* buf) {
);
for (int i=1; i<coprocs.n_rsc; i++) {
sprintf(buf2, " %s (%.2f sec, %.2f inst)",
- rsc_name(i), rsc_work_fetch[i].req_secs, rsc_work_fetch[i].req_instances
+ rsc_name_long(i), rsc_work_fetch[i].req_secs, rsc_work_fetch[i].req_instances
);
strcat(buf, buf2);
}
@@ -938,7 +946,7 @@ void WORK_FETCH::handle_reply(
case RPC_REASON_RESULTS_DUE:
case RPC_REASON_NEED_WORK:
case RPC_REASON_TRICKLE_UP:
- p->rsc_pwf[i].resource_backoff(p, rsc_name(i));
+ p->rsc_pwf[i].resource_backoff(p, rsc_name_long(i));
}
}
}
@@ -948,6 +956,7 @@ void WORK_FETCH::handle_reply(
p->rsc_pwf[i].clear_backoff();
}
}
+ p->pwf.request_if_idle_and_uploading = false;
}
// set up for initial RPC.
@@ -1043,10 +1052,18 @@ void CLIENT_STATE::compute_nuploading_results() {
double ACTIVE_TASK::est_dur() {
if (fraction_done >= 1) return elapsed_time;
double wu_est = result->estimated_runtime();
- if (fraction_done <= 0) return wu_est;
if (wu_est < elapsed_time) wu_est = elapsed_time;
+ if (fraction_done <= 0) return wu_est;
double frac_est = fraction_done_elapsed_time / fraction_done;
- double fd_weight = fraction_done * fraction_done;
+
+ // if app says fraction done is accurate, just use it
+ //
+ if (result->app->fraction_done_exact) return frac_est;
+
+ // weighting of dynamic estimate is the fraction done
+ // i.e. when fraction done is 0.5, weighting is 50/50
+ //
+ double fd_weight = fraction_done;
double wu_weight = 1 - fd_weight;
double x = fd_weight*frac_est + wu_weight*wu_est;
#if 0
@@ -1115,3 +1132,67 @@ void CLIENT_STATE::generate_new_host_cpid() {
}
}
}
+
+inline const char* dont_fetch_string(int reason) {
+ switch (reason) {
+ case DONT_FETCH_GPUS_NOT_USABLE: return "GPUs not usable";
+ case DONT_FETCH_PREFS: return "blocked by project preferences";
+ case DONT_FETCH_CONFIG: return "client configuration";
+ case DONT_FETCH_NO_APPS: return "no applications";
+ case DONT_FETCH_AMS: return "account manager prefs";
+ case DONT_FETCH_BACKOFF: return "backoff";
+ case DONT_FETCH_ZERO_SHARE: return "zero resource share";
+ case DONT_FETCH_BUFFER_FULL: return "job cache full";
+ case DONT_FETCH_NOT_HIGHEST_PRIO: return "not highest priority project";
+ }
+ return "";
+}
+
+const char* cant_fetch_work_string(PROJECT* p, char* buf) {
+ switch (p->pwf.cant_fetch_work_reason) {
+ case CANT_FETCH_WORK_NON_CPU_INTENSIVE:
+ return "non CPU intensive";
+ case CANT_FETCH_WORK_SUSPENDED_VIA_GUI:
+ return "suspended via Manager";
+ case CANT_FETCH_WORK_MASTER_URL_FETCH_PENDING:
+ return "master URL fetch pending";
+ case CANT_FETCH_WORK_MIN_RPC_TIME:
+ return "scheduler RPC backoff";
+ case CANT_FETCH_WORK_DONT_REQUEST_MORE_WORK:
+ return "\"no new tasks\" requested via Manager";
+ case CANT_FETCH_WORK_DOWNLOAD_STALLED:
+ return "some download is stalled";
+ case CANT_FETCH_WORK_RESULT_SUSPENDED:
+ return "some task is suspended via Manager";
+ case CANT_FETCH_WORK_TOO_MANY_UPLOADS:
+ return "too many uploads in progress";
+ case CANT_FETCH_WORK_NOT_HIGHEST_PRIORITY:
+ return "project is not highest priority";
+ case CANT_FETCH_WORK_TOO_MANY_RUNNABLE:
+ return "too many runnable tasks";
+ case CANT_FETCH_WORK_DONT_NEED:
+ if (coprocs.n_rsc == 1) {
+ sprintf(buf, "don't need (%s)",
+ dont_fetch_string(rsc_work_fetch[0].dont_fetch_reason)
+ );
+ } else {
+ string x;
+ x = "don't need (";
+ for (int i=0; i<coprocs.n_rsc; i++) {
+ char buf2[256];
+ sprintf(buf2, "%s: %s",
+ rsc_name_long(i),
+ dont_fetch_string(rsc_work_fetch[i].dont_fetch_reason)
+ );
+ x += buf2;
+ if (i < coprocs.n_rsc-1) {
+ x += "; ";
+ }
+ }
+ x += ")";
+ strcpy(buf, x.c_str());
+ }
+ return buf;
+ }
+ return "";
+}
diff --git a/client/work_fetch.h b/client/work_fetch.h
index 4390b9a..b58a771 100644
--- a/client/work_fetch.h
+++ b/client/work_fetch.h
@@ -41,33 +41,17 @@
#define CANT_FETCH_WORK_DONT_NEED 10
#define CANT_FETCH_WORK_TOO_MANY_RUNNABLE 11
-inline const char* cant_fetch_work_string(int reason) {
- switch (reason) {
- case CANT_FETCH_WORK_NON_CPU_INTENSIVE:
- return "non CPU intensive";
- case CANT_FETCH_WORK_SUSPENDED_VIA_GUI:
- return "suspended via Manager";
- case CANT_FETCH_WORK_MASTER_URL_FETCH_PENDING:
- return "master URL fetch pending";
- case CANT_FETCH_WORK_MIN_RPC_TIME:
- return "scheduler RPC backoff";
- case CANT_FETCH_WORK_DONT_REQUEST_MORE_WORK:
- return "\"no new tasks\" requested via Manager";
- case CANT_FETCH_WORK_DOWNLOAD_STALLED:
- return "some download is stalled";
- case CANT_FETCH_WORK_RESULT_SUSPENDED:
- return "some task is suspended via Manager";
- case CANT_FETCH_WORK_TOO_MANY_UPLOADS:
- return "too many uploads in progress";
- case CANT_FETCH_WORK_NOT_HIGHEST_PRIORITY:
- return "project is not highest priority";
- case CANT_FETCH_WORK_DONT_NEED:
- return "don't need";
- case CANT_FETCH_WORK_TOO_MANY_RUNNABLE:
- return "too many runnable tasks";
- }
- return "";
-}
+// in case of DONT_NEED, per-resource reason
+//
+#define DONT_FETCH_GPUS_NOT_USABLE 1
+#define DONT_FETCH_PREFS 2
+#define DONT_FETCH_CONFIG 3
+#define DONT_FETCH_NO_APPS 4
+#define DONT_FETCH_AMS 5
+#define DONT_FETCH_BACKOFF 6
+#define DONT_FETCH_ZERO_SHARE 7
+#define DONT_FETCH_BUFFER_FULL 8
+#define DONT_FETCH_NOT_HIGHEST_PRIO 9
struct PROJECT;
struct RESULT;
@@ -223,6 +207,7 @@ struct RSC_WORK_FETCH {
double deadline_missed_instances;
// instance count for jobs that miss deadline
BUSY_TIME_ESTIMATOR busy_time_estimator;
+ int dont_fetch_reason;
#ifdef SIM
double estimated_delay;
#endif
@@ -257,7 +242,7 @@ struct RSC_WORK_FETCH {
void set_request(PROJECT*);
void set_request_excluded(PROJECT*);
bool may_have_work(PROJECT*);
- bool can_fetch(PROJECT*);
+ int cant_fetch(PROJECT*);
bool backed_off(PROJECT*);
bool uses_starved_excluded_instances(PROJECT*);
RSC_WORK_FETCH() {
@@ -289,6 +274,10 @@ struct PROJECT_WORK_FETCH {
int cant_fetch_work_reason;
int compute_cant_fetch_work_reason(PROJECT*);
int n_runnable_jobs;
+ bool request_if_idle_and_uploading;
+ // Set when a job finishes.
+ // If we're uploading but a resource is idle, make a work request.
+ // If this succeeds, clear the flag.
PROJECT_WORK_FETCH() {
memset(this, 0, sizeof(*this));
}
@@ -335,5 +324,6 @@ extern void adjust_rec_sched(RESULT*);
extern void adjust_rec_work_fetch(RESULT*);
extern double total_peak_flops();
+extern const char* cant_fetch_work_string(PROJECT* p, char* buf);
#endif
diff --git a/clientctrl/boincsvcctrl.xml b/clientctrl/boincsvcctrl.xml
deleted file mode 100644
index eb477a0..0000000
--- a/clientctrl/boincsvcctrl.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- <description>BOINC Service Controller</description>
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
- </requestedPrivileges>
- </security>
- </trustInfo>
-</assembly>
diff --git a/clientgui/AccountInfoPage.cpp b/clientgui/AccountInfoPage.cpp
index 909a452..1a0ca51 100644
--- a/clientgui/AccountInfoPage.cpp
+++ b/clientgui/AccountInfoPage.cpp
@@ -162,7 +162,7 @@ void CAccountInfoPage::CreateControls()
m_pAccountInformationStaticCtrl->Create( itemWizardPage56, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer57->Add(m_pAccountInformationStaticCtrl, 0, wxALIGN_LEFT|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer64 = new wxFlexGridSizer(4, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer64 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer64->AddGrowableCol(1);
itemBoxSizer57->Add(itemFlexGridSizer64, 0, wxEXPAND|wxALL, 0);
@@ -529,7 +529,7 @@ void CAccountInfoPage::OnPageChanged( wxWizardExEvent& event ) {
_("If you have not yet registered with this account manager,\nplease do so before proceeding. Click on the link below\nto register or to retrieve a forgotten password." )
);
m_pAccountForgotPasswordCtrl->SetLabel(
- _("Account manager website")
+ _("Account manager web site")
);
m_pAccountForgotPasswordCtrl->SetURL(
wxString(pWA->m_AccountManagerInfoPage->GetProjectURL())
diff --git a/clientgui/AccountManagerInfoPage.cpp b/clientgui/AccountManagerInfoPage.cpp
index 1074f3b..4d88ddd 100644
--- a/clientgui/AccountManagerInfoPage.cpp
+++ b/clientgui/AccountManagerInfoPage.cpp
@@ -36,7 +36,11 @@
#include "BOINCBaseWizard.h"
#include "WizardAttach.h"
#include "AccountManagerInfoPage.h"
-#include "ProjectListCtrl.h"
+
+/*!
+ * CAcctMgrListItem type definition
+ */
+IMPLEMENT_DYNAMIC_CLASS( CAcctMgrListItem, wxObject )
/*!
@@ -54,8 +58,9 @@ BEGIN_EVENT_TABLE( CAccountManagerInfoPage, wxWizardPageEx )
////@begin CAccountManagerInfoPage event table entries
EVT_WIZARDEX_PAGE_CHANGED( -1, CAccountManagerInfoPage::OnPageChanged )
EVT_WIZARDEX_PAGE_CHANGING( -1, CAccountManagerInfoPage::OnPageChanging )
- EVT_PROJECTLIST_ITEM_CHANGE( CAccountManagerInfoPage::OnProjectItemChange )
- EVT_PROJECTLIST_ITEM_DISPLAY( CAccountManagerInfoPage::OnProjectItemDisplay )
+ EVT_LISTBOX( ID_PROJECTS, CAccountManagerInfoPage::OnProjectSelected )
+ EVT_BUTTON( ID_PROJECTWEBPAGECTRL, CAccountManagerInfoPage::OnProjectItemDisplay )
+ EVT_TEXT( ID_PROJECTURLCTRL, CAccountManagerInfoPage::OnURLChanged )
EVT_WIZARDEX_CANCEL( -1, CAccountManagerInfoPage::OnCancel )
////@end CAccountManagerInfoPage event table entries
@@ -108,6 +113,14 @@ bool CAccountManagerInfoPage::Create( CBOINCBaseWizard* parent )
void CAccountManagerInfoPage::CreateControls()
{
////@begin CAccountManagerInfoPage content construction
+#ifdef __WXMAC__
+#define LISTBOXWIDTH 225
+#define DESCRIPTIONSWIDTH 350
+#else
+#define LISTBOXWIDTH 150
+#define DESCRIPTIONSWIDTH 200
+#endif
+
CAccountManagerInfoPage* itemWizardPage23 = this;
wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL);
@@ -122,15 +135,30 @@ void CAccountManagerInfoPage::CreateControls()
m_pDescriptionStaticCtrl->Create( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer24->Add(m_pDescriptionStaticCtrl, 0, wxALIGN_LEFT|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(2, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(1, 2, 0, 0);
itemFlexGridSizer3->AddGrowableRow(0);
itemFlexGridSizer3->AddGrowableCol(0);
+ itemFlexGridSizer3->AddGrowableCol(1);
itemBoxSizer24->Add(itemFlexGridSizer3, 1, wxGROW|wxALL, 5);
- m_pProjectListCtrl = new CProjectListCtrl;
- m_pProjectListCtrl->Create( itemWizardPage23 );
+ wxArrayString m_pProjectsCtrlStrings;
+ m_pProjectListCtrl = new wxListBox( itemWizardPage23, ID_PROJECTS, wxDefaultPosition, wxSize(LISTBOXWIDTH, 175), m_pProjectsCtrlStrings, wxLB_SINGLE|wxLB_SORT );
itemFlexGridSizer3->Add(m_pProjectListCtrl, 0, wxGROW|wxRIGHT, 10);
+ wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(3, 1, 0, 0);
+ itemFlexGridSizer4->AddGrowableRow(1);
+ itemFlexGridSizer3->Add(itemFlexGridSizer4, 0, wxGROW|wxLEFT, 10);
+
+ m_pProjectDetailsStaticCtrl = new wxStaticText;
+ m_pProjectDetailsStaticCtrl->Create( itemWizardPage23, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ itemFlexGridSizer4->Add(m_pProjectDetailsStaticCtrl, 0, wxBOTTOM, 5);
+
+ m_pProjectDetailsDescriptionCtrl = new wxTextCtrl( itemWizardPage23, ID_PROJECTDESCRIPTION, wxT(""), wxDefaultPosition, wxSize(DESCRIPTIONSWIDTH, 100), wxTE_MULTILINE|wxTE_READONLY );
+ itemFlexGridSizer4->Add(m_pProjectDetailsDescriptionCtrl, 0, wxGROW);
+
+ m_pOpenWebSiteButton = new wxButton( this, ID_PROJECTWEBPAGECTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ itemFlexGridSizer4->Add(m_pOpenWebSiteButton, 0, wxALIGN_CENTER|wxTOP|wxBOTTOM, 5);
+
wxFlexGridSizer* itemFlexGridSizer11 = new wxFlexGridSizer(2, 1, 0, 0);
itemFlexGridSizer11->AddGrowableRow(0);
itemFlexGridSizer11->AddGrowableCol(0);
@@ -153,13 +181,6 @@ void CAccountManagerInfoPage::CreateControls()
// Set validators
m_pProjectUrlCtrl->SetValidator( CValidateURL( & m_strProjectURL ) );
-
-#ifdef __WXMAC__
- //Accessibility
- HIViewRef listView = (HIViewRef)m_pProjectListCtrl->GetHandle();
- HIObjectRef theObject = (HIObjectRef)HIViewGetSuperview(listView);
- HIObjectSetAccessibilityIgnored(theObject, true);
-#endif
////@end CAccountManagerInfoPage content construction
}
@@ -240,6 +261,9 @@ void CAccountManagerInfoPage::OnPageChanged( wxWizardExEvent& event ) {
wxASSERT(m_pTitleStaticCtrl);
wxASSERT(m_pDescriptionStaticCtrl);
+ wxASSERT(m_pProjectDetailsStaticCtrl);
+ wxASSERT(m_pProjectDetailsDescriptionCtrl);
+ wxASSERT(m_pOpenWebSiteButton);
wxASSERT(m_pProjectUrlStaticCtrl);
wxASSERT(m_pProjectUrlCtrl);
@@ -250,11 +274,22 @@ void CAccountManagerInfoPage::OnPageChanged( wxWizardExEvent& event ) {
m_pDescriptionStaticCtrl->SetLabel(
_("To choose an account manager, click its name or \ntype its URL below.")
);
+
+ m_pProjectDetailsStaticCtrl->SetLabel(
+ _("Account manager details:")
+ );
+
m_pProjectUrlStaticCtrl->SetLabel(
- _("Account Manager &URL:")
+ _("Account manager &URL:")
+ );
+
+ m_pOpenWebSiteButton->SetLabel(
+ _("Open web page")
);
- // Populate the virtual list control with project information
+ m_pOpenWebSiteButton->SetToolTip( _("Visit this account manager's web site"));
+
+ // Populate the list box with project information
//
if (!m_bAccountManagerListPopulated) {
pDoc->rpc.get_all_projects_list(pl);
@@ -267,22 +302,26 @@ void CAccountManagerInfoPage::OnPageChanged( wxWizardExEvent& event ) {
true
);
+ CAcctMgrListItem* pItem = new CAcctMgrListItem();
+
+ pItem->SetURL( pl.account_managers[i]->url.c_str() );
+ pItem->SetName( pl.account_managers[i]->name.c_str() );
+ pItem->SetImage( pl.account_managers[i]->image.c_str() );
+ pItem->SetDescription( pl.account_managers[i]->description.c_str() );
+
+
m_pProjectListCtrl->Append(
- wxString(pl.account_managers[i]->url.c_str(), wxConvUTF8),
wxString(pl.account_managers[i]->name.c_str(), wxConvUTF8),
- wxString(pl.account_managers[i]->image.c_str(), wxConvUTF8),
- wxString(pl.account_managers[i]->description.c_str(), wxConvUTF8),
- false,
- false,
- true
+ pItem
);
}
// Pre select the first element
- if (m_pProjectListCtrl->GetItemCount()) {
+ if (m_pProjectListCtrl->GetCount()) {
m_pProjectListCtrl->SetSelection(0);
- m_strProjectURL = m_pProjectListCtrl->GetItem(0)->GetURL();
- m_bProjectSupported = m_pProjectListCtrl->GetItem(0)->IsPlatformSupported();
+ CAcctMgrListItem* pItem = (CAcctMgrListItem*)(m_pProjectListCtrl->GetClientData(0));
+ SetProjectURL(pItem->GetURL());
+ m_pProjectDetailsDescriptionCtrl->SetValue(pItem->GetDescription());
}
TransferDataToWindow();
@@ -306,21 +345,39 @@ void CAccountManagerInfoPage::OnPageChanging( wxWizardExEvent& event ) {
}
/*!
- * wxEVT_PROJECTLIST_ITEM_CHANGE event handler for ID_PROJECTSELECTIONCTRL
+ * wxEVT_LISTBOX event handler for ID_PROJECTS
*/
-void CAccountManagerInfoPage::OnProjectItemChange( ProjectListCtrlEvent& event ) {
- SetProjectURL( event.GetURL() );
- SetProjectSupported( event.IsSupported() );
+void CAccountManagerInfoPage::OnProjectSelected( wxCommandEvent& /*event*/ ) {
+ int sel = m_pProjectListCtrl->GetSelection();
+ if (sel == wxNOT_FOUND) {
+ SetProjectURL(wxEmptyString);
+ m_pProjectDetailsDescriptionCtrl->SetValue(wxEmptyString);
+ } else {
+ CAcctMgrListItem* pItem = (CAcctMgrListItem*)(m_pProjectListCtrl->GetClientData(sel));
+ SetProjectURL(pItem->GetURL());
+ m_pProjectDetailsDescriptionCtrl->SetValue(pItem->GetDescription());
+ }
TransferDataToWindow();
}
/*!
- * wxEVT_PROJECTLIST_ITEM_DISPLAY event handler for ID_PROJECTSELECTIONCTRL
+ * wxEVT_TEXT event handler for ID_PROJECTURLCTRL
*/
-void CAccountManagerInfoPage::OnProjectItemDisplay( ProjectListCtrlEvent& event ) {
- wxLaunchDefaultBrowser( event.GetURL() );
+void CAccountManagerInfoPage::OnURLChanged( wxCommandEvent& /*event*/ ) {
+ m_pOpenWebSiteButton->Enable(!m_pProjectUrlCtrl->GetValue().IsEmpty());
+}
+
+/*!
+ * wxEVT_BUTTON event handler for ID_PROJECTWEBPAGECTRL
+ */
+
+void CAccountManagerInfoPage::OnProjectItemDisplay( wxCommandEvent& /*event*/ ) {
+ wxString url = m_pProjectUrlCtrl->GetValue();
+ if (!url.IsEmpty()) {
+ wxLaunchDefaultBrowser(url);
+ }
}
/*!
diff --git a/clientgui/AccountManagerInfoPage.h b/clientgui/AccountManagerInfoPage.h
index 2f546e6..2a72656 100644
--- a/clientgui/AccountManagerInfoPage.h
+++ b/clientgui/AccountManagerInfoPage.h
@@ -22,8 +22,34 @@
#pragma interface "AccountManagerInfoPage.cpp"
#endif
-class CProjectListCtrl;
-class ProjectListCtrlEvent;
+/*!
+ * CProjectListItem class declaration
+ */
+
+class CAcctMgrListItem: public wxObject
+{
+ DECLARE_DYNAMIC_CLASS( CAcctMgrListItem )
+public:
+
+ wxString GetURL() const { return m_strURL ; }
+ void SetURL(wxString value) { m_strURL = value ; }
+
+ wxString GetName() const { return m_strName ; }
+ void SetName(wxString value) { m_strName = value ; }
+
+ wxString GetImage() const { return m_strImage ; }
+ void SetImage(wxString value) { m_strImage = value ; }
+
+ wxString GetDescription() const { return m_strDescription ; }
+ void SetDescription(wxString value) { m_strDescription = value ; }
+
+private:
+ wxString m_strURL;
+ wxString m_strName;
+ wxString m_strImage;
+ wxString m_strDescription;
+};
+
/*!
* CAccountManagerInfoPage class declaration
@@ -54,11 +80,14 @@ public:
/// wxEVT_WIZARD_PAGE_CHANGING event handler for ID_ACCOUNTMANAGERINFOPAGE
void OnPageChanging( wxWizardExEvent& event );
- /// wxEVT_PROJECTLIST_ITEM_CHANGE event handler for ID_PROJECTSELECTIONCTRL
- void OnProjectItemChange( ProjectListCtrlEvent& event );
+ /// wxEVT_LISTBOX event handler for ID_PROJECTS
+ void OnProjectSelected( wxCommandEvent& event );
- /// wxEVT_PROJECTLIST_ITEM_DISPLAY event handler for ID_PROJECTSELECTIONCTRL
- void OnProjectItemDisplay( ProjectListCtrlEvent& event );
+ /// wxEVT_TEXT event handler for ID_PROJECTURLCTRL
+ void OnURLChanged( wxCommandEvent& event );
+
+ /// wxEVT_BUTTON event handler for ID_PROJECTWEBPAGECTRL
+ void OnProjectItemDisplay( wxCommandEvent& event );
/// wxEVT_WIZARD_CANCEL event handler for ID_ACCOUNTMANAGERINFOPAGE
void OnCancel( wxWizardExEvent& event );
@@ -76,9 +105,6 @@ public:
wxString GetProjectURL() const { return m_strProjectURL ; }
void SetProjectURL(wxString value) { m_strProjectURL = value ; }
- bool GetProjectSupported() const { return m_bProjectSupported ; }
- void SetProjectSupported(bool value) { m_bProjectSupported = value ; }
-
/// Retrieves bitmap resources
wxBitmap GetBitmapResource( const wxString& name );
@@ -92,12 +118,14 @@ public:
////@begin CAccountManagerInfoPage member variables
wxStaticText* m_pTitleStaticCtrl;
wxStaticText* m_pDescriptionStaticCtrl;
- CProjectListCtrl* m_pProjectListCtrl;
+ wxListBox* m_pProjectListCtrl;
+ wxStaticText* m_pProjectDetailsStaticCtrl;
+ wxTextCtrl* m_pProjectDetailsDescriptionCtrl;
+ wxButton* m_pOpenWebSiteButton;
wxStaticText* m_pProjectUrlStaticCtrl;
wxTextCtrl* m_pProjectUrlCtrl;
////@end CAccountManagerInfoPage member variables
wxString m_strProjectURL;
- bool m_bProjectSupported;
bool m_bAccountManagerListPopulated;
};
diff --git a/clientgui/AccountManagerProcessingPage.cpp b/clientgui/AccountManagerProcessingPage.cpp
index e75edc3..5d6c40e 100644
--- a/clientgui/AccountManagerProcessingPage.cpp
+++ b/clientgui/AccountManagerProcessingPage.cpp
@@ -32,14 +32,12 @@
#include "SkinManager.h"
#include "MainDocument.h"
#include "BOINCBaseWizard.h"
-#include "ProjectListCtrl.h"
#include "WizardAttach.h"
#include "AccountManagerProcessingPage.h"
#include "AccountManagerInfoPage.h"
#include "AccountInfoPage.h"
#include "CompletionErrorPage.h"
-
////@begin XPM images
#include "res/wizprogress01.xpm"
#include "res/wizprogress02.xpm"
@@ -154,14 +152,14 @@ void CAccountManagerProcessingPage::CreateControls()
itemFlexGridSizer40->AddGrowableCol(2);
itemBoxSizer37->Add(itemFlexGridSizer40, 0, wxGROW|wxALL, 5);
- itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxGROW|wxALL, 5);
+ itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxALL, 5);
wxBitmap itemBitmap41(GetBitmapResource(wxT("res/wizprogress01.xpm")));
m_pProgressIndicator = new wxStaticBitmap;
m_pProgressIndicator->Create( itemWizardPage36, ID_PROGRESSCTRL, itemBitmap41, wxDefaultPosition, wxSize(184, 48), 0 );
itemFlexGridSizer40->Add(m_pProgressIndicator, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxGROW|wxALL, 5);
+ itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxALL, 5);
////@end CAccountManagerProcessingPage content construction
}
@@ -299,7 +297,7 @@ void CAccountManagerProcessingPage::OnStateChange( CAccountManagerProcessingPage
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
if (!iReturnValue && !reply.error_num) {
diff --git a/clientgui/AccountManagerPropertiesPage.cpp b/clientgui/AccountManagerPropertiesPage.cpp
index 3f464aa..ea1c070 100644
--- a/clientgui/AccountManagerPropertiesPage.cpp
+++ b/clientgui/AccountManagerPropertiesPage.cpp
@@ -33,7 +33,6 @@
#include "SkinManager.h"
#include "MainDocument.h"
#include "BOINCBaseWizard.h"
-#include "ProjectListCtrl.h"
#include "WizardAttach.h"
#include "AccountManagerPropertiesPage.h"
#include "AccountManagerInfoPage.h"
@@ -41,7 +40,6 @@
#include "CompletionErrorPage.h"
#include "TermsOfUsePage.h"
-
////@begin XPM images
#include "res/wizprogress01.xpm"
#include "res/wizprogress02.xpm"
@@ -288,7 +286,7 @@ void CAccountManagerPropertiesPage::OnStateChange( CAccountManagerPropertiesPage
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
if (
@@ -367,7 +365,7 @@ void CAccountManagerPropertiesPage::OnStateChange( CAccountManagerPropertiesPage
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
SetNetworkConnectionNotDetected(NETWORK_STATUS_WANT_CONNECTION == status.network_status);
diff --git a/clientgui/AdvancedFrame.cpp b/clientgui/AdvancedFrame.cpp
index 19705b3..be0dae8 100644
--- a/clientgui/AdvancedFrame.cpp
+++ b/clientgui/AdvancedFrame.cpp
@@ -50,6 +50,7 @@
#include "ViewResources.h"
#include "DlgAbout.h"
#include "DlgOptions.h"
+#include "DlgDiagnosticLogFlags.h"
#include "DlgGenericMessage.h"
#include "DlgEventLog.h"
#include "wizardex.h"
@@ -171,6 +172,7 @@ BEGIN_EVENT_TABLE (CAdvancedFrame, CBOINCBaseFrame)
// Advanced
EVT_MENU(ID_OPTIONS, CAdvancedFrame::OnOptions)
EVT_MENU(ID_PREFERENCES, CAdvancedFrame::OnPreferences)
+ EVT_MENU(ID_DIAGNOSTICLOGFLAGS, CAdvancedFrame::OnDiagnosticLogFlags)
EVT_MENU(ID_SELECTCOMPUTER, CAdvancedFrame::OnSelectComputer)
EVT_MENU(ID_SHUTDOWNCORECLIENT, CAdvancedFrame::OnClientShutdown)
EVT_MENU(ID_RUNBENCHMARKS, CAdvancedFrame::OnRunBenchmarks)
@@ -194,6 +196,10 @@ BEGIN_EVENT_TABLE (CAdvancedFrame, CBOINCBaseFrame)
EVT_NOTEBOOK_PAGE_CHANGED(ID_FRAMENOTEBOOK, CAdvancedFrame::OnNotebookSelectionChanged)
EVT_SIZE(CAdvancedFrame::OnSize)
EVT_MOVE(CAdvancedFrame::OnMove)
+#ifdef __WXMAC__
+ EVT_MENU(wxID_PREFERENCES, CAdvancedFrame::OnPreferences)
+ EVT_CHAR_HOOK(CAdvancedFrame::OnKeyPressed)
+#endif
END_EVENT_TABLE ()
@@ -347,6 +353,12 @@ bool CAdvancedFrame::CreateMenu() {
strMenuDescription
);
+#ifdef __WXMAC__
+ menuFile->Append(
+ wxID_PREFERENCES
+ );
+#endif
+
// View menu
wxMenu *menuView = new wxMenu;
@@ -598,6 +610,11 @@ bool CAdvancedFrame::CreateMenu() {
_("Event Log...\tCtrl+Shift+E"),
_("Display diagnostic messages.")
);
+ menuAdvanced->Append(
+ ID_DIAGNOSTICLOGFLAGS,
+ _("Event Log Diagnostic Flags...\tCtrl+Shift+F"),
+ _("Enable or disable various diagnostic messages")
+ );
// Help menu
@@ -642,7 +659,7 @@ bool CAdvancedFrame::CreateMenu() {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strMenuName.Printf(
- _("%s &website"),
+ _("%s &web site"),
pSkinAdvanced->GetApplicationShortName().c_str()
);
// %s is the application name
@@ -711,9 +728,6 @@ bool CAdvancedFrame::CreateMenu() {
}
#ifdef __WXMAC__
- // Enable Mac OS X's standard Preferences menu item (handled in MacSysMenu.cpp)
- EnableMenuCommand(NULL, kHICommandPreferences);
-
// Set HELP key as keyboard shortcut
m_Shortcuts[0].Set(wxACCEL_NORMAL, WXK_HELP, ID_HELPBOINCMANAGER);
m_pAccelTable = new wxAcceleratorTable(1, m_Shortcuts);
@@ -877,7 +891,6 @@ bool CAdvancedFrame::SaveState() {
int iItemCount = 0;
- wxASSERT(pConfig);
wxASSERT(m_pNotebook);
CBOINCBaseFrame::SaveState();
@@ -1001,6 +1014,7 @@ void CAdvancedFrame::SaveWindowDimensions() {
wxString strBaseConfigLocation = wxString(wxT("/"));
wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
+ wxPoint pos = GetPosition();
wxASSERT(pConfig);
@@ -1012,8 +1026,8 @@ void CAdvancedFrame::SaveWindowDimensions() {
if (!iconized) {
pConfig->Write(wxT("Width"), GetSize().GetWidth());
pConfig->Write(wxT("Height"), GetSize().GetHeight());
- pConfig->Write(wxT("XPos"), GetPosition().x);
- pConfig->Write(wxT("YPos"), GetPosition().y);
+ pConfig->Write(wxT("XPos"), pos.x);
+ pConfig->Write(wxT("YPos"), pos.y);
}
wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::SaveWindowDimensions - Function End"));
@@ -1309,6 +1323,16 @@ void CAdvancedFrame::OnPreferences(wxCommandEvent& WXUNUSED(event)) {
}
+void CAdvancedFrame::OnDiagnosticLogFlags(wxCommandEvent& WXUNUSED(event)) {
+ wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnDiagnosticLogFlags - Function Begin"));
+
+ CDlgDiagnosticLogFlags dlg(this);
+ dlg.ShowModal();
+
+ wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnDiagnosticLogFlags - Function End"));
+}
+
+
void CAdvancedFrame::OnSelectComputer(wxCommandEvent& WXUNUSED(event)) {
wxString hostName = wxEmptyString;
int portNum = GUI_RPC_PORT;
@@ -1367,7 +1391,6 @@ void CAdvancedFrame::OnClientShutdown(wxCommandEvent& WXUNUSED(event)) {
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
-
// Stop all timers
StopTimers();
@@ -1413,11 +1436,9 @@ void CAdvancedFrame::OnRunBenchmarks(wxCommandEvent& WXUNUSED(event)) {
wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnRunBenchmarks - Function Begin"));
CMainDocument* pDoc = wxGetApp().GetDocument();
- wxASSERT(m_pNotebook);
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
- m_pNotebook->SetSelection(ID_ADVTASKSVIEW - ID_ADVVIEWBASE);
pDoc->RunBenchmarks();
wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnRunBenchmarks - Function End"));
@@ -1569,7 +1590,9 @@ void CAdvancedFrame::OnHelpAbout(wxCommandEvent& WXUNUSED(event)) {
wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnHelpAbout - Function Begin"));
CDlgAbout dlg(this);
+ wxGetApp().SetAboutDialogIsOpen(true);
dlg.ShowModal();
+ wxGetApp().SetAboutDialogIsOpen(false);
wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnHelpAbout - Function End"));
}
@@ -1602,8 +1625,26 @@ void CAdvancedFrame::OnRefreshView(CFrameEvent& WXUNUSED(event)) {
strTabTitle = pView->GetViewDisplayName();
}
- m_pNotebook->SetPageText(ID_ADVNOTICESVIEW - ID_ADVVIEWBASE, strTabTitle);
+ size_t noticesPage = ID_ADVNOTICESVIEW - ID_ADVVIEWBASE;
+ m_pNotebook->SetPageText(noticesPage, strTabTitle);
m_pNotebook->Layout();
+#ifdef __WXMSW__
+ // Ugly hack to work around a bug in wxWidgets 3.0
+ // which fails to center the updated tab label text.
+ m_pNotebook->Freeze();
+ if (m_pNotebook->GetSelection() == (int)noticesPage) {
+ size_t projectsPage = ID_ADVPROJECTSVIEW - ID_ADVVIEWBASE;
+ wxWindow * thePage = m_pNotebook->GetPage(projectsPage);
+ strTabTitle = m_pNotebook->GetPageText(projectsPage);
+ m_pNotebook->RemovePage(projectsPage);
+ m_pNotebook->InsertPage(projectsPage, thePage, strTabTitle, false, projectsPage);
+ } else {
+ wxWindow * thePage = m_pNotebook->GetPage(noticesPage);
+ m_pNotebook->RemovePage(noticesPage);
+ m_pNotebook->InsertPage(noticesPage, thePage, strTabTitle, false, noticesPage);
+ }
+ m_pNotebook->Thaw();
+#endif
}
@@ -1636,6 +1677,7 @@ void CAdvancedFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
CBOINCBaseView* pView = NULL;
int iItemCount = 0, iIndex;
int wasShown = 0;
+ int wasVisible = 0;
wxASSERT(m_pNotebook);
wxASSERT(pDoc);
@@ -1683,20 +1725,48 @@ void CAdvancedFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
pDoc->rpc.get_project_init_status(pis);
pDoc->rpc.acct_mgr_info(ami);
- if (ami.acct_mgr_url.size() && !ami.have_credentials) {
- if (IsShown()) {
- wasShown = 1;
- } else {
- Show();
- }
+ if (ami.acct_mgr_url.size() && ami.have_credentials) {
+ // Fall through
+ //
+ // There isn't a need to bring up the attach wizard, the account manager will
+ // take care of attaching to projects when it completes the RPCs
+ //
+ } else if (ami.acct_mgr_url.size() && !ami.have_credentials) {
+ wasShown = IsShown();
+ Show();
+ wasVisible = wxGetApp().IsApplicationVisible();
+ if (!wasVisible) {
+ wxGetApp().ShowApplication(true);
+ }
+
pWizard = new CWizardAttach(this);
if (pWizard->SyncToAccountManager()) {
-
-#if defined(__WXMSW__) || defined(__WXMAC__)
- // If successful, hide the main window if we showed it
- if (!wasShown) {
- Hide();
+ // _GRIDREPUBLIC, _PROGRESSTHRUPROCESSORS and _CHARITYENGINE
+ // are defined for those branded builds on Windows only
+#if defined(_GRIDREPUBLIC) || defined(_PROGRESSTHRUPROCESSORS) || defined(_CHARITYENGINE) || defined(__WXMAC__)
+#ifdef __WXMAC__
+ // For GridRepublic, Charity Engine or ProgressThruProcessors,
+ // the Mac installer put a branding file in our data directory
+ long iBrandID = 0; // 0 is unbranded (default) BOINC
+
+ FILE *f = boinc_fopen("/Library/Application Support/BOINC Data/Branding", "r");
+ if (f) {
+ fscanf(f, "BrandId=%ld\n", &iBrandID);
+ fclose(f);
+ }
+ if ((iBrandID > 0) && (iBrandID < 4))
+#endif
+ {
+ // If successful, hide the main window if we showed it
+ if (!wasVisible) {
+ wxGetApp().ShowApplication(false);
+ }
+#ifndef __WXMAC__ // See comment in CBOINCGUIApp::OnFinishInit()
+ if (!wasShown) {
+ Hide();
+ }
+#endif
}
#endif
@@ -1728,10 +1798,9 @@ void CAdvancedFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
m_pNotebook->SetSelection(ID_ADVNOTICESVIEW - ID_ADVVIEWBASE);
}
} else if ((pis.url.size() || (0 >= pDoc->GetProjectCount())) && !status.disallow_attach) {
- if (!IsShown()) {
- Show();
- }
-
+ Show();
+ wxGetApp().ShowApplication(true);
+
pWizard = new CWizardAttach(this);
strName = wxString(pis.name.c_str(), wxConvUTF8);
strURL = wxString(pis.url.c_str(), wxConvUTF8);
@@ -1750,9 +1819,6 @@ void CAdvancedFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
// Update the menus
DeleteMenu();
CreateMenu();
-#ifdef __WXMAC__
- wxGetApp().GetMacSystemMenu()->BuildMenu();
-#endif
// Restart timers to continue normal operations.
StartTimers();
@@ -2141,3 +2207,11 @@ void CAdvancedFrame::StopTimers() {
m_pFrameRenderTimer->Stop();
}
+
+#ifdef __WXMAC__
+// Fix Keyboard navigation on Mac
+void CAdvancedFrame::OnKeyPressed(wxKeyEvent &event) {
+ CBOINCBaseView* pView = wxDynamicCast(m_pNotebook->GetPage(m_pNotebook->GetSelection()), CBOINCBaseView);
+ pView->OnKeyPressed(event);
+}
+#endif
diff --git a/clientgui/AdvancedFrame.h b/clientgui/AdvancedFrame.h
index a300c76..393e0d7 100644
--- a/clientgui/AdvancedFrame.h
+++ b/clientgui/AdvancedFrame.h
@@ -71,6 +71,7 @@ public:
void OnOptions( wxCommandEvent& event );
void OnPreferences( wxCommandEvent& event );
+ void OnDiagnosticLogFlags( wxCommandEvent& event );
void OnSelectComputer( wxCommandEvent& event );
void OnClientShutdown( wxCommandEvent& event );
void OnRunBenchmarks( wxCommandEvent& event );
@@ -100,10 +101,13 @@ public:
bool RestoreState();
bool SaveState();
+#ifdef __WXMAC__
+ void OnKeyPressed(wxKeyEvent &event);
+#endif
+
wxTimer* m_pRefreshStateTimer;
wxTimer* m_pFrameRenderTimer;
-
protected:
virtual int _GetCurrentViewPage();
diff --git a/clientgui/AsyncRPC.cpp b/clientgui/AsyncRPC.cpp
index 11bcd80..dc50edb 100644
--- a/clientgui/AsyncRPC.cpp
+++ b/clientgui/AsyncRPC.cpp
@@ -19,6 +19,10 @@
#pragma implementation "AsyncRPC.h"
#endif
+#if !(defined(_WIN32) || (defined(__WXMAC__) && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4)))
+#include <xlocale.h>
+#endif
+
#include "stdwx.h"
#include "BOINCGUIApp.h"
#include "MainDocument.h"
@@ -30,224 +34,8 @@
#include "DlgEventLog.h"
#include "util.h"
-#if !(defined(_WIN32) || (defined(__WXMAC__) && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4)))
-#include <xlocale.h>
-#include "gui_rpc_client.h"
-#endif
-
extern bool s_bSkipExitConfirmation;
-#ifdef __WXMAC__
-
-#ifdef HAVE_PTHREAD_MUTEXATTR_T
-// on some systems pthread_mutexattr_settype() is not in the headers (but it is
-// in the library, otherwise we wouldn't compile this code at all)
-extern "C" int pthread_mutexattr_settype( pthread_mutexattr_t *, int );
-#endif
-
-BOINC_Mutex::BOINC_Mutex( wxMutexType mutexType )
-{
- int err;
- switch ( mutexType )
- {
- case wxMUTEX_RECURSIVE:
- // support recursive locks like Win32, i.e. a thread can lock a
- // mutex which it had itself already locked
- //
- // unfortunately initialization of recursive mutexes is non
- // portable, so try several methods
-#ifdef HAVE_PTHREAD_MUTEXATTR_T
- {
- pthread_mutexattr_t attr;
- pthread_mutexattr_init( &attr );
- pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE );
-
- err = pthread_mutex_init( &m_mutex, &attr );
- }
-#elif defined(HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER)
- // we can use this only as initializer so we have to assign it
- // first to a temp var - assigning directly to m_mutex wouldn't
- // even compile
- {
- pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
- m_mutex = mutex;
- }
-#else // no recursive mutexes
- err = EINVAL;
-#endif // HAVE_PTHREAD_MUTEXATTR_T/...
- break;
-
- default:
- wxFAIL_MSG( wxT("unknown mutex type") );
- // fall through
-
- case wxMUTEX_DEFAULT:
- err = pthread_mutex_init( &m_mutex, NULL );
- break;
- }
-
- m_isOk = err == 0;
- if ( !m_isOk )
- {
- wxLogApiError( wxT("pthread_mutex_init()"), err );
- }
-}
-
-BOINC_Mutex::~BOINC_Mutex()
-{
- if ( m_isOk )
- {
- int err = pthread_mutex_destroy( &m_mutex );
- if ( err != 0 )
- {
- wxLogApiError( wxT("pthread_mutex_destroy()"), err );
- }
- }
-}
-
-wxMutexError BOINC_Mutex::Lock()
-{
- int err = pthread_mutex_lock( &m_mutex );
- switch ( err )
- {
- case EDEADLK:
- // only error checking mutexes return this value and so it's an
- // unexpected situation -- hence use assert, not wxLogDebug
- wxFAIL_MSG( wxT("mutex deadlock prevented") );
- return wxMUTEX_DEAD_LOCK;
-
- case EINVAL:
- wxLogDebug( wxT("pthread_mutex_lock(): mutex not initialized.") );
- break;
-
- case 0:
- return wxMUTEX_NO_ERROR;
-
- default:
- wxLogApiError( wxT("pthread_mutex_lock()"), err );
- }
-
- return wxMUTEX_MISC_ERROR;
-}
-
-wxMutexError BOINC_Mutex::TryLock()
-{
- int err = pthread_mutex_trylock( &m_mutex );
- switch ( err )
- {
- case EBUSY:
- // not an error: mutex is already locked, but we're prepared for this case
- return wxMUTEX_BUSY;
-
- case EINVAL:
- wxLogDebug( wxT("pthread_mutex_trylock(): mutex not initialized.") );
- break;
-
- case 0:
- return wxMUTEX_NO_ERROR;
-
- default:
- wxLogApiError( wxT("pthread_mutex_trylock()"), err );
- }
-
- return wxMUTEX_MISC_ERROR;
-}
-
-wxMutexError BOINC_Mutex::Unlock()
-{
- int err = pthread_mutex_unlock( &m_mutex );
- switch ( err )
- {
- case EPERM:
- // we don't own the mutex
- return wxMUTEX_UNLOCKED;
-
- case EINVAL:
- wxLogDebug( wxT("pthread_mutex_unlock(): mutex not initialized.") );
- break;
-
- case 0:
- return wxMUTEX_NO_ERROR;
-
- default:
- wxLogApiError( wxT("pthread_mutex_unlock()"), err );
- }
-
- return wxMUTEX_MISC_ERROR;
-}
-
-
-// wxMac wxCondition has bugs, so use native UNIX implementation
-
-BOINC_Condition::BOINC_Condition(BOINC_Mutex& mutex)
- : m_BOINC_Mutex(mutex) {
- int err;
-
- err = pthread_cond_init(&m_cond, NULL);
- mb_initOK = (err == 0);
-}
-
-BOINC_Condition::~BOINC_Condition() {
- pthread_cond_destroy(&m_cond);
- mb_initOK = false;
-}
-
-wxCondError BOINC_Condition::Wait(){
- int err;
-
- err = pthread_cond_wait(&m_cond, &m_BOINC_Mutex.m_mutex);
- switch (err) {
- case 0:
- return wxCOND_NO_ERROR;
- case EINVAL:
- return wxCOND_INVALID;
- case ETIMEDOUT:
- return wxCOND_TIMEOUT;
- default:
- return wxCOND_MISC_ERROR;
- }
- return wxCOND_NO_ERROR;
-}
-
-wxCondError BOINC_Condition::WaitTimeout(unsigned long milliseconds) {
- int err;
- wxLongLong curtime = wxGetLocalTimeMillis();
- curtime += milliseconds;
- wxLongLong temp = curtime / 1000;
- int sec = temp.GetLo();
- temp *= 1000;
- temp = curtime - temp;
- int millis = temp.GetLo();
-
- timespec tspec;
-
- tspec.tv_sec = sec;
- tspec.tv_nsec = millis * 1000L * 1000L;
-
- err = pthread_cond_timedwait(&m_cond, &m_BOINC_Mutex.m_mutex, &tspec);
- switch (err) {
- case 0:
- return wxCOND_NO_ERROR;
- case EINVAL:
- return wxCOND_INVALID;
- case ETIMEDOUT:
- return wxCOND_TIMEOUT;
- default:
- return wxCOND_MISC_ERROR;
- }
- return wxCOND_NO_ERROR;
-}
-
-void BOINC_Condition::Signal() {
- pthread_cond_signal(&m_cond);
-}
-
-void BOINC_Condition::Broadcast() {
- pthread_cond_broadcast(&m_cond);
-}
-
-#endif // __WXMAC__
-
// Delay in milliseconds before showing AsyncRPCDlg
#define RPC_WAIT_DLG_DELAY 1500
// How often to check for events when minimized and waiting for Demand RPC
@@ -656,13 +444,13 @@ int RPCThread::ProcessRPCRequest() {
break;
case RPC_GET_CC_CONFIG:
retval = (m_pDoc->rpcClient).get_cc_config(
- *(CONFIG*)(current_request->arg1),
+ *(CC_CONFIG*)(current_request->arg1),
*(LOG_FLAGS*)(current_request->arg2)
);
break;
case RPC_SET_CC_CONFIG:
retval = (m_pDoc->rpcClient).set_cc_config(
- *(CONFIG*)(current_request->arg1),
+ *(CC_CONFIG*)(current_request->arg1),
*(LOG_FLAGS*)(current_request->arg2)
);
break;
@@ -869,7 +657,7 @@ int CMainDocument::RequestRPC(ASYNC_RPC_REQUEST& request, bool hasPriority) {
pFrame = wxGetApp().GetFrame();
wxCommandEvent evt(wxEVT_COMMAND_MENU_SELECTED, wxID_EXIT);
s_bSkipExitConfirmation = true;
- pFrame->AddPendingEvent(evt);
+ pFrame->GetEventHandler()->AddPendingEvent(evt);
}
}
if (m_RPCWaitDlg) {
@@ -1146,7 +934,7 @@ void CMainDocument::HandleCompletedRPC() {
CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
if (pFrame) {
CFrameEvent event(wxEVT_FRAME_REFRESHVIEW, pFrame);
- pFrame->ProcessEvent(event);
+ pFrame->GetEventHandler()->ProcessEvent(event);
}
}
@@ -1191,19 +979,19 @@ void CMainDocument::HandleCompletedRPC() {
}
-int CMainDocument::CopyProjectsToStateBuffer(PROJECTS& p, CC_STATE& state) {
+int CMainDocument::CopyProjectsToStateBuffer(PROJECTS& p, CC_STATE& ccstate) {
int retval = 0;
unsigned int i;
PROJECT* state_project = NULL;
// flag for delete
- for (i=0; i<state.projects.size(); i++) {
- state_project = state.projects[i];
+ for (i=0; i<ccstate.projects.size(); i++) {
+ state_project = ccstate.projects[i];
state_project->flag_for_delete = true;
}
for (i=0; i<p.projects.size(); i++) {
- state_project = state.lookup_project(p.projects[i]->master_url);
+ state_project = ccstate.lookup_project(p.projects[i]->master_url);
if (state_project && (!strcmp(p.projects[i]->master_url, state_project->master_url))) {
// Because the CC_STATE contains several pointers to each element of the
// CC_STATE::projects vector, we must update these elements in place.
@@ -1217,8 +1005,8 @@ int CMainDocument::CopyProjectsToStateBuffer(PROJECTS& p, CC_STATE& state) {
// Anything need to be deleted?
if (!retval) {
- for (i=0; i<state.projects.size(); i++) {
- state_project = state.projects[i];
+ for (i=0; i<ccstate.projects.size(); i++) {
+ state_project = ccstate.projects[i];
if (state_project->flag_for_delete) {
retval = ERR_FILE_MISSING;
}
diff --git a/clientgui/AsyncRPC.h b/clientgui/AsyncRPC.h
index 36a4b12..2fe79cc 100644
--- a/clientgui/AsyncRPC.h
+++ b/clientgui/AsyncRPC.h
@@ -33,6 +33,10 @@
#include <pthread.h>
+#if 1
+#define BOINC_Mutex wxMutex
+#define BOINC_Condition wxCondition
+#else
class BOINC_Mutex
{
public:
@@ -76,7 +80,7 @@ private:
};
#endif
-
+#endif
class CMainDocument; // Forward declaration
@@ -335,9 +339,9 @@ public:
{ return RPC_Wait(RPC_GET_GLOBAL_PREFS_OVERRIDE_STRUCT, (void*)&arg1, (void*)&arg2); }
int set_global_prefs_override_struct(GLOBAL_PREFS& arg1, GLOBAL_PREFS_MASK& arg2)
{ return RPC_Wait(RPC_SET_GLOBAL_PREFS_OVERRIDE_STRUCT, (void*)&arg1, (void*)&arg2); }
- int get_cc_config(CONFIG& arg1, LOG_FLAGS& arg2)
+ int get_cc_config(CC_CONFIG& arg1, LOG_FLAGS& arg2)
{ return RPC_Wait(RPC_GET_CC_CONFIG, (void*)&arg1, (void*)&arg2); }
- int set_cc_config(CONFIG& arg1, LOG_FLAGS& arg2)
+ int set_cc_config(CC_CONFIG& arg1, LOG_FLAGS& arg2)
{ return RPC_Wait(RPC_SET_CC_CONFIG, (void*)&arg1, (void*)&arg2); }
private:
CMainDocument* m_pDoc;
diff --git a/clientgui/BOINCBaseFrame.cpp b/clientgui/BOINCBaseFrame.cpp
index c0aa74f..01c7fd7 100644
--- a/clientgui/BOINCBaseFrame.cpp
+++ b/clientgui/BOINCBaseFrame.cpp
@@ -36,7 +36,6 @@
#include "Events.h"
#include "DlgEventLog.h"
#include "DlgSelectComputer.h"
-#include "BOINCInternetFSHandler.h"
DEFINE_EVENT_TYPE(wxEVT_FRAME_ALERT)
@@ -108,6 +107,8 @@ CBOINCBaseFrame::CBOINCBaseFrame(wxWindow* parent, const wxWindowID id, const wx
// CPU time
wxUpdateUIEvent::SetUpdateInterval(500);
+ m_ptFramePos = wxPoint(0, 0);
+
// The second half of the initialization process picks up in the OnFrameRender()
// routine since the menus' and status bars' are drawn in the frameworks
// on idle routines, on idle events are sent in between the end of the
@@ -156,6 +157,16 @@ void CBOINCBaseFrame::OnPeriodicRPC(wxTimerEvent& WXUNUSED(event)) {
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
+#ifdef __WXMAC__
+ static bool first = true;
+ if (first) {
+ first = false;
+ wxGetApp().OnFinishInit();
+ }
+
+ wxGetApp().CheckPartialActivation();
+#endif
+
if (!bAlreadyRunningLoop && m_pPeriodicRPCTimer->IsRunning()) {
bAlreadyRunningLoop = true;
@@ -358,20 +369,9 @@ void CBOINCBaseFrame::OnExit(wxCommandEvent& WXUNUSED(event)) {
if (wxGetApp().ConfirmExit()) {
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
- if (internetFSHandler) {
- ((CBOINCInternetFSHandler*)internetFSHandler)->SetAbortInternetIO();
- }
-
// Save state before exiting
SaveState();
- // Under wxWidgets 2.8.0, the task bar icons must be deleted for app to exit its main loop
-#ifdef __WXMAC__
- wxGetApp().DeleteMacSystemMenu();
-#endif
- wxGetApp().DeleteTaskBarIcon();
-
CDlgEventLog* eventLog = wxGetApp().GetEventLog();
if (eventLog) {
eventLog->Destroy();
@@ -760,8 +760,6 @@ bool CBOINCBaseFrame::SaveState() {
int iItemCount;
- wxASSERT(pConfig);
-
// An odd case happens every once and awhile where wxWidgets looses
// the pointer to the config object, or it is cleaned up before
// the window has finished it's cleanup duty. If we detect a NULL
@@ -887,8 +885,15 @@ bool CBOINCBaseFrame::Show(bool bShow) {
#endif
}
+#ifdef __WXMAC__
+ retval = (wxGetApp().IsApplicationVisible() != bShow);
+ if (bShow) {
+ retval = wxFrame::Show(bShow);
+ }
+#else
retval = wxFrame::Show(bShow);
- wxFrame::Raise();
+#endif
+ if (bShow) wxFrame::Raise();
wxLogTrace(wxT("Function Start/End"), wxT("CBOINCBaseFrame::Show - Function End"));
return retval;
diff --git a/clientgui/BOINCBaseFrame.h b/clientgui/BOINCBaseFrame.h
index 25f1d56..37d4fcf 100644
--- a/clientgui/BOINCBaseFrame.h
+++ b/clientgui/BOINCBaseFrame.h
@@ -22,6 +22,7 @@
#pragma interface "BOINCBaseFrame.cpp"
#endif
+
class CFrameEvent;
class CFrameAlertEvent;
class CBOINCDialUpManager;
@@ -98,7 +99,7 @@ public:
);
bool Show( bool bShow = true );
-
+
virtual bool RestoreState();
virtual bool SaveState();
@@ -122,6 +123,8 @@ protected:
virtual int _GetCurrentViewPage();
+ wxPoint m_ptFramePos;
+
DECLARE_EVENT_TABLE()
};
diff --git a/clientgui/BOINCBaseView.cpp b/clientgui/BOINCBaseView.cpp
index cd26017..2a0316b 100644
--- a/clientgui/BOINCBaseView.cpp
+++ b/clientgui/BOINCBaseView.cpp
@@ -58,11 +58,6 @@ CBOINCBaseView::CBOINCBaseView(wxNotebook* pNotebook) :
SetName(GetViewName());
SetAutoLayout(TRUE);
-
-#if BASEVIEW_STRIPES
- m_pWhiteBackgroundAttr = NULL;
- m_pGrayBackgroundAttr = NULL;
-#endif
}
@@ -106,6 +101,7 @@ CBOINCBaseView::CBOINCBaseView(wxNotebook* pNotebook, wxWindowID iTaskWindowID,
#if USE_NATIVE_LISTCONTROL
m_pListPane->PushEventHandler(new MyEvtHandler(m_pListPane));
#else
+ m_pListPane->SaveEventHandler((m_pListPane->GetMainWin())->GetEventHandler());
(m_pListPane->GetMainWin())->PushEventHandler(new MyEvtHandler(m_pListPane));
#endif
@@ -117,20 +113,6 @@ CBOINCBaseView::CBOINCBaseView(wxNotebook* pNotebook, wxWindowID iTaskWindowID,
m_SortArrows->Add( wxIcon( sortascending_xpm ) );
m_SortArrows->Add( wxIcon( sortdescending_xpm ) );
m_pListPane->SetImageList(m_SortArrows, wxIMAGE_LIST_SMALL);
-
-#if BASEVIEW_STRIPES
- m_pWhiteBackgroundAttr = new wxListItemAttr(
- wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT),
- wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW),
- wxNullFont
- );
- m_pGrayBackgroundAttr = new wxListItemAttr(
- wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT),
- wxColour(240, 240, 240),
- wxNullFont
- );
-#endif
-
}
@@ -148,18 +130,6 @@ CBOINCBaseView::~CBOINCBaseView() {
m_arrSelectedKeys1.Clear();
m_arrSelectedKeys2.Clear();
m_iSortedIndexes.Clear();
-
-#if BASEVIEW_STRIPES
- if (m_pWhiteBackgroundAttr) {
- delete m_pWhiteBackgroundAttr;
- m_pWhiteBackgroundAttr = NULL;
- }
-
- if (m_pGrayBackgroundAttr) {
- delete m_pGrayBackgroundAttr;
- m_pGrayBackgroundAttr = NULL;
- }
-#endif
}
@@ -261,23 +231,6 @@ int CBOINCBaseView::FireOnListGetItemImage(long item) const {
}
-#if BASEVIEW_STRIPES
-wxListItemAttr* CBOINCBaseView::FireOnListGetItemAttr(long item) const {
- return OnListGetItemAttr(item);
-}
-
-
-wxListItemAttr* CBOINCBaseView::OnListGetItemAttr(long item) const {
-
- // If we are using some theme where the default background color isn't
- // white, then our whole system is boned. Use defaults instead.
- if (wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW) != wxColor(wxT("WHITE"))) return NULL;
-
- return item % 2 ? m_pGrayBackgroundAttr : m_pWhiteBackgroundAttr;
-}
-#endif
-
-
void CBOINCBaseView::OnListRender(wxTimerEvent& event) {
if (!m_bProcessingListRenderEvent) {
m_bProcessingListRenderEvent = true;
@@ -315,6 +268,7 @@ void CBOINCBaseView::OnListRender(wxTimerEvent& event) {
wxASSERT(!iReturnValue);
}
wxASSERT(GetDocCount() == GetCacheCount());
+//fprintf(stderr, "CBOINCBaseView::OnListRender(): m_pListPane->RefreshItems(0, %d)\n", iDocCount - 1);
m_pListPane->RefreshItems(0, iDocCount - 1);
m_bNeedSort = true;
}
@@ -328,24 +282,6 @@ void CBOINCBaseView::OnListRender(wxTimerEvent& event) {
m_pListPane->EnsureVisible(iDocCount - 1);
}
}
-
- if (m_pListPane->m_bIsSingleSelection) {
- // If no item has been selected yet, select the first item.
-#ifdef __WXMSW__
- if ((m_pListPane->GetSelectedItemCount() == 0) &&
- (m_pListPane->GetItemCount() >= 1)) {
-
- long desiredstate = wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED;
- m_pListPane->SetItemState(0, desiredstate, desiredstate);
- }
-#else
- if ((m_pListPane->GetFirstSelected() < 0) &&
- (m_pListPane->GetItemCount() >= 1)) {
- m_pListPane->SetItemState(0, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED,
- wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED);
- }
-#endif
- }
}
// Find the previously selected items by their key values and reselect them
@@ -732,8 +668,11 @@ void CBOINCBaseView::UpdateSelection(){
void CBOINCBaseView::PostUpdateSelection(){
wxASSERT(m_pTaskPane);
- m_pTaskPane->UpdateControls();
- Layout();
+ if (m_pTaskPane->UpdateControls()) {
+ // Under wxWidgets 2.9.4, Layout() causes ListCtrl
+ // to repaint, so call only when actually needed.
+ Layout();
+ }
}
@@ -797,6 +736,7 @@ void CBOINCBaseView::UpdateWebsiteSelection(long lControlGroup, PROJECT* project
}
}
+ m_pTaskPane->FitInside();
m_bForceUpdateSelection = false;
}
}
@@ -810,6 +750,73 @@ void CBOINCBaseView::RefreshTaskPane() {
}
+#ifdef __WXMAC__
+// Fix Keyboard navigation on Mac
+//
+// NOTE: to select an item in wxListCtrl when none
+// has yet been selected, press tab and then space.
+#define SHIFT_MASK (1<<17)
+
+void CBOINCBaseView::OnKeyPressed(wxKeyEvent &event) {
+ wxWindow next;
+ CTaskItemGroup* pGroup = NULL;
+ CTaskItem* pItem = NULL;
+ int i, j;
+ bool focusOK = false;
+
+ if (m_pTaskPane) {
+ int keyCode = event.GetKeyCode();
+ wxUint32 keyFlags = event.GetRawKeyFlags();
+
+ if (keyCode == WXK_TAB) {
+ wxWindow* focused = wxWindow::FindFocus();
+ if (!m_pTaskPane->IsDescendant(focused)) {
+ if (keyFlags & SHIFT_MASK) {
+ for (i=m_TaskGroups.size()-1; i>=0; --i) {
+ pGroup = m_TaskGroups[i];
+ for (j=pGroup->m_Tasks.size()-1; j>=0; --j) {
+ pItem = pGroup->m_Tasks[j];
+ if (pItem->m_pButton) {
+ if (pItem->m_pButton->CanAcceptFocus()) {
+ focusOK = true;
+ break;
+ }
+ }
+ }
+ if (focusOK) break;
+ }
+ } else {
+ for (i=0; i<m_TaskGroups.size(); ++i) {
+ pGroup = m_TaskGroups[i];
+ for (j=0; j<pGroup->m_Tasks.size(); ++j) {
+ pItem = pGroup->m_Tasks[j];
+ if (pItem->m_pButton) {
+ if (pItem->m_pButton->CanAcceptFocus()) {
+ focusOK = true;
+ break;
+ }
+ }
+ }
+ if (focusOK) break;
+ }
+ }
+ if (focusOK) {
+ pItem->m_pButton->SetFocus();
+ return;
+ }
+ }
+ wxNavigationKeyEvent evt;
+ evt.SetDirection((keyFlags & SHIFT_MASK) == 0);
+ evt.SetFromTab(true);
+ m_pTaskPane->GetEventHandler()->AddPendingEvent(evt);
+ return;
+ }
+ }
+ event.Skip();
+}
+#endif
+
+
bool CBOINCBaseView::_IsSelectionManagementNeeded() {
return IsSelectionManagementNeeded();
}
@@ -861,120 +868,120 @@ wxString CBOINCBaseView::HtmlEntityEncode(wxString strRaw) {
strEncodedHtml.Replace(wxT("\""), wxT("""), true);
strEncodedHtml.Replace(wxT("<"), wxT("<"), true);
strEncodedHtml.Replace(wxT(">"), wxT(">"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("‚"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ƒ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("„"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("…"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("†"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("‡"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Š"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Œ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("‘"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("’"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("“"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("”"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("•"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("–"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("—"), true);
- strEncodedHtml.Replace(wxT("��~"), wxT("˜"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("™"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("š"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("œ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ÿ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¡"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¢"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("£"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¤"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¥"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¦"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("§"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¨"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("©"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ª"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("«"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¬"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("®"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¯"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("°"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("±"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("²"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("³"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("´"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("µ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¶"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("·"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¸"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¹"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("º"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("»"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¼"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("½"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¾"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("¿"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("À"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Á"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Â"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ã"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ä"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Å"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Æ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ç"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("È"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("É"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ê"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ë"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ì"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Í"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Î"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ï"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ð"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ñ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ò"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ó"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ô"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Õ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ö"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("×"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ø"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ù"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ú"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Û"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ü"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Ý"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("Þ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ß"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("à"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("á"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("â"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ã"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ä"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("å"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("æ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ç"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("è"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("é"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ê"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ë"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ì"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("í"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("î"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ï"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ð"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ñ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ò"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ó"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ô"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("õ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ö"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("÷"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ø"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ù"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ú"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("û"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ü"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ý"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("þ"), true);
- strEncodedHtml.Replace(wxT("�"), wxT("ÿ"), true);
+ strEncodedHtml.Replace(wxT("‚"), wxT("‚"), true);
+ strEncodedHtml.Replace(wxT("ƒ"), wxT("ƒ"), true);
+ strEncodedHtml.Replace(wxT("„"), wxT("„"), true);
+ strEncodedHtml.Replace(wxT("…"), wxT("…"), true);
+ strEncodedHtml.Replace(wxT("†"), wxT("†"), true);
+ strEncodedHtml.Replace(wxT("‡"), wxT("‡"), true);
+ strEncodedHtml.Replace(wxT("Š"), wxT("Š"), true);
+ strEncodedHtml.Replace(wxT("Œ"), wxT("Œ"), true);
+ strEncodedHtml.Replace(wxT("‘"), wxT("‘"), true);
+ strEncodedHtml.Replace(wxT("’"), wxT("’"), true);
+ strEncodedHtml.Replace(wxT("“"), wxT("“"), true);
+ strEncodedHtml.Replace(wxT("”"), wxT("”"), true);
+ strEncodedHtml.Replace(wxT("•"), wxT("•"), true);
+ strEncodedHtml.Replace(wxT("–"), wxT("–"), true);
+ strEncodedHtml.Replace(wxT("—"), wxT("—"), true);
+ strEncodedHtml.Replace(wxT("˜˜~"), wxT("˜"), true);
+ strEncodedHtml.Replace(wxT("™"), wxT("™"), true);
+ strEncodedHtml.Replace(wxT("š"), wxT("š"), true);
+ strEncodedHtml.Replace(wxT("œ"), wxT("œ"), true);
+ strEncodedHtml.Replace(wxT("Ÿ"), wxT("Ÿ"), true);
+ strEncodedHtml.Replace(wxT("¡"), wxT("¡"), true);
+ strEncodedHtml.Replace(wxT("¢"), wxT("¢"), true);
+ strEncodedHtml.Replace(wxT("£"), wxT("£"), true);
+ strEncodedHtml.Replace(wxT("¤"), wxT("¤"), true);
+ strEncodedHtml.Replace(wxT("¥"), wxT("¥"), true);
+ strEncodedHtml.Replace(wxT("¦"), wxT("¦"), true);
+ strEncodedHtml.Replace(wxT("§"), wxT("§"), true);
+ strEncodedHtml.Replace(wxT("¨"), wxT("¨"), true);
+ strEncodedHtml.Replace(wxT("©"), wxT("©"), true);
+ strEncodedHtml.Replace(wxT("ª"), wxT("ª"), true);
+ strEncodedHtml.Replace(wxT("«"), wxT("«"), true);
+ strEncodedHtml.Replace(wxT("¬"), wxT("¬"), true);
+ strEncodedHtml.Replace(wxT("®"), wxT("®"), true);
+ strEncodedHtml.Replace(wxT("¯"), wxT("¯"), true);
+ strEncodedHtml.Replace(wxT("°"), wxT("°"), true);
+ strEncodedHtml.Replace(wxT("±"), wxT("±"), true);
+ strEncodedHtml.Replace(wxT("²"), wxT("²"), true);
+ strEncodedHtml.Replace(wxT("³"), wxT("³"), true);
+ strEncodedHtml.Replace(wxT("´"), wxT("´"), true);
+ strEncodedHtml.Replace(wxT("µ"), wxT("µ"), true);
+ strEncodedHtml.Replace(wxT("¶"), wxT("¶"), true);
+ strEncodedHtml.Replace(wxT("·"), wxT("·"), true);
+ strEncodedHtml.Replace(wxT("¸"), wxT("¸"), true);
+ strEncodedHtml.Replace(wxT("¹"), wxT("¹"), true);
+ strEncodedHtml.Replace(wxT("º"), wxT("º"), true);
+ strEncodedHtml.Replace(wxT("»"), wxT("»"), true);
+ strEncodedHtml.Replace(wxT("¼"), wxT("¼"), true);
+ strEncodedHtml.Replace(wxT("½"), wxT("½"), true);
+ strEncodedHtml.Replace(wxT("¾"), wxT("¾"), true);
+ strEncodedHtml.Replace(wxT("¿"), wxT("¿"), true);
+ strEncodedHtml.Replace(wxT("À"), wxT("À"), true);
+ strEncodedHtml.Replace(wxT("Á"), wxT("Á"), true);
+ strEncodedHtml.Replace(wxT("Â"), wxT("Â"), true);
+ strEncodedHtml.Replace(wxT("Ã"), wxT("Ã"), true);
+ strEncodedHtml.Replace(wxT("Ä"), wxT("Ä"), true);
+ strEncodedHtml.Replace(wxT("Å"), wxT("Å"), true);
+ strEncodedHtml.Replace(wxT("Æ"), wxT("Æ"), true);
+ strEncodedHtml.Replace(wxT("Ç"), wxT("Ç"), true);
+ strEncodedHtml.Replace(wxT("È"), wxT("È"), true);
+ strEncodedHtml.Replace(wxT("É"), wxT("É"), true);
+ strEncodedHtml.Replace(wxT("Ê"), wxT("Ê"), true);
+ strEncodedHtml.Replace(wxT("Ë"), wxT("Ë"), true);
+ strEncodedHtml.Replace(wxT("Ì"), wxT("Ì"), true);
+ strEncodedHtml.Replace(wxT("Í"), wxT("Í"), true);
+ strEncodedHtml.Replace(wxT("Î"), wxT("Î"), true);
+ strEncodedHtml.Replace(wxT("Ï"), wxT("Ï"), true);
+ strEncodedHtml.Replace(wxT("Ð"), wxT("Ð"), true);
+ strEncodedHtml.Replace(wxT("Ñ"), wxT("Ñ"), true);
+ strEncodedHtml.Replace(wxT("Ò"), wxT("Ò"), true);
+ strEncodedHtml.Replace(wxT("Ó"), wxT("Ó"), true);
+ strEncodedHtml.Replace(wxT("Ô"), wxT("Ô"), true);
+ strEncodedHtml.Replace(wxT("Õ"), wxT("Õ"), true);
+ strEncodedHtml.Replace(wxT("Ö"), wxT("Ö"), true);
+ strEncodedHtml.Replace(wxT("×"), wxT("×"), true);
+ strEncodedHtml.Replace(wxT("Ø"), wxT("Ø"), true);
+ strEncodedHtml.Replace(wxT("Ù"), wxT("Ù"), true);
+ strEncodedHtml.Replace(wxT("Ú"), wxT("Ú"), true);
+ strEncodedHtml.Replace(wxT("Û"), wxT("Û"), true);
+ strEncodedHtml.Replace(wxT("Ü"), wxT("Ü"), true);
+ strEncodedHtml.Replace(wxT("Ý"), wxT("Ý"), true);
+ strEncodedHtml.Replace(wxT("Þ"), wxT("Þ"), true);
+ strEncodedHtml.Replace(wxT("ß"), wxT("ß"), true);
+ strEncodedHtml.Replace(wxT("à"), wxT("à"), true);
+ strEncodedHtml.Replace(wxT("á"), wxT("á"), true);
+ strEncodedHtml.Replace(wxT("â"), wxT("â"), true);
+ strEncodedHtml.Replace(wxT("ã"), wxT("ã"), true);
+ strEncodedHtml.Replace(wxT("ä"), wxT("ä"), true);
+ strEncodedHtml.Replace(wxT("å"), wxT("å"), true);
+ strEncodedHtml.Replace(wxT("æ"), wxT("æ"), true);
+ strEncodedHtml.Replace(wxT("ç"), wxT("ç"), true);
+ strEncodedHtml.Replace(wxT("è"), wxT("è"), true);
+ strEncodedHtml.Replace(wxT("é"), wxT("é"), true);
+ strEncodedHtml.Replace(wxT("ê"), wxT("ê"), true);
+ strEncodedHtml.Replace(wxT("ë"), wxT("ë"), true);
+ strEncodedHtml.Replace(wxT("ì"), wxT("ì"), true);
+ strEncodedHtml.Replace(wxT("í"), wxT("í"), true);
+ strEncodedHtml.Replace(wxT("î"), wxT("î"), true);
+ strEncodedHtml.Replace(wxT("ï"), wxT("ï"), true);
+ strEncodedHtml.Replace(wxT("ð"), wxT("ð"), true);
+ strEncodedHtml.Replace(wxT("ñ"), wxT("ñ"), true);
+ strEncodedHtml.Replace(wxT("ò"), wxT("ò"), true);
+ strEncodedHtml.Replace(wxT("ó"), wxT("ó"), true);
+ strEncodedHtml.Replace(wxT("ô"), wxT("ô"), true);
+ strEncodedHtml.Replace(wxT("õ"), wxT("õ"), true);
+ strEncodedHtml.Replace(wxT("ö"), wxT("ö"), true);
+ strEncodedHtml.Replace(wxT("÷"), wxT("÷"), true);
+ strEncodedHtml.Replace(wxT("ø"), wxT("ø"), true);
+ strEncodedHtml.Replace(wxT("ù"), wxT("ù"), true);
+ strEncodedHtml.Replace(wxT("ú"), wxT("ú"), true);
+ strEncodedHtml.Replace(wxT("û"), wxT("û"), true);
+ strEncodedHtml.Replace(wxT("ü"), wxT("ü"), true);
+ strEncodedHtml.Replace(wxT("ý"), wxT("ý"), true);
+ strEncodedHtml.Replace(wxT("þ"), wxT("þ"), true);
+ strEncodedHtml.Replace(wxT("ÿ"), wxT("ÿ"), true);
#endif
return strEncodedHtml;
@@ -989,120 +996,120 @@ wxString CBOINCBaseView::HtmlEntityDecode(wxString strRaw) {
strDecodedHtml.Replace(wxT("""), wxT("\""), true);
strDecodedHtml.Replace(wxT("<"), wxT("<"), true);
strDecodedHtml.Replace(wxT(">"), wxT(">"), true);
- strDecodedHtml.Replace(wxT("‚"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ƒ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("„"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("…"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("†"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("‡"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Š"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Œ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("‘"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("’"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("“"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("”"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("•"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("–"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("—"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("˜"), wxT("��~"), true);
- strDecodedHtml.Replace(wxT("™"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("š"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("œ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ÿ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¡"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¢"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("£"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¤"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¥"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¦"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("§"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¨"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("©"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ª"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("«"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¬"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("®"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¯"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("°"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("±"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("²"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("³"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("´"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("µ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¶"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("·"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¸"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¹"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("º"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("»"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¼"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("½"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¾"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("¿"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("À"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Á"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Â"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ã"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ä"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Å"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Æ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ç"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("È"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("É"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ê"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ë"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ì"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Í"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Î"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ï"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ð"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ñ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ò"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ó"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ô"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Õ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ö"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("×"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ø"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ù"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ú"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Û"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ü"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Ý"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("Þ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ß"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("à"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("á"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("â"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ã"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ä"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("å"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("æ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ç"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("è"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("é"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ê"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ë"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ì"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("í"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("î"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ï"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ð"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ñ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ò"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ó"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ô"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("õ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ö"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("÷"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ø"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ù"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ú"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("û"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ü"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ý"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("þ"), wxT("�"), true);
- strDecodedHtml.Replace(wxT("ÿ"), wxT("�"), true);
+ strDecodedHtml.Replace(wxT("‚"), wxT("‚"), true);
+ strDecodedHtml.Replace(wxT("ƒ"), wxT("ƒ"), true);
+ strDecodedHtml.Replace(wxT("„"), wxT("„"), true);
+ strDecodedHtml.Replace(wxT("…"), wxT("…"), true);
+ strDecodedHtml.Replace(wxT("†"), wxT("†"), true);
+ strDecodedHtml.Replace(wxT("‡"), wxT("‡"), true);
+ strDecodedHtml.Replace(wxT("Š"), wxT("Š"), true);
+ strDecodedHtml.Replace(wxT("Œ"), wxT("Œ"), true);
+ strDecodedHtml.Replace(wxT("‘"), wxT("‘"), true);
+ strDecodedHtml.Replace(wxT("’"), wxT("’"), true);
+ strDecodedHtml.Replace(wxT("“"), wxT("“"), true);
+ strDecodedHtml.Replace(wxT("”"), wxT("”"), true);
+ strDecodedHtml.Replace(wxT("•"), wxT("•"), true);
+ strDecodedHtml.Replace(wxT("–"), wxT("–"), true);
+ strDecodedHtml.Replace(wxT("—"), wxT("—"), true);
+ strDecodedHtml.Replace(wxT("˜"), wxT("˜˜~"), true);
+ strDecodedHtml.Replace(wxT("™"), wxT("™"), true);
+ strDecodedHtml.Replace(wxT("š"), wxT("š"), true);
+ strDecodedHtml.Replace(wxT("œ"), wxT("œ"), true);
+ strDecodedHtml.Replace(wxT("Ÿ"), wxT("Ÿ"), true);
+ strDecodedHtml.Replace(wxT("¡"), wxT("¡"), true);
+ strDecodedHtml.Replace(wxT("¢"), wxT("¢"), true);
+ strDecodedHtml.Replace(wxT("£"), wxT("£"), true);
+ strDecodedHtml.Replace(wxT("¤"), wxT("¤"), true);
+ strDecodedHtml.Replace(wxT("¥"), wxT("¥"), true);
+ strDecodedHtml.Replace(wxT("¦"), wxT("¦"), true);
+ strDecodedHtml.Replace(wxT("§"), wxT("§"), true);
+ strDecodedHtml.Replace(wxT("¨"), wxT("¨"), true);
+ strDecodedHtml.Replace(wxT("©"), wxT("©"), true);
+ strDecodedHtml.Replace(wxT("ª"), wxT("ª"), true);
+ strDecodedHtml.Replace(wxT("«"), wxT("«"), true);
+ strDecodedHtml.Replace(wxT("¬"), wxT("¬"), true);
+ strDecodedHtml.Replace(wxT("®"), wxT("®"), true);
+ strDecodedHtml.Replace(wxT("¯"), wxT("¯"), true);
+ strDecodedHtml.Replace(wxT("°"), wxT("°"), true);
+ strDecodedHtml.Replace(wxT("±"), wxT("±"), true);
+ strDecodedHtml.Replace(wxT("²"), wxT("²"), true);
+ strDecodedHtml.Replace(wxT("³"), wxT("³"), true);
+ strDecodedHtml.Replace(wxT("´"), wxT("´"), true);
+ strDecodedHtml.Replace(wxT("µ"), wxT("µ"), true);
+ strDecodedHtml.Replace(wxT("¶"), wxT("¶"), true);
+ strDecodedHtml.Replace(wxT("·"), wxT("·"), true);
+ strDecodedHtml.Replace(wxT("¸"), wxT("¸"), true);
+ strDecodedHtml.Replace(wxT("¹"), wxT("¹"), true);
+ strDecodedHtml.Replace(wxT("º"), wxT("º"), true);
+ strDecodedHtml.Replace(wxT("»"), wxT("»"), true);
+ strDecodedHtml.Replace(wxT("¼"), wxT("¼"), true);
+ strDecodedHtml.Replace(wxT("½"), wxT("½"), true);
+ strDecodedHtml.Replace(wxT("¾"), wxT("¾"), true);
+ strDecodedHtml.Replace(wxT("¿"), wxT("¿"), true);
+ strDecodedHtml.Replace(wxT("À"), wxT("À"), true);
+ strDecodedHtml.Replace(wxT("Á"), wxT("Á"), true);
+ strDecodedHtml.Replace(wxT("Â"), wxT("Â"), true);
+ strDecodedHtml.Replace(wxT("Ã"), wxT("Ã"), true);
+ strDecodedHtml.Replace(wxT("Ä"), wxT("Ä"), true);
+ strDecodedHtml.Replace(wxT("Å"), wxT("Å"), true);
+ strDecodedHtml.Replace(wxT("Æ"), wxT("Æ"), true);
+ strDecodedHtml.Replace(wxT("Ç"), wxT("Ç"), true);
+ strDecodedHtml.Replace(wxT("È"), wxT("È"), true);
+ strDecodedHtml.Replace(wxT("É"), wxT("É"), true);
+ strDecodedHtml.Replace(wxT("Ê"), wxT("Ê"), true);
+ strDecodedHtml.Replace(wxT("Ë"), wxT("Ë"), true);
+ strDecodedHtml.Replace(wxT("Ì"), wxT("Ì"), true);
+ strDecodedHtml.Replace(wxT("Í"), wxT("Í"), true);
+ strDecodedHtml.Replace(wxT("Î"), wxT("Î"), true);
+ strDecodedHtml.Replace(wxT("Ï"), wxT("Ï"), true);
+ strDecodedHtml.Replace(wxT("Ð"), wxT("Ð"), true);
+ strDecodedHtml.Replace(wxT("Ñ"), wxT("Ñ"), true);
+ strDecodedHtml.Replace(wxT("Ò"), wxT("Ò"), true);
+ strDecodedHtml.Replace(wxT("Ó"), wxT("Ó"), true);
+ strDecodedHtml.Replace(wxT("Ô"), wxT("Ô"), true);
+ strDecodedHtml.Replace(wxT("Õ"), wxT("Õ"), true);
+ strDecodedHtml.Replace(wxT("Ö"), wxT("Ö"), true);
+ strDecodedHtml.Replace(wxT("×"), wxT("×"), true);
+ strDecodedHtml.Replace(wxT("Ø"), wxT("Ø"), true);
+ strDecodedHtml.Replace(wxT("Ù"), wxT("Ù"), true);
+ strDecodedHtml.Replace(wxT("Ú"), wxT("Ú"), true);
+ strDecodedHtml.Replace(wxT("Û"), wxT("Û"), true);
+ strDecodedHtml.Replace(wxT("Ü"), wxT("Ü"), true);
+ strDecodedHtml.Replace(wxT("Ý"), wxT("Ý"), true);
+ strDecodedHtml.Replace(wxT("Þ"), wxT("Þ"), true);
+ strDecodedHtml.Replace(wxT("ß"), wxT("ß"), true);
+ strDecodedHtml.Replace(wxT("à"), wxT("à"), true);
+ strDecodedHtml.Replace(wxT("á"), wxT("á"), true);
+ strDecodedHtml.Replace(wxT("â"), wxT("â"), true);
+ strDecodedHtml.Replace(wxT("ã"), wxT("ã"), true);
+ strDecodedHtml.Replace(wxT("ä"), wxT("ä"), true);
+ strDecodedHtml.Replace(wxT("å"), wxT("å"), true);
+ strDecodedHtml.Replace(wxT("æ"), wxT("æ"), true);
+ strDecodedHtml.Replace(wxT("ç"), wxT("ç"), true);
+ strDecodedHtml.Replace(wxT("è"), wxT("è"), true);
+ strDecodedHtml.Replace(wxT("é"), wxT("é"), true);
+ strDecodedHtml.Replace(wxT("ê"), wxT("ê"), true);
+ strDecodedHtml.Replace(wxT("ë"), wxT("ë"), true);
+ strDecodedHtml.Replace(wxT("ì"), wxT("ì"), true);
+ strDecodedHtml.Replace(wxT("í"), wxT("í"), true);
+ strDecodedHtml.Replace(wxT("î"), wxT("î"), true);
+ strDecodedHtml.Replace(wxT("ï"), wxT("ï"), true);
+ strDecodedHtml.Replace(wxT("ð"), wxT("ð"), true);
+ strDecodedHtml.Replace(wxT("ñ"), wxT("ñ"), true);
+ strDecodedHtml.Replace(wxT("ò"), wxT("ò"), true);
+ strDecodedHtml.Replace(wxT("ó"), wxT("ó"), true);
+ strDecodedHtml.Replace(wxT("ô"), wxT("ô"), true);
+ strDecodedHtml.Replace(wxT("õ"), wxT("õ"), true);
+ strDecodedHtml.Replace(wxT("ö"), wxT("ö"), true);
+ strDecodedHtml.Replace(wxT("÷"), wxT("÷"), true);
+ strDecodedHtml.Replace(wxT("ø"), wxT("ø"), true);
+ strDecodedHtml.Replace(wxT("ù"), wxT("ù"), true);
+ strDecodedHtml.Replace(wxT("ú"), wxT("ú"), true);
+ strDecodedHtml.Replace(wxT("û"), wxT("û"), true);
+ strDecodedHtml.Replace(wxT("ü"), wxT("ü"), true);
+ strDecodedHtml.Replace(wxT("ý"), wxT("ý"), true);
+ strDecodedHtml.Replace(wxT("þ"), wxT("þ"), true);
+ strDecodedHtml.Replace(wxT("ÿ"), wxT("ÿ"), true);
#endif
}
diff --git a/clientgui/BOINCBaseView.h b/clientgui/BOINCBaseView.h
index bcd9ec0..5ac6f52 100644
--- a/clientgui/BOINCBaseView.h
+++ b/clientgui/BOINCBaseView.h
@@ -22,19 +22,8 @@
#pragma interface "BOINCBaseView.cpp"
#endif
-#define BASEVIEW_STRIPES 1
-#define BASEVIEW_RULES 1
-
#define DEFAULT_TASK_FLAGS wxTAB_TRAVERSAL | wxADJUST_MINSIZE | wxFULL_REPAINT_ON_RESIZE
-
-#if BASEVIEW_RULES
-#define DEFAULT_LIST_SINGLE_SEL_FLAGS wxLC_REPORT | wxLC_VIRTUAL | wxLC_HRULES | wxLC_SINGLE_SEL
-#define DEFAULT_LIST_MULTI_SEL_FLAGS wxLC_REPORT | wxLC_VIRTUAL | wxLC_HRULES
-#else
-#define DEFAULT_LIST_SINGLE_SEL_FLAGS wxLC_REPORT | wxLC_VIRTUAL | wxLC_SINGLE_SEL
-#define DEFAULT_LIST_MULTI_SEL_FLAGS wxLC_REPORT | wxLC_VIRTUAL
-#endif
-
+#define DEFAULT_LIST_FLAGS wxLC_REPORT | wxLC_VIRTUAL | wxLC_HRULES
class CBOINCTaskCtrl;
class CBOINCListCtrl;
@@ -68,15 +57,8 @@ public:
CTaskItemGroup( wxString strName ) :
m_strName(strName), m_pStaticBox(NULL), m_pStaticBoxSizer(NULL) {
m_Tasks.clear();
-#ifdef __WXMAC__
- m_pTaskGroupAccessibilityEventHandlerRef = NULL;
-#endif
};
- ~CTaskItemGroup() {
-#ifdef __WXMAC__
- RemoveMacAccessibilitySupport();
-#endif
- };
+ ~CTaskItemGroup() {};
wxButton* button(int i) {return m_Tasks[i]->m_pButton;}
wxString m_strName;
@@ -85,14 +67,6 @@ public:
wxStaticBoxSizer* m_pStaticBoxSizer;
std::vector<CTaskItem*> m_Tasks;
-
-#ifdef __WXMAC__
- void SetupMacAccessibilitySupport();
- void RemoveMacAccessibilitySupport();
-
-private:
- EventHandlerRef m_pTaskGroupAccessibilityEventHandlerRef;
-#endif
};
typedef bool (*ListSortCompareFunc)(int, int);
@@ -136,9 +110,6 @@ public:
void FireOnListDeselected( wxListEvent& event );
wxString FireOnListGetItemText( long item, long column ) const;
int FireOnListGetItemImage( long item ) const;
-#if BASEVIEW_STRIPES
- wxListItemAttr* FireOnListGetItemAttr( long item ) const;
-#endif
int GetProgressColumn() { return m_iProgressColumn; }
virtual double GetProgressValue(long item);
@@ -154,6 +125,7 @@ public:
#ifdef __WXMAC__
CBOINCListCtrl* GetListCtrl() { return m_pListPane; }
+ void OnKeyPressed(wxKeyEvent &event);
#endif
std::vector<CTaskItemGroup*> m_TaskGroups;
@@ -211,13 +183,6 @@ protected:
static wxString HtmlEntityEncode(wxString strRaw);
static wxString HtmlEntityDecode(wxString strRaw);
-#if BASEVIEW_STRIPES
- virtual wxListItemAttr* OnListGetItemAttr( long item ) const;
-
- wxListItemAttr* m_pWhiteBackgroundAttr;
- wxListItemAttr* m_pGrayBackgroundAttr;
-#endif
-
bool m_bProcessingTaskRenderEvent;
bool m_bProcessingListRenderEvent;
diff --git a/clientgui/BOINCBaseWizard.cpp b/clientgui/BOINCBaseWizard.cpp
index c86ebec..a537a0d 100644
--- a/clientgui/BOINCBaseWizard.cpp
+++ b/clientgui/BOINCBaseWizard.cpp
@@ -95,6 +95,7 @@ void CBOINCBaseWizard::ProcessCancelEvent( wxWizardExEvent& event )
void CBOINCBaseWizard::_ProcessCancelEvent( wxWizardExEvent& WXUNUSED(event) )
{
+ m_bCancelInProgress = true;
}
/*!
diff --git a/clientgui/BOINCBitmapComboBox.cpp b/clientgui/BOINCBitmapComboBox.cpp
deleted file mode 100644
index b48c537..0000000
--- a/clientgui/BOINCBitmapComboBox.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#include "stdwx.h"
-#include "BOINCBitmapComboBox.h"
-
-// On Windows, wxBitmapComboBox loses an item's clientData when
-// another item is inserted in front of it. This subclass works
-// around that bug by keeping the clientData separately.
-
-IMPLEMENT_DYNAMIC_CLASS(CBOINCBitmapComboBox, wxBitmapComboBox)
-
-CBOINCBitmapComboBox::CBOINCBitmapComboBox() {}
-
-CBOINCBitmapComboBox::CBOINCBitmapComboBox(wxWindow *parent, wxWindowID id,
- const wxString& value,
- const wxPoint& pos,
- const wxSize& size,
- int n, const wxString choices[],
- long style,
- const wxValidator& validator,
- const wxString& name
- ) :
- wxBitmapComboBox(parent, id, value, pos, size, n,
- choices, style, validator, name
- )
-{
- int i;
-
- for (i=0; i<n; ++i) {
- m_pClientData.push_back(NULL);
- }
-}
-
-CBOINCBitmapComboBox::~CBOINCBitmapComboBox() {
- Clear();
-}
-
-void * CBOINCBitmapComboBox::GetClientData(unsigned int n) const {
- if (n < GetCount()) {
- return m_pClientData[n];
- }
- else {
- return NULL;
- }
-}
-
-
-void CBOINCBitmapComboBox::SetClientData(unsigned int n, void *data) {
- if (n < GetCount()) {
- m_pClientData[n] = data;
- }
-}
-
-
-int CBOINCBitmapComboBox::Append(const wxString& item, const wxBitmap& bitmap) {
- m_pClientData.push_back(NULL);
- int n = wxBitmapComboBox::Append(item, bitmap);
- return n;
-}
-
-
-int CBOINCBitmapComboBox::Append(const wxString& item, const wxBitmap& bitmap, void *clientData) {
- m_pClientData.push_back(clientData);
- int n = wxBitmapComboBox::Append(item, bitmap);
- return n;
-}
-
-
-int CBOINCBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap, unsigned int pos) {
- std::vector<void*>::iterator insertionPoint = m_pClientData.begin();
- m_pClientData.insert(insertionPoint + pos, (void*)NULL);
- int n = wxBitmapComboBox::Insert(item, bitmap, pos);
- return n;
-}
-
-
-int CBOINCBitmapComboBox::Insert(const wxString& item, const wxBitmap& bitmap, unsigned int pos, void *clientData) {
- std::vector<void*>::iterator insertionPoint = m_pClientData.begin();
- m_pClientData.insert(insertionPoint + pos, clientData);
- int n = wxBitmapComboBox::Insert(item, bitmap, pos);
- return n;
-}
-
-
-void CBOINCBitmapComboBox::Delete(unsigned int n) {
- if (n < GetCount()) {
- // Caller must have already deleted the data and set the pointer to NULL
- wxASSERT(!m_pClientData[n]);
- std::vector<void*>::iterator deletionPoint = m_pClientData.begin();
- m_pClientData.erase(deletionPoint + n);
- }
-
- wxBitmapComboBox::Delete(n);
-// Refresh();
-}
-
-
-void CBOINCBitmapComboBox::Clear() {
- int count = GetCount();
- for(int j = count-1; j >=0; --j) {
- // Caller must have already deleted the data and set the pointer to NULL
- wxASSERT(!m_pClientData[j]);
- m_pClientData[j] = NULL;
- }
- m_pClientData.clear();
- wxBitmapComboBox::Clear();
-}
diff --git a/clientgui/BOINCBitmapComboBox.h b/clientgui/BOINCBitmapComboBox.h
deleted file mode 100644
index fef3856..0000000
--- a/clientgui/BOINCBitmapComboBox.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef __BOINCBITMAPCOMBOBOX__
-#define __BOINCBITMAPCOMBOBOX__
-
-#include <wx/bmpcbox.h>
-
-#define EVT_BOINCBITMAPCOMBOBOX EVT_COMBOBOX
-
-// TODO: Subclass CBOINCBitmapComboBox to be accessible on Windows.
-// Either:
-// Add WxBitmapComboBoxAccessible class (like CNoticeListCtrlAccessible
-// for CNoticeListCtrl)
-// or
-// simulate bitmap combo box using accessible standard Windows controls
-// (as done for CBOINCBitmapComboBox on Mac)
-// TODO: Add wx/bmpcbox.h to stdwx.h
-
-class CBOINCBitmapComboBox : public wxBitmapComboBox
-{
- DECLARE_DYNAMIC_CLASS( CBOINCBitmapComboBox )
-
-public:
- CBOINCBitmapComboBox();
-
- virtual ~CBOINCBitmapComboBox();
-
- CBOINCBitmapComboBox(wxWindow *parent, wxWindowID id,
- const wxString& value = wxT(""),
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- int n = 0, const wxString choices[] = NULL,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxT("combo"));
-
- void * GetClientData(unsigned int n) const;
- void SetClientData(unsigned int n, void *data);
- int Append(const wxString& item);
- int Append(const wxString& item, const wxBitmap& bitmap);
- int Append(const wxString& item, const wxBitmap& bitmap, void *clientData);
- int Insert(const wxString& item, const wxBitmap& bitmap, unsigned int pos);
- int Insert(const wxString& item, const wxBitmap& bitmap, unsigned int pos, void *clientData);
- void Delete(unsigned int n);
- void Clear();
-
-private:
- std::vector<void*> m_pClientData;
-};
-
-#endif //__BOINCBITMAPCOMBOBOX__
diff --git a/clientgui/BOINCClientManager.cpp b/clientgui/BOINCClientManager.cpp
index 7d027c8..c7e9e1a 100644
--- a/clientgui/BOINCClientManager.cpp
+++ b/clientgui/BOINCClientManager.cpp
@@ -157,9 +157,7 @@ bool CBOINCClientManager::IsBOINCCoreRunning() {
} else {
// Global mutex on Win2k and later
//
- if (IsWindows2000Compatible()) {
- safe_strcpy(buf, "Global\\");
- }
+ safe_strcpy(buf, "Global\\");
strcat( buf, RUN_MUTEX);
HANDLE h = CreateMutexA(NULL, true, buf);
@@ -222,12 +220,13 @@ bool CBOINCClientManager::StartupBOINCCore() {
bool bReturnValue = false;
wxString strExecute = wxEmptyString;
+ wxString strDataDir = wxEmptyString;
if (IsBOINCCoreRunning()) return true;
#if defined(__WXMSW__)
- LPTSTR szExecute = NULL;
- LPTSTR szDataDirectory = NULL;
+ const char* pszExecute = NULL;
+ const char* pszDataDirectory = NULL;
if (IsBOINCConfiguredAsDaemon()) {
start_daemon_via_daemonctrl();
@@ -238,13 +237,13 @@ bool CBOINCClientManager::StartupBOINCCore() {
// Append boinc.exe to the end of the strExecute string and get ready to rock
strExecute.Printf(
- wxT("\"%s\\boinc.exe\" --redirectio --launched_by_manager %s"),
+ wxT("\"%sboinc.exe\" --redirectio --launched_by_manager %s"),
wxGetApp().GetRootDirectory().c_str(),
wxGetApp().GetArguments().c_str()
);
PROCESS_INFORMATION pi;
- STARTUPINFO si;
+ STARTUPINFOA si;
BOOL bProcessStarted;
memset(&pi, 0, sizeof(pi));
@@ -254,25 +253,26 @@ bool CBOINCClientManager::StartupBOINCCore() {
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
- szExecute = (LPTSTR)strExecute.c_str();
+ pszExecute = (const char*)strExecute.mb_str();
if (wxGetApp().GetDataDirectory().empty()) {
- szDataDirectory = NULL;
+ pszDataDirectory = NULL;
} else {
- szDataDirectory = (LPTSTR)wxGetApp().GetDataDirectory().c_str();
+ strDataDir = wxGetApp().GetDataDirectory();
+ pszDataDirectory = (const char*)strDataDir.mb_str();
}
- wxLogTrace(wxT("Function Status"), wxT("CMainDocument::StartupBOINCCore - szExecute '%s'\n"), szExecute);
- wxLogTrace(wxT("Function Status"), wxT("CMainDocument::StartupBOINCCore - szDataDirectory '%s'\n"), szDataDirectory);
+ wxLogTrace(wxT("Function Status"), wxT("CMainDocument::StartupBOINCCore - pszExecute '%s'\n"), pszExecute);
+ wxLogTrace(wxT("Function Status"), wxT("CMainDocument::StartupBOINCCore - pszDataDirectory '%s'\n"), pszDataDirectory);
- bProcessStarted = CreateProcess(
+ bProcessStarted = CreateProcessA(
NULL,
- szExecute,
+ (LPSTR)pszExecute,
NULL,
NULL,
FALSE,
CREATE_NEW_PROCESS_GROUP|CREATE_NO_WINDOW,
NULL,
- szDataDirectory,
+ (LPSTR)pszDataDirectory,
&si,
&pi
);
@@ -446,9 +446,9 @@ void CBOINCClientManager::KillClient() {
PROC_MAP::iterator i;
for (i=pm.begin(); i!=pm.end(); i++) {
- PROCINFO& pi = i->second;
- if (!strcmp(pi.command, "boinc")) {
- kill_program(pi.id);
+ PROCINFO& procinfo = i->second;
+ if (!strcmp(procinfo.command, "boinc")) {
+ kill_program(procinfo.id);
break;
}
}
diff --git a/clientgui/BOINCGUIApp.cpp b/clientgui/BOINCGUIApp.cpp
index 2753679..2cbc4da 100644
--- a/clientgui/BOINCGUIApp.cpp
+++ b/clientgui/BOINCGUIApp.cpp
@@ -38,8 +38,6 @@
#include "parse.h"
#include "idlemon.h"
#include "Events.h"
-#include "common/wxFlatNotebook.h"
-#include "BOINCInternetFSHandler.h"
#include "LogBOINC.h"
#include "BOINCGUIApp.h"
#include "SkinManager.h"
@@ -54,62 +52,82 @@
#include "sg_BoincSimpleFrame.h"
-DEFINE_EVENT_TYPE(wxEVT_RPC_FINISHED)
-
-IMPLEMENT_APP(CBOINCGUIApp)
-IMPLEMENT_DYNAMIC_CLASS(CBOINCGUIApp, wxApp)
-
-BEGIN_EVENT_TABLE (CBOINCGUIApp, wxApp)
- EVT_ACTIVATE_APP(CBOINCGUIApp::OnActivateApp)
- EVT_RPC_FINISHED(CBOINCGUIApp::OnRPCFinished)
-#if (defined(__WXMSW__) && !wxCHECK_VERSION(2, 9, 4))
- EVT_END_SESSION(CBOINCGUIApp::OnEndSession)
-#endif
-END_EVENT_TABLE ()
-
bool s_bSkipExitConfirmation = false;
#ifdef __WXMAC__
// Set s_bSkipExitConfirmation to true if cancelled because of logging out or shutting down
OSErr QuitAppleEventHandler( const AppleEvent *appleEvt, AppleEvent* reply, UInt32 refcon ) {
- DescType senderType;
- Size actualSize;
- ProcessSerialNumber SenderPSN;
- ProcessInfoRec pInfo;
- FSSpec fileSpec;
- OSStatus anErr;
-
- // Refuse to quit if a modal dialog is open.
- // Unfortunately, I know of no way to disable the Quit item in our Dock menu
- if (wxGetApp().IsModalDialogDisplayed()) {
- SysBeep(4);
- return userCanceledErr;
- }
-
- anErr = AEGetAttributePtr(appleEvt, keyAddressAttr, typeProcessSerialNumber,
- &senderType, &SenderPSN, sizeof(SenderPSN), &actualSize);
+ DescType senderType;
+ Size actualSize;
+ ProcessSerialNumber SenderPSN;
+ ProcessInfoRec pInfo;
+ FSSpec fileSpec;
+ OSStatus anErr;
+
+ // Refuse to quit if a modal dialog is open.
+ // Unfortunately, I know of no way to disable the Quit item in our Dock menu
+ if (wxGetApp().IsModalDialogDisplayed()) {
+ SysBeep(4);
+ return userCanceledErr;
+ }
+
+ anErr = AEGetAttributePtr(appleEvt, keyAddressAttr, typeProcessSerialNumber,
+ &senderType, &SenderPSN, sizeof(SenderPSN), &actualSize);
- if (anErr == noErr) {
- pInfo.processInfoLength = sizeof( ProcessInfoRec );
- pInfo.processName = NULL;
- pInfo.processAppSpec = &fileSpec;
+ if (anErr == noErr) {
+ pInfo.processInfoLength = sizeof( ProcessInfoRec );
+ pInfo.processName = NULL;
+ pInfo.processAppSpec = &fileSpec;
- anErr = GetProcessInformation(&SenderPSN, &pInfo);
+ anErr = GetProcessInformation(&SenderPSN, &pInfo);
- // Consider a Quit command from our Dock menu as coming from this application
- if ( (pInfo.processSignature != 'dock') && (pInfo.processSignature != 'BNC!') ) {
- s_bSkipExitConfirmation = true; // Not from our app, our dock icon or our taskbar icon
- wxGetApp().ExitMainLoop(); // Prevents wxMac from issuing events to closed frames
- }
+ // Consider a Quit command from our Dock menu as coming from this application
+ if ( (pInfo.processSignature != 'dock') && (pInfo.processSignature != 'BNC!') ) {
+ s_bSkipExitConfirmation = true; // Not from our app, our dock icon or our taskbar icon
+ // The following may no longer be needed under wxCocoa-3.0.0
+ wxGetApp().ExitMainLoop(); // Prevents wxMac from issuing events to closed frames
}
+ }
- return wxGetApp().MacHandleAEQuit((AppleEvent*)appleEvt, reply);
+ wxCommandEvent evt(wxEVT_COMMAND_MENU_SELECTED, wxID_EXIT);
+ wxGetApp().GetFrame()->GetEventHandler()->AddPendingEvent(evt);
+ return noErr;
}
#endif
+void BOINCAssertHandler(const wxString &file, int line, const wxString &func, const wxString &cond, const wxString &msg) {
+ wxLogTrace(
+ wxT("Assert"),
+ wxT("ASSERT: %s:%d - %s - %s - %s"),
+ file.IsEmpty() ? wxT("<NULL>") : file.c_str(),
+ line,
+ func.IsEmpty() ? wxT("<NULL>") : func.c_str(),
+ cond.IsEmpty() ? wxT("<NULL>") : cond.c_str(),
+ msg.IsEmpty() ? wxT("<NULL>") : msg.c_str()
+ );
+
+ if (wxIsDebuggerRunning()) {
+ wxTrap();
+ }
+}
+
+
+DEFINE_EVENT_TYPE(wxEVT_RPC_FINISHED)
+
+IMPLEMENT_APP(CBOINCGUIApp)
+IMPLEMENT_DYNAMIC_CLASS(CBOINCGUIApp, wxApp)
+
+BEGIN_EVENT_TABLE (CBOINCGUIApp, wxApp)
+ EVT_ACTIVATE_APP(CBOINCGUIApp::OnActivateApp)
+ EVT_RPC_FINISHED(CBOINCGUIApp::OnRPCFinished)
+#ifndef __WXMAC__
+ EVT_END_SESSION(CBOINCGUIApp::OnEndSession)
+#endif
+END_EVENT_TABLE ()
+
bool CBOINCGUIApp::OnInit() {
// Initialize globals
#ifdef SANDBOX
@@ -120,8 +138,10 @@ bool CBOINCGUIApp::OnInit() {
s_bSkipExitConfirmation = false;
m_bFilterEvents = false;
+ m_bAboutDialogIsOpen = false;
// Initialize class variables
+ m_pInstanceChecker = NULL;
m_pLocale = NULL;
m_pSkinManager = NULL;
m_pFrame = NULL;
@@ -129,7 +149,7 @@ bool CBOINCGUIApp::OnInit() {
m_pTaskBarIcon = NULL;
m_pEventLog = NULL;
#ifdef __WXMAC__
- m_pMacSystemMenu = NULL;
+ m_pMacDockIcon = NULL;
#endif
m_strBOINCMGRExecutableName = wxEmptyString;
m_strBOINCMGRRootDirectory = wxEmptyString;
@@ -148,9 +168,6 @@ bool CBOINCGUIApp::OnInit() {
m_iDisplayExitDialog = 1;
m_iGUISelected = BOINC_SIMPLEGUI;
m_bSafeMessageBoxDisplayed = 0;
-#ifdef __WXMSW__
- m_hClientLibraryDll = NULL;
-#endif
// Initialize local variables
int iErrorCode = 0;
@@ -160,6 +177,12 @@ bool CBOINCGUIApp::OnInit() {
wxString strDialogMessage = wxEmptyString;
bool success = false;
+
+#ifndef __WXMAC__
+ // call this to tell the library to call our OnFatalException()
+ wxHandleFatalExceptions();
+#endif
+
// Configure wxWidgets platform specific code
#ifdef __WXMSW__
wxSystemOptions::SetOption(wxT("msw.staticbox.optimized-paint"), 0);
@@ -242,26 +265,27 @@ bool CBOINCGUIApp::OnInit() {
// Initialize the BOINC Diagnostics Framework
int dwDiagnosticsFlags =
- BOINC_DIAG_DUMPCALLSTACKENABLED |
+#ifdef _DEBUG
BOINC_DIAG_HEAPCHECKENABLED |
BOINC_DIAG_MEMORYLEAKCHECKENABLED |
-#if defined(__WXMSW__) || defined(__WXMAC__)
+#endif
+ BOINC_DIAG_DUMPCALLSTACKENABLED |
+ BOINC_DIAG_PERUSERLOGFILES |
BOINC_DIAG_REDIRECTSTDERR |
BOINC_DIAG_REDIRECTSTDOUT |
-#endif
BOINC_DIAG_TRACETOSTDOUT;
- diagnostics_init(
- dwDiagnosticsFlags,
- "stdoutgui",
- "stderrgui"
- );
+ diagnostics_init(dwDiagnosticsFlags, "stdoutgui", "stderrgui");
+#ifdef _NDEBUG
+ wxSetAssertHandler(BOINCAssertHandler);
+#endif
// Enable Logging and Trace Masks
m_pLog = new wxLogBOINC();
wxLog::SetActiveTarget(m_pLog);
+ m_pLog->AddTraceMask(wxT("Assert"));
m_pLog->AddTraceMask(wxT("Function Start/End"));
m_pLog->AddTraceMask(wxT("Function Status"));
@@ -298,11 +322,6 @@ bool CBOINCGUIApp::OnInit() {
// Enable known image types
wxInitAllImageHandlers();
- // Enable additional file system type handlers
- wxFileSystem::AddHandler(new wxMemoryFSHandler);
- m_pInternetFSHandler = new CBOINCInternetFSHandler;
- wxFileSystem::AddHandler(m_pInternetFSHandler);
-
// Initialize the skin manager
m_pSkinManager = new CSkinManager(m_bDebugSkins);
wxASSERT(m_pSkinManager);
@@ -356,12 +375,9 @@ bool CBOINCGUIApp::OnInit() {
}
strDialogMessage += _(")");
- fprintf(stderr, "%ls ownership or permissions are not set properly; please reinstall %ls. (Error code %d%s%s)\n",
- m_pSkinManager->GetAdvanced()->GetApplicationShortName().c_str(),
- m_pSkinManager->GetAdvanced()->GetApplicationShortName().c_str(),
- iErrorCode, (path_to_error[0] ? " at " : ""), path_to_error
- );
+ fprintf(stderr, "%s\n", (const char*)strDialogMessage.utf8_str());
}
+
wxMessageDialog* pDlg = new wxMessageDialog(
NULL,
strDialogMessage,
@@ -399,10 +415,8 @@ bool CBOINCGUIApp::OnInit() {
// Detect if BOINC Manager is already running, if so, bring it into the
// foreground and then exit.
- if (!m_bMultipleInstancesOK) {
- if (DetectDuplicateInstance()) {
+ if (DetectDuplicateInstance()) {
return false;
- }
}
// Initialize the main document
@@ -427,21 +441,25 @@ bool CBOINCGUIApp::OnInit() {
m_pSkinManager->GetAdvanced()->GetApplicationIcon(),
m_pSkinManager->GetAdvanced()->GetApplicationDisconnectedIcon(),
m_pSkinManager->GetAdvanced()->GetApplicationSnoozeIcon()
+#ifdef __WXMAC__
+ , wxTBI_CUSTOM_STATUSITEM
+#endif
);
wxASSERT(m_pTaskBarIcon);
#ifdef __WXMAC__
- m_pMacSystemMenu = new CMacSystemMenu(
+ m_pMacDockIcon = new CTaskBarIcon(
m_pSkinManager->GetAdvanced()->GetApplicationName(),
m_pSkinManager->GetAdvanced()->GetApplicationIcon(),
m_pSkinManager->GetAdvanced()->GetApplicationDisconnectedIcon(),
m_pSkinManager->GetAdvanced()->GetApplicationSnoozeIcon()
+ , wxTBI_DOCK
);
- wxASSERT(m_pMacSystemMenu);
+ wxASSERT(m_pMacDockIcon);
#endif
// Startup the System Idle Detection code
IdleTrackerAttach();
-
+
#ifdef __WXMAC__
ProcessSerialNumber psn;
ProcessInfoRec pInfo;
@@ -460,44 +478,54 @@ bool CBOINCGUIApp::OnInit() {
if (pInfo.processSignature == 'lgnw') { // Login Window app
m_bGUIVisible = false;
- // If the system was just started, we usually get a "Connection
+ // If the system was just started, we usually get a "Connection
// failed" error if we try to connect too soon, so delay a bit.
sleep(10);
}
#endif
-
// Show the UI
- SetActiveGUI(m_iGUISelected, false);
- if (m_bGUIVisible) {
- SetActiveGUI(m_iGUISelected);
- } else {
+ SetActiveGUI(m_iGUISelected, m_bGUIVisible);
+
+ if (!m_bGUIVisible) {
ShowApplication(false);
}
-
- if(bOpenEventLog) {
+
+ if (bOpenEventLog) {
DisplayEventLog(m_bGUIVisible);
- m_pFrame->Raise();
+ if (m_bGUIVisible && m_pFrame) {
+ m_pFrame->Raise();
+ }
}
return true;
}
-
-#if (defined(__WXMSW__) && !wxCHECK_VERSION(2, 9, 4))
-// Work around a bug in wxWidgets 2.8.x which fails
-// to call OnExit() when Windows is shut down. This
-// is supposed to be fixed in wxWidgets 2.9.x.
+#ifdef __WXMAC__
+// We can "show" (unhide) the main window when the
+// application is hidden and it won't be visible.
+// If we don't do this under wxCocoa 3.0, the Dock
+// icon will bounce (as in notification) when we
+// click on our menu bar icon.
+// But wxFrame::Show(true) makes the application
+// visible again, so we instead call
+// m_pFrame->wxWindow::Show() here.
//
-void CBOINCGUIApp::OnEndSession(wxCloseEvent& ) {
- s_bSkipExitConfirmation = true;
-
- CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
- wxCommandEvent evt(wxEVT_COMMAND_MENU_SELECTED, wxID_EXIT);
- // The event loop has already been stopped,
- // so we must call OnExit directly
- pFrame->OnExit(evt);
- OnExit();
+// We need to call HideThisApp() after the event
+// loop is running, so this is called from
+// CBOINCBaseFrame::OnPeriodicRPC() at the first
+// firing of ID_PERIODICRPCTIMER.
+//
+void CBOINCGUIApp::OnFinishInit() {
+ if (!m_bGUIVisible) {
+ HideThisApp();
+
+ m_pFrame->wxWindow::Show();
+
+ if (m_pEventLog) {
+ m_pEventLog->wxWindow::Show();
+ }
+ }
}
#endif
@@ -506,6 +534,19 @@ int CBOINCGUIApp::OnExit() {
// Shutdown the System Idle Detection code
IdleTrackerDetach();
+// Under wxWidgets 2.8.0, the task bar icons
+// must be deleted for app to exit its main loop
+#ifdef __WXMAC__
+ if (m_pMacDockIcon) {
+ delete m_pMacDockIcon;
+ }
+ m_pMacDockIcon = NULL;
+#endif
+ if (m_pTaskBarIcon) {
+ delete m_pTaskBarIcon;
+ }
+ m_pTaskBarIcon = NULL;
+
if (m_pDocument) {
m_pDocument->OnExit();
delete m_pDocument;
@@ -530,12 +571,55 @@ int CBOINCGUIApp::OnExit() {
m_pEventLog = NULL;
}
+ if (m_pInstanceChecker) {
+ delete m_pInstanceChecker;
+ m_pInstanceChecker = NULL;
+ }
+
diagnostics_finish();
return wxApp::OnExit();
}
+#ifndef __WXMAC__
+// Ensure we shut down gracefully on Windows logout or shutdown
+void CBOINCGUIApp::OnEndSession(wxCloseEvent& ) {
+ s_bSkipExitConfirmation = true;
+
+ CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
+ wxCommandEvent evt(wxEVT_COMMAND_MENU_SELECTED, wxID_EXIT);
+ // The event loop has already been stopped,
+ // so we must call OnExit directly
+ pFrame->OnExit(evt);
+ OnExit();
+}
+
+
+void CBOINCGUIApp::OnFatalException() {
+#ifdef wxUSE_DEBUGREPORT
+ wxDebugReportCompress* report = new wxDebugReportCompress;
+
+ if (report->IsOk()) {
+ report->AddAll(wxDebugReport::Context_Exception);
+
+ if (report->Process())
+ {
+ fprintf(
+ stderr,
+ "ASSERT: Report generated in \"%s\".\n",
+ (const char*)report->GetCompressedFileName().mb_str()
+ );
+ report->Reset();
+ }
+ }
+
+ delete report;
+#endif
+}
+#endif
+
+
void CBOINCGUIApp::SaveState() {
// Save Application State
m_pConfig->SetPath(wxT("/"));
@@ -554,22 +638,22 @@ void CBOINCGUIApp::SaveState() {
void CBOINCGUIApp::OnInitCmdLine(wxCmdLineParser &parser) {
wxApp::OnInitCmdLine(parser);
static const wxCmdLineEntryDesc cmdLineDesc[] = {
- { wxCMD_LINE_SWITCH, wxT("a"), wxT("autostart"), _("BOINC Manager was started by the operating system automatically")},
+ { wxCMD_LINE_SWITCH, "a", "autostart", _("BOINC Manager was started by the operating system automatically")},
#if defined(__WXMSW__) || defined(__WXMAC__)
- { wxCMD_LINE_SWITCH, wxT("s"), wxT("systray"), _("Startup BOINC so only the system tray icon is visible")},
+ { wxCMD_LINE_SWITCH, "s", "systray", _("Startup BOINC so only the system tray icon is visible")},
#else
- { wxCMD_LINE_OPTION, wxT("e"), wxT("clientdir"), _("Directory containing the BOINC Client executable")},
- { wxCMD_LINE_OPTION, wxT("d"), wxT("datadir"), _("BOINC data directory")},
+ { wxCMD_LINE_OPTION, "e", "clientdir", _("Directory containing the BOINC Client executable")},
+ { wxCMD_LINE_OPTION, "d", "datadir", _("BOINC data directory")},
#endif
- { wxCMD_LINE_OPTION, wxT("n"), wxT("namehost"), _("Host name or IP address")},
- { wxCMD_LINE_OPTION, wxT("g"), wxT("gui_rpc_port"), _("GUI RPC port number")},
- { wxCMD_LINE_OPTION, wxT("p"), wxT("password"), _("Password")},
- { wxCMD_LINE_OPTION, wxT("b"), wxT("boincargs"), _("Startup BOINC with these optional arguments")},
- { wxCMD_LINE_SWITCH, wxT("i"), wxT("insecure"), _("disable BOINC security users and permissions")},
- { wxCMD_LINE_SWITCH, wxT("c"), wxT("checkskins"), _("set skin debugging mode to enable skin manager error messages")},
- { wxCMD_LINE_SWITCH, wxT("m"), wxT("multiple"), _("multiple instances of BOINC Manager allowed")},
+ { wxCMD_LINE_OPTION, "n", "namehost", _("Host name or IP address")},
+ { wxCMD_LINE_OPTION, "g", "gui_rpc_port", _("GUI RPC port number")},
+ { wxCMD_LINE_OPTION, "p", "password", _("Password")},
+ { wxCMD_LINE_OPTION, "b", "boincargs", _("Startup BOINC with these optional arguments")},
+ { wxCMD_LINE_SWITCH, "i","insecure", _("disable BOINC security users and permissions")},
+ { wxCMD_LINE_SWITCH, "c", "checkskins", _("set skin debugging mode to enable skin manager error messages")},
+ { wxCMD_LINE_SWITCH, "m", "multiple", _("multiple instances of BOINC Manager allowed")},
#if (defined(__WXMAC__) && defined(_DEBUG))
- { wxCMD_LINE_OPTION, wxT("NSDocumentRevisionsDebugMode"), NULL, _("Not used: workaround for bug in XCode 4.2")},
+ { wxCMD_LINE_OPTION, "NSDocumentRevisionsDebugMode", NULL, _("Not used: workaround for bug in XCode 4.2")},
#endif
{ wxCMD_LINE_NONE} //DON'T forget this line!!
};
@@ -654,24 +738,27 @@ bool CBOINCGUIApp::OnCmdLineParsed(wxCmdLineParser &parser) {
///
/// Detect if another instance of this application is running.
-// Returns true if there is, otherwise false
+// Returns true if there is and it is forbidden, otherwise false
+//
+// We must initialize m_pInstanceChecker even if m_bMultipleInstancesOK
+// is true so CMainDocument::OnPoll() can call IsMgrMultipleInstance().
///
bool CBOINCGUIApp::DetectDuplicateInstance() {
+#ifdef __WXMAC__
+ m_pInstanceChecker = new wxSingleInstanceChecker(
+ wxTheApp->GetAppName() + '-' + wxGetUserId(),
+ wxFileName::GetHomeDir() + "/Library/Application Support/BOINC"
+ );
+#else
+ m_pInstanceChecker = new wxSingleInstanceChecker();
+#endif
+ if (m_pInstanceChecker->IsAnotherRunning()) {
+ if (m_bMultipleInstancesOK) return false;
#ifdef __WXMSW__
- if (CTaskBarIcon::FireAppRestore()) {
- return true;
- }
+ CTaskBarIcon::FireAppRestore();
#endif
-#ifdef __WXMAC__
- ProcessSerialNumber PSN;
- int iInstanceID = wxGetApp().IsAnotherInstanceRunning();
- if (iInstanceID) {
- // Bring other instance to the front and exit this instance
- OSStatus err = GetProcessForPID(iInstanceID, &PSN);
- if (!err) SetFrontProcess(&PSN);
return true;
}
-#endif
return false;
}
@@ -728,8 +815,11 @@ void CBOINCGUIApp::DetectDataDirectory() {
//
LONG lReturnValue;
HKEY hkSetupHive;
- LPTSTR lpszRegistryValue = NULL;
- DWORD dwSize = 0;
+ TCHAR szPath[MAX_PATH];
+ LPTSTR lpszValue = NULL;
+ LPTSTR lpszExpandedValue = NULL;
+ DWORD dwValueType = REG_EXPAND_SZ;
+ DWORD dwSize = 0;
// change the current directory to the boinc data directory if it exists
lReturnValue = RegOpenKeyEx(
@@ -745,33 +835,56 @@ void CBOINCGUIApp::DetectDataDirectory() {
hkSetupHive,
_T("DATADIR"),
NULL,
- NULL,
+ &dwValueType,
NULL,
&dwSize
);
if (lReturnValue != ERROR_FILE_NOT_FOUND) {
// Allocate the buffer space.
- lpszRegistryValue = (LPTSTR) malloc(dwSize);
- (*lpszRegistryValue) = NULL;
+ lpszValue = (LPTSTR) malloc(dwSize);
+ (*lpszValue) = NULL;
// Now get the data
lReturnValue = RegQueryValueEx(
hkSetupHive,
_T("DATADIR"),
NULL,
- NULL,
- (LPBYTE)lpszRegistryValue,
+ &dwValueType,
+ (LPBYTE)lpszValue,
&dwSize
);
- // Store the root directory for later use.
- m_strBOINCMGRDataDirectory = lpszRegistryValue;
+ // Expand the Strings
+ // We need to get the size of the buffer needed
+ dwSize = 0;
+ lReturnValue = ExpandEnvironmentStrings(lpszValue, NULL, dwSize);
+
+ if (lReturnValue) {
+ // Make the buffer big enough for the expanded string
+ lpszExpandedValue = (LPTSTR) malloc(lReturnValue*sizeof(TCHAR));
+ (*lpszExpandedValue) = NULL;
+ dwSize = lReturnValue;
+
+ ExpandEnvironmentStrings(lpszValue, lpszExpandedValue, dwSize);
+
+ // Store the root directory for later use.
+ m_strBOINCMGRDataDirectory = lpszExpandedValue;
+ }
+ }
+ } else {
+ if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA|CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, szPath))) {
+ _tcsncat(szPath, _T("\\boinc"), ((sizeof(szPath)/sizeof(TCHAR)) - _tcslen(szPath)));
+ if (wxDir::Exists(szPath)) {
+ // Store the root directory for later use.
+ m_strBOINCMGRDataDirectory = szPath;
+ }
}
}
// Cleanup
if (hkSetupHive) RegCloseKey(hkSetupHive);
- if (lpszRegistryValue) free(lpszRegistryValue);
+ if (lpszValue) free(lpszValue);
+ if (lpszExpandedValue) free(lpszExpandedValue);
#endif
#ifdef __WXMAC__
m_strBOINCMGRDataDirectory = wxT("/Library/Application Support/BOINC Data");
@@ -829,7 +942,12 @@ void CBOINCGUIApp::OnActivateApp(wxActivateEvent& event) {
if (m_pEventLog && !m_pEventLog->IsIconized()) {
m_pEventLog->Raise();
}
- if (m_pFrame) m_pFrame->Raise();
+ if (m_pFrame) {
+ m_pFrame->Raise();
+ }
+#ifdef __WXMAC__
+ ShowInterface();
+#endif
}
event.Skip();
}
@@ -897,7 +1015,7 @@ void CBOINCGUIApp::DisplayEventLog(bool bShowWindow) {
} else {
m_pEventLog = new CDlgEventLog();
if (m_pEventLog) {
- m_pEventLog->Show(bShowWindow);
+ m_pEventLog->Show(bShowWindow);
if (bShowWindow) {
m_pEventLog->Raise();
}
@@ -944,7 +1062,7 @@ bool CBOINCGUIApp::SetActiveGUI(int iGUISelection, bool bShowWindow) {
// Create the new window
if ((iGUISelection != m_iGUISelected) || !m_pFrame) {
- // Reterieve the desired window state before creating the
+ // Retrieve the desired window state before creating the
// desired frames
if (BOINC_ADVANCEDGUI == iGUISelection) {
m_pConfig->SetPath(wxT("/"));
@@ -1160,60 +1278,8 @@ int CBOINCGUIApp::SafeMessageBox(const wxString& message, const wxString& captio
}
-///
-/// Determines if another instance of BOINC Manager is running.
-///
-/// @return
-/// true if another instance of BOINC Manager is running, otherwise false.
-///
-/// Note: will always return false on Win95, Win98, WinME
-///
-int CBOINCGUIApp::IsAnotherInstanceRunning() {
- PROC_MAP pm;
- int retval;
- char myName[256];
- int otherInstanceID = 0;
- int myPid;
-
- // Look for BOINC Manager in list of all running processes
- retval = procinfo_setup(pm);
- if (retval) return false; // Should never happen
-
-#ifdef _WIN32
- myPid = (int)GetCurrentProcessId();
-#else
- myPid = getpid();
-#endif
-
- // Get the name of this Application
- myName[0] = 0;
- PROC_MAP::iterator i;
- for (i=pm.begin(); i!=pm.end(); i++) {
- PROCINFO& pi = i->second;
- if (pi.id == myPid) {
- strncpy(myName, pi.command, sizeof(myName));
- break;
- }
- }
-
- if (myName[0] == 0) {
- return false; // Should never happen
- }
-
- // Search process list for other applications with same name
- for (i=pm.begin(); i!=pm.end(); i++) {
- PROCINFO& pi = i->second;
- if (pi.id == myPid) continue;
- if (!strcmp(pi.command, myName)) {
- otherInstanceID = pi.id;
- break;
- }
- }
-
- return otherInstanceID;
-}
-
-
+#ifndef __WXMAC__
+// See clientgui/mac/BOINCGUIApp.mm for the Mac versions.
///
/// Determines if the current process is visible.
///
@@ -1221,11 +1287,6 @@ int CBOINCGUIApp::IsAnotherInstanceRunning() {
/// true if the current process is visible, otherwise false.
///
bool CBOINCGUIApp::IsApplicationVisible() {
-#ifdef __WXMAC__
- if (IsProcessVisible(&m_psnCurrentProcess)) {
- return true;
- }
-#endif
return false;
}
@@ -1235,21 +1296,13 @@ bool CBOINCGUIApp::IsApplicationVisible() {
/// @param bShow
/// true will show the process, false will hide the process.
///
-#ifdef __WXMAC__
-void CBOINCGUIApp::ShowApplication(bool bShow) {
- if (bShow) {
- SetFrontProcess(&m_psnCurrentProcess);
- } else {
- ShowHideProcess(&m_psnCurrentProcess, false);
- }
-}
-#else
void CBOINCGUIApp::ShowApplication(bool) {
}
#endif
bool CBOINCGUIApp::ShowInterface() {
+ ShowApplication(true);
return SetActiveGUI(m_iGUISelected, true);
}
@@ -1284,23 +1337,6 @@ bool CBOINCGUIApp::IsModalDialogDisplayed() {
return false;
}
-void CBOINCGUIApp::DeleteTaskBarIcon() {
- if (m_pTaskBarIcon) {
- delete m_pTaskBarIcon;
- }
- m_pTaskBarIcon = NULL;
-}
-
-#ifdef __WXMAC__
-void CBOINCGUIApp::DeleteMacSystemMenu() {
- if (m_pMacSystemMenu) {
- delete m_pMacSystemMenu;
- }
- m_pMacSystemMenu = NULL;
-}
-#endif
-
-
// Prevent recursive entry of CMainDocument::RequestRPC()
int CBOINCGUIApp::FilterEvent(wxEvent &event) {
int theEventType;
diff --git a/clientgui/BOINCGUIApp.h b/clientgui/BOINCGUIApp.h
index fbea122..79e6370 100644
--- a/clientgui/BOINCGUIApp.h
+++ b/clientgui/BOINCGUIApp.h
@@ -28,10 +28,6 @@
#pragma interface "BOINCGUIApp.cpp"
#endif
-#ifdef __WXMAC__
-#include "mac/MacSysMenu.h" // Must be included before MainDocument.h
-#endif
-
///
/// Which view is on display
///
@@ -54,8 +50,10 @@ class CBOINCGUIApp : public wxApp {
protected:
int OnExit();
-#if (defined(__WXMSW__) && !wxCHECK_VERSION(2, 9, 4))
+#ifndef __WXMAC__
void OnEndSession(wxCloseEvent& event);
+
+ void OnFatalException();
#endif
void OnInitCmdLine(wxCmdLineParser &parser);
@@ -74,6 +72,7 @@ protected:
wxConfig* m_pConfig;
wxLocale* m_pLocale;
wxLogBOINC* m_pLog;
+ wxSingleInstanceChecker* m_pInstanceChecker;
CSkinManager* m_pSkinManager;
CBOINCBaseFrame* m_pFrame;
@@ -81,10 +80,8 @@ protected:
CTaskBarIcon* m_pTaskBarIcon;
CDlgEventLog* m_pEventLog;
#ifdef __WXMAC__
- CMacSystemMenu* m_pMacSystemMenu;
+ CTaskBarIcon* m_pMacDockIcon;
#endif
- wxFileSystemHandler* m_pInternetFSHandler;
-
wxString m_strBOINCMGRExecutableName;
wxString m_strBOINCMGRRootDirectory;
wxString m_strBOINCMGRDataDirectory;
@@ -104,10 +101,8 @@ protected:
bool m_bDebugSkins;
bool m_bMultipleInstancesOK;
bool m_bFilterEvents;
+ bool m_bAboutDialogIsOpen;
-#ifdef __WXMSW__
- HINSTANCE m_hClientLibraryDll;
-#endif
#ifdef __WXMAC__
ProcessSerialNumber m_psnCurrentProcess;
#endif
@@ -138,13 +133,13 @@ public:
int GetClientRPCPortArg() { return m_iRPCPortArg; }
CDlgEventLog* GetEventLog() { return m_pEventLog; }
CTaskBarIcon* GetTaskBarIcon() { return m_pTaskBarIcon; }
- void DeleteTaskBarIcon();
+ bool IsAnotherInstanceRunning() { return m_pInstanceChecker->IsAnotherRunning(); }
bool IsMgrMultipleInstance() { return m_bMultipleInstancesOK; }
#ifdef __WXMAC__
- CMacSystemMenu* GetMacSystemMenu() { return m_pMacSystemMenu; }
- void DeleteMacSystemMenu();
+ void OnFinishInit();
+ CTaskBarIcon* GetMacDockIcon() { return m_pMacDockIcon; }
int ShouldShutdownCoreClient() { return true; }
#else
int ShouldShutdownCoreClient() { return m_iShutdownCoreClient; }
@@ -164,8 +159,6 @@ public:
wxArrayString& GetSupportedLanguages() { return m_astrLanguages; }
wxString GetISOLanguageCode() { return m_strISOLanguageCode; }
- wxFileSystemHandler* GetInternetFSHandler() { return m_pInternetFSHandler; }
-
void DisplayEventLog(bool bShowWindow = true);
void OnEventLogClose();
@@ -191,7 +184,6 @@ public:
int y = wxDefaultCoord
);
- int IsAnotherInstanceRunning();
bool IsApplicationVisible();
void ShowApplication(bool bShow);
bool ShowInterface();
@@ -206,6 +198,26 @@ public:
int UpdateSystemIdleDetection();
void SetEventFiltering(bool set) { m_bFilterEvents = set; }
+
+ void SetAboutDialogIsOpen(bool set) { m_bAboutDialogIsOpen = set; }
+ bool GetAboutDialogIsOpen() { return m_bAboutDialogIsOpen; }
+
+#ifdef __WXMAC__
+ // The following Cocoa routines are in CBOINCGUIApp.mm
+ //
+ void HideThisApp(void);
+
+#if !wxCHECK_VERSION(3,0,0)
+// This should be fixed after wxCocoa 3.0.0:
+// http://trac.wxwidgets.org/ticket/16156
+
+ // Override standard wxCocoa wxApp::CallOnInit() to allow Manager
+ // to run properly when launched hidden on login via Login Item.
+ bool CallOnInit();
+#endif
+
+ void CheckPartialActivation();
+#endif
DECLARE_EVENT_TABLE()
};
diff --git a/clientgui/BOINCGUIApp.rc b/clientgui/BOINCGUIApp.rc
index 044bfc4..619ebbb 100644
--- a/clientgui/BOINCGUIApp.rc
+++ b/clientgui/BOINCGUIApp.rc
@@ -1,6 +1,5 @@
// Microsoft Visual C++ generated resource script.
//
-#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
@@ -55,25 +54,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#if defined(_GRIDREPUBLIC)
boinc ICON "res\\gridrepublic.ico"
-boincdisconnect ICON "res\\boincdisconnect.ico"
-boincsnooze ICON "res\\boincsnooze.ico"
#elif defined(_PROGRESSTHRUPROCESSORS)
boinc ICON "res\\progress.ico"
-boincdisconnect ICON "res\\boincdisconnect.ico"
-boincsnooze ICON "res\\boincsnooze.ico"
#elif defined(_CHARITYENGINE)
boinc ICON "res\\ce.ico"
-boincdisconnect ICON "res\\boincdisconnect.ico"
-boincsnooze ICON "res\\boincsnooze.ico"
#elif defined(_WCG)
boinc ICON "res\\wcg.ico"
-boincdisconnect ICON "res\\wcgdisconnect.ico"
-boincsnooze ICON "res\\wcgsnooze.ico"
#else
boinc ICON "res\\boinc.ico"
+#endif
+
boincdisconnect ICON "res\\boincdisconnect.ico"
boincsnooze ICON "res\\boincsnooze.ico"
-#endif
/////////////////////////////////////////////////////////////////////////////
@@ -90,17 +82,12 @@ boincsnooze ICON "res\\boincsnooze.ico"
1 TEXTINCLUDE
BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
"#include <wx/msw/wx.rc>\r\n"
"#include ""win_config.h""\r\n"
"\0"
END
-3 TEXTINCLUDE
+2 TEXTINCLUDE
BEGIN
"\0"
END
diff --git a/clientgui/BOINCHtmlLBox.cpp b/clientgui/BOINCHtmlLBox.cpp
deleted file mode 100644
index b403e1b..0000000
--- a/clientgui/BOINCHtmlLBox.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-
-// ----------------------------------------------------------------------------
-// headers
-// ----------------------------------------------------------------------------
-
-#include "stdwx.h"
-#include "BOINCHtmlLBox.h"
-#include "BOINCGUIApp.h"
-#include "MainDocument.h"
-
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-const wxChar BOINCHtmlListBoxNameStr[] = wxT("BOINCHtmlListBox");
-
-// ============================================================================
-// implementation
-// ============================================================================
-
-IMPLEMENT_ABSTRACT_CLASS(CBOINCHtmlListBox, wxHtmlListBox)
-
-BEGIN_EVENT_TABLE(CBOINCHtmlListBox, wxHtmlListBox)
- EVT_MOTION(CBOINCHtmlListBox::OnMouseMove)
-END_EVENT_TABLE()
-
-// ----------------------------------------------------------------------------
-// CBOINCHtmlListBox creation
-// ----------------------------------------------------------------------------
-
-CBOINCHtmlListBox::CBOINCHtmlListBox()
- : wxHtmlListBox()
-{
-}
-
-CBOINCHtmlListBox::~CBOINCHtmlListBox() {}
-
-// normal constructor which calls Create() internally
-CBOINCHtmlListBox::CBOINCHtmlListBox(wxWindow *parent,
- wxWindowID id,
- const wxPoint& pos,
- const wxSize& size,
- long style,
- const wxString& name)
- : wxHtmlListBox(parent, id, pos, size, style, name)
-{
-}
-
-wxHtmlOpeningStatus
-CBOINCHtmlListBox::OnHTMLOpeningURL(wxHtmlURLType (type),
- const wxString& (url),
- wxString *(redirect)) const
-{
- // RSS feeds and web pages may use protocol-relative (scheme-relative)
- // URLs, such as <img src="//sample.com/test.jpg"/>
- // Since the html comes from a web server via http, the scheme is
- // assumed to also be http. But we have cached the html in a local
- // file, so it is no longer associated with the http protocol / scheme.
- // Therefore all our URLs must explicity specify the http protocol.
- //
- // If the html is <img src="//sample.com/test.jpg" alt="" border="1" width="80" height="80" />
- // then the url argument passed here will be: //sample.com/test.jpg
- // so we need to prepend http:
- if (type == wxHTML_URL_IMAGE) {
- if (url.Left(2).IsSameAs(wxT("//"))) {
- *redirect = wxString(wxT("http:") + url);
- return wxHTML_REDIRECT;
- }
- }
-
- return wxHTML_OPEN;
-}
diff --git a/clientgui/BOINCHtmlLBox.h b/clientgui/BOINCHtmlLBox.h
deleted file mode 100644
index a3ea016..0000000
--- a/clientgui/BOINCHtmlLBox.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _BOINCHTMLLBOX_H_
-#define _BOINCHTMLLBOX_H_
-
-#include "wx/htmllbox.h" // base class
-
-extern const wxChar BOINCHtmlListBoxNameStr[];
-
-// ----------------------------------------------------------------------------
-// CBOINCHtmlListBox
-// ----------------------------------------------------------------------------
-
-// small border always added to the cells:
-#define CELL_BORDER 2
-
-class CBOINCHtmlListBox : public wxHtmlListBox
-{
- DECLARE_ABSTRACT_CLASS(CBOINCHtmlListBox)
-public:
- // constructors and such
- // ---------------------
-
- // default constructor, you must call Create() later
- CBOINCHtmlListBox();
-
- // normal constructor which calls Create() internally
- CBOINCHtmlListBox(wxWindow *parent,
- wxWindowID id = wxID_ANY,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString& name = BOINCHtmlListBoxNameStr);
-
- // destructor cleans up whatever resources we use
- virtual ~CBOINCHtmlListBox();
-
- int OnGetItemHeight(size_t i) { return (int)OnMeasureItem(i); }
- int GetItemHeight(size_t i) { return (int)OnMeasureItem(i); }
-
- void GetItemRect(size_t item, wxRect& rect)
- {
- rect.height = GetItemHeight(item);
- rect.width = GetSize().GetWidth() - 4;
- }
-
-protected:
- // The following overrides of methods in wxHtmlListBox and wxVListBox make
- // it appear as if we don't allow the user to select entries in the notices.
- wxColour GetSelectedTextColour(const wxColour& colFg) const { return colFg; }
- wxColour GetSelectedTextBgColour(const wxColour& colBg) const { return colBg; }
- void OnDrawBackground(wxDC&, const wxRect&, size_t) const {}
-
- // The following overrides of methods in wxHtmlListBox
- // reduce CPU usage and avoid crashes
- void OnMouseMove(wxMouseEvent&) {}
- void OnInternalIdle() {}
-
-private:
- virtual wxHtmlOpeningStatus OnHTMLOpeningURL(wxHtmlURLType type,
- const wxString& url,
- wxString *redirect) const;
- DECLARE_EVENT_TABLE()
- DECLARE_NO_COPY_CLASS(CBOINCHtmlListBox)
-};
-
-#endif // _BOINCHTMLLBOX_H_
-
diff --git a/clientgui/BOINCInternetFSHandler.cpp b/clientgui/BOINCInternetFSHandler.cpp
deleted file mode 100644
index f06b7e2..0000000
--- a/clientgui/BOINCInternetFSHandler.cpp
+++ /dev/null
@@ -1,675 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name: src/msw/urlmsw.cpp
-// Purpose: MS-Windows native URL support based on WinINet
-// Author: Hajo Kirchhoff
-// Modified by:
-// Created: 06/11/2003
-// RCS-ID: $Id: urlmsw.cpp 58116 2009-01-15 12:45:22Z VZ $
-// Copyright: (c) 2003 Hajo Kirchhoff
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-// Modified for BOINC from wxWidgets 2.8.10 files src/common/fs_mem.cpp and
-// src/msw/urlmsw.cpp
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "BOINCInternetFSHandler.h"
-#endif
-
-#include "stdwx.h"
-#include "BOINCInternetFSHandler.h"
-#include "BOINCGUIApp.h"
-#include "MainDocument.h"
-#include "util.h"
-
-
-class BOINCMemFSHashObj : public wxObject
-{
-public:
- BOINCMemFSHashObj(wxInputStream* stream, const wxString& mime, const wxString& key)
- {
- if (stream) {
- wxMemoryOutputStream out;
- stream->Read(out);
- m_Len = out.GetSize();
- m_Data = new char[m_Len];
- out.CopyTo(m_Data, m_Len);
- } else {
- m_Len = 0;
- m_Data = NULL;
- }
- m_Key = key;
- m_MimeType = mime;
- m_Time = wxDateTime::Now();
- }
-
- virtual ~BOINCMemFSHashObj()
- {
- delete[] m_Data;
- }
-
- char *m_Data;
- size_t m_Len;
- wxString m_MimeType;
- wxDateTime m_Time;
- wxString m_Key;
-
- DECLARE_NO_COPY_CLASS(BOINCMemFSHashObj)
-};
-
-
-wxHashTable *CBOINCInternetFSHandler::m_Hash = NULL;
-
-static bool b_ShuttingDown = false;
-
-#ifdef __WXMSW__
-// *** code adapted from src/msw/urlmsw.cpp (wxWidgets 2.8.10)
-
-// If OpenURL fails, we probably don't have a connection to
-// the Internet, so use a shorter timeout for subsequent calls
-// to OpenURL until one succeeds.
-// Otherwise notices takes too long to display if there are
-// multiple notices with images.
-
-#define STANDARD_INTERNET_TIMEOUT 5
-#define SHORT_INTERNET_TIMEOUT 2
-static double dInternetTimeout = STANDARD_INTERNET_TIMEOUT;
-
-#ifdef __VISUALC__ // be conservative about this pragma
- // tell the linker to include wininet.lib automatically
- #pragma comment(lib, "wininet.lib")
-#endif
-
-#include "wx/url.h"
-
-#include <string.h>
-#include <ctype.h>
-#include <wininet.h>
-
-// this class needn't be exported
-class wxWinINetURL
-{
-public:
- wxInputStream *GetInputStream(wxURL *owner);
-
-protected:
- // return the WinINet session handle
- static HINTERNET GetSessionHandle(bool closeSessionHandle = false);
-
-};
-
-////static bool lastReadHadEOF = false;
-static bool operationEnded = false;
-static bool handleClosed = false;
-static DWORD lastStatusInfo;
-static DWORD lastStatusInfoLength;
-static HINTERNET urlStreamHandle;
-
-// These two may be useful for debugging:
-static DWORD lastInternetStatus;
-static LPVOID lastlpvStatusInformation;
-
-
-// Callback for InternetOpenURL() and InternetReadFileEx()
-static void CALLBACK BOINCInternetStatusCallback(
- HINTERNET,
- DWORD_PTR,
- DWORD dwInternetStatus,
- LPVOID lpvStatusInformation,
- DWORD dwStatusInformationLength
- )
-{
- INTERNET_ASYNC_RESULT* res;
-
- lastInternetStatus = dwInternetStatus;
- lastlpvStatusInformation = lpvStatusInformation;
- lastStatusInfoLength = dwStatusInformationLength;
- if (lastStatusInfoLength == sizeof(DWORD)) {
- lastStatusInfo = *(DWORD*)lpvStatusInformation;
- } else {
- lastStatusInfo = 0;
- }
- switch (dwInternetStatus) {
- case INTERNET_STATUS_HANDLE_CREATED:
- res = (INTERNET_ASYNC_RESULT*)lpvStatusInformation;
- urlStreamHandle = (HINTERNET)(res->dwResult);
- break;
- case INTERNET_STATUS_HANDLE_CLOSING:
- handleClosed = true;
- break;
- case INTERNET_STATUS_REQUEST_COMPLETE:
- operationEnded = true;
- break;
- case INTERNET_STATUS_STATE_CHANGE:
- if (lastStatusInfo & (INTERNET_STATE_DISCONNECTED | INTERNET_STATE_DISCONNECTED_BY_USER)) {
- operationEnded = true;
- }
- break;
- }
-}
-
-
-static void BOINCCloseInternetHandle(HINTERNET handle) {
- if (!handle) return;
-
- // Setting callback should be redundant, but do it for safety
- InternetSetStatusCallback(handle, BOINCInternetStatusCallback);
- handleClosed = false;
- InternetCloseHandle(handle);
-
- while (!handleClosed) {
- wxThread::Sleep(20);
- wxGetApp().Yield(true);
- }
-}
-
-
-HINTERNET wxWinINetURL::GetSessionHandle(bool closeSessionHandle)
-{
- // this struct ensures that the session is opened when the
- // first call to GetSessionHandle is made
- // it also ensures that the session is closed when the program
- // terminates
- static struct INetSession
- {
- INetSession()
- {
- INetOpenSession();
- }
-
- ~INetSession()
- {
- INetCloseSession();
- }
-
- void INetOpenSession() {
- DWORD rc = InternetAttemptConnect(0);
-
- m_handle = InternetOpen
- (
- wxVERSION_STRING,
- INTERNET_OPEN_TYPE_PRECONFIG,
- NULL,
- NULL,
- INTERNET_FLAG_ASYNC |
- (rc == ERROR_SUCCESS ? 0 : INTERNET_FLAG_OFFLINE)
- );
-
- if (m_handle) {
- InternetSetStatusCallback(m_handle, BOINCInternetStatusCallback);
- }
- }
-
- void INetCloseSession() {
- if (m_handle) {
- // We can't call BOINCCloseInternetHandle() here
- // because wxGetApp().Yield() is no longer valid.
- InternetSetStatusCallback(m_handle, NULL);
- InternetCloseHandle(m_handle);
- m_handle = NULL;
- }
- }
-
- HINTERNET m_handle;
- } session;
-
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- wxASSERT(pDoc);
-
- if (closeSessionHandle) {
- BOINCCloseInternetHandle(session.m_handle);
- session.m_handle = NULL;
- return 0;
- }
-
- if (!session.m_handle) {
- session.INetOpenSession();
- }
- return session.m_handle;
-}
-
-
-
-// this class needn't be exported
-class /*WXDLLIMPEXP_NET */ wxWinINetInputStream : public wxInputStream
-{
-public:
- wxWinINetInputStream(HINTERNET hFile=0);
- virtual ~wxWinINetInputStream();
-
- void Attach(HINTERNET hFile);
-
- wxFileOffset SeekI( wxFileOffset WXUNUSED(pos), wxSeekMode WXUNUSED(mode) )
- { return -1; }
- wxFileOffset TellI() const
- { return -1; }
- size_t GetSize() const;
-
-protected:
- void SetError(wxStreamError err) { m_lasterror=err; }
- HINTERNET m_hFile;
- size_t OnSysRead(void *buffer, size_t bufsize);
-
- DECLARE_NO_COPY_CLASS(wxWinINetInputStream)
-};
-
-
-size_t wxWinINetInputStream::GetSize() const
-{
- DWORD contentLength = 0;
- DWORD dwSize = sizeof(contentLength);
- DWORD index = 0;
-
- if (!m_hFile) {
- return 0;
- }
- if ( HttpQueryInfo( m_hFile, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &contentLength, &dwSize, &index) )
- return contentLength;
- else
- return 0;
-}
-
-
-size_t wxWinINetInputStream::OnSysRead(void *buffer, size_t bufsize)
-{
- DWORD bytesread = 0;
- DWORD totalbytesread = 0;
- DWORD lError = ERROR_SUCCESS;
- BYTE *buf = (BYTE*)buffer;
- DWORD buflen = (DWORD)bufsize;
- BOOL success = false;
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- wxASSERT(pDoc);
-
- if (b_ShuttingDown || (!pDoc->IsConnected())) {
- SetError(wxSTREAM_EOF);
- return 0;
- }
-
- if (!m_hFile) {
- SetError(wxSTREAM_READ_ERROR);
- return 0;
- }
- while (1) {
- bytesread = 0;
- success = InternetReadFile(m_hFile, buf, buflen, &bytesread);
- totalbytesread += bytesread;
- if (success) {
- if ( totalbytesread == 0 ) {
- SetError(wxSTREAM_EOF);
- }
- break;
- } else { // success == false
- lError = ::GetLastError();
- if (lError == ERROR_IO_PENDING) {
- // We've received only part of the data so far
- buf += bytesread;
- buflen -= bytesread;
- if (buflen <= 0) {
- // Buffer is full; I'll assume wxWinINetInputStream
- // will call us again with a fresh empty buffer.
- break;
- }
- wxThread::Sleep(20);
- wxGetApp().Yield(true);
- continue; // Read the next chunk of data
- } else {
- SetError(wxSTREAM_READ_ERROR);
- break;
- }
- }
-
-#if 0 // Possibly useful for debugging
- if ((!success) || (lError != ERROR_SUCCESS)) {
- DWORD iError, bLength = 0;
- InternetGetLastResponseInfo(&iError, NULL, &bLength);
- if ( bLength > 0 )
- {
- wxString errorString;
- InternetGetLastResponseInfo
- (
- &iError,
- wxStringBuffer(errorString, bLength),
- &bLength
- );
-
- wxLogError(wxT("Read failed with error %d: %s"),
- iError, errorString.c_str());
- }
- else
- {
- wxLogError(wxT("Read failed with error %d"), lError);
- }
- }
-#endif
-
- if (!success) {
- wxLogTrace(wxT("Function Status"), wxT("wxWinINetInputStream::OnSysRead - Download failure!\n"));
- return 0;
- }
- } // End while(1)
-
- return totalbytesread;
-}
-
-
-wxWinINetInputStream::wxWinINetInputStream(HINTERNET hFile)
- : m_hFile(hFile)
-{
-}
-
-
-void wxWinINetInputStream::Attach(HINTERNET newHFile)
-{
- wxCHECK_RET(m_hFile==NULL,
- wxT("cannot attach new stream when stream already exists"));
- m_hFile=newHFile;
- SetError(m_hFile!=NULL ? wxSTREAM_NO_ERROR : wxSTREAM_READ_ERROR);
-}
-
-
-wxWinINetInputStream::~wxWinINetInputStream()
-{
- if ( m_hFile )
- {
- BOINCCloseInternetHandle(m_hFile);
- m_hFile=0;
- }
-}
-
-
-wxInputStream *wxWinINetURL::GetInputStream(wxURL *owner)
-{
-static bool bAlreadyRunning = false;
- if (bAlreadyRunning) {
- return NULL;
- }
- bAlreadyRunning = true;
- DWORD service;
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- wxASSERT(pDoc);
-
- urlStreamHandle = NULL;
-
- if (b_ShuttingDown || (!pDoc->IsConnected())) {
- GetSessionHandle(true); // Closes the session handle
- bAlreadyRunning = false;
- return 0;
- }
-
- if ( owner->GetScheme() == wxT("http") )
- {
- service = INTERNET_SERVICE_HTTP;
- }
- else if ( owner->GetScheme() == wxT("ftp") )
- {
- service = INTERNET_SERVICE_FTP;
- }
- else
- {
- bAlreadyRunning = false;
- // unknown protocol. Let wxURL try another method.
- return 0;
- }
-
- wxWinINetInputStream *newStream = new wxWinINetInputStream;
-
- operationEnded = false;
- double endtimeout = dtime() + dInternetTimeout;
-
- wxLogTrace(wxT("Function Status"), wxT("wxWinINetURL::GetInputStream - Downloading file: '%s'\n"), owner->GetURL().c_str());
- InternetOpenUrl (
- GetSessionHandle(),
- owner->GetURL(),
- NULL,
- 0,
- INTERNET_FLAG_KEEP_CONNECTION |
- INTERNET_FLAG_PASSIVE,
- 1
- );
- while (!operationEnded) {
- if (b_ShuttingDown ||
- (!pDoc->IsConnected()) ||
- (dtime() > endtimeout)
- ) {
- if (urlStreamHandle) {
- BOINCCloseInternetHandle(urlStreamHandle);
- urlStreamHandle = NULL;
- }
- GetSessionHandle(true); // Closes the session handle
- if (newStream) {
- delete newStream;
- newStream = NULL;
- }
- dInternetTimeout = SHORT_INTERNET_TIMEOUT;
- bAlreadyRunning = false;
- return 0;
- }
-
- wxThread::Sleep(20);
- wxGetApp().Yield(true);
- }
-
- if (!urlStreamHandle) {
- if (newStream) {
- delete newStream;
- newStream = NULL;
- }
- GetSessionHandle(true); // Closes the session handle
- dInternetTimeout = SHORT_INTERNET_TIMEOUT;
- bAlreadyRunning = false;
- return NULL;
- }
-
- newStream->Attach(urlStreamHandle);
-
- dInternetTimeout = STANDARD_INTERNET_TIMEOUT;
- bAlreadyRunning = false;
- return newStream;
-}
-
-// *** End of code adapted from src/msw/urlmsw.cpp (wxWidgets 2.8.10)
-#endif // __WXMSW__
-
-
-CBOINCInternetFSHandler::CBOINCInternetFSHandler() : wxFileSystemHandler()
-{
- m_InputStream = NULL;
- b_ShuttingDown = false;
- m_bMissingItems = false;
-
- if (!m_Hash)
- {
- m_Hash = new wxHashTable(wxKEY_STRING);
- }
-}
-
-
-CBOINCInternetFSHandler::~CBOINCInternetFSHandler()
-{
- // as only one copy of FS handler is supposed to exist, we may silently
- // delete static data here. (There is no way how to remove FS handler from
- // wxFileSystem other than releasing _all_ handlers.)
- if (m_Hash)
- {
- WX_CLEAR_HASH_TABLE(*m_Hash);
- delete m_Hash;
- m_Hash = NULL;
- }
-}
-
-
-static wxString StripProtocolAnchor(const wxString& location)
-{
- wxString myloc(location.BeforeLast(wxT('#')));
- if (myloc.empty()) myloc = location.AfterFirst(wxT(':'));
- else myloc = myloc.AfterFirst(wxT(':'));
-
- // fix malformed url:
- if (!myloc.Left(2).IsSameAs(wxT("//")))
- {
- if (myloc.GetChar(0) != wxT('/')) myloc = wxT("//") + myloc;
- else myloc = wxT("/") + myloc;
- }
- if (myloc.Mid(2).Find(wxT('/')) == wxNOT_FOUND) myloc << wxT('/');
-
- return myloc;
-}
-
-
-bool CBOINCInternetFSHandler::CanOpen(const wxString& location)
-{
- if (b_ShuttingDown) return false;
-
- // Disable downloading all embedded file types within a notice
- // TODO: We'll need to revisit this policy after the next public release.
- // Either wait for the wxWidgets 3.0 migration, or fix the async file
- // download issue.
- //
- return false;
-
- // Regular check based on protocols
- //
- wxString p = GetProtocol(location);
- if ((p == wxT("http")) || (p == wxT("ftp")))
- {
- wxURL url(p + wxT(":") + StripProtocolAnchor(location));
- return (url.GetError() == wxURL_NOERR);
- }
- return false;
-}
-
-
-wxFSFile* CBOINCInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& strLocation)
-{
- wxString strMIME;
-
- if (b_ShuttingDown) return NULL;
-
- if (m_Hash)
- {
- BOINCMemFSHashObj* obj = (BOINCMemFSHashObj*)m_Hash->Get(strLocation);
- if (obj == NULL)
- {
- wxString right = GetProtocol(strLocation) + wxT(":") + StripProtocolAnchor(strLocation);
-
- wxURL url(right);
- if (url.GetError() == wxURL_NOERR)
- {
-#ifdef __WXMSW__
- wxWinINetURL * winURL = new wxWinINetURL;
- m_InputStream = winURL->GetInputStream(&url);
- delete winURL;
- winURL = NULL;
-#else
- m_InputStream = url.GetInputStream();
-#endif
- if (b_ShuttingDown) {
- return NULL;
- }
-
- strMIME = url.GetProtocol().GetContentType();
- if (strMIME == wxEmptyString) {
- strMIME = GetMimeTypeFromExt(strLocation);
- }
-
- obj = new BOINCMemFSHashObj(m_InputStream, strMIME, strLocation);
- if (m_InputStream) {
- delete m_InputStream;
- m_InputStream = NULL;
- }
-
- m_Hash->Put(strLocation, obj);
-
- // If we couldn't read image, then return NULL so
- // image tag handler displays "broken image" bitmap
- if (obj->m_Len == 0) {
- m_bMissingItems = true;
- return NULL;
- }
-
- return new wxFSFile (
- new wxMemoryInputStream(obj->m_Data, obj->m_Len),
- strLocation,
- strMIME,
- GetAnchor(strLocation),
- obj->m_Time
- );
- }
- }
- else
- {
- strMIME = obj->m_MimeType;
- if ( strMIME.empty() ) {
- strMIME = GetMimeTypeFromExt(strLocation);
- }
-
- // If we couldn't read image, then return NULL so
- // image tag handler displays "broken image" bitmap
- if (obj->m_Len == 0) {
- return NULL;
- }
-
- return new wxFSFile (
- new wxMemoryInputStream(obj->m_Data, obj->m_Len),
- strLocation,
- strMIME,
- GetAnchor(strLocation),
- obj->m_Time
- );
- }
- }
-
- return NULL;
-}
-
-
-bool CBOINCInternetFSHandler::CheckHash(const wxString& strLocation)
-{
- if (m_Hash->Get(strLocation) != NULL)
- return false;
- else
- return true;
-}
-
-
-void CBOINCInternetFSHandler::UnchacheMissingItems() {
- m_Hash->BeginFind();
- wxHashTable::Node* node = m_Hash->Next();
- for(;;) {
- if (node == NULL) break; // End of cache
- BOINCMemFSHashObj* obj = (BOINCMemFSHashObj*)node->GetData();
- // We must get next node before deleting this one
- node = m_Hash->Next();
- if (obj->m_Len == 0) {
- delete m_Hash->Delete(obj->m_Key);
- }
- }
- m_bMissingItems = false;
-#ifdef __WXMSW__
- dInternetTimeout = STANDARD_INTERNET_TIMEOUT;
-#endif
-}
-
-
-void CBOINCInternetFSHandler::ClearCache() {
- WX_CLEAR_HASH_TABLE(*m_Hash);
- m_bMissingItems = false;
-#ifdef __WXMSW__
- dInternetTimeout = STANDARD_INTERNET_TIMEOUT;
-#endif
-}
-
-
-void CBOINCInternetFSHandler::SetAbortInternetIO(bool set) {
- b_ShuttingDown = set;
-#ifdef __WXMSW__
- if (m_InputStream) {
- delete m_InputStream;
- m_InputStream = NULL;
- }
-#endif
-}
diff --git a/clientgui/BOINCInternetFSHandler.h b/clientgui/BOINCInternetFSHandler.h
deleted file mode 100644
index f9440a0..0000000
--- a/clientgui/BOINCInternetFSHandler.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2012 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _WX_FS_CACHEDINTERNET_H_
-#define _WX_FS_CACHEDINTERNET_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "BOINCInternetFSHandler.cpp"
-#endif
-
-class CBOINCInternetFSHandler : public wxFileSystemHandler
-{
-public:
- CBOINCInternetFSHandler();
- virtual ~CBOINCInternetFSHandler();
-
- virtual bool CanOpen(const wxString& strLocation);
- virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& strLocation);
- bool ItemsFailedToLoad() { return m_bMissingItems; }
- void UnchacheMissingItems();
- void ClearCache();
- void SetAbortInternetIO(bool set = true);
-
-protected:
- static bool CheckHash(const wxString& strLocation);
- static wxHashTable *m_Hash;
- wxInputStream *m_InputStream;
-
-private:
- bool m_bMissingItems;
-};
-
-#endif // _WX_FS_CACHEDINTERNET_H_
-
diff --git a/clientgui/BOINCListCtrl.cpp b/clientgui/BOINCListCtrl.cpp
index c6c174b..85369d9 100644
--- a/clientgui/BOINCListCtrl.cpp
+++ b/clientgui/BOINCListCtrl.cpp
@@ -26,11 +26,19 @@
#if USE_NATIVE_LISTCONTROL
+
DEFINE_EVENT_TYPE(wxEVT_DRAW_PROGRESSBAR)
BEGIN_EVENT_TABLE(CBOINCListCtrl, LISTCTRL_BASE)
EVT_DRAW_PROGRESSBAR(CBOINCListCtrl::OnDrawProgressBar)
END_EVENT_TABLE()
+
+#else
+
+BEGIN_EVENT_TABLE(CBOINCListCtrl, LISTCTRL_BASE)
+ EVT_SIZE(CBOINCListCtrl::OnSize)
+END_EVENT_TABLE()
+
#endif
BEGIN_EVENT_TABLE(MyEvtHandler, wxEvtHandler)
@@ -51,8 +59,9 @@ CBOINCListCtrl::CBOINCListCtrl(
) {
m_pParentView = pView;
- m_bIsSingleSelection = (iListWindowFlags & wxLC_SINGLE_SEL) ? true : false ;
-
+ // Enable Zebra Striping
+ EnableAlternateRowColours(true);
+
#if USE_NATIVE_LISTCONTROL
m_bProgressBarEventPending = false;
#else
@@ -60,12 +69,6 @@ CBOINCListCtrl::CBOINCListCtrl(
SetupMacAccessibilitySupport();
#endif
#endif
-
- Connect(
- iListWindowID,
- wxEVT_COMMAND_LEFT_CLICK,
- (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) &CBOINCListCtrl::OnClick
- );
}
@@ -206,39 +209,6 @@ void CBOINCListCtrl::AddPendingProgressBar(int row) {
}
-void CBOINCListCtrl::OnClick(wxCommandEvent& event) {
- wxLogTrace(wxT("Function Start/End"), wxT("CBOINCListCtrl::OnClick - Function Begin"));
-
- wxASSERT(m_pParentView);
- wxASSERT(wxDynamicCast(m_pParentView, CBOINCBaseView));
-
- wxListEvent leDeselectedEvent(wxEVT_COMMAND_LIST_ITEM_DESELECTED, m_windowId);
- leDeselectedEvent.SetEventObject(this);
-
- if (m_bIsSingleSelection) {
- if (GetFocusedItem() != GetFirstSelected()) {
- wxLogTrace(wxT("Function Status"), wxT("CBOINCListCtrl::OnClick - GetFocusedItem() '%d' != GetFirstSelected() '%d'"), GetFocusedItem(), GetFirstSelected());
-
- if (-1 == GetFirstSelected()) {
- wxLogTrace(wxT("Function Status"), wxT("CBOINCListCtrl::OnClick - Force Selected State"));
-
- long desiredstate = wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED;
- SetItemState(GetFocusedItem(), desiredstate, desiredstate);
- } else {
- m_pParentView->FireOnListDeselected(leDeselectedEvent);
- }
- }
- } else {
- if (-1 == GetFirstSelected()) {
- m_pParentView->FireOnListDeselected(leDeselectedEvent);
- }
- }
-
- event.Skip();
- wxLogTrace(wxT("Function Start/End"), wxT("CBOINCListCtrl::OnClick - Function End"));
-}
-
-
wxString CBOINCListCtrl::OnGetItemText(long item, long column) const {
wxASSERT(m_pParentView);
wxASSERT(wxDynamicCast(m_pParentView, CBOINCBaseView));
@@ -255,16 +225,6 @@ int CBOINCListCtrl::OnGetItemImage(long item) const {
}
-#if BASEVIEW_STRIPES
-wxListItemAttr* CBOINCListCtrl::OnGetItemAttr(long item) const {
- wxASSERT(m_pParentView);
- wxASSERT(wxDynamicCast(m_pParentView, CBOINCBaseView));
-
- return m_pParentView->FireOnListGetItemAttr(item);
-}
-#endif
-
-
void CBOINCListCtrl::DrawProgressBars()
{
long topItem, numItems, numVisibleItems, row;
@@ -308,7 +268,7 @@ void CBOINCListCtrl::DrawProgressBars()
#if USE_NATIVE_LISTCONTROL
x -= GetScrollPos(wxHORIZONTAL);
#else
- GetMainWin()->CalcScrolledPosition(x, 0, &x, &yy);
+ CalcScrolledPosition(x, 0, &x, &yy);
#endif
wxFont theFont = GetFont();
dc.SetFont(theFont);
@@ -413,7 +373,7 @@ void CBOINCListCtrl::OnDrawProgressBar(CDrawProgressBarEvent& event) {
void MyEvtHandler::OnPaint(wxPaintEvent & event)
{
if (m_listCtrl) {
- (m_listCtrl->GetMainWin())->ProcessEvent(event);
+ m_listCtrl->savedHandler->ProcessEvent(event);
m_listCtrl->DrawProgressBars();
} else {
event.Skip();
diff --git a/clientgui/BOINCListCtrl.h b/clientgui/BOINCListCtrl.h
index 68f543c..f0cc34e 100644
--- a/clientgui/BOINCListCtrl.h
+++ b/clientgui/BOINCListCtrl.h
@@ -22,7 +22,7 @@
#pragma interface "BOINCListCtrl.cpp"
#endif
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXGTK__)
#define USE_NATIVE_LISTCONTROL 1
#else
#define USE_NATIVE_LISTCONTROL 0
@@ -42,10 +42,6 @@
#include "wx/generic/listctrl.h"
#endif
-#ifdef __WXMAC__
-#include "macAccessiblity.h"
-#endif
-
#include "BOINCBaseView.h"
@@ -71,11 +67,7 @@ public:
void AddPendingProgressBar(int row);
void RefreshCell(int row, int col);
- bool m_bIsSingleSelection;
-
private:
- virtual void OnClick(wxCommandEvent& event);
-
virtual wxString OnGetItemText(long item, long column) const;
virtual int OnGetItemImage(long item) const;
#if BASEVIEW_STRIPES
@@ -93,23 +85,24 @@ private:
void DrawProgressBars(void);
bool m_bProgressBarEventPending;
-
- DECLARE_EVENT_TABLE()
#else
public:
+ void SaveEventHandler(wxEvtHandler *stdHandler) { savedHandler = stdHandler; }
void DrawProgressBars(void);
wxScrolledWindow* GetMainWin(void) { return (wxScrolledWindow*) m_mainWin; }
- wxCoord GetHeaderHeight(void) { return m_headerHeight; }
+ wxCoord GetHeaderHeight(void) { return ((wxWindow *)m_headerWin)->GetSize().y; }
+ wxEvtHandler* savedHandler;
#ifdef __WXMAC__
void SetupMacAccessibilitySupport();
void RemoveMacAccessibilitySupport();
+ void OnSize( wxSizeEvent &event );
- ListAccessData accessibilityHandlerData;
-
- EventHandlerRef m_pHeaderAccessibilityEventHandlerRef;
- EventHandlerRef m_pBodyAccessibilityEventHandlerRef;
+ void* m_fauxHeaderView;
+ void* m_fauxBodyView;
#endif
#endif
+
+ DECLARE_EVENT_TABLE()
};
class CDrawProgressBarEvent : public wxEvent
diff --git a/clientgui/BOINCTaskBar.cpp b/clientgui/BOINCTaskBar.cpp
index 1fdb54f..680347c 100644
--- a/clientgui/BOINCTaskBar.cpp
+++ b/clientgui/BOINCTaskBar.cpp
@@ -59,7 +59,7 @@ BEGIN_EVENT_TABLE(CTaskBarIcon, wxTaskBarIconEx)
EVT_TASKBAR_RIGHT_DOWN(CTaskBarIcon::OnRButtonDown)
EVT_TASKBAR_RIGHT_UP(CTaskBarIcon::OnRButtonUp)
EVT_TASKBAR_CONTEXT_USERCLICK(CTaskBarIcon::OnNotificationClick)
- EVT_TASKBAR_BALLOON_TIMEOUT(CTaskBarIcon::OnNotificationTimeout)
+ EVT_TASKBAR_BALLOON_USERTIMEOUT(CTaskBarIcon::OnNotificationTimeout)
#endif
EVT_MENU(ID_OPENBOINCMANAGER, CTaskBarIcon::OnOpen)
EVT_MENU(ID_OPENWEBSITE, CTaskBarIcon::OnOpenWebsite)
@@ -73,26 +73,23 @@ BEGIN_EVENT_TABLE(CTaskBarIcon, wxTaskBarIconEx)
EVT_TASKBAR_APPRESTORE(CTaskBarIcon::OnAppRestore)
#endif
-#ifdef __WXMAC__
- // wxMac-2.6.3 "helpfully" converts wxID_ABOUT to kHICommandAbout, wxID_EXIT to kHICommandQuit,
- // wxID_PREFERENCES to kHICommandPreferences
- EVT_MENU(kHICommandAbout, CTaskBarIcon::OnAbout)
-#endif
-
END_EVENT_TABLE()
CTaskBarIcon::CTaskBarIcon(wxString title, wxIconBundle* icon, wxIconBundle* iconDisconnected, wxIconBundle* iconSnooze
+#ifdef __WXMAC__
+, wxTaskBarIconType iconType
+#endif
) :
#ifdef __WXMAC__
- wxTaskBarIcon(DOCK)
+ wxTaskBarIcon(iconType)
#else
wxTaskBarIconEx(wxT("BOINCManagerSystray"), 1)
#endif
{
- m_iconTaskBarNormal = icon->GetIcon(GetBestIconSize());
- m_iconTaskBarDisconnected = iconDisconnected->GetIcon(GetBestIconSize());
- m_iconTaskBarSnooze = iconSnooze->GetIcon(GetBestIconSize());
+ m_iconTaskBarNormal = icon->GetIcon(GetBestIconSize(), wxIconBundle::FALLBACK_NEAREST_LARGER);
+ m_iconTaskBarDisconnected = iconDisconnected->GetIcon(GetBestIconSize(), wxIconBundle::FALLBACK_NEAREST_LARGER);
+ m_iconTaskBarSnooze = iconSnooze->GetIcon(GetBestIconSize(), wxIconBundle::FALLBACK_NEAREST_LARGER);
m_SnoozeGPUMenuItem = NULL;
m_bTaskbarInitiatedShutdown = false;
@@ -102,6 +99,7 @@ CTaskBarIcon::CTaskBarIcon(wxString title, wxIconBundle* icon, wxIconBundle* ico
m_dtLastNotificationAlertExecuted = wxDateTime((time_t)0);
m_iLastNotificationUnreadMessageCount = 0;
#ifdef __WXMAC__
+ m_iconType = iconType;
m_pNotificationRequest = NULL;
#endif
}
@@ -258,6 +256,15 @@ void CTaskBarIcon::OnAbout(wxCommandEvent& WXUNUSED(event)) {
bEventLogWasShown = eventLog->IsShown();
if (bEventLogWasShown && !bWasVisible) eventLog->Show(false);
}
+
+ CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
+ if (pFrame) {
+ if (!bWasVisible) {
+ // We really do need to hide the frame here
+ // See comment in CBOINCGUIApp::OnFinishInit()
+ pFrame->wxFrame::Show(false);
+ }
+ }
#endif
wxGetApp().ShowApplication(true);
@@ -265,14 +272,17 @@ void CTaskBarIcon::OnAbout(wxCommandEvent& WXUNUSED(event)) {
ResetTaskBar();
CDlgAbout dlg(NULL);
+ wxGetApp().SetAboutDialogIsOpen(true);
dlg.ShowModal();
+ wxGetApp().SetAboutDialogIsOpen(false);
if (!bWasVisible) {
wxGetApp().ShowApplication(false);
}
-
+
#ifdef __WXMAC__
- if (bEventLogWasShown) eventLog->Show(true);
+ // See comment in CBOINCGUIApp::OnFinishInit()
+ pFrame->wxWindow::Show(true);
#endif
}
@@ -338,14 +348,9 @@ void CTaskBarIcon::OnReloadSkin(CTaskbarEvent& WXUNUSED(event)) {
wxASSERT(pSkinAdvanced);
wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
- m_iconTaskBarNormal = pSkinAdvanced->GetApplicationIcon()->GetIcon(GetBestIconSize());
- m_iconTaskBarDisconnected = pSkinAdvanced->GetApplicationDisconnectedIcon()->GetIcon(GetBestIconSize());
- m_iconTaskBarSnooze = pSkinAdvanced->GetApplicationSnoozeIcon()->GetIcon(GetBestIconSize());
-
-#ifdef __WXMAC__
- // For unknown reasons, menus won't work if we call BuildMenu() here
- wxGetApp().GetMacSystemMenu()->SetNeedToRebuildMenu();
-#endif
+ m_iconTaskBarNormal = pSkinAdvanced->GetApplicationIcon()->GetIcon(GetBestIconSize(), wxIconBundle::FALLBACK_NEAREST_LARGER);
+ m_iconTaskBarDisconnected = pSkinAdvanced->GetApplicationDisconnectedIcon()->GetIcon(GetBestIconSize(), wxIconBundle::FALLBACK_NEAREST_LARGER);
+ m_iconTaskBarSnooze = pSkinAdvanced->GetApplicationSnoozeIcon()->GetIcon(GetBestIconSize(), wxIconBundle::FALLBACK_NEAREST_LARGER);
}
@@ -386,36 +391,26 @@ wxMenu *CTaskBarIcon::CreatePopupMenu() {
return menu;
}
-
// Override the standard wxTaskBarIcon::SetIcon() because we are only providing a
// 16x16 icon for the menubar, while the Dock needs a 128x128 icon.
// Rather than using an entire separate icon, overlay the Dock icon with a badge
// so we don't need additional Snooze and Disconnected icons for branding.
bool CTaskBarIcon::SetIcon(const wxIcon& icon, const wxString& ) {
- CTaskBarIcon* pTaskbar = wxGetApp().GetTaskBarIcon();
- if (pTaskbar) {
- return pTaskbar->SetMacTaskBarIcon(icon);
- }
- return false;
-}
-
-
-bool CTaskBarIcon::SetMacTaskBarIcon(const wxIcon& icon) {
wxIcon macIcon;
bool result;
OSStatus err = noErr ;
int w, h, x, y;
+ if (m_iconType != wxTBI_DOCK) {
+ result = wxGetApp().GetMacDockIcon()->SetIcon(icon);
+ return (result && wxTaskBarIcon::SetIcon(icon));
+ }
+
if (icon.IsSameAs(m_iconCurrentIcon))
return true;
m_iconCurrentIcon = icon;
- CMacSystemMenu* sysMenu = wxGetApp().GetMacSystemMenu();
- if (sysMenu == NULL) return 0;
-
- result = sysMenu->SetMacMenuIcon(icon);
-
RestoreApplicationDockTileImage(); // Remove any previous badge
if (m_iconTaskBarDisconnected.IsSameAs(icon))
@@ -423,7 +418,7 @@ bool CTaskBarIcon::SetMacTaskBarIcon(const wxIcon& icon) {
else if (m_iconTaskBarSnooze.IsSameAs(icon))
macIcon = macsnoozebadge;
else
- return result;
+ return true;
// Convert the wxIcon into a wxBitmap so we can perform some
// wxBitmap operations with it
@@ -452,7 +447,7 @@ bool CTaskBarIcon::SetMacTaskBarIcon(const wxIcon& icon) {
}
}
- CGImageRef pImage = (CGImageRef) bmp.CGImageCreate();
+ CGImageRef pImage = (CGImageRef) bmp.CreateCGImage();
// Actually set the dock image
err = OverlayApplicationDockTileImage(pImage);
@@ -463,7 +458,7 @@ bool CTaskBarIcon::SetMacTaskBarIcon(const wxIcon& icon) {
if (pImage != NULL)
CGImageRelease(pImage);
- return result;
+ return true;
}
@@ -550,12 +545,14 @@ wxMenu *CTaskBarIcon::BuildContextMenu() {
pMenu->Append(wxID_ABOUT, menuName, wxEmptyString);
-#ifndef __WXMAC__
+#ifdef __WXMAC__
// These should be in Windows Task Bar Menu but not in Mac's Dock menu
- pMenu->AppendSeparator();
-
- pMenu->Append(wxID_EXIT, _("E&xit"), wxEmptyString);
+ if (m_iconType != wxTBI_DOCK)
#endif
+ {
+ pMenu->AppendSeparator();
+ pMenu->Append(wxID_EXIT, _("E&xit"), wxEmptyString);
+ }
AdjustMenuItems(pMenu);
@@ -601,19 +598,18 @@ void CTaskBarIcon::AdjustMenuItems(wxMenu* pMenu) {
// a bit. It shouldn't hurt other platforms.
for (loc = 0; loc < pMenu->GetMenuItemCount(); loc++) {
pMenuItem = pMenu->FindItemByPosition(loc);
- if (!pMenuItem->IsSeparator() && pMenuItem->IsEnabled()) {
- pMenu->Remove(pMenuItem);
+ pMenu->Remove(pMenuItem);
- font = pMenuItem->GetFont();
- if (pMenuItem->GetId() != ID_OPENBOINCMANAGER) {
- font.SetWeight(wxFONTWEIGHT_NORMAL);
- } else {
- font.SetWeight(wxFONTWEIGHT_BOLD);
- }
- pMenuItem->SetFont(font);
-
- pMenu->Insert(loc, pMenuItem);
+ font = pMenuItem->GetFont();
+ font.SetPointSize(8);
+ if (pMenuItem->GetId() != ID_OPENBOINCMANAGER) {
+ font.SetWeight(wxFONTWEIGHT_NORMAL);
+ } else {
+ font.SetWeight(wxFONTWEIGHT_BOLD);
}
+ pMenuItem->SetFont(font);
+
+ pMenu->Insert(loc, pMenuItem);
}
#endif
diff --git a/clientgui/BOINCTaskBar.h b/clientgui/BOINCTaskBar.h
index 2788a53..08a590f 100644
--- a/clientgui/BOINCTaskBar.h
+++ b/clientgui/BOINCTaskBar.h
@@ -36,7 +36,11 @@ class CTaskbarEvent;
class CTaskBarIcon : public wxTaskBarIconEx {
public:
- CTaskBarIcon(wxString title, wxIconBundle* icon, wxIconBundle* iconDisconnected, wxIconBundle* iconSnooze);
+ CTaskBarIcon(wxString title, wxIconBundle* icon, wxIconBundle* iconDisconnected, wxIconBundle* iconSnooze
+#ifdef __WXMAC__
+ , wxTaskBarIconType iconType
+#endif
+ );
~CTaskBarIcon();
void OnOpenWebsite(wxCommandEvent& event);
@@ -69,7 +73,7 @@ public:
#ifdef __WXMAC__
private:
NMRecPtr m_pNotificationRequest;
-
+ wxTaskBarIconType m_iconType;
void MacRequestUserAttention();
void MacCancelUserAttentionRequest();
bool SetMacTaskBarIcon(const wxIcon& icon);
@@ -78,29 +82,15 @@ public:
wxMenu *CreatePopupMenu();
bool SetIcon(const wxIcon& icon, const wxString& message = wxEmptyString);
- inline bool IsBalloonsSupported() {
- return false;
- }
-
#define BALLOONTYPE_INFO 0
-
- bool SetBalloon(
- const wxIcon& icon,
- const wxString title = wxEmptyString,
- const wxString message = wxEmptyString,
- unsigned int iconballoon = BALLOONTYPE_INFO
- ) {
- return false;
- }
+ bool IsBalloonsSupported();
bool QueueBalloon(
const wxIcon& icon,
const wxString title = wxEmptyString,
const wxString message = wxEmptyString,
unsigned int iconballoon = BALLOONTYPE_INFO
- ) {
- return false;
- }
+ );
#endif
wxIcon m_iconTaskBarNormal;
diff --git a/clientgui/BOINCTaskCtrl.cpp b/clientgui/BOINCTaskCtrl.cpp
index 5d1f479..551bbf0 100644
--- a/clientgui/BOINCTaskCtrl.cpp
+++ b/clientgui/BOINCTaskCtrl.cpp
@@ -28,6 +28,12 @@
IMPLEMENT_DYNAMIC_CLASS(CBOINCTaskCtrl, wxScrolledWindow)
+#ifdef __WXMSW__
+BEGIN_EVENT_TABLE (CBOINCTaskCtrl, CBOINCBaseView)
+ EVT_CHILD_FOCUS(CBOINCTaskCtrl::OnChildFocus)
+END_EVENT_TABLE ()
+#endif
+
CBOINCTaskCtrl::CBOINCTaskCtrl() {}
@@ -155,6 +161,7 @@ wxInt32 CBOINCTaskCtrl::UpdateControls() {
unsigned int i;
unsigned int j;
bool bCreateMainSizer = false;
+ int layoutChanged = 0;
CTaskItemGroup* pGroup = NULL;
CTaskItem* pItem = NULL;
@@ -164,6 +171,7 @@ wxInt32 CBOINCTaskCtrl::UpdateControls() {
SetAutoLayout(TRUE);
m_pSizer = new wxBoxSizer( wxVERTICAL );
m_pSizer->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ layoutChanged = 1;
}
@@ -174,9 +182,7 @@ wxInt32 CBOINCTaskCtrl::UpdateControls() {
pGroup->m_pStaticBox = new wxStaticBox(this, wxID_ANY, pGroup->m_strName);
pGroup->m_pStaticBoxSizer = new wxStaticBoxSizer(pGroup->m_pStaticBox, wxVERTICAL);
m_pSizer->Add(pGroup->m_pStaticBoxSizer, 0, wxEXPAND|wxALL, 5);
-#ifdef __WXMAC__
- pGroup->SetupMacAccessibilitySupport();
-#endif
+ layoutChanged = 1;
}
}
@@ -189,12 +195,21 @@ wxInt32 CBOINCTaskCtrl::UpdateControls() {
pItem->m_pButton = new wxButton;
pItem->m_strNameEllipsed = pItem->m_strName;
EllipseStringIfNeeded(pItem->m_strNameEllipsed);
+#ifdef __WXMSW__
+ // On Windows with wxWidgets 2.9.4, buttons don't refresh properly unless
+ // they are children of the wxStaticBox, but on Mac the layout is wrong
+ // unless the buttons are children of the parent of the wxStaticBox.
+ // ToDo: merge these cases when these bugs are fixed in wxWidgets.
+ pItem->m_pButton->Create(pGroup->m_pStaticBox, pItem->m_iEventID, pItem->m_strNameEllipsed, wxDefaultPosition, wxSize(TASKBUTTONWIDTH, -1), 0);
+#else
pItem->m_pButton->Create(this, pItem->m_iEventID, pItem->m_strNameEllipsed, wxDefaultPosition, wxSize(TASKBUTTONWIDTH, -1), 0);
+#endif
pItem->m_pButton->SetHelpText(pItem->m_strDescription);
#if wxUSE_TOOLTIPS
pItem->m_pButton->SetToolTip(pItem->m_strDescription);
#endif
pGroup->m_pStaticBoxSizer->Add(pItem->m_pButton, 0, wxEXPAND|wxALL, 5);
+ layoutChanged = 1;
}
}
}
@@ -205,9 +220,11 @@ wxInt32 CBOINCTaskCtrl::UpdateControls() {
// Force update layout and scrollbars, since nothing we do here
// necessarily generates a size event which would do it for us.
- FitInside();
+ if (layoutChanged) {
+ Fit ();
+ }
- return 0;
+ return layoutChanged;
}
@@ -251,6 +268,55 @@ bool CBOINCTaskCtrl::OnRestoreState(wxConfigBase* pConfig) {
}
+#ifdef __WXMSW__
+// Work around a problem on Windows where clicking on a button
+// in the web sites Task Item Group sometimes causes the task
+// control panel to scroll that button out of view but does not
+// send the button clicked event. This is because the task
+// control panel is the parent of the Task Item Group's
+// wxStaticBox, which is the parent of the button; if we have
+// scroll bars the Child Focus Event scrolls the task control
+// panel to make the wxStaticBox fully visible. To prevent this,
+// we intercept the Child Focus Event, scroll only enough to
+// make the button visible if it is not already visible, and
+// do not call event.Skip.
+void CBOINCTaskCtrl::OnChildFocus(wxChildFocusEvent&) {
+ int stepx, stepy;
+ int startx, starty;
+ int diff = 0;
+
+ wxWindow* theButton = wxWindow::FindFocus();
+ if (!theButton) return;
+
+ // Get button position relative to Task Control's viewing area
+ wxRect buttonRect(
+ ScreenToClient(theButton->GetScreenPosition()), theButton->GetSize()
+ );
+
+ const wxRect viewRect(GetClientRect());
+ if (viewRect.Contains(buttonRect)){
+ return; // Already fully visible
+ }
+
+ GetScrollPixelsPerUnit(&stepx, &stepy);
+
+ GetViewStart(&startx, &starty);
+
+ if (buttonRect.GetTop() < 0) {
+ diff = buttonRect.GetTop();
+ } else if (buttonRect.GetBottom() > viewRect.GetHeight()) {
+ diff = buttonRect.GetBottom() - viewRect.GetHeight() + 1;
+ // round up to next scroll step if we can't get exact position,
+ // so that the button is fully visible
+ diff += stepy - 1;
+ }
+
+ starty = (starty * stepy + diff) / stepy;
+ Scroll(startx, starty);
+}
+#endif
+
+
void CBOINCTaskCtrl::EllipseStringIfNeeded(wxString& s) {
int w, h;
int maxWidth = TASKBUTTONWIDTH - 10;
diff --git a/clientgui/BOINCTaskCtrl.h b/clientgui/BOINCTaskCtrl.h
index 4bfbf52..bc37a0a 100644
--- a/clientgui/BOINCTaskCtrl.h
+++ b/clientgui/BOINCTaskCtrl.h
@@ -50,6 +50,10 @@ public:
virtual bool OnSaveState( wxConfigBase* pConfig );
virtual bool OnRestoreState( wxConfigBase* pConfig );
+#ifdef __WXMSW__
+ void OnChildFocus(wxChildFocusEvent& event);
+#endif
+
void EllipseStringIfNeeded( wxString& s );
private:
@@ -57,6 +61,10 @@ private:
CBOINCBaseView* m_pParent;
wxBoxSizer* m_pSizer;
+
+#ifdef __WXMSW__
+ DECLARE_EVENT_TABLE()
+#endif
};
diff --git a/clientgui/CompletionPage.cpp b/clientgui/CompletionPage.cpp
index 18387c3..354a6a5 100644
--- a/clientgui/CompletionPage.cpp
+++ b/clientgui/CompletionPage.cpp
@@ -230,7 +230,7 @@ void CCompletionPage::OnPageChanged( wxWizardExEvent& event ) {
if (pSkinAdvanced->IsBranded()) {
strTitle.Printf(
_("Update from %s completed."),
- pWAP->project_config.name.c_str()
+ pWAP->m_strProjectName.c_str()
);
} else {
strTitle = _("Update completed.");
diff --git a/clientgui/DlgAbout.cpp b/clientgui/DlgAbout.cpp
index 22a8541..e5bbf60 100644
--- a/clientgui/DlgAbout.cpp
+++ b/clientgui/DlgAbout.cpp
@@ -189,7 +189,7 @@ void CDlgAbout::CreateControls() {
itemFlexGridSizer7->Add(itemStaticText12, 0, wxALIGN_RIGHT|wxALIGN_TOP|wxLEFT|wxRIGHT, 5);
wxStaticText* itemStaticText13 = new wxStaticText;
- itemStaticText13->Create( itemDialog1, wxID_STATIC, _("(C) 2003-2013 University of California, Berkeley.\nAll Rights Reserved."), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText13->Create( itemDialog1, wxID_STATIC, _("(C) 2003-2014 University of California, Berkeley.\nAll Rights Reserved."), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer7->Add(itemStaticText13, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
wxStaticText* itemStaticText14 = new wxStaticText;
diff --git a/clientgui/DlgAdvPreferences.cpp b/clientgui/DlgAdvPreferences.cpp
index fde6f7b..af153aa 100644
--- a/clientgui/DlgAdvPreferences.cpp
+++ b/clientgui/DlgAdvPreferences.cpp
@@ -348,6 +348,7 @@ void clamp_pct(double& x) {
}
/* write overridden preferences to disk (global_prefs_override.xml) */
+/* IMPORTANT: Any items added here must be checked in ValidateInput()! */
bool CDlgAdvPreferences::SavePreferencesSettings() {
double td;
@@ -409,6 +410,7 @@ bool CDlgAdvPreferences::SavePreferencesSettings() {
m_txtProcUseCPUTime->GetValue().ToDouble(&td);
prefs.cpu_usage_limit=td;
mask.cpu_usage_limit=true;
+
// network page
m_txtNetConnectInterval->GetValue().ToDouble(&td);
prefs.work_buf_min_days=td;
@@ -539,7 +541,7 @@ void CDlgAdvPreferences::UpdateControlStates() {
/* validates the entered informations */
bool CDlgAdvPreferences::ValidateInput() {
- wxString invMsgFloat = _("invalid float");
+ wxString invMsgFloat = _("invalid number");
wxString invMsgTime = _("invalid time, format is HH:MM");
wxString invMsgInterval = _("invalid time interval, format is HH:MM-HH:MM");
wxString buffer;
@@ -585,32 +587,75 @@ bool CDlgAdvPreferences::ValidateInput() {
}
node = node->GetNext();
}
+
+ buffer = m_txtProcSwitchEvery->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtProcSwitchEvery);
+ return false;
+ }
+
+ buffer = m_txtProcUseProcessors->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtProcUseProcessors);
+ return false;
+ }
+
+ buffer = m_txtProcUseCPUTime->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtProcUseCPUTime);
+ return false;
+ }
+
//net page
- buffer = m_txtNetEveryDayStart->GetValue();
- if(!IsValidTimeValue(buffer)) {
- ShowErrorMessage(invMsgTime,m_txtNetEveryDayStart);
+ buffer = m_txtNetDownloadRate->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtNetDownloadRate);
return false;
}
-
- buffer = m_txtNetEveryDayStop->GetValue();
- if(!IsValidTimeValue(buffer)) {
- ShowErrorMessage(invMsgTime,m_txtNetEveryDayStop);
+
+ buffer = m_txtNetUploadRate->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtNetUploadRate);
return false;
}
-
+
+ buffer = m_txt_daily_xfer_limit_mb->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txt_daily_xfer_limit_mb);
+ return false;
+ }
+
+ buffer = m_txt_daily_xfer_period_days->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txt_daily_xfer_period_days);
+ return false;
+ }
+
//limit additional days from 0 to 10
double td;
- m_txtNetConnectInterval->GetValue().ToDouble(&td);
+ if (!m_txtNetConnectInterval->GetValue().ToDouble(&td)) td = -1.;
if(td>10.0 || td < 0.0) {
ShowErrorMessage(invMsgFloat,m_txtNetConnectInterval);
return false;
}
- m_txtNetAdditionalDays->GetValue().ToDouble(&td);
+ if (!m_txtNetAdditionalDays->GetValue().ToDouble(&td)) td = -1.;
if(td>10.0 || td < 0.0) {
ShowErrorMessage(invMsgFloat,m_txtNetAdditionalDays);
return false;
}
+ buffer = m_txtNetEveryDayStart->GetValue();
+ if(!IsValidTimeValue(buffer)) {
+ ShowErrorMessage(invMsgTime,m_txtNetEveryDayStart);
+ return false;
+ }
+
+ buffer = m_txtNetEveryDayStop->GetValue();
+ if(!IsValidTimeValue(buffer)) {
+ ShowErrorMessage(invMsgTime,m_txtNetEveryDayStop);
+ return false;
+ }
+
//all text ctrls in net special time panel
children = m_panelNetSpecialTimes->GetChildren();
@@ -631,6 +676,49 @@ bool CDlgAdvPreferences::ValidateInput() {
node = node->GetNext();
}
+ //disk & memory usage page
+ buffer = m_txtDiskMaxSpace->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtDiskMaxSpace);
+ return false;
+ }
+
+ buffer = m_txtDiskLeastFree->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtDiskLeastFree);
+ return false;
+ }
+
+ buffer = m_txtDiskMaxOfTotal->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtDiskMaxOfTotal);
+ return false;
+ }
+
+ buffer = m_txtDiskWriteToDisk->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtDiskWriteToDisk);
+ return false;
+ }
+
+ buffer = m_txtDiskMaxSwap->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtDiskMaxSwap);
+ return false;
+ }
+
+ buffer = m_txtMemoryMaxInUse->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtMemoryMaxInUse);
+ return false;
+ }
+
+ buffer = m_txtMemoryMaxOnIdle->GetValue();
+ if(!IsValidFloatValue(buffer)) {
+ ShowErrorMessage(invMsgFloat, m_txtMemoryMaxOnIdle);
+ return false;
+ }
+
return true;
}
@@ -658,12 +746,12 @@ bool CDlgAdvPreferences::EnsureTabPageVisible(wxTextCtrl* txtCtrl) {
/* show an error message and set the focus to the control that caused the error */
void CDlgAdvPreferences::ShowErrorMessage(wxString& message,wxTextCtrl* errorCtrl) {
wxASSERT(this->EnsureTabPageVisible(errorCtrl));
- errorCtrl->SetFocus();
//
if(message.IsEmpty()){
message = _("invalid input value detected");
}
wxGetApp().SafeMessageBox(message,_("Validation Error"),wxOK | wxCENTRE | wxICON_ERROR,this);
+ errorCtrl->SetFocus();
}
/* checks if ch is a valid character for float values */
@@ -796,19 +884,19 @@ void CDlgAdvPreferences::OnAddExclusiveApp(wxCommandEvent&) {
#ifdef __WXMAC__
wxFileDialog picker(this, _("Applications to add"),
wxT("/Applications"), wxT(""), wxT("*.app"),
- wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_CHANGE_DIR|wxFD_MULTIPLE|wxFD_CHANGE_DIR
+ wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_MULTIPLE|wxFD_CHANGE_DIR
);
#elif defined(__WXMSW__)
//TODO: fill in the default directory for MSW
wxFileDialog picker(this, _("Applications to add"),
wxT("C:/Program Files"), wxT(""), wxT("*.exe"),
- wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_CHANGE_DIR|wxFD_MULTIPLE|wxFD_CHANGE_DIR
+ wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_MULTIPLE|wxFD_CHANGE_DIR
);
#else
//TODO: fill in the default directory for Linux
wxFileDialog picker(this, _("Applications to add"),
wxT("/usr/bin"), wxT(""), wxT("*"),
- wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_CHANGE_DIR|wxFD_MULTIPLE|wxFD_CHANGE_DIR
+ wxFD_OPEN|wxFD_FILE_MUST_EXIST|wxFD_MULTIPLE|wxFD_CHANGE_DIR
);
#endif
if (picker.ShowModal() != wxID_OK) return;
diff --git a/clientgui/DlgAdvPreferences.h b/clientgui/DlgAdvPreferences.h
index 5b13a12..757bc71 100644
--- a/clientgui/DlgAdvPreferences.h
+++ b/clientgui/DlgAdvPreferences.h
@@ -69,7 +69,7 @@ private:
GLOBAL_PREFS prefs;
GLOBAL_PREFS_MASK mask;
LOG_FLAGS log_flags;
- CONFIG config;
+ CC_CONFIG config;
bool m_bExclusiveAppsDataChanged;
bool m_bPrefsDataChanged;
bool m_bInInit;
diff --git a/clientgui/DlgAdvPreferencesBase.cpp b/clientgui/DlgAdvPreferencesBase.cpp
index 1cff779..54a58ca 100644
--- a/clientgui/DlgAdvPreferencesBase.cpp
+++ b/clientgui/DlgAdvPreferencesBase.cpp
@@ -34,6 +34,9 @@
///////////////////////////////////////////////////////////////////////////
+// NOTE: On MS Windows with wxWidgets 3.0, controls inside a wxStaticBox
+// don't refresh properly unless they are children of the wxStaticBox!
+//
CDlgAdvPreferencesBase::CDlgAdvPreferencesBase( wxWindow* parent, int id, wxString title, wxPoint pos, wxSize size, int style ) :
wxDialog( parent, id, title, pos, size, style )
{
@@ -43,7 +46,7 @@ CDlgAdvPreferencesBase::CDlgAdvPreferencesBase( wxWindow* parent, int id, wxStri
wxASSERT(pSkinAdvanced);
wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
- strCaption.Printf(_("%s - Preferences"), pSkinAdvanced->GetApplicationShortName().c_str());
+ strCaption.Printf(_("%s - Computing preferences"), pSkinAdvanced->GetApplicationShortName().c_str());
}
this->SetExtraStyle( this->GetExtraStyle() | wxWS_EX_VALIDATE_RECURSIVELY );
@@ -51,18 +54,19 @@ CDlgAdvPreferencesBase::CDlgAdvPreferencesBase( wxWindow* parent, int id, wxStri
this->SetTitle(strCaption);
wxBoxSizer* dialogSizer = new wxBoxSizer( wxVERTICAL );
+ wxStaticBox* topControlsStaticBox = new wxStaticBox( this, -1, wxT("") );
- wxStaticBoxSizer* topControlsSizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, wxT("") ), wxHORIZONTAL );
+ wxStaticBoxSizer* topControlsSizer = new wxStaticBoxSizer( topControlsStaticBox, wxHORIZONTAL );
m_bmpWarning = new wxStaticBitmap( this, ID_DEFAULT, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
m_bmpWarning->SetMinSize( wxSize( 48,48 ) );
topControlsSizer->Add( m_bmpWarning, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0 );
- m_staticText321 = new wxStaticText( this, ID_DEFAULT, _("This dialog controls preferences for this computer only.\nClick OK to set preferences.\nClick Clear to restore web-based settings (except exclusive apps)."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText321 = new wxStaticText( topControlsStaticBox, ID_DEFAULT, _("This dialog controls preferences for this computer only.\nClick OK to set preferences.\nClick Clear to restore web-based settings (except exclusive apps)."), wxDefaultPosition, wxDefaultSize, 0 );
topControlsSizer->Add( m_staticText321, 1, wxALL, 1 );
- m_btnClear = new wxButton( this, ID_BTN_CLEAR, _("Clear"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_btnClear = new wxButton( topControlsStaticBox, ID_BTN_CLEAR, _("Clear"), wxDefaultPosition, wxDefaultSize, 0 );
m_btnClear->SetToolTip( _("clear all local preferences and close the dialog") );
topControlsSizer->Add( m_btnClear, 0, wxALIGN_BOTTOM|wxALL, 1 );
@@ -131,11 +135,11 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
wxBoxSizer* processorTabSizer = new wxBoxSizer( wxVERTICAL );
- wxStaticBoxSizer* computingAllowedBoxSizer = new wxStaticBoxSizer(
- new wxStaticBox(processorTab, -1, _("Computing allowed") ), wxVERTICAL
- );
+ wxStaticBox* computingAllowedStaticBox = new wxStaticBox(processorTab, -1, _("Computing allowed") );
+ wxStaticBoxSizer* computingAllowedBoxSizer = new wxStaticBoxSizer(computingAllowedStaticBox, wxVERTICAL);
+
m_chkProcOnBatteries = new wxCheckBox(
- processorTab, ID_CHKPROCONBATTERIES,
+ computingAllowedStaticBox, ID_CHKPROCONBATTERIES,
_("While computer is on batteries"), wxDefaultPosition, wxDefaultSize, 0
);
m_chkProcOnBatteries->SetToolTip(
@@ -144,7 +148,7 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
computingAllowedBoxSizer->Add( m_chkProcOnBatteries, 0, wxALL, 5 );
m_chkProcInUse = new wxCheckBox(
- processorTab, ID_CHKPROCINUSE,
+ computingAllowedStaticBox, ID_CHKPROCINUSE,
_("While computer is in use"), wxDefaultPosition, wxDefaultSize, 0
);
m_chkProcInUse->SetToolTip(
@@ -153,7 +157,7 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
computingAllowedBoxSizer->Add( m_chkProcInUse, 0, wxALL, 5 );
m_chkGPUProcInUse = new wxCheckBox(
- processorTab, ID_CHKGPUPROCINUSE,
+ computingAllowedStaticBox, ID_CHKGPUPROCINUSE,
_("Use GPU while computer is in use"), wxDefaultPosition, wxDefaultSize, 0
);
m_chkGPUProcInUse->SetToolTip(
@@ -168,14 +172,14 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
procIdleSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
procIdleSizer->Add(
new wxStaticText(
- processorTab, ID_DEFAULT,
+ computingAllowedStaticBox, ID_DEFAULT,
_("Only after computer has been idle for"),
wxDefaultPosition, wxDefaultSize, 0
),
0, wxALL, 5
);
m_txtProcIdleFor = new wxTextCtrl(
- processorTab, ID_TXTPROCIDLEFOR, wxT(""), wxDefaultPosition,
+ computingAllowedStaticBox, ID_TXTPROCIDLEFOR, wxT(""), wxDefaultPosition,
wxSize( 50,-1 ), wxTE_RIGHT
);
m_txtProcIdleFor->SetToolTip(
@@ -184,13 +188,13 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
procIdleSizer->Add( m_txtProcIdleFor, 0, wxALL, 1 );
procIdleSizer->Add(
new wxStaticText(
- processorTab, ID_DEFAULT, _("minutes"),
+ computingAllowedStaticBox, ID_DEFAULT, _("minutes"),
wxDefaultPosition, wxDefaultSize, 0
),
0, wxALL, 5
);
procIdleSizer->Add(
- new wxStaticText( processorTab, ID_DEFAULT, wxT(""), wxDefaultPosition, wxDefaultSize, 0),
+ new wxStaticText( computingAllowedStaticBox, ID_DEFAULT, wxT(""), wxDefaultPosition, wxDefaultSize, 0),
0, wxALL, 5
);
computingAllowedBoxSizer->Add( procIdleSizer, 0, wxEXPAND, 5);
@@ -202,15 +206,15 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
maxLoadSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
maxLoadSizer->Add(
new wxStaticText(
- processorTab, ID_DEFAULT,
+ computingAllowedStaticBox, ID_DEFAULT,
_("While processor usage is less than"),
wxDefaultPosition, wxDefaultSize, 0
),
0, wxALL, 5
);
m_txtMaxLoad = new wxTextCtrl(
- processorTab, ID_TXTMAXLOAD, wxT(""), wxDefaultPosition,
- wxSize( 30,-1 ), wxTE_RIGHT
+ computingAllowedStaticBox, ID_TXTMAXLOAD, wxT(""), wxDefaultPosition,
+ wxSize( 50,-1 ), wxTE_RIGHT
);
m_txtMaxLoad->SetToolTip(
_("suspend work if processor usage exceeds this level")
@@ -218,13 +222,13 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
maxLoadSizer->Add( m_txtMaxLoad, 0, wxALL, 1 );
maxLoadSizer->Add(
new wxStaticText(
- processorTab, ID_DEFAULT, _("percent (0 means no restriction)"),
+ computingAllowedStaticBox, ID_DEFAULT, _("percent (0 means no restriction)"),
wxDefaultPosition, wxDefaultSize, 0
),
0, wxALL, 5
);
maxLoadSizer->Add(
- new wxStaticText( processorTab, ID_DEFAULT, wxT(""), wxDefaultPosition, wxDefaultSize, 0),
+ new wxStaticText( computingAllowedStaticBox, ID_DEFAULT, wxT(""), wxDefaultPosition, wxDefaultSize, 0),
0, wxALL, 5
);
computingAllowedBoxSizer->Add( maxLoadSizer, 0, wxEXPAND, 5);
@@ -232,31 +236,31 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
wxBoxSizer* cpuTimesSizer = new wxBoxSizer( wxHORIZONTAL );
- m_staticText351 = new wxStaticText( processorTab, ID_DEFAULT, _("Every day between hours of"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText351 = new wxStaticText( computingAllowedStaticBox, ID_DEFAULT, _("Every day between hours of"), wxDefaultPosition, wxDefaultSize, 0 );
cpuTimesSizer->Add( m_staticText351, 0, wxALL, 5 );
- m_txtProcEveryDayStart = new wxTextCtrl( processorTab, ID_TXTPROCEVERYDAYSTART, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtProcEveryDayStart = new wxTextCtrl( computingAllowedStaticBox, ID_TXTPROCEVERYDAYSTART, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
m_txtProcEveryDayStart->SetToolTip( _("start work at this time") );
cpuTimesSizer->Add( m_txtProcEveryDayStart, 0, wxALL, 1 );
- m_staticText25 = new wxStaticText( processorTab, ID_DEFAULT, _("and"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticText25 = new wxStaticText( computingAllowedStaticBox, ID_DEFAULT, _("and"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
cpuTimesSizer->Add( m_staticText25, 0, wxALL|wxEXPAND, 5 );
- m_txtProcEveryDayStop = new wxTextCtrl( processorTab, ID_TXTPROCEVERYDAYSTOP, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtProcEveryDayStop = new wxTextCtrl( computingAllowedStaticBox, ID_TXTPROCEVERYDAYSTOP, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
m_txtProcEveryDayStop->SetToolTip( _("stop work at this time") );
cpuTimesSizer->Add( m_txtProcEveryDayStop, 0, wxALL, 1 );
- m_staticText55 = new wxStaticText( processorTab, ID_DEFAULT, _("(no restriction if equal)"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
+ m_staticText55 = new wxStaticText( computingAllowedStaticBox, ID_DEFAULT, _("(no restriction if equal)"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE );
cpuTimesSizer->Add( m_staticText55, 0, wxALL|wxEXPAND, 5 );
computingAllowedBoxSizer->Add( cpuTimesSizer, 0, wxEXPAND, 1 );
- m_staticText36 = new wxStaticText( processorTab, ID_DEFAULT, _("Day-of-week override:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText36 = new wxStaticText( computingAllowedStaticBox, ID_DEFAULT, _("Day-of-week override:"), wxDefaultPosition, wxDefaultSize, 0 );
computingAllowedBoxSizer->Add( m_staticText36, 0, wxALL, 5 );
- m_panelProcSpecialTimes = new wxPanel( processorTab, ID_DEFAULT, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ m_panelProcSpecialTimes = new wxPanel( computingAllowedStaticBox, ID_DEFAULT, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
m_panelProcSpecialTimes->SetExtraStyle( wxWS_EX_VALIDATE_RECURSIVELY );
m_panelProcSpecialTimes->SetToolTip( _("check box to specify hours for this day of week") );
@@ -320,43 +324,45 @@ wxPanel* CDlgAdvPreferencesBase::createProcessorTab(wxNotebook* notebook)
processorTabSizer->Add( computingAllowedBoxSizer, 0, wxEXPAND, 1 );
- wxStaticBoxSizer* miscProcBoxSizer = new wxStaticBoxSizer( new wxStaticBox( processorTab, -1, _("Other options") ), wxVERTICAL );
+ wxStaticBox* miscProcStaticBox = new wxStaticBox( processorTab, -1, _("Other options") );
+ wxStaticBoxSizer* miscProcBoxSizer = new wxStaticBoxSizer( miscProcStaticBox, wxVERTICAL );
wxFlexGridSizer* miscProcGridSizer = new wxFlexGridSizer( 3, 3, 0, 0 );
miscProcGridSizer->AddGrowableCol( 2 );
miscProcGridSizer->SetFlexibleDirection( wxHORIZONTAL );
miscProcGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
- m_staticText18 = new wxStaticText( processorTab, ID_DEFAULT, _("Switch between applications every"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText18 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("Switch between applications every"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
miscProcGridSizer->Add( m_staticText18, 0, wxALL|wxEXPAND, 5 );
- m_txtProcSwitchEvery = new wxTextCtrl( processorTab, ID_TXTPROCSWITCHEVERY, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtProcSwitchEvery = new wxTextCtrl( miscProcStaticBox, ID_TXTPROCSWITCHEVERY, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
miscProcGridSizer->Add( m_txtProcSwitchEvery, 0, wxALL, 1 );
- m_staticText19 = new wxStaticText( processorTab, ID_DEFAULT, _("minutes"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText19 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("minutes"), wxDefaultPosition, wxDefaultSize, 0 );
miscProcGridSizer->Add( m_staticText19, 0, wxALL, 5 );
- m_staticText20 = new wxStaticText( processorTab, ID_DEFAULT, _("On multiprocessor systems, use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText20 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("On multiprocessor systems, use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
miscProcGridSizer->Add( m_staticText20, 0, wxALL|wxEXPAND, 5 );
- m_txtProcUseProcessors = new wxTextCtrl( processorTab, ID_TXTPROCUSEPROCESSORS, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtProcUseProcessors = new wxTextCtrl( miscProcStaticBox, ID_TXTPROCUSEPROCESSORS, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
miscProcGridSizer->Add( m_txtProcUseProcessors, 0, wxALL, 1 );
/*xgettext:no-c-format*/
- m_staticText21 = new wxStaticText( processorTab, ID_DEFAULT, _("% of the processors (0 means ignore this setting)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText21 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("% of the processors (0 means ignore this setting)"), wxDefaultPosition, wxDefaultSize, 0 );
miscProcGridSizer->Add( m_staticText21, 0, wxALL, 5 );
- m_staticText22 = new wxStaticText( processorTab, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText22 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
miscProcGridSizer->Add( m_staticText22, 0, wxALL|wxEXPAND, 5 );
- m_txtProcUseCPUTime = new wxTextCtrl( processorTab, ID_TXTPOCUSECPUTIME, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtProcUseCPUTime = new wxTextCtrl( miscProcStaticBox, ID_TXTPOCUSECPUTIME, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
miscProcGridSizer->Add( m_txtProcUseCPUTime, 0, wxALL, 1 );
/*xgettext:no-c-format*/
- m_staticText23 = new wxStaticText( processorTab, ID_DEFAULT, _("% CPU time"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText23 = new wxStaticText( miscProcStaticBox, ID_DEFAULT, _("% CPU time"), wxDefaultPosition, wxDefaultSize, 0 );
miscProcGridSizer->Add( m_staticText23, 0, wxALL, 5 );
miscProcBoxSizer->Add( miscProcGridSizer, 0, wxEXPAND, 1 );
+ miscProcBoxSizer->AddSpacer(1); // Ensure m_staticText22 is fully visible on Mac
processorTabSizer->Add( miscProcBoxSizer, 0, wxEXPAND, 1 );
@@ -374,63 +380,64 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook)
wxBoxSizer* networkTabSizer = new wxBoxSizer( wxVERTICAL );
- wxStaticBoxSizer* networkGeneralBoxSizer = new wxStaticBoxSizer( new wxStaticBox( networkTab, -1, _("General options") ), wxVERTICAL );
+ wxStaticBox* networkGeneralStaticBox = new wxStaticBox( networkTab, -1, _("General options") );
+ wxStaticBoxSizer* networkGeneralBoxSizer = new wxStaticBoxSizer( networkGeneralStaticBox, wxVERTICAL );
- wxFlexGridSizer* networkGeneralGridSizer = new wxFlexGridSizer( 3, 6, 0, 0 );
+ wxFlexGridSizer* networkGeneralGridSizer = new wxFlexGridSizer(6, 0, 0 );
networkGeneralGridSizer->SetFlexibleDirection( wxHORIZONTAL );
networkGeneralGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
// upload/download rates
- m_staticText32 = new wxStaticText( networkTab, ID_DEFAULT, _("Maximum download rate"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText32 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Maximum download rate"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText32, 0, wxALL, 5 );
- m_txtNetDownloadRate = new wxTextCtrl( networkTab, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtNetDownloadRate = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
networkGeneralGridSizer->Add( m_txtNetDownloadRate, 0, wxALL, 1 );
- m_staticText33 = new wxStaticText( networkTab, ID_DEFAULT, _("KBytes/sec."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText33 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("KBytes/sec."), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText33, 0, wxALL, 5 );
- m_staticText34 = new wxStaticText( networkTab, ID_DEFAULT, _("Maximum upload rate"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText34 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Maximum upload rate"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText34, 0, wxALIGN_RIGHT|wxALL, 5 );
- m_txtNetUploadRate = new wxTextCtrl( networkTab, ID_TXTNETUPLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtNetUploadRate = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETUPLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
networkGeneralGridSizer->Add( m_txtNetUploadRate, 0, wxALL, 1 );
- m_staticText35 = new wxStaticText( networkTab, ID_DEFAULT, _("KBytes/sec."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText35 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("KBytes/sec."), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText35, 0, wxALL, 5 );
// long-term quota
- m_staticText_daily_xfer1 = new wxStaticText( networkTab, ID_DEFAULT, _("Transfer at most"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText_daily_xfer1 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Transfer at most"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText_daily_xfer1, 0, wxALL, 5 );
- m_txt_daily_xfer_limit_mb = new wxTextCtrl( networkTab, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txt_daily_xfer_limit_mb = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETDOWNLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
networkGeneralGridSizer->Add( m_txt_daily_xfer_limit_mb, 0, wxALL, 1 );
- m_staticText_daily_xfer2 = new wxStaticText( networkTab, ID_DEFAULT, _("Mbytes"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText_daily_xfer2 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("Mbytes"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText_daily_xfer2, 0, wxALL, 5 );
- m_staticText_daily_xfer3 = new wxStaticText( networkTab, ID_DEFAULT, _("every"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText_daily_xfer3 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("every"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText_daily_xfer3, 0, wxALIGN_RIGHT|wxALL, 5 );
- m_txt_daily_xfer_period_days = new wxTextCtrl( networkTab, ID_TXTNETUPLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txt_daily_xfer_period_days = new wxTextCtrl( networkGeneralStaticBox, ID_TXTNETUPLOADRATE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
networkGeneralGridSizer->Add( m_txt_daily_xfer_period_days, 0, wxALL, 1 );
- m_staticText_daily_xfer4 = new wxStaticText( networkTab, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText_daily_xfer4 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText_daily_xfer4, 0, wxALL, 5 );
// buffer sizes
m_staticText30 = new wxStaticText(
- networkTab, ID_DEFAULT,
+ networkGeneralStaticBox, ID_DEFAULT,
_("Minimum work buffer"), wxDefaultPosition, wxDefaultSize, 0
);
networkGeneralGridSizer->Add( m_staticText30, 0, wxALL, 5 );
m_txtNetConnectInterval = new wxTextCtrl(
- networkTab, ID_TXTNETCONNECTINTERVAL, wxT(""),
+ networkGeneralStaticBox, ID_TXTNETCONNECTINTERVAL, wxT(""),
wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT
);
m_txtNetConnectInterval->SetToolTip(
@@ -440,18 +447,18 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook)
networkGeneralGridSizer->Add( m_txtNetConnectInterval, 0, wxALL, 1 );
m_staticText31 = new wxStaticText(
- networkTab, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0
+ networkGeneralStaticBox, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0
);
networkGeneralGridSizer->Add( m_staticText31, 0, wxALL, 5 );
m_staticText331 = new wxStaticText(
- networkTab, ID_DEFAULT,
+ networkGeneralStaticBox, ID_DEFAULT,
_("Max additional work buffer"), wxDefaultPosition, wxDefaultSize, 0
);
networkGeneralGridSizer->Add( m_staticText331, 0, wxALIGN_RIGHT|wxALL, 5 );
m_txtNetAdditionalDays = new wxTextCtrl(
- networkTab, ID_TXTNETADDITIONALDAYS, wxT(""),
+ networkGeneralStaticBox, ID_TXTNETADDITIONALDAYS, wxT(""),
wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT
);
m_txtNetAdditionalDays->SetToolTip(
@@ -459,10 +466,10 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook)
);
networkGeneralGridSizer->Add( m_txtNetAdditionalDays, 0, wxALL, 1 );
- m_staticText341 = new wxStaticText( networkTab, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText341 = new wxStaticText( networkGeneralStaticBox, ID_DEFAULT, _("days"), wxDefaultPosition, wxDefaultSize, 0 );
networkGeneralGridSizer->Add( m_staticText341, 0, wxALL, 5 );
- m_chkNetSkipImageVerification = new wxCheckBox( networkTab, ID_CHKNETSKIPIMAGEVERIFICATION, _("Skip image file verification"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_chkNetSkipImageVerification = new wxCheckBox( networkGeneralStaticBox, ID_CHKNETSKIPIMAGEVERIFICATION, _("Skip image file verification"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkNetSkipImageVerification->SetToolTip( _("check this if your Internet provider modifies image files") );
@@ -472,15 +479,16 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook)
networkTabSizer->Add( networkGeneralBoxSizer, 0, wxEXPAND, 1 );
- wxStaticBoxSizer* connectOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( networkTab, -1, _("Connect options") ), wxVERTICAL );
+ wxStaticBox* connectOptionsStaticBox = new wxStaticBox( networkTab, -1, _("Connect options") );
+ wxStaticBoxSizer* connectOptionsSizer = new wxStaticBoxSizer( connectOptionsStaticBox, wxVERTICAL );
- m_chkNetConfirmBeforeConnect = new wxCheckBox( networkTab, ID_CHKNETCONFIRMBEFORECONNECT, _("Confirm before connecting to internet"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_chkNetConfirmBeforeConnect = new wxCheckBox( connectOptionsStaticBox, ID_CHKNETCONFIRMBEFORECONNECT, _("Confirm before connecting to internet"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkNetConfirmBeforeConnect->SetToolTip( _("if checked, a confirmation dialog will be displayed before trying to connect to the Internet") );
connectOptionsSizer->Add( m_chkNetConfirmBeforeConnect, 0, wxALL, 5 );
- m_chkNetDisconnectWhenDone = new wxCheckBox( networkTab, ID_CHKNETDISCONNECTWHENDONE, _("Disconnect when done"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_chkNetDisconnectWhenDone = new wxCheckBox( connectOptionsStaticBox, ID_CHKNETDISCONNECTWHENDONE, _("Disconnect when done"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkNetDisconnectWhenDone->SetToolTip( _("if checked, BOINC hangs up when network usage is done\n(only relevant for dialup-connection)") );
@@ -488,35 +496,36 @@ wxPanel* CDlgAdvPreferencesBase::createNetworkTab(wxNotebook* notebook)
networkTabSizer->Add( connectOptionsSizer, 0, wxEXPAND, 1 );
- wxStaticBoxSizer* networkTimesBoxSizer = new wxStaticBoxSizer( new wxStaticBox( networkTab, -1, _("Network usage allowed") ), wxVERTICAL );
+ wxStaticBox* networkTimesStaticBox = new wxStaticBox( networkTab, -1, _("Network usage allowed") );
+ wxStaticBoxSizer* networkTimesBoxSizer = new wxStaticBoxSizer( networkTimesStaticBox, wxVERTICAL );
wxBoxSizer* networkTimesSizer = new wxBoxSizer( wxHORIZONTAL );
- m_staticText38 = new wxStaticText( networkTab, ID_DEFAULT, _("Every day between hours of"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText38 = new wxStaticText( networkTimesStaticBox, ID_DEFAULT, _("Every day between hours of"), wxDefaultPosition, wxDefaultSize, 0 );
networkTimesSizer->Add( m_staticText38, 0, wxALL, 5 );
- m_txtNetEveryDayStart = new wxTextCtrl( networkTab, ID_TXTNETEVERYDAYSTART, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), 0 );
+ m_txtNetEveryDayStart = new wxTextCtrl( networkTimesStaticBox, ID_TXTNETEVERYDAYSTART, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), 0 );
m_txtNetEveryDayStart->SetToolTip( _("network usage start hour") );
networkTimesSizer->Add( m_txtNetEveryDayStart, 0, wxALL, 1 );
- m_staticText37 = new wxStaticText( networkTab, ID_DEFAULT, _("and"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText37 = new wxStaticText( networkTimesStaticBox, ID_DEFAULT, _("and"), wxDefaultPosition, wxDefaultSize, 0 );
networkTimesSizer->Add( m_staticText37, 0, wxALL, 5 );
- m_txtNetEveryDayStop = new wxTextCtrl( networkTab, ID_TXTNETEVERYDAYSTOP, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), 0 );
+ m_txtNetEveryDayStop = new wxTextCtrl( networkTimesStaticBox, ID_TXTNETEVERYDAYSTOP, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), 0 );
m_txtNetEveryDayStop->SetToolTip( _("network usage stop hour") );
networkTimesSizer->Add( m_txtNetEveryDayStop, 0, wxALL, 1 );
- m_staticText54 = new wxStaticText( networkTab, ID_DEFAULT, _("(no restriction if equal)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText54 = new wxStaticText( networkTimesStaticBox, ID_DEFAULT, _("(no restriction if equal)"), wxDefaultPosition, wxDefaultSize, 0 );
networkTimesSizer->Add( m_staticText54, 0, wxALL, 5 );
networkTimesBoxSizer->Add( networkTimesSizer, 0, wxEXPAND, 1 );
- m_staticText39 = new wxStaticText( networkTab, ID_DEFAULT, _("Day-of-week override:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText39 = new wxStaticText( networkTimesStaticBox, ID_DEFAULT, _("Day-of-week override:"), wxDefaultPosition, wxDefaultSize, 0 );
networkTimesBoxSizer->Add( m_staticText39, 0, wxALL, 5 );
- m_panelNetSpecialTimes = new wxPanel( networkTab, ID_DEFAULT, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ m_panelNetSpecialTimes = new wxPanel( networkTimesStaticBox, ID_DEFAULT, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
m_panelNetSpecialTimes->SetExtraStyle( wxWS_EX_VALIDATE_RECURSIVELY );
m_panelNetSpecialTimes->SetToolTip( _("check box to specify hours for this day of week") );
@@ -594,100 +603,102 @@ wxPanel* CDlgAdvPreferencesBase::createDiskAndMemoryTab(wxNotebook* notebook)
wxBoxSizer* diskAndMemoryBoxSizer = new wxBoxSizer( wxVERTICAL );
- wxStaticBoxSizer* diskUsageBoxSizer = new wxStaticBoxSizer( new wxStaticBox( diskMemoryTab, -1, _("Disk usage") ), wxVERTICAL );
+ wxStaticBox* diskUsageStaticBox = new wxStaticBox( diskMemoryTab, -1, _("Disk usage") );
+ wxStaticBoxSizer* diskUsageBoxSizer = new wxStaticBoxSizer( diskUsageStaticBox, wxVERTICAL );
wxFlexGridSizer* diskUsageGridSizer = new wxFlexGridSizer( 5, 3, 0, 0 );
diskUsageGridSizer->AddGrowableCol( 2 );
diskUsageGridSizer->SetFlexibleDirection( wxHORIZONTAL );
diskUsageGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
- m_staticText40 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText40 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
diskUsageGridSizer->Add( m_staticText40, 0, wxALL|wxEXPAND, 5 );
- m_txtDiskMaxSpace = new wxTextCtrl( diskMemoryTab, ID_TXTDISKMAXSPACE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtDiskMaxSpace = new wxTextCtrl( diskUsageStaticBox, ID_TXTDISKMAXSPACE, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
m_txtDiskMaxSpace->SetToolTip( _("the maximum disk space used by BOINC (in Gigabytes)") );
diskUsageGridSizer->Add( m_txtDiskMaxSpace, 0, wxALL, 1 );
- m_staticText41 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Gigabytes disk space"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText41 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Gigabytes disk space"), wxDefaultPosition, wxDefaultSize, 0 );
diskUsageGridSizer->Add( m_staticText41, 0, wxALL, 5 );
- m_staticText42 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Leave at least"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText42 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Leave at least"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
diskUsageGridSizer->Add( m_staticText42, 0, wxALL|wxEXPAND, 5 );
- m_txtDiskLeastFree = new wxTextCtrl( diskMemoryTab, ID_TXTDISKLEASTFREE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtDiskLeastFree = new wxTextCtrl( diskUsageStaticBox, ID_TXTDISKLEASTFREE, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
m_txtDiskLeastFree->SetToolTip( _("BOINC leaves at least this amount of disk space free (in Gigabytes)") );
diskUsageGridSizer->Add( m_txtDiskLeastFree, 0, wxALL, 1 );
- m_staticText43 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Gigabytes disk space free"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText43 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Gigabytes disk space free"), wxDefaultPosition, wxDefaultSize, 0 );
diskUsageGridSizer->Add( m_staticText43, 0, wxALL, 5 );
- m_staticText44 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText44 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
diskUsageGridSizer->Add( m_staticText44, 0, wxALL|wxEXPAND, 5 );
- m_txtDiskMaxOfTotal = new wxTextCtrl( diskMemoryTab, ID_TXTDISKMAXOFTOTAL, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtDiskMaxOfTotal = new wxTextCtrl( diskUsageStaticBox, ID_TXTDISKMAXOFTOTAL, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
m_txtDiskMaxOfTotal->SetToolTip( _("BOINC uses at most this percentage of total disk space") );
diskUsageGridSizer->Add( m_txtDiskMaxOfTotal, 0, wxALL, 1 );
/*xgettext:no-c-format*/
- m_staticText45 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("% of total disk space"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText45 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("% of total disk space"), wxDefaultPosition, wxDefaultSize, 0 );
diskUsageGridSizer->Add( m_staticText45, 0, wxALL, 5 );
- m_staticText46 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Tasks checkpoint to disk at most every"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText46 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Tasks checkpoint to disk at most every"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
diskUsageGridSizer->Add( m_staticText46, 0, wxALL|wxEXPAND, 5 );
- m_txtDiskWriteToDisk = new wxTextCtrl( diskMemoryTab, ID_TXTDISKWRITETODISK, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtDiskWriteToDisk = new wxTextCtrl( diskUsageStaticBox, ID_TXTDISKWRITETODISK, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
diskUsageGridSizer->Add( m_txtDiskWriteToDisk, 0, wxALL, 1 );
- m_staticText47 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("seconds"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText47 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("seconds"), wxDefaultPosition, wxDefaultSize, 0 );
diskUsageGridSizer->Add( m_staticText47, 0, wxALL, 5 );
- m_staticText48 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText48 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
diskUsageGridSizer->Add( m_staticText48, 0, wxALL|wxEXPAND, 5 );
- m_txtDiskMaxSwap = new wxTextCtrl( diskMemoryTab, ID_TXTDISKWRITETODISK, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtDiskMaxSwap = new wxTextCtrl( diskUsageStaticBox, ID_TXTDISKWRITETODISK, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
diskUsageGridSizer->Add( m_txtDiskMaxSwap, 0, wxALL, 1 );
/*xgettext:no-c-format*/
- m_staticText49 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("% of page file (swap space)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText49 = new wxStaticText( diskUsageStaticBox, ID_DEFAULT, _("% of page file (swap space)"), wxDefaultPosition, wxDefaultSize, 0 );
diskUsageGridSizer->Add( m_staticText49, 0, wxALL, 5 );
diskUsageBoxSizer->Add( diskUsageGridSizer, 0, wxEXPAND, 1 );
diskAndMemoryBoxSizer->Add( diskUsageBoxSizer, 0, wxEXPAND, 1 );
- wxStaticBoxSizer* memoryUsageBoxSizer = new wxStaticBoxSizer( new wxStaticBox( diskMemoryTab, -1, _("Memory usage") ), wxVERTICAL );
+ wxStaticBox* memoryUsageStaticBox = new wxStaticBox( diskMemoryTab, -1, _("Memory usage") );
+ wxStaticBoxSizer* memoryUsageBoxSizer = new wxStaticBoxSizer( memoryUsageStaticBox, wxVERTICAL );
wxFlexGridSizer* memoryUsageGridSizer = new wxFlexGridSizer( 3, 3, 0, 0 );
memoryUsageGridSizer->AddGrowableCol( 2 );
memoryUsageGridSizer->SetFlexibleDirection( wxHORIZONTAL );
memoryUsageGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
- m_staticText50 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText50 = new wxStaticText( memoryUsageStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
memoryUsageGridSizer->Add( m_staticText50, 0, wxALL|wxEXPAND, 5 );
- m_txtMemoryMaxInUse = new wxTextCtrl( diskMemoryTab, ID_TXTMEMORYMAXINUSE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtMemoryMaxInUse = new wxTextCtrl( memoryUsageStaticBox, ID_TXTMEMORYMAXINUSE, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
memoryUsageGridSizer->Add( m_txtMemoryMaxInUse, 0, wxALL, 1 );
/*xgettext:no-c-format*/
- m_staticText51 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("% when computer is in use"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText51 = new wxStaticText( memoryUsageStaticBox, ID_DEFAULT, _("% when computer is in use"), wxDefaultPosition, wxDefaultSize, 0 );
memoryUsageGridSizer->Add( m_staticText51, 0, wxALL, 5 );
- m_staticText52 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
+ m_staticText52 = new wxStaticText( memoryUsageStaticBox, ID_DEFAULT, _("Use at most"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT );
memoryUsageGridSizer->Add( m_staticText52, 0, wxALL|wxEXPAND, 5 );
- m_txtMemoryMaxOnIdle = new wxTextCtrl( diskMemoryTab, ID_TXTMEMORYMAXONIDLE, wxT(""), wxDefaultPosition, wxSize( 50,-1 ), wxTE_RIGHT );
+ m_txtMemoryMaxOnIdle = new wxTextCtrl( memoryUsageStaticBox, ID_TXTMEMORYMAXONIDLE, wxT(""), wxDefaultPosition, wxSize( 75,-1 ), wxTE_RIGHT );
memoryUsageGridSizer->Add( m_txtMemoryMaxOnIdle, 0, wxALL, 1 );
/*xgettext:no-c-format*/
- m_staticText53 = new wxStaticText( diskMemoryTab, ID_DEFAULT, _("% when computer is idle"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText53 = new wxStaticText( memoryUsageStaticBox, ID_DEFAULT, _("% when computer is idle"), wxDefaultPosition, wxDefaultSize, 0 );
memoryUsageGridSizer->Add( m_staticText53, 0, wxALL, 5 );
memoryUsageBoxSizer->Add( memoryUsageGridSizer, 0, wxEXPAND, 1 );
- m_chkMemoryWhileSuspended = new wxCheckBox( diskMemoryTab, ID_CHKMEMORYWHILESUSPENDED, _("Leave applications in memory while suspended"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_chkMemoryWhileSuspended = new wxCheckBox( memoryUsageStaticBox, ID_CHKMEMORYWHILESUSPENDED, _("Leave applications in memory while suspended"), wxDefaultPosition, wxDefaultSize, 0 );
m_chkMemoryWhileSuspended->SetToolTip( _("if checked, suspended work units are left in memory") );
@@ -709,22 +720,23 @@ wxPanel* CDlgAdvPreferencesBase::createExclusiveAppsTab(wxNotebook* notebook)
wxBoxSizer* exclusiveAppsTabBoxSizer = new wxBoxSizer( wxVERTICAL );
- wxStaticBoxSizer* exclusiveAppsListBoxSizer = new wxStaticBoxSizer( new wxStaticBox( exclusiveAppsTab, -1, _("Suspend processor and network usage when these applications are running:") ), wxVERTICAL );
+ wxStaticBox* exclusiveAppsListStaticBox = new wxStaticBox( exclusiveAppsTab, -1, _("Suspend processor and network usage when these applications are running:") );
+ wxStaticBoxSizer* exclusiveAppsListBoxSizer = new wxStaticBoxSizer( exclusiveAppsListStaticBox, wxVERTICAL );
wxBoxSizer* exclusiveAppsBoxSizer = new wxBoxSizer( wxVERTICAL );
- m_exclusiveApsListBox = new wxListBox(exclusiveAppsTab, ID_LISTBOX_EXCLAPPS, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT);
+ m_exclusiveApsListBox = new wxListBox(exclusiveAppsListStaticBox, ID_LISTBOX_EXCLAPPS, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_EXTENDED|wxLB_NEEDED_SB|wxLB_SORT);
exclusiveAppsBoxSizer->Add(m_exclusiveApsListBox, 1, wxALL|wxEXPAND, 5);
wxBoxSizer* exclusiveAppsButtonSizer = new wxBoxSizer( wxHORIZONTAL );
- m_addExclusiveAppButton = new wxButton( exclusiveAppsTab, ID_ADDEXCLUSIVEAPPBUTTON, _("Add..."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_addExclusiveAppButton = new wxButton( exclusiveAppsListStaticBox, ID_ADDEXCLUSIVEAPPBUTTON, _("Add..."), wxDefaultPosition, wxDefaultSize, 0 );
m_addExclusiveAppButton->SetToolTip( _("Add an application to this list"));
exclusiveAppsButtonSizer->Add( m_addExclusiveAppButton, 0, wxRIGHT, 5 );
exclusiveAppsButtonSizer->AddStretchSpacer();
- m_removeExclusiveAppButton = new wxButton( exclusiveAppsTab, ID_REMOVEEXCLUSIVEAPPBUTTON, _("Remove"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_removeExclusiveAppButton = new wxButton( exclusiveAppsListStaticBox, ID_REMOVEEXCLUSIVEAPPBUTTON, _("Remove"), wxDefaultPosition, wxDefaultSize, 0 );
m_removeExclusiveAppButton->SetToolTip( _("Remove an application from this list"));
exclusiveAppsButtonSizer->Add( m_removeExclusiveAppButton, 0, wxLEFT, 5 );
@@ -734,7 +746,7 @@ wxPanel* CDlgAdvPreferencesBase::createExclusiveAppsTab(wxNotebook* notebook)
moreOptionsLinkSizer->Add(
new wxStaticText(
- exclusiveAppsTab, ID_DEFAULT, _("For advanced options, refer to "),
+ exclusiveAppsListStaticBox, ID_DEFAULT, _("For advanced options, refer to "),
wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT
),
0, wxLEFT, 5
@@ -742,7 +754,7 @@ wxPanel* CDlgAdvPreferencesBase::createExclusiveAppsTab(wxNotebook* notebook)
moreOptionsLinkSizer->Add(
new wxHyperlinkCtrl(
- exclusiveAppsTab, ID_DEFAULT, wxT("http://boinc.berkeley.edu/wiki/Client_configuration"),
+ exclusiveAppsListStaticBox, ID_DEFAULT, wxT("http://boinc.berkeley.edu/wiki/Client_configuration"),
wxT("http://boinc.berkeley.edu/wiki/Client_configuration"),
wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE
),
diff --git a/clientgui/DlgDiagnosticLogFlags.cpp b/clientgui/DlgDiagnosticLogFlags.cpp
new file mode 100755
index 0000000..50f6538
--- /dev/null
+++ b/clientgui/DlgDiagnosticLogFlags.cpp
@@ -0,0 +1,271 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2008 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+//
+#if defined(__GNUG__) && !defined(__APPLE__)
+#pragma implementation "DlgDiagnosticLogFlags.cpp"
+#endif
+
+#include "stdwx.h"
+#include "util.h"
+#include "DlgDiagnosticLogFlags.h"
+#include "BOINCGUIApp.h"
+#include "BOINCBaseFrame.h"
+#include "Events.h"
+#include "error_numbers.h"
+#include "gui_rpc_client.h" // For SET_LOCALE
+#include "SkinManager.h"
+
+
+#define DLGDIAGNOSTICS_INITIAL_SIZE 480
+#define DLGDIAGNOSTICS_MIN_SIZE 400
+
+IMPLEMENT_DYNAMIC_CLASS(CDlgDiagnosticLogFlags, wxDialog)
+
+BEGIN_EVENT_TABLE(CDlgDiagnosticLogFlags, wxDialog)
+ EVT_SIZE(CDlgDiagnosticLogFlags::OnSize)
+ EVT_BUTTON(wxID_OK,CDlgDiagnosticLogFlags::OnOK)
+ EVT_BUTTON(ID_DEFAULTSBTN,CDlgDiagnosticLogFlags::OnSetDefaults)
+
+END_EVENT_TABLE()
+
+/* Constructor */
+CDlgDiagnosticLogFlags::CDlgDiagnosticLogFlags(wxWindow* parent) :
+ wxDialog( parent, ID_ANYDIALOG, wxEmptyString, wxDefaultPosition,
+ wxSize( DLGDIAGNOSTICS_INITIAL_SIZE,DLGDIAGNOSTICS_INITIAL_SIZE ),
+ wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
+ ) {
+
+ CSkinAdvanced* pSkinAdvanced = wxGetApp().GetSkinManager()->GetAdvanced();
+ CMainDocument* pDoc = wxGetApp().GetDocument();
+
+ wxASSERT(pDoc);
+ wxASSERT(wxDynamicCast(pDoc, CMainDocument));
+
+ wxASSERT(pSkinAdvanced);
+ wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
+
+ wxString title;
+ title.Printf(
+ _("%s Diagnostic Log Flags"),
+ pSkinAdvanced->GetApplicationShortName().c_str()
+ );
+
+ SetTitle(title);
+
+ // Get cc_config.xml file flags
+ log_flags.init();
+ m_cc_config.defaults();
+ pDoc->rpc.get_cc_config(m_cc_config, log_flags);
+
+ SetSizeHints( wxDefaultSize, wxDefaultSize );
+ SetExtraStyle( GetExtraStyle() | wxWS_EX_VALIDATE_RECURSIVELY );
+
+ wxBoxSizer* bSizer1 = new wxBoxSizer( wxVERTICAL );
+ m_headingSizer = new wxGridSizer( 1 );
+
+ m_headingText.Printf(
+ _("These flags enable various types of diagnostic messages in the Event Log.")
+ );
+
+ m_heading = new wxStaticText(this, wxID_ANY, m_headingText);
+
+ m_headingSizer->Add(m_heading, 1, wxLEFT | wxRIGHT, 25);
+
+ bSizer1->AddSpacer(7);
+ bSizer1->Add( m_headingSizer, 0, wxEXPAND | wxALL, 5 );
+ bSizer1->AddSpacer(7);
+
+ m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
+ m_scrolledWindow->SetScrollRate( 5, 5 );
+
+ m_checkboxSizer = new wxGridSizer(2, wxSize(0,3));
+ CreateCheckboxes();
+
+ bSizer1->Add( m_scrolledWindow, 1, wxEXPAND | wxALL, 5 );
+
+ wxBoxSizer* buttonSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxButton* btnOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
+ btnOK->SetToolTip( _("Save all values and close the dialog") );
+ buttonSizer->Add( btnOK, 0, wxALL, 5 );
+
+ wxButton* btnDefaults = new wxButton( this, ID_DEFAULTSBTN, _("Defaults"), wxDefaultPosition, wxDefaultSize, 0 );
+ btnDefaults->SetToolTip( _("Restore default settings") );
+ buttonSizer->Add( btnDefaults, 0, wxALL, 5 );
+
+ wxButton* btnCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
+ btnCancel->SetToolTip( _("Close the dialog without saving") );
+ buttonSizer->Add( btnCancel, 0, wxALL, 5 );
+
+ btnCancel->SetDefault();
+ bSizer1->Add( buttonSizer, 0, wxALIGN_RIGHT | wxALL, 15 );
+
+ SetSizer( bSizer1 );
+
+ SetSizeHints(DLGDIAGNOSTICS_MIN_SIZE, DLGDIAGNOSTICS_MIN_SIZE);
+
+ RestoreState();
+ Layout();
+ Center( wxBOTH );
+
+#if defined(__WXMSW__) || defined(__WXGTK__)
+ SetDoubleBuffered(true);
+#endif
+}
+
+// destructor
+CDlgDiagnosticLogFlags::~CDlgDiagnosticLogFlags() {
+ SaveState();
+}
+
+
+void CDlgDiagnosticLogFlags::CreateCheckboxes() {
+ SET_LOCALE sl;
+ char buf[64000];
+ MIOFILE mf;
+ bool val;
+
+ m_checkbox_list.clear();
+
+ mf.init_buf_write(buf, sizeof(buf));
+ m_cc_config.write(mf, log_flags);
+
+ mf.init_buf_read(buf);
+ XML_PARSER xp(&mf);
+
+ while (!xp.get_tag()) {
+ if (!xp.is_tag) {
+ continue;
+ }
+ if (xp.match_tag("log_flags")) break;
+ }
+
+ while (!xp.get_tag()) {
+ if (!xp.is_tag) {
+ continue;
+ }
+ if (xp.match_tag("/log_flags")) break;
+ wxString label = wxString(xp.parsed_tag);
+ xp.parse_bool(xp.parsed_tag, val);
+
+ wxCheckBox* ckbox = new wxCheckBox(m_scrolledWindow, wxID_ANY, label);
+ m_checkboxSizer->Add(ckbox, 0, wxLEFT, 25);
+ m_checkbox_list.push_back(ckbox);
+ ckbox->SetValue(val);
+ }
+
+ m_scrolledWindow->SetSizer( m_checkboxSizer );
+ m_scrolledWindow->Layout();
+ m_checkboxSizer->Fit( m_scrolledWindow );
+}
+
+
+/* saves dialog size and (on Mac) position */
+bool CDlgDiagnosticLogFlags::SaveState() {
+ wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
+
+ wxASSERT(pConfig);
+ if (!pConfig) return false;
+
+ pConfig->SetPath("/DlgDiagnosticLogFlags/");
+ pConfig->Write(wxT("Width"), GetSize().GetWidth());
+ pConfig->Write(wxT("Height"), GetSize().GetHeight());
+
+ pConfig->Flush();
+
+ return true;
+}
+
+/* restores former dialog size and (on Mac) position */
+bool CDlgDiagnosticLogFlags::RestoreState() {
+ wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
+ int iWidth, iHeight;
+
+ wxASSERT(pConfig);
+ if (!pConfig) return false;
+
+ pConfig->SetPath("/DlgDiagnosticLogFlags/");
+
+ pConfig->Read(wxT("Width"), &iWidth, DLGDIAGNOSTICS_INITIAL_SIZE);
+ pConfig->Read(wxT("Height"), &iHeight, DLGDIAGNOSTICS_INITIAL_SIZE);
+
+ // Guard against a rare situation where registry values are zero
+ if ((iWidth < 50) && (iWidth != wxDefaultCoord)) iWidth = DLGDIAGNOSTICS_INITIAL_SIZE;
+ if ((iHeight < 50) && (iHeight != wxDefaultCoord)) iHeight = DLGDIAGNOSTICS_INITIAL_SIZE;
+
+ // Set size to saved values or defaults if no saved values
+ SetSize(std::max(iWidth, DLGDIAGNOSTICS_MIN_SIZE), std::max(iHeight, DLGDIAGNOSTICS_MIN_SIZE));
+
+ return true;
+}
+
+
+void CDlgDiagnosticLogFlags::OnSize(wxSizeEvent& event) {
+ m_heading->SetLabel(m_headingText);
+ m_heading->Wrap(m_headingSizer->GetSize().GetWidth()-50);
+ m_headingSizer->Fit(m_heading);
+ Layout();
+ SaveState();
+ Refresh();
+
+ event.Skip();
+}
+
+
+void CDlgDiagnosticLogFlags::OnOK(wxCommandEvent& event) {
+ SET_LOCALE sl;
+ char buf[64000];
+ MIOFILE mf;
+ bool val;
+ unsigned int i;
+ CMainDocument* pDoc = wxGetApp().GetDocument();
+
+ wxASSERT(pDoc);
+ wxASSERT(wxDynamicCast(pDoc, CMainDocument));
+
+ mf.init_buf_write(buf, sizeof(buf));
+ for (i=0; i<m_checkbox_list.size(); ++i) {
+ wxCheckBox* ckbox = m_checkbox_list[i];
+ val = ckbox->GetValue();
+ mf.printf(" <%s>%d</%s>\n", (const char*)ckbox->GetLabel().ToAscii(), (int)val, (const char*)ckbox->GetLabel().ToAscii());
+ }
+ mf.printf(" </log_flags>\n");
+
+ XML_PARSER xp(&mf);
+ mf.init_buf_read(buf);
+ log_flags.parse(xp);
+
+ int retval = pDoc->rpc.set_cc_config(m_cc_config, log_flags);
+ if (!retval) {
+ pDoc->rpc.read_cc_config();
+ }
+ event.Skip();
+}
+
+
+void CDlgDiagnosticLogFlags::OnSetDefaults(wxCommandEvent& ) {
+ CMainDocument* pDoc = wxGetApp().GetDocument();
+
+ wxASSERT(pDoc);
+ wxASSERT(wxDynamicCast(pDoc, CMainDocument));
+
+ log_flags.init();
+
+ m_checkboxSizer->Clear(true);
+ CreateCheckboxes();
+ Layout();
+}
diff --git a/clientgui/DlgDiagnosticLogFlags.h b/clientgui/DlgDiagnosticLogFlags.h
new file mode 100755
index 0000000..e664c90
--- /dev/null
+++ b/clientgui/DlgDiagnosticLogFlags.h
@@ -0,0 +1,73 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2008 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+//
+#ifndef _DLGDIAGNOSTICLOGFLAGS_H_
+#define _DLGDIAGNOSTICLOGFLAGS_H_
+
+#if defined(__GNUG__) && !defined(__APPLE__)
+#pragma interface "DlgDiagnosticLogFlags.cpp"
+#endif
+
+#include <wx/intl.h>
+
+#include <wx/gdicmn.h>
+#include <wx/gbsizer.h>
+#include <wx/sizer.h>
+#include <wx/scrolwin.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/button.h>
+#include <wx/dialog.h>
+
+#include "MainDocument.h"
+
+#define ID_DEFAULTSBTN 10001
+
+class CDlgDiagnosticLogFlags : public wxDialog {
+ DECLARE_DYNAMIC_CLASS( CDlgDiagnosticLogFlags )
+ DECLARE_EVENT_TABLE()
+public:
+ CDlgDiagnosticLogFlags(wxWindow* parent=NULL);
+ virtual ~CDlgDiagnosticLogFlags();
+
+ void OnSize(wxSizeEvent& event);
+ void OnOK(wxCommandEvent& event);
+ void OnSetDefaults(wxCommandEvent& event);
+private:
+ //generic layout methods
+ bool SaveState();
+ bool RestoreState();
+
+ void CreateCheckboxes();
+
+ LOG_FLAGS log_flags;
+ CC_CONFIG m_cc_config;
+
+ wxGridSizer* m_headingSizer;
+ std::vector <wxCheckBox*> m_checkbox_list;
+
+protected:
+ wxString m_headingText;
+ wxStaticText* m_heading;
+ wxScrolledWindow* m_scrolledWindow;
+ wxGridSizer* m_checkboxSizer;
+};
+
+#endif // _DLGDIAGNOSTICLOGFLAGS_H_
+
diff --git a/clientgui/DlgEventLog.cpp b/clientgui/DlgEventLog.cpp
index a06037c..1cdef6a 100644
--- a/clientgui/DlgEventLog.cpp
+++ b/clientgui/DlgEventLog.cpp
@@ -36,8 +36,12 @@
#include "DlgEventLogListCtrl.h"
#include "DlgEventLog.h"
#include "AdvancedFrame.h"
+#include "DlgDiagnosticLogFlags.h"
#include <wx/display.h>
+#ifdef __WXMAC__
+#include <time.h>
+#endif
////@begin includes
////@end includes
@@ -73,6 +77,7 @@ BEGIN_EVENT_TABLE( CDlgEventLog, wxDialog )
EVT_BUTTON(ID_COPYSELECTED, CDlgEventLog::OnMessagesCopySelected)
EVT_BUTTON(ID_TASK_MESSAGES_FILTERBYPROJECT, CDlgEventLog::OnMessagesFilter)
EVT_BUTTON(ID_SIMPLE_HELP, CDlgEventLog::OnButtonHelp)
+ EVT_MENU(ID_SGDIAGNOSTICLOGFLAGS, CDlgEventLog::OnDiagnosticLogFlags)
EVT_SIZE(CDlgEventLog::OnSize)
EVT_MOVE(CDlgEventLog::OnMove)
EVT_CLOSE(CDlgEventLog::OnClose)
@@ -97,9 +102,6 @@ CDlgEventLog::CDlgEventLog( wxWindow* parent, wxWindowID id, const wxString& cap
CDlgEventLog::~CDlgEventLog() {
wxLogTrace(wxT("Function Start/End"), wxT("CDlgEventLog::CDlgEventLog - Destructor Function Begin"));
- SaveState();
- SetWindowDimensions();
-
if (m_pMessageInfoAttr) {
delete m_pMessageInfoAttr;
m_pMessageInfoAttr = NULL;
@@ -257,6 +259,12 @@ bool CDlgEventLog::Create( wxWindow* parent, wxWindowID id, const wxString& capt
OnRefresh();
// Register that we had the Event Log open immediately
SaveState();
+
+ m_Shortcuts[0].Set(wxACCEL_CTRL|wxACCEL_SHIFT, (int)'F', ID_SGDIAGNOSTICLOGFLAGS);
+ m_pAccelTable = new wxAcceleratorTable(1, m_Shortcuts);
+
+ SetAcceleratorTable(*m_pAccelTable);
+
return true;
}
@@ -410,6 +418,9 @@ void CDlgEventLog::OnHelp(wxHelpEvent& event) {
*/
void CDlgEventLog::OnOK( wxCommandEvent& WXUNUSED(event) ) {
+ SaveState();
+ SetWindowDimensions();
+
Close();
}
@@ -420,6 +431,10 @@ void CDlgEventLog::OnOK( wxCommandEvent& WXUNUSED(event) ) {
void CDlgEventLog::OnClose(wxCloseEvent& WXUNUSED(event)) {
m_bEventLogIsOpen = false; // User specifically closed window
+
+ SaveState();
+ SetWindowDimensions();
+
Destroy();
}
@@ -896,6 +911,16 @@ void CDlgEventLog::OnButtonHelp( wxCommandEvent& event ) {
}
+void CDlgEventLog::OnDiagnosticLogFlags(wxCommandEvent& WXUNUSED(event)) {
+ wxLogTrace(wxT("Function Start/End"), wxT("CDlgEventLog::OnDiagnosticLogFlags - Function Begin"));
+
+ CDlgDiagnosticLogFlags dlg(this);
+ dlg.ShowModal();
+
+ wxLogTrace(wxT("Function Start/End"), wxT("CDlgEventLog::OnDiagnosticLogFlags - Function End"));
+}
+
+
void CDlgEventLog::OnColResize( wxListEvent& ) {
// Register the new column widths immediately
SaveState();
@@ -1004,12 +1029,20 @@ wxInt32 CDlgEventLog::FormatProjectName(wxInt32 item, wxString& strBuffer) const
wxInt32 CDlgEventLog::FormatTime(wxInt32 item, wxString& strBuffer) const {
- wxDateTime dtBuffer;
MESSAGE* message = wxGetApp().GetDocument()->message(item);
if (message) {
+#ifdef __WXMAC__
+ // Work around a wxCocoa bug(?) in wxDateTime::Format()
+ char buf[80];
+ struct tm * timeinfo = localtime((time_t*)&message->timestamp);
+ strftime(buf, sizeof(buf), "%c", timeinfo);
+ strBuffer = buf;
+#else
+ wxDateTime dtBuffer;
dtBuffer.Set((time_t)message->timestamp);
strBuffer = dtBuffer.Format();
+#endif
}
return 0;
diff --git a/clientgui/DlgEventLog.h b/clientgui/DlgEventLog.h
index 1035309..e429b74 100644
--- a/clientgui/DlgEventLog.h
+++ b/clientgui/DlgEventLog.h
@@ -118,6 +118,9 @@ public:
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_SIMPLE_HELP
void OnButtonHelp( wxCommandEvent& event );
+ /// EVT_MENU event handler for ID_SGDIAGNOSTICLOGFLAGS
+ void OnDiagnosticLogFlags( wxCommandEvent& event );
+
/// EVT_LIST_COL_END_DRAG event handler for ID_SIMPLE_MESSAGESVIEW
void OnColResize( wxListEvent& event );
@@ -168,6 +171,9 @@ private:
bool m_bWasConnected;
bool m_bEventLogIsOpen;
+ wxAcceleratorEntry m_Shortcuts[1];
+ wxAcceleratorTable* m_pAccelTable;
+
bool SaveState();
bool RestoreState();
diff --git a/clientgui/DlgEventLogListCtrl.cpp b/clientgui/DlgEventLogListCtrl.cpp
index b4de66b..1efa746 100644
--- a/clientgui/DlgEventLogListCtrl.cpp
+++ b/clientgui/DlgEventLogListCtrl.cpp
@@ -37,6 +37,9 @@ IMPLEMENT_DYNAMIC_CLASS(CDlgEventLogListCtrl, DLG_LISTCTRL_BASE)
BEGIN_EVENT_TABLE(CDlgEventLogListCtrl, DLG_LISTCTRL_BASE)
EVT_LEFT_UP(CDlgEventLogListCtrl::OnMouseUp)
+#ifdef __WXMAC__
+ EVT_SIZE(CDlgEventLogListCtrl::OnSize)
+#endif
END_EVENT_TABLE()
@@ -48,10 +51,14 @@ CDlgEventLogListCtrl::CDlgEventLogListCtrl(CDlgEventLog* pView, wxWindowID iList
m_pParentView = pView;
m_bIsSingleSelection = (iListWindowFlags & wxLC_SINGLE_SEL) ? true : false ;
-
+
+#ifdef __WXMAC__
+ m_fauxHeaderView = NULL;
+ m_fauxBodyView = NULL;
#ifdef __WXMAC__
SetupMacAccessibilitySupport();
#endif
+#endif
}
@@ -93,3 +100,4 @@ void CDlgEventLogListCtrl::OnMouseUp(wxMouseEvent& event) {
m_pParentView->UpdateButtons();
event.Skip();
}
+
diff --git a/clientgui/DlgEventLogListCtrl.h b/clientgui/DlgEventLogListCtrl.h
index f2590bb..1ce6978 100644
--- a/clientgui/DlgEventLogListCtrl.h
+++ b/clientgui/DlgEventLogListCtrl.h
@@ -23,7 +23,6 @@
#endif
#ifdef __WXMAC__
-#include "macAccessiblity.h"
#define DLG_LISTCTRL_BASE wxGenericListCtrl
#else
#define DLG_LISTCTRL_BASE wxListView
@@ -34,6 +33,8 @@ class CDlgEventLog;
class CDlgEventLogListCtrl : public DLG_LISTCTRL_BASE
{
+using DLG_LISTCTRL_BASE::GetBackgroundColour;
+
DECLARE_DYNAMIC_CLASS(CDlgEventLogListCtrl)
DECLARE_EVENT_TABLE()
@@ -53,6 +54,8 @@ private:
virtual wxColour GetBackgroundColour();
void OnMouseUp(wxMouseEvent& event);
+ void OnShow( wxShowEvent& event );
+
bool m_bIsSingleSelection;
CDlgEventLog* m_pParentView;
@@ -60,11 +63,10 @@ private:
#ifdef __WXMAC__
void SetupMacAccessibilitySupport();
void RemoveMacAccessibilitySupport();
+ void OnSize( wxSizeEvent &event );
- ListAccessData accessibilityHandlerData;
-
- EventHandlerRef m_pHeaderAccessibilityEventHandlerRef;
- EventHandlerRef m_pBodyAccessibilityEventHandlerRef;
+ void* m_fauxHeaderView;
+ void* m_fauxBodyView;
#endif
};
diff --git a/clientgui/DlgExitMessage.cpp b/clientgui/DlgExitMessage.cpp
index 3a3b5e0..4aca6ce 100644
--- a/clientgui/DlgExitMessage.cpp
+++ b/clientgui/DlgExitMessage.cpp
@@ -122,7 +122,7 @@ void CDlgExitMessage::CreateControls()
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
itemFlexGridSizer2->Add(itemBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(3, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(1, 0, 0);
itemBoxSizer3->Add(itemFlexGridSizer4, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
#ifndef __WXMAC__
diff --git a/clientgui/DlgGenericMessage.cpp b/clientgui/DlgGenericMessage.cpp
index f62ecda..372feb2 100644
--- a/clientgui/DlgGenericMessage.cpp
+++ b/clientgui/DlgGenericMessage.cpp
@@ -93,13 +93,13 @@ void CDlgGenericMessage::CreateControls()
////@begin CDlgGenericMessage content construction
CDlgGenericMessage* itemDialog1 = this;
- wxFlexGridSizer* itemFlexGridSizer2 = new wxFlexGridSizer(1, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer2 = new wxFlexGridSizer(2, 0, 0);
itemDialog1->SetSizer(itemFlexGridSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
itemFlexGridSizer2->Add(itemBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(2, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(1, 0, 0);
itemBoxSizer3->Add(itemFlexGridSizer4, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_DialogMessage = new wxStaticText;
@@ -113,7 +113,7 @@ void CDlgGenericMessage::CreateControls()
m_DialogDisableMessage->SetValue(false);
itemFlexGridSizer4->Add(m_DialogDisableMessage, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer8 = new wxFlexGridSizer(2, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer8 = new wxFlexGridSizer(1, 0, 0);
itemFlexGridSizer2->Add(itemFlexGridSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_TOP|wxALL, 5);
wxButton* itemButton9 = new wxButton;
diff --git a/clientgui/DlgItemProperties.cpp b/clientgui/DlgItemProperties.cpp
index 41b5eaf..77fba6a 100644
--- a/clientgui/DlgItemProperties.cpp
+++ b/clientgui/DlgItemProperties.cpp
@@ -52,6 +52,7 @@ CDlgItemProperties::CDlgItemProperties(wxWindow* parent) :
m_bSizer2 = new wxBoxSizer( wxVERTICAL );
m_gbSizer = new wxGridBagSizer( 0, 0 );
+ m_gbSizer->SetCols(2);
m_gbSizer->AddGrowableCol( 1 );
m_gbSizer->SetFlexibleDirection( wxBOTH );
m_gbSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
@@ -325,7 +326,7 @@ void CDlgItemProperties::renderInfos(RESULT* result) {
}
addProperty(_("Application"), FormatApplicationName(result));
- addProperty(_("Workunit name"), wxString(result->wu_name, wxConvUTF8));
+ addProperty(_("Name"), wxString(result->wu_name, wxConvUTF8));
addProperty(_("State"), result_description(result, false));
if (result->received_time) {
dt.Set((time_t)result->received_time);
@@ -365,20 +366,16 @@ void CDlgItemProperties::renderInfos(RESULT* result) {
//
wxString CDlgItemProperties::FormatDiskSpace(double bytes) {
- double xTera = 1099511627776.0;
- double xGiga = 1073741824.0;
- double xMega = 1048576.0;
- double xKilo = 1024.0;
wxString strBuffer= wxEmptyString;
- if (bytes >= xTera) {
- strBuffer.Printf(wxT("%0.2f TB"), bytes/xTera);
- } else if (bytes >= xGiga) {
- strBuffer.Printf(wxT("%0.2f GB"), bytes/xGiga);
- } else if (bytes >= xMega) {
- strBuffer.Printf(wxT("%0.2f MB"), bytes/xMega);
- } else if (bytes >= xKilo) {
- strBuffer.Printf(wxT("%0.2f KB"), bytes/xKilo);
+ if (bytes >= TERA) {
+ strBuffer.Printf(wxT("%0.2f TB"), bytes/TERA);
+ } else if (bytes >= GIGA) {
+ strBuffer.Printf(wxT("%0.2f GB"), bytes/GIGA);
+ } else if (bytes >= MEGA) {
+ strBuffer.Printf(wxT("%0.2f MB"), bytes/MEGA);
+ } else if (bytes >= KILO) {
+ strBuffer.Printf(wxT("%0.2f KB"), bytes/KILO);
} else {
strBuffer.Printf(wxT("%0.0f bytes"), bytes);
}
diff --git a/clientgui/DlgOptions.cpp b/clientgui/DlgOptions.cpp
old mode 100644
new mode 100755
index 964671a..8847b8e
--- a/clientgui/DlgOptions.cpp
+++ b/clientgui/DlgOptions.cpp
@@ -154,6 +154,9 @@ bool CDlgOptions::Create(wxWindow* parent, wxWindowID id, const wxString& captio
* Control creation for CDlgToolsOptions
*/
+// NOTE: On MS Windows with wxWidgets 3.0, controls inside a wxStaticBox
+// don't refresh properly unless they are children of the wxStaticBox!
+//
void CDlgOptions::CreateControls() {
////@begin CDlgOptions content construction
CDlgOptions* itemDialog1 = this;
@@ -169,7 +172,7 @@ void CDlgOptions::CreateControls() {
wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
itemPanel4->SetSizer(itemBoxSizer5);
- wxFlexGridSizer* itemFlexGridSizer6 = new wxFlexGridSizer(3, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer6 = new wxFlexGridSizer(2, 0, 0);
itemBoxSizer5->Add(itemFlexGridSizer6, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticText* itemStaticText7 = new wxStaticText;
itemStaticText7->Create( itemPanel4, wxID_STATIC, _("Language:"), wxDefaultPosition, wxDefaultSize, 0 );
@@ -223,37 +226,37 @@ void CDlgOptions::CreateControls() {
wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxVERTICAL);
itemPanel11->SetSizer(itemBoxSizer12);
- wxStaticBox* itemStaticBoxSizer16Static = new wxStaticBox(itemPanel11, wxID_ANY, _("Dial-up and Virtual Private Network settings"));
- m_DialupStaticBoxCtrl = new wxStaticBoxSizer(itemStaticBoxSizer16Static, wxVERTICAL);
+ wxStaticBox* itemStaticBox16 = new wxStaticBox(itemPanel11, wxID_ANY, _("Dial-up and Virtual Private Network settings"));
+ m_DialupStaticBoxCtrl = new wxStaticBoxSizer(itemStaticBox16, wxVERTICAL);
itemBoxSizer12->Add(m_DialupStaticBoxCtrl, 0, wxGROW|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer17 = new wxFlexGridSizer(1, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer17 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer17->AddGrowableCol(0);
m_DialupStaticBoxCtrl->Add(itemFlexGridSizer17, 0, wxGROW|wxALL, 5);
wxString* m_DialupConnectionsCtrlStrings = NULL;
m_DialupConnectionsCtrl = new wxListBox;
- m_DialupConnectionsCtrl->Create( itemPanel11, ID_DIALUPCONNECTIONS, wxDefaultPosition, wxSize(166, 185), 0, m_DialupConnectionsCtrlStrings, wxLB_SINGLE|wxLB_NEEDED_SB );
+ m_DialupConnectionsCtrl->Create( itemStaticBox16, ID_DIALUPCONNECTIONS, wxDefaultPosition, wxSize(166, 185), 0, m_DialupConnectionsCtrlStrings, wxLB_SINGLE|wxLB_NEEDED_SB );
itemFlexGridSizer17->Add(m_DialupConnectionsCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxVERTICAL);
itemFlexGridSizer17->Add(itemBoxSizer19, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_DialupSetDefaultCtrl = new wxButton;
- m_DialupSetDefaultCtrl->Create( itemPanel11, ID_DIALUPSETDEFAULT, _("&Set Default"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_DialupSetDefaultCtrl->Create( itemStaticBox16, ID_DIALUPSETDEFAULT, _("&Set Default"), wxDefaultPosition, wxDefaultSize, 0 );
m_DialupSetDefaultCtrl->SetDefault();
itemBoxSizer19->Add(m_DialupSetDefaultCtrl, 0, wxGROW|wxALL, 5);
m_DialupClearDefaultCtrl = new wxButton;
- m_DialupClearDefaultCtrl->Create( itemPanel11, ID_DIALUPCLEARDEFAULT, _("&Clear Default"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_DialupClearDefaultCtrl->Create( itemStaticBox16, ID_DIALUPCLEARDEFAULT, _("&Clear Default"), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer19->Add(m_DialupClearDefaultCtrl, 0, wxGROW|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer22 = new wxFlexGridSizer(1, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer22 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer22->AddGrowableCol(1);
m_DialupStaticBoxCtrl->Add(itemFlexGridSizer22, 0, wxGROW|wxALL, 5);
m_DialupDefaultConnectionTextCtrl = new wxStaticText;
- m_DialupDefaultConnectionTextCtrl->Create( itemPanel11, ID_DIALUPDEFAULTCONNECTIONTEXT, _("Default Connection:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_DialupDefaultConnectionTextCtrl->Create( itemStaticBox16, ID_DIALUPDEFAULTCONNECTIONTEXT, _("Default Connection:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer22->Add(m_DialupDefaultConnectionTextCtrl, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_DialupDefaultConnectionCtrl = new wxStaticText;
- m_DialupDefaultConnectionCtrl->Create( itemPanel11, ID_DIALUPDEFAULTCONNECTION, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
+ m_DialupDefaultConnectionCtrl->Create( itemStaticBox16, ID_DIALUPDEFAULTCONNECTION, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer22->Add(m_DialupDefaultConnectionCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemNotebook3->AddPage(itemPanel11, _("Connections"));
@@ -269,56 +272,56 @@ void CDlgOptions::CreateControls() {
m_EnableHTTPProxyCtrl->SetValue(FALSE);
itemBoxSizer28->Add(m_EnableHTTPProxyCtrl, 0, wxGROW|wxALL, 5);
- wxStaticBox* itemStaticBoxSizer30Static = new wxStaticBox(itemPanel27, wxID_ANY, _("HTTP Proxy Server Configuration"));
- wxStaticBoxSizer* itemStaticBoxSizer30 = new wxStaticBoxSizer(itemStaticBoxSizer30Static, wxVERTICAL);
+ wxStaticBox* itemStaticBox30 = new wxStaticBox(itemPanel27, wxID_ANY, _("HTTP Proxy Server Configuration"));
+ wxStaticBoxSizer* itemStaticBoxSizer30 = new wxStaticBoxSizer(itemStaticBox30, wxVERTICAL);
itemBoxSizer28->Add(itemStaticBoxSizer30, 0, wxGROW|wxALL, 5);
wxGridSizer* itemGridSizer31 = new wxGridSizer(2, 1, 0, 0);
itemStaticBoxSizer30->Add(itemGridSizer31, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer32 = new wxFlexGridSizer(2, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer32 = new wxFlexGridSizer(2, 0, 0);
itemGridSizer31->Add(itemFlexGridSizer32, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText33 = new wxStaticText;
- itemStaticText33->Create( itemPanel27, wxID_STATIC, _("Address:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText33->Create( itemStaticBox30, wxID_STATIC, _("Address:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer32->Add(itemStaticText33, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_HTTPAddressCtrl = new wxTextCtrl;
- m_HTTPAddressCtrl->Create( itemPanel27, ID_HTTPADDRESSCTRL, wxT(""), wxDefaultPosition, wxSize(150, -1), 0 );
+ m_HTTPAddressCtrl->Create( itemStaticBox30, ID_HTTPADDRESSCTRL, wxT(""), wxDefaultPosition, wxSize(150, -1), 0 );
itemFlexGridSizer32->Add(m_HTTPAddressCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText35 = new wxStaticText;
- itemStaticText35->Create( itemPanel27, wxID_STATIC, _("Port:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText35->Create( itemStaticBox30, wxID_STATIC, _("Port:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer32->Add(itemStaticText35, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_HTTPPortCtrl = new wxTextCtrl;
- m_HTTPPortCtrl->Create( itemPanel27, ID_HTTPPORTCTRL, wxT(""), wxDefaultPosition, wxSize(50, -1), 0 );
+ m_HTTPPortCtrl->Create( itemStaticBox30, ID_HTTPPORTCTRL, wxT(""), wxDefaultPosition, wxSize(50, -1), 0 );
itemFlexGridSizer32->Add(m_HTTPPortCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText62 = new wxStaticText;
- itemStaticText62->Create( itemPanel27, wxID_STATIC, _("Don't use proxy for:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText62->Create( itemStaticBox30, wxID_STATIC, _("Don't use proxy for:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer32->Add(itemStaticText62, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_HTTPNoProxiesCtrl = new wxTextCtrl;
- m_HTTPNoProxiesCtrl->Create(itemPanel27,ID_HTTPNOPROXYCTRL,wxT(""),wxDefaultPosition,wxSize(150,-1),0);
+ m_HTTPNoProxiesCtrl->Create(itemStaticBox30,ID_HTTPNOPROXYCTRL,wxT(""),wxDefaultPosition,wxSize(150,-1),0);
itemFlexGridSizer32->Add(m_HTTPNoProxiesCtrl,0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- wxStaticBox* itemStaticBoxSizer37Static = new wxStaticBox(itemPanel27, wxID_ANY, _("Leave these blank if not needed"));
- wxStaticBoxSizer* itemStaticBoxSizer37 = new wxStaticBoxSizer(itemStaticBoxSizer37Static, wxVERTICAL);
+ wxStaticBox* itemStaticBox37 = new wxStaticBox(itemStaticBox30, wxID_ANY, _("Leave these blank if not needed"));
+ wxStaticBoxSizer* itemStaticBoxSizer37 = new wxStaticBoxSizer(itemStaticBox37, wxVERTICAL);
itemStaticBoxSizer30->Add(itemStaticBoxSizer37, 0, wxGROW|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer38 = new wxFlexGridSizer(2, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer38 = new wxFlexGridSizer(2, 0, 0);
itemStaticBoxSizer37->Add(itemFlexGridSizer38, 0, wxALIGN_LEFT|wxALL, 5);
wxStaticText* itemStaticText39 = new wxStaticText;
- itemStaticText39->Create( itemPanel27, wxID_STATIC, _("User Name:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText39->Create( itemStaticBox37, wxID_STATIC, _("User Name:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer38->Add(itemStaticText39, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_HTTPUsernameCtrl = new wxTextCtrl;
- m_HTTPUsernameCtrl->Create( itemPanel27, ID_HTTPUSERNAMECTRL, wxT(""), wxDefaultPosition, wxSize(175, -1), 0 );
+ m_HTTPUsernameCtrl->Create( itemStaticBox37, ID_HTTPUSERNAMECTRL, wxT(""), wxDefaultPosition, wxSize(175, -1), 0 );
itemFlexGridSizer38->Add(m_HTTPUsernameCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText41 = new wxStaticText;
- itemStaticText41->Create( itemPanel27, wxID_STATIC, _("Password:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText41->Create( itemStaticBox37, wxID_STATIC, _("Password:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer38->Add(itemStaticText41, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_HTTPPasswordCtrl = new wxTextCtrl;
- m_HTTPPasswordCtrl->Create( itemPanel27, ID_HTTPPASSWORDCTRL, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD );
+ m_HTTPPasswordCtrl->Create( itemStaticBox37, ID_HTTPPASSWORDCTRL, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD );
itemFlexGridSizer38->Add(m_HTTPPasswordCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemNotebook3->AddPage(itemPanel27, _("HTTP Proxy"));
@@ -333,56 +336,56 @@ void CDlgOptions::CreateControls() {
m_EnableSOCKSProxyCtrl->SetValue(FALSE);
itemBoxSizer44->Add(m_EnableSOCKSProxyCtrl, 0, wxGROW|wxALL, 5);
- wxStaticBox* itemStaticBoxSizer46Static = new wxStaticBox(itemPanel43, wxID_ANY, _("SOCKS Proxy Server Configuration"));
- wxStaticBoxSizer* itemStaticBoxSizer46 = new wxStaticBoxSizer(itemStaticBoxSizer46Static, wxVERTICAL);
+ wxStaticBox* itemStaticBox46 = new wxStaticBox(itemPanel43, wxID_ANY, _("SOCKS Proxy Server Configuration"));
+ wxStaticBoxSizer* itemStaticBoxSizer46 = new wxStaticBoxSizer(itemStaticBox46, wxVERTICAL);
itemBoxSizer44->Add(itemStaticBoxSizer46, 0, wxGROW|wxALL, 5);
wxGridSizer* itemGridSizer47 = new wxGridSizer(2, 1, 0, 0);
itemStaticBoxSizer46->Add(itemGridSizer47, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer48 = new wxFlexGridSizer(2, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer48 = new wxFlexGridSizer(2, 0, 0);
itemGridSizer47->Add(itemFlexGridSizer48, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText49 = new wxStaticText;
- itemStaticText49->Create( itemPanel43, wxID_STATIC, _("Address:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText49->Create( itemStaticBox46, wxID_STATIC, _("Address:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer48->Add(itemStaticText49, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_SOCKSAddressCtrl = new wxTextCtrl;
- m_SOCKSAddressCtrl->Create( itemPanel43, ID_SOCKSADDRESSCTRL, wxT(""), wxDefaultPosition, wxSize(150, -1), 0 );
+ m_SOCKSAddressCtrl->Create( itemStaticBox46, ID_SOCKSADDRESSCTRL, wxT(""), wxDefaultPosition, wxSize(150, -1), 0 );
itemFlexGridSizer48->Add(m_SOCKSAddressCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText51 = new wxStaticText;
- itemStaticText51->Create( itemPanel43, wxID_STATIC, _("Port:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText51->Create( itemStaticBox46, wxID_STATIC, _("Port:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer48->Add(itemStaticText51, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_SOCKSPortCtrl = new wxTextCtrl;
- m_SOCKSPortCtrl->Create( itemPanel43, ID_SOCKSPORTCTRL, wxT(""), wxDefaultPosition, wxSize(50, -1), 0 );
+ m_SOCKSPortCtrl->Create( itemStaticBox46, ID_SOCKSPORTCTRL, wxT(""), wxDefaultPosition, wxSize(50, -1), 0 );
itemFlexGridSizer48->Add(m_SOCKSPortCtrl, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText63 = new wxStaticText;
- itemStaticText63->Create( itemPanel43, wxID_STATIC, _("Don't use proxy for:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText63->Create( itemStaticBox46, wxID_STATIC, _("Don't use proxy for:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer48->Add(itemStaticText63, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_SOCKSNoProxiesCtrl = new wxTextCtrl;
- m_SOCKSNoProxiesCtrl->Create(itemPanel43,ID_SOCKSNOPROXYCTRL,wxT(""),wxDefaultPosition,wxSize(150,-1),0);
+ m_SOCKSNoProxiesCtrl->Create(itemStaticBox46,ID_SOCKSNOPROXYCTRL,wxT(""),wxDefaultPosition,wxSize(150,-1),0);
itemFlexGridSizer48->Add(m_SOCKSNoProxiesCtrl,0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- wxStaticBox* itemStaticBoxSizer53Static = new wxStaticBox(itemPanel43, wxID_ANY, _("Leave these blank if not needed"));
- wxStaticBoxSizer* itemStaticBoxSizer53 = new wxStaticBoxSizer(itemStaticBoxSizer53Static, wxVERTICAL);
+ wxStaticBox* itemStaticBox53 = new wxStaticBox(itemStaticBox46, wxID_ANY, _("Leave these blank if not needed"));
+ wxStaticBoxSizer* itemStaticBoxSizer53 = new wxStaticBoxSizer(itemStaticBox53, wxVERTICAL);
itemStaticBoxSizer46->Add(itemStaticBoxSizer53, 0, wxGROW|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer54 = new wxFlexGridSizer(2, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer54 = new wxFlexGridSizer(2, 0, 0);
itemStaticBoxSizer53->Add(itemFlexGridSizer54, 0, wxALIGN_LEFT|wxALL, 5);
wxStaticText* itemStaticText55 = new wxStaticText;
- itemStaticText55->Create( itemPanel43, wxID_STATIC, _("User Name:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText55->Create( itemStaticBox53, wxID_STATIC, _("User Name:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer54->Add(itemStaticText55, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_SOCKSUsernameCtrl = new wxTextCtrl;
- m_SOCKSUsernameCtrl->Create( itemPanel43, ID_SOCKSUSERNAMECTRL, wxT(""), wxDefaultPosition, wxSize(175, -1), 0 );
+ m_SOCKSUsernameCtrl->Create( itemStaticBox53, ID_SOCKSUSERNAMECTRL, wxT(""), wxDefaultPosition, wxSize(175, -1), 0 );
itemFlexGridSizer54->Add(m_SOCKSUsernameCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxStaticText* itemStaticText57 = new wxStaticText;
- itemStaticText57->Create( itemPanel43, wxID_STATIC, _("Password:"), wxDefaultPosition, wxDefaultSize, 0 );
+ itemStaticText57->Create( itemStaticBox53, wxID_STATIC, _("Password:"), wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer54->Add(itemStaticText57, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_SOCKSPasswordCtrl = new wxTextCtrl;
- m_SOCKSPasswordCtrl->Create( itemPanel43, ID_SOCKSPASSWORDCTRL, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD );
+ m_SOCKSPasswordCtrl->Create( itemStaticBox53, ID_SOCKSPASSWORDCTRL, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD );
itemFlexGridSizer54->Add(m_SOCKSPasswordCtrl, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5);
itemNotebook3->AddPage(itemPanel43, _("SOCKS Proxy"));
diff --git a/clientgui/DlgSelectComputer.cpp b/clientgui/DlgSelectComputer.cpp
index 30c0bf5..40cbe7a 100644
--- a/clientgui/DlgSelectComputer.cpp
+++ b/clientgui/DlgSelectComputer.cpp
@@ -52,6 +52,7 @@ BEGIN_EVENT_TABLE( CDlgSelectComputer, wxDialog )
////@begin CDlgSelectComputer event table entries
EVT_TEXT( ID_SELECTCOMPUTERNAME, CDlgSelectComputer::OnComputerNameUpdated )
+ EVT_COMBOBOX( ID_SELECTCOMPUTERNAME, CDlgSelectComputer::OnComputerNameUpdated )
////@end CDlgSelectComputer event table entries
@@ -168,8 +169,24 @@ void CDlgSelectComputer::CreateControls(bool required)
itemBoxSizer10->Add(itemButton12, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
// Set validators
- m_ComputerNameCtrl->SetValidator( wxGenericValidator(& m_strComputerName) );
- m_ComputerPasswordCtrl->SetValidator( wxGenericValidator(& m_strComputerPassword) );
+ // Under wxCocoa 3.0, wxGenericValidator doesn't work right here
+ m_ComputerNameCtrl->SetValidator( wxTextValidator(wxFILTER_NONE, & m_strComputerName) );
+ m_ComputerPasswordCtrl->SetValidator( wxTextValidator(wxFILTER_NONE, & m_strComputerPassword) );
+
+#ifdef __WXMAC__
+ // Set keyboard shortcuts - why is this necessary?
+ m_Shortcuts[0].Set(wxACCEL_CTRL, 'x', wxID_CUT);
+ m_Shortcuts[1].Set(wxACCEL_CTRL, 'c', wxID_COPY);
+ m_Shortcuts[2].Set(wxACCEL_CTRL, 'v', wxID_PASTE);
+ m_pAccelTable = new wxAcceleratorTable(3, m_Shortcuts);
+ m_ComputerPasswordCtrl->SetAcceleratorTable(*m_pAccelTable);
+
+ // This does not work for m_ComputerNameCtrl under wxCocoa 3.0.0
+ // because of a known bug: http://trac.wxwidgets.org/ticket/14953
+ m_ComputerNameCtrl->SetAcceleratorTable(*m_pAccelTable);
+ #endif
+
+
////@end CDlgSelectComputer content construction
}
diff --git a/clientgui/DlgSelectComputer.h b/clientgui/DlgSelectComputer.h
index f9220c6..b6589d5 100644
--- a/clientgui/DlgSelectComputer.h
+++ b/clientgui/DlgSelectComputer.h
@@ -114,6 +114,12 @@ public:
wxString m_strComputerName;
wxString m_strComputerPassword;
////@end CDlgSelectComputer member variables
+
+#ifdef __WXMAC__
+protected:
+ wxAcceleratorEntry m_Shortcuts[3]; // For Copy, Cut & Paste keyboard shortcuts
+ wxAcceleratorTable* m_pAccelTable;
+#endif
};
#endif
diff --git a/clientgui/Events.h b/clientgui/Events.h
index c5f8a4f..0e648f7 100644
--- a/clientgui/Events.h
+++ b/clientgui/Events.h
@@ -86,6 +86,7 @@
#define ID_READPREFERENCES 6057
#define ID_EVENTLOG 6058
#define ID_LAUNCHNEWINSTANCE 6059
+#define ID_DIAGNOSTICLOGFLAGS 6060
// Help Menu
#define ID_HELPBOINC 6035 // Locked: Used by manager_links.php
@@ -164,11 +165,21 @@
#define ID_SGOPTIONS 6412
#define ID_SGSKINSELECTOR 6413
#define ID_SGPROJECTDESCRIPTION 6414
+#define ID_SGDIAGNOSTICLOGFLAGS 6415
#define ID_SGDEFAULTSKINSELECTOR 6500
#define ID_SGFIRSTSKINSELECTOR 6501
// 6501-6599 Reserved for Skin Selection
#define ID_LASTSGSKINSELECTOR 6999
+#define ID_CHANGE_SLIDE_TIMER 6600
+#define WEBSITE_URL_MENU_ID_REMOVE_PROJECT 6610
+#define WEBSITE_URL_MENU_ID_HOMEPAGE 6620
+#define WEBSITE_URL_MENU_ID 6630
+
+
+
+
+
//
// Taskbar/System Tray
//
diff --git a/clientgui/LogBOINC.cpp b/clientgui/LogBOINC.cpp
index e6310f5..4192b20 100644
--- a/clientgui/LogBOINC.cpp
+++ b/clientgui/LogBOINC.cpp
@@ -29,13 +29,13 @@ wxLogBOINC::wxLogBOINC() {
m_fp = stdout;
}
-void wxLogBOINC::DoLogString(const wxChar *szString, time_t t) {
+void wxLogBOINC::DoLogText(const wxString& msg) {
diagnostics_cycle_logs();
#ifdef __WXMSW__
- wxString strDebug = szString;
+ wxString strDebug = msg;
strDebug += wxT("\r\n");
- ::OutputDebugString(strDebug.c_str());
+ diagnostics_trace_to_debugger(strDebug.mb_str());
#endif
- wxLogStderr::DoLogString(szString, t);
+ wxLogStderr::DoLogText(msg);
}
diff --git a/clientgui/LogBOINC.h b/clientgui/LogBOINC.h
index 4068bcf..74f0d89 100644
--- a/clientgui/LogBOINC.h
+++ b/clientgui/LogBOINC.h
@@ -31,7 +31,7 @@ public:
wxLogBOINC();
protected:
- virtual void DoLogString(const wxChar *szString, time_t t);
+ virtual void DoLogText(const wxString& msg);
};
diff --git a/clientgui/MainDocument.cpp b/clientgui/MainDocument.cpp
index 24119d8..5535a95 100644
--- a/clientgui/MainDocument.cpp
+++ b/clientgui/MainDocument.cpp
@@ -31,7 +31,6 @@
#include "MainDocument.h"
#include "BOINCBaseFrame.h"
#include "AdvancedFrame.h"
-#include "sg_BoincSimpleGUI.h"
#include "BOINCClientManager.h"
#include "BOINCTaskBar.h"
#include "DlgEventLog.h"
@@ -558,24 +557,20 @@ int CMainDocument::OnExit() {
int CMainDocument::OnPoll() {
+ CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
int iRetVal = 0;
- int otherInstanceID;
wxString hostName = wxGetApp().GetClientHostNameArg();
- int portNum = wxGetApp().GetClientRPCPortArg();
wxString password = wxGetApp().GetClientPasswordArg();
+ int portNum = wxGetApp().GetClientRPCPortArg();
wxASSERT(wxDynamicCast(m_pClientManager, CBOINCClientManager));
wxASSERT(wxDynamicCast(m_pNetworkConnection, CNetworkConnection));
- if (!m_bClientStartCheckCompleted) {
+ if (!m_bClientStartCheckCompleted && pFrame) {
m_bClientStartCheckCompleted = true;
- CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
- wxASSERT(wxDynamicCast(pFrame, CBOINCBaseFrame));
-
if (IsComputerNameLocal(hostName)) {
- otherInstanceID = wxGetApp().IsAnotherInstanceRunning();
- if (otherInstanceID) {
+ if (wxGetApp().IsAnotherInstanceRunning()) {
if (!pFrame->SelectComputer(hostName, portNum, password, true)) {
s_bSkipExitConfirmation = true;
wxCommandEvent event;
@@ -909,11 +904,11 @@ void CMainDocument::RunPeriodicRPCs(int frameRefreshRate) {
if (!IsConnected()) {
CFrameEvent event(wxEVT_FRAME_REFRESHVIEW, pFrame);
- pFrame->AddPendingEvent(event);
+ pFrame->GetEventHandler()->AddPendingEvent(event);
CTaskBarIcon* pTaskbar = wxGetApp().GetTaskBarIcon();
if (pTaskbar) {
- CTaskbarEvent tbevent(wxEVT_TASKBAR_REFRESH, pTaskbar);
- pTaskbar->AddPendingEvent(tbevent);
+ CTaskbarEvent event(wxEVT_TASKBAR_REFRESH, pTaskbar);
+ pTaskbar->AddPendingEvent(event);
}
CDlgEventLog* eventLog = wxGetApp().GetEventLog();
if (eventLog) {
@@ -1003,6 +998,14 @@ void CMainDocument::RunPeriodicRPCs(int frameRefreshRate) {
request.arg1 = &m_iNoticeSequenceNumber;
request.arg2 = ¬ices;
request.rpcType = RPC_TYPE_ASYNC_WITH_REFRESH_AFTER;
+ if (!pFrame->IsShown()
+#ifdef __WXMAC__
+ || (!wxGetApp().IsApplicationVisible())
+#endif
+ ) {
+ request.rpcType = RPC_TYPE_ASYNC_NO_REFRESH;
+ }
+
request.completionTime = &m_dtNoticesTimeStamp;
request.resultPtr = &m_iGet_notices_rpc_result;
@@ -1040,7 +1043,10 @@ void CMainDocument::RunPeriodicRPCs(int frameRefreshRate) {
// Don't do periodic RPC calls when hidden / minimized
if (!pFrame->IsShown()) return;
-
+#ifdef __WXMAC__
+ if (!wxGetApp().IsApplicationVisible()) return;
+#endif
+
m_dtLastFrameViewRefreshRPCTime = dtNow;
// *********** RPC_GET_PROJECT_STATUS1 **************
@@ -1327,10 +1333,10 @@ PROJECT* CMainDocument::project(unsigned int i) {
PROJECT* CMainDocument::project(char* url) {
- for (unsigned int i=0; i< state.projects.size(); i++) {
- PROJECT* tp = state.projects[i];
- if (!strcmp(url, tp->master_url)) return tp;
- }
+ for (unsigned int i=0; i< state.projects.size(); i++) {
+ PROJECT* tp = state.projects[i];
+ if (!strcmp(url, tp->master_url)) return tp;
+ }
return NULL;
}
@@ -1788,11 +1794,11 @@ int CMainDocument::WorkShowGraphics(RESULT* rp) {
}
-int CMainDocument::WorkShowVMConsole(RESULT* result) {
+int CMainDocument::WorkShowVMConsole(RESULT* res) {
int iRetVal = 0;
- if (strlen(result->remote_desktop_addr)) {
- wxString strConnection(result->remote_desktop_addr, wxConvUTF8);
+ if (strlen(res->remote_desktop_addr)) {
+ wxString strConnection(res->remote_desktop_addr, wxConvUTF8);
wxString strCommand;
#if defined(__WXMSW__)
@@ -1811,7 +1817,7 @@ int CMainDocument::WorkShowVMConsole(RESULT* result) {
//
// First try to find the CoRD application by Bundle ID and Creator Code
status = LSFindApplicationForInfo('RDC#', CFSTR("net.sf.cord"),
- NULL, &theFSRef, NULL);
+ NULL, &theFSRef, NULL);
if (status != noErr) {
CBOINCBaseFrame* pFrame = wxGetApp().GetFrame();
if (pFrame) {
@@ -1821,13 +1827,13 @@ int CMainDocument::WorkShowVMConsole(RESULT* result) {
wxOK | wxICON_INFORMATION,
false
);
- }
- return ERR_FILE_MISSING;
- }
+ }
+ return ERR_FILE_MISSING;
+ }
- strCommand = wxT("osascript -e 'tell application \"CoRD\"' -e 'activate' -e 'open location \"rdp://") + strConnection + wxT("\"' -e 'end tell'");
- strCommand.Replace(wxT("localhost"), wxT("127.0.0.1"));
- system(strCommand.char_str());
+ strCommand = wxT("osascript -e 'tell application \"CoRD\"' -e 'activate' -e 'open location \"rdp://") + strConnection + wxT("\"' -e 'end tell'");
+ strCommand.Replace(wxT("localhost"), wxT("127.0.0.1"));
+ system(strCommand.char_str());
#endif
}
@@ -2422,11 +2428,11 @@ int CMainDocument::GetSimpleGUIWorkCount() {
CachedSimpleGUIUpdate();
CachedStateUpdate();
- for(i=0; i<results.results.size(); i++) {
- if (results.results[i]->active_task) {
- iCount++;
- }
- }
+ for(i=0; i<results.results.size(); i++) {
+ if (results.results[i]->active_task) {
+ iCount++;
+ }
+ }
return iCount;
}
@@ -2458,7 +2464,7 @@ wxString result_description(RESULT* result, bool show_resources) {
PROJECT* project;
CC_STATUS status;
int retval;
- wxString strBuffer= wxEmptyString;
+ wxString strBuffer= wxEmptyString;
strBuffer.Clear();
retval = doc->GetCoreClientStatus(status);
@@ -2471,7 +2477,7 @@ wxString result_description(RESULT* result, bool show_resources) {
}
project = doc->state.lookup_project(result->project_url);
- int throttled = status.task_suspend_reason & SUSPEND_REASON_CPU_THROTTLE;
+ int throttled = status.task_suspend_reason & SUSPEND_REASON_CPU_THROTTLE;
switch(result->state) {
case RESULT_NEW:
strBuffer += _("New");
diff --git a/clientgui/Makefile.am b/clientgui/Makefile.am
index f85177a..744d084 100644
--- a/clientgui/Makefile.am
+++ b/clientgui/Makefile.am
@@ -1,6 +1,9 @@
## -*- mode: makefile; tab-width: 4 -*-
## $Id$
+## To build for Macintosh (Darwin), please read the instructions at
+## mac_build/HowToBuildBOINC_XCode.rtf
+
include $(top_srcdir)/Makefile.incl
if ENABLE_CLIENT_RELEASE
@@ -16,22 +19,6 @@ else
endif
endif ## ENABLE_CLIENT_RELEASE
-if OS_DARWIN
- LIBS += -framework IOKit -framework Foundation -framework ScreenSaver -framework Cocoa -framework Security
- mac_sources = mac/SystemMenu.m \
- mac/mac_saver_module.cpp \
- mac/Mac_Saver_ModuleView.m \
- mac/MacBitmapComboBox.cpp \
- mac/MacSysMenu.cpp \
- mac/Mac_GUI.cpp\
- mac/browser_safari.mm
-
- mac_headers = mac/*.h
-else
- mac_headers =
- mac_sources =
-endif
-
bin_PROGRAMS = boincmgr
# keep the following alphabetic
@@ -47,22 +34,20 @@ boincmgr_SOURCES = \
BOINCBaseFrame.cpp \
BOINCBaseView.cpp \
BOINCBaseWizard.cpp \
- BOINCBitmapComboBox.cpp \
BOINCClientManager.cpp \
BOINCDialupManager.cpp \
BOINCGUIApp.cpp \
- BOINCHtmlLBox.cpp \
- BOINCInternetFSHandler.cpp \
BOINCListCtrl.cpp \
BOINCTaskBar.cpp \
BOINCTaskCtrl.cpp \
browser.cpp \
+ common/wxPieCtrl.cpp \
CompletionErrorPage.cpp \
CompletionPage.cpp \
- common/wxPieCtrl.cpp \
DlgAbout.cpp \
DlgAdvPreferences.cpp \
DlgAdvPreferencesBase.cpp \
+ DlgDiagnosticLogFlags.cpp \
DlgEventLog.cpp \
DlgEventLogListCtrl.cpp \
DlgExitMessage.cpp \
@@ -78,7 +63,6 @@ boincmgr_SOURCES = \
NotFoundPage.cpp \
NoticeListCtrl.cpp \
ProjectInfoPage.cpp \
- ProjectListCtrl.cpp \
ProjectProcessingPage.cpp \
ProjectPropertiesPage.cpp \
ProxyInfoPage.cpp \
@@ -108,14 +92,13 @@ boincmgr_SOURCES = \
ViewWork.cpp \
WelcomePage.cpp \
WizardAttach.cpp \
- wizardex.cpp \
- $(mac_sources)
+ wizardex.cpp
EXTRA_DIST = *.h \
res \
msw \
../lib/error_numbers.h \
- locale $(mac_headers)
+ locale
boincmgr_CPPFLAGS = $(AM_CPPFLAGS) $(WX_CPPFLAGS) $(SQLITE3_CPPFLAGS) $(LIBNOTIFY_CFLAGS) $(CLIENTGUIFLAGS) `pkg-config --cflags gtk+-2.0`
boincmgr_CXXFLAGS = $(AM_CXXFLAGS) $(WX_CXXFLAGS) $(SQLITE3_CPPFLAGS) $(LIBNOTIFY_CFLAGS) $(CLIENTGUIFLAGS) `pkg-config --cflags gtk+-2.0`
diff --git a/clientgui/NoticeListCtrl.cpp b/clientgui/NoticeListCtrl.cpp
index 1182f09..251606c 100644
--- a/clientgui/NoticeListCtrl.cpp
+++ b/clientgui/NoticeListCtrl.cpp
@@ -34,346 +34,24 @@
#include "SkinManager.h"
#include "MainDocument.h"
#include "NoticeListCtrl.h"
-#include "BOINCInternetFSHandler.h"
////@begin XPM images
////@end XPM images
-#if wxUSE_ACCESSIBILITY || defined(__WXMAC__)
-
-#ifdef __WXMAC__
-
-CNoticeListCtrlAccessible::CNoticeListCtrlAccessible(wxWindow* win) {
- mp_win = win;
- SetupMacAccessibilitySupport();
-}
-
-
-CNoticeListCtrlAccessible::~CNoticeListCtrlAccessible() {
- RemoveMacAccessibilitySupport();
-}
-
-#endif
-
-// Gets the name of the specified object.
-wxAccStatus CNoticeListCtrlAccessible::GetName(int childId, wxString* name) {
- static wxString strBuffer;
-
- if (childId == wxACC_SELF) {
- *name = _("Notice List");
- } else {
- CMainDocument* pDoc = wxDynamicCast(wxGetApp().GetDocument(), CMainDocument);
- strBuffer = wxEmptyString;
-
- if (pDoc) {
- strBuffer = wxString(pDoc->notice(childId-1)->title, wxConvUTF8);
- eol_to_br(strBuffer);
- localize(strBuffer);
- strBuffer = StripHTMLTags(strBuffer);
- *name = strBuffer.c_str();
- }
- }
- return wxACC_OK;
-}
-
-
-// Can return either a child object, or an integer
-// representing the child element, starting from 1.
-wxAccStatus CNoticeListCtrlAccessible::HitTest(const wxPoint& pt, int* childId, wxAccessible** /*childObject*/) {
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- if (pCtrl) {
- *childId = pCtrl->HitTest(pt);
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Returns the rectangle for this object (id = 0) or a child element (id > 0).
-wxAccStatus CNoticeListCtrlAccessible::GetLocation(wxRect& rect, int elementId) {
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- if (pCtrl && (0 == elementId)) {
- // List control
- rect.SetPosition(pCtrl->GetScreenPosition());
- rect.SetWidth(pCtrl->GetSize().GetWidth());
- rect.SetHeight(pCtrl->GetSize().GetHeight());
- return wxACC_OK;
- } else if (pCtrl && (0 != elementId)) {
- pCtrl->GetItemRect(elementId - 1, rect);
- pCtrl->ClientToScreen(&rect.x, &rect.y);
-
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_FALSE;
-}
-
-
-// Gets the number of children.
-wxAccStatus CNoticeListCtrlAccessible::GetChildCount(int* childCount) {
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- if (pCtrl) {
- *childCount = (int)pCtrl->GetItemCount();
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Performs the default action. childId is 0 (the action for this object)
-// or > 0 (the action for a child).
-// Return wxACC_NOT_SUPPORTED if there is no default action for this
-// window (e.g. an edit control).
-wxAccStatus CNoticeListCtrlAccessible::DoDefaultAction(int childId) {
-#if ALLOW_NOTICES_SELECTION
-
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- CMainDocument* pDoc = wxDynamicCast(wxGetApp().GetDocument(), CMainDocument);
- if (pCtrl && (childId != wxACC_SELF)) {
- // Zero-based array index
- int iRealChildId = childId - 1;
-
- pCtrl->SetSelection(iRealChildId);
-
- // Fire Event
- NoticeListCtrlEvent evt(
- wxEVT_NOTICELIST_ITEM_CHANGE,
- pDoc->notice(iRealChildId)->seqno,
- wxString(pDoc->notice(iRealChildId)->link, wxConvUTF8)
- );
-#ifdef __WXMAC__
- evt.SetEventObject(pCtrl);
-#else
- evt.SetEventObject(this);
-#endif
-
- pCtrl->GetParent()->AddPendingEvent( evt );
-
- return wxACC_OK;
- }
-
-#endif // ALLOW_NOTICES_SELECTION
-
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-// Returns the description for this object or a child.
-wxAccStatus CNoticeListCtrlAccessible::GetDescription(int childId, wxString* description) {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- static wxString strBuffer;
- wxDateTime dtBuffer;
- wxString strDescription = wxEmptyString;
- wxString strProjectName = wxEmptyString;
- wxString strArrivalTime = wxEmptyString;
-
- if (pDoc && (childId != wxACC_SELF)) {
- strBuffer = wxEmptyString;
-
- strProjectName = wxString(pDoc->notice(childId-1)->project_name, wxConvUTF8);
-
- strDescription = wxString(pDoc->notice(childId-1)->description.c_str(), wxConvUTF8);
- eol_to_br(strDescription);
- localize(strDescription);
-
- dtBuffer.Set((time_t)pDoc->notice(childId-1)->arrival_time);
- strArrivalTime = dtBuffer.Format();
-
- if (strProjectName.IsEmpty()) {
- strBuffer.Printf(_("%s; received on %s"), strDescription.c_str(), strArrivalTime.c_str());
- } else {
- strBuffer.Printf(_("%s; received from %s; on %s"), strDescription.c_str(), strProjectName.c_str(), strArrivalTime.c_str());
- }
-
- strBuffer = StripHTMLTags(strBuffer);
- *description = strBuffer.c_str();
-
- return wxACC_OK;
- }
-
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-wxString CNoticeListCtrlAccessible::StripHTMLTags(wxString inBuf) {
- wxString outBuf = wxEmptyString;
- wxString tempBuf = inBuf;
-
- while (!tempBuf.IsEmpty()) {
- outBuf += tempBuf.BeforeFirst(wxT('<'));
- tempBuf = tempBuf.AfterFirst(wxT('<'));
- if (tempBuf.IsEmpty()) break;
- tempBuf = tempBuf.AfterFirst(wxT('>'));
- }
-
- return outBuf;
-}
-
-#ifndef __WXMAC__
-
-// Navigates from fromId to toId/toObject.
-wxAccStatus CNoticeListCtrlAccessible::Navigate(
- wxNavDir navDir, int fromId, int* toId, wxAccessible** toObject
-) {
-
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- *toObject = NULL;
-
- if (0 != fromId) {
- switch (navDir) {
- case wxNAVDIR_PREVIOUS:
- case wxNAVDIR_UP:
- if (1 == fromId){
- return wxACC_FALSE;
- } else {
- *toId = fromId - 1;
- return wxACC_OK;
- }
- break;
- case wxNAVDIR_NEXT:
- case wxNAVDIR_DOWN:
- if ((int)pCtrl->GetItemCount() == fromId) {
- return wxACC_FALSE;
- } else {
- *toId = fromId + 1;
- return wxACC_OK;
- }
- return wxACC_FALSE;
- break;
- case wxNAVDIR_LEFT:
- return wxACC_FALSE;
- break;
- case wxNAVDIR_RIGHT:
- return wxACC_FALSE;
- break;
- case wxNAVDIR_FIRSTCHILD:
- if (1 == fromId) {
- return wxACC_FALSE;
- } else {
- *toId = 1;
- return wxACC_OK;
- }
- break;
- case wxNAVDIR_LASTCHILD:
- if ((int)pCtrl->GetItemCount() == fromId) {
- return wxACC_FALSE;
- } else {
- *toId = (int)pCtrl->GetItemCount();
- return wxACC_OK;
- }
- break;
- }
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Gets the default action for this object (0) or > 0 (the action for a child).
-// Return wxACC_OK even if there is no action. actionName is the action, or the empty
-// string if there is no action.
-// The retrieved string describes the action that is performed on an object,
-// not what the object does as a result. For example, a toolbar button that prints
-// a document has a default action of "Press" rather than "Prints the current document."
-wxAccStatus CNoticeListCtrlAccessible::GetDefaultAction(int childId, wxString* actionName) {
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- if (pCtrl && (childId != wxACC_SELF)) {
- *actionName = _("Click");
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Returns a role constant.
-wxAccStatus CNoticeListCtrlAccessible::GetRole(int childId, wxAccRole* role) {
- if (childId == wxACC_SELF) {
- *role = wxROLE_SYSTEM_LIST;
- } else {
- *role = wxROLE_SYSTEM_LISTITEM;
- }
- return wxACC_OK;
-}
-
-
-// Returns a role constant.
-wxAccStatus CNoticeListCtrlAccessible::GetState(int childId, long* state) {
- if (childId == wxACC_SELF) {
- *state = wxACC_STATE_SYSTEM_DEFAULT;
- } else {
- CNoticeListCtrl* pCtrl = wxDynamicCast(GetWindow(), CNoticeListCtrl);
- if (pCtrl && (pCtrl->IsSelected(childId - 1))) {
- *state = wxACC_STATE_SYSTEM_SELECTABLE |
- wxACC_STATE_SYSTEM_FOCUSABLE |
- wxACC_STATE_SYSTEM_SELECTED |
- wxACC_STATE_SYSTEM_FOCUSED;
- } else if (pCtrl && (pCtrl->IsVisible(childId - 1))) {
- *state = wxACC_STATE_SYSTEM_SELECTABLE |
- wxACC_STATE_SYSTEM_FOCUSABLE;
- } else {
- *state = wxACC_STATE_SYSTEM_SELECTABLE |
- wxACC_STATE_SYSTEM_FOCUSABLE |
- wxACC_STATE_SYSTEM_OFFSCREEN |
- wxACC_STATE_SYSTEM_INVISIBLE;
- }
- }
- return wxACC_OK;
-}
-
-
-// Selects the object or child.
-wxAccStatus CNoticeListCtrlAccessible::Select(int , wxAccSelectionFlags ) {
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Gets a variant representing the selected children
-// of this object.
-// Acceptable values:
-// - a null variant (IsNull() returns true)
-// - a list variant (GetType() == wxT("list"))
-// - an integer representing the selected child element,
-// or 0 if this object is selected (GetType() == wxT("long"))
-// - a "void*" pointer to a wxAccessible child object
-wxAccStatus CNoticeListCtrlAccessible::GetSelections(wxVariant* ) {
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-#endif // ifndef __WXMAC__
-
-#endif // wxUSE_ACCESSIBILITY || defined(__WXMAC__)
-
-
-/*!
- * CNoticeListCtrl event definitions
- */
-DEFINE_EVENT_TYPE( wxEVT_NOTICELIST_ITEM_CHANGE )
-DEFINE_EVENT_TYPE( wxEVT_NOTICELIST_ITEM_DISPLAY )
-
-
-/*!
- * CNoticeListCtrl type definition
+ /* CNoticeListCtrl type definition
*/
-IMPLEMENT_DYNAMIC_CLASS( CNoticeListCtrl, CBOINCHtmlListBox )
-IMPLEMENT_DYNAMIC_CLASS( NoticeListCtrlEvent, wxNotifyEvent )
+IMPLEMENT_DYNAMIC_CLASS( CNoticeListCtrl, wxWindow )
/*!
* CNoticeListCtrl event table definition
*/
-BEGIN_EVENT_TABLE( CNoticeListCtrl, CBOINCHtmlListBox )
+BEGIN_EVENT_TABLE( CNoticeListCtrl, wxWindow )
////@begin CNoticeListCtrl event table entries
- EVT_LISTBOX(ID_LIST_NOTIFICATIONSVIEW, CNoticeListCtrl::OnSelected)
- EVT_LISTBOX_DCLICK(ID_LIST_NOTIFICATIONSVIEW, CNoticeListCtrl::OnDClicked)
- EVT_HTML_CELL_CLICKED(ID_LIST_NOTIFICATIONSVIEW, CNoticeListCtrl::OnClicked)
- EVT_HTML_LINK_CLICKED(ID_LIST_NOTIFICATIONSVIEW, CNoticeListCtrl::OnLinkClicked)
+ EVT_WEBVIEW_NAVIGATING(ID_LIST_NOTIFICATIONSVIEW, CNoticeListCtrl::OnLinkClicked)
+ EVT_WEBVIEW_ERROR(ID_LIST_NOTIFICATIONSVIEW, CNoticeListCtrl::OnWebViewError)
////@end CNoticeListCtrl event table entries
END_EVENT_TABLE()
@@ -382,33 +60,15 @@ END_EVENT_TABLE()
* CNoticeListCtrl constructors
*/
-CNoticeListCtrl::CNoticeListCtrl( )
-{
+CNoticeListCtrl::CNoticeListCtrl( ) {
}
-CNoticeListCtrl::CNoticeListCtrl( wxWindow* parent )
-{
+CNoticeListCtrl::CNoticeListCtrl( wxWindow* parent ) {
Create( parent );
-
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
- if (internetFSHandler) {
- ((CBOINCInternetFSHandler*)internetFSHandler)->SetAbortInternetIO(false);
- }
}
-CNoticeListCtrl::~CNoticeListCtrl( )
-{
-#ifdef __WXMAC__
- if (m_accessible) {
- delete m_accessible;
- }
-#endif
-
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
- if (internetFSHandler) {
- ((CBOINCInternetFSHandler*)internetFSHandler)->SetAbortInternetIO(false);
- }
+CNoticeListCtrl::~CNoticeListCtrl( ) {
}
@@ -416,25 +76,27 @@ CNoticeListCtrl::~CNoticeListCtrl( )
* CNoticeListCtrl creator
*/
-bool CNoticeListCtrl::Create( wxWindow* parent )
-{
+bool CNoticeListCtrl::Create( wxWindow* parent ) {
////@begin CNoticeListCtrl member initialisation
////@end CNoticeListCtrl member initialisation
////@begin CNoticeListCtrl creation
- CBOINCHtmlListBox::Create( parent, ID_LIST_NOTIFICATIONSVIEW, wxDefaultPosition, wxDefaultSize,
+ wxWindow::Create( parent, ID_LIST_NOTIFICATIONSVIEW, wxDefaultPosition, wxDefaultSize,
wxSUNKEN_BORDER | wxTAB_TRAVERSAL );
-#if wxUSE_ACCESSIBILITY
- SetAccessible(new CNoticeListCtrlAccessible(this));
-#endif
-#ifdef __WXMAC__
- // Enable accessibility only after drawing the page
- // to avoid a mysterious crash bug
- m_accessible = NULL;
-#endif
+ m_browser = wxWebView::New( this, ID_LIST_NOTIFICATIONSVIEW );
////@end CNoticeListCtrl creation
+ wxBoxSizer *topsizer;
+ topsizer = new wxBoxSizer(wxVERTICAL);
+
+ topsizer->Add(m_browser, 1, wxEXPAND);
+ SetAutoLayout(true);
+ SetSizer(topsizer);
+
+ m_itemCount = 0;
+ m_noticesBody = wxT("<html><head></head><body></body></html>");
+
// Display the fetching notices message until we have notices
// to display or have determined that there are no notices.
m_bDisplayFetchingNotices = false;
@@ -445,47 +107,14 @@ bool CNoticeListCtrl::Create( wxWindow* parent )
}
-void CNoticeListCtrl::OnSelected( wxCommandEvent& event )
-{
- // Fire Event
- NoticeListCtrlEvent evt(
- wxEVT_NOTICELIST_ITEM_CHANGE,
- event.GetInt(),
- wxEmptyString
- );
- evt.SetEventObject(this);
-
- GetParent()->AddPendingEvent( evt );
-}
-
-
-void CNoticeListCtrl::OnClicked( wxHtmlCellEvent& event )
-{
- event.Skip();
-}
-
-
-void CNoticeListCtrl::OnDClicked( wxCommandEvent& event )
-{
- event.Skip();
+int CNoticeListCtrl::GetItemCount() {
+ return m_itemCount;
}
-void CNoticeListCtrl::OnLinkClicked( wxHtmlLinkEvent& event )
-{
- // Fire Event
- NoticeListCtrlEvent evt(
- wxEVT_NOTICELIST_ITEM_DISPLAY,
- event.GetInt(),
- event.GetLinkInfo().GetHref()
- );
- evt.SetEventObject(this);
-
- GetParent()->AddPendingEvent( evt );
-}
-
+void CNoticeListCtrl::SetItemCount(int newCount) {
+ int i;
-wxString CNoticeListCtrl::OnGetItem(size_t i) const {
CMainDocument* pDoc = wxGetApp().GetDocument();
CSkinAdvanced* pSkinAdvanced = wxGetApp().GetSkinManager()->GetAdvanced();
wxString strTitle = wxEmptyString;
@@ -503,78 +132,104 @@ wxString CNoticeListCtrl::OnGetItem(size_t i) const {
wxASSERT(pSkinAdvanced);
wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
- if (pDoc->IsConnected()) {
- NOTICE* np = pDoc->notice((unsigned int)i);
+ m_itemCount = newCount;
+ m_noticesBody = wxT("<html><head></head><body><font face=helvetica>");
- strCategory = wxString(np->category, wxConvUTF8);
+ for (i=0; i<newCount; ++i) {
+ if (pDoc->IsConnected()) {
+ NOTICE* np = pDoc->notice((unsigned int)i);
- strProjectName = wxString(np->project_name, wxConvUTF8);
+ strCategory = wxString(np->category, wxConvUTF8);
- strURL = wxString(np->link, wxConvUTF8);
+ strProjectName = wxString(np->project_name, wxConvUTF8);
- strTitle = wxString(np->title, wxConvUTF8);
+ strURL = wxString(np->link, wxConvUTF8);
- // Fix-up title
- if (strCategory == wxT("client")) {
- strBuffer.Printf(
- wxT("_(\"Notice from %s\")"),
- pSkinAdvanced->GetApplicationShortName().c_str()
- );
- if (strProjectName.size()) {
- strTemp.Printf(wxT("%s: %s"), strProjectName.c_str(), strBuffer.c_str());
+ strTitle = wxString(np->title, wxConvUTF8);
+
+ // Fix-up title
+ if (strCategory == wxT("client")) {
+ strBuffer.Printf(
+ wxT("_(\"Notice from %s\")"),
+ pSkinAdvanced->GetApplicationShortName().c_str()
+ );
+ if (strProjectName.size()) {
+ strTemp.Printf(wxT("%s: %s"), strProjectName.c_str(), strBuffer.c_str());
+ } else {
+ strTemp.Printf(wxT("%s"), strBuffer.c_str());
+ }
+ } else if (strCategory == wxT("scheduler")) {
+ strTemp.Printf(wxT("%s: %s"), strProjectName.c_str(), wxT("_(\"Notice from server\")"));
} else {
- strTemp.Printf(wxT("%s"), strBuffer.c_str());
+ if (strProjectName.size()) {
+ strTemp.Printf(wxT("%s: %s"), strProjectName.c_str(), strTitle.c_str());
+ } else {
+ strTemp = strTitle;
+ }
}
- } else if (strCategory == wxT("scheduler")) {
- strTemp.Printf(wxT("%s: %s"), strProjectName.c_str(), wxT("_(\"Notice from server\")"));
- } else {
- if (strProjectName.size()) {
- strTemp.Printf(wxT("%s: %s"), strProjectName.c_str(), strTitle.c_str());
+
+ strTitle = strTemp;
+ eol_to_br(strTitle);
+ localize(strTitle);
+
+ strDescription = wxString(np->description.c_str(), wxConvUTF8);
+ eol_to_br(strDescription);
+ localize(strDescription);
+
+ // RSS feeds and web pages may use protocol-relative (scheme-relative)
+ // URLs, such as <img src="//sample.com/test.jpg"/>
+ // Since the html comes from a web server via http, the scheme is
+ // assumed to also be http. But we have cached the html in a local
+ // file, so it is no longer associated with the http protocol / scheme.
+ // Therefore all our URLs must explicity specify the http protocol.
+ //
+ // The second argument to wxWebView::SetPage is supposed to take care
+ // of this automatically, but fails to do so under Windows, so we do
+ // it here explicitly.
+ strDescription.Replace(wxT("\"//"), wxT("\"http://"));
+ strDescription.Replace(wxT("</a>"), wxT("</a> "));
+
+ dtBuffer.Set((time_t)np->create_time);
+ strCreateTime = dtBuffer.Format();
+
+ // Put dividers between notices, but not before first or after last
+ if (i == 0) {
+ strBuffer = wxEmptyString;
} else {
- strTemp = strTitle;
+ strBuffer = wxT("<hr>");
}
- }
-
- strTitle = strTemp;
- eol_to_br(strTitle);
- localize(strTitle);
- strDescription = wxString(np->description.c_str(), wxConvUTF8);
- eol_to_br(strDescription);
- localize(strDescription);
+ strBuffer += wxT("<table border=0 cellpadding=5><tr><td>");
- dtBuffer.Set((time_t)np->create_time);
- strCreateTime = dtBuffer.Format();
-
- strBuffer = wxT("<table border=0 cellpadding=5><tr><td>");
+ if (!strTitle.IsEmpty()) {
+ strTemp.Printf(
+ wxT("<b>%s</b><br>"),
+ strTitle.c_str()
+ );
+ strBuffer += strTemp;
+ }
- if (!strTitle.IsEmpty()) {
- strTemp.Printf(
- wxT("<b>%s</b><br>"),
- strTitle.c_str()
- );
- strBuffer += strTemp;
- }
+ strBuffer += strDescription;
- strBuffer += strDescription;
+ strBuffer += wxT("<br><font size=-2 color=#8f8f8f>");
- strBuffer += wxT("<br><font size=-2 color=#8f8f8f>");
+ strBuffer += strCreateTime;
- strBuffer += strCreateTime;
+ if (!strURL.IsEmpty()) {
+ strTemp.Printf(
+ wxT(" · <a href=%s>%s</a> "),
+ strURL.c_str(),
+ _("more...")
+ );
+ strBuffer += strTemp;
+ }
- if (!strURL.IsEmpty()) {
- strTemp.Printf(
- wxT(" · <a target=_new href=%s>%s</a> "),
- strURL.c_str(),
- _("more...")
- );
- strBuffer += strTemp;
+ strBuffer += wxT("</font></td></tr></table>");
}
-
- strBuffer += wxT("</font></td></tr></table><hr>");
+ m_noticesBody += strBuffer;
}
-
- return strBuffer;
+ m_noticesBody += wxT("</font></body></html>");
+ m_browser->SetPage(m_noticesBody, wxT("http://"));
}
@@ -584,11 +239,28 @@ void CNoticeListCtrl::Clear() {
}
+void CNoticeListCtrl::OnLinkClicked( wxWebViewEvent& event ) {
+ if (event.GetURL().StartsWith(wxT("http://")) || event.GetURL().StartsWith(wxT("https://"))) {
+ event.Veto(); // Tell wxWebView not to follow link
+ wxLaunchDefaultBrowser(event.GetURL());
+ } else {
+ event.Skip();
+ }
+}
+
+
+void CNoticeListCtrl::OnWebViewError( wxWebViewEvent& event ) {
+ fprintf(stderr, "wxWebView error: target=%s, URL=%s\n",
+ (event.GetTarget().ToStdString()).c_str(), (event.GetURL().ToStdString()).c_str());
+
+ event.Skip();
+}
+
+
/*!
* Update the UI.
*/
-bool CNoticeListCtrl::UpdateUI()
-{
+bool CNoticeListCtrl::UpdateUI() {
static bool bAlreadyRunning = false;
CMainDocument* pDoc = wxGetApp().GetDocument();
@@ -621,9 +293,6 @@ bool CNoticeListCtrl::UpdateUI()
return true;
}
- // We must prevent re-entry because our asynchronous
- // Internet access on Windows calls Yield() which can
- // allow this to be called again.
if (!bAlreadyRunning) {
bAlreadyRunning = true;
if (
@@ -638,13 +307,6 @@ bool CNoticeListCtrl::UpdateUI()
m_bDisplayEmptyNotice = false;
Thaw();
}
-#ifdef __WXMAC__
- // Enable accessibility only after drawing the page
- // to avoid a mysterious crash bug
- if (m_accessible == NULL) {
- m_accessible = new CNoticeListCtrlAccessible(this);
- }
-#endif
bAlreadyRunning = false;
}
diff --git a/clientgui/NoticeListCtrl.h b/clientgui/NoticeListCtrl.h
index 9729c47..04db8aa 100644
--- a/clientgui/NoticeListCtrl.h
+++ b/clientgui/NoticeListCtrl.h
@@ -22,72 +22,12 @@
#pragma interface "NoticeListCtrl.cpp"
#endif
-#include "BOINCHtmlLBox.h"
-
-#if wxUSE_ACCESSIBILITY || defined(__WXMAC__)
-
-#ifdef __WXMAC__
-#define wxACC_SELF 0
-#define wxACC_OK noErr
-#define wxAccStatus OSStatus
-#define wxACC_NOT_IMPLEMENTED eventNotHandledErr
-#define wxACC_FALSE eventNotHandledErr
-#define wxAccessible wxObject
-#endif
-
-
-#ifndef __WXMAC__
-class CNoticeListCtrlAccessible : public wxWindowAccessible
-#else
-class CNoticeListCtrlAccessible
-#endif
-{
-public:
-
-#ifndef __WXMAC__
- CNoticeListCtrlAccessible(wxWindow* win): wxWindowAccessible(win) {}
-#else
- CNoticeListCtrlAccessible(wxWindow* win);
- virtual ~CNoticeListCtrlAccessible();
-#endif
-
- virtual wxAccStatus GetName(int childId, wxString* name);
- virtual wxAccStatus HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject);
- virtual wxAccStatus GetLocation(wxRect& rect, int elementId);
- virtual wxAccStatus GetChildCount(int* childCount);
- virtual wxAccStatus DoDefaultAction(int childId);
- virtual wxAccStatus GetDescription(int childId, wxString* description);
- wxString StripHTMLTags(wxString inBuf);
-
-#ifndef __WXMAC__
- virtual wxAccStatus Navigate(wxNavDir navDir, int fromId, int* toId, wxAccessible** toObject);
- virtual wxAccStatus GetDefaultAction(int childId, wxString* actionName);
- virtual wxAccStatus GetRole(int childId, wxAccRole* role);
- virtual wxAccStatus GetState(int childId, long* state);
- virtual wxAccStatus Select(int childId, wxAccSelectionFlags selectFlags);
- virtual wxAccStatus GetSelections(wxVariant* selections);
-#endif
-
-#ifdef __WXMAC__
- wxWindow *mp_win;
- HIViewRef m_listView;
- EventHandlerRef m_plistAccessibilityEventHandlerRef;
-
- wxWindow *GetWindow() { return mp_win; }
- void SetupMacAccessibilitySupport();
- void RemoveMacAccessibilitySupport();
-#endif
-};
-
-#endif
-
-
/*!
* CNoticeListCtrl class declaration
*/
-class CNoticeListCtrl: public CBOINCHtmlListBox
-{
+class CNoticeListCtrl: public wxWindow
+{
DECLARE_DYNAMIC_CLASS( CNoticeListCtrl )
DECLARE_EVENT_TABLE()
@@ -98,79 +38,28 @@ public:
~CNoticeListCtrl();
/// Creation
- bool Create( wxWindow* parent );
+ bool Create( wxWindow* parent );
+ int GetItemCount();
+ void SetItemCount(int newCount);
+
////@begin CNoticeListCtrl event handler declarations
- void OnSelected( wxCommandEvent& event );
- void OnDClicked( wxCommandEvent& event );
- void OnClicked( wxHtmlCellEvent& event );
- void OnLinkClicked( wxHtmlLinkEvent& event );
+ void OnLinkClicked( wxWebViewEvent& event );
+ void OnWebViewError( wxWebViewEvent& event );
////@end CNoticeListCtrl event handler declarations
- virtual wxString OnGetItem(size_t i) const;
+ void Clear();
+ bool UpdateUI();
- void Clear();
- bool UpdateUI();
-
- int GetItemHeight(size_t i) { return (int)OnGetItemHeight(i); }
-
- bool m_bDisplayFetchingNotices;
- bool m_bDisplayEmptyNotice;
+ bool m_bDisplayFetchingNotices;
+ bool m_bDisplayEmptyNotice;
private:
- bool m_bNeedsReloading;
-#ifdef __WXMAC__
- CNoticeListCtrlAccessible* m_accessible;
-#endif
+ wxWebView* m_browser;
+ bool m_bNeedsReloading;
+ int m_itemCount;
+ wxString m_noticesBody;
};
-
-/*!
- * NoticeListCtrlEvent class declaration
- */
-
-class NoticeListCtrlEvent : public wxNotifyEvent
-{
-public:
- NoticeListCtrlEvent( wxEventType evtType = wxEVT_NULL, int iSeqNo = 0, wxString strURL = wxEmptyString ) :
- wxNotifyEvent( evtType, wxID_ANY )
- {
- m_iSeqNo = iSeqNo;
- m_strURL = strURL;
- }
-
- int GetSeqNo() { return m_iSeqNo; };
- wxString GetURL() { return m_strURL; };
-
- virtual wxNotifyEvent* Clone() const { return new NoticeListCtrlEvent(*this); }
-
-private:
- int m_iSeqNo;
- wxString m_strURL;
-
- DECLARE_DYNAMIC_CLASS(NoticeListCtrlEvent)
-};
-
-// ----------------------------------------------------------------------------
-// macros for handling ProjectListCtrlEvent
-// ----------------------------------------------------------------------------
-
-BEGIN_DECLARE_EVENT_TYPES()
- DECLARE_EVENT_TYPE( wxEVT_NOTICELIST_ITEM_CHANGE, 100000 )
- DECLARE_EVENT_TYPE( wxEVT_NOTICELIST_ITEM_DISPLAY, 100001 )
-END_DECLARE_EVENT_TYPES()
-
-typedef void (wxEvtHandler::*NoticeListCtrlEventFunction)(NoticeListCtrlEvent&);
-
-#define NoticeListCtrlEventHandler(func) \
- (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(NoticeListCtrlEventFunction, &func)
-
-#define wx__DECLARE_NOTICELISTEVT(evt, fn) \
- wx__DECLARE_EVT0(wxEVT_NOTICELIST_ ## evt, NoticeListCtrlEventHandler(fn))
-
-#define EVT_NOTICELIST_ITEM_CHANGE(fn) wx__DECLARE_NOTICELISTEVT(ITEM_CHANGE, fn)
-#define EVT_NOTICELIST_ITEM_DISPLAY(fn) wx__DECLARE_NOTICELISTEVT(ITEM_DISPLAY, fn)
-
-
#endif // _NOTICELISTCTRL_H_
diff --git a/clientgui/ProjectInfoPage.cpp b/clientgui/ProjectInfoPage.cpp
index 5b37782..ad9ae5c 100644
--- a/clientgui/ProjectInfoPage.cpp
+++ b/clientgui/ProjectInfoPage.cpp
@@ -223,15 +223,15 @@ void CProjectInfoPage::CreateControls()
itemBoxSizer24->Add(5, 5, 0, wxALIGN_LEFT|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(1, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer4 = new wxFlexGridSizer(1, 0, 0);
itemFlexGridSizer4->AddGrowableRow(0);
itemFlexGridSizer4->AddGrowableCol(0);
itemBoxSizer24->Add(itemFlexGridSizer4, 0, wxGROW|wxALL, 0);
- wxFlexGridSizer* itemFlexGridSizer6 = new wxFlexGridSizer(0, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer6 = new wxFlexGridSizer(2, 2, 0, 0);
itemFlexGridSizer6->AddGrowableRow(1);
itemFlexGridSizer6->AddGrowableCol(1);
- itemFlexGridSizer4->Add(itemFlexGridSizer6, 0, wxGROW|wxGROW|wxALL, 0);
+ itemFlexGridSizer4->Add(itemFlexGridSizer6, 0, wxGROW|wxALL, 0);
wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxVERTICAL);
itemFlexGridSizer6->Add(itemBoxSizer7, 0, wxALIGN_LEFT|wxALIGN_TOP, 0);
@@ -240,13 +240,17 @@ void CProjectInfoPage::CreateControls()
itemBoxSizer7->Add(m_pProjectCategoriesStaticCtrl, 0, wxALIGN_LEFT|wxRIGHT|wxBOTTOM, 5);
wxArrayString m_pProjectCategoriesCtrlStrings;
- m_pProjectCategoriesCtrl = new wxComboBox( itemWizardPage23, ID_CATEGORIES, wxT(""), wxDefaultPosition, wxSize(LISTBOXWIDTH, -1), m_pProjectCategoriesCtrlStrings, wxCB_READONLY|wxCB_SORT );
+ m_pProjectCategoriesCtrl = new wxComboBox( itemWizardPage23, ID_CATEGORIES, wxT(""), wxDefaultPosition, wxSize(LISTBOXWIDTH, -1), m_pProjectCategoriesCtrlStrings, wxCB_READONLY
+#ifndef __WXMAC__ // wxCB_SORT is not available in wxCocoa 2.9.5
+ |wxCB_SORT
+#endif
+ );
itemBoxSizer7->Add(m_pProjectCategoriesCtrl, 0, wxGROW|wxLEFT|wxRIGHT, 5);
m_pProjectsStaticCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxT(""), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer7->Add(m_pProjectsStaticCtrl, 0, wxALIGN_LEFT|wxTOP|wxRIGHT|wxBOTTOM, 5);
- wxFlexGridSizer* itemFlexGridSizer11 = new wxFlexGridSizer(0, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer11 = new wxFlexGridSizer(1, 0, 0);
itemFlexGridSizer11->AddGrowableRow(0);
itemFlexGridSizer11->AddGrowableCol(0);
itemBoxSizer7->Add(itemFlexGridSizer11, 0, wxGROW|wxALL, 0);
@@ -262,7 +266,7 @@ void CProjectInfoPage::CreateControls()
m_pProjectDetailsDescriptionCtrl = new wxTextCtrl( itemWizardPage23, ID_PROJECTDESCRIPTION, wxT(""), wxDefaultPosition, wxSize(DESCRIPTIONSWIDTH, 100), wxTE_MULTILINE|wxTE_READONLY );
itemStaticBoxSizer13->Add(m_pProjectDetailsDescriptionCtrl, 0, wxGROW|wxLEFT|wxTOP|wxBOTTOM, 5);
- wxFlexGridSizer* itemFlexGridSizer16 = new wxFlexGridSizer(0, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer16 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer16->AddGrowableCol(1);
itemStaticBoxSizer13->Add(itemFlexGridSizer16, 0, wxGROW|wxALL, 0);
@@ -272,7 +276,7 @@ void CProjectInfoPage::CreateControls()
m_pProjectDetailsResearchAreaCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer16->Add(m_pProjectDetailsResearchAreaCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
- wxFlexGridSizer* itemFlexGridSizer19 = new wxFlexGridSizer(0, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer19 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer19->AddGrowableCol(1);
itemStaticBoxSizer13->Add(itemFlexGridSizer19, 0, wxGROW|wxALL, 0);
@@ -282,7 +286,7 @@ void CProjectInfoPage::CreateControls()
m_pProjectDetailsOrganizationCtrl = new wxStaticText( itemWizardPage23, wxID_STATIC, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
itemFlexGridSizer19->Add(m_pProjectDetailsOrganizationCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
- wxFlexGridSizer* itemFlexGridSizer20 = new wxFlexGridSizer(0, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer20 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer20->AddGrowableCol(1);
itemStaticBoxSizer13->Add(itemFlexGridSizer20, 0, wxGROW|wxALL, 0);
@@ -330,7 +334,7 @@ void CProjectInfoPage::CreateControls()
m_pProjectDetailsSupportedPlatformBlankCtrl = new wxStaticBitmap( itemWizardPage23, wxID_STATIC, GetBitmapResource(wxT("blankicon.xpm")), wxDefaultPosition, wxSize(16,16), 0 );
itemBoxSizer26->Add(m_pProjectDetailsSupportedPlatformBlankCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5);
- wxFlexGridSizer* itemFlexGridSizer33 = new wxFlexGridSizer(0, 2, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer33 = new wxFlexGridSizer(2, 0, 0);
itemFlexGridSizer33->AddGrowableCol(1);
itemFlexGridSizer4->Add(itemFlexGridSizer33, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 0);
@@ -768,7 +772,9 @@ void CProjectInfoPage::OnPageChanged( wxWizardExEvent& event ) {
// Populate the category combo box
- m_pProjectCategoriesCtrl->Clear();
+ if (!m_pProjectCategoriesCtrl->IsListEmpty()) {
+ m_pProjectCategoriesCtrl->Clear();
+ }
m_pProjectCategoriesCtrl->Append(_("All"));
for (i=0; i<aCategories.size(); i++) {
m_pProjectCategoriesCtrl->Append(aCategories[i]);
@@ -843,7 +849,7 @@ void CProjectInfoPage::OnPageChanging( wxWizardExEvent& event ) {
wxGetApp().SafeMessageBox(
_("You already added this project. Please choose a different project."),
strTitle,
- wxCENTER | wxICON_INFORMATION
+ wxCENTER | wxOK | wxICON_INFORMATION
);
// We are already attached to that project,
diff --git a/clientgui/ProjectListCtrl.cpp b/clientgui/ProjectListCtrl.cpp
deleted file mode 100644
index ffc2aa1..0000000
--- a/clientgui/ProjectListCtrl.cpp
+++ /dev/null
@@ -1,604 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-//
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "ProjectListCtrl.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "wizardex.h"
-#include "error_numbers.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "BOINCBaseWizard.h"
-#include "WizardAttach.h"
-#include "ProjectListCtrl.h"
-
-////@begin XPM images
-#include "res/externalweblink.xpm"
-#include "res/nvidiaicon.xpm"
-#include "res/atiicon.xpm"
-////@end XPM images
-
-
-#if wxUSE_ACCESSIBILITY || defined(__WXMAC__)
-
-#ifdef __WXMAC__
-
-CProjectListCtrlAccessible::CProjectListCtrlAccessible(wxWindow* win) {
- mp_win = win;
- SetupMacAccessibilitySupport();
-}
-
-
-CProjectListCtrlAccessible::~CProjectListCtrlAccessible() {
- RemoveMacAccessibilitySupport();
-}
-
-#endif
-
-// Gets the name of the specified object.
-wxAccStatus CProjectListCtrlAccessible::GetName(int childId, wxString* name)
-{
- if (childId == wxACC_SELF)
- {
- *name = _("Project List");
- }
- else
- {
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl)
- {
- *name = pCtrl->GetItem(childId - 1)->GetTitle().c_str();
- }
- }
- return wxACC_OK;
-}
-
-
-// Can return either a child object, or an integer
-// representing the child element, starting from 1.
-wxAccStatus CProjectListCtrlAccessible::HitTest(const wxPoint& pt, int* childId, wxAccessible** /*childObject*/)
-{
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl)
- {
- *childId = pCtrl->HitTest(pt);
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Returns the rectangle for this object (id = 0) or a child element (id > 0).
-wxAccStatus CProjectListCtrlAccessible::GetLocation(wxRect& rect, int elementId)
-{
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl && (0 == elementId))
- {
- // List control
- rect.SetPosition(pCtrl->GetScreenPosition());
- rect.SetWidth(pCtrl->GetSize().GetWidth());
- rect.SetHeight(pCtrl->GetSize().GetHeight());
- return wxACC_OK;
- }
- else if (pCtrl && (0 != elementId))
- {
- // List item
- wxSize cCtrlSize = pCtrl->GetClientSize();
-
- // Set the initial control postition to the absolute coords of the upper
- // left hand position of the control
- rect.SetPosition(pCtrl->GetScreenPosition());
- rect.width = cCtrlSize.GetWidth() - 1;
- rect.height = pCtrl->GetItemHeight(elementId - 1) - 1;
-
- // Items can have different heights
- int firstVisibleItem = (int)pCtrl->GetFirstVisibleLine();
- int yOffset = 0;
- for (int i=firstVisibleItem; i<(elementId - 1); ++i) {
- yOffset += pCtrl->GetItemHeight((size_t)i);
- }
- rect.SetTop(rect.GetTop() + yOffset);
- rect.height -= 1;
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_FALSE;
-}
-
-
-// Gets the number of children.
-wxAccStatus CProjectListCtrlAccessible::GetChildCount(int* childCount)
-{
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl)
- {
- *childCount = (int)pCtrl->GetItemCount();
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Performs the default action. childId is 0 (the action for this object)
-// or > 0 (the action for a child).
-// Return wxACC_NOT_SUPPORTED if there is no default action for this
-// window (e.g. an edit control).
-wxAccStatus CProjectListCtrlAccessible::DoDefaultAction(int childId)
-{
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl && (childId != wxACC_SELF))
- {
- // Zero-based array index
- int iRealChildId = childId - 1;
-
- pCtrl->SetSelection(iRealChildId);
-
- // Fire Event
- ProjectListCtrlEvent evt(
- wxEVT_PROJECTLIST_ITEM_CHANGE,
- pCtrl->GetItem(iRealChildId)->GetTitle(),
- pCtrl->GetItem(iRealChildId)->GetURL(),
- true
- );
-#ifdef __WXMAC__
- evt.SetEventObject(pCtrl);
-#else
- evt.SetEventObject(this);
-#endif
-
- pCtrl->GetParent()->AddPendingEvent( evt );
-
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Returns the description for this object or a child.
-wxAccStatus CProjectListCtrlAccessible::GetDescription(int childId, wxString* description)
-{
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl && (childId != wxACC_SELF))
- {
- *description = pCtrl->GetItem(childId - 1)->GetDescription().c_str();
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-#ifndef __WXMAC__
-
-// Navigates from fromId to toId/toObject.
-wxAccStatus CProjectListCtrlAccessible::Navigate(
- wxNavDir navDir, int fromId, int* toId, wxAccessible** toObject
-) {
-
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- *toObject = NULL;
-
- if (0 != fromId)
- {
- switch (navDir)
- {
- case wxNAVDIR_PREVIOUS:
- case wxNAVDIR_UP:
- if (1 == fromId)
- {
- return wxACC_FALSE;
- }
- else
- {
- *toId = fromId - 1;
- return wxACC_OK;
- }
- break;
- case wxNAVDIR_NEXT:
- case wxNAVDIR_DOWN:
- if ((int)pCtrl->GetItemCount() == fromId)
- {
- return wxACC_FALSE;
- }
- else
- {
- *toId = fromId + 1;
- return wxACC_OK;
- }
- return wxACC_FALSE;
- break;
- case wxNAVDIR_LEFT:
- return wxACC_FALSE;
- break;
- case wxNAVDIR_RIGHT:
- return wxACC_FALSE;
- break;
- case wxNAVDIR_FIRSTCHILD:
- if (1 == fromId)
- {
- return wxACC_FALSE;
- }
- else
- {
- *toId = 1;
- return wxACC_OK;
- }
- break;
- case wxNAVDIR_LASTCHILD:
- if ((int)pCtrl->GetItemCount() == fromId)
- {
- return wxACC_FALSE;
- }
- else
- {
- *toId = (int)pCtrl->GetItemCount();
- return wxACC_OK;
- }
- break;
- }
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Gets the default action for this object (0) or > 0 (the action for a child).
-// Return wxACC_OK even if there is no action. actionName is the action, or the empty
-// string if there is no action.
-// The retrieved string describes the action that is performed on an object,
-// not what the object does as a result. For example, a toolbar button that prints
-// a document has a default action of "Press" rather than "Prints the current document."
-wxAccStatus CProjectListCtrlAccessible::GetDefaultAction(int childId, wxString* actionName)
-{
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl && (childId != wxACC_SELF))
- {
- *actionName = _("Click");
- return wxACC_OK;
- }
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Returns a role constant.
-wxAccStatus CProjectListCtrlAccessible::GetRole(int childId, wxAccRole* role)
-{
- if (childId == wxACC_SELF)
- {
- *role = wxROLE_SYSTEM_LIST;
- }
- else
- {
- *role = wxROLE_SYSTEM_LISTITEM;
- }
- return wxACC_OK;
-}
-
-
-// Returns a role constant.
-wxAccStatus CProjectListCtrlAccessible::GetState(int childId, long* state)
-{
- if (childId == wxACC_SELF)
- {
- *state = wxACC_STATE_SYSTEM_DEFAULT;
- }
- else
- {
- CProjectListCtrl* pCtrl = wxDynamicCast(GetWindow(), CProjectListCtrl);
- if (pCtrl && (pCtrl->IsSelected(childId - 1)))
- {
- *state = wxACC_STATE_SYSTEM_SELECTABLE |
- wxACC_STATE_SYSTEM_FOCUSABLE |
- wxACC_STATE_SYSTEM_SELECTED |
- wxACC_STATE_SYSTEM_FOCUSED;
- }
- else if (pCtrl && (pCtrl->IsVisible(childId - 1)))
- {
- *state = wxACC_STATE_SYSTEM_SELECTABLE |
- wxACC_STATE_SYSTEM_FOCUSABLE;
- }
- else
- {
- *state = wxACC_STATE_SYSTEM_SELECTABLE |
- wxACC_STATE_SYSTEM_FOCUSABLE |
- wxACC_STATE_SYSTEM_OFFSCREEN |
- wxACC_STATE_SYSTEM_INVISIBLE;
- }
- }
- return wxACC_OK;
-}
-
-
-// Selects the object or child.
-wxAccStatus CProjectListCtrlAccessible::Select(int , wxAccSelectionFlags )
-{
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-
-
-// Gets a variant representing the selected children
-// of this object.
-// Acceptable values:
-// - a null variant (IsNull() returns true)
-// - a list variant (GetType() == wxT("list"))
-// - an integer representing the selected child element,
-// or 0 if this object is selected (GetType() == wxT("long"))
-// - a "void*" pointer to a wxAccessible child object
-wxAccStatus CProjectListCtrlAccessible::GetSelections(wxVariant* )
-{
- // Let the framework handle the other cases.
- return wxACC_NOT_IMPLEMENTED;
-}
-#endif // ifndef __WXMAC__
-#endif // wxUSE_ACCESSIBILITY || defined(__WXMAC__)
-
-
-/*!
- * CProjectListItem type definition
- */
-IMPLEMENT_DYNAMIC_CLASS( CProjectListItem, wxObject )
-
-
-/*!
- * CProjectListCtrl event definitions
- */
-DEFINE_EVENT_TYPE( wxEVT_PROJECTLIST_ITEM_CHANGE )
-DEFINE_EVENT_TYPE( wxEVT_PROJECTLIST_ITEM_DISPLAY )
-
-
-/*!
- * CProjectListCtrl type definition
- */
-IMPLEMENT_DYNAMIC_CLASS( CProjectListCtrl, wxHtmlListBox )
-IMPLEMENT_DYNAMIC_CLASS( ProjectListCtrlEvent, wxNotifyEvent )
-
-
-/*!
- * CProjectListCtrl event table definition
- */
-
-BEGIN_EVENT_TABLE( CProjectListCtrl, wxHtmlListBox )
-
-////@begin CProjectListCtrl event table entries
- EVT_LISTBOX(ID_PROJECTLISTCTRL, CProjectListCtrl::OnSelected)
- EVT_HTML_CELL_CLICKED( ID_PROJECTLISTCTRL, CProjectListCtrl::OnClicked )
- EVT_LISTBOX_DCLICK(ID_PROJECTLISTCTRL, CProjectListCtrl::OnDClicked)
- EVT_HTML_LINK_CLICKED( ID_PROJECTLISTCTRL, CProjectListCtrl::OnLinkClicked )
- EVT_HTML_CELL_HOVER( ID_PROJECTLISTCTRL, CProjectListCtrl::OnHover )
-////@end CProjectListCtrl event table entries
-
-END_EVENT_TABLE()
-
-/*!
- * CProjectListCtrl constructors
- */
-
-CProjectListCtrl::CProjectListCtrl( )
-{
-}
-
-CProjectListCtrl::CProjectListCtrl( wxWindow* parent )
-{
- Create( parent );
-}
-
-
- #ifdef __WXMAC__
-CProjectListCtrl::~CProjectListCtrl( )
-{
- if (m_accessible) {
- delete m_accessible;
- }
-}
-#endif
-
-/*!
- * CProjectList creator
- */
-
-bool CProjectListCtrl::Create( wxWindow* parent )
-{
-////@begin CProjectListCtrl member initialisation
-////@end CProjectListCtrl member initialisation
-
-////@begin CProjectListCtrl creation
- wxHtmlListBox::Create( parent, ID_PROJECTLISTCTRL, wxDefaultPosition, wxDefaultSize,
- wxSUNKEN_BORDER | wxTAB_TRAVERSAL );
-
-#if wxUSE_ACCESSIBILITY
- SetAccessible(new CProjectListCtrlAccessible(this));
-#endif
-#ifdef __WXMAC__
- m_accessible = new CProjectListCtrlAccessible(this);
-#endif
-
- wxMemoryFSHandler::AddFile(wxT("webexternallink.xpm"), wxBitmap(externalweblink_xpm), wxBITMAP_TYPE_XPM);
- wxMemoryFSHandler::AddFile(wxT("nvidiaicon.xpm"), wxBitmap(nvidiaicon_xpm), wxBITMAP_TYPE_XPM);
- wxMemoryFSHandler::AddFile(wxT("atiicon.xpm"), wxBitmap(atiicon_xpm), wxBITMAP_TYPE_XPM);
-////@end CProjectListCtrl creation
-
- return TRUE;
-}
-
-
-void CProjectListCtrl::OnSelected( wxCommandEvent& event )
-{
- // Fire Event
- ProjectListCtrlEvent evt(
- wxEVT_PROJECTLIST_ITEM_CHANGE,
- m_Items[event.GetInt()]->GetTitle(),
- m_Items[event.GetInt()]->GetURL(),
- m_Items[event.GetInt()]->IsPlatformSupported()
- );
- evt.SetEventObject(this);
-
- GetParent()->AddPendingEvent( evt );
-}
-
-
-void CProjectListCtrl::OnClicked( wxHtmlCellEvent& event )
-{
- event.Skip();
-}
-
-
-void CProjectListCtrl::OnDClicked( wxCommandEvent& event )
-{
- event.Skip();
-}
-
-
-void CProjectListCtrl::OnLinkClicked( wxHtmlLinkEvent& event )
-{
- // Fire Event
- ProjectListCtrlEvent evt(
- wxEVT_PROJECTLIST_ITEM_DISPLAY,
- wxEmptyString,
- event.GetLinkInfo().GetHref(),
- true
- );
- evt.SetEventObject(this);
-
- GetParent()->AddPendingEvent( evt );
-}
-
-
-void CProjectListCtrl::OnHover( wxHtmlCellEvent& event )
-{
- long i = 0;
- wxHtmlCell* pCell = event.GetCell();
- wxHtmlCell* pRootCell = pCell->GetRootCell();
- wxString strNvidiaIcon = wxT("nvidiaicon");
- wxString strATIIcon = wxT("atiicon");
- wxString strWebsiteIcon = wxT("website");
- wxString strTooltip = wxEmptyString;
-
- wxHtmlCell* pAnchor = pCell->GetParent()->GetFirstChild();
-
- if (pAnchor->Find(wxHTML_COND_ISANCHOR, &strNvidiaIcon)) {
- strTooltip = _("Nvidia GPU Supported");
- } else if (pAnchor->Find(wxHTML_COND_ISANCHOR, &strATIIcon)) {
- strTooltip = _("ATI GPU Supported");
- } else if (pAnchor->Find(wxHTML_COND_ISANCHOR, &strWebsiteIcon)) {
- strTooltip = _("Project Website");
- } else {
- // Convert current HTML cell into an array index
- pRootCell->GetId().ToLong(&i);
-
- strTooltip = m_Items[i]->GetDescription();
- }
-
- // Set Tooltip to the item currently being hovered over
- SetToolTip(strTooltip);
-}
-
-
-wxString CProjectListCtrl::OnGetItem(size_t i) const
-{
- wxString strTopRow = wxEmptyString;
- wxString strBuffer = wxEmptyString;
-
-
- //
- // Top Row
- //
- strTopRow += wxT("<table cellpadding=0 cellspacing=1>");
-
- strTopRow += wxT("<tr>");
-
- strBuffer.Printf(
- wxT("<td width=100%%>%s</td>"),
- m_Items[i]->GetTitle().c_str()
- );
- strTopRow += strBuffer;
-
- if (m_Items[i]->IsNvidiaGPUSupported()) {
- strTopRow += wxT("<td><a name=\"nvidiaicon\"><img height=16 width=16 src=\"memory:nvidiaicon.xpm\"></a></td>");
- }
-
- if (m_Items[i]->IsATIGPUSupported()) {
- strTopRow += wxT("<td><a name=\"atiicon\"><img height=16 width=16 src=\"memory:atiicon.xpm\"></a></td>");
- }
-
- strBuffer.Printf(
- wxT("<td><a name=\"website\"href=\"%s\"><img height=16 width=16 src=\"memory:webexternallink.xpm\"></a></td>"),
- m_Items[i]->GetURL().c_str()
- );
- strTopRow += strBuffer;
-
- strTopRow += wxT("</tr>");
- strTopRow += wxT("</table>");
-
- return strTopRow;
-}
-
-
-/*!
- * Append a new entry to the project list.
- */
-
-bool CProjectListCtrl::Append(
- wxString strURL,
- wxString strTitle,
- wxString strImage,
- wxString strDescription,
- bool bNvidiaGPUSupported,
- bool bATIGPUSupported,
- bool bSupported
-)
-{
- CProjectListItem* pItem = new CProjectListItem();
-
- pItem->SetURL( strURL );
- pItem->SetTitle( strTitle );
- pItem->SetImage( strImage );
- pItem->SetDescription( strDescription );
- pItem->SetNvidiaGPUSupported( bNvidiaGPUSupported );
- pItem->SetATIGPUSupported( bATIGPUSupported );
- pItem->SetPlatformSupported( bSupported );
-
- m_Items.push_back(pItem);
- SetItemCount(m_Items.size());
-
- return true;
-}
-
-
-/*!
- * Return the project list entry at a given index.
- */
-
-CProjectListItem* CProjectListCtrl::GetItem(
- int iIndex
-)
-{
- return m_Items[iIndex];
-}
diff --git a/clientgui/ProjectListCtrl.h b/clientgui/ProjectListCtrl.h
deleted file mode 100644
index 2b696a6..0000000
--- a/clientgui/ProjectListCtrl.h
+++ /dev/null
@@ -1,237 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-//
-#ifndef _WIZ_PROJECTLISTCTRL_H_
-#define _WIZ_PROJECTLISTCTRL_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "ProjectListCtrl.cpp"
-#endif
-
-
-/*!
- * CProjectListItem class declaration
- */
-
-class CProjectListItem: public wxObject
-{
- DECLARE_DYNAMIC_CLASS( CProjectListItem )
-public:
-
- wxString GetURL() const { return m_strURL ; }
- void SetURL(wxString value) { m_strURL = value ; }
-
- wxString GetTitle() const { return m_strTitle ; }
- void SetTitle(wxString value) { m_strTitle = value ; }
-
- wxString GetImage() const { return m_strImage ; }
- void SetImage(wxString value) { m_strImage = value ; }
-
- wxString GetOrganization() const { return m_strOrganization ; }
- void SetOrganization(wxString value) { m_strOrganization = value ; }
-
- wxString GetDescription() const { return m_strDescription ; }
- void SetDescription(wxString value) { m_strDescription = value ; }
-
- wxString GetCategory() const { return m_strCategory ; }
- void SetCategory(wxString value) { m_strCategory = value ; }
-
- bool IsNvidiaGPUSupported() const { return m_bNvidiaGPUSupported ; }
- void SetNvidiaGPUSupported(bool value) { m_bNvidiaGPUSupported = value ; }
-
- bool IsATIGPUSupported() const { return m_bATIGPUSupported ; }
- void SetATIGPUSupported(bool value) { m_bATIGPUSupported = value ; }
-
- bool IsPlatformSupported() const { return m_bSupported ; }
- void SetPlatformSupported(bool value) { m_bSupported = value ; }
-
-private:
- wxString m_strURL;
- wxString m_strTitle;
- wxString m_strImage;
- wxString m_strOrganization;
- wxString m_strDescription;
- wxString m_strCategory;
- bool m_bNvidiaGPUSupported;
- bool m_bATIGPUSupported;
- bool m_bSupported;
-};
-
-#if wxUSE_ACCESSIBILITY || defined(__WXMAC__)
-
-#ifdef __WXMAC__
-
-#define wxACC_SELF 0
-#define wxACC_OK noErr
-#define wxAccStatus OSStatus
-#define wxACC_NOT_IMPLEMENTED eventNotHandledErr
-#define wxACC_FALSE eventNotHandledErr
-#define wxAccessible wxObject
-
-class CProjectListCtrlAccessible
-#else
-class CProjectListCtrlAccessible: public wxWindowAccessible
-#endif
-{
-public:
-
-#ifdef __WXMAC__
- CProjectListCtrlAccessible(wxWindow* win);
- virtual ~CProjectListCtrlAccessible();
-#else
- CProjectListCtrlAccessible(wxWindow* win): wxWindowAccessible(win) {}
-#endif
-
- virtual wxAccStatus GetName(int childId, wxString* name);
- virtual wxAccStatus HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject);
- virtual wxAccStatus GetLocation(wxRect& rect, int elementId);
- virtual wxAccStatus GetChildCount(int* childCount);
- virtual wxAccStatus DoDefaultAction(int childId);
- virtual wxAccStatus GetDescription(int childId, wxString* description);
-#ifndef __WXMAC__
- virtual wxAccStatus Navigate(wxNavDir navDir, int fromId, int* toId, wxAccessible** toObject);
- virtual wxAccStatus GetDefaultAction(int childId, wxString* actionName);
- virtual wxAccStatus GetRole(int childId, wxAccRole* role);
- virtual wxAccStatus GetState(int childId, long* state);
- virtual wxAccStatus Select(int childId, wxAccSelectionFlags selectFlags);
- virtual wxAccStatus GetSelections(wxVariant* selections);
-#endif
-
-#ifdef __WXMAC__
- wxWindow *mp_win;
- HIViewRef m_listView;
- EventHandlerRef m_plistAccessibilityEventHandlerRef;
-
- wxWindow *GetWindow() { return mp_win; }
- void SetupMacAccessibilitySupport();
- void RemoveMacAccessibilitySupport();
-#endif
-};
-
-#endif
-
-
-/*!
- * CProjectListCtrl class declaration
- */
-
-class CProjectListCtrl: public wxHtmlListBox
-{
- DECLARE_DYNAMIC_CLASS( CProjectListCtrl )
- DECLARE_EVENT_TABLE()
-
-public:
- /// Constructors
- CProjectListCtrl( );
-
- CProjectListCtrl( wxWindow* parent );
-#ifdef __WXMAC__
- ~CProjectListCtrl();
-#endif
-
- /// Creation
- bool Create( wxWindow* parent );
-
-////@begin CProjectListCtrl event handler declarations
-
- void OnSelected( wxCommandEvent& event );
- void OnClicked( wxHtmlCellEvent& event );
- void OnDClicked( wxCommandEvent& event );
- void OnLinkClicked( wxHtmlLinkEvent& event );
- void OnHover( wxHtmlCellEvent& event );
-
-////@end CProjectListCtrl event handler declarations
-
- virtual wxString OnGetItem(size_t i) const;
-
- int GetItemHeight(size_t i) { return (int)OnMeasureItem(i); }
-
- /// Methods
- bool Append(
- wxString strURL,
- wxString strTitle,
- wxString strImage,
- wxString strDescription,
- bool bNvidiaGPUSupported,
- bool bATIGPUSupported,
- bool bSupported
- );
-
- CProjectListItem* GetItem(
- int iIndex
- );
-
-private:
- std::vector<CProjectListItem*> m_Items;
-
-#ifdef __WXMAC__
- CProjectListCtrlAccessible* m_accessible;
-#endif
-};
-
-
-/*!
- * ProjectListCtrlEvent class declaration
- */
-
-class ProjectListCtrlEvent : public wxNotifyEvent
-{
-public:
- ProjectListCtrlEvent( wxEventType evtType = wxEVT_NULL, wxString strName = wxEmptyString, wxString strURL = wxEmptyString, bool bSupported = false ) :
- wxNotifyEvent( evtType, wxID_ANY )
- {
- m_strName = strName;
- m_strURL = strURL;
- m_bSupported = bSupported;
- }
-
- wxString GetName() { return m_strName; };
- wxString GetURL() { return m_strURL; };
- bool IsSupported() { return m_bSupported; };
-
- virtual wxNotifyEvent* Clone() const { return new ProjectListCtrlEvent(*this); }
-
-private:
- wxString m_strName;
- wxString m_strURL;
- bool m_bSupported;
-
- DECLARE_DYNAMIC_CLASS(ProjectListCtrlEvent)
-};
-
-// ----------------------------------------------------------------------------
-// macros for handling ProjectListCtrlEvent
-// ----------------------------------------------------------------------------
-
-BEGIN_DECLARE_EVENT_TYPES()
- DECLARE_EVENT_TYPE( wxEVT_PROJECTLIST_ITEM_CHANGE, 100000 )
- DECLARE_EVENT_TYPE( wxEVT_PROJECTLIST_ITEM_DISPLAY, 100001 )
-END_DECLARE_EVENT_TYPES()
-
-typedef void (wxEvtHandler::*ProjectListCtrlEventFunction)(ProjectListCtrlEvent&);
-
-#define ProjectListCtrlEventHandler(func) \
- (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(ProjectListCtrlEventFunction, &func)
-
-#define wx__DECLARE_PROJECTLISTEVT(evt, fn) \
- wx__DECLARE_EVT0(wxEVT_PROJECTLIST_ ## evt, ProjectListCtrlEventHandler(fn))
-
-#define EVT_PROJECTLIST_ITEM_CHANGE(fn) wx__DECLARE_PROJECTLISTEVT(ITEM_CHANGE, fn)
-#define EVT_PROJECTLIST_ITEM_DISPLAY(fn) wx__DECLARE_PROJECTLISTEVT(ITEM_DISPLAY, fn)
-
-
-#endif // _WIZ_PROJECTLISTCTRL_H_
diff --git a/clientgui/ProjectProcessingPage.cpp b/clientgui/ProjectProcessingPage.cpp
index 2cf8707..f03f631 100644
--- a/clientgui/ProjectProcessingPage.cpp
+++ b/clientgui/ProjectProcessingPage.cpp
@@ -38,7 +38,6 @@
#include "AccountInfoPage.h"
#include "CompletionErrorPage.h"
-
////@begin XPM images
#include "res/wizprogress01.xpm"
#include "res/wizprogress02.xpm"
@@ -375,14 +374,16 @@ void CProjectProcessingPage::OnStateChange( CProjectProcessingPageEvent& WXUNUSE
SetNextState(ATTACHPROJECT_ACCOUNTQUERY_EXECUTE);
break;
case ATTACHPROJECT_ACCOUNTQUERY_EXECUTE:
- // Attempt to create the account or reterieve the authenticator.
+ // Attempt to create the account or retrieve the authenticator.
ai->clear();
ao->clear();
- // Newer versions of the server-side software contain the correct
- // master url in the get_project_config response. If it is available
- // use it instead of what the user typed in.
- if (!pWA->project_config.master_url.empty()) {
+ // use the web RPC URL in the get_project_config response
+ // if present, otherwise use what the user typed
+ //
+ if (!pWA->project_config.web_rpc_url_base.empty()) {
+ ai->url = pWA->project_config.web_rpc_url_base;
+ } else if (!pWA->project_config.master_url.empty()) {
ai->url = pWA->project_config.master_url;
} else {
ai->url = (const char*)pWA->m_ProjectInfoPage->GetProjectURL().mb_str();
@@ -437,7 +438,7 @@ void CProjectProcessingPage::OnStateChange( CProjectProcessingPageEvent& WXUNUSE
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
if ((!retval) && !ao->error_num) {
@@ -472,7 +473,7 @@ void CProjectProcessingPage::OnStateChange( CProjectProcessingPageEvent& WXUNUSE
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
}
@@ -540,8 +541,14 @@ void CProjectProcessingPage::OnStateChange( CProjectProcessingPageEvent& WXUNUSE
if (pWA->m_bCredentialsCached) {
pDoc->rpc.project_attach_from_file();
} else {
+ std::string master_url;
+ if (!pWA->project_config.master_url.empty()) {
+ master_url = pWA->project_config.master_url;
+ } else {
+ master_url = (const char*)pWA->m_ProjectInfoPage->GetProjectURL().mb_str();
+ }
pDoc->rpc.project_attach(
- ai->url.c_str(),
+ master_url.c_str(),
ao->authenticator.c_str(),
pWA->project_config.name.c_str()
);
@@ -555,7 +562,12 @@ void CProjectProcessingPage::OnStateChange( CProjectProcessingPageEvent& WXUNUSE
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
+#ifdef __WXMAC__
+ wxEventLoopBase * const modalLoop = wxEventLoopBase::GetActive();
+ modalLoop->YieldFor(wxEVT_CATEGORY_USER_INPUT);
+#else
::wxSafeYield(GetParent());
+#endif
}
if (!retval && !reply.error_num) {
@@ -575,7 +587,7 @@ void CProjectProcessingPage::OnStateChange( CProjectProcessingPageEvent& WXUNUSE
strBuffer += wxString(reply.messages[i].c_str(), wxConvUTF8) + wxString(wxT("\n"));
}
}
- pWA->m_CompletionErrorPage->m_pServerMessagesCtrl->SetLabel(wxString(strBuffer, wxConvUTF8));
+ pWA->m_CompletionErrorPage->m_pServerMessagesCtrl->SetLabel(strBuffer);
}
} else {
SetProjectAttachSucceeded(false);
diff --git a/clientgui/ProjectPropertiesPage.cpp b/clientgui/ProjectPropertiesPage.cpp
index d0af294..5a7ddc1 100644
--- a/clientgui/ProjectPropertiesPage.cpp
+++ b/clientgui/ProjectPropertiesPage.cpp
@@ -39,7 +39,6 @@
#include "CompletionErrorPage.h"
#include "TermsOfUsePage.h"
-
////@begin XPM images
#include "res/wizprogress01.xpm"
#include "res/wizprogress02.xpm"
@@ -154,14 +153,14 @@ void CProjectPropertiesPage::CreateControls()
itemFlexGridSizer40->AddGrowableCol(2);
itemBoxSizer37->Add(itemFlexGridSizer40, 0, wxGROW|wxALL, 5);
- itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxGROW|wxALL, 5);
+ itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxALL, 5);
wxBitmap itemBitmap41(GetBitmapResource(wxT("res/wizprogress01.xpm")));
m_pProgressIndicator = new wxStaticBitmap;
m_pProgressIndicator->Create( itemWizardPage36, ID_PROGRESSCTRL, itemBitmap41, wxDefaultPosition, wxSize(184, 48), 0 );
itemFlexGridSizer40->Add(m_pProgressIndicator, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
- itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxGROW|wxALL, 5);
+ itemFlexGridSizer40->Add(5, 5, 0, wxGROW|wxALL, 5);
////@end CProjectPropertiesPage content construction
}
@@ -414,7 +413,7 @@ void CProjectPropertiesPage::OnStateChange( CProjectPropertiesPageEvent& WXUNUSE
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
if (
@@ -489,7 +488,7 @@ void CProjectPropertiesPage::OnStateChange( CProjectPropertiesPageEvent& WXUNUSE
IncrementProgress(m_pProgressIndicator);
::wxMilliSleep(500);
- ::wxSafeYield(GetParent());
+ wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_USER_INPUT);
}
SetNetworkConnectionNotDetected(NETWORK_STATUS_WANT_CONNECTION == status.network_status);
diff --git a/clientgui/SkinManager.cpp b/clientgui/SkinManager.cpp
index b83f7a3..43fa059 100644
--- a/clientgui/SkinManager.cpp
+++ b/clientgui/SkinManager.cpp
@@ -25,6 +25,7 @@
#include "util.h"
#include "error_numbers.h"
#include "miofile.h"
+#include "filesys.h"
#include "BOINCGUIApp.h"
#include "BOINCBaseFrame.h"
#include "SkinManager.h"
@@ -191,9 +192,11 @@ CSkinIcon::~CSkinIcon() {
void CSkinIcon::Clear() {
- bInitialized = false;
m_strDesiredIcon.Clear();
+ m_strDesiredIcon32.Clear();
m_strDesiredTransparencyMask.Clear();
+ m_strDesiredTransparencyMask32.Clear();
+ m_icoIcon = m_icoDefaultIcon;
}
@@ -254,29 +257,8 @@ wxIconBundle* CSkinIcon::GetIcon() {
return &m_icoIcon;
}
-#if defined(__WXMSW__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_ICO_RESOURCE
-#elif defined(__WXMOTIF__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM
-#elif defined(__WXGTK20__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM
-#elif defined(__WXGTK__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM
-#elif defined(__WXX11__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM
-#elif defined(__WXDFB__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_XPM
-#elif defined(__WXMAC__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_ICON_RESOURCE
-#elif defined(__WXCOCOA__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_ICON_RESOURCE
-#elif defined(__WXPM__)
- #define wxICON_DEFAULT_TYPE wxBITMAP_TYPE_ICO_RESOURCE
-#endif
bool CSkinIcon::SetDefaults(wxString strComponentName, wxString strIcon) {
- if (bInitialized) return true;
-
m_strComponentName = strComponentName;
m_icoDefaultIcon.AddIcon(wxIcon(strIcon, wxICON_DEFAULT_TYPE, 16, 16));
m_icoDefaultIcon.AddIcon(wxIcon(strIcon, wxICON_DEFAULT_TYPE, 20, 20));
@@ -289,33 +271,19 @@ bool CSkinIcon::SetDefaults(wxString strComponentName, wxString strIcon) {
m_icoDefaultIcon.AddIcon(wxIcon(strIcon, wxICON_DEFAULT_TYPE, 96, 96));
m_icoDefaultIcon.AddIcon(wxIcon(strIcon, wxICON_DEFAULT_TYPE, 128, 128));
m_icoDefaultIcon.AddIcon(wxIcon(strIcon, wxICON_DEFAULT_TYPE, 256, 256));
- bInitialized = true;
-
return true;
}
bool CSkinIcon::SetDefaults(wxString strComponentName, const char** m_ppIcon, const char** m_ppIcon32) {
- if (bInitialized) return true;
-
m_strComponentName = strComponentName;
m_icoDefaultIcon.AddIcon(wxIcon(m_ppIcon));
m_icoDefaultIcon.AddIcon(wxIcon(m_ppIcon32));
- bInitialized = true;
-
return true;
}
bool CSkinIcon::Validate() {
- wxIcon ico;
- wxIcon ico32;
- bool set_ico = false;
- bool set_ico32 = false;
-
- // Setup baseline
- m_icoIcon = m_icoDefaultIcon;
-
if (!m_strDesiredIcon.IsEmpty()) {
// Configure bitmap object with optional transparency mask
wxImage img = wxImage(m_strDesiredIcon, wxBITMAP_TYPE_ANY);
@@ -325,8 +293,9 @@ bool CSkinIcon::Validate() {
bmp.SetMask(new wxMask(bmp, ParseColor(m_strDesiredTransparencyMask)));
}
// Now set the icon object using the newly created bitmap with optional transparency mask
- set_ico = true;
+ wxIcon ico;
ico.CopyFromBitmap(bmp);
+ m_icoIcon.AddIcon(ico);
}
if (!m_strDesiredIcon32.IsEmpty()) {
// Configure bitmap object with optional transparency mask
@@ -337,25 +306,17 @@ bool CSkinIcon::Validate() {
bmp32.SetMask(new wxMask(bmp32, ParseColor(m_strDesiredTransparencyMask32)));
}
// Now set the icon object using the newly created bitmap with optional transparency mask
- set_ico32 = true;
+ wxIcon ico32;
ico32.CopyFromBitmap(bmp32);
+ m_icoIcon.AddIcon(ico32);
}
-
- if (set_ico || set_ico32) {
- if ((set_ico && !ico.IsOk()) || (set_ico32 && !ico32.IsOk())) {
- if (show_error_msgs) {
- fprintf(stderr, "Skin Manager: Failed to load '%s' icon. Using default.\n", (const char *)m_strComponentName.mb_str());
- }
- } else {
- if (ico.IsOk()) {
- m_icoIcon.AddIcon(ico);
- }
- if (ico32.IsOk()) {
- m_icoIcon.AddIcon(ico32);
- }
+ if (!m_icoIcon.Ok()) {
+ if (show_error_msgs) {
+ fprintf(stderr, "Skin Manager: Failed to load '%s' icon. Using default.\n", (const char *)m_strComponentName.mb_str());
}
+ m_icoIcon = m_icoDefaultIcon;
+ wxASSERT(m_icoIcon.Ok());
}
-
return true;
}
@@ -518,7 +479,9 @@ int CSkinAdvanced::Parse(MIOFILE& in) {
wxGetApp().GetSkinManager()->ConstructSkinPath() +
wxString(strBuffer.c_str(), wxConvUTF8)
);
- m_bitmapApplicationLogo = wxBitmap(wxImage(str.c_str(), wxBITMAP_TYPE_ANY));
+ if (boinc_file_exists(str.c_str())) {
+ m_bitmapApplicationLogo = wxBitmap(wxImage(str.c_str(), wxBITMAP_TYPE_ANY));
+ }
}
continue;
} else if (parse_str(buf, "<organization_name>", strBuffer)) {
diff --git a/clientgui/SkinManager.h b/clientgui/SkinManager.h
index 221496a..232f884 100644
--- a/clientgui/SkinManager.h
+++ b/clientgui/SkinManager.h
@@ -109,7 +109,6 @@ private:
wxString m_strDesiredTransparencyMask32;
wxIconBundle m_icoDefaultIcon32;
wxIconBundle m_icoIcon;
- bool bInitialized;
};
@@ -187,6 +186,7 @@ private:
wxString m_strApplicationName;
wxString m_strApplicationShortName;
CSkinIcon m_iconApplicationIcon;
+ CSkinIcon m_iconApplicationIcon32;
CSkinIcon m_iconApplicationDisconnectedIcon;
CSkinIcon m_iconApplicationSnoozeIcon;
wxBitmap m_bitmapApplicationLogo;
diff --git a/clientgui/TermsOfUsePage.cpp b/clientgui/TermsOfUsePage.cpp
index 962d596..9700808 100644
--- a/clientgui/TermsOfUsePage.cpp
+++ b/clientgui/TermsOfUsePage.cpp
@@ -234,7 +234,7 @@ void CTermsOfUsePage::OnPageChanged( wxWizardExEvent& event ) {
m_pDisagreeCtrl->SetLabel(
- _("I do not agree with the terms of use.")
+ _("I do not agree to the terms of use.")
);
m_pDisagreeCtrl->SetValue(true);
diff --git a/clientgui/ValidateURL.cpp b/clientgui/ValidateURL.cpp
index e7232e2..05a758e 100644
--- a/clientgui/ValidateURL.cpp
+++ b/clientgui/ValidateURL.cpp
@@ -76,7 +76,7 @@ bool CValidateURL::Validate(wxWindow *parent) {
wxString strServer(uri.GetServer());
int iServerDotLocation = strServer.Find(wxT("."));
int iFirstPart = (int)strServer.Mid(0, iServerDotLocation).Length();
- int iSecondPart = (int)strServer.Mid(iServerDotLocation + 1, wxSTRING_MAXLEN).Length();
+ int iSecondPart = (int)strServer.Mid(iServerDotLocation + 1).Length();
if (-1 == iServerDotLocation) {
ok = FALSE;
diff --git a/clientgui/ViewMessages.cpp b/clientgui/ViewMessages.cpp
index 41d397e..cb07fdf 100644
--- a/clientgui/ViewMessages.cpp
+++ b/clientgui/ViewMessages.cpp
@@ -614,4 +614,4 @@ bool CViewMessages::CloseClipboard() {
#endif
-const char *BOINC_RCSID_0be7149475 = "$Id$";
+const char *BOINC_RCSID_0be7149475 = "$Id: ViewMessages.cpp 21706 2010-06-08 18:56:53Z davea $";
diff --git a/clientgui/ViewNotices.cpp b/clientgui/ViewNotices.cpp
index cb80f39..349cf69 100644
--- a/clientgui/ViewNotices.cpp
+++ b/clientgui/ViewNotices.cpp
@@ -27,7 +27,6 @@
#include "BOINCTaskCtrl.h"
#include "ViewNotices.h"
#include "NoticeListCtrl.h"
-#include "BOINCInternetFSHandler.h"
#include "Events.h"
#include "error_numbers.h"
@@ -37,11 +36,6 @@
IMPLEMENT_DYNAMIC_CLASS(CViewNotices, CBOINCBaseView)
-BEGIN_EVENT_TABLE (CViewNotices, CBOINCBaseView)
- EVT_NOTICELIST_ITEM_DISPLAY(CViewNotices::OnLinkClicked)
- EVT_BUTTON( ID_LIST_RELOADNOTICES, CViewNotices::OnRetryButton )
-END_EVENT_TABLE ()
-
CViewNotices::CViewNotices()
{}
@@ -53,31 +47,25 @@ CViewNotices::CViewNotices(wxNotebook* pNotebook) :
//
// Setup View
//
- wxFlexGridSizer* itemReloadButtonSizer = new wxFlexGridSizer(1, 2, 0, 0);
- itemReloadButtonSizer->AddGrowableCol(1);
-
- m_ReloadNoticesText = new wxStaticText(this, wxID_ANY,
- _("One or more items failed to load from the Internet."),
- wxDefaultPosition, wxDefaultSize, 0
- );
-
- itemReloadButtonSizer->Add(m_ReloadNoticesText, 1, wxALL, 5);
-
- m_ReloadNoticesButton = new wxButton(
- this, ID_LIST_RELOADNOTICES,
- _("Retry now"),
- wxDefaultPosition, wxDefaultSize, 0
- );
-
- itemReloadButtonSizer->Add(m_ReloadNoticesButton, 1, wxALL, 5);
-
- wxFlexGridSizer* itemFlexGridSizer = new wxFlexGridSizer(2, 1, 1, 0);
+ wxFlexGridSizer* itemFlexGridSizer = new wxFlexGridSizer(3, 1, 1, 0);
wxASSERT(itemFlexGridSizer);
- itemFlexGridSizer->AddGrowableRow(1);
+ itemFlexGridSizer->AddGrowableRow(2);
itemFlexGridSizer->AddGrowableCol(0);
- itemFlexGridSizer->Add(itemReloadButtonSizer, 1, wxGROW|wxALL, 1);
+ m_FetchingNoticesText = new wxStaticText(
+ this, wxID_ANY,
+ _("Fetching notices; please wait..."),
+ wxPoint(20, 20), wxDefaultSize, 0
+ );
+ itemFlexGridSizer->Add(m_FetchingNoticesText, 0, wxALL, 1);
+
+ m_NoNoticesText = new wxStaticText(
+ this, wxID_ANY,
+ _("There are no notices at this time."),
+ wxPoint(20, 20), wxDefaultSize, 0
+ );
+ itemFlexGridSizer->Add(m_NoNoticesText, 0, wxALL, 1);
m_pHtmlListPane = new CNoticeListCtrl(this);
wxASSERT(m_pHtmlListPane);
@@ -86,23 +74,14 @@ CViewNotices::CViewNotices(wxNotebook* pNotebook) :
SetSizer(itemFlexGridSizer);
- m_FetchingNoticesText = new wxStaticText(
- this, wxID_ANY,
- _("Fetching notices; please wait..."),
- wxPoint(20, 20), wxDefaultSize, 0
- );
- m_NoNoticesText = new wxStaticText(
- this, wxID_ANY,
- _("There are no notices at this time."),
- wxPoint(20, 20), wxDefaultSize, 0
- );
m_FetchingNoticesText->Hide();
+ m_bFetchingNoticesTextWasDisplayed = false;
+
m_NoNoticesText->Hide();
- m_ReloadNoticesText->Hide();
- m_ReloadNoticesButton->Hide();
-
- m_bMissingItems = false;
+ m_bNoNoticesTextWasDisplayed = false;
+
+ Layout();
}
@@ -152,15 +131,12 @@ void CViewNotices::OnListRender(wxTimerEvent& WXUNUSED(event)) {
static bool s_bInProgress = false;
static wxString strLastMachineName = wxEmptyString;
wxString strNewMachineName = wxEmptyString;
- bool bMissingItems;
CC_STATUS status;
CMainDocument* pDoc = wxGetApp().GetDocument();
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
wxASSERT(pDoc);
wxASSERT(m_pHtmlListPane);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
- wxASSERT(internetFSHandler);
if (s_bInProgress) return;
s_bInProgress = true;
@@ -171,14 +147,12 @@ void CViewNotices::OnListRender(wxTimerEvent& WXUNUSED(event)) {
strLastMachineName = strNewMachineName;
m_FetchingNoticesText->Show();
m_NoNoticesText->Hide();
- ((CBOINCInternetFSHandler*)internetFSHandler)->ClearCache();
m_pHtmlListPane->Clear();
- if (m_bMissingItems) {
- m_ReloadNoticesText->Hide();
- m_ReloadNoticesButton->Hide();
- m_bMissingItems = false;
+ if (m_bNoNoticesTextWasDisplayed || !m_bFetchingNoticesTextWasDisplayed) {
Layout();
}
+ m_bFetchingNoticesTextWasDisplayed = true;
+ m_bNoNoticesTextWasDisplayed = false;
}
} else {
m_pHtmlListPane->Clear();
@@ -186,47 +160,21 @@ void CViewNotices::OnListRender(wxTimerEvent& WXUNUSED(event)) {
// Don't call Freeze() / Thaw() here because it causes an unnecessary redraw
m_pHtmlListPane->UpdateUI();
-
- bMissingItems = ((CBOINCInternetFSHandler*)internetFSHandler)->ItemsFailedToLoad();
- if (bMissingItems != m_bMissingItems) {
- m_ReloadNoticesText->Show(bMissingItems);
- m_ReloadNoticesButton->Show(bMissingItems);
+
+ if (m_bFetchingNoticesTextWasDisplayed != m_pHtmlListPane->m_bDisplayFetchingNotices) {
+ m_bFetchingNoticesTextWasDisplayed = m_pHtmlListPane->m_bDisplayFetchingNotices;
+ m_FetchingNoticesText->Show(m_bFetchingNoticesTextWasDisplayed);
Layout();
- m_bMissingItems = bMissingItems;
}
-
- m_FetchingNoticesText->Show(m_pHtmlListPane->m_bDisplayFetchingNotices);
- m_NoNoticesText->Show(m_pHtmlListPane->m_bDisplayEmptyNotice);
+ if (m_bNoNoticesTextWasDisplayed != m_pHtmlListPane->m_bDisplayEmptyNotice) {
+ m_bNoNoticesTextWasDisplayed = m_pHtmlListPane->m_bDisplayEmptyNotice;
+ m_NoNoticesText->Show(m_bNoNoticesTextWasDisplayed);
+ Layout();
+ }
+
pDoc->UpdateUnreadNoticeState();
s_bInProgress = false;
wxLogTrace(wxT("Function Start/End"), wxT("CViewNotices::OnListRender - Function End"));
}
-
-
-void CViewNotices::OnLinkClicked( NoticeListCtrlEvent& event ) {
- if (event.GetURL().StartsWith(wxT("http://")) || event.GetURL().StartsWith(wxT("https://"))) {
- wxLaunchDefaultBrowser(event.GetURL());
- }
-}
-
-
-void CViewNotices::OnRetryButton( wxCommandEvent& ) {
- m_ReloadNoticesText->Hide();
- m_ReloadNoticesButton->Hide();
- m_bMissingItems = false;
- Layout();
- ReloadNotices();
-}
-
-
-void CViewNotices::ReloadNotices() {
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
- if (internetFSHandler) {
- ((CBOINCInternetFSHandler*)internetFSHandler)->UnchacheMissingItems();
- m_pHtmlListPane->Clear();
- m_FetchingNoticesText->Show();
- m_NoNoticesText->Hide();
- }
-}
diff --git a/clientgui/ViewNotices.h b/clientgui/ViewNotices.h
index f88d255..69a87dc 100644
--- a/clientgui/ViewNotices.h
+++ b/clientgui/ViewNotices.h
@@ -27,7 +27,6 @@
class CNoticeListCtrl;
-class NoticeListCtrlEvent;
class CViewNotices : public CBOINCBaseView {
@@ -44,25 +43,19 @@ public:
virtual const char** GetViewIcon();
virtual int GetViewRefreshRate();
virtual int GetViewCurrentViewPage();
- void ReloadNotices();
protected:
- wxStaticText* m_ReloadNoticesText;
- wxButton* m_ReloadNoticesButton;
CNoticeListCtrl* m_pHtmlListPane;
wxStaticText* m_FetchingNoticesText;
wxStaticText* m_NoNoticesText;
- bool m_bMissingItems;
+ bool m_bFetchingNoticesTextWasDisplayed;
+ bool m_bNoNoticesTextWasDisplayed;
virtual bool OnSaveState( wxConfigBase* pConfig );
virtual bool OnRestoreState( wxConfigBase* pConfig );
virtual void OnListRender( wxTimerEvent& event );
- void OnLinkClicked( NoticeListCtrlEvent& event );
void OnRetryButton( wxCommandEvent& event );
-
-
- DECLARE_EVENT_TABLE()
};
diff --git a/clientgui/ViewProjects.cpp b/clientgui/ViewProjects.cpp
index 91909fe..f39d178 100644
--- a/clientgui/ViewProjects.cpp
+++ b/clientgui/ViewProjects.cpp
@@ -155,7 +155,7 @@ CViewProjects::CViewProjects()
CViewProjects::CViewProjects(wxNotebook* pNotebook) :
- CBOINCBaseView(pNotebook, ID_TASK_PROJECTSVIEW, DEFAULT_TASK_FLAGS, ID_LIST_PROJECTSVIEW, DEFAULT_LIST_MULTI_SEL_FLAGS)
+ CBOINCBaseView(pNotebook, ID_TASK_PROJECTSVIEW, DEFAULT_TASK_FLAGS, ID_LIST_PROJECTSVIEW, DEFAULT_LIST_FLAGS)
{
CTaskItemGroup* pGroup = NULL;
CTaskItem* pItem = NULL;
diff --git a/clientgui/ViewStatistics.cpp b/clientgui/ViewStatistics.cpp
index 8dcdfa6..5990771 100644
--- a/clientgui/ViewStatistics.cpp
+++ b/clientgui/ViewStatistics.cpp
@@ -199,12 +199,20 @@ CPaintStatistics::CPaintStatistics(wxWindow* parent, wxWindowID id, const wxPoin
m_dc_bmp.Create(1, 1);
m_full_repaint = true;
m_bmp_OK = false;
+
+#ifdef __WXMAC__
+ m_fauxStatisticsView = NULL;
+ SetupMacAccessibilitySupport();
+#endif
}
CPaintStatistics::~CPaintStatistics() {
if (m_scrollBar) {
delete m_scrollBar;
}
+#ifdef __WXMAC__
+ RemoveMacAccessibilitySupport();
+#endif
}
@@ -813,12 +821,12 @@ void CPaintStatistics::DrawAxis(wxDC &dc, const double max_val_y, const double m
dc.DestroyClippingRegion();
}
//----Draw graph----
-void CPaintStatistics::DrawGraph(wxDC &dc, std::vector<PROJECT*>::const_iterator &i, const wxColour graphColour, const int typePoint, const int m_SelectedStatistic) {
+void CPaintStatistics::DrawGraph(wxDC &dc, std::vector<PROJECT*>::const_iterator &i, const wxColour graphColour, const int typePoint, const int selectedStatistic) {
std::vector<DAILY_STATS> stats = (*i)->statistics;
- DrawGraph2(dc, stats, graphColour, typePoint, m_SelectedStatistic);
+ DrawGraph2(dc, stats, graphColour, typePoint, selectedStatistic);
}
-void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, const wxColour graphColour, const int typePoint, const int m_SelectedStatistic) {
+void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, const wxColour graphColour, const int typePoint, const int selectedStatistic) {
wxCoord x0 = wxCoord(m_Graph_X_start);
wxCoord y0 = wxCoord(m_Graph_Y_start);
wxCoord w0 = wxCoord(m_Graph_X_end - m_Graph_X_start);
@@ -869,8 +877,8 @@ void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, cons
b_point1 = false;
b_point2 = false;
- d_xpos = (m_Ax_ValToCoord * j->day + m_Bx_ValToCoord);// �������� ����������
- switch (m_SelectedStatistic){ // �������� ����������
+ d_xpos = (m_Ax_ValToCoord * j->day + m_Bx_ValToCoord);// äîáàâèòü îêðóãëåíèå
+ switch (selectedStatistic){ // äîáàâèòü îêðóãëåíèå
case show_user_total: d_ypos = (m_Ay_ValToCoord * j->user_total_credit + m_By_ValToCoord); break;
case show_user_average: d_ypos = (m_Ay_ValToCoord * j->user_expavg_credit + m_By_ValToCoord); break;
case show_host_total: d_ypos = (m_Ay_ValToCoord * j->host_total_credit + m_By_ValToCoord); break;
@@ -896,13 +904,13 @@ void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, cons
first_point = false;
}else {
dc.SetPen(wxPen(graphColour , m_GraphLineWidth , wxSOLID));
- // �������� ��������� ������ ����� ����� � ������� ���������
+ // ïðîâåðêà ïîïàäàíèÿ ïåðâîé òî÷êè ëèíèè â îáëàñòü ðèñîâàíèÿ
if (last_point_in){
d_x1 = d_last_x;
d_y1 = d_last_y;
b_point1 = true;
}else b_point1 = false;
- // �������� ��������� ������ ����� ����� � ������� ���������
+ // ïðîâåðêà ïîïàäàíèÿ âòîðîé òî÷êè ëèíèè â îáëàñòü ðèñîâàíèÿ
if ((d_xpos < m_Graph_X_start) || (d_xpos > m_Graph_X_end) ||
(d_ypos < m_Graph_Y_start) || (d_ypos > m_Graph_Y_end)){
point_in = false;
@@ -913,7 +921,7 @@ void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, cons
d_y2 = d_ypos;
b_point2 = true;
}
- // ���� ����� ����� ����� � ������� ��������� (1) x=const
+ // Èùåì òî÷êó âõîäà ëèíèè â îáëàñòü ðèñîâàíèÿ (1) x=const
if (!b_point1 || !b_point2){
if (CrossTwoLine(d_last_x, d_last_y, d_xpos, d_ypos,
m_Graph_X_start, m_Graph_Y_end, m_Graph_X_start, m_Graph_Y_start,
@@ -946,7 +954,7 @@ void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, cons
}
}
}
- // ���� ����� ����� ����� � ������� ��������� (2) x=const
+ // Èùåì òî÷êó âõîäà ëèíèè â îáëàñòü ðèñîâàíèÿ (2) x=const
if (!b_point1 || !b_point2){
if (CrossTwoLine(d_last_x, d_last_y, d_xpos, d_ypos,
m_Graph_X_end, m_Graph_Y_end, m_Graph_X_end, m_Graph_Y_start,
@@ -979,7 +987,7 @@ void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, cons
}
}
}
- // ���� ����� ����� ����� � ������� ��������� (3) y=const
+ // Èùåì òî÷êó âõîäà ëèíèè â îáëàñòü ðèñîâàíèÿ (3) y=const
if (!b_point1 || !b_point2){
if (CrossTwoLine(d_last_x, d_last_y, d_xpos, d_ypos,
m_Graph_X_start, m_Graph_Y_start, m_Graph_X_end, m_Graph_Y_start,
@@ -1012,7 +1020,7 @@ void CPaintStatistics::DrawGraph2(wxDC &dc, std::vector<DAILY_STATS> stats, cons
}
}
}
- // ���� ����� ����� ����� � ������� ��������� (4) y=const
+ // Èùåì òî÷êó âõîäà ëèíèè â îáëàñòü ðèñîâàíèÿ (4) y=const
if (!b_point1 || !b_point2){
if (CrossTwoLine(d_last_x, d_last_y, d_xpos, d_ypos,
m_Graph_X_start, m_Graph_Y_end, m_Graph_X_end, m_Graph_Y_end,
@@ -1154,9 +1162,11 @@ void CPaintStatistics::DrawAll(wxDC &dc) {
dc.SetTextForeground (m_pen_HeadTextColour);
dc.SetTextBackground (GetBackgroundColour ());
- m_font_standart = dc.GetFont();
- m_font_bold = dc.GetFont();
- m_font_standart_italic = dc.GetFont();
+ // The next 3 lines seem unnecessary and cause problems
+ // when monitor dpi is set to 125% of normal on MS Windows.
+// m_font_standart = dc.GetFont();
+// m_font_bold = dc.GetFont();
+// m_font_standart_italic = dc.GetFont();
m_font_standart.SetWeight(wxNORMAL);
m_font_bold.SetWeight(wxBOLD);
@@ -1910,6 +1920,9 @@ void CPaintStatistics::OnLegendScroll(wxScrollEvent& event) {
void CPaintStatistics::OnSize(wxSizeEvent& event) {
m_full_repaint = true;
Refresh(false);
+#ifdef __WXMAC__
+ ResizeMacAccessibilitySupport();
+#endif
event.Skip();
}
@@ -2051,17 +2064,10 @@ CViewStatistics::CViewStatistics(wxNotebook* pNotebook) :
m_pTaskPane->UpdateControls();
UpdateSelection();
-
-#ifdef __WXMAC__
- SetupMacAccessibilitySupport();
-#endif
}
CViewStatistics::~CViewStatistics() {
EmptyTasks();
-#ifdef __WXMAC__
- RemoveMacAccessibilitySupport();
-#endif
}
wxString& CViewStatistics::GetViewName() {
diff --git a/clientgui/ViewStatistics.h b/clientgui/ViewStatistics.h
index 5823920..c88a954 100644
--- a/clientgui/ViewStatistics.h
+++ b/clientgui/ViewStatistics.h
@@ -207,6 +207,14 @@ protected:
void OnMouseLeaveWindows(wxMouseEvent& event);
void OnLegendScroll(wxScrollEvent& event);
+#ifdef __WXMAC__
+ void SetupMacAccessibilitySupport();
+ void ResizeMacAccessibilitySupport();
+ void RemoveMacAccessibilitySupport();
+
+ void* m_fauxStatisticsView;
+#endif
+
DECLARE_EVENT_TABLE()
};
@@ -244,13 +252,6 @@ protected:
CPaintStatistics* m_PaintStatistics;
-#ifdef __WXMAC__
- void SetupMacAccessibilitySupport();
- void RemoveMacAccessibilitySupport();
-
- EventHandlerRef m_pStatisticsAccessibilityEventHandlerRef;
-#endif
-
virtual bool OnSaveState( wxConfigBase* pConfig );
virtual bool OnRestoreState( wxConfigBase* pConfig );
diff --git a/clientgui/ViewTransfers.cpp b/clientgui/ViewTransfers.cpp
index a14431b..16c4ac2 100644
--- a/clientgui/ViewTransfers.cpp
+++ b/clientgui/ViewTransfers.cpp
@@ -145,7 +145,7 @@ CViewTransfers::CViewTransfers()
CViewTransfers::CViewTransfers(wxNotebook* pNotebook) :
- CBOINCBaseView(pNotebook, ID_TASK_TRANSFERSVIEW, DEFAULT_TASK_FLAGS, ID_LIST_TRANSFERSVIEW, DEFAULT_LIST_MULTI_SEL_FLAGS)
+ CBOINCBaseView(pNotebook, ID_TASK_TRANSFERSVIEW, DEFAULT_TASK_FLAGS, ID_LIST_TRANSFERSVIEW, DEFAULT_LIST_FLAGS)
{
CTaskItemGroup* pGroup = NULL;
CTaskItem* pItem = NULL;
diff --git a/clientgui/ViewWork.cpp b/clientgui/ViewWork.cpp
index 102f9ab..0bd32c4 100644
--- a/clientgui/ViewWork.cpp
+++ b/clientgui/ViewWork.cpp
@@ -169,7 +169,7 @@ CViewWork::CViewWork()
CViewWork::CViewWork(wxNotebook* pNotebook) :
- CBOINCBaseView(pNotebook, ID_TASK_WORKVIEW, DEFAULT_TASK_FLAGS, ID_LIST_WORKVIEW, DEFAULT_LIST_MULTI_SEL_FLAGS)
+ CBOINCBaseView(pNotebook, ID_TASK_WORKVIEW, DEFAULT_TASK_FLAGS, ID_LIST_WORKVIEW, DEFAULT_LIST_FLAGS)
{
CTaskItemGroup* pGroup = NULL;
CTaskItem* pItem = NULL;
@@ -857,10 +857,14 @@ void CViewWork::UpdateSelection() {
pGroup->m_Tasks[BTN_GRAPHICS]->m_pButton->Enable(enableShowGraphics);
if (enableShowVMConsole) {
pGroup->m_Tasks[BTN_VMCONSOLE]->m_pButton->Enable();
- pGroup->m_Tasks[BTN_VMCONSOLE]->m_pButton->Show();
+ if (pGroup->m_Tasks[BTN_VMCONSOLE]->m_pButton->Show()) {
+ m_pTaskPane->FitInside();
+ }
} else {
pGroup->m_Tasks[BTN_VMCONSOLE]->m_pButton->Disable();
- pGroup->m_Tasks[BTN_VMCONSOLE]->m_pButton->Hide();
+ if (pGroup->m_Tasks[BTN_VMCONSOLE]->m_pButton->Hide()) {
+ m_pTaskPane->FitInside();
+ };
}
pGroup->m_Tasks[BTN_SUSPEND]->m_pButton->Enable(enableSuspendResume);
pGroup->m_Tasks[BTN_ABORT]->m_pButton->Enable(enableAbort);
@@ -1163,10 +1167,18 @@ void CViewWork::GetDocReportDeadline(wxInt32 item, time_t& time) const {
wxInt32 CViewWork::FormatReportDeadline(time_t deadline, wxString& strBuffer) const {
+#ifdef __WXMAC__
+ // Work around a wxCocoa bug(?) in wxDateTime::Format()
+ char buf[80];
+ struct tm * timeinfo = localtime(&deadline);
+ strftime(buf, sizeof(buf), "%c", timeinfo);
+ strBuffer = buf;
+#else
wxDateTime dtTemp;
dtTemp.Set(deadline);
strBuffer = dtTemp.Format();
+#endif
return 0;
}
diff --git a/clientgui/WelcomePage.cpp b/clientgui/WelcomePage.cpp
index 47bf1b4..87e31d0 100644
--- a/clientgui/WelcomePage.cpp
+++ b/clientgui/WelcomePage.cpp
@@ -147,8 +147,8 @@ void CWelcomePage::CreateControls()
itemBoxSizer3->Add(5, 5, 0, wxALIGN_LEFT|wxALL, 5);
- wxFlexGridSizer* itemFlexGridSizer62 = new wxFlexGridSizer(2, 1, 0, 0);
- itemFlexGridSizer62->AddGrowableCol(1);
+ wxFlexGridSizer* itemFlexGridSizer62 = new wxFlexGridSizer(0, 1, 0, 0);
+ itemFlexGridSizer62->AddGrowableCol(0);
itemBoxSizer3->Add(itemFlexGridSizer62, 0, wxGROW|wxALL, 5);
m_pChangeApplicationsCtrl = new wxRadioButton;
diff --git a/clientgui/WizardAttach.cpp b/clientgui/WizardAttach.cpp
index ccdfef2..7beaa8a 100644
--- a/clientgui/WizardAttach.cpp
+++ b/clientgui/WizardAttach.cpp
@@ -34,7 +34,6 @@
#include "MainDocument.h"
#include "BOINCBaseWizard.h"
#include "BOINCBaseFrame.h"
-#include "ProjectListCtrl.h"
#include "WizardAttach.h"
#include "WelcomePage.h"
#include "ProjectInfoPage.h"
@@ -402,6 +401,7 @@ bool CWizardAttach::SyncToAccountManager() {
pDoc->rpc.acct_mgr_info(ami);
if (ami.acct_mgr_url.size()) {
+ m_strProjectName = wxString(ami.acct_mgr_name.c_str(), wxConvUTF8);
m_AccountManagerInfoPage->SetProjectURL(
wxString(ami.acct_mgr_url.c_str(), wxConvUTF8)
);
@@ -624,12 +624,14 @@ wxWizardPageEx* CWizardAttach::_PushPageTransition( wxWizardPageEx* pCurrentPage
}
return NULL;
}
-
+
void CWizardAttach::_ProcessCancelEvent( wxWizardExEvent& event ) {
bool bCancelWithoutNextPage = false;
wxWizardPageEx* page = GetCurrentPage();
+ m_bCancelInProgress = true;
+
int iRetVal = wxGetApp().SafeMessageBox(
_("Do you really want to cancel?"),
_("Question"),
@@ -641,28 +643,6 @@ void CWizardAttach::_ProcessCancelEvent( wxWizardExEvent& event ) {
GetNextButton()->Enable();
GetBackButton()->Enable();
- // Page specific rules - Disable the validator(s)
- if (wxYES == iRetVal) {
- if ((page == m_ProjectInfoPage) || (page == m_AccountManagerInfoPage)) {
- m_ProjectInfoPage->m_pProjectURLCtrl->SetValidator(wxDefaultValidator);
- } else if (page == m_AccountInfoPage) {
- m_AccountInfoPage->m_pAccountEmailAddressCtrl->SetValidator(wxDefaultValidator);
- m_AccountInfoPage->m_pAccountPasswordCtrl->SetValidator(wxDefaultValidator);
- if (IsAttachToProjectWizard) {
- m_AccountInfoPage->m_pAccountConfirmPasswordCtrl->SetValidator(wxDefaultValidator);
- }
- } else if (page == m_ErrProxyPage) {
- m_ErrProxyPage->m_pProxyHTTPServerCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxyHTTPPortCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxyHTTPUsernameCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxyHTTPPasswordCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxySOCKSServerCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxySOCKSPortCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxySOCKSUsernameCtrl->SetValidator(wxDefaultValidator);
- m_ErrProxyPage->m_pProxySOCKSPasswordCtrl->SetValidator(wxDefaultValidator);
- }
- }
-
// Generic rules
bCancelWithoutNextPage |= (page == m_ErrNotDetectedPage);
bCancelWithoutNextPage |= (page == m_ErrUnavailablePage);
@@ -673,8 +653,12 @@ void CWizardAttach::_ProcessCancelEvent( wxWizardExEvent& event ) {
} else {
bCancelWithoutNextPage |= (page == m_WelcomePage);
}
+
if (wxYES != iRetVal) {
event.Veto();
+ m_bCancelInProgress = false;
+ } else {
+ m_bCancelInProgress = true;
}
}
diff --git a/clientgui/WizardAttach.h b/clientgui/WizardAttach.h
index ee92e0f..ba0f07a 100644
--- a/clientgui/WizardAttach.h
+++ b/clientgui/WizardAttach.h
@@ -81,6 +81,7 @@
#define ID_PROJECTLISTCTRL 11203
#define ID_PROJECTURLSTATICCTRL 11204
#define ID_PROJECTURLCTRL 11205
+#define ID_PROJECTWEBPAGECTRL 11206
// Terms Of Use Controls
#define ID_TERMSOFUSECTRL 11300
diff --git a/clientgui/browser.cpp b/clientgui/browser.cpp
index b5b6c24..4ee63a8 100644
--- a/clientgui/browser.cpp
+++ b/clientgui/browser.cpp
@@ -22,6 +22,20 @@
#ifdef _WIN32
#include "win_util.h"
+
+#ifndef InternetGetCookie
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+BOOL WINAPI InternetGetCookieA( LPCSTR lpszUrl, LPCSTR lpszCookieName, LPSTR lpszCookieData, LPDWORD lpdwSize );
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
#else
#include <string>
#include <vector>
@@ -733,11 +747,7 @@ static int find_site_cookie_chrome(
&expires
);
sscanf( argv[4],
-#ifdef _WIN32
- "%I64d",
-#else
"%ld",
-#endif
&httponly
);
diff --git a/clientgui/build_po b/clientgui/build_po
index a7d213b..5fecff5 100755
--- a/clientgui/build_po
+++ b/clientgui/build_po
@@ -1,4 +1,3 @@
#! /bin/sh
-xgettext --keyword=_ -C -o ../locale/templates/BOINC-Manager.pot *.cpp msw/*.cpp mac/*.cpp gtk/*.cpp
-
\ No newline at end of file
+xgettext --from-code=UTF-8 --keyword=_ -C -o BOINC-Manager.pot *.cpp msw/*.cpp mac/*.cpp gtk/*.cpp
diff --git a/clientgui/common/wxFNBDropTarget.h b/clientgui/common/wxFNBDropTarget.h
deleted file mode 100644
index 8555b27..0000000
--- a/clientgui/common/wxFNBDropTarget.h
+++ /dev/null
@@ -1,86 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// Name: wxFlatNotebook.cpp
-// Purpose: generic implementation of flat style notebook class.
-// Author: Eran Ifrah <eranif at bezeqint.net>
-// Modified by: Priyank Bolia <soft at priyank.in>
-// Created: 30/12/2005
-// Modified: 01/01/2006
-// Copyright: Eran Ifrah (c)
-// Licence: wxWindows license <http://www.wxwidgets.org/licence3.txt>
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WX_FNB_DROP_TARGET_H
-#define _WX_FNB_DROP_TARGET_H
-
-/**
-\brief Contains the information about dragged page (page index and container).
-*/
-class wxFNBDragInfo
-{
- wxWindow * m_Container;
- int m_PageIndex;
-public:
- /**
- Constructor
- \param container - pointer to wxPageContainer object which contains dragged page
- \param pageindex - index of dragged page
- */
- wxFNBDragInfo(wxWindow * container, int pageindex) : m_Container(container), m_PageIndex(pageindex){}
- /**
- Returns wxPageContainer object which contains dragged page
- */
- wxWindow * GetContainer() {return m_Container;}
- /**
- Returns the index of dragged page
- */
- int GetPageIndex() {return m_PageIndex;}
-};
-
-/**
-\brief Used for processing drag-n-drop opeartions
-*/
-template <class T>
-class wxFNBDropTarget : public wxDropTarget
-{
-private:
- typedef wxDragResult (T::*pt2Func)(wxCoord, wxCoord, int, wxWindow *);
- T* m_pParent;
- pt2Func m_pt2CallbackFunc;
- wxCustomDataObject * m_DataObject;
-public:
- /**
- \brief Constructor
- \param pParent - Object that will handle drag-n-drop operation
- \param pt2CallbackFunc - Pointer to callback method which should be called after dragging the notebook page
- */
- wxFNBDropTarget(T* pParent, pt2Func pt2CallbackFunc)
- : m_pParent(pParent)
- , m_pt2CallbackFunc(pt2CallbackFunc)
- , m_DataObject(NULL)
- {
- m_DataObject = new wxCustomDataObject(wxDataFormat(wxT("wxFNB")));
- SetDataObject(m_DataObject);
- }
- /**
- \brief Virtual Destructor
- */
- virtual ~wxFNBDropTarget(void) {}
- /**
- \brief Used for processing drop operation
- \param x - X-coordinate
- \param y - Y-coordinate
- \param def - Result of drag-n-drop operation
- */
- virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult /*def*/)
- {
- GetData();
- wxFNBDragInfo * draginfo = (wxFNBDragInfo *)m_DataObject->GetData();
- if(!draginfo)
- {
- return wxDragNone;
- }
- return (m_pParent->*m_pt2CallbackFunc)(x, y, draginfo->GetPageIndex(), (T *)draginfo->GetContainer());
- }
-};
-
-#endif
diff --git a/clientgui/common/wxFlatNotebook.cpp b/clientgui/common/wxFlatNotebook.cpp
deleted file mode 100644
index e98cf95..0000000
--- a/clientgui/common/wxFlatNotebook.cpp
+++ /dev/null
@@ -1,2295 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// Name: wxFlatNotebook.cpp
-// Purpose: generic implementation of flat style notebook class.
-// Author: Eran Ifrah <eranif at bezeqint.net>
-// Modified by: Priyank Bolia <soft at priyank.in>
-// Created: 30/12/2005
-// Modified: 01/01/2006
-// Copyright: Eran Ifrah (c)
-// Licence: wxWindows license <http://www.wxwidgets.org/licence3.txt>
-///////////////////////////////////////////////////////////////////////////////
-
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "common/wxFlatNotebook.h"
-#endif
-
-#include "stdwx.h"
-#include "common/wxFlatNotebook.h"
-#include "common/wxFlatNotebookImages.h"
-
-
-IMPLEMENT_DYNAMIC_CLASS(wxFlatNotebookEvent, wxNotifyEvent)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGED)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGING)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSING)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_FLATNOTEBOOK_CONTEXT_MENU)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSED)
-
-IMPLEMENT_DYNAMIC_CLASS(wxFlatNotebookBase, wxPanel)
-
-BEGIN_EVENT_TABLE(wxFlatNotebookBase, wxPanel)
-EVT_NAVIGATION_KEY(wxFlatNotebookBase::OnNavigationKey)
-END_EVENT_TABLE()
-
-wxFlatNotebookBase::wxFlatNotebookBase(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name)
-{
- m_bForceSelection = false;
- m_nPadding = 6;
- m_nFrom = 0;
- style |= wxTAB_TRAVERSAL;
- m_pages = NULL;
- wxPanel::Create(parent, id, pos, size, style, name);
-
- m_pages = new wxPageContainerBase(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style);
-
-}
-
-wxFlatNotebookBase::~wxFlatNotebookBase(void)
-{
-}
-
-void wxFlatNotebookBase::Init()
-{
- long style = GetWindowStyleFlag();
- m_pages->m_colorBorder = style & wxFNB_FANCY_TABS ? m_pages->m_colorTo : wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
-
- m_mainSizer = new wxBoxSizer(wxVERTICAL);
- SetSizer(m_mainSizer);
-
- SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
-
- // Add the tab container to the sizer
- m_mainSizer->Insert(0, m_pages, 0, wxEXPAND);
-
- // Set default page height
- wxClientDC dc(this);
- int width, height;
- wxString stam = wxT("Tp"); // Temp data to get the text height;
- dc.GetTextExtent(stam, &width, &height);
-
- int tabHeight = height + 8; // We use 8 pixels as padding
- m_pages->SetSizeHints(wxSize(-1, tabHeight));
-
- m_pages->m_nFrom = m_nFrom;
- m_pDropTarget = new wxFNBDropTarget<wxFlatNotebookBase>(this, &wxFlatNotebookBase::OnDropTarget);
- SetDropTarget(m_pDropTarget);
-}
-
-wxPageContainerBase* wxFlatNotebookBase::CreatePageContainer()
-{
- return new wxPageContainerBase(this, wxID_ANY);
-}
-
-void wxFlatNotebookBase::SetActiveTabTextColour(const wxColour& textColour)
-{
- m_pages->m_activeTextColor = textColour;
-}
-void wxFlatNotebookBase::SetTabBorderWidth(int brWidth)
-{
- m_pages->m_tabBorderWidth = brWidth;
-}
-
-wxDragResult wxFlatNotebookBase::OnDropTarget(wxCoord x, wxCoord y, int nTabPage, wxWindow * wnd_oldContainer)
-{
- return m_pages->OnDropTarget(x, y, nTabPage, wnd_oldContainer);
-}
-
-void wxFlatNotebookBase::AddPage(wxWindow* window, const wxString& caption, const bool selected, const int imgindex)
-{
- // sanity check
- if (!window)
- return;
-
- // reparent the window to us
- window->Reparent(this);
-
- // Add tab
- bool bSelected = selected || m_windows.empty();
- int curSel = m_pages->GetSelection();
-
- if( !m_pages->IsShown() )
- m_pages->Show();
-
- m_pages->AddPage(caption, bSelected, imgindex);
- m_windows.push_back(window);
-
- Freeze();
-
- // Check if a new selection was made
- if(bSelected)
- {
- if(curSel >= 0)
- {
- // Remove the window from the main sizer
- m_mainSizer->Detach(m_windows[curSel]);
- m_windows[curSel]->Hide();
- }
- if(m_windowStyle & wxFNB_BOTTOM)
- {
- m_mainSizer->Insert(0, window, 1, wxEXPAND);
- }
- else
- {
- // We leave a space of 1 pixel around the window
- m_mainSizer->Add(window, 1, wxEXPAND);
- }
- }
- else
- {
- // Hide the page
- window->Hide();
- }
- m_mainSizer->Layout();
- Thaw();
- Refresh();
-
-}
-
-void wxFlatNotebookBase::SetImageList(wxFlatNotebookImageList * imglist)
-{
- m_pages->SetImageList(imglist);
-}
-
-wxFlatNotebookImageList * wxFlatNotebookBase::GetImageList()
-{
- return m_pages->GetImageList();
-}
-
-bool wxFlatNotebookBase::InsertPage(size_t index, wxWindow* page, const wxString& text, bool select, const int imgindex)
-{
- // sanity check
- if (!page)
- return false;
-
- // reparent the window to us
- page->Reparent(this);
-
- if(m_windows.empty())
- {
- AddPage(page, text, select, imgindex);
- return true;
- }
- index = std::min((unsigned int)index, (unsigned int)m_windows.size());
- // Insert tab
- bool bSelected = select || m_windows.empty();
- int curSel = m_pages->GetSelection();
-
- if(index <= m_windows.size())
- {
- std::vector<wxWindow*>::iterator iter = m_windows.begin() + index;
- m_windows.insert(iter, page);
- wxLogTrace(wxTraceMask(), _("New page inserted. Index = %i"), index);
- }
- else
- {
- m_windows.push_back(page);
- wxLogTrace(wxTraceMask(), _("New page appended. Index = %i"), index);
- }
- m_pages->InsertPage(index, page, text, bSelected, imgindex);
- if((int)index <= curSel) curSel++;
-
- Freeze();
-
- // Check if a new selection was made
- if(bSelected)
- {
- if(curSel >= 0)
- {
- // Remove the window from the main sizer
- m_mainSizer->Detach(m_windows[curSel]);
- m_windows[curSel]->Hide();
- }
- m_pages->SetSelection(index);
- }
- else
- {
- // Hide the page
- page->Hide();
- }
- Thaw();
- m_mainSizer->Layout();
- Refresh();
-
- return true;
-}
-
-void wxFlatNotebookBase::SetSelection(size_t page)
-{
- if(page >= m_windows.size())
- return;
-
- // Support for disabed tabs
- if(!m_pages->GetEnabled(page) && m_windows.size() > 1 && !m_bForceSelection)
- return;
-
- int curSel = m_pages->GetSelection();
-
- // program allows the page change
- Freeze();
- if(curSel >= 0)
- {
- // Remove the window from the main sizer
- m_mainSizer->Detach(m_windows[curSel]);
- m_windows[curSel]->Hide();
- }
-
- if(m_windowStyle & wxFNB_BOTTOM)
- {
- m_mainSizer->Insert(0, m_windows[page], 1, wxEXPAND);
- }
- else
- {
- // We leave a space of 1 pixel around the window
- m_mainSizer->Add(m_windows[page], 1, wxEXPAND);
- }
-
- m_windows[page]->Show();
- Thaw();
-
- m_mainSizer->Layout();
- m_pages->m_iActivePage = (int)page;
- m_pages->DoSetSelection(page);
-}
-
-void wxFlatNotebookBase::DeletePage(size_t page)
-{
- if(page >= m_windows.size())
- return;
-
- // Fire a closing event
- wxFlatNotebookEvent event(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSING, GetId());
- event.SetSelection((int)page);
- event.SetEventObject(this);
- GetEventHandler()->ProcessEvent(event);
-
- // The event handler allows it?
- if (!event.IsAllowed())
- return;
-
- Freeze();
-
- // Delete the requested page
- wxWindow *pageRemoved = m_windows[page];
-
- // If the page is the current window, remove it from the sizer
- // as well
- if((int)page == m_pages->GetSelection())
- {
- m_mainSizer->Detach(pageRemoved);
- }
-
- // Remove it from the array as well
- std::vector<wxWindow*>::iterator iter = std::find(m_windows.begin(), m_windows.end(), pageRemoved);
- if(iter != m_windows.end())
- m_windows.erase(iter);
-
- // Now we can destroy it; in wxWidgets use Destroy instead of delete
- pageRemoved->Destroy();
-
- Thaw();
-
- m_pages->DoDeletePage(page);
- Refresh();
-
- // Fire a closed event
- wxFlatNotebookEvent closedEvent(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSED, GetId());
- closedEvent.SetSelection((int)page);
- closedEvent.SetEventObject(this);
- GetEventHandler()->ProcessEvent(closedEvent);
-}
-
-bool wxFlatNotebookBase::DeleteAllPages()
-{
- if(m_windows.empty())
- return false;
-
- Freeze();
- std::vector<wxWindow*>::iterator iter = m_windows.begin();
- for(; iter != m_windows.end(); iter++)
- {
- delete (*iter);
- }
-
- m_windows.clear();
-
- Thaw();
-
- // Clear the container of the tabs as well
- m_pages->DeleteAllPages();
- return true;
-}
-
-wxWindow* wxFlatNotebookBase::GetCurrentPage() const
-{
- int sel = m_pages->GetSelection();
- if(sel < 0)
- return NULL;
-
- return m_windows[sel];
-}
-
-wxWindow* wxFlatNotebookBase::GetPage(size_t page) const
-{
- if(page >= m_windows.size())
- return NULL;
-
- return m_windows[page];
-}
-
-int wxFlatNotebookBase::GetPageIndex(wxWindow* win) const
-{
- for (size_t i = 0; i < m_windows.size(); ++i)
- {
- if (m_windows[i] == win)
- return (int)i;
- }
- return -1;
-}
-
-int wxFlatNotebookBase::GetSelection() const
-{
- return m_pages->GetSelection();
-}
-
-void wxFlatNotebookBase::AdvanceSelection(bool bForward)
-{
- m_pages->AdvanceSelection(bForward);
-}
-
-int wxFlatNotebookBase::GetPageCount() const
-{
- return (int)m_pages->GetPageCount();
-}
-
-void wxFlatNotebookBase::OnNavigationKey(wxNavigationKeyEvent& event)
-{
- if ( event.IsWindowChange() )
- {
- // change pages
- AdvanceSelection(event.GetDirection());
- }
- else
- {
- // pass to the parent
- if ( GetParent() )
- {
- event.SetCurrentFocus(this);
- GetParent()->ProcessEvent(event);
- }
- }
-}
-
-bool wxFlatNotebookBase::GetPageShapeAngle(int page_index, unsigned int * result)
-{
- if(page_index < 0 || page_index >= (int)m_pages->m_pagesInfoVec.size()) return false;
- *result = m_pages->m_pagesInfoVec[page_index].GetTabAngle();
- return true;
-}
-
-void wxFlatNotebookBase::SetPageShapeAngle(int page_index, unsigned int angle)
-{
- if(page_index < 0 || page_index >= (int)m_pages->m_pagesInfoVec.size()) return;
- if(angle > 15) return;
-
- m_pages->m_pagesInfoVec[page_index].SetTabAngle(angle);
-}
-
-void wxFlatNotebookBase::SetAllPagesShapeAngle(unsigned int angle)
-{
- if(angle > 15) return;
- for(unsigned int i = 0; i < m_pages->m_pagesInfoVec.size(); i++)
- {
- m_pages->m_pagesInfoVec[i].SetTabAngle(angle);
- }
- Refresh();
-}
-
-wxSize wxFlatNotebookBase::GetPageBestSize()
-{
- return m_pages->GetClientSize();
-}
-
-bool wxFlatNotebookBase::SetPageText(size_t page, const wxString& text)
-{
- bool bVal = m_pages->SetPageText(page, text);
- m_pages->Refresh();
- return bVal;
-}
-
-void wxFlatNotebookBase::SetPadding(const wxSize& padding)
-{
- m_nPadding = padding.GetWidth();
-}
-
-void wxFlatNotebookBase::SetWindowStyleFlag(long style)
-{
- wxPanel::SetWindowStyleFlag(style);
-
- if(m_pages)
- {
- // For changing the tab position (i.e. placing them top/bottom)
- // refreshing the tab container is not enough
- m_pages->m_colorBorder = style & wxFNB_FANCY_TABS ? m_pages->m_colorTo : wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
- SetSelection(m_pages->m_iActivePage);
- }
-}
-
-bool wxFlatNotebookBase::RemovePage(size_t page)
-{
- if(page >= m_windows.size())
- return false;
-
- // Fire a closing event
- wxFlatNotebookEvent event(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSING, GetId());
- event.SetSelection((int)page);
- event.SetEventObject(this);
- GetEventHandler()->ProcessEvent(event);
-
- // The event handler allows it?
- if (!event.IsAllowed())
- return false;
-
- Freeze();
-
- // Remove the requested page
- wxWindow *pageRemoved = m_windows[page];
-
- // If the page is the current window, remove it from the sizer
- // as well
- if((int)page == m_pages->GetSelection())
- {
- m_mainSizer->Detach(pageRemoved);
- }
-
- // Remove it from the array as well
- std::vector<wxWindow*>::iterator iter = std::find(m_windows.begin(), m_windows.end(), pageRemoved);
- if(iter != m_windows.end())
- m_windows.erase(iter);
-
- Thaw();
-
- m_pages->DoDeletePage(page);
-
- return true;
-}
-
-void wxFlatNotebookBase::SetRightClickMenu(wxMenu* menu)
-{
- m_pages->m_pRightClickMenu = menu;
-}
-
-wxString wxFlatNotebookBase::GetPageText(size_t page)
-{
- return m_pages->GetPageText(page);
-}
-
-void wxFlatNotebookBase::SetGradientColors(const wxColour& from, const wxColour& to, const wxColour& border)
-{
- m_pages->m_colorFrom = from;
- m_pages->m_colorTo = to;
- m_pages->m_colorBorder = border;
-}
-
-void wxFlatNotebookBase::SetGradientColorsInactive(const wxColour& from, const wxColour& to, const wxColour& border)
-{
- m_pages->m_colorFromInactive = from;
- m_pages->m_colorToInactive = to;
- m_pages->m_colorBorderInactive = border;
-}
-
-void wxFlatNotebookBase::SetGradientColorFrom(const wxColour& from)
-{
- m_pages->m_colorFrom = from;
-}
-
-void wxFlatNotebookBase::SetGradientColorTo(const wxColour& to)
-{
- m_pages->m_colorTo = to;
-}
-
-void wxFlatNotebookBase::SetGradientColorBorder(const wxColour& border)
-{
- m_pages->m_colorBorder = border;
-}
-
-void wxFlatNotebookBase::SetUseBackground(bool useBg)
-{
- m_pages->SetUseBackground(useBg);
-}
-
-void wxFlatNotebookBase::SetTabAreaBackgroundImage(wxBitmap* pTabAreaBackgroundImage)
-{
- m_pages->SetTabAreaBackgroundImage(pTabAreaBackgroundImage);
-}
-
-/// Gets first gradient colour
-const wxColour& wxFlatNotebookBase::GetGradientColorFrom()
-{
- return m_pages->m_colorFrom;
-}
-
-/// Gets second gradient colour
-const wxColour& wxFlatNotebookBase::GetGradientColorTo()
-{
- return m_pages->m_colorTo;
-}
-
-/// Gets the tab border colour
-const wxColour& wxFlatNotebookBase::SetGradientColorBorder()
-{
- return m_pages->m_colorBorder;
-}
-
-/// Get the active tab text
-const wxColour& wxFlatNotebookBase::GetActiveTabTextColour()
-{
- return m_pages->m_activeTextColor;
-}
-
-void wxFlatNotebookBase::SetPageImageIndex(size_t page, int imgindex)
-{
- m_pages->SetPageImageIndex(page, imgindex);
-}
-
-int wxFlatNotebookBase::GetPageImageIndex(size_t page)
-{
- return m_pages->GetPageImageIndex(page);
-}
-
-bool wxFlatNotebookBase::GetEnabled(size_t page)
-{
- return m_pages->GetEnabled(page);
-}
-
-void wxFlatNotebookBase::Enable(size_t page, bool enabled)
-{
- if(page >= m_windows.size())
- return;
-
- m_windows[page]->Enable(enabled);
- m_pages->Enable(page, enabled);
-}
-
-const wxColour& wxFlatNotebookBase::GetNonActiveTabTextColour()
-{
- return m_pages->m_nonActiveTextColor;
-}
-
-void wxFlatNotebookBase::SetNonActiveTabTextColour(const wxColour& color)
-{
- m_pages->m_nonActiveTextColor = color;
-}
-
-void wxFlatNotebookBase::SetTabAreaColour(const wxColour& color)
-{
- m_pages->m_tabAreaColor = color;
-}
-
-const wxColour& wxFlatNotebookBase::GetTabAreaColour()
-{
- return m_pages->m_tabAreaColor;
-}
-
-void wxFlatNotebookBase::SetActiveTabColour(const wxColour& color)
-{
- m_pages->m_activeTabColor = color;
-}
-
-const wxColour& wxFlatNotebookBase::GetActiveTabColour()
-{
- return m_pages->m_activeTabColor;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////
-//
-// wxPageContainerBase
-//
-///////////////////////////////////////////////////////////////////////////////////////////
-
-BEGIN_EVENT_TABLE(wxPageContainerBase, wxPanel)
-EVT_PAINT(wxPageContainerBase::OnPaint)
-EVT_SIZE(wxPageContainerBase::OnSize)
-EVT_LEFT_DOWN(wxPageContainerBase::OnLeftDown)
-EVT_LEFT_UP(wxPageContainerBase::OnLeftUp)
-EVT_RIGHT_DOWN(wxPageContainerBase::OnRightDown)
-EVT_MIDDLE_DOWN(wxPageContainerBase::OnMiddleDown)
-EVT_MOTION(wxPageContainerBase::OnMouseMove)
-EVT_ERASE_BACKGROUND(wxPageContainerBase::OnEraseBackground)
-EVT_LEAVE_WINDOW(wxPageContainerBase::OnMouseLeave)
-EVT_ENTER_WINDOW(wxPageContainerBase::OnMouseEnterWindow)
-END_EVENT_TABLE()
-
-wxPageContainerBase::wxPageContainerBase(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
-: m_ImageList(NULL)
-, m_iActivePage(-1)
-, m_pDropTarget(NULL)
-, m_nLeftClickZone(wxFNB_NOWHERE)
-{
- m_pRightClickMenu = NULL;
- m_nXButtonStatus = wxFNB_BTN_NONE;
- m_pParent = parent;
- m_nRightButtonStatus = wxFNB_BTN_NONE;
- m_nLeftButtonStatus = wxFNB_BTN_NONE;
- m_nTabXButtonStatus = wxFNB_BTN_NONE;
-
- m_colorTo = wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_ACTIVECAPTION));
- m_colorFrom = wxColor(*wxWHITE);
- m_colorToInactive = wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_ACTIVECAPTION));
- m_colorFromInactive = wxColor(*wxWHITE);
- m_activeTabColor = wxColor(*wxWHITE);
- m_activeTextColor = wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT));
- m_tabAreaColor = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
-
- wxWindow::Create(parent, id, pos, size, style | wxNO_BORDER | wxNO_FULL_REPAINT_ON_RESIZE);
-
- m_nonActiveTextColor = wxT("GREY");
- m_pDropTarget = new wxFNBDropTarget<wxPageContainerBase>(this, &wxPageContainerBase::OnDropTarget);
- SetDropTarget(m_pDropTarget);
-
- //bg
- m_useBg = false;
- m_tabBorderWidth = 1;
-}
-
-int wxPageContainerBase::GetButtonAreaWidth(void)
-{
- int btnareawidth;
- long style = GetParent()->GetWindowStyleFlag();
- btnareawidth = ((wxFlatNotebookBase *)m_pParent)->m_nPadding * 2;
-
- if ((style & wxFNB_NO_X_BUTTON) == 0)
- btnareawidth += BUTTON_SPACE;
-
- if ((style & wxFNB_NO_NAV_BUTTONS) == 0)
- btnareawidth += BUTTON_SPACE*2;
-
- return btnareawidth;
-}
-
-wxPageContainerBase::~wxPageContainerBase(void)
-{
- if(m_pRightClickMenu)
- {
- delete m_pRightClickMenu;
- m_pRightClickMenu = NULL;
- }
-}
-
-void wxPageContainerBase::OnPaint(wxPaintEvent &event)
-{
- wxBufferedPaintDC dc(this);
- if(m_pagesInfoVec.empty() || m_nFrom >= (int)m_pagesInfoVec.size())
- {
- Hide();
- event.Skip();
- return;
- }
-
- // Get the text hight
- int height, width, tabHeight;
- long style = GetParent()->GetWindowStyleFlag();
- wxString stam = wxT("Tp"); // Temp data to get the text height;
- dc.GetTextExtent(stam, &width, &height);
-
- tabHeight = height + 8; // We use 8 pixels as padding
-
- // Calculate the number of rows required for drawing the tabs
- wxRect rect = GetClientRect();
- int clientWidth = rect.width;
-
- // Set the maximum client size
- SetSizeHints(wxSize(GetButtonsAreaLength(), tabHeight));
-
- // Set brushes, pens and fonts
- wxFont normalFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
- wxFont boldFont = normalFont;
- boldFont.SetWeight(wxFONTWEIGHT_BOLD);
-
- wxPen borderPen = wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
-
- wxBrush backBrush;
- if(style & wxFNB_VC71)
- backBrush = wxBrush(wxColour(247, 243, 233));
- else
- backBrush = wxBrush(m_tabAreaColor);
-
- wxBrush noselBrush = wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
- wxBrush selBrush = wxBrush(m_activeTabColor);
-
- wxSize size = GetSize();
-
- // Background
- dc.SetTextBackground(style & wxFNB_VC71 ? wxColour(247, 243, 233) : GetBackgroundColour());
- dc.SetTextForeground(m_activeTextColor);
- dc.SetBrush(backBrush);
-
- // If border style is set, set the pen to be border pen
- if(style & wxFNB_TABS_BORDER_SIMPLE)
- dc.SetPen(borderPen);
- else
- dc.SetPen(*wxTRANSPARENT_PEN);
-
- ///////////////////////////////////////////////////////////////////////////////
-
- if (!m_useBg) {
- dc.DrawRectangle(0, 0, size.x, size.y); // draws background around the tabs
- } else {
- if(m_TabAreaBackgroundImage.Ok()) {
- dc.DrawBitmap(m_TabAreaBackgroundImage, 0, 0);
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////
-
- // We always draw the bottom/upper line of the tabs
- // regradless the style
- dc.SetPen(borderPen);
- if(!m_useBg){
- DrawTabsLine(dc, GetClientRect()); // draws line around the tabs only if not using background
- }
-
-
- // Restore the pen
- dc.SetPen(borderPen);
-
- if(style & wxFNB_VC71 && !(style & wxFNB_BOTTOM))
- {
- wxPen pen = wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
- pen.SetWidth(4);
- dc.SetPen(pen);
- dc.DrawLine(0, size.y, size.x, size.y);
-
- // Restore the pen
- dc.SetPen(borderPen);
- }
-
- // Draw labels
- int pom;
- dc.SetFont(boldFont);
- int posx = ((wxFlatNotebookBase *)m_pParent)->m_nPadding;
- int i = 0;
-
- // Update all the tabs from 0 to 'm_nFrom' to be non visible
- for(i=0; i<m_nFrom; i++)
- {
- m_pagesInfoVec[i].SetPosition(wxPoint(-1, -1));
- m_pagesInfoVec[i].GetRegion().Clear();
- }
-
- int shapePoints(0);
-
- if(style & wxFNB_VC71)
- tabHeight = (style & wxFNB_BOTTOM) ? tabHeight - 4 : tabHeight;
- else if(style & wxFNB_FANCY_TABS)
- tabHeight = (style & wxFNB_BOTTOM) ? tabHeight - 2 : tabHeight;
-
- // Draw the visible tabs
- for(i=m_nFrom; i<(int)m_pagesInfoVec.size(); i++)
- {
- if(style != wxFNB_VC71)
- shapePoints = (int)(tabHeight*tan((double)m_pagesInfoVec[i].GetTabAngle()/180.0*M_PI));
- else
- shapePoints = 0;
-
- dc.SetPen(borderPen);
- dc.SetBrush((i==GetSelection()) ? selBrush : noselBrush);
-
- // Calculate the text length using the bold font, so when selecting a tab
- // its width will not change
- dc.SetFont(boldFont);
- dc.GetTextExtent(GetPageText(i), &width, &pom);
-
- // Now set the font to the correct font
- dc.SetFont((i==GetSelection()) ? boldFont : normalFont);
-
- // Set a minimum size to a tab
- if(width < 20)
- width = 20;
-
- // Add the padding to the tab width
- // Tab width:
- // +-----------------------------------------------------------+
- // | PADDING | IMG | IMG_PADDING | TEXT | PADDING | x |PADDING |
- // +-----------------------------------------------------------+
-
- int tabWidth = ((wxFlatNotebookBase *)m_pParent)->m_nPadding * 2 + width;
- int imageYCoord = style & wxFNB_BOTTOM ? 3 : 6;
-
- /// Style to add a small 'x' button on the top right
- /// of the tab
- if(style & wxFNB_X_ON_TAB && i == GetSelection())
- {
- /// The xpm image that contains the 'x' button is 9 pixles
- tabWidth += ((wxFlatNotebookBase *)m_pParent)->m_nPadding + 9;
- }
-
- if(!(style & wxFNB_VC71) && !(style & wxFNB_FANCY_TABS))
- // Default style
- tabWidth += 2 * shapePoints;
-
- bool hasImage = (m_ImageList != NULL && m_pagesInfoVec[i].GetImageIndex() != -1);
-
- // For VC71 style, we only add the icon size (16 pixels)
- if(hasImage)
- {
- if( (style & wxFNB_VC71) || (style & wxFNB_FANCY_TABS))
- tabWidth += (16 + ((wxFlatNotebookBase*)m_pParent)->m_nPadding);
- else
- // Default style
- tabWidth += (16 + ((wxFlatNotebookBase*)m_pParent)->m_nPadding) + shapePoints / 2;
- }
-
- // Check if we can draw more
- if(posx + tabWidth + GetButtonsAreaLength() >= clientWidth)
- break;
-
- // By default we clean the tab region
- m_pagesInfoVec[i].GetRegion().Clear();
-
- // Clean the 'x' buttn on the tab
- // 'Clean' rectanlge is a rectangle with width or height
- // with values lower than or equal to 0
- m_pagesInfoVec[i].GetXRect().SetSize(wxSize(-1, -1));
-
- // Draw the tab
- if(style & wxFNB_FANCY_TABS)
- DrawFancyTab(dc, posx, i, hasImage, tabWidth, tabHeight);
- else if(style & wxFNB_VC71)
- DrawVC71Tab(dc, posx, i, hasImage, tabWidth, tabHeight);
- else
- DrawStandardTab(dc, posx, i, hasImage, tabWidth, tabHeight);
-
-
- // Text drawing offset from the left border of the
- // rectangle
- int textOffset;
-
- // The width of the images are 16 pixels
- if(hasImage)
- textOffset = ((wxFlatNotebookBase *)m_pParent)->m_nPadding * 2 + 16 + shapePoints / 2 ;
- else
- textOffset = ((wxFlatNotebookBase *)m_pParent)->m_nPadding + shapePoints / 2 ;
-
- if(i != GetSelection())
- {
- // Set the text background to be like the vertical lines
- dc.SetTextForeground(m_nonActiveTextColor);
- }
-
- // Draw the image for the tab if any
-#if (defined(__WXMSW__) || defined(__WXMAC__))
- imageYCoord = style & wxFNB_BOTTOM ? 3 : 6;
-#else
- imageYCoord = style & wxFNB_BOTTOM ? 3 : 10;
-#endif
-
- if(hasImage)
- {
- int imageXOffset = textOffset - 16 - ((wxFlatNotebookBase *)m_pParent)->m_nPadding;
- dc.DrawBitmap((*m_ImageList)[m_pagesInfoVec[i].GetImageIndex()],
- posx + imageXOffset, imageYCoord, true);
- }
-
- dc.DrawText(GetPageText(i), posx + textOffset, imageYCoord);
-
- int textWidth, textHeight;
- dc.GetTextExtent(GetPageText(i), &textWidth, &textHeight);
-
- int tabCloseButtonXCoord = posx + textOffset + textWidth + ((wxFlatNotebookBase *)m_pParent)->m_nPadding;
- /// From version 1.2 - a style to add 'x' button
- /// on a tab
- if(style & wxFNB_X_ON_TAB)
- {
- int tabCloseButtonYCoord = imageYCoord + 3;
- wxRect x_rect(tabCloseButtonXCoord, tabCloseButtonYCoord, FNB::tab_x_size, FNB::tab_x_size);
- DrawTabX(dc, x_rect, i);
- }
-
- // Restore the text forground
- dc.SetTextForeground(m_activeTextColor);
-
- // Update the tab position & size
- m_pagesInfoVec[i].SetPosition(wxPoint(posx, VERTICAL_BORDER_PADDING));
- m_pagesInfoVec[i].SetSize(wxSize(tabWidth, tabHeight));
-
- posx += tabWidth;
- }
-
- // Update all tabs that can not fit into the screen as non-visible
- for(; i<(int)m_pagesInfoVec.size(); i++)
- {
- m_pagesInfoVec[i].SetPosition(wxPoint(-1, -1));
- m_pagesInfoVec[i].GetRegion().Clear();
- }
-
- if(GetNumOfVisibleTabs() < (int)m_pagesInfoVec.size()){
- long style = GetParent()->GetWindowStyleFlag();
- if(style & wxFNB_NO_NAV_BUTTONS){
- style ^= wxFNB_NO_NAV_BUTTONS;
- GetParent()->SetWindowStyleFlag(style);
- }
- }
-
- // Draw the left/right/close buttons
- // Left arrow
- DrawLeftArrow(dc);
- DrawRightArrow(dc);
- DrawX(dc);
-}
-
-// Tabs drawings
-void wxPageContainerBase::DrawFancyTab(wxBufferedPaintDC& dc,
- const int& posx,
- const int &tabIdx,
- const bool & /*hasImage*/,
- const int &tabWidth,
- const int &tabHeight)
-{
- // Fancy tabs - like with VC71 but with the following differences:
- // - The Selected tab is colored with gradient color
- wxPen borderPen = wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
- wxPen pen = (tabIdx==GetSelection()) ? wxPen(m_colorBorder) : wxPen(m_colorBorderInactive);
- long style = GetParent()->GetWindowStyleFlag();
- dc.SetPen(pen);
- dc.SetBrush((tabIdx==GetSelection()) ? wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)) : wxBrush(wxColour(247, 243, 233)));
- if(tabIdx == GetSelection())
- {
- int posy = (style & wxFNB_BOTTOM) ? 0 : VERTICAL_BORDER_PADDING;
-
- wxRect rect(posx, posy, tabWidth, tabHeight);
- FillGradientColor(dc, rect);
- dc.SetBrush(*wxTRANSPARENT_BRUSH);
- pen.SetWidth(m_tabBorderWidth);
- dc.SetPen(pen);
-
- dc.DrawRectangle(rect);
- pen.SetWidth(1);
- dc.SetPen(pen);
- }
- else
- {
- // We dont draw a rectangle for non selected tabs, but only
- // vertical line on the left
- //dc.SetPen(borderPen);
- //dc.DrawLine(posx + tabWidth, VERTICAL_BORDER_PADDING + 3, posx + tabWidth, tabHeight - 4);
- int posy = (style & wxFNB_BOTTOM) ? 0 : VERTICAL_BORDER_PADDING;
-
- wxRect rect(posx, posy, tabWidth, tabHeight);
- FillGradientColorInactive(dc, rect);
- dc.SetBrush(*wxTRANSPARENT_BRUSH);
- pen.SetWidth(m_tabBorderWidth);
- dc.SetPen(pen);
-
- dc.DrawRectangle(rect);
- pen.SetWidth(1);
- dc.SetPen(pen);
- }
-}
-
-void wxPageContainerBase::DrawVC71Tab(wxBufferedPaintDC& dc,
- const int& posx,
- const int &tabIdx,
- const bool &/*hasImage*/,
- const int &tabWidth,
- const int &tabHeight)
-{
- // Visual studio 7.1 style
- wxPen borderPen = wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
- long style = GetParent()->GetWindowStyleFlag();
-
- dc.SetPen((tabIdx==GetSelection()) ? wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)) : borderPen);
- dc.SetBrush((tabIdx==GetSelection()) ? wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)) : wxBrush(wxColour(247, 243, 233)));
-
- if(tabIdx == GetSelection())
- {
- int posy = (style & wxFNB_BOTTOM) ? 0 : VERTICAL_BORDER_PADDING;
- dc.DrawRectangle(posx, posy, tabWidth, tabHeight);
-
- // Draw a black line on the left side of the
- // rectangle
- wxPen pen = wxPen(*wxBLACK);
- dc.SetPen(pen);
-
- int blackLineHeight = (style & wxFNB_BOTTOM) ? VERTICAL_BORDER_PADDING + tabHeight - 3 : VERTICAL_BORDER_PADDING + tabHeight - 5;
- dc.DrawLine(posx + tabWidth, (style & wxFNB_BOTTOM) ? 0 : VERTICAL_BORDER_PADDING,
- posx + tabWidth, blackLineHeight - 1);
-
- // To give the tab more 3D look we do the following
- // Incase the tab is on top,
- // Draw a thik white line on topof the rectangle
- // Otherwise, draw a thin (1 pixel) black line at the bottom
-
- pen = wxPen((style & wxFNB_BOTTOM) ? *wxBLACK : *wxWHITE);
- pen.SetWidth((style & wxFNB_BOTTOM) ? 1 : 2);
- dc.SetPen(pen);
- int whiteLinePosY = (style & wxFNB_BOTTOM) ? blackLineHeight - 1: VERTICAL_BORDER_PADDING ;
- dc.DrawLine(posx , whiteLinePosY, posx + tabWidth, whiteLinePosY);
- }
- else
- {
- // We dont draw a rectangle for non selected tabs, but only
- // vertical line on the left
- int blackLineHeight = (style & wxFNB_BOTTOM) ? tabHeight - 5 : VERTICAL_BORDER_PADDING + tabHeight - 8;
- dc.DrawLine(posx + tabWidth, (style & wxFNB_BOTTOM) ? 3 : VERTICAL_BORDER_PADDING + 1, posx + tabWidth, blackLineHeight + 1);
- }
-}
-
-
-void wxPageContainerBase::DrawStandardTab(wxBufferedPaintDC& dc,
- const int& posx,
- const int &tabIdx,
- const bool &/*hasImage*/,
- const int &tabWidth,
- const int &tabHeight)
-{
- // Default style
- wxPen borderPen = wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
- long style = GetParent()->GetWindowStyleFlag();
-
- wxPoint tabPoints[7];
- tabPoints[0].x = posx;
- tabPoints[0].y = (style & wxFNB_BOTTOM) ? 0 : tabHeight;
-
- tabPoints[1].x = (int)(posx+(tabHeight-2)*tan((double)m_pagesInfoVec[tabIdx].GetTabAngle()/180.0*M_PI));
- tabPoints[1].y = (style & wxFNB_BOTTOM) ? tabHeight - (VERTICAL_BORDER_PADDING+2) : (VERTICAL_BORDER_PADDING+2);
-
- tabPoints[2].x = tabPoints[1].x+2;
- tabPoints[2].y = (style & wxFNB_BOTTOM) ? tabHeight - VERTICAL_BORDER_PADDING : VERTICAL_BORDER_PADDING;
-
- tabPoints[3].x = (int)(posx+tabWidth-(tabHeight-2)*tan((double)m_pagesInfoVec[tabIdx].GetTabAngle()/180.0*M_PI))-2;
- tabPoints[3].y = (style & wxFNB_BOTTOM) ? tabHeight - VERTICAL_BORDER_PADDING : VERTICAL_BORDER_PADDING;
-
- tabPoints[4].x = tabPoints[3].x+2;
- tabPoints[4].y = (style & wxFNB_BOTTOM) ? tabHeight - (VERTICAL_BORDER_PADDING+2) : (VERTICAL_BORDER_PADDING+2);
-
- tabPoints[5].x = posx+tabWidth;
- tabPoints[5].y = (style & wxFNB_BOTTOM) ? 0 : tabHeight;
-
- tabPoints[6].x = tabPoints[0].x;
- tabPoints[6].y = tabPoints[0].y;
-
- if(tabIdx == GetSelection())
- {
- // Draw the tab as rounded rectangle
- dc.DrawPolygon(7, tabPoints);
- }
- else
- {
- if(tabIdx != GetSelection() - 1)
- {
- // Draw a vertical line to the right of the text
- int pt1x, pt1y, pt2x, pt2y;
- pt1x = tabPoints[5].x;
- pt1y = (style & wxFNB_BOTTOM) ? 4 : tabHeight - 4;
- pt2x = tabPoints[5].x;
- pt2y = (style & wxFNB_BOTTOM) ? tabHeight - 4 : 4 ;
- dc.DrawLine(pt1x, pt1y, pt2x, pt2y);
- }
- }
-
- if(style & wxFNB_BOTTOM && tabIdx == GetSelection())
- {
- wxPen savePen = dc.GetPen();
- wxPen whitePen = wxPen(*wxWHITE);
- whitePen.SetWidth(1);
- dc.SetPen(whitePen);
-
- dc.DrawLine(tabPoints[0], tabPoints[5]);
-
- // Restore the pen
- dc.SetPen(savePen);
- }
-}
-
-void wxPageContainerBase::AddPage(const wxString& caption, const bool selected, const int imgindex)
-{
- if(selected)
- {
- m_iActivePage = (int)m_pagesInfoVec.size();
- }
- m_pagesInfoVec.push_back(wxPageInfo(caption, imgindex));
- Refresh();
-}
-
-bool wxPageContainerBase::InsertPage(size_t index, wxWindow* /*page*/, const wxString& text, bool select, const int imgindex)
-{
- if(select)
- {
- m_iActivePage = (int)m_pagesInfoVec.size();
- }
- std::vector<wxPageInfo>::iterator iter = m_pagesInfoVec.begin() + index;
- m_pagesInfoVec.insert(iter, wxPageInfo(text, imgindex));
- Refresh();
- return true;
-}
-
-void wxPageContainerBase::OnSize(wxSizeEvent& WXUNUSED(event))
-{
- Refresh(); // Call on paint
-}
-
-void wxPageContainerBase::OnMiddleDown(wxMouseEvent& event)
-{
- // Test if this style is enabled
- long style = GetParent()->GetWindowStyleFlag();
- if(!(style & wxFNB_MOUSE_MIDDLE_CLOSES_TABS))
- return;
-
- wxPageInfo pgInfo;
- int tabIdx;
- int where = HitTest(event.GetPosition(), pgInfo, tabIdx);
- switch(where)
- {
- case wxFNB_TAB:
- {
- DeletePage((size_t)tabIdx);
- break;
- }
- default:
- break;
- }
- event.Skip();
-}
-
-void wxPageContainerBase::OnRightDown(wxMouseEvent& event)
-{
- if(m_pRightClickMenu)
- {
- wxPageInfo pgInfo;
- int tabIdx;
- int where = HitTest(event.GetPosition(), pgInfo, tabIdx);
- switch(where)
- {
- case wxFNB_TAB:
- case wxFNB_TAB_X:
- {
- if(!m_pagesInfoVec[tabIdx].GetEnabled())
- break;
-
- // Set the current tab to be active
- SetSelection((size_t)tabIdx);
-
- // If the owner has defined a context menu for the tabs,
- // popup the right click menu
- if (m_pRightClickMenu)
- PopupMenu(m_pRightClickMenu);
- else
- {
- // send a message to popup a custom menu
- wxFlatNotebookEvent event(wxEVT_COMMAND_FLATNOTEBOOK_CONTEXT_MENU, GetParent()->GetId());
- event.SetSelection((int)tabIdx);
- event.SetOldSelection((int)m_iActivePage);
- event.SetEventObject(GetParent());
- GetParent()->GetEventHandler()->ProcessEvent(event);
- }
- }
- break;
- default:
- break;
- }
- }
- event.Skip();
-}
-
-void wxPageContainerBase::OnLeftDown(wxMouseEvent& event)
-{
- wxPageInfo pgInfo;
- int tabIdx;
-
- // Reset buttons status
- m_nXButtonStatus = wxFNB_BTN_NONE;
- m_nLeftButtonStatus = wxFNB_BTN_NONE;
- m_nRightButtonStatus = wxFNB_BTN_NONE;
- m_nTabXButtonStatus = wxFNB_BTN_NONE;
-
- m_nLeftClickZone = HitTest(event.GetPosition(), pgInfo, tabIdx);
- switch(m_nLeftClickZone)
- {
- case wxFNB_LEFT_ARROW:
- m_nLeftButtonStatus = wxFNB_BTN_PRESSED;
- Refresh();
- break;
- case wxFNB_RIGHT_ARROW:
- m_nRightButtonStatus = wxFNB_BTN_PRESSED;
- Refresh();
- break;
- case wxFNB_X:
- m_nXButtonStatus = wxFNB_BTN_PRESSED;
- Refresh();
- break;
- case wxFNB_TAB_X:
- m_nTabXButtonStatus = wxFNB_BTN_PRESSED;
- Refresh();
- break;
- case wxFNB_TAB:
- {
- if(m_iActivePage != tabIdx)
- {
- // Incase the tab is disabled, we dont allow to choose it
- if(!m_pagesInfoVec[tabIdx].GetEnabled())
- break;
-
- int oldSelection = m_iActivePage;
-
- wxFlatNotebookEvent event(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGING, GetParent()->GetId());
- event.SetSelection((int)tabIdx);
- event.SetOldSelection((int)oldSelection);
- event.SetEventObject(GetParent());
- if(!GetParent()->GetEventHandler()->ProcessEvent(event) || event.IsAllowed())
- {
- SetSelection(tabIdx);
-
- // Fire a wxEVT_COMMAND_TABBEDCTRL_PAGE_CHANGED event
- event.SetEventType(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGED);
- event.SetOldSelection((int)oldSelection);
- GetParent()->GetEventHandler()->ProcessEvent(event);
- }
- }
- break;
- }
- }
-}
-
-void wxPageContainerBase::OnLeftUp(wxMouseEvent& event)
-{
- wxPageInfo pgInfo;
- int tabIdx;
-
- // forget the zone that was initially clicked
- m_nLeftClickZone = wxFNB_NOWHERE;
-
- int where = HitTest(event.GetPosition(), pgInfo, tabIdx);
- switch(where)
- {
- case wxFNB_LEFT_ARROW:
- {
- if(m_nFrom == 0)
- break;
-
- // Make sure that the button was pressed before
- if(m_nLeftButtonStatus != wxFNB_BTN_PRESSED)
- break;
-
- m_nLeftButtonStatus = wxFNB_BTN_HOVER;
-
- // We scroll left with bulks of 5
- int scrollLeft = GetNumTabsCanScrollLeft();
-
- m_nFrom -= scrollLeft;
- if(m_nFrom < 0)
- m_nFrom = 0;
-
- Refresh();
- break;
- }
- case wxFNB_RIGHT_ARROW:
- {
- if(m_nFrom >= (int)m_pagesInfoVec.size() - 1)
- break;
-
- // Make sure that the button was pressed before
- if(m_nRightButtonStatus != wxFNB_BTN_PRESSED)
- break;
-
- m_nRightButtonStatus = wxFNB_BTN_HOVER;
-
- // Check if the right most tab is visible, if it is
- // don't rotate right anymore
- if(m_pagesInfoVec[m_pagesInfoVec.size()-1].GetPosition() != wxPoint(-1, -1))
- break;
-
- int lastVisibleTab = GetLastVisibleTab();
- if(lastVisibleTab < 0)
- {
- // Probably the screen is too small for displaying even a single
- // tab, in this case we do nothing
- break;
- }
-
- m_nFrom += GetNumOfVisibleTabs();
- Refresh();
- break;
- }
- case wxFNB_X:
- {
- // Make sure that the button was pressed before
- if(m_nXButtonStatus != wxFNB_BTN_PRESSED)
- break;
-
- m_nXButtonStatus = wxFNB_BTN_HOVER;
-
- DeletePage((size_t)m_iActivePage);
- break;
- }
- case wxFNB_TAB_X:
- {
- // Make sure that the button was pressed before
- if(m_nTabXButtonStatus != wxFNB_BTN_PRESSED)
- break;
-
- m_nTabXButtonStatus = wxFNB_BTN_HOVER;
-
- DeletePage((size_t)m_iActivePage);
- break;
- }
-
- }
-}
-
-int wxPageContainerBase::HitTest(const wxPoint& pt, wxPageInfo& pageInfo, int &tabIdx)
-{
- wxRect rect = GetClientRect();
- int btnLeftPos = GetLeftButtonPos();
- int btnRightPos = GetRightButtonPos();
- int btnXPos = GetXPos();
- long style = GetParent()->GetWindowStyleFlag();
- tabIdx = -1;
- if(m_pagesInfoVec.empty())
- {
- return wxFNB_NOWHERE;
- }
-
- rect = wxRect(btnXPos, 5, 12, 12);
- if(rect.Contains(pt))
- {
- return (style & wxFNB_NO_X_BUTTON) ? wxFNB_NOWHERE : wxFNB_X;
- }
-
- rect = wxRect(btnRightPos, 5, 12, 12);
- if(rect.Contains(pt))
- {
- return (style & wxFNB_NO_NAV_BUTTONS) ? wxFNB_NOWHERE : wxFNB_RIGHT_ARROW;
- }
- rect = wxRect(btnLeftPos, 5, 12, 12);
- if(rect.Contains(pt))
- {
- return (style & wxFNB_NO_NAV_BUTTONS) ? wxFNB_NOWHERE : wxFNB_LEFT_ARROW;
- }
-
- // Test whether a left click was made on a tab
- bool bFoundMatch = false;
- for(size_t cur=m_nFrom; cur<m_pagesInfoVec.size(); cur++)
- {
- wxPageInfo pgInfo = m_pagesInfoVec[cur];
- if(pgInfo.GetPosition() == wxPoint(-1, -1))
- continue;
- if(style & wxFNB_X_ON_TAB && (int)cur == GetSelection())
- {
- // 'x' button exists on a tab
- if(m_pagesInfoVec[cur].GetXRect().Contains(pt))
- {
- pageInfo = pgInfo;
- tabIdx = (int)cur;
- return wxFNB_TAB_X;
- }
- }
-
- wxRect tabRect = wxRect(pgInfo.GetPosition().x, pgInfo.GetPosition().y,
- pgInfo.GetSize().x, pgInfo.GetSize().y);
- if(tabRect.Contains(pt))
- {
- // We have a match
- // wxGetApp().SafeMessageBox(pgInfo.m_strCaption);
- pageInfo = pgInfo;
- tabIdx = (int)cur;
- return wxFNB_TAB;
- }
- }
-
- if(bFoundMatch)
- return wxFNB_TAB;
-
- // Default
- return wxFNB_NOWHERE;
-}
-
-void wxPageContainerBase::SetSelection(size_t page)
-{
- wxFlatNotebookBase* book = (wxFlatNotebookBase*)GetParent();
- book->SetSelection(page);
- DoSetSelection(page);
-}
-
-void wxPageContainerBase::DoSetSelection(size_t page)
-{
- // Make sure that the selection is visible
- long style = GetParent()->GetWindowStyleFlag();
- if(style & wxFNB_NO_NAV_BUTTONS)
- {
- // Incase that we dont have navigation buttons,
- // there is no point of checking if the tab is visible
- // Just do the refresh
- Refresh();
- return;
- }
-
- if(page < m_pagesInfoVec.size())
- {
- //! fix for tabfocus
- wxWindow* da_page = ((wxFlatNotebookBase *)m_pParent)->GetPage(page);
- if ( da_page!=NULL )
- da_page->SetFocus();
- }
-
- if(!IsTabVisible(page))
- {
- if(page == m_pagesInfoVec.size() - 1)
- {
- // Incase the added tab is last,
- // the function IsTabVisible() will always return false
- // and thus will cause an evil behaviour that the new
- // tab will hide all other tabs, we need to check if the
- // new selected tab can fit to the current screen
- if(!CanFitToScreen(page))
- {
- m_nFrom = (int)page;
- }
- Refresh();
- }
- else
- {
- // Redraw the tabs starting from page
- m_nFrom = (int)page;
- Refresh();
- }
- }
-}
-
-void wxPageContainerBase::DeletePage(size_t page)
-{
- wxFlatNotebookBase* book = (wxFlatNotebookBase*)GetParent();
- book->DeletePage(page);
- book->Refresh();
-}
-
-bool wxPageContainerBase::IsTabVisible(size_t page)
-{
- int iPage = (int)page;
- int iLastVisiblePage = GetLastVisibleTab();
-
- return iPage <= iLastVisiblePage && iPage >= m_nFrom;
-}
-
-void wxPageContainerBase::DoDeletePage(size_t page)
-{
- // Remove the page from the vector
- wxFlatNotebookBase* book = (wxFlatNotebookBase*)GetParent();
- std::vector<wxPageInfo>::iterator iter = m_pagesInfoVec.begin();
- std::vector<wxPageInfo>::iterator endIter = m_pagesInfoVec.end();
-
- m_pagesInfoVec.erase(iter + page);
-
- // Thanks to Yiaanis AKA Mandrav
- if (m_iActivePage >= (int)page)
- m_iActivePage--;
-
- // The delete page was the last first on the array,
- // but the book still has more pages, so we set the
- // active page to be the first one (0)
- if(m_iActivePage < 0 && !m_pagesInfoVec.empty())
- m_iActivePage = 0;
-
- // Refresh the tabs
- if(m_iActivePage >= 0)
- {
- book->m_bForceSelection = true;
- book->SetSelection(m_iActivePage);
- book->m_bForceSelection = false;
- }
-
- if(m_pagesInfoVec.empty())
- {
- // Erase the page container drawings
- wxClientDC dc(this);
- dc.Clear();
- }
-}
-
-void wxPageContainerBase::DeleteAllPages()
-{
- m_iActivePage = -1;
- m_nFrom = 0;
- m_pagesInfoVec.clear();
-
- // Erase the page container drawings
- wxClientDC dc(this);
- dc.Clear();
-}
-
-void wxPageContainerBase::DrawTabX(wxDC& dc, const wxRect& rect, const int& tabIdx)
-{
- long style = GetParent()->GetWindowStyleFlag();
- if(!(style & wxFNB_X_ON_TAB) || !CanDrawXOnTab())
- return;
-
- /// We draw the 'x' on the active tab only
- if(tabIdx != GetSelection() || tabIdx < 0)
- return;
-
- // Set the bitmap according to the button status
- wxBitmap xBmp;
- switch(m_nTabXButtonStatus)
- {
- case wxFNB_BTN_HOVER:
- xBmp = wxBitmap(FNB::tab_x_button_hilite_xpm);
- break;
- case wxFNB_BTN_PRESSED:
- xBmp = wxBitmap(FNB::tab_x_button_pressed_xpm);
- break;
- case wxFNB_BTN_NONE:
- default:
- xBmp = wxBitmap(FNB::tab_x_button_xpm);
- break;
- }
-
- /// Set the masking
- xBmp.SetMask(new wxMask(xBmp, MASK_COLOR));
-
- // Draw the new bitmap
- dc.DrawBitmap(xBmp, rect.x, rect.y, true);
-
- // Update the vectpr
- m_pagesInfoVec[tabIdx].SetXRect(rect);
-}
-
-void wxPageContainerBase::DrawLeftArrow(wxDC& dc)
-{
- long style = GetParent()->GetWindowStyleFlag();
- if(style & wxFNB_NO_NAV_BUTTONS)
- return;
-
- // Make sure that there are pages in the container
- if(m_pagesInfoVec.empty())
- return;
-
- wxRect rect = GetClientRect();
- int btnLeftPos = GetLeftButtonPos();
- rect = wxRect(btnLeftPos, 5, 16, 16);
-
- // Set the bitmap according to the button status
- wxBitmap arrowBmp;
- switch(m_nLeftButtonStatus)
- {
- case wxFNB_BTN_HOVER:
- arrowBmp = wxBitmap(FNB::left_arrow_hilite_xpm);
- break;
- case wxFNB_BTN_PRESSED:
- arrowBmp = wxBitmap(FNB::left_arrow_pressed_xpm);
- break;
- case wxFNB_BTN_NONE:
- default:
- arrowBmp = wxBitmap(FNB::left_arrow_xpm);
- break;
- }
-
- if(m_nFrom == 0)
- {
- // Handle disabled arrow
- arrowBmp = wxBitmap(FNB::left_arrow_disabled_xpm);
- }
-
- arrowBmp.SetMask(new wxMask(arrowBmp, MASK_COLOR));
-
- // Erase old bitmap
- wxPen pen = wxPen(style & wxFNB_VC71 ? wxColour(247, 243, 233) : m_tabAreaColor);
- wxBrush brush = wxBrush(style & wxFNB_VC71 ? wxColour(247, 243, 233) :m_tabAreaColor);
- pen.SetWidth(1);
- dc.SetPen(pen);
- dc.SetBrush(brush);
-
- dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
-
- // Draw the new bitmap
- dc.DrawBitmap(arrowBmp, btnLeftPos, 5, true);
-}
-
-void wxPageContainerBase::DrawRightArrow(wxDC& dc)
-{
- long style = GetParent()->GetWindowStyleFlag();
- if(style & wxFNB_NO_NAV_BUTTONS)
- return;
-
- // Make sure that there are pages in the container
- if(m_pagesInfoVec.empty())
- return;
-
- wxRect rect = GetClientRect();
- int btnLeftPos = GetRightButtonPos();
- rect = wxRect(btnLeftPos, 5, 16, 16);
-
- // Set the bitmap according to the button status
- wxBitmap arrowBmp;
- switch(m_nRightButtonStatus)
- {
- case wxFNB_BTN_HOVER:
- arrowBmp = wxBitmap(FNB::right_arrow_hilite_xpm);
- break;
- case wxFNB_BTN_PRESSED:
- arrowBmp = wxBitmap(FNB::right_arrow_pressed_xpm);
- break;
- case wxFNB_BTN_NONE:
- default:
- arrowBmp = wxBitmap(FNB::right_arrow_xpm);
- break;
- }
-
-
- // Check if the right most tab is visible, if it is
- // don't rotate right anymore
- if(m_pagesInfoVec[m_pagesInfoVec.size()-1].GetPosition() != wxPoint(-1, -1))
- {
- arrowBmp = wxBitmap(FNB::right_arrow_disabled_xpm);
- }
-
- arrowBmp.SetMask(new wxMask(arrowBmp, MASK_COLOR));
-
- // Erase old bitmap
- wxPen pen = wxPen(style & wxFNB_VC71 ? wxColour(247, 243, 233) : m_tabAreaColor);
- wxBrush brush = wxBrush(style & wxFNB_VC71 ? wxColour(247, 243, 233) :m_tabAreaColor);
- pen.SetWidth(1);
- dc.SetPen(pen);
- dc.SetBrush(brush);
-
- dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
-
- // Draw the new bitmap
- dc.DrawBitmap(arrowBmp, btnLeftPos, 5, true);
-}
-
-void wxPageContainerBase::DrawX(wxDC& dc)
-{
- // Check if this style is enabled
- long style = GetParent()->GetWindowStyleFlag();
- if(style & wxFNB_NO_X_BUTTON)
- return;
-
- // Make sure that there are pages in the container
- if(m_pagesInfoVec.empty())
- return;
-
- wxRect rect = GetClientRect();
- int btnLeftPos = GetXPos();
- rect = wxRect(btnLeftPos, 5, 16, 16);
-
- // Set the bitmap according to the button status
- wxBitmap xbmp;
- switch(m_nXButtonStatus)
- {
- case wxFNB_BTN_HOVER:
- xbmp = wxBitmap(FNB::x_button_hilite_xpm);
- break;
- case wxFNB_BTN_PRESSED:
- xbmp = wxBitmap(FNB::x_button_pressed_xpm);
- break;
- case wxFNB_BTN_NONE:
- default:
- xbmp = wxBitmap(FNB::x_button_xpm);
- break;
- }
-
- xbmp.SetMask(new wxMask(xbmp, MASK_COLOR));
-
- // Erase old bitmap
- wxPen pen = wxPen(style & wxFNB_VC71 ? wxColour(247, 243, 233) : m_tabAreaColor);
- wxBrush brush = wxBrush(style & wxFNB_VC71 ? wxColour(247, 243, 233) : m_tabAreaColor);
- pen.SetWidth(1);
- dc.SetPen(pen);
- dc.SetBrush(brush);
- dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
-
- // Draw the new bitmap
- dc.DrawBitmap(xbmp, btnLeftPos, 5, true);
-}
-
-void wxPageContainerBase::OnMouseMove(wxMouseEvent& event)
-{
- if (!m_pagesInfoVec.empty() && IsShown())
- {
- const int xButtonStatus = m_nXButtonStatus;
- const int xTabButtonStatus = m_nTabXButtonStatus;
- const int rightButtonStatus = m_nRightButtonStatus;
- const int leftButtonStatus = m_nLeftButtonStatus;
- long style = GetParent()->GetWindowStyleFlag();
-
- m_nXButtonStatus = wxFNB_BTN_NONE;
- m_nRightButtonStatus = wxFNB_BTN_NONE;
- m_nLeftButtonStatus = wxFNB_BTN_NONE;
- m_nTabXButtonStatus = wxFNB_BTN_NONE;
-
- wxPageInfo pgInfo;
- int tabIdx;
-
- switch(HitTest(event.GetPosition(), pgInfo, tabIdx))
- {
- case wxFNB_X:
- if (event.LeftIsDown())
- {
- m_nXButtonStatus = (m_nLeftClickZone==wxFNB_X) ? wxFNB_BTN_PRESSED : wxFNB_BTN_NONE;
- }
- else
- {
- m_nXButtonStatus = wxFNB_BTN_HOVER;
- }
- break;
- case wxFNB_TAB_X:
- if (event.LeftIsDown())
- {
- m_nTabXButtonStatus = (m_nLeftClickZone==wxFNB_TAB_X) ? wxFNB_BTN_PRESSED : wxFNB_BTN_NONE;
- }
- else
- {
- m_nTabXButtonStatus = wxFNB_BTN_HOVER;
- }
- break;
- case wxFNB_RIGHT_ARROW:
- if (event.LeftIsDown())
- {
- m_nRightButtonStatus = (m_nLeftClickZone==wxFNB_RIGHT_ARROW) ? wxFNB_BTN_PRESSED : wxFNB_BTN_NONE;
- }
- else
- {
- m_nRightButtonStatus = wxFNB_BTN_HOVER;
- }
- break;
-
- case wxFNB_LEFT_ARROW:
- if (event.LeftIsDown())
- {
- m_nLeftButtonStatus = (m_nLeftClickZone==wxFNB_LEFT_ARROW) ? wxFNB_BTN_PRESSED : wxFNB_BTN_NONE;
- }
- else
- {
- m_nLeftButtonStatus = wxFNB_BTN_HOVER;
- }
- break;
-
- case wxFNB_TAB:
- // Call virtual method for showing tooltip
- ShowTabTooltip(tabIdx);
- if(!GetEnabled((size_t)tabIdx))
- {
- // Set the cursor to be 'No-entry'
- ::wxSetCursor(wxCURSOR_NO_ENTRY);
- }
- if(event.LeftIsDown() && !(style & wxFNB_NODRAG))
- {
- wxFNBDragInfo draginfo(this, tabIdx);
- wxCustomDataObject dataobject(wxDataFormat(wxT("wxFNB")));
- dataobject.SetData(sizeof(wxFNBDragInfo), &draginfo);
- wxDropSource dragSource(this);
- dragSource.SetData(dataobject);
- dragSource.DoDragDrop(wxDrag_DefaultMove);
- }
- break;
- }
-
- const bool bRedrawX = m_nXButtonStatus != xButtonStatus;
- const bool bRedrawRight = m_nRightButtonStatus != rightButtonStatus;
- const bool bRedrawLeft = m_nLeftButtonStatus != leftButtonStatus;
- const bool bRedrawTabX = m_nTabXButtonStatus != xTabButtonStatus;
-
- if (bRedrawX || bRedrawRight || bRedrawLeft || bRedrawTabX)
- {
- wxClientDC dc(this);
- if (bRedrawX)
- {
- DrawX(dc);
- }
- if (bRedrawLeft)
- {
- DrawLeftArrow(dc);
- }
- if (bRedrawRight)
- {
- DrawRightArrow(dc);
- }
- if(bRedrawTabX)
- {
- DrawTabX(dc, pgInfo.GetXRect(), tabIdx);
- }
- }
- }
- event.Skip();
-}
-
-int wxPageContainerBase::GetLastVisibleTab()
-{
- int i;
- for(i=m_nFrom; i<(int)m_pagesInfoVec.size(); i++)
- {
- if(m_pagesInfoVec[i].GetPosition() == wxPoint(-1, -1))
- break;
- }
- return (i-1);
-}
-
-int wxPageContainerBase::GetNumTabsCanScrollLeft()
-{
- int i;
-
- // Reserved area for the buttons (<>x)
- wxRect rect = GetClientRect();
- int clientWidth = rect.width;
- int posx = ((wxFlatNotebookBase *)m_pParent)->m_nPadding, numTabs = 0, pom = 0, width, shapePoints,
- height, tabHeight, tabWidth;
-
- wxClientDC dc(this);
-
- // Incase we have error prevent crash
- if(m_nFrom < 0)
- return 0;
-
- long style = GetParent()->GetWindowStyleFlag();
- for(i=m_nFrom; i>=0; i--)
- {
- wxFont boldFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
- boldFont.SetWeight(wxFONTWEIGHT_BOLD);
- dc.SetFont(boldFont);
-
- wxString stam = wxT("Tp"); // Temp data to get the text height;
- dc.GetTextExtent(stam, &width, &height);
-
- tabHeight = height + 8; // We use 6 pixels as padding
- if(style & wxFNB_VC71)
- tabHeight = (style & wxFNB_BOTTOM) ? tabHeight - 4 : tabHeight;
- else if(style & wxFNB_FANCY_TABS)
- tabHeight = (style & wxFNB_BOTTOM) ? tabHeight - 3 : tabHeight;
-
- dc.GetTextExtent(GetPageText(i), &width, &pom);
- if(style != wxFNB_VC71)
- shapePoints = (int)(tabHeight*tan((double)m_pagesInfoVec[i].GetTabAngle()/180.0*M_PI));
- else
- shapePoints = 0;
-
- tabWidth = ((wxFlatNotebookBase *)m_pParent)->m_nPadding * 2 + width;
- if(!(style & wxFNB_VC71))
- // Default style
- tabWidth += 2 * shapePoints;
-
- bool hasImage = (m_ImageList != NULL && m_pagesInfoVec[i].GetImageIndex() != -1);
-
- // For VC71 style, we only add the icon size (16 pixels)
- if(hasImage)
- {
- if( !IsDefaultTabs() )
- tabWidth += (16 + ((wxFlatNotebookBase*)m_pParent)->m_nPadding);
- else
- // Default style
- tabWidth += (16 + ((wxFlatNotebookBase*)m_pParent)->m_nPadding) + shapePoints / 2;
- }
-
- if(posx + tabWidth + GetButtonsAreaLength() >= clientWidth)
- break;
-
- numTabs++;
- posx += tabWidth;
- }
- return numTabs;
-}
-
-bool wxPageContainerBase::IsDefaultTabs()
-{
- long style = GetParent()->GetWindowStyleFlag();
- bool res = (style & wxFNB_VC71) || (style & wxFNB_FANCY_TABS);
- return !res;
-}
-
-void wxPageContainerBase::AdvanceSelection(bool bForward)
-{
- int nSel = GetSelection();
-
- if(nSel < 0)
- return;
-
- int nMax = (int)GetPageCount() - 1;
- if ( bForward )
- SetSelection(nSel == nMax ? 0 : nSel + 1);
- else
- SetSelection(nSel == 0 ? nMax : nSel - 1);
-}
-
-
-void wxPageContainerBase::OnMouseLeave(wxMouseEvent& event)
-{
- m_nLeftButtonStatus = wxFNB_BTN_NONE;
- m_nXButtonStatus = wxFNB_BTN_NONE;
- m_nRightButtonStatus = wxFNB_BTN_NONE;
- m_nTabXButtonStatus = wxFNB_BTN_NONE;
-
- wxClientDC dc(this);
-
- DrawX(dc);
- DrawLeftArrow(dc);
- DrawRightArrow(dc);
- DrawTabX(dc, m_pagesInfoVec[GetSelection()].GetXRect(), GetSelection());
-
- event.Skip();
-}
-
-void wxPageContainerBase::OnMouseEnterWindow(wxMouseEvent& event)
-{
- m_nLeftButtonStatus = wxFNB_BTN_NONE;
- m_nXButtonStatus = wxFNB_BTN_NONE;
- m_nRightButtonStatus = wxFNB_BTN_NONE;
- m_nLeftClickZone = wxFNB_BTN_NONE;
-
- event.Skip();
-}
-
-void wxPageContainerBase::ShowTabTooltip(int tabIdx)
-{
- wxWindow *pWindow = ((wxFlatNotebookBase *)m_pParent)->GetPage(tabIdx);
- wxToolTip *pToolTip = pWindow->GetToolTip();
- if(pToolTip && pToolTip->GetWindow() == pWindow)
- SetToolTip(pToolTip->GetTip());
-}
-
-void wxPageContainerBase::FillGradientColor(wxBufferedDC& dc, const wxRect& rect)
-{
- // gradient fill from colour 1 to colour 2 with top to bottom
-
- if(rect.height < 1 || rect.width < 1)
- return;
-
- int size = rect.height;
-
- // calculate gradient coefficients
- long style = GetParent()->GetWindowStyleFlag();
- wxColour col2 = (style & wxFNB_BOTTOM) ? m_colorTo : m_colorFrom;
- wxColour col1 = (style & wxFNB_BOTTOM) ? m_colorFrom : m_colorTo;
-
- double rstep = double((col2.Red() - col1.Red())) / double(size), rf = 0,
- gstep = double((col2.Green() - col1.Green())) / double(size), gf = 0,
- bstep = double((col2.Blue() - col1.Blue())) / double(size), bf = 0;
-
- wxColour currCol;
- for(int y = rect.y; y < rect.y + size; y++)
- {
- currCol.Set(
- (unsigned char)(col1.Red() + rf),
- (unsigned char)(col1.Green() + gf),
- (unsigned char)(col1.Blue() + bf)
- );
- dc.SetBrush( wxBrush( currCol, wxSOLID ) );
- dc.SetPen(wxPen(currCol));
- dc.DrawLine(rect.x, y, rect.x + rect.width, y);
- rf += rstep; gf += gstep; bf += bstep;
- }
-}
-
-void wxPageContainerBase::FillGradientColorInactive(wxBufferedDC& dc, const wxRect& rect)
-{
- // gradient fill from colour 1 to colour 2 with top to bottom
-
- if(rect.height < 1 || rect.width < 1)
- return;
-
- int size = rect.height;
-
- // calculate gradient coefficients
- long style = GetParent()->GetWindowStyleFlag();
- wxColour col2 = (style & wxFNB_BOTTOM) ? m_colorToInactive : m_colorFromInactive;
- wxColour col1 = (style & wxFNB_BOTTOM) ? m_colorFromInactive : m_colorToInactive;
-
- double rstep = double((col2.Red() - col1.Red())) / double(size), rf = 0,
- gstep = double((col2.Green() - col1.Green())) / double(size), gf = 0,
- bstep = double((col2.Blue() - col1.Blue())) / double(size), bf = 0;
-
- wxColour currCol;
- for(int y = rect.y; y < rect.y + size; y++)
- {
- currCol.Set(
- (unsigned char)(col1.Red() + rf),
- (unsigned char)(col1.Green() + gf),
- (unsigned char)(col1.Blue() + bf)
- );
- dc.SetBrush( wxBrush( currCol, wxSOLID ) );
- dc.SetPen(wxPen(currCol));
- dc.DrawLine(rect.x, y, rect.x + rect.width, y);
- rf += rstep; gf += gstep; bf += bstep;
- }
-}
-
-void wxPageContainerBase::SetPageImageIndex(size_t page, int imgindex)
-{
- if(page < m_pagesInfoVec.size())
- {
- m_pagesInfoVec[page].SetImageIndex(imgindex);
- Refresh();
- }
-}
-void wxPageContainerBase::SetUseBackground(bool useBg)
-{
- m_useBg = useBg;
-}
-
-void wxPageContainerBase::SetTabAreaBackgroundImage(wxBitmap* pTabAreaBackgroundImage)
-{
- m_TabAreaBackgroundImage = wxBitmap(*pTabAreaBackgroundImage);
-}
-
-int wxPageContainerBase::GetPageImageIndex(size_t page)
-{
- if(page < m_pagesInfoVec.size())
- {
- return m_pagesInfoVec[page].GetImageIndex();
- }
- return -1;
-}
-
-wxDragResult wxPageContainerBase::OnDropTarget(wxCoord x, wxCoord y, int nTabPage, wxWindow * wnd_oldContainer)
-{
- // Disable drag'n'drop for disabled tab
- if(!((wxPageContainerBase *)wnd_oldContainer)->m_pagesInfoVec[nTabPage].GetEnabled())
- return wxDragCancel;
-
- wxLogTrace(wxTraceMask(), _("Old Page Index = %i"), nTabPage);
- wxPageContainerBase * oldContainer = (wxPageContainerBase *)wnd_oldContainer;
- int nIndex = -1;
- wxPageInfo pgInfo;
- int where = HitTest(wxPoint(x, y), pgInfo, nIndex);
- wxLogTrace(wxTraceMask(), _("OnDropTarget: index by HitTest = %i"), nIndex);
- wxFlatNotebookBase * oldNotebook = (wxFlatNotebookBase *)oldContainer->GetParent();
- wxFlatNotebookBase * newNotebook = (wxFlatNotebookBase *)GetParent();
-
- if(oldNotebook == newNotebook)
- {
- if(nTabPage >= 0)
- {
- switch(where)
- {
- case wxFNB_TAB:
- MoveTabPage(nTabPage, nIndex);
- break;
- case wxFNB_NOWHERE:
- MoveTabPage(nTabPage, GetLastVisibleTab()+1);
- break;
- default:
- break;
- }
- }
- }
- else
- {
-#if defined(__WXMSW__) || defined(__WXGTK__)
- if(nTabPage >= 0)
- {
- wxWindow * window = oldNotebook->GetPage(nTabPage);
- if(window)
- {
- wxString caption = oldContainer->GetPageText(nTabPage);
- int imageindex = oldContainer->GetPageImageIndex(nTabPage);
- oldNotebook->RemovePage(nTabPage);
- window->Reparent(newNotebook);
-
- newNotebook->InsertPage(nIndex, window, caption, true, imageindex);
- }
- }
-#endif
- }
- return wxDragMove;
-}
-
-void wxPageContainerBase::MoveTabPage(int nMove, int nMoveTo)
-{
- if(nMove == nMoveTo)
- return;
- else if(nMoveTo < nMove)
- nMoveTo++;
-
- // Remove the window from the main sizer
- int nCurSel = ((wxFlatNotebookBase *)m_pParent)->m_pages->GetSelection();
- ((wxFlatNotebookBase *)m_pParent)->m_mainSizer->Detach(((wxFlatNotebookBase *)m_pParent)->m_windows[nCurSel]);
- ((wxFlatNotebookBase *)m_pParent)->m_windows[nCurSel]->Hide();
-
- wxWindow *pWindow = ((wxFlatNotebookBase *)m_pParent)->m_windows[nMove];
- ((wxFlatNotebookBase *)m_pParent)->m_windows.erase(((wxFlatNotebookBase *)m_pParent)->m_windows.begin() + nMove);
- ((wxFlatNotebookBase *)m_pParent)->m_windows.insert(((wxFlatNotebookBase *)m_pParent)->m_windows.begin() + nMoveTo - 1, pWindow);
-
- wxPageInfo pgInfo = m_pagesInfoVec[nMove];
- m_pagesInfoVec.erase(m_pagesInfoVec.begin() + nMove);
- m_pagesInfoVec.insert(m_pagesInfoVec.begin() + nMoveTo - 1, pgInfo);
-
- // Add the page according to the style
- wxBoxSizer* pSizer = ((wxFlatNotebookBase *)m_pParent)->m_mainSizer;
- long style = GetParent()->GetWindowStyleFlag();
-
-
- if(style & wxFNB_BOTTOM)
- {
- pSizer->Insert(0, pWindow, 1, wxEXPAND);
- }
- else
- {
- // We leave a space of 1 pixel around the window
- pSizer->Add(pWindow, 1, wxEXPAND);
- }
- pWindow->Show();
-
- pSizer->Layout();
- m_iActivePage = nMoveTo-1;
- DoSetSelection(m_iActivePage);
- Refresh();
-}
-
-bool wxPageContainerBase::CanFitToScreen(size_t page)
-{
- // Incase the from is greater than page,
- // we need to reset the m_nFrom, so in order
- // to force the caller to do so, we return false
- if(m_nFrom > (int)page)
- return false;
-
- // Calculate the tab width including borders and image if any
- wxClientDC dc(this);
-
- int width, pom, shapePoints, height, tabHeight;
- long style = GetParent()->GetWindowStyleFlag();
-
- wxString stam = wxT("Tp"); // Temp data to get the text height;
- dc.GetTextExtent(stam, &width, &height);
- dc.GetTextExtent(GetPageText(page), &width, &pom);
-
- tabHeight = height + 8; // We use 6 pixels as padding
-
- if(style & wxFNB_VC71)
- tabHeight = (style & wxFNB_BOTTOM) ? tabHeight - 4 : tabHeight;
- else if(style & wxFNB_FANCY_TABS)
- tabHeight = (style & wxFNB_BOTTOM) ? tabHeight - 2 : tabHeight;
-
- int tabWidth = ((wxFlatNotebookBase *)m_pParent)->m_nPadding * 2 + width;
- if(!(style & wxFNB_VC71))
- shapePoints = (int)(tabHeight*tan((double)m_pagesInfoVec[page].GetTabAngle()/180.0*M_PI));
- else
- shapePoints = 0;
-
- if(!(style & wxFNB_VC71))
- // Default style
- tabWidth += 2 * shapePoints;
-
- bool hasImage = (m_ImageList != NULL);
- if(hasImage) hasImage &= m_pagesInfoVec[page].GetImageIndex() != -1;
-
- // For VC71 style, we only add the icon size (16 pixels)
- if(hasImage && ( (style & wxFNB_VC71) || (style & wxFNB_FANCY_TABS)) )
- tabWidth += 16;
- else
- // Default style
- tabWidth += 16 + shapePoints / 2;
-
- // Check if we can draw more
- int posx = ((wxFlatNotebookBase *)m_pParent)->m_nPadding;
-
- if(m_nFrom >= 0)
- {
- for(int i=m_nFrom; i<(int)m_pagesInfoVec.size(); i++)
- {
- if(m_pagesInfoVec[i].GetPosition() == wxPoint(-1, -1))
- break;
- posx += m_pagesInfoVec[i].GetSize().x;
- }
- }
-
- wxRect rect = GetClientRect();
- int clientWidth = rect.width;
-
- if(posx + tabWidth + GetButtonsAreaLength() >= clientWidth)
- return false;
- return true;
-}
-
-int wxPageContainerBase::GetNumOfVisibleTabs()
-{
- int i=m_nFrom;
- int counter = 0;
- for(; i<(int)m_pagesInfoVec.size(); i++, ++counter)
- {
- if(m_pagesInfoVec[i].GetPosition() == wxPoint(-1, -1))
- break;
- }
- return counter;
-}
-
-bool wxPageContainerBase::GetEnabled(size_t page)
-{
- if(page >= m_pagesInfoVec.size())
- return true; // Seems strange, but this is the default
- return m_pagesInfoVec[page].GetEnabled();
-}
-
-void wxPageContainerBase::Enable(size_t page, bool enabled)
-{
- if(page >= m_pagesInfoVec.size())
- return ;
- return m_pagesInfoVec[page].Enable(enabled);
-}
-
-int wxPageContainerBase::GetLeftButtonPos()
-{
- long style = GetParent()->GetWindowStyleFlag();
- wxRect rect = GetClientRect();
- int clientWidth = rect.width;
- if(style & wxFNB_NO_X_BUTTON)
- return clientWidth - 38;
- else
- return clientWidth - 54;
-}
-
-int wxPageContainerBase::GetRightButtonPos()
-{
- long style = GetParent()->GetWindowStyleFlag();
- wxRect rect = GetClientRect();
- int clientWidth = rect.width;
- if(style & wxFNB_NO_X_BUTTON)
- return clientWidth - 22;
- else
- return clientWidth - 38;
-}
-
-int wxPageContainerBase::GetXPos()
-{
- long style = GetParent()->GetWindowStyleFlag();
- wxRect rect = GetClientRect();
- int clientWidth = rect.width;
- if(style & wxFNB_NO_X_BUTTON)
- return clientWidth;
- else
- return clientWidth - 22;
-}
-
-int wxPageContainerBase::GetButtonsAreaLength()
-{
- long style = GetParent()->GetWindowStyleFlag();
- if(style & wxFNB_NO_NAV_BUTTONS && style & wxFNB_NO_X_BUTTON)
- return 0;
- else if((style & wxFNB_NO_NAV_BUTTONS) && !(style & wxFNB_NO_X_BUTTON))
- return 53 - 16;
- else if(!(style & wxFNB_NO_NAV_BUTTONS) && (style & wxFNB_NO_X_BUTTON))
- return 53 - 16;
- else
- // All buttons
- return 53;
-}
-
-void wxPageContainerBase::DrawTabsLine(wxDC& dc, const wxRect& rect)
-{
- wxRect clientRect = rect;
- long style = GetParent()->GetWindowStyleFlag();
-
- //dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW)));
- dc.SetPen(wxPen(m_tabAreaColor)); // eliminates line
- dc.SetBrush(*wxTRANSPARENT_BRUSH);
- dc.DrawRectangle(clientRect);
-
- if(!(style & wxFNB_TABS_BORDER_SIMPLE))
- {
- dc.SetPen(wxPen(m_tabAreaColor));
- dc.DrawLine(0, 0, 0, clientRect.height);
- if(style & wxFNB_BOTTOM)
- dc.DrawLine(0, clientRect.height - 1, clientRect.width, clientRect.height - 1);
- else
- dc.DrawLine(0, 0, clientRect.width, 0);
- dc.DrawLine(clientRect.width - 1, 0, clientRect.width - 1, clientRect.height);
- }
-}
diff --git a/clientgui/common/wxFlatNotebook.h b/clientgui/common/wxFlatNotebook.h
deleted file mode 100644
index 90a100f..0000000
--- a/clientgui/common/wxFlatNotebook.h
+++ /dev/null
@@ -1,875 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// Name: wxFlatNotebook.cpp
-// Purpose: generic implementation of flat style notebook class.
-// Author: Eran Ifrah <eranif at bezeqint.net>
-// Modified by: Priyank Bolia <soft at priyank.in>
-// Created: 30/12/2005
-// Modified: 01/01/2006
-// Copyright: Eran Ifrah (c)
-// Licence: wxWindows license <http://www.wxwidgets.org/licence3.txt>
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef WXFLATNOTEBOOK_H
-#define WXFLATNOTEBOOK_H
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "common/wxFlatNotebook.cpp"
-#endif
-
-
-#include "common/wxFNBDropTarget.h"
-
-class wxPageContainerBase;
-
-#ifndef M_PI
-#define M_PI 3.14159265358979
-#endif
-
-typedef std::vector<wxBitmap> wxFlatNotebookImageList;
-
-
-/// wxFlatNotebookBase styles
-#define wxFNB_DEFAULT_STYLE wxFNB_MOUSE_MIDDLE_CLOSES_TABS
-
-/// Use Visual Studio 2003 (VC7.1) Style for tabs
-#define wxFNB_VC71 1
-
-/// Use fancy style - square tabs filled with gradient coloring
-#define wxFNB_FANCY_TABS 2
-
-/// Draw thin border around the page
-#define wxFNB_TABS_BORDER_SIMPLE 4
-
-/// Do not display the 'X' button
-#define wxFNB_NO_X_BUTTON 8
-
-/// Do not display the Right / Left arrows
-#define wxFNB_NO_NAV_BUTTONS 16
-
-/// Use the mouse middle button for cloing tabs
-#define wxFNB_MOUSE_MIDDLE_CLOSES_TABS 32
-
-/// Place tabs at bottom - the default is to place them
-/// at top
-#define wxFNB_BOTTOM 64
-
-/// Disable dragging of tabs
-#define wxFNB_NODRAG 128
-
-/// Disable dragging of tabs - Only available on the commercial version
-#define wxFNB_VC8 256
-
-/// Place 'X' on a tab
-/// Note: This style is not supported on VC8 style
-#define wxFNB_X_ON_TAB 512
-
-#define VERTICAL_BORDER_PADDING 4
-
-// Button size is a 16x16 xpm bitmap
-#define BUTTON_SPACE 16
-
-#define VC8_SHAPE_LEN 16
-
-#define MASK_COLOR wxColor(0, 128, 128)
-
-class wxMenu;
-class SkinClass;
-/**
-* \brief Nice cross-platform flat notebook with X-button :)
-*/
-
-class wxFlatNotebookBase : public wxPanel
-{
-private:
- friend class wxPageContainerBase;
-
-public:
-
- ///Default constructor
- wxFlatNotebookBase(){}
- /// Parametrized constructor
- /**
- \param parent - parent window
- \param id - window ID
- \param pos - window position
- \param size - window size
- \param style - window style
- \param name - window class name
- */
- wxFlatNotebookBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("Flat Notebook"));
-
- /// Destructor
- ~wxFlatNotebookBase(void);
-
- /// Derived class should override this function to provide the
- /// appropriate PageManager
- virtual wxPageContainerBase* CreatePageContainer();
-
- /// Advances the selection
- /**
- \param bForward - if set to true then selection should be advanced forward otherwise - backward
- */
- void AdvanceSelection(bool bForward);
- /// Apends new notebook page
- /**
- \param windows - window to be appended
- \param caption - tab caption
- \param selected - determines if new page should be selected automatically
- \param imgindex - page image index
- */
- void AddPage(wxWindow* windows, const wxString& caption, const bool selected = false, const int imgindex = -1);
- /// Inserts new notebook page
- /**
- \param index - page index
- \param page - window to be appended
- \param text - tab caption
- \param select - determines if new page should be selected automatically
- \param imgindex - page image index
- */
- bool InsertPage(size_t index, wxWindow* page, const wxString& text, bool select = false, const int imgindex = -1);
- /// Changes the selection from currently visible/selected page to the page given by index.
- /**
- \param page - index of page to be selected
- */
- void SetSelection(size_t page);
- /// Removes the window from the notebook, and destroys the window associated with that notebook page.
- /**
- \param page - index of page to be deleted
- */
- void DeletePage(size_t page);
-
- /// Deletes all notebook pages and destroys all windows associated with pages
- bool DeleteAllPages();
-
- /// Returns the total number of pages in the notebook.
- int GetPageCount() const;
-
- /// Returns the window object associated with selected notebook page.
- wxWindow * GetCurrentPage() const;
-
- /// Returns the window object associated with a notebook page.
- /**
- \param page - page index
- */
- wxWindow * GetPage(size_t page) const;
- /// Returns the page index of the window object.
- /**
- \param win - window object
- */
- int GetPageIndex(wxWindow* win) const;
-
- /// Returns the currently visible/selected notebook page 0 based index.
- int GetSelection() const;
- /// Returns tab header inclination angle of specified page
- /**
- \param page_index - page index
- \param result - pointer to the variable that receives the result
- */
- bool GetPageShapeAngle(int page_index, unsigned int * result);
- /// Sets tab header inclination angle of specified page
- /**
- \param page_index - page index
- \param angle - new value of tab header inclination angle
- */
- void SetPageShapeAngle(int page_index, unsigned int angle);
- /// Sets tab header inclination angle for all pages
- /**
- \param angle - new value of tab header inclination angle
- */
- void SetAllPagesShapeAngle(unsigned int angle);
-
- /// Returns the best size for a page
- wxSize GetPageBestSize();
-
- /// Sets the caption/text of the notebook page
- /**
- \param page - page index
- \param text - new value of tab caption
- */
- bool SetPageText(size_t page, const wxString& text);
-
- /// Removes the window from the notebook, but does not delete the associated window with that notebook page.
- /**
- \param page - page index to be removed
- */
- bool RemovePage(size_t page);
-
- /// Sets the amount of space around each page's icon and label, in pixels.
- /**
- NB: The vertical padding cannot be changed in for wxFlatNotebookBase.
- \param padding - new amount of space around each page's icon and label
- */
- void SetPadding(const wxSize& padding);
- /// Alters the notebook style
- /**
- \param style - new value of notebook style
- */
- virtual void SetWindowStyleFlag(long style);
-
- /// Sets a right click menu to the notebook
- /**
- \param menu - right click menu object
- */
- void SetRightClickMenu(wxMenu* menu);
- /// Returns the page text
- /**
- \param page - page index
- */
- wxString GetPageText(size_t page);
- /// Sets an image index of specified page
- /**
- \param page - page index
- \param imgindex - new image index
- */
- void SetPageImageIndex(size_t page, int imgindex);
- /// Returns an image index of specified page
- /**
- \param page - page index
- */
- int GetPageImageIndex(size_t page);
- /// Sets gradient colors (only applicable when using the wxFNB_FANCY_TABS)
- /**
- \param from - first gradient colour
- \param to - second gradient colour
- \param border - page border colour
- */
- void SetGradientColors(const wxColour& from, const wxColour& to, const wxColour& border);
- /// Sets gradient colors for inactive tabs (only applicable when using the wxFNB_FANCY_TABS)
- /**
- \param from - first gradient colour
- \param to - second gradient colour
- \param border - page border colour
- */
- void SetGradientColorsInactive(const wxColour& from, const wxColour& to, const wxColour& border);
-
- /// Sets first gradient colour
- /**
- \param from - new value of first gradient colour
- */
- void SetGradientColorFrom(const wxColour& from);
-
- /// Sets second gradient colour
- /**
- \param to - new value of second gradient colour
- */
- void SetGradientColorTo(const wxColour& to);
- /// Sets the colour of page border
- /**
- \param border - new value of the colour of page border
- */
- void SetGradientColorBorder(const wxColour& border);
- /**
- \param useBg - true if you want to set bg for tab area
- */
- void SetUseBackground(bool useBg);
- /**
- \param pTabAreaBackgroundImage - image you would like to use.
- */
- void SetTabAreaBackgroundImage(wxBitmap* pTabAreaBackgroundImage);
- /// Sets an image list associated with notebook pages
- /**
- \param imglist - image list object.
- Image list assigned with this method will not be deleted by wxFlatNotebookBase's destructor, you must delete it yourself.
- */
- void SetImageList(wxFlatNotebookImageList * imglist);
-
- /// Returns an image list object associated with wxFlatNotebookBase
- wxFlatNotebookImageList * GetImageList();
-
- /**
- * \brief Drop event handler, to be passed as function pointer to CTextDropTarget class.
- * \param x X coordinate where the drop take place
- * \param y Y coordinate where the drop take place
- * \param nTabPage page index
- * \param wnd_oldContainer pointer to wxPageContainerBase object that contained dragged page
- * \return Drag operation identifier
- */
- wxDragResult OnDropTarget(wxCoord x, wxCoord y, int nTabPage, wxWindow * wnd_oldContainer);
-
- /// Enable / Disable page
- /**
- \param page - page to enable/diable
- \param enabled - set to true to enable the tab, false otherwise
- */
- void Enable(size_t page, bool enabled);
-
- /// Return Returns true if if the page is enabled
- /**
- \param page - page index
- */
- bool GetEnabled(size_t page);
-
- /// Set the active tab text
- /**
- \param textColour - the active tab text colour
- */
- void SetActiveTabTextColour(const wxColour& textColour);
- // Set the fancy tab border
- /**
- \param brWidth - border width
- */
- void SetTabBorderWidth(int brWidth);
-
- /// Gets first gradient colour
- const wxColour& GetGradientColorFrom();
-
- /// Gets second gradient colour
- const wxColour& GetGradientColorTo();
-
- /// Gets the tab border colour
- const wxColour& SetGradientColorBorder();
-
- /// Get the active tab text
- const wxColour& GetActiveTabTextColour();
-
- /// Get the non-active tab text color
- const wxColour& GetNonActiveTabTextColour();
-
- /// Set the non-active tab text color
- void SetNonActiveTabTextColour(const wxColour& color);
-
- /// Return the tab area panel
- wxPanel* GetTabArea() { return (wxPanel*)m_pages; }
-
- /// Get the tab area background colour
- const wxColour& GetTabAreaColour();
-
- /// Set the tab area background colour
- void SetTabAreaColour(const wxColour& color);
-
- /// Get the active tab color
- const wxColour& GetActiveTabColour();
-
- /// Set the active tab color
- void SetActiveTabColour(const wxColour& color);
-
- int GetPadding() { return m_nPadding; }
-protected:
- /// Initialization function, called internally
- virtual void Init();
- wxPageContainerBase *m_pages;
-
-private:
- /// Internal flag to force selection of page,
- /// even if this page is disabled.
- /// used incase such that the book itself need to update its selection.
- /// e.g. after DeletePage()
- bool m_bForceSelection;
-
- wxBoxSizer* m_mainSizer;
-
- /// vector of all the windows associated with the notebook pages.
- std::vector<wxWindow*> m_windows;
- wxFNBDropTarget<wxFlatNotebookBase> *m_pDropTarget;
- int m_nFrom;
- int m_nPadding;
-
- DECLARE_DYNAMIC_CLASS(wxFlatNotebookBase)
- DECLARE_EVENT_TABLE()
- void OnNavigationKey(wxNavigationKeyEvent& event);
-};
-
-/**
-* \brief Contains parameters of notebook page
-*/
-class wxPageInfo
-{
-private:
- // Members
- /// Page caption
- wxString m_strCaption;
-
- /// Page position
- wxPoint m_pos;
-
- /// Page size
- wxSize m_size;
-
- /// Page region
- wxRegion m_region;
-
- /// Angle for painting tab
- unsigned int m_TabAngle;
-
- /// Page image index
- int m_ImageIndex;
-
- /// Page enable/disabled flag
- bool m_bEnabled;
-
- /// Tab 'x' button rectangle
- wxRect m_xRect;
-
-public:
-
- /// Default constructor
- wxPageInfo(): m_strCaption(wxEmptyString), m_TabAngle(0), m_ImageIndex(-1), m_bEnabled(true){};
- /// Parametrized constructor
- /**
- \param caption - page caption
- \param imgindex - image index
- */
- wxPageInfo(const wxString& caption, int imgindex) :
- m_strCaption(caption), m_pos(-1, -1), m_size(-1, -1), m_TabAngle(0), m_ImageIndex(imgindex), m_bEnabled(true){}
- /// Destructor
- ~wxPageInfo(){};
-
- /// Sets page caption
- /**
- \param value - new page caption
- */
- void SetCaption(wxString value) {m_strCaption = value;}
-
- ///Returns page caption
- wxString GetCaption() {return m_strCaption;}
-
- /// Sets page position
- /**
- \param value - new page position
- */
- void SetPosition(wxPoint value) {m_pos = value;}
-
- ///Returns page position
- const wxPoint & GetPosition() {return m_pos;}
-
- /// Sets page size
- /**
- \param value - new page size
- */
- void SetSize(wxSize value) {m_size = value;}
-
- ///Returns page size
- const wxSize & GetSize() {return m_size;}
-
- /// Sets the tab header inclination angle
- /**
- \param value - new tab header inclination angle
- */
- void SetTabAngle(unsigned int value) {m_TabAngle = std::min((unsigned int)(45), (unsigned int)(value));}
-
- /// Returns an inclination of tab header borders
- unsigned int GetTabAngle() {return m_TabAngle;}
- /// Sets page image index
- /**
- \param value - new image index
- */
- void SetImageIndex(int value) {m_ImageIndex = value;}
-
- /// Returns an image index
- int GetImageIndex() {return m_ImageIndex;}
-
- /// Return true if the page is enabled
- bool GetEnabled() { return m_bEnabled; }
-
- /// Set the page enable/disable flag
- /**
- \param enabled - new page enable status
- */
- void Enable(bool enabled) { m_bEnabled = enabled; }
-
- /// Set the page region
- /**
- \param n - number of points
- \param points - array of points that construct the region
- */
- void SetRegion(const size_t n, const wxPoint points[]) { m_region = wxRegion(n, points); }
-
- /// Get the page region
- wxRegion& GetRegion() { return m_region ; }
-
- /// Set the 'x' button rectangle area
- /**
- \param xrect - the 'x' button rectangle
- */
- void SetXRect(const wxRect& xrect) { m_xRect = xrect; }
-
- /// Get the 'x' button rectangle
- wxRect& GetXRect() { return m_xRect; }
-};
-
-/// Button status
-enum
-{
- wxFNB_BTN_PRESSED,
- wxFNB_BTN_HOVER,
- wxFNB_BTN_NONE
-};
-
-/// Hit Test results
-enum
-{
- wxFNB_TAB, /// On a tab
- wxFNB_X, /// On the X button
- wxFNB_TAB_X, /// On the 'X' button (tab's X button)
- wxFNB_LEFT_ARROW, /// On the rotate left arrow button
- wxFNB_RIGHT_ARROW, /// On the rotate right arrow button
- wxFNB_NOWHERE /// Anywhere else
-};
-
-/**
-* \brief Notebook page
-*/
-class wxPageContainerBase : public wxPanel
-{
-protected:
-
- friend class wxFlatNotebookBase;
- wxFlatNotebookImageList * m_ImageList;
-
-public:
- /// Parametrized constructor
- /**
- \param parent - parent window
- \param id - window ID
- \param pos - window position
- \param size - window size
- \param style - window style
- */
- wxPageContainerBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0);
- /// Destructor
- virtual ~wxPageContainerBase(void);
-
- /// Sets an image list associated with notebook pages
- /**
- \param imglist - image list object.
- Image list assigned with this method will not be deleted by wxFlatNotebookBase's destructor, you must delete it yourself.
- */
- virtual void SetImageList(wxFlatNotebookImageList * imglist) {m_ImageList = imglist;}
-
- /// Returns an image list object associated with wxFlatNotebookBase
- virtual wxFlatNotebookImageList * GetImageList() {return m_ImageList;}
-
- /// Apends new notebook page
- /**
- \param caption - tab caption
- \param selected - determines if new page should be selected automatically
- \param imgindex - page image index
- */
- virtual void AddPage(const wxString& caption, const bool selected = false, const int imgindex = -1);
-
- /// Inserts new notebook page
- /**
- \param index - page index
- \param page - window to be appended
- \param text - tab caption
- \param select - determines if new page should be selected automatically
- \param imgindex - page image index
- */
- virtual bool InsertPage(size_t index, wxWindow* page, const wxString& text, bool select = false, const int imgindex = -1);
-
- /// Changes the selection from currently visible/selected page to the page given by index.
- /**
- \param page - index of page to be selected
- */
- virtual void SetSelection(size_t page);
-
- /// Returns the current selection page index
- virtual int GetSelection() { return m_iActivePage; }
-
- /// Advances the selection
- /**
- \param bForward - if set to true then selection should be advanced forward otherwise - backward
- */
- virtual void AdvanceSelection(bool bForward);
-
- /// Return the number of pages
- virtual size_t GetPageCount() { return m_pagesInfoVec.size(); }
-
- /// Returns the page caption
- /**
- \param page - page index
- */
- virtual wxString GetPageText(size_t page) { return m_pagesInfoVec[page].GetCaption(); }
-
- /// Set the caption of the page
- /**
- \param page - page index
- \param text - new page caption
- */
- virtual bool SetPageText(size_t page, const wxString& text) { m_pagesInfoVec[page].SetCaption(text); return true; }
-
- /// Sets an image index of specified page
- /**
- \param page - page index
- \param imgindex - new image index
- */
- virtual void SetPageImageIndex(size_t page, int imgindex);
-
- /// sets if tabs are using background
- /**
- \param useBg - bool
- */
- virtual void SetUseBackground(bool useBg);
-
- /// Sets the background area for the tab area
- /**
- \param pTabAreaBackgroundImage - bitmap object.
- */
- virtual void SetTabAreaBackgroundImage(wxBitmap* pTabAreaBackgroundImage);
-
- /// Returns an image index of specified page
- /**
- \param page - page index
- */
- virtual int GetPageImageIndex(size_t page);
-
- /// Enable / Disable page
- /**
- \param page - page to enable/diable
- \param enabled - set to true to enable the tab, false otherwise
- */
- virtual void Enable(size_t page, bool enabled);
-
- /// Return Returns true if if the page is enabled
- /**
- \param page - page index
- */
- virtual bool GetEnabled(size_t page);
-
- DECLARE_EVENT_TABLE()
- // Event handlers
- virtual void OnPaint(wxPaintEvent& event);
- virtual void OnSize(wxSizeEvent& WXUNUSED(event));
- virtual void OnMouseMove(wxMouseEvent& event);
- virtual void OnLeftDown(wxMouseEvent& event);
- virtual void OnLeftUp(wxMouseEvent& event);
- virtual void OnRightDown(wxMouseEvent& event);
- virtual void OnMiddleDown(wxMouseEvent& event);
- virtual void OnEraseBackground(wxEraseEvent& WXUNUSED(event)) { }
- virtual void OnMouseLeave(wxMouseEvent& event);
- virtual void OnMouseEnterWindow(wxMouseEvent& event);
-
-protected:
- /// Check whether the style is set to default
- virtual bool IsDefaultTabs();
-
- /// Some styles does not allow drawing X on the active tab
- /// If you dont want to allow it, override this function
- virtual bool CanDrawXOnTab() { return true; }
-
- /// Return the button area space
- virtual int GetButtonAreaWidth(void);
-
- /// File a tab with gradient color
- virtual void FillGradientColor(wxBufferedDC& dc, const wxRect& rect);
-
- /// File a tab with gradient color
- virtual void FillGradientColorInactive(wxBufferedDC& dc, const wxRect& rect);
-
- /// Return true if page is visible
- virtual bool IsTabVisible(size_t page);
-
- /// Return if pt is anywhere on a tab, button or anywhere else
- virtual int HitTest(const wxPoint& pt, wxPageInfo& pageInfo, int &tabIdx);
-
- /// Display tool tip when mouse is hovering a tab
- virtual void ShowTabTooltip(int tabIdx);
-
- /// A wrapper from calling the DoDeletePage()
- virtual void DeletePage(size_t page);
-
- /// Remove all pages from the container (it also deletes them)
- virtual void DeleteAllPages();
-
- /// Perform the actual deletion of a tab from the container
- /// The window is also deleted using this function
- virtual void DoDeletePage(size_t page);
-
- /// Preform the actual page selection
- virtual void DoSetSelection(size_t page);
-
- /// Draw right arrow button to the right area of the tabs
- virtual void DrawRightArrow(wxDC &dc);
-
- /// Draw left arrow button to the right area of the tabs
- virtual void DrawLeftArrow (wxDC &dc);
-
- /// Draw 'x' button to the right area of the tabs
- virtual void DrawX (wxDC &dc);
-
- /// Draw 'x' button on a tab at position rect.x rect.y
- virtual void DrawTabX(wxDC &dc, const wxRect &rect, const int& tabIdx);
-
- /// Return the index of the last visible index
- virtual int GetLastVisibleTab();
-
- /// Return the number of tabs that can be scrolled left
- /// starting from the first visible tab (i.e. m_nFrom)
- virtual int GetNumTabsCanScrollLeft();
-
- /// Return the number of visible tabs
- virtual int GetNumOfVisibleTabs();
-
- /**
- * \brief Drop event handler, to be passed as function pointer to CTextDropTarget class.
- * \param x X coordinate where the drop take place
- * \param y Y coordinate where the drop take place
- * \param nTabPage page index
- * \param wnd_oldContainer pointer to wxPageContainerBase object that contained dragged page
- * \return Drag operation identifier
- */
- virtual wxDragResult OnDropTarget(wxCoord x, wxCoord y, int nTabPage, wxWindow * wnd_oldContainer);
-
- /**
- * \brief Moves the tab page from one location to another
- * \param nMove The index of the tab page to be moved.
- * \param nMoveTo The index for the tab page, where it has to be moved
- */
- virtual void MoveTabPage(int nMove, int nMoveTo);
-
- /// Check whether page can fit to the current
- /// screen or a scrolling is required
- /**
- \param page - page index
- */
- virtual bool CanFitToScreen(size_t page);
-
- /// Draw a bottom line for the tabs area
- virtual void DrawTabsLine(wxDC& dc, const wxRect& rect);
-
- // Functions
- void DrawVC71Tab(wxBufferedPaintDC& dc, const int& posx, const int &tabIdx, const bool& hasImage, const int &tabWidth, const int &tabHeight);
- void DrawFancyTab(wxBufferedPaintDC& dc, const int& posx, const int &tabIdx, const bool& hasImage, const int &tabWidth, const int &tabHeight);
- void DrawStandardTab(wxBufferedPaintDC& dc, const int& posx, const int &tabIdx, const bool& hasImage, const int &tabWidth, const int &tabHeight);
-
- // Navigation buttons position
- int GetLeftButtonPos();
- int GetRightButtonPos();
- int GetXPos();
- int GetButtonsAreaLength();
-
-protected:
-
- std::vector<wxPageInfo> m_pagesInfoVec;
- int m_iActivePage;
- int m_nFrom;
-
- /// Drop target for enabling drag'n'drop of tabs
- wxFNBDropTarget<wxPageContainerBase> *m_pDropTarget;
-
- /// Pointer to the parent window
- wxWindow *m_pParent;
-
- /// The right click menu
- wxMenu* m_pRightClickMenu;
-
- /// Gradient colors
- wxColour m_colorFrom, m_colorTo, m_colorBorder, m_colorFromInactive, m_colorToInactive, m_colorBorderInactive, m_activeTextColor, m_nonActiveTextColor, m_tabAreaColor, m_activeTabColor;
-
- /// Use Background
- bool m_useBg;
-
- /// Tab Area Background Image
- wxBitmap m_TabAreaBackgroundImage;
-
- /// Tab Border width
- int m_tabBorderWidth;
-
- /// X,>,< buttons status, can be one of
- /// - Pressed
- /// - Hover
- /// - None
- int m_nXButtonStatus, m_nLeftButtonStatus, m_nRightButtonStatus, m_nTabXButtonStatus;
-
- /// holds the button id in case a left click is done on one of them
- int m_nLeftClickZone;
-};
-
-/**
-* \brief Holds information about events associated with wxFlatNotebookBase objects
-*/
-class wxFlatNotebookEvent : public wxNotifyEvent
-{
- DECLARE_DYNAMIC_CLASS(wxFlatNotebookEvent)
- size_t sel, oldsel;
-
-public:
- /// Constructor
- /**
- \param commandType - event type
- \param winid - window ID
- \param nSel - current selection
- \param nOldSel - old selection
- */
- wxFlatNotebookEvent(wxEventType commandType = wxEVT_NULL, int winid = 0, int nSel = -1, int nOldSel = -1)
- : wxNotifyEvent(commandType, winid), sel(nSel), oldsel(nOldSel)
- {}
- /// Sets the value of current selection
- /**
- \param s - index of currently selected page
- */
- void SetSelection(int s) { sel = s; }
- /// Sets the value of previous selection
- /**
- \param s - index of previously selected page
- */
- void SetOldSelection(int s) { oldsel = s; }
- /// Returns the index of currently selected page
- int GetSelection() { return (int)sel; }
- /// Returns the index of previously selected page
- int GetOldSelection() { return (int)oldsel; }
-};
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Default implementation of the wxFlatNotebook
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-class wxFlatNotebook : public wxFlatNotebookBase
-{
-public:
- /**
- *
- * \param parent parent window
- * \param id window ID
- * \param pos window position
- * \param size window size
- * \param style window style
- * \param name window class name
- * \return
- */
- wxFlatNotebook(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("FlatNotebook")) :
- wxFlatNotebookBase(parent, id, pos, size, style, name)
- {
- m_pages = CreatePageContainer();
- Init();
- }
-
- /// Destructor
- ~wxFlatNotebook(void)
- {}
-};
-
-#define wxFN_IMPEXP
-
-BEGIN_DECLARE_EVENT_TYPES()
- DECLARE_EXPORTED_EVENT_TYPE(wxFN_IMPEXP, wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGED, 50000)
- DECLARE_EXPORTED_EVENT_TYPE(wxFN_IMPEXP, wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGING, 50001)
- DECLARE_EXPORTED_EVENT_TYPE(wxFN_IMPEXP, wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSING, 50002)
- DECLARE_EXPORTED_EVENT_TYPE(wxFN_IMPEXP, wxEVT_COMMAND_FLATNOTEBOOK_CONTEXT_MENU, 50003)
- DECLARE_EXPORTED_EVENT_TYPE(wxFN_IMPEXP, wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSED, 50004)
-END_DECLARE_EVENT_TYPES()
-
-typedef void (wxEvtHandler::*wxFlatNotebookEventFunction)(wxFlatNotebookEvent&);
-
-#define wxFlatNotebookEventHandler(func) \
- (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFlatNotebookEventFunction, &func)
-
-#define EVT_FLATNOTEBOOK_PAGE_CHANGED(winid, fn) \
- wx__DECLARE_EVT1(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGED, winid, wxFlatNotebookEventHandler(fn))
-
-#define EVT_FLATNOTEBOOK_PAGE_CHANGING(winid, fn) \
- wx__DECLARE_EVT1(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CHANGING, winid, wxFlatNotebookEventHandler(fn))
-
-#define EVT_FLATNOTEBOOK_PAGE_CLOSING(winid, fn) \
- wx__DECLARE_EVT1(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSING, winid, wxFlatNotebookEventHandler(fn))
-
-#define EVT_FLATNOTEBOOK_CONTEXT_MENU(winid, fn) \
- wx__DECLARE_EVT1(wxEVT_COMMAND_FLATNOTEBOOK_CONTEXT_MENU, winid, wxFlatNotebookEventHandler(fn))
-
-#define EVT_FLATNOTEBOOK_PAGE_CLOSED(winid, fn) \
- wx__DECLARE_EVT1(wxEVT_COMMAND_FLATNOTEBOOK_PAGE_CLOSED, winid, wxFlatNotebookEventHandler(fn))
-
-
-#endif // WXFLATNOTEBOOK_H
diff --git a/clientgui/common/wxFlatNotebookImages.h b/clientgui/common/wxFlatNotebookImages.h
deleted file mode 100644
index 9796141..0000000
--- a/clientgui/common/wxFlatNotebookImages.h
+++ /dev/null
@@ -1,466 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// Name: wxFlatNotebook.cpp
-// Purpose: generic implementation of flat style notebook class.
-// Author: Eran Ifrah <eranif at bezeqint.net>
-// Modified by: Priyank Bolia <soft at priyank.in>
-// Created: 30/12/2005
-// Modified: 01/01/2006
-// Copyright: Eran Ifrah (c)
-// Licence: wxWindows license <http://www.wxwidgets.org/licence3.txt>
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef WXFLATNOTEBOOKIMAGES_H
-#define WXFLATNOTEBOOKIMAGES_H
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// XPM Images required by this control
-//
-///////////////////////////////////////////////////////////////////////////////
-
-namespace FNB
-{
- ////////////////////////////////////////////////////////////
- // Images used by the control
- ////////////////////////////////////////////////////////////
- /* XPM */
- static const char *left_arrow_disabled_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #555555",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "````````````````",
- "````````````````",
- "````````.```````",
- "```````..```````",
- "``````.`.```````",
- "`````.``.```````",
- "````.```.```````",
- "`````.``.```````",
- "``````.`.```````",
- "```````..```````",
- "````````.```````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *x_button_pressed_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #4766e0",
- "# c #9e9ede",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "`..............`",
- "`.############.`",
- "`.############.`",
- "`.############.`",
- "`.###aa####aa#.`",
- "`.####aa##aa##.`",
- "`.#####aaaa###.`",
- "`.######aa####.`",
- "`.#####aaaa###.`",
- "`.####aa##aa##.`",
- "`.###aa####aa#.`",
- "`.############.`",
- "`..............`",
- "````````````````",
- "````````````````"
- };
-
-
- /* XPM */
- static const char *left_arrow_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #555555",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "````````````````",
- "````````````````",
- "````````.```````",
- "```````..```````",
- "``````...```````",
- "`````....```````",
- "````.....```````",
- "`````....```````",
- "``````...```````",
- "```````..```````",
- "````````.```````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *x_button_hilite_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #4766e0",
- "# c #c9dafb",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "`..............`",
- "`.############.`",
- "`.############.`",
- "`.##aa####aa##.`",
- "`.###aa##aa###.`",
- "`.####aaaa####.`",
- "`.#####aa#####.`",
- "`.####aaaa####.`",
- "`.###aa##aa###.`",
- "`.##aa####aa##.`",
- "`.############.`",
- "`.############.`",
- "`..............`",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *x_button_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #555555",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````..````..````",
- "`````..``..`````",
- "``````....``````",
- "```````..```````",
- "``````....``````",
- "`````..``..`````",
- "````..````..````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *left_arrow_pressed_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #4766e0",
- "# c #9e9ede",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "`..............`",
- "`.############.`",
- "`.############.`",
- "`.#######a####.`",
- "`.######aa####.`",
- "`.#####aaa####.`",
- "`.####aaaa####.`",
- "`.###aaaaa####.`",
- "`.####aaaa####.`",
- "`.#####aaa####.`",
- "`.######aa####.`",
- "`.#######a####.`",
- "`..............`",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *left_arrow_hilite_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #4766e0",
- "# c #c9dafb",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "`..............`",
- "`.############.`",
- "`.######a#####.`",
- "`.#####aa#####.`",
- "`.####aaa#####.`",
- "`.###aaaa#####.`",
- "`.##aaaaa#####.`",
- "`.###aaaa#####.`",
- "`.####aaa#####.`",
- "`.#####aa#####.`",
- "`.######a#####.`",
- "`.############.`",
- "`..............`",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *right_arrow_disabled_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #555555",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "````````````````",
- "````````````````",
- "```````.````````",
- "```````..```````",
- "```````.`.``````",
- "```````.``.`````",
- "```````.```.````",
- "```````.``.`````",
- "```````.`.``````",
- "```````..```````",
- "```````.````````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *right_arrow_hilite_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #4766e0",
- "# c #c9dafb",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "`..............`",
- "`.############.`",
- "`.####a#######.`",
- "`.####aa######.`",
- "`.####aaa#####.`",
- "`.####aaaa####.`",
- "`.####aaaaa###.`",
- "`.####aaaa####.`",
- "`.####aaa#####.`",
- "`.####aa######.`",
- "`.####a#######.`",
- "`.############.`",
- "`..............`",
- "````````````````",
- "````````````````"
- };
-
- /* XPM */
- static const char *right_arrow_pressed_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #4766e0",
- "# c #9e9ede",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "`..............`",
- "`.############.`",
- "`.############.`",
- "`.#####a######.`",
- "`.#####aa#####.`",
- "`.#####aaa####.`",
- "`.#####aaaa###.`",
- "`.#####aaaaa##.`",
- "`.#####aaaa###.`",
- "`.#####aaa####.`",
- "`.#####aa#####.`",
- "`.#####a######.`",
- "`..............`",
- "````````````````",
- "````````````````"
- };
-
-
- /* XPM */
- static const char *right_arrow_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 16 16 8 1",
- /* colors */
- "` c #008080",
- ". c #555555",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "````````````````",
- "````````````````",
- "````````````````",
- "```````.````````",
- "```````..```````",
- "```````...``````",
- "```````....`````",
- "```````.....````",
- "```````....`````",
- "```````...``````",
- "```````..```````",
- "```````.````````",
- "````````````````",
- "````````````````",
- "````````````````",
- "````````````````"
- };
-
- const int tab_x_size = 9;
-
- /* XPM */
- static const char *tab_x_button_pressed_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 9 9 8 1",
- /* colors */
- "` c #4766e0",
- ". c #9e9ede",
- "# c #555555",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "`````````",
- "`.......`",
- "`.......`",
- "`..#...#`",
- "`...#.#.`",
- "`....#..`",
- "`...#.#.`",
- "`..#...#`",
- "`````````"
- };
-
- /* XPM */
- static const char *tab_x_button_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 9 9 8 1",
- /* colors */
- "` c #555555",
- ". c #FFFFFF",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "`````````",
- "`.......`",
- "`.`...`.`",
- "`..`.`..`",
- "`...`...`",
- "`..`.`..`",
- "`.`...`.`",
- "`.......`",
- "`````````"
- };
-
- /* XPM */
- static const char *tab_x_button_hilite_xpm[] = {
- /* width height num_colors chars_per_pixel */
- " 9 9 8 1",
- /* colors */
- "` c #4766e0",
- ". c #c9dafb",
- "# c #000000",
- "a c #000000",
- "b c #000000",
- "c c #000000",
- "d c #000000",
- "e c #000000",
- /* pixels */
- "`````````",
- "`.......`",
- "`.#...#.`",
- "`..#.#..`",
- "`...#...`",
- "`..#.#..`",
- "`.#...#.`",
- "`.......`",
- "`````````"
- };
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// End of XPM Images
-//
-//////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-#endif // WXFLATNOTEBOOKIMAGES_H
diff --git a/clientgui/common/wxPieCtrl.cpp b/clientgui/common/wxPieCtrl.cpp
index 1b297d8..077b2fa 100644
--- a/clientgui/common/wxPieCtrl.cpp
+++ b/clientgui/common/wxPieCtrl.cpp
@@ -74,6 +74,7 @@ wxPieCtrl::wxPieCtrl(wxWindow * parent, wxWindowID id, wxPoint pos,
wxPieCtrl::~wxPieCtrl() {
#ifdef __WXMAC__
+ m_fauxResourcesView = NULL;
RemoveMacAccessibilitySupport();
#endif
}
@@ -136,6 +137,9 @@ void wxPieCtrl::OnSize(wxSizeEvent & /*event*/)
{
RecreateCanvas();
Refresh();
+#ifdef __WXMAC__
+ ResizeMacAccessibilitySupport();
+#endif
}
void wxPieCtrl::OnEraseBackground(wxEraseEvent & /*event*/)
diff --git a/clientgui/common/wxPieCtrl.h b/clientgui/common/wxPieCtrl.h
index bd0eccc..caad080 100644
--- a/clientgui/common/wxPieCtrl.h
+++ b/clientgui/common/wxPieCtrl.h
@@ -64,6 +64,8 @@ WX_DECLARE_OBJARRAY(wxPiePart, wxPieSeries);
/// The component for drawing pie diagrams
class wxPieCtrl : public wxWindow
{
+using wxWindow::SetTransparent;
+
protected:
int m_padding;
wxBitmap m_CanvasBitmap;
@@ -150,9 +152,10 @@ public:
#ifdef __WXMAC__
private:
void SetupMacAccessibilitySupport();
+ void ResizeMacAccessibilitySupport();
void RemoveMacAccessibilitySupport();
- EventHandlerRef m_pPieCtrlAccessibilityEventHandlerRef;
+ void* m_fauxResourcesView;
#endif
};
diff --git a/clientgui/gtk/taskbarex.cpp b/clientgui/gtk/taskbarex.cpp
index 4259c10..fb2930d 100644
--- a/clientgui/gtk/taskbarex.cpp
+++ b/clientgui/gtk/taskbarex.cpp
@@ -88,7 +88,7 @@ extern "C" {
wxTaskBarIconExEvent eventUserClicked(wxEVT_TASKBAR_BALLOON_USERCLICK, taskBarIcon);
taskBarIcon->AddPendingEvent(eventUserClicked);
} else {
- wxTaskBarIconExEvent eventTimeout(wxEVT_TASKBAR_BALLOON_TIMEOUT, taskBarIcon);
+ wxTaskBarIconExEvent eventTimeout(wxEVT_TASKBAR_BALLOON_USERTIMEOUT, taskBarIcon);
taskBarIcon->AddPendingEvent(eventTimeout);
}
@@ -109,7 +109,7 @@ DEFINE_EVENT_TYPE( wxEVT_TASKBAR_SELECT )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_KEY_SELECT )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE )
-DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT )
+DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERTIMEOUT )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN )
diff --git a/clientgui/gtk/taskbarex.h b/clientgui/gtk/taskbarex.h
index 379147a..dc8189d 100644
--- a/clientgui/gtk/taskbarex.h
+++ b/clientgui/gtk/taskbarex.h
@@ -109,7 +109,7 @@ BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_KEY_SELECT, 1560 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW, 1561 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE, 1562 )
- DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT, 1563 )
+ DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERTIMEOUT, 1563 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK, 1564 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN, 1565 )
END_DECLARE_EVENT_TYPES()
@@ -128,7 +128,7 @@ typedef void (wxEvtHandler::*wxTaskBarIconExEventFunction)(wxTaskBarIconExEvent&
#define EVT_TASKBAR_KEY_SELECT(fn) wx__DECLARE_TASKBAREXEVT(KEY_SELECT, fn)
#define EVT_TASKBAR_BALLOON_SHOW(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_SHOW, fn)
#define EVT_TASKBAR_BALLOON_HIDE(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_HIDE, fn)
-#define EVT_TASKBAR_BALLOON_TIMEOUT(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_TIMEOUT, fn)
+#define EVT_TASKBAR_BALLOON_USERTIMEOUT(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_USERTIMEOUT, fn)
#define EVT_TASKBAR_CONTEXT_USERCLICK(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_USERCLICK, fn)
#define EVT_TASKBAR_SHUTDOWN(fn) wx__DECLARE_TASKBAREXEVT(SHUTDOWN, fn)
diff --git a/clientgui/msw/taskbarex.cpp b/clientgui/msw/taskbarex.cpp
index 86c9fce..7f20aa6 100644
--- a/clientgui/msw/taskbarex.cpp
+++ b/clientgui/msw/taskbarex.cpp
@@ -55,7 +55,7 @@ DEFINE_EVENT_TYPE( wxEVT_TASKBAR_SELECT )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_KEY_SELECT )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE )
-DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT )
+DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERTIMEOUT )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN )
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_APPRESTORE )
@@ -304,13 +304,7 @@ WXHWND wxTaskBarIconEx::CreateTaskBarWindow( wxChar* szWindowTitle )
bool wxTaskBarIconEx::IsBalloonsSupported()
{
- wxInt32 iMajor = 0, iMinor = 0;
- if ( wxWINDOWS_NT == wxGetOsVersion( &iMajor, &iMinor ) )
- {
- if ( (6 >= iMajor) || ((5 >= iMajor) && (0 <= iMinor)) )
- return true;
- }
- return false;
+ return true;
}
long wxTaskBarIconEx::WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam )
@@ -394,7 +388,7 @@ long wxTaskBarIconEx::WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wP
break;
case NIN_BALLOONTIMEOUT:
- eventType = wxEVT_TASKBAR_BALLOON_TIMEOUT;
+ eventType = wxEVT_TASKBAR_BALLOON_USERTIMEOUT;
break;
case NIN_BALLOONUSERCLICK:
diff --git a/clientgui/msw/taskbarex.h b/clientgui/msw/taskbarex.h
index 267ba65..b382209 100644
--- a/clientgui/msw/taskbarex.h
+++ b/clientgui/msw/taskbarex.h
@@ -116,7 +116,7 @@ BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_KEY_SELECT, 1560 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW, 1561 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE, 1562 )
- DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT, 1563 )
+ DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERTIMEOUT, 1563 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK, 1564 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN, 1565 )
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_APPRESTORE, 1566 )
@@ -136,7 +136,7 @@ typedef void (wxEvtHandler::*wxTaskBarIconExEventFunction)(wxTaskBarIconExEvent&
#define EVT_TASKBAR_KEY_SELECT(fn) wx__DECLARE_TASKBAREXEVT(KEY_SELECT, fn)
#define EVT_TASKBAR_BALLOON_SHOW(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_SHOW, fn)
#define EVT_TASKBAR_BALLOON_HIDE(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_HIDE, fn)
-#define EVT_TASKBAR_BALLOON_TIMEOUT(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_TIMEOUT, fn)
+#define EVT_TASKBAR_BALLOON_USERTIMEOUT(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_USERTIMEOUT, fn)
#define EVT_TASKBAR_CONTEXT_USERCLICK(fn) wx__DECLARE_TASKBAREXEVT(BALLOON_USERCLICK, fn)
#define EVT_TASKBAR_SHUTDOWN(fn) wx__DECLARE_TASKBAREXEVT(SHUTDOWN, fn)
#define EVT_TASKBAR_APPRESTORE(fn) wx__DECLARE_TASKBAREXEVT(APPRESTORE, fn)
diff --git a/clientgui/res/templates/icons/Design Template/Design Notes.txt b/clientgui/res/templates/icons/Design Template/Design Notes.txt
index 07a4975..13de450 100644
--- a/clientgui/res/templates/icons/Design Template/Design Notes.txt
+++ b/clientgui/res/templates/icons/Design Template/Design Notes.txt
@@ -78,4 +78,4 @@ Needed XPM sizes (with NO transparency!):
40x40 (for Simple View Default Project icon)
...Note: Rom says he DOES want "Disconnected" and "Suspended" versions.
...Ended up using 128 transparency lock, on images that excluded white bordering.
-...And, for the 40x40, created a white-background version
+...And, for the 40x40, created a white-background version
\ No newline at end of file
diff --git a/clientgui/resource.h b/clientgui/resource.h
index 4470166..ecc55ad 100644
--- a/clientgui/resource.h
+++ b/clientgui/resource.h
@@ -2,8 +2,7 @@
// Microsoft Visual C++ generated include file.
// Used by BOINCGUIApp.rc
//
-#define APP_ICON 0
-#define APP_ICON2 1
+#define ICON_BOINCGUIAPP 0
// Next default values for new objects
//
diff --git a/clientgui/sg_BoincSimpleFrame.cpp b/clientgui/sg_BoincSimpleFrame.cpp
old mode 100644
new mode 100755
index 8532c26..22aa497
--- a/clientgui/sg_BoincSimpleFrame.cpp
+++ b/clientgui/sg_BoincSimpleFrame.cpp
@@ -21,9 +21,6 @@
#endif
#include "stdwx.h"
-#ifdef __WXMAC__
-#include "MacAccessiblity.h"
-#endif
#include "diagnostics.h"
#include "str_util.h"
#include "mfile.h"
@@ -42,7 +39,6 @@
#include "version.h"
#include "sg_BoincSimpleFrame.h"
-#include "sg_CustomControls.h"
#include "sg_TaskPanel.h"
#include "sg_ProjectPanel.h"
#include "sg_DlgMessages.h"
@@ -50,9 +46,18 @@
#include "DlgEventLog.h"
#include "DlgAbout.h"
#include "DlgOptions.h"
+#include "DlgDiagnosticLogFlags.h"
+
+
+#ifdef __WXMAC__
+#include "util.h"
+
+static int compareOSVersionTo(int toMajor, int toMinor);
+#endif
// Workaround for Linux refresh problem
-#if (defined(__WXMSW__) || defined(__WXMAC__))
+// and Mac keyboard navigation problem
+#ifdef __WXMSW__
#define REFRESH_WAIT 0
#else
#define REFRESH_WAIT 1
@@ -71,11 +76,16 @@ BEGIN_EVENT_TABLE(CSimpleFrame, CBOINCBaseFrame)
EVT_FRAME_NOTIFICATION(CSimpleFrame::OnNotification)
EVT_MENU(ID_PREFERENCES, CSimpleFrame::OnPreferences)
EVT_MENU(ID_SGOPTIONS, CSimpleFrame::OnOptions)
+ EVT_MENU(ID_SGDIAGNOSTICLOGFLAGS, CSimpleFrame::OnDiagnosticLogFlags)
EVT_MENU(ID_HELPBOINC, CSimpleFrame::OnHelpBOINC)
EVT_MENU(ID_HELPBOINCMANAGER, CSimpleFrame::OnHelpBOINC)
EVT_MENU(ID_HELPBOINCWEBSITE, CSimpleFrame::OnHelpBOINC)
EVT_MENU(wxID_ABOUT, CSimpleFrame::OnHelpAbout)
EVT_MENU(ID_EVENTLOG, CSimpleFrame::OnEventLog)
+ EVT_MOVE(CSimpleFrame::OnMove)
+#ifdef __WXMAC__
+ EVT_MENU(wxID_PREFERENCES, CSimpleFrame::OnPreferences)
+#endif
END_EVENT_TABLE()
@@ -117,6 +127,12 @@ CSimpleFrame::CSimpleFrame(wxString title, wxIconBundle* icons, wxPoint position
strMenuDescription
);
+#ifdef __WXMAC__
+ menuFile->Append(
+ wxID_PREFERENCES
+ );
+#endif
+
// Skins submenu
m_pSubmenuSkins = new wxMenu;
@@ -205,7 +221,7 @@ CSimpleFrame::CSimpleFrame(wxString title, wxIconBundle* icons, wxPoint position
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strMenuName.Printf(
- _("%s &website"),
+ _("%s &web site"),
pSkinAdvanced->GetApplicationShortName().c_str()
);
// %s is the application name
@@ -264,22 +280,22 @@ CSimpleFrame::CSimpleFrame(wxString title, wxIconBundle* icons, wxPoint position
#ifdef __WXMAC__
m_pMenubar->MacInstallMenuBar();
MacLocalizeBOINCMenu();
-
- // Enable Mac OS X's standard Preferences menu item (handled in MacSysMenu.cpp)
- EnableMenuCommand(NULL, kHICommandPreferences);
+
+ // Mac needs a short delay to ensure that controls are
+ // created in proper order to allow keyboard navigation
+ m_iFrameRefreshRate = 1; // 1 millisecond
+ m_pPeriodicRPCTimer->Start(m_iFrameRefreshRate);
#endif
m_Shortcuts[0].Set(wxACCEL_NORMAL, WXK_HELP, ID_HELPBOINCMANAGER);
-#ifdef __WXMAC__
- m_Shortcuts[1].Set(wxACCEL_CMD|wxACCEL_SHIFT, (int)'E', ID_EVENTLOG);
-#else
m_Shortcuts[1].Set(wxACCEL_CTRL|wxACCEL_SHIFT, (int)'E', ID_EVENTLOG);
-#endif
- m_pAccelTable = new wxAcceleratorTable(2, m_Shortcuts);
+ m_Shortcuts[2].Set(wxACCEL_CTRL|wxACCEL_SHIFT, (int)'F', ID_SGDIAGNOSTICLOGFLAGS);
+ m_pAccelTable = new wxAcceleratorTable(3, m_Shortcuts);
SetAcceleratorTable(*m_pAccelTable);
dlgMsgsPtr = NULL;
+
m_pBackgroundPanel = new CSimpleGUIPanel(this);
RestoreState();
@@ -298,10 +314,10 @@ CSimpleFrame::~CSimpleFrame() {
}
-bool CSimpleFrame::SaveState() {
- CBOINCBaseFrame::SaveState();
+bool CSimpleFrame::SaveWindowPosition() {
wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
wxString strBaseConfigLocation = wxString(wxT("/Simple"));
+ wxPoint pos = GetPosition();
wxASSERT(pConfig);
@@ -311,24 +327,32 @@ bool CSimpleFrame::SaveState() {
// pointer, return false.
if (!pConfig) return false;
- //
- // Save Frame State
- //
pConfig->SetPath(strBaseConfigLocation);
- pConfig->Write(wxT("XPos"), GetPosition().x);
- pConfig->Write(wxT("YPos"), GetPosition().y);
-
+ pConfig->Write(wxT("XPos"), pos.x);
+ pConfig->Write(wxT("YPos"), pos.y);
return true;
}
+bool CSimpleFrame::SaveState() {
+ CBOINCBaseFrame::SaveState();
+ return SaveWindowPosition();
+}
+
+
bool CSimpleFrame::RestoreState() {
CBOINCBaseFrame::RestoreState();
return true;
}
+void CSimpleFrame::OnMove(wxMoveEvent& event) {
+ SaveWindowPosition();
+ event.Skip();
+}
+
+
int CSimpleFrame::_GetCurrentViewPage() {
if (isMessagesDlgOpen()) {
return VW_SGUI | VW_SMSG;
@@ -478,6 +502,16 @@ void CSimpleFrame::OnOptions(wxCommandEvent& WXUNUSED(event)) {
}
+void CSimpleFrame::OnDiagnosticLogFlags(wxCommandEvent& WXUNUSED(event)) {
+ wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnDiagnosticLogFlags - Function Begin"));
+
+ CDlgDiagnosticLogFlags dlg(this);
+ dlg.ShowModal();
+
+ wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnDiagnosticLogFlags - Function End"));
+}
+
+
// TODO: Create ID_HELPBOINCMANAGER web page for each organization for new BOINC version
void CSimpleFrame::OnHelpBOINC(wxCommandEvent& event) {
wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnHelpBOINC - Function Begin"));
@@ -505,7 +539,9 @@ void CSimpleFrame::OnHelpAbout(wxCommandEvent& /*event*/) {
m_pBackgroundPanel->SetDlgOpen(true);
CDlgAbout dlg(this);
+ wxGetApp().SetAboutDialogIsOpen(true);
dlg.ShowModal();
+ wxGetApp().SetAboutDialogIsOpen(false);
m_pBackgroundPanel->SetDlgOpen(false);
@@ -575,6 +611,11 @@ void CSimpleFrame::OnRefreshView(CFrameEvent& WXUNUSED(event)) {
}
#ifdef __WXMAC__
+ if (m_iFrameRefreshRate != 1000) {
+ m_iFrameRefreshRate = 1000;
+ m_pPeriodicRPCTimer->Start(m_iFrameRefreshRate);
+ }
+
// We disabled tooltips on Mac while menus were popped up because they cover menus
wxToolTip::Enable(true);
#endif
@@ -627,6 +668,8 @@ void CSimpleFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
ACCT_MGR_INFO ami;
PROJECT_INIT_STATUS pis;
CC_STATUS status;
+ int wasShown = 0;
+ int wasVisible = 0;
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
@@ -634,10 +677,6 @@ void CSimpleFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
pDoc->ForceCacheUpdate();
pDoc->GetCoreClientStatus(status, true);
-#ifdef __WXMAC__
- wxGetApp().GetMacSystemMenu()->BuildMenu();
-#endif
-
// If we are connected to the localhost, run a really quick screensaver
// test to trigger a firewall popup.
pDoc->GetConnectedComputerName(strComputer);
@@ -649,20 +688,54 @@ void CSimpleFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
pDoc->rpc.get_project_init_status(pis);
pDoc->rpc.acct_mgr_info(ami);
- if (ami.acct_mgr_url.size() && !ami.have_credentials) {
- if (!IsShown()) {
- Show();
+
+ if (ami.acct_mgr_url.size() && ami.have_credentials) {
+ // Fall through
+ //
+ // There isn't a need to bring up the attach wizard, the account manager will
+ // take care of ataching to projects when it completes the RPCs
+ //
+ } else if (ami.acct_mgr_url.size() && !ami.have_credentials) {
+ wasShown = IsShown();
+ Show();
+ wasVisible = wxGetApp().IsApplicationVisible();
+ if (!wasVisible) {
+ wxGetApp().ShowApplication(true);
}
pWizard = new CWizardAttach(this);
if (pWizard->SyncToAccountManager()) {
- // If successful, hide the main window
- Hide();
+ // _GRIDREPUBLIC, _PROGRESSTHRUPROCESSORS and _CHARITYENGINE
+ // are defined for those branded builds on Windows only
+#if defined(_GRIDREPUBLIC) || defined(_PROGRESSTHRUPROCESSORS) || defined(_CHARITYENGINE) || defined(__WXMAC__)
+#ifdef __WXMAC__
+ // For GridRepublic, Charity Engine or ProgressThruProcessors,
+ // the Mac installer put a branding file in our data directory
+ long iBrandID = 0; // 0 is unbranded (default) BOINC
+
+ FILE *f = boinc_fopen("/Library/Application Support/BOINC Data/Branding", "r");
+ if (f) {
+ fscanf(f, "BrandId=%ld\n", &iBrandID);
+ fclose(f);
+ }
+ if ((iBrandID > 0) && (iBrandID < 4))
+#endif
+ {
+ // If successful, hide the main window if we showed it
+ if (!wasVisible) {
+ wxGetApp().ShowApplication(false);
+ }
+#ifndef __WXMAC__ // See comment in CBOINCGUIApp::OnFinishInit()
+ if (!wasShown) {
+ Hide();
+ }
+#endif
+ }
+#endif
}
} else if ((pis.url.size() || (0 >= pDoc->GetSimpleProjectCount())) && !status.disallow_attach) {
- if (!IsShown()) {
- Show();
- }
+ Show();
+ wxGetApp().ShowApplication(true);
strName = wxString(pis.name.c_str(), wxConvUTF8);
strURL = wxString(pis.url.c_str(), wxConvUTF8);
@@ -694,7 +767,6 @@ void CSimpleFrame::OnEventLog(wxCommandEvent& WXUNUSED(event)) {
IMPLEMENT_DYNAMIC_CLASS(CSimpleGUIPanel, wxPanel)
BEGIN_EVENT_TABLE(CSimpleGUIPanel, wxPanel)
- EVT_SIZE(CSimpleGUIPanel::OnSize)
EVT_ERASE_BACKGROUND(CSimpleGUIPanel::OnEraseBackground)
EVT_BUTTON(ID_SGNOTICESBUTTON,CSimpleGUIPanel::OnShowNotices)
EVT_BUTTON(ID_SGSUSPENDRESUMEBUTTON,CSimpleGUIPanel::OnSuspendResume)
@@ -750,7 +822,7 @@ CSimpleGUIPanel::CSimpleGUIPanel(wxWindow* parent) :
wxBoxSizer* buttonsSizer;
buttonsSizer = new wxBoxSizer( wxHORIZONTAL );
- m_NoticesButton = new CTransparentButton( this, ID_SGNOTICESBUTTON, _("Notices"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_NoticesButton = new wxButton( this, ID_SGNOTICESBUTTON, _("Notices"), wxDefaultPosition, wxDefaultSize, 0 );
m_NoticesButton->SetToolTip( _("Open a window to view notices from projects or BOINC"));
buttonsSizer->Add( m_NoticesButton, 0, wxEXPAND | wxALIGN_LEFT, 0 );
buttonsSizer->AddStretchSpacer();
@@ -760,7 +832,7 @@ CSimpleGUIPanel::CSimpleGUIPanel(wxWindow* parent) :
GetTextExtent(m_sResumeString, &resumeWidth, &y);
m_bIsSuspended = suspendWidth > resumeWidth;
- m_SuspendResumeButton = new CTransparentButton( this, ID_SGSUSPENDRESUMEBUTTON,
+ m_SuspendResumeButton = new wxButton( this, ID_SGSUSPENDRESUMEBUTTON,
m_bIsSuspended ? m_sSuspendString : m_sResumeString,
wxDefaultPosition, wxDefaultSize, 0 );
m_SuspendResumeButton->SetToolTip(wxEmptyString);
@@ -768,7 +840,7 @@ CSimpleGUIPanel::CSimpleGUIPanel(wxWindow* parent) :
buttonsSizer->Add( m_SuspendResumeButton, 0, wxEXPAND | wxALIGN_RIGHT, 0 );
buttonsSizer->AddStretchSpacer();
- m_HelpButton = new CTransparentButton( this, ID_SIMPLE_HELP, _("Help"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_HelpButton = new wxButton( this, ID_SIMPLE_HELP, _("Help"), wxDefaultPosition, wxDefaultSize, 0 );
buttonsSizer->Add( m_HelpButton, 0, wxEXPAND | wxALIGN_RIGHT, 0 );
wxString helpTip;
@@ -789,9 +861,7 @@ CSimpleGUIPanel::CSimpleGUIPanel(wxWindow* parent) :
// Tell accessibility aids to ignore this panel (but not its contents)
HIObjectSetAccessibilityIgnored((HIObjectRef)GetHandle(), true);
- SInt32 response;
- OSStatus err = Gestalt(gestaltSystemVersion, &response);
- if ((err == noErr) && (response >= 0x1070)) {
+ if (compareOSVersionTo(10, 7) >= 0) {
m_iRedRingRadius = 4;
} else {
m_iRedRingRadius = 12;
@@ -799,6 +869,7 @@ CSimpleGUIPanel::CSimpleGUIPanel(wxWindow* parent) :
#endif
m_SuspendResumeButton->Disable();
+
OnFrameRender();
wxLogTrace(wxT("Function Start/End"), wxT("CSimpleGUIPanel::CSimpleGUIPanel - Overloaded Constructor Function End"));
@@ -834,6 +905,14 @@ void CSimpleGUIPanel::SetBackgroundBitmap() {
wxBrush bgBrush(bgColor);
dc.SetBackground(bgBrush);
dc.Clear();
+#ifdef __WXMAC__
+ // Work around an apparent bug in wxMemoryDC::Clear() in wxCarbon 2.9.4
+ // TODO: remove this when the wxCarbon bug is fixed
+ dc.SetBrush(bgBrush);
+ wxPen bgPen(bgColor);
+ dc.SetPen(bgPen);
+ dc.DrawRectangle(panelRect);
+#endif
dc.DrawBitmap(*pSkinSimple->GetBackgroundImage()->GetBitmap(), 0, 0, false);
wxLogTrace(wxT("Function Start/End"), wxT("CSimpleGUIPanel::SetBackgroundBitmap - Function End"));
@@ -1082,3 +1161,29 @@ void CSimpleGUIPanel::OnEraseBackground(wxEraseEvent& event) {
#endif
dc->DrawBitmap(m_bmpBg, 0, 0);
}
+
+
+#ifdef __WXMAC__
+static int compareOSVersionTo(int toMajor, int toMinor) {
+ SInt32 major, minor;
+ OSStatus err = noErr;
+
+ err = Gestalt(gestaltSystemVersionMajor, &major);
+ if (err != noErr) {
+ fprintf(stderr, "Gestalt(gestaltSystemVersionMajor) returned error %ld\n", err);
+ fflush(stderr);
+ return -1; // gestaltSystemVersionMajor selector was not available before OS 10.4
+ }
+ if (major < toMajor) return -1;
+ if (major > toMajor) return 1;
+ err = Gestalt(gestaltSystemVersionMinor, &minor);
+ if (err != noErr) {
+ fprintf(stderr, "Gestalt(gestaltSystemVersionMinor) returned error %ld\n", err);
+ fflush(stderr);
+ return -1; // gestaltSystemVersionMajor selector was not available before OS 10.4
+ }
+ if (minor < toMinor) return -1;
+ if (minor > toMinor) return 1;
+ return 0;
+}
+#endif
diff --git a/clientgui/sg_BoincSimpleFrame.h b/clientgui/sg_BoincSimpleFrame.h
index 074f56f..9c48d95 100644
--- a/clientgui/sg_BoincSimpleFrame.h
+++ b/clientgui/sg_BoincSimpleFrame.h
@@ -25,7 +25,6 @@
#pragma interface "sg_BoincSimpleFrame.cpp"
#endif
-class CTransparentButton;
class CSimpleTaskPanel;
class CSimpleProjectPanel;
class CSimpleTaskPanel;
@@ -72,17 +71,12 @@ protected:
void OnPaint(wxPaintEvent& event);
void OnEraseBackground(wxEraseEvent& event);
#ifdef __WXMAC__
-// void SetupMacAccessibilitySupport();
-// void RemoveMacAccessibilitySupport();
-
-// EventHandlerRef m_pSGAccessibilityEventHandlerRef;
-
int m_iRedRingRadius;
#endif
wxBitmap m_bmpBg;
- CTransparentButton *m_NoticesButton;
- CTransparentButton *m_SuspendResumeButton;
- CTransparentButton *m_HelpButton;
+ wxButton *m_NoticesButton;
+ wxButton *m_SuspendResumeButton;
+ wxButton *m_HelpButton;
wxString m_sSuspendString;
wxString m_sResumeString;
int m_oldWorkCount;
@@ -114,6 +108,7 @@ public:
void OnSelectSkin( wxCommandEvent& event );
void OnPreferences( wxCommandEvent& event );
void OnOptions( wxCommandEvent& event );
+ void OnDiagnosticLogFlags( wxCommandEvent& event );
void OnOldSG( wxCommandEvent& event );
void OnHelp( wxHelpEvent& event );
void OnHelpBOINC( wxCommandEvent& event );
@@ -130,15 +125,17 @@ public:
void SetMsgsDlgOpen(CDlgMessages* newDlgPtr) { dlgMsgsPtr = newDlgPtr; }
bool isMessagesDlgOpen() { return (dlgMsgsPtr != NULL); }
+ bool SaveWindowPosition();
bool SaveState();
bool RestoreState();
+ void OnMove(wxMoveEvent& event);
protected:
virtual int _GetCurrentViewPage();
wxMenuBar* m_pMenubar;
wxMenu* m_pSubmenuSkins;
- wxAcceleratorEntry m_Shortcuts[2];
+ wxAcceleratorEntry m_Shortcuts[3];
wxAcceleratorTable* m_pAccelTable;
CSimpleGUIPanel* m_pBackgroundPanel;
diff --git a/clientgui/sg_BoincSimpleGUI.cpp b/clientgui/sg_BoincSimpleGUI.cpp
deleted file mode 100644
index d8bcc18..0000000
--- a/clientgui/sg_BoincSimpleGUI.cpp
+++ /dev/null
@@ -1,712 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_BoincSimpleGUI.h"
-#endif
-
-#include "stdwx.h"
-#ifdef __WXMAC__
-#include "MacAccessiblity.h"
-#endif
-#include "diagnostics.h"
-#include "str_util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "common/wxFlatNotebook.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "Events.h"
-#include "BOINCBaseFrame.h"
-#include "wizardex.h"
-#include "BOINCBaseWizard.h"
-#include "WizardAttach.h"
-#include "error_numbers.h"
-#include "version.h"
-
-#include "sg_BoincSimpleGUI.h"
-#include "sg_ImageLoader.h"
-#include "sg_ProjectsComponent.h"
-#include "sg_ClientStateIndicator.h"
-#include "sg_StatImageLoader.h"
-#include "sg_ViewTabPage.h"
-#include "sg_DlgMessages.h"
-#include "DlgEventLog.h"
-
-
-IMPLEMENT_DYNAMIC_CLASS(CSimpleFrame, CBOINCBaseFrame)
-
-BEGIN_EVENT_TABLE(CSimpleFrame, CBOINCBaseFrame)
- EVT_SIZE(CSimpleFrame::OnSize)
- EVT_MENU(ID_CHANGEGUI, CSimpleFrame::OnChangeGUI)
- EVT_HELP(wxID_ANY, CSimpleFrame::OnHelp)
- EVT_FRAME_CONNECT(CSimpleFrame::OnConnect)
- EVT_FRAME_RELOADSKIN(CSimpleFrame::OnReloadSkin)
- EVT_FRAME_NOTIFICATION(CSimpleFrame::OnNotification)
- // We can't eliminate the Mac Help menu, so we might as well make it useful.
- EVT_MENU(ID_HELPBOINC, CSimpleFrame::OnHelpBOINC)
- EVT_MENU(ID_HELPBOINCMANAGER, CSimpleFrame::OnHelpBOINC)
- EVT_MENU(ID_HELPBOINCWEBSITE, CSimpleFrame::OnHelpBOINC)
-END_EVENT_TABLE()
-
-CSimpleFrame::CSimpleFrame() {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::CSimpleFrame - Default Constructor Function Begin"));
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::CSimpleFrame - Default Constructor Function End"));
-}
-
-
-CSimpleFrame::CSimpleFrame(wxString title, wxIcon* icon, wxIcon* icon32, wxPoint position, wxSize size) :
- CBOINCBaseFrame((wxFrame *)NULL, ID_SIMPLEFRAME, title, position, size,
- wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN)
-{
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::CSimpleFrame - Overloaded Constructor Function Begin"));
-
- // Initialize Application
- wxIconBundle icons;
- icons.AddIcon(*icon);
- icons.AddIcon(*icon32);
- SetIcons(icons);
-
-#ifdef __WXMAC__
- // We can't eliminate the Mac menu bar or the Help menu, so we
- // might as well make them useful.
- CSkinAdvanced* pSkinAdvanced = wxGetApp().GetSkinManager()->GetAdvanced();
- wxString strMenuName;
- wxString strMenuDescription;
-
- wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
-
- // File menu
- wxMenu *menuFile = new wxMenu;
-
- // %s is the application name
- // i.e. 'BOINC Manager', 'GridRepublic Manager'
- strMenuDescription.Printf(
- _("Close the %s window"),
- pSkinAdvanced->GetApplicationName().c_str()
- );
- strMenuName = _("&Close Window");
- strMenuName += wxT("\tCtrl+W");
- menuFile->Append(
- ID_CLOSEWINDOW,
- strMenuName,
- strMenuDescription
- );
-
- // View menu
- wxMenu *menuView = new wxMenu;
-
- menuView->Append(
- ID_CHANGEGUI,
- _("Advanced View...\tCtrl+Shift+A"),
- _("Display the advanced (accessible) graphical interface.")
- );
-
- // Help menu
- wxMenu *menuHelp = new wxMenu;
-
- // %s is the project name
- // i.e. 'BOINC Manager', 'GridRepublic'
- strMenuName.Printf(
- _("%s &help"),
- pSkinAdvanced->GetApplicationShortName().c_str()
- );
- // %s is the project name
- // i.e. 'BOINC', 'GridRepublic'
- strMenuDescription.Printf(
- _("Show information about %s"),
- pSkinAdvanced->GetApplicationShortName().c_str()
- );
- menuHelp->Append(
- ID_HELPBOINC,
- strMenuName,
- strMenuDescription
- );
-
- // %s is the application name
- // i.e. 'BOINC Manager', 'GridRepublic Manager'
- strMenuName.Printf(
- _("&%s"),
- pSkinAdvanced->GetApplicationName().c_str()
- );
- // %s is the application name
- // i.e. 'BOINC Manager', 'GridRepublic Manager'
- strMenuDescription.Printf(
- _("Show information about the %s"),
- pSkinAdvanced->GetApplicationName().c_str()
- );
- menuHelp->Append(
- ID_HELPBOINCMANAGER,
- strMenuName,
- strMenuDescription
- );
-
- // %s is the project name
- // i.e. 'BOINC', 'GridRepublic'
- strMenuName.Printf(
- _("%s &website"),
- pSkinAdvanced->GetApplicationShortName().c_str()
- );
- // %s is the application name
- // i.e. 'BOINC Manager', 'GridRepublic Manager'
- strMenuDescription.Printf(
- _("Show information about BOINC and %s"),
- pSkinAdvanced->GetApplicationName().c_str()
- );
- menuHelp->Append(
- ID_HELPBOINCWEBSITE,
- strMenuName,
- strMenuDescription
- );
-
- // Clear menubar
- m_pMenubar = new wxMenuBar;
- m_pMenubar->Append(
- menuHelp,
- _("&Help")
- );
-
- SetMenuBar(m_pMenubar);
- m_pMenubar->MacInstallMenuBar();
- ::ClearMenuBar(); // Remove everything we can from the Mac menu bar
-
- m_pMenubar->Insert( // Must be done after ClearMenuBar()
- 0,
- menuFile,
- _("&File")
- );
-
- m_pMenubar->Append(
- menuView,
- _("&View")
- );
-
- m_Shortcuts[0].Set(wxACCEL_NORMAL, WXK_HELP, ID_HELPBOINCMANAGER);
- m_pAccelTable = new wxAcceleratorTable(2, m_Shortcuts);
-#else
- m_Shortcuts[0].Set(wxACCEL_CTRL|wxACCEL_SHIFT, (int)'A', ID_CHANGEGUI);
- m_pAccelTable = new wxAcceleratorTable(1, m_Shortcuts);
-#endif
-
- SetAcceleratorTable(*m_pAccelTable);
-
- dlgMsgsPtr = NULL;
- m_pBackgroundPanel = new CSimplePanel(this);
-
- RestoreState();
-}
-
-
-CSimpleFrame::~CSimpleFrame() {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::CSimpleFrame - Destructor Function Begin"));
-
- SaveState();
-
- if (m_pAccelTable)
- delete m_pAccelTable;
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::CSimpleFrame - Destructor Function End"));
-}
-
-
-bool CSimpleFrame::SaveState() {
- CBOINCBaseFrame::SaveState();
- wxConfigBase* pConfig = wxConfigBase::Get(FALSE);
- wxString strBaseConfigLocation = wxString(wxT("/Simple"));
-
- wxASSERT(pConfig);
-
- // An odd case happens every once and awhile where wxWidgets looses
- // the pointer to the config object, or it is cleaned up before
- // the window has finished it's cleanup duty. If we detect a NULL
- // pointer, return false.
- if (!pConfig) return false;
-
- //
- // Save Frame State
- //
- pConfig->SetPath(strBaseConfigLocation);
-
- pConfig->Write(wxT("XPos"), GetPosition().x);
- pConfig->Write(wxT("YPos"), GetPosition().y);
-
- return true;
-}
-
-
-bool CSimpleFrame::RestoreState() {
- CBOINCBaseFrame::RestoreState();
- return true;
-}
-
-
-int CSimpleFrame::_GetCurrentViewPage() {
- if (isMessagesDlgOpen()) {
- return VW_SGUI | VW_SMSG;
- } else {
- return VW_SGUI;
- }
- return 0; // Should never happen.
-}
-
-
-void CSimpleFrame::OnChangeGUI(wxCommandEvent& WXUNUSED(event)) {
- wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnChangeGUI - Function Begin"));
-
- wxGetApp().SetActiveGUI(BOINC_ADVANCEDGUI, true);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnChangeGUI - Function End"));
-}
-
-
-void CSimpleFrame::OnHelpBOINC(wxCommandEvent& event) {
- wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnHelpBOINC - Function Begin"));
-
- if (IsShown()) {
- wxString strURL = wxGetApp().GetSkinManager()->GetAdvanced()->GetOrganizationHelpUrl();
-
- wxString wxurl;
- wxurl.Printf(
- wxT("%s?target=simple&version=%s&controlid=%d"),
- strURL.c_str(),
- wxString(BOINC_VERSION_STRING, wxConvUTF8).c_str(),
- event.GetId()
- );
- wxLaunchDefaultBrowser(wxurl);
- }
-
- wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::OnHelpBOINC - Function End"));
-}
-
-
-void CSimpleFrame::OnHelp(wxHelpEvent& event) {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnHelp - Function Begin"));
-
- if (IsShown()) {
- wxString strURL = wxGetApp().GetSkinManager()->GetAdvanced()->GetOrganizationHelpUrl();
-
- wxString wxurl;
- wxurl.Printf(
- wxT("%s?target=simple&version=%s&controlid=%d"),
- strURL.c_str(),
- wxString(BOINC_VERSION_STRING, wxConvUTF8).c_str(),
- event.GetId()
- );
- wxLaunchDefaultBrowser(wxurl);
- }
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnHelp - Function End"));
-}
-
-
-void CSimpleFrame::OnReloadSkin(CFrameEvent& WXUNUSED(event)) {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnReloadSkin - Function Start"));
-
- m_pBackgroundPanel->ReskinInterface();
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnReloadSkin - Function End"));
-}
-
-
-void CSimpleFrame::OnNotification(CFrameEvent& WXUNUSED(event)) {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnNotification - Function Begin"));
-
- CDlgMessages dlg(GetParent());
-
- m_pBackgroundPanel->SetDlgOpen(true);
- SetMsgsDlgOpen(&dlg);
-
- m_pBackgroundPanel->projComponent->MessagesViewed();
- dlg.ShowModal();
-
- m_pBackgroundPanel->SetDlgOpen(false);
- SetMsgsDlgOpen(NULL);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnNotification - Function End"));
-}
-
-
-void CSimpleFrame::OnRefreshView(CFrameEvent& WXUNUSED(event)) {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnRefreshView - Function Start"));
-
- static bool bAlreadyRunning = false;
-
- if (bAlreadyRunning) return;
- bAlreadyRunning = true;
-
- m_pBackgroundPanel->OnFrameRender();
-
- if (dlgMsgsPtr) {
- dlgMsgsPtr->OnRefresh();
- }
-
- bAlreadyRunning = false;
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnRefreshView - Function End"));
-}
-
-
-void CSimpleFrame::OnProjectsAttachToProject() {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnProjectsAttachToProject - Function Begin"));
-
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- if (!pDoc->IsUserAuthorized())
- return;
-
- if (pDoc->IsConnected()) {
-
- CWizardAttach* pWizard = new CWizardAttach(this);
-
- wxString strName = wxEmptyString;
- wxString strURL = wxEmptyString;
- wxString strTeamName = wxEmptyString;
- pWizard->Run( strName, strURL, strTeamName, false );
-
- if (pWizard)
- pWizard->Destroy();
-
- } else {
- ShowNotCurrentlyConnectedAlert();
- }
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnProjectsAttachToProject - Function End"));
-}
-
-
-void CSimpleFrame::OnConnect(CFrameEvent& WXUNUSED(event)) {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnConnect - Function Begin"));
-
- CMainDocument* pDoc = wxGetApp().GetDocument();
- CWizardAttach* pWizard = NULL;
- wxString strComputer = wxEmptyString;
- wxString strName = wxEmptyString;
- wxString strURL = wxEmptyString;
- wxString strTeamName = wxEmptyString;
- bool bCachedCredentials = false;
- ACCT_MGR_INFO ami;
- PROJECT_INIT_STATUS pis;
- CC_STATUS status;
-
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- pDoc->ForceCacheUpdate();
- pDoc->GetCoreClientStatus(status, true);
-
-#ifdef __WXMAC__
- wxGetApp().GetMacSystemMenu()->BuildMenu();
-#endif
-
- // If we are connected to the localhost, run a really quick screensaver
- // test to trigger a firewall popup.
- pDoc->GetConnectedComputerName(strComputer);
- if (pDoc->IsComputerNameLocal(strComputer)) {
- wxGetApp().StartBOINCScreensaverTest();
- wxGetApp().StartBOINCDefaultScreensaverTest();
- }
-
-
- pDoc->rpc.get_project_init_status(pis);
- pDoc->rpc.acct_mgr_info(ami);
- if (ami.acct_mgr_url.size() && !ami.have_credentials) {
- if (!IsShown()) {
- Show();
- }
-
- pWizard = new CWizardAttach(this);
- if (pWizard->SyncToAccountManager()) {
- // If successful, hide the main window
- Hide();
- }
- } else if ((pis.url.size() || (0 >= pDoc->GetSimpleProjectCount())) && !status.disallow_attach) {
- if (!IsShown()) {
- Show();
- }
-
- strName = wxString(pis.name.c_str(), wxConvUTF8);
- strURL = wxString(pis.url.c_str(), wxConvUTF8);
- strTeamName = wxString(pis.team_name.c_str(), wxConvUTF8);
- bCachedCredentials = pis.url.length() && pis.has_account_key;
-
- pWizard = new CWizardAttach(this);
- pWizard->Run(strName, strURL, strTeamName, bCachedCredentials);
- }
-
- if (pWizard) {
- pWizard->Destroy();
- m_pBackgroundPanel->UpdateProjectView();
- }
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnConnect - Function End"));
-}
-
-
-IMPLEMENT_DYNAMIC_CLASS(CSimplePanel, wxPanel)
-
-BEGIN_EVENT_TABLE(CSimplePanel, wxPanel)
- EVT_SIZE(CSimplePanel::OnSize)
- EVT_ERASE_BACKGROUND(CSimplePanel::OnEraseBackground)
-END_EVENT_TABLE()
-
-
-CSimplePanel::CSimplePanel() {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::CSimplePanel - Default Constructor Function Begin"));
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::CSimplePanel - Default Constructor Function End"));
-}
-
-
-CSimplePanel::CSimplePanel(wxWindow* parent) :
- wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER)
-{
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::CSimplePanel - Overloaded Constructor Function Begin"));
-
- wrkUnitNB = NULL;
- clientState = NULL;
- projComponent = NULL;
-
- projectViewInitialized = false;
- emptyViewInitialized = false;
- notebookViewInitialized = false;
- dlgOpen = false;
-
- InitEmptyView();
-
-#ifdef __WXMAC__
- // Have the screen reader tell user to switch to advanced view.
- oldSimpleGUIWorkCount = -1;
-
- SetupMacAccessibilitySupport();
-#endif
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::CSimplePanel - Overloaded Constructor Function End"));
-}
-
-
-CSimplePanel::~CSimplePanel()
-{
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::CSimplePanel - Destructor Function Begin"));
-
-#ifdef __WXMAC__
- RemoveMacAccessibilitySupport();
-#endif
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::CSimplePanel - Destructor Function End"));
-}
-
-
-void CSimplePanel::ReskinInterface() {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::ReskinInterface - Function Start"));
-
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- Freeze();
- //bg color
- SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
-
- if(notebookViewInitialized){
- if (wrkUnitNB) wrkUnitNB->ReskinAppGUI();
- } else {
- if (clientState) clientState->ReskinInterface();
- }
-
- //reskin component
- if (projComponent) projComponent->ReskinInterface();
-
- Thaw();
- Refresh();
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::ReskinInterface - Function End"));
-}
-
-
-void CSimplePanel::OnProjectsAttachToProject() {
- wxLogTrace(wxT("Function Start/End"), wxT("CSimplePanel::OnProjectsAttachToProject - Function Begin"));
-
- CSimpleFrame* pFrame = wxDynamicCast(GetParent(), CSimpleFrame);
- wxASSERT(pFrame);
-
- pFrame->OnProjectsAttachToProject();
-
- wxLogTrace(wxT("Function Start/End"), wxT("CSimpleFrame::OnProjectsAttachToProject - Function End"));
-}
-
-
-// called from CSimpleFrame::OnRefreshView()
-void CSimplePanel::OnFrameRender() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- wxASSERT(pDoc);
- int workCount = pDoc->GetSimpleGUIWorkCount();
-
- // OnFrameRender() may be called while SimpleGUI initialization is
- // in progress due to completion of a periodic get_messages RPC,
- // causing unintended recursion in CMainDocument::RequestRPC().
- // Check for that situation here.
- if (pDoc->WaitingForRPC()) return;
-
- if (IsShown()) {
-
- if (!projectViewInitialized) {
- InitProjectView();
- return;
- } else if ( pDoc->IsConnected() ) {
- UpdateProjectView();
- }
-
- // Now check to see if we show the empty state or results
- if ( workCount > 0 ) {
- // State changes can cause the BSG to crash if a dialogue is open.
- // Defer state change until after the dialogue is closed
- if ( (emptyViewInitialized || !notebookViewInitialized) && dlgOpen ) {
- return;
- }
-
- // If empty was displayed, remove
- if ( emptyViewInitialized ) {
- DestroyEmptyView();
- }
- // If we hadn't previously shown the notebook, create it.
- if ( !notebookViewInitialized ) {
- InitNotebook();
- }
- wrkUnitNB->Update();
- } else {
- // State changes can cause the BSG to crash if a dialogue is open.
- // Defer state change until after the dialogue is closed
- if ( (!emptyViewInitialized || notebookViewInitialized) && dlgOpen ) {
- return;
- }
-
- if ( notebookViewInitialized ) {
- DestroyNotebook();
- }
- if ( !emptyViewInitialized ) {
- InitEmptyView();
- }
- UpdateEmptyView();
- }
-
-#ifdef __WXMAC__
- //Accessibility
- // Hide all but top level view from accessibility support so that
- // the screen reader will tell user to switch to advanced view.
- if (oldSimpleGUIWorkCount != workCount) {
- oldSimpleGUIWorkCount = workCount;
- HIViewRef simple = (HIViewRef)GetHandle();
- AccessibilityIgnoreAllChildren(simple, 1);
- }
-#endif
- }
-}
-
-
-void CSimplePanel::UpdateEmptyView() {
- clientState->DisplayState();
-}
-
-
-void CSimplePanel::DestroyEmptyView() {
- delete clientState;
- clientState = NULL;
- emptyViewInitialized = false;
-}
-
-
-void CSimplePanel::InitEmptyView()
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- //Set Background color
- SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
-
- // Flex Grid Sizer
- mainSizer = new wxFlexGridSizer(3,2);
- SetSizer(mainSizer);
-
- clientState = new ClientStateIndicator(this,wxPoint(31,94));
- clientState->DisplayState();
-
- emptyViewInitialized = true;
-}
-
-
-void CSimplePanel::UpdateProjectView()
-{
- //update Project Component
- projComponent->UpdateInterface();
-}
-
-
-void CSimplePanel::DestroyNotebook() {
- mainSizer->Detach(wrkUnitNB);
- delete wrkUnitNB;
- wrkUnitNB = NULL;
- notebookViewInitialized = false;
-}
-
-
-void CSimplePanel::InitProjectView()
-{
- // Do not update screen at this point
- /////////////// MY PROJECTS COMPONENT /////////////////////
- projComponent = new CProjectsComponent(this,wxPoint(31,414));
- ///////////////////////////////////////////////////////////
- projectViewInitialized = true;
-}
-
-
-void CSimplePanel::InitNotebook()
-{
- wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::InitNotebook - Function Start"));
- // FlatNotebook
- wrkUnitNB = new WorkunitNotebook(this, -1, wxDefaultPosition, wxSize(370,330), wxFNB_TABS_BORDER_SIMPLE | wxFNB_NO_X_BUTTON | wxFNB_NO_NAV_BUTTONS | wxFNB_FANCY_TABS | wxFNB_NODRAG );
- SetSizer(mainSizer);
- mainSizer->Add(31, 68,0);
- mainSizer->Add(343, 68,0);
- mainSizer->Add(31, 68,0);
- mainSizer->Add(0, 0,1);
- mainSizer->Add(wrkUnitNB);
- mainSizer->Layout();
- notebookViewInitialized = true;
- wxLogTrace(wxT("Function Start/End"), wxT("CAdvancedFrame::InitNotebook - Function End"));
-}
-
-
-void CSimplePanel::OnEraseBackground(wxEraseEvent& event){
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- wxDC *dc = event.GetDC();
- dc->DrawBitmap(*pSkinSimple->GetBackgroundImage()->GetBitmap(), 0, 0);
-}
-
-
diff --git a/clientgui/sg_BoincSimpleGUI.h b/clientgui/sg_BoincSimpleGUI.h
deleted file mode 100644
index 519aefb..0000000
--- a/clientgui/sg_BoincSimpleGUI.h
+++ /dev/null
@@ -1,150 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-
-#ifndef _SIMPLEFRAME_H_
-#define _SIMPLEFRAME_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_BoincSimpleGUI.cpp"
-#endif
-
-
-class CViewTabPage;
-class StatImageLoader;
-class ImageLoader;
-class CProjectsComponent;
-class ClientStateIndicator;
-class WorkunitNotebook;
-class CDlgMessages;
-
-class CSimplePanel : public wxPanel
-{
- DECLARE_DYNAMIC_CLASS(CSimplePanel)
-
-public:
- CSimplePanel();
- CSimplePanel(wxWindow* parent);
-
- ~CSimplePanel();
- //
- // Flat Neotebook
- WorkunitNotebook *wrkUnitNB;
- wxBitmap const workWUico;
- // My projects component
- CProjectsComponent *projComponent;
- // Client State Indicator
- ClientStateIndicator *clientState;
- //Collapse button
- bool midAppCollapsed;
- bool btmAppCollapsed;
- ////////////////////////////;
- bool projectViewInitialized;
- bool emptyViewInitialized;
- bool notebookViewInitialized;
-
- void ReskinInterface();
- void InitEmptyView();
- void UpdateEmptyView();
- void DestroyEmptyView();
- void InitResultView();
- void InitProjectView();
- void UpdateProjectView();
- void InitNotebook();
- void DestroyNotebook();
- void OnFrameRender();
- void OnProjectsAttachToProject();
- void SetDlgOpen(bool newDlgState) { dlgOpen = newDlgState; }
- bool GetDlgOpen() { return dlgOpen; }
- //////////
- wxFlexGridSizer *mainSizer;
- wxSize wxNotebookSize;
- //////////
- wxBitmap *frameBg;
- wxBitmap *bm13cImg0;
- wxBitmap *btmpIcnWorking;
- wxBitmap *bm39cImg0;
-
- wxBitmap *btmpIcnSleeping;
-
- DECLARE_EVENT_TABLE()
-
-protected:
- void OnEraseBackground(wxEraseEvent& event);
-#ifdef __WXMAC__
- void SetupMacAccessibilitySupport();
- void RemoveMacAccessibilitySupport();
-
- int oldSimpleGUIWorkCount;
- EventHandlerRef m_pSGAccessibilityEventHandlerRef;
-
-#endif
-
-private:
- bool dlgOpen;
-};
-
-
-// Define a new frame
-class CSimpleFrame : public CBOINCBaseFrame
-{
- DECLARE_DYNAMIC_CLASS(CSimpleFrame)
-
-public:
- CSimpleFrame();
- CSimpleFrame(wxString title, wxIcon* icon, wxIcon* icon32, wxPoint position, wxSize size);
-
- ~CSimpleFrame();
-
- void OnChangeGUI( wxCommandEvent& event );
- void OnHelp( wxHelpEvent& event );
- void OnHelpBOINC( wxCommandEvent& event );
-
- void OnProjectsAttachToProject();
-
- void OnConnect(CFrameEvent& event );
- void OnReloadSkin( CFrameEvent& event );
- void OnRefreshView( CFrameEvent& event );
- void OnNotification( CFrameEvent& event );
-
- void SetMsgsDlgOpen(CDlgMessages* newDlgPtr) { dlgMsgsPtr = newDlgPtr; }
- bool isMessagesDlgOpen() { return (dlgMsgsPtr != NULL); }
-
- bool SaveState();
- bool RestoreState();
-
-protected:
- virtual int _GetCurrentViewPage();
-
-#ifdef __WXMAC__
- wxMenuBar* m_pMenubar;
-#endif
- wxAcceleratorEntry m_Shortcuts[1];
- wxAcceleratorTable* m_pAccelTable;
-
- CSimplePanel* m_pBackgroundPanel;
-
-
-private:
- CDlgMessages* dlgMsgsPtr;
-
- DECLARE_EVENT_TABLE()
-};
-
-#endif
-
-
diff --git a/clientgui/sg_ClientStateIndicator.cpp b/clientgui/sg_ClientStateIndicator.cpp
deleted file mode 100644
index 5c355b3..0000000
--- a/clientgui/sg_ClientStateIndicator.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_ClientStateIndicator.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "BOINCBaseFrame.h"
-#include "sg_BoincSimpleGUI.h"
-#include "sg_ImageLoader.h"
-#include "sg_ClientStateIndicator.h"
-#include "time.h"
-
-#define ID_ANIMATIONRENDERTIMER 12000
-
-IMPLEMENT_DYNAMIC_CLASS(ClientStateIndicator, wxPanel)
-
-BEGIN_EVENT_TABLE(ClientStateIndicator, wxPanel)
- EVT_PAINT(ClientStateIndicator::OnPaint)
- EVT_ERASE_BACKGROUND(ClientStateIndicator::OnEraseBackground)
- EVT_TIMER(ID_ANIMATIONRENDERTIMER, ClientStateIndicator::RunConnectionAnimation)
-END_EVENT_TABLE()
-
-ClientStateIndicator::ClientStateIndicator() {}
-
-ClientStateIndicator::ClientStateIndicator(CSimplePanel* parent,wxPoint coord) :
- wxPanel(parent, wxID_ANY, coord, wxSize(343,314), wxNO_BORDER)
-{
- m_connRenderTimer = NULL;
- connIndicatorWidth = 14;
- connIndicatorHeight = 15;
- numOfIndic = 5;
- indexIndVis = 1;//first will be visible on start
- rightPosition = 118;
- topPosition = 5;
- stateMessage = wxEmptyString;
- clientState = CLIENT_STATE_NONE;
- CreateComponent();
- error_time = 0;
-}
-
-ClientStateIndicator::~ClientStateIndicator()
-{
- if (m_connRenderTimer) {
- m_connRenderTimer->Stop();
- delete m_connRenderTimer;
- }
-}
-
-void ClientStateIndicator::CreateComponent(){
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- //Set Background color
- SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
-}
-
-
-void ClientStateIndicator::SetActionState(wxString message)
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- Freeze();
- stateMessage = message;
- if ( clientState != CLIENT_STATE_ACTION ) {
- //Delete Previous state
- DeletePreviousState();
-
- clientState = CLIENT_STATE_ACTION;
- i_indBg = new ImageLoader(this);
- i_indBg->Move(wxPoint(42,74));
- i_indBg->LoadImage(*(pSkinSimple->GetStateIndicatorBackgroundImage()->GetBitmap()));
-
- for(int x = 0; x < numOfIndic; x++){
- ImageLoader *i_connInd = new ImageLoader(this);
- i_connInd->Move(wxPoint(rightPosition +(connIndicatorWidth+10) * x,84));
- i_connInd->LoadImage(*(pSkinSimple->GetConnectingIndicatorImage()->GetBitmap()));
- if(x !=0){
- i_connInd->Show(false);
- }
- m_connIndV.push_back(i_connInd);
- }
- //set animation timer for interface
- if ( !m_connRenderTimer ) {
- m_connRenderTimer = new wxTimer(this, ID_ANIMATIONRENDERTIMER);
- }
- m_connRenderTimer->Start(500);
- }
- Thaw();
-}
-
-void ClientStateIndicator::SetPausedState(wxString message)
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- Freeze();
- stateMessage = message;
- if ( clientState != CLIENT_STATE_PAUSED ) {
- //Delete Previous state
- DeletePreviousState();
-
- clientState = CLIENT_STATE_PAUSED;
- i_indBg = new ImageLoader(this);
- i_indBg->Move(wxPoint(42,74));
- i_indBg->LoadImage(*(pSkinSimple->GetStateIndicatorBackgroundImage()->GetBitmap()));
-
-
- for(int x = 0; x < numOfIndic; x++){
- ImageLoader *i_connInd = new ImageLoader(this);
- i_connInd->Move(wxPoint(rightPosition +(connIndicatorWidth+10) * x,84));
- i_connInd->LoadImage(*(pSkinSimple->GetConnectingIndicatorImage()->GetBitmap()));
- m_connIndV.push_back(i_connInd);
- }
- }
- Thaw();
-}
-void ClientStateIndicator::SetNoActionState(wxString message)
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- Freeze();
- stateMessage = message;
-
- if ( clientState != CLIENT_STATE_ERROR ) {
- //Delete Previous state
- DeletePreviousState();
-
- clientState = CLIENT_STATE_ERROR;
- i_indBg = new ImageLoader(this);
- i_indBg->Move(wxPoint(42,74));
- i_indBg->LoadImage(*(pSkinSimple->GetStateIndicatorBackgroundImage()->GetBitmap()));
-
- i_errorInd = new ImageLoader(this);
- i_errorInd->Move(wxPoint(rightPosition+24,84));
- i_errorInd->LoadImage(*(pSkinSimple->GetErrorIndicatorImage()->GetBitmap()));
- i_errorInd->Refresh();
- }
- Thaw();
-}
-void ClientStateIndicator::DeletePreviousState()
-{
- if(clientState == CLIENT_STATE_ACTION || clientState == CLIENT_STATE_PAUSED){
- if (m_connRenderTimer && clientState == CLIENT_STATE_ACTION) {
- m_connRenderTimer->Stop();
- delete m_connRenderTimer;
- m_connRenderTimer = NULL;
- }
- for(int indIndex = 0; indIndex < numOfIndic; indIndex++){
- delete m_connIndV.at(indIndex);
- }
- //clear vector
- if(m_connIndV.size() > 0){
- m_connIndV.clear();
- }
- //delete ind bg
- delete i_indBg;
- }else if(clientState == CLIENT_STATE_ERROR){
- delete i_errorInd;
- //delete ind bg
- delete i_indBg;
- }
-}
-void ClientStateIndicator::RunConnectionAnimation(wxTimerEvent& WXUNUSED(event)){
-
- if(indexIndVis < numOfIndic){
- indexIndVis++;
- for(int j = 0; j < indexIndVis; j++){
- ImageLoader *currInd = m_connIndV[j];
- currInd->Show(true);
- }
- }else{
- indexIndVis = 0;
- for(int i = 0; i < numOfIndic; i++){
- ImageLoader *currInd = m_connIndV[i];
- currInd->Show(false);
- }
- }
-}
-void ClientStateIndicator::ReskinInterface()
-{
- DisplayState();
-}
-void ClientStateIndicator::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxPaintDC dc(this);
- //set font
- dc.SetFont(wxFont(9,74,90,90,0,wxT("Arial")));
- // center the text
- wxCoord height, width;
- dc.GetTextExtent(stateMessage, &width, &height);
- dc.DrawText(stateMessage, wxPoint(176-width/2,120));
-
-}
-void ClientStateIndicator::OnEraseBackground(wxEraseEvent& event){
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- event.Skip(false);
- wxDC *dc;
- dc=event.GetDC();
- dc->SetBackground(wxBrush(this->GetBackgroundColour(),wxSOLID));
- dc->Clear();
- dc->DrawBitmap(*(pSkinSimple->GetWorkunitAreaBackgroundImage()->GetBitmap()), 0, 0);
-
-}
-
-bool ClientStateIndicator::DownloadingResults() {
- bool return_value = false;
- CMainDocument* pDoc = wxGetApp().GetDocument();
- if ( pDoc->results.results.size() > 0 ) {
- RESULT* result;
- for(unsigned int i=0; !return_value && i < pDoc->results.results.size(); i++ ) {
- result = pDoc->result(i);
- if ( result != NULL && result->state == RESULT_FILES_DOWNLOADING ) {
- return_value = true;
- }
- }
- }
- return return_value;
-}
-
-bool ClientStateIndicator::Suspended() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- CC_STATUS status;
- bool result = false;
- pDoc->GetCoreClientStatus(status);
- if ( pDoc->IsConnected() && status.task_suspend_reason > 0 && status.task_suspend_reason != SUSPEND_REASON_DISK_SIZE && status.task_suspend_reason != SUSPEND_REASON_CPU_THROTTLE ) {
- result = true;
- }
- return result;
-}
-
-// Check to see if a project update is scheduled or in progress
-bool ClientStateIndicator::ProjectUpdateScheduled() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- PROJECT* project;
- int prjCount = pDoc->GetSimpleProjectCount();
- for(int i=0; i<prjCount; i++) {
- project = pDoc->state.projects[i];
- if ( project->sched_rpc_pending || project->master_url_fetch_pending || project->scheduler_rpc_in_progress ) {
- return true;
- }
- }
- return false;
-}
-
-void ClientStateIndicator::DisplayState() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- if ( pDoc->IsReconnecting() ) {
- error_time = 0;
- SetActionState(_("Retrieving current status."));
- } else if ( pDoc->IsConnected() && pDoc->state.projects.size() == 0) {
- error_time = 0;
- SetPausedState(_("You don't have any projects. Please Add a Project."));
- } else if ( DownloadingResults() ) {
- error_time = 0;
- SetActionState(_("Downloading work from the server."));
- } else if ( Suspended() ) {
- CC_STATUS status;
- pDoc->GetCoreClientStatus(status);
- if ( status.task_suspend_reason & SUSPEND_REASON_BATTERIES ) {
- SetActionState(_("Processing Suspended: Running On Batteries."));
- } else if ( status.task_suspend_reason & SUSPEND_REASON_USER_ACTIVE ) {
- SetActionState(_("Processing Suspended: User Active."));
- } else if ( status.task_suspend_reason & SUSPEND_REASON_USER_REQ ) {
- SetActionState(_("Processing Suspended: User paused processing."));
- } else if ( status.task_suspend_reason & SUSPEND_REASON_TIME_OF_DAY ) {
- SetActionState(_("Processing Suspended: Time of Day."));
- } else if ( status.task_suspend_reason & SUSPEND_REASON_BENCHMARKS ) {
- SetActionState(_("Processing Suspended: Benchmarks Running."));
- } else {
- SetActionState(_("Processing Suspended."));
- }
- } else if ( ProjectUpdateScheduled() ) {
- error_time = 0;
- SetActionState(_("Waiting to contact project servers."));
- } else {
- if ( error_time == 0 ) {
- error_time = time(NULL) + 10;
- SetActionState(_("Retrieving current status"));
- } else if ( error_time < time(NULL) ) {
- if ( pDoc->IsConnected() ) {
- SetNoActionState(_("No work available to process"));
- } else {
- SetNoActionState(_("Unable to connect to the core client"));
- }
- } else {
- SetActionState(_("Retrieving current status"));
- }
- }
-}
diff --git a/clientgui/sg_ClientStateIndicator.h b/clientgui/sg_ClientStateIndicator.h
deleted file mode 100644
index f8f9b5b..0000000
--- a/clientgui/sg_ClientStateIndicator.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _CLIENTSTATEINDICATOR_H_
-#define _CLIENTSTATEINDICATOR_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_ClientStateIndicator.cpp"
-#endif
-
-
-class ImageLoader;
-
-class ClientStateIndicator : public wxPanel{
- DECLARE_DYNAMIC_CLASS( ClientStateIndicator )
-public:
- int connIndicatorWidth;
- int connIndicatorHeight;
- int numOfIndic;
- int rightPosition;
- int topPosition;
- int indexIndVis;
- int numOfProgressInd;
- ImageLoader *i_indBg;
- ImageLoader *i_errorInd;
- std::vector<ImageLoader*> m_connIndV;
- wxTimer *m_connRenderTimer;
- wxString stateMessage;
- int clientState;
- /// Constructors
- ClientStateIndicator();
- ClientStateIndicator(CSimplePanel* parent, wxPoint coord);
- ~ClientStateIndicator();
- void CreateComponent();
- void ReskinInterface();
- void DeletePreviousState();
- void DisplayState();
-
-private:
-
- void SetActionState(wxString message);
- void SetNoActionState(wxString message);
- void SetPausedState(wxString message);
- bool DownloadingResults();
- bool Suspended();
- bool ProjectUpdateScheduled();
- time_t error_time;
-
- void OnEraseBackground(wxEraseEvent& event);
- void OnPaint(wxPaintEvent& event);
- void RunConnectionAnimation(wxTimerEvent& event );
-
- DECLARE_EVENT_TABLE()
-};
-
-#define CLIENT_STATE_NONE 0
-#define CLIENT_STATE_ACTION 1
-#define CLIENT_STATE_PAUSED 2
-#define CLIENT_STATE_ERROR 3
-
-#endif
-
diff --git a/clientgui/sg_CustomControls.cpp b/clientgui/sg_CustomControls.cpp
index aa00ceb..b5487e9 100644
--- a/clientgui/sg_CustomControls.cpp
+++ b/clientgui/sg_CustomControls.cpp
@@ -43,13 +43,14 @@ bool CTransparentStaticLine::Create(wxWindow* parent, wxWindowID id, const wxPoi
SetBackgroundColour(parent->GetBackgroundColour());
SetBackgroundStyle(wxBG_STYLE_COLOUR);
SetForegroundColour(parent->GetForegroundColour());
+ SetLineColor(GetForegroundColour());
return bRetVal;
}
void CTransparentStaticLine::OnPaint(wxPaintEvent& /*event*/) {
- wxPaintDC dc(this);
+ wxPaintDC dc(this);
wxPen pen = wxPen(GetLineColor(), 1);
dc.SetPen(pen);
dc.DrawLine(0, 0, GetSize().GetWidth(), 0);
@@ -59,10 +60,10 @@ void CTransparentStaticLine::OnPaint(wxPaintEvent& /*event*/) {
IMPLEMENT_DYNAMIC_CLASS (CTransparentStaticText, wxStaticText)
BEGIN_EVENT_TABLE(CTransparentStaticText, wxStaticText)
-#ifdef __WXMAC__
EVT_ERASE_BACKGROUND(CTransparentStaticText::OnEraseBackground)
-#endif
+#ifndef __WXMAC__
EVT_PAINT(CTransparentStaticText::OnPaint)
+#endif
END_EVENT_TABLE()
@@ -78,7 +79,7 @@ bool CTransparentStaticText::Create(wxWindow* parent, wxWindowID id, const wxStr
bool bRetVal = wxStaticText::Create(parent, id, label, pos, size, style|wxTRANSPARENT_WINDOW, name);
SetBackgroundColour(parent->GetBackgroundColour());
- SetBackgroundStyle(wxBG_STYLE_COLOUR);
+// SetBackgroundStyle(wxBG_STYLE_COLOUR);
SetForegroundColour(parent->GetForegroundColour());
return bRetVal;
@@ -86,19 +87,12 @@ bool CTransparentStaticText::Create(wxWindow* parent, wxWindowID id, const wxStr
#ifndef __WXMAC__
-void CTransparentStaticText::SetLabel(const wxString& label) {
- wxStaticText::SetLabel(label);
- GetParent()->RefreshRect(GetRect());
-}
-#endif
-
-
void CTransparentStaticText::OnPaint(wxPaintEvent& /*event*/) {
wxPaintDC dc(this);
dc.SetFont(GetFont());
dc.DrawText(GetLabel(), 0, 0);
}
-
+#endif
IMPLEMENT_DYNAMIC_CLASS (CTransparentButton, wxButton)
@@ -205,7 +199,7 @@ void CTransparentStaticTextAssociate::OnMouse(wxMouseEvent& event) {
if (m_pWnd) {
wxMouseEvent evtAssociate(event);
evtAssociate.SetId(m_pWnd->GetId());
- m_pWnd->ProcessEvent(event);
+ m_pWnd->GetEventHandler()->ProcessEvent(event);
}
// If we get the left button up event and we already had focus, that must
diff --git a/clientgui/sg_CustomControls.h b/clientgui/sg_CustomControls.h
index 1996ba8..dc5b55e 100644
--- a/clientgui/sg_CustomControls.h
+++ b/clientgui/sg_CustomControls.h
@@ -48,7 +48,7 @@ public:
);
wxColour GetLineColor() const { return m_LineColor ; }
- void SetLineColor(wxColour value) { m_LineColor = value ; }
+ void SetLineColor(wxColour value) { if (value != wxNullColour) m_LineColor = value ; }
virtual bool HasTransparentBackground() { return true; };
@@ -89,12 +89,10 @@ public:
virtual bool HasTransparentBackground() { return true; };
-#ifdef __WXMAC__
virtual void OnEraseBackground(wxEraseEvent& /*event*/) {};
-#else
- virtual void SetLabel(const wxString& label);
-#endif
+#ifndef __WXMAC__
virtual void OnPaint(wxPaintEvent& event);
+#endif
DECLARE_EVENT_TABLE()
};
diff --git a/clientgui/sg_DlgMessages.cpp b/clientgui/sg_DlgMessages.cpp
index 07d16d0..01a748a 100644
--- a/clientgui/sg_DlgMessages.cpp
+++ b/clientgui/sg_DlgMessages.cpp
@@ -35,7 +35,6 @@
#include "version.h"
#include "sg_DlgMessages.h"
#include "NoticeListCtrl.h"
-#include "BOINCInternetFSHandler.h"
@@ -62,11 +61,9 @@ IMPLEMENT_DYNAMIC_CLASS( CPanelMessages, wxPanel )
BEGIN_EVENT_TABLE( CPanelMessages, wxPanel )
////@begin CPanelMessages event table entries
- EVT_NOTICELIST_ITEM_DISPLAY( CPanelMessages::OnLinkClicked )
EVT_ERASE_BACKGROUND( CPanelMessages::OnEraseBackground )
EVT_BUTTON( wxID_OK, CPanelMessages::OnOK )
EVT_BUTTON(ID_SIMPLE_HELP, CPanelMessages::OnButtonHelp)
- EVT_BUTTON( ID_LIST_RELOADNOTICES, CPanelMessages::OnRetryButton )
////@end CPanelMessages event table entries
END_EVENT_TABLE()
@@ -79,7 +76,7 @@ CPanelMessages::CPanelMessages( )
}
-CPanelMessages::CPanelMessages( wxWindow* parent ) :
+CPanelMessages::CPanelMessages( wxWindow* parent ) :
wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER)
{
Create();
@@ -94,7 +91,6 @@ bool CPanelMessages::Create()
{
////@begin CPanelMessages member initialisation
m_bProcessingRefreshEvent = false;
- m_bWaitingToClose = false;
////@end CPanelMessages member initialisation
CreateControls();
@@ -119,41 +115,37 @@ void CPanelMessages::CreateControls()
{
CPanelMessages* itemDialog1 = this;
- m_ReloadNoticesPanel = new wxPanel(this);
- m_ReloadNoticesPanel->SetBackgroundColour(*wxWHITE);
-
- wxFlexGridSizer* itemReloadButtonSizer = new wxFlexGridSizer(1, 2, 0, 0);
- itemReloadButtonSizer->AddGrowableCol(1);
-
- m_ReloadNoticesText = new wxStaticText(m_ReloadNoticesPanel,
- wxID_ANY,
- _("One or more items failed to load from the Internet."),
- wxDefaultPosition, wxDefaultSize, 0
- );
- itemReloadButtonSizer->Add(m_ReloadNoticesText, 1, wxALL, 5);
+ wxFlexGridSizer* itemFlexGridSizer2 = new wxFlexGridSizer(5, 1, 1, 0);
+ itemFlexGridSizer2->AddGrowableRow(2);
+ itemFlexGridSizer2->AddGrowableCol(0);
- m_ReloadNoticesButton = new wxButton(
- m_ReloadNoticesPanel,
- ID_LIST_RELOADNOTICES,
- _("Retry now"),
- wxDefaultPosition, wxDefaultSize, 0
+ m_FetchingNoticesText = new wxStaticText(
+ this, wxID_ANY,
+ _("Fetching notices; please wait..."),
+ wxPoint(20, 20), wxDefaultSize, 0
);
- itemReloadButtonSizer->Add(m_ReloadNoticesButton, 1, wxALL, 5);
+ m_FetchingNoticesText->SetBackgroundColour(*wxWHITE);
+ itemFlexGridSizer2->Add(m_FetchingNoticesText, 0, wxEXPAND | wxLEFT | wxRIGHT, 5);
- m_ReloadNoticesPanel->SetSizer(itemReloadButtonSizer);
- m_ReloadNoticesPanel->Layout();
-
- wxFlexGridSizer* itemFlexGridSizer2 = new wxFlexGridSizer(3, 1, 1, 0);
- itemFlexGridSizer2->AddGrowableRow(1);
- itemFlexGridSizer2->AddGrowableCol(0);
- itemDialog1->SetSizer(itemFlexGridSizer2);
+ m_NoNoticesText = new wxStaticText(
+ this, wxID_ANY,
+ _("There are no notices at this time."),
+ wxPoint(20, 20), wxDefaultSize, 0
+ );
+ m_NoNoticesText->SetBackgroundColour(*wxWHITE);
+ itemFlexGridSizer2->Add(m_NoNoticesText, 0, wxEXPAND | wxLEFT | wxRIGHT, 5);
- itemFlexGridSizer2->Add(m_ReloadNoticesPanel, 1, wxGROW|wxALL, 1);
m_pHtmlListPane = new CNoticeListCtrl(itemDialog1);
+ wxASSERT(m_pHtmlListPane);
+
itemFlexGridSizer2->Add(m_pHtmlListPane, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
+
+ wxButton* itemButton44 = new wxButton(itemDialog1, wxID_OK, _("Close"), wxDefaultPosition, wxDefaultSize);
+
+ itemBoxSizer4->Add(itemButton44, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
#ifdef __WXMAC__ // Don't let Close button overlap window's grow icon
itemFlexGridSizer2->Add(itemBoxSizer4, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 12);
@@ -161,31 +153,14 @@ void CPanelMessages::CreateControls()
itemFlexGridSizer2->Add(itemBoxSizer4, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5);
#endif
- wxButton* itemButton44 = new wxButton(itemDialog1, wxID_OK, _("Close"), wxDefaultPosition, wxDefaultSize);
-
- itemBoxSizer4->Add(itemButton44, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
-
-
- m_FetchingNoticesText = new wxStaticText(
- this, wxID_ANY,
- _("Fetching notices; please wait..."),
- wxPoint(20, 20), wxDefaultSize, 0
- );
- m_FetchingNoticesText->SetBackgroundColour(*wxWHITE);
+ itemDialog1->SetSizer(itemFlexGridSizer2);
- m_NoNoticesText = new wxStaticText(
- this, wxID_ANY,
- _("There are no notices at this time."),
- wxPoint(20, 20), wxDefaultSize, 0
- );
- m_NoNoticesText->SetBackgroundColour(*wxWHITE);
-
m_FetchingNoticesText->Hide();
+ m_bFetchingNoticesTextWasDisplayed = false;
+
m_NoNoticesText->Hide();
- m_ReloadNoticesPanel->Hide();
+ m_bNoNoticesTextWasDisplayed = false;
Layout();
-
- m_bMissingItems = false;
}
@@ -253,22 +228,17 @@ void CPanelMessages::OnEraseBackground(wxEraseEvent& event){
*/
void CPanelMessages::OnRefresh() {
- if (m_bWaitingToClose) return;
-
if (!m_bProcessingRefreshEvent) {
m_bProcessingRefreshEvent = true;
static wxString strLastMachineName = wxEmptyString;
wxString strNewMachineName = wxEmptyString;
- bool bMissingItems;
CC_STATUS status;
CMainDocument* pDoc = wxGetApp().GetDocument();
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
wxASSERT(pDoc);
wxASSERT(m_pHtmlListPane);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
- wxASSERT(internetFSHandler);
if (pDoc->IsConnected()) {
pDoc->GetConnectedComputerName(strNewMachineName);
@@ -276,13 +246,12 @@ void CPanelMessages::OnRefresh() {
strLastMachineName = strNewMachineName;
m_FetchingNoticesText->Show();
m_NoNoticesText->Hide();
- ((CBOINCInternetFSHandler*)internetFSHandler)->ClearCache();
m_pHtmlListPane->Clear();
- if (m_bMissingItems) {
- m_ReloadNoticesPanel->Hide();
- m_bMissingItems = false;
+ if (m_bNoNoticesTextWasDisplayed || !m_bFetchingNoticesTextWasDisplayed) {
Layout();
}
+ m_bFetchingNoticesTextWasDisplayed = true;
+ m_bNoNoticesTextWasDisplayed = false;
}
} else {
m_pHtmlListPane->Clear();
@@ -290,23 +259,19 @@ void CPanelMessages::OnRefresh() {
// Don't call Freeze() / Thaw() here because it causes an unnecessary redraw
m_pHtmlListPane->UpdateUI();
-
- if (m_bWaitingToClose) {
- wxCommandEvent evt(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
- GetEventHandler()->AddPendingEvent(evt);
- } else {
- bMissingItems = ((CBOINCInternetFSHandler*)internetFSHandler)->ItemsFailedToLoad();
- if (bMissingItems != m_bMissingItems) {
- m_ReloadNoticesPanel->Show(bMissingItems);
- Layout();
- m_bMissingItems = bMissingItems;
- }
-
- m_FetchingNoticesText->Show(m_pHtmlListPane->m_bDisplayFetchingNotices);
- m_NoNoticesText->Show(m_pHtmlListPane->m_bDisplayEmptyNotice);
+
+ if (m_bFetchingNoticesTextWasDisplayed != m_pHtmlListPane->m_bDisplayFetchingNotices) {
+ m_bFetchingNoticesTextWasDisplayed = m_pHtmlListPane->m_bDisplayFetchingNotices;
+ m_FetchingNoticesText->Show(m_bFetchingNoticesTextWasDisplayed);
+ Layout();
}
-
- m_bProcessingRefreshEvent = false;
+ if (m_bNoNoticesTextWasDisplayed != m_pHtmlListPane->m_bDisplayEmptyNotice) {
+ m_bNoNoticesTextWasDisplayed = m_pHtmlListPane->m_bDisplayEmptyNotice;
+ m_NoNoticesText->Show(m_bNoNoticesTextWasDisplayed);
+ Layout();
+ }
+
+ pDoc->UpdateUnreadNoticeState();
}
}
@@ -316,21 +281,6 @@ void CPanelMessages::OnRefresh() {
*/
void CPanelMessages::OnOK( wxCommandEvent& event ) {
- // Shut down any asynchronous Internet access in progress
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
- if (internetFSHandler) {
- ((CBOINCInternetFSHandler*)internetFSHandler)->SetAbortInternetIO();
- }
-
- // If we were called during Yield() in async Internet I/O,
- // it is not safe to call our destructor until OnRefresh()
- // has returned from m_pHtmlListPane->UpdateUI(), so just
- // set a flag to close this dialog at that time.
- if (m_bProcessingRefreshEvent) {
- m_bWaitingToClose = true;
- return;
- }
-
event.Skip();
}
@@ -363,30 +313,6 @@ void CPanelMessages::OnButtonHelp( wxCommandEvent& WXUNUSED(event) ) {
* wxEVT_NOTICELIST_ITEM_DISPLAY event handler for ID_LIST_NOTIFICATIONSVIEW
*/
-void CPanelMessages::OnLinkClicked( NoticeListCtrlEvent& event ) {
- if (event.GetURL().StartsWith(wxT("http://"))) {
- wxLaunchDefaultBrowser(event.GetURL());
- }
-}
-
-
-void CPanelMessages::OnRetryButton( wxCommandEvent& ) {
- m_ReloadNoticesPanel->Hide();
- m_bMissingItems = false;
- Layout();
- ReloadNotices();
-}
-
-
-void CPanelMessages::ReloadNotices() {
- wxFileSystemHandler *internetFSHandler = wxGetApp().GetInternetFSHandler();
- if (internetFSHandler) {
- ((CBOINCInternetFSHandler*)internetFSHandler)->UnchacheMissingItems();
- m_pHtmlListPane->Clear();
- m_FetchingNoticesText->Show();
- m_NoNoticesText->Hide();
- }
-}
bool CPanelMessages::OnSaveState(wxConfigBase* /* pConfig */) {
return true;
@@ -520,7 +446,7 @@ void CDlgMessages::OnShow(wxShowEvent& event) {
bAlreadyRunning = true;
wxLogTrace(wxT("Function Status"), wxT("CDlgMessages::OnShow - Show/Hide Event for CAdvancedFrame detected"));
- if (event.GetShow()) {
+ if (event.IsShown()) {
RestoreWindowDimensions();
} else {
SaveWindowDimensions();
diff --git a/clientgui/sg_DlgMessages.h b/clientgui/sg_DlgMessages.h
index 6deeb18..9bad892 100644
--- a/clientgui/sg_DlgMessages.h
+++ b/clientgui/sg_DlgMessages.h
@@ -96,20 +96,12 @@ public:
void OnRefresh();
- void ReloadNotices();
-
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
void OnOK( wxCommandEvent& event );
/// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_SIMPLE_HELP
void OnButtonHelp( wxCommandEvent& event );
- /// wxEVT_NOTICELIST_ITEM_DISPLAY event handler for ID_LIST_NOTIFICATIONSVIEW
- void OnLinkClicked( NoticeListCtrlEvent& event );
-
- /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_LIST_RELOADNOTICES
- void OnRetryButton( wxCommandEvent& event );
-
////@end CPanelMessages event handler declarations
////@begin CPanelMessages member function declarations
@@ -123,13 +115,10 @@ private:
CNoticeListCtrl* m_pHtmlListPane;
protected:
- wxPanel* m_ReloadNoticesPanel;
- wxStaticText* m_ReloadNoticesText;
- wxButton* m_ReloadNoticesButton;
wxStaticText* m_FetchingNoticesText;
wxStaticText* m_NoNoticesText;
- bool m_bMissingItems;
- bool m_bWaitingToClose;
+ bool m_bFetchingNoticesTextWasDisplayed;
+ bool m_bNoNoticesTextWasDisplayed;
};
diff --git a/clientgui/sg_DlgPreferences.cpp b/clientgui/sg_DlgPreferences.cpp
index a5e2af2..2be84be 100644
--- a/clientgui/sg_DlgPreferences.cpp
+++ b/clientgui/sg_DlgPreferences.cpp
@@ -89,20 +89,6 @@ wxString astrTimeOfDayStrings[] = {
};
-int iDiskUsageArraySize = 10;
-wxString astrDiskUsageStrings[] = {
- _("100 MB"),
- _("200 MB"),
- _("500 MB"),
- _("1 GB"),
- _("2 GB"),
- _("5 GB"),
- _("10 GB"),
- _("20 GB"),
- _("50 GB"),
- _("100 GB")
-};
-
// Used for sorting disk usage values
static int CompareDiskUsage(const wxString& strFirst, const wxString& strSecond) {
long lFirstValue;
@@ -131,16 +117,16 @@ static int CompareDiskUsage(const wxString& strFirst, const wxString& strSecond)
int iCPUUsageArraySize = 10;
wxString astrCPUUsageStrings[] = {
- _("10%"),
- _("20%"),
- _("30%"),
- _("40%"),
- _("50%"),
- _("60%"),
- _("70%"),
- _("80%"),
- _("90%"),
- _("100%")
+ wxT("10%"),
+ wxT("20%"),
+ wxT("30%"),
+ wxT("40%"),
+ wxT("50%"),
+ wxT("60%"),
+ wxT("70%"),
+ wxT("80%"),
+ wxT("90%"),
+ wxT("100%")
};
// Used for sorting cpu usage values
@@ -165,13 +151,13 @@ static int CompareCPUUsage(const wxString& strFirst, const wxString& strSecond)
int iWorkWhenIdleArraySize = 7;
wxString astrWorkWhenIdleStrings[] = {
- _("1"),
- _("3"),
- _("5"),
- _("10"),
- _("15"),
- _("30"),
- _("60")
+ wxT("1"),
+ wxT("3"),
+ wxT("5"),
+ wxT("10"),
+ wxT("15"),
+ wxT("30"),
+ wxT("60")
};
// Used for sorting work when idle values
@@ -276,7 +262,7 @@ void CPanelPreferences::CreateControls()
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
itemDialog1->SetSizer(itemBoxSizer2);
- wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(1, 1, 0, 0);
+ wxFlexGridSizer* itemFlexGridSizer3 = new wxFlexGridSizer(1, 0, 0);
itemBoxSizer2->Add(itemFlexGridSizer3, 0, wxGROW|wxALL, 5);
CTransparentStaticText* itemStaticText4 = new CTransparentStaticText( itemDialog1, wxID_ANY, _("This dialog controls preferences for this computer only."), wxDefaultPosition, wxDefaultSize, 0 );
@@ -289,23 +275,18 @@ void CPanelPreferences::CreateControls()
// itemStaticText5->SetFont(wxFont(MEDIUM_FONT, wxSWISS, wxNORMAL, wxBOLD, false, _T("Arial")));
itemFlexGridSizer3->Add(itemStaticText5, 0, wxALL, 0);
- CTransparentStaticText* itemStaticText6 = new CTransparentStaticText( itemDialog1, wxID_ANY, _("Click Clear to restore web-based settings."), wxDefaultPosition, wxDefaultSize, 0 );
+ CTransparentStaticText* itemStaticText6 = new CTransparentStaticText( itemDialog1, wxID_ANY, _("Click Clear to restore web-based settings for all preferences listed below."), wxDefaultPosition, wxDefaultSize, 0 );
// itemStaticText6->SetFont(wxFont(MEDIUM_FONT, wxSWISS, wxNORMAL, wxBOLD, false, _T("Arial")));
itemFlexGridSizer3->Add(itemStaticText6, 0, wxALL, 0);
itemFlexGridSizer3->AddSpacer(10);
- CTransparentStaticText* itemStaticText7 = new CTransparentStaticText( itemDialog1, wxID_ANY, _("For additional settings, select Computing Preferences in "), wxDefaultPosition, wxDefaultSize, 0 );
+ CTransparentStaticText* itemStaticText7 = new CTransparentStaticText( itemDialog1, wxID_ANY, _("For additional settings, select Computing Preferences in the Advanced View."), wxDefaultPosition, wxDefaultSize, 0 );
// itemStaticText7->SetFont(wxFont(MEDIUM_FONT, wxSWISS, wxNORMAL, wxBOLD, false, _T("Arial")));
itemFlexGridSizer3->Add(itemStaticText7, 0, wxALL, 0);
- CTransparentStaticText* itemStaticText8 = new CTransparentStaticText( itemDialog1, wxID_ANY, _("the Advanced View."), wxDefaultPosition, wxDefaultSize, 0 );
-
-// itemStaticText8->SetFont(wxFont(MEDIUM_FONT, wxSWISS, wxNORMAL, wxBOLD, false, _T("Arial")));
- itemFlexGridSizer3->Add(itemStaticText8, 0, wxALL, 0);
-
CTransparentStaticLine* itemStaticLine8 = new CTransparentStaticLine( itemDialog1, wxID_ANY, wxDefaultPosition, wxSize(300, 1), wxLI_HORIZONTAL|wxNO_BORDER );
itemStaticLine8->SetLineColor(pSkinSimple->GetStaticLineColor());
itemBoxSizer2->Add(itemStaticLine8, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT, 20);
@@ -445,7 +426,7 @@ void CPanelPreferences::CreateControls()
itemBoxSizer44->Add(itemButton44, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
m_btnClear = new wxButton( this, ID_SGPREFERENCESCLEAR, _("Clear"), wxDefaultPosition, wxDefaultSize, 0 );
- m_btnClear->SetToolTip( _("clear all local preferences and close the dialog") );
+ m_btnClear->SetToolTip( _("Clear all local preferences listed above and close the dialog") );
itemBoxSizer44->Add(m_btnClear, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
@@ -650,6 +631,23 @@ bool CPanelPreferences::ReadPreferenceSettings() {
int retval;
unsigned int i;
+ // We localize these because some languages (e.g., French) use
+ // different abbreviations for MB and GB.
+ // Note: _() cannot be used for static or global strings.
+ wxString astrDiskUsageStrings[] = {
+ _("100 MB"),
+ _("200 MB"),
+ _("500 MB"),
+ _("1 GB"),
+ _("2 GB"),
+ _("5 GB"),
+ _("10 GB"),
+ _("20 GB"),
+ _("50 GB"),
+ _("100 GB")
+ };
+ int iDiskUsageArraySize = 10;
+
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
@@ -945,7 +943,7 @@ bool CDlgPreferences::Create( wxWindow* parent, wxWindowID id, const wxString& c
// Initialize Application Title
wxString strCaption = caption;
if (strCaption.IsEmpty()) {
- strCaption.Printf(_("%s - Preferences"), pSkinAdvanced->GetApplicationShortName().c_str());
+ strCaption.Printf(_("%s - Computing Preferences"), pSkinAdvanced->GetApplicationShortName().c_str());
}
SetTitle(strCaption);
diff --git a/clientgui/sg_ImageButton.cpp b/clientgui/sg_ImageButton.cpp
deleted file mode 100644
index fb9fb66..0000000
--- a/clientgui/sg_ImageButton.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_ImageButton.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "common/wxFlatNotebook.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "sg_ImageButton.h"
-#include "sg_ImageLoader.h"
-#include "sg_ViewTabPage.h"
-
-BEGIN_EVENT_TABLE(CImageButton, wxPanel)
- EVT_PAINT(CImageButton::OnPaint)
- EVT_LEFT_UP(CImageButton::OnLeftUp)
- EVT_ERASE_BACKGROUND(CImageButton::OnEraseBackground)
-END_EVENT_TABLE()
-
-CImageButton::CImageButton(wxWindow* parent,wxBitmap bg, wxPoint coord,wxSize size,bool enableShowGraphics, int initStatus) : wxPanel(parent, wxID_ANY, coord, size, wxNO_BORDER)
-{
- btnBG = bg;
- m_enableShowGraphics = enableShowGraphics;
- status = initStatus;
- SetToolTip();
-}
-
-CImageButton::~CImageButton() {
-}
-
-void CImageButton::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxPaintDC dc(this);
- dc.SetTextForeground(wxColour(*wxWHITE));
-#ifdef __WXMAC__
- dc.SetFont(wxFont(10,74,90,90,0,wxT("Arial")));
-#else
- dc.SetFont(wxFont(7,74,90,90,0,wxT("Arial")));
-#endif
- int x, y;
- GetSize(&x,&y);
- wxCoord width, height;
- dc.GetTextExtent(GetStatusText(), &width, &height);
- dc.DrawText(GetStatusText(), wxPoint(7, y-height-4));
- // display show graphics text (if available)
- if(m_enableShowGraphics) {
- wxString text = wxString(_T("Graphics Available"));
- dc.GetTextExtent(text, &width, &height);
- dc.DrawText(text, wxPoint(x-width-7,y-height-4));
- }
-}
-void CImageButton::SetImage(wxBitmap bg)
-{
- btnBG = bg;
-}
-void CImageButton::SetStatus(int newStatus) {
- status = newStatus;
-}
-int CImageButton::GetStatus() {
- return status;
-}
-
-wxString CImageButton::GetStatusText() {
- if ( status == TAB_STATUS_RUNNING ) {
- return wxString(_("Running"));
- } else if ( status == TAB_STATUS_PREEMPTED ) {
- return wxString(_("Paused: Other work running"));
- } else if ( status == TAB_STATUS_PAUSED_USER_REQ ) {
- return wxString(_("Paused: User initiated. Click 'Resume' to continue"));
- } else if ( status == TAB_STATUS_PAUSED_USER_ACTIVE ) {
- return wxString(_("Paused: User active"));
- } else if ( status == TAB_STATUS_PAUSED_POWER ) {
- return wxString(_("Paused: Computer on battery"));
- } else if ( status == TAB_STATUS_PAUSED_TIME_OF_DAY ) {
- return wxString(_("Paused: Time of Day"));
- } else if ( status == TAB_STATUS_PAUSED_BENCHMARKS ) {
- return wxString(_("Paused: Benchmarks running"));
- } else if ( status == TAB_STATUS_PAUSED ) {
- return wxString(_("Paused"));
- } else if ( status == TAB_STATUS_INITIAL_DELAY ) {
- return wxString(_("Paused: Application start delayed"));
- } else {
- return wxEmptyString;
- }
-}
-void CImageButton::OnEraseBackground(wxEraseEvent& event){
-
- event.Skip(false);
- wxDC *dc;
- dc=event.GetDC();
- dc->SetBackground(wxBrush(this->GetBackgroundColour(),wxSOLID));
- dc->Clear();
- if(btnBG.Ok())
- {
- dc->DrawBitmap(btnBG, 0, 0);
- }
-
-}
-void CImageButton::OnLeftUp(wxMouseEvent& WXUNUSED(event))
-{
- CViewTabPage* pView = wxDynamicCast(GetParent(), CViewTabPage);
- wxASSERT(pView);
- pView->OnImageButton();
-
-}
-
-void CImageButton::SetToolTip() {
- if ( m_enableShowGraphics ) {
- wxPanel::SetToolTip(new wxToolTip(_("Click to show project graphics")));
- } else {
- wxPanel::SetToolTip(NULL);
- }
-}
-
-void CImageButton::SetEnableShowGraphics(bool show) {
- if ( show != m_enableShowGraphics ) {
- m_enableShowGraphics = show;
- SetToolTip();
- Refresh();
- }
-}
diff --git a/clientgui/sg_ImageButton.h b/clientgui/sg_ImageButton.h
deleted file mode 100644
index 0f15a57..0000000
--- a/clientgui/sg_ImageButton.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _IMAGEBUTTON_H_
-#define _IMAGEBUTTON_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_ImageButton.cpp"
-#endif
-
-#define TAB_STATUS_RUNNING 1
-#define TAB_STATUS_PREEMPTED 2
-#define TAB_STATUS_PAUSED_USER_ACTIVE 3
-#define TAB_STATUS_PAUSED_USER_REQ 4
-#define TAB_STATUS_PAUSED_POWER 5
-#define TAB_STATUS_PAUSED_TIME_OF_DAY 6
-#define TAB_STATUS_PAUSED_BENCHMARKS 7
-#define TAB_STATUS_PAUSED 8
-#define TAB_STATUS_INITIAL_DELAY 9
-
-class CImageButton : public wxPanel
-{
-public:
- /// Constructors
- CImageButton(wxWindow* parent,wxBitmap bg,wxPoint coord, wxSize size, bool drawText, int initStatus);
- ~CImageButton();
- void SetImage(wxBitmap bg);
- void OnPaint(wxPaintEvent& event);
- void OnLeftUp(wxMouseEvent& event);
- void OnEraseBackground(wxEraseEvent& event);
- void SetEnableShowGraphics(bool show);
- void SetStatus(int status);
- int GetStatus();
-private:
- //static const int MaxWidth = 320;
- //static const int MaxHeight = 240;
- wxBitmap btnBG;
- bool m_enableShowGraphics;
- int status;
- wxString GetStatusText();
- void SetToolTip();
- DECLARE_EVENT_TABLE()
-};
-
-#endif
diff --git a/clientgui/sg_ImageLoader.cpp b/clientgui/sg_ImageLoader.cpp
deleted file mode 100644
index 79f720d..0000000
--- a/clientgui/sg_ImageLoader.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_ImageLoader.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "sg_ImageLoader.h"
-
-BEGIN_EVENT_TABLE(ImageLoader, wxWindow)
- EVT_PAINT(ImageLoader::OnPaint)
-END_EVENT_TABLE()
-
-ImageLoader::ImageLoader(wxWindow* parent, bool center) :
- wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER)
-{
- centerOnParent = center;
-}
-
-
-void ImageLoader::LoadImage(wxBitmap image)
-{
- int width = image.GetWidth();
- int height = image.GetHeight();
- Bitmap = image;
- SetSize(width, height);
- if ( centerOnParent ) {
- CentreOnParent();
- }
-}
-
-
-void ImageLoader::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxPaintDC dc(this);
- if(Bitmap.Ok())
- {
- dc.DrawBitmap(Bitmap, 0, 0);
- }
-}
diff --git a/clientgui/sg_ImageLoader.h b/clientgui/sg_ImageLoader.h
deleted file mode 100644
index 8f163be..0000000
--- a/clientgui/sg_ImageLoader.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _IMAGELOADER_H_
-#define _IMAGELOADER_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_ImageLoader.cpp"
-#endif
-
-class ImageLoader : public wxWindow
-{
-public:
- /// Constructors
- ImageLoader(wxWindow* parent, bool center = false);
- void LoadImage(wxBitmap image);
- void OnPaint(wxPaintEvent& event);
-private:
- //static const int MaxWidth = 320;
- //static const int MaxHeight = 240;
- wxBitmap Bitmap;
- bool centerOnParent;
- DECLARE_EVENT_TABLE()
-};
-
-#endif
-
diff --git a/clientgui/sg_PanelBase.cpp b/clientgui/sg_PanelBase.cpp
index c0172ad..647ce4f 100644
--- a/clientgui/sg_PanelBase.cpp
+++ b/clientgui/sg_PanelBase.cpp
@@ -180,6 +180,7 @@ void CSimplePanelBase::EraseBackground(wxDC *dc) {
dc->GetSize(&w, &h);
dc->DrawRoundedRectangle(0, 0, w, h, RECTANGLERADIUS);
+#if 0 // This does not work properly with wxCocoa 3.0 and is no longer needed
#ifdef __WXMAC__
// Mac progress bar can be hard to see on a colored
// background, so put it on a white background
@@ -190,6 +191,7 @@ void CSimplePanelBase::EraseBackground(wxDC *dc) {
dc->DrawRoundedRectangle(progressRect->x, progressRect->y, progressRect->width, progressRect->height, 2);
}
#endif
+#endif
// Restore Mode, Pen and Brush
dc->SetBackgroundMode(oldMode);
diff --git a/clientgui/sg_PanelBase.h b/clientgui/sg_PanelBase.h
index 4788195..c5087ea 100644
--- a/clientgui/sg_PanelBase.h
+++ b/clientgui/sg_PanelBase.h
@@ -22,16 +22,6 @@
#include "sg_BoincSimpleFrame.h"
-// TODO: Move these to events.h
-enum{
- ID_CHANGE_SLIDE_TIMER = 14000,
- WEBSITE_URL_MENU_ID = 34500,
- WEBSITE_URL_MENU_ID_REMOVE_PROJECT = 34550,
- WEBSITE_URL_MENU_ID_HOMEPAGE = 34551,
-};
-
-
-
///////////////////////////////////////////////////////////////////////////
#ifdef __WXMAC__
@@ -54,7 +44,7 @@ enum{
#ifdef __WXMAC__
#include "MacBitmapComboBox.h"
#else
-#include "BOINCBitmapComboBox.h"
+#define CBOINCBitmapComboBox wxBitmapComboBox
#endif
diff --git a/clientgui/sg_ProgressBar.cpp b/clientgui/sg_ProgressBar.cpp
deleted file mode 100644
index 3ee707d..0000000
--- a/clientgui/sg_ProgressBar.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_ProgressBar.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "sg_ImageLoader.h"
-#include "sg_ProgressBar.h"
-
-BEGIN_EVENT_TABLE(CProgressBar, wxWindow)
- EVT_ERASE_BACKGROUND(CProgressBar::OnEraseBackground)
-END_EVENT_TABLE()
-
-CProgressBar::CProgressBar(wxPanel* parent,wxPoint coord) : wxPanel(parent, wxID_ANY, coord, wxSize(258,18), wxNO_BORDER)
-{
- indicatorWidth = 8;
- indicatorHeight = 7;
- numOfIndic = 30;
- rightPosition = 9;
- topPosition = 5;
- m_progress = 0;
- m_numOfProgressInd = 0;
- LoadIndicators();
-}
-
-void CProgressBar::LoadIndicators() {
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
- int indIndex = 0;
- int indSize = 0;
- int x_pos;
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProgressBar::LoadIndicators - Function Start"));
-
- // Remove any currently loaded
- indSize = (int)m_progInd.size();
- for(indIndex = 0; indIndex < indSize; indIndex++){
- delete m_progInd[indIndex];
- }
- m_progInd.clear();
-
- // Load all new ones but do not display
- for(indIndex=0; indIndex < numOfIndic; indIndex++) {
- ImageLoader *i_ind = new ImageLoader(this);
- x_pos = rightPosition +((indicatorWidth)*indIndex);
- i_ind->Move(wxPoint(x_pos,topPosition));
- i_ind->LoadImage(*(pSkinSimple->GetWorkunitGaugeProgressIndicatorImage()->GetBitmap()));
- i_ind->Show(true);
- m_progInd.push_back(i_ind);
- }
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProgressBar::LoadIndicators - Function End"));
-}
-void CProgressBar::SetValue(double progress)
-{
- int indIndex = 0;
- int numOfProgressInd = ((int)progress/(100/numOfIndic));
-
- if (numOfProgressInd < 0) numOfProgressInd = 0;
- if (numOfProgressInd > numOfIndic) numOfProgressInd = numOfIndic;
-
- for(indIndex = 0; indIndex < numOfIndic; indIndex++){
- ImageLoader *i_ind = m_progInd[indIndex];
- if ( indIndex + 1 <= numOfProgressInd ) {
- i_ind->Show(true);
- } else {
- i_ind->Show(false);
- }
- }
-
- m_progress = progress;
- m_numOfProgressInd = numOfProgressInd;
-}
-void CProgressBar::ReskinInterface()
-{
- LoadIndicators();
- SetValue(m_progress);
-}
-void CProgressBar::OnEraseBackground(wxEraseEvent& event){
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- event.Skip(false);
- wxDC *dc;
- dc=event.GetDC();
- dc->SetBackground(wxBrush(this->GetBackgroundColour(),wxSOLID));
- dc->Clear();
- dc->DrawBitmap(*(pSkinSimple->GetWorkunitGaugeBackgroundImage()->GetBitmap()), 0, 0);
-}
diff --git a/clientgui/sg_ProgressBar.h b/clientgui/sg_ProgressBar.h
deleted file mode 100644
index 60b2cfa..0000000
--- a/clientgui/sg_ProgressBar.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _PROGRESSBAR_H_
-#define _PROGRESSBAR_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_ProgressBar.cpp"
-#endif
-
-class ImageLoader;
-
-class CProgressBar : public wxPanel
-{
-public:
- int indicatorWidth;
- int indicatorHeight;
- int numOfIndic;
- int rightPosition;
- int topPosition;
- std::vector<ImageLoader*> m_progInd;
- /// Constructors
- CProgressBar(wxPanel* parent, wxPoint coord);
- void SetValue(double progress);
- void ReskinInterface();
- void LoadIndicators();
-private:
-
- double m_progress;
- int m_numOfProgressInd;
-
- void OnEraseBackground(wxEraseEvent& event);
-
- DECLARE_EVENT_TABLE()
-};
-
-#endif
-
diff --git a/clientgui/sg_ProjectCommandPopup.cpp b/clientgui/sg_ProjectCommandPopup.cpp
index e4ef2c0..a0b17e2 100644
--- a/clientgui/sg_ProjectCommandPopup.cpp
+++ b/clientgui/sg_ProjectCommandPopup.cpp
@@ -27,7 +27,7 @@
IMPLEMENT_DYNAMIC_CLASS(CSimpleProjectCommandPopupButton, CTransparentButton)
BEGIN_EVENT_TABLE(CSimpleProjectCommandPopupButton, CTransparentButton)
- EVT_LEFT_DOWN(CSimpleProjectCommandPopupButton::OnProjectCommandsButton)
+ EVT_LEFT_DOWN(CSimpleProjectCommandPopupButton::OnProjectCommandsMouseDown)
EVT_MENU(ID_TASK_PROJECT_UPDATE, CSimpleProjectCommandPopupButton::OnProjectUpdate)
EVT_MENU(ID_TASK_PROJECT_SUSPEND, CSimpleProjectCommandPopupButton::OnProjectSuspendResume)
EVT_MENU(ID_TASK_PROJECT_NONEWWORK, CSimpleProjectCommandPopupButton::OnProjectNoNewWork)
@@ -47,6 +47,11 @@ CSimpleProjectCommandPopupButton::CSimpleProjectCommandPopupButton(wxWindow* par
m_ProjectCommandsPopUpMenu = new wxMenu();
AddMenuItems();
+ Connect(
+ id,
+ wxEVT_BUTTON,
+ (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) &CSimpleProjectCommandPopupButton::OnProjectCommandsKeyboardNav
+ );
}
@@ -94,7 +99,17 @@ void CSimpleProjectCommandPopupButton::AddMenuItems() {
}
-void CSimpleProjectCommandPopupButton::OnProjectCommandsButton(wxMouseEvent& /*event*/) {
+void CSimpleProjectCommandPopupButton::OnProjectCommandsMouseDown(wxMouseEvent& event) {
+ ShowProjectCommandsMenu(ScreenToClient(wxGetMousePosition()));
+}
+
+
+void CSimpleProjectCommandPopupButton::OnProjectCommandsKeyboardNav(wxCommandEvent& event) {
+ ShowProjectCommandsMenu(wxPoint(GetSize().GetWidth()/2, GetSize().GetHeight()/2));
+}
+
+
+void CSimpleProjectCommandPopupButton::ShowProjectCommandsMenu(wxPoint pos) {
CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(pDoc);
@@ -129,7 +144,7 @@ void CSimpleProjectCommandPopupButton::OnProjectCommandsButton(wxMouseEvent& /*e
wxToolTip::Enable(false);
#endif
- PopupMenu(m_ProjectCommandsPopUpMenu);
+ PopupMenu(m_ProjectCommandsPopUpMenu, pos.x, pos.y);
}
diff --git a/clientgui/sg_ProjectCommandPopup.h b/clientgui/sg_ProjectCommandPopup.h
index 1af185f..aa25de2 100644
--- a/clientgui/sg_ProjectCommandPopup.h
+++ b/clientgui/sg_ProjectCommandPopup.h
@@ -40,7 +40,9 @@ class CSimpleProjectCommandPopupButton : public CTransparentButton
private:
void AddMenuItems();
- void OnProjectCommandsButton(wxMouseEvent& event);
+ void OnProjectCommandsMouseDown(wxMouseEvent& event);
+ void OnProjectCommandsKeyboardNav(wxCommandEvent& event);
+ void ShowProjectCommandsMenu(wxPoint pos);
void OnProjectUpdate(wxCommandEvent& event);
void OnProjectSuspendResume(wxCommandEvent& event);
void OnProjectNoNewWork(wxCommandEvent& event);
diff --git a/clientgui/sg_ProjectPanel.cpp b/clientgui/sg_ProjectPanel.cpp
index 80e45e5..581c05d 100644
--- a/clientgui/sg_ProjectPanel.cpp
+++ b/clientgui/sg_ProjectPanel.cpp
@@ -34,12 +34,14 @@
#include "test/einstein_icon.xpm"
#endif
-
-
IMPLEMENT_DYNAMIC_CLASS(CSimpleProjectPanel, CSimplePanelBase)
BEGIN_EVENT_TABLE(CSimpleProjectPanel, CSimplePanelBase)
- EVT_BOINCBITMAPCOMBOBOX(ID_SGPROJECTSELECTOR, CSimpleProjectPanel::OnProjectSelection)
+#ifdef __WXMAC__
+ EVT_CHOICE(ID_SGPROJECTSELECTOR, CSimpleProjectPanel::OnProjectSelection)
+#else
+ EVT_COMBOBOX(ID_SGPROJECTSELECTOR, CSimpleProjectPanel::OnProjectSelection)
+#endif
EVT_BUTTON(ID_ADDROJECTBUTTON, CSimpleProjectPanel::OnAddProject)
#if TESTBIGICONPOPUP
EVT_BUTTON(ID_PROJECTWEBSITESBUTTON, CSimpleProjectPanel::OnProjectWebSiteButton)
@@ -264,7 +266,7 @@ void CSimpleProjectPanel::UpdateInterface() {
m_TotalCreditValue->SetName(str); // For accessibility on Windows
}
projName = m_ProjectSelectionCtrl->GetStringSelection();
- str.Printf(_("Pop up a menu of websites for project %s"), projName.c_str());
+ str.Printf(_("Pop up a menu of web sites for project %s"), projName.c_str());
m_ProjectWebSitesButton->SetToolTip(str);
str.Printf(_("Pop up a menu of commands to apply to project %s"), projName.c_str());
m_ProjectCommandsButton->SetToolTip(str);
diff --git a/clientgui/sg_ProjectPanel.h b/clientgui/sg_ProjectPanel.h
index c0ac62a..517ecc5 100644
--- a/clientgui/sg_ProjectPanel.h
+++ b/clientgui/sg_ProjectPanel.h
@@ -32,6 +32,8 @@ typedef struct {
/// Class CSimpleProjectPanel
///////////////////////////////////////////////////////////////////////////////
+class CBOINCBitmapComboBox;
+
class CSimpleProjectPanel : public CSimplePanelBase
{
DECLARE_DYNAMIC_CLASS( CSimpleProjectPanel )
diff --git a/clientgui/sg_ProjectWebSitesPopup.cpp b/clientgui/sg_ProjectWebSitesPopup.cpp
index fd69b43..168db16 100644
--- a/clientgui/sg_ProjectWebSitesPopup.cpp
+++ b/clientgui/sg_ProjectWebSitesPopup.cpp
@@ -26,7 +26,7 @@
IMPLEMENT_DYNAMIC_CLASS(CSimpleProjectWebSitesPopupButton, CTransparentButton)
BEGIN_EVENT_TABLE(CSimpleProjectWebSitesPopupButton, CTransparentButton)
- EVT_LEFT_DOWN(CSimpleProjectWebSitesPopupButton::OnProjectWebSiteButton)
+ EVT_LEFT_DOWN(CSimpleProjectWebSitesPopupButton::OnProjectWebSitesMouseDown)
EVT_MENU(WEBSITE_URL_MENU_ID,CSimpleProjectWebSitesPopupButton::OnMenuLinkClicked)
EVT_MENU(WEBSITE_URL_MENU_ID_REMOVE_PROJECT,CSimpleProjectWebSitesPopupButton::OnMenuLinkClicked)
END_EVENT_TABLE()
@@ -41,6 +41,11 @@ CSimpleProjectWebSitesPopupButton::CSimpleProjectWebSitesPopupButton(wxWindow* p
{
m_ProjectWebSitesPopUpMenu = new wxMenu();
+ Connect(
+ id,
+ wxEVT_BUTTON,
+ (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) &CSimpleProjectWebSitesPopupButton::OnProjectWebSitesKeyboardNav
+ );
}
@@ -88,14 +93,23 @@ void CSimpleProjectWebSitesPopupButton::RebuildMenu() {
}
+void CSimpleProjectWebSitesPopupButton::OnProjectWebSitesMouseDown(wxMouseEvent& event) {
+ ShowProjectWebSitesMenu(ScreenToClient(wxGetMousePosition()));
+}
+
+
+void CSimpleProjectWebSitesPopupButton::OnProjectWebSitesKeyboardNav(wxCommandEvent& event) {
+ ShowProjectWebSitesMenu(wxPoint(GetSize().GetWidth()/2, GetSize().GetHeight()/2));
+}
+
-void CSimpleProjectWebSitesPopupButton::OnProjectWebSiteButton(wxMouseEvent& WXUNUSED(event)) {
+void CSimpleProjectWebSitesPopupButton::ShowProjectWebSitesMenu(wxPoint pos) {
#ifdef __WXMAC__
// Disable tooltips on Mac while menus are popped up because they cover menus
wxToolTip::Enable(false);
#endif
- PopupMenu(m_ProjectWebSitesPopUpMenu);
+ PopupMenu(m_ProjectWebSitesPopUpMenu, pos.x, pos.y);
}
diff --git a/clientgui/sg_ProjectWebSitesPopup.h b/clientgui/sg_ProjectWebSitesPopup.h
index 085c66b..367f6bd 100644
--- a/clientgui/sg_ProjectWebSitesPopup.h
+++ b/clientgui/sg_ProjectWebSitesPopup.h
@@ -42,7 +42,9 @@ class CSimpleProjectWebSitesPopupButton : public CTransparentButton
private:
void AddMenuItems();
- void OnProjectWebSiteButton(wxMouseEvent& event);
+ void OnProjectWebSitesMouseDown(wxMouseEvent& event);
+ void OnProjectWebSitesKeyboardNav(wxCommandEvent& event);
+ void ShowProjectWebSitesMenu(wxPoint pos);
void OnMenuLinkClicked(wxCommandEvent& event);
protected:
diff --git a/clientgui/sg_ProjectsComponent.cpp b/clientgui/sg_ProjectsComponent.cpp
deleted file mode 100644
index 14de4a1..0000000
--- a/clientgui/sg_ProjectsComponent.cpp
+++ /dev/null
@@ -1,752 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_ProjectsComponent.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "str_util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "Events.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "BOINCBaseFrame.h"
-#include "sg_BoincSimpleGUI.h"
-#include "sg_ImageLoader.h"
-#include "sg_CustomControls.h"
-#include "sg_StatImageLoader.h"
-#include "sg_DlgMessages.h"
-#include "sg_DlgPreferences.h"
-#include "sg_ProjectsComponent.h"
-#include "wizardex.h"
-#include "BOINCBaseWizard.h"
-#include "WizardAttach.h"
-#include "app_ipc.h"
-#include "version.h"
-
-
-
-IMPLEMENT_DYNAMIC_CLASS(CProjectsComponent, wxPanel)
-
-BEGIN_EVENT_TABLE(CProjectsComponent, wxPanel)
- EVT_BUTTON(ID_SIMPLE_HELP, CProjectsComponent::OnHelp)
- EVT_BUTTON(ID_SIMPLE_MESSAGES, CProjectsComponent::OnMessages)
- EVT_BUTTON(ID_SIMPLE_MESSAGES_ALERT, CProjectsComponent::OnMessages)
- EVT_BUTTON(ID_SIMPLE_SUSPEND, CProjectsComponent::OnSuspend)
- EVT_BUTTON(ID_SIMPLE_RESUME, CProjectsComponent::OnResume)
- EVT_BUTTON(ID_SIMPLE_PREFERENCES, CProjectsComponent::OnPreferences)
- EVT_BUTTON(ID_WIZARDATTACH, CProjectsComponent::OnWizardAttach)
- EVT_BUTTON(ID_WIZARDUPDATE, CProjectsComponent::OnWizardUpdate)
- EVT_PAINT(CProjectsComponent::OnPaint)
- EVT_BUTTON(-1,CProjectsComponent::OnBtnClick)
- EVT_ERASE_BACKGROUND(CProjectsComponent::OnEraseBackground)
- EVT_TIMER(ID_SIMPLEMESSAGECHECKTIMER, CProjectsComponent::OnMessageCheck)
-END_EVENT_TABLE()
-
-CProjectsComponent::CProjectsComponent() {
-}
-
-
-CProjectsComponent::CProjectsComponent(CSimplePanel* parent,wxPoint coord) :
- wxPanel(parent, -1, coord, wxSize(343,113), wxNO_BORDER)
-{
- wxASSERT(parent);
- m_maxNumOfIcons = 6; // max number of icons in component
- m_leftIndex = 0;
- CreateComponent();
-
- receivedErrorMessage = false;
- alertMessageDisplayed = false;
- checkForMessagesTimer = new wxTimer(this, ID_SIMPLEMESSAGECHECKTIMER);
- checkForMessagesTimer->Start(5000);
-
-}
-
-CProjectsComponent::~CProjectsComponent() {
- delete checkForMessagesTimer;
-}
-
-void CProjectsComponent::CreateComponent()
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
- CSkinAdvanced* pSkinAdvanced = wxGetApp().GetSkinManager()->GetAdvanced();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
- wxASSERT(pSkinAdvanced);
- wxASSERT(wxDynamicCast(pSkinAdvanced, CSkinAdvanced));
-
- Freeze();
-
- //Set Background color
- SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
-
- //Static content in my Projects section
- // add project button
- wxToolTip *ttAddProject = new wxToolTip(_("Volunteer for any or all of 30+ projects in many areas of science"));
- btnAddProj=new wxBitmapButton(
- this,
- ID_WIZARDATTACH,
- *pSkinSimple->GetAttachProjectButton()->GetBitmap(),
- wxPoint(214,7),
- wxSize(81,18),
- wxBU_AUTODRAW
- );
- if ( pSkinSimple->GetAttachProjectButton()->GetBitmapClicked() != NULL ) {
- btnAddProj->SetBitmapSelected(
- *pSkinSimple->GetAttachProjectButton()->GetBitmapClicked()
- );
- }
- btnAddProj->SetToolTip(ttAddProject);
-
- // syncronize button, hidden by default.
- wxToolTip *ttSynchronize = new wxToolTip(_("Synchronize projects with account manager system"));
- btnSynchronize=new wxBitmapButton(
- this,
- ID_WIZARDUPDATE,
- *pSkinSimple->GetSynchronizeButton()->GetBitmap(),
- wxPoint(214,7),
- wxSize(81,18),
- wxBU_AUTODRAW
- );
- if ( pSkinSimple->GetSynchronizeButton()->GetBitmapClicked() != NULL ) {
- btnSynchronize->SetBitmapSelected(
- *pSkinSimple->GetSynchronizeButton()->GetBitmapClicked()
- );
- }
- btnSynchronize->SetToolTip(ttSynchronize);
- btnSynchronize->Show(false);
-
- /// Help
- wxString helpTip;
- helpTip.Printf(_("Get help with %s"), pSkinAdvanced->GetApplicationShortName().c_str());
- wxToolTip *ttHelp = new wxToolTip(helpTip);
- btnHelp=new wxBitmapButton(
- this,
- ID_SIMPLE_HELP,
- *pSkinSimple->GetHelpButton()->GetBitmap(),
- wxPoint(300,7),
- wxSize(
- (*pSkinSimple->GetHelpButton()->GetBitmap()).GetWidth(),
- (*pSkinSimple->GetHelpButton()->GetBitmap()).GetHeight()
- ),
- wxBU_AUTODRAW
- );
- if ( pSkinSimple->GetHelpButton()->GetBitmapClicked() != NULL ) {
- btnHelp->SetBitmapSelected(
- *pSkinSimple->GetHelpButton()->GetBitmapClicked()
- );
- }
- btnHelp->SetToolTip(ttHelp);
-
-
- /// Line
- lnMyProjTop = new CTransparentStaticLine(this, wxID_ANY, wxPoint(29,29),wxSize(292,1));
- lnMyProjTop->SetLineColor(pSkinSimple->GetStaticLineColor());
-
- //// Arrow Btns
- btnArwLeft = new wxBitmapButton(
- this,
- -1,
- *pSkinSimple->GetLeftArrowButton()->GetBitmap(),
- wxPoint(29,47),
- wxSize(20,20),
- wxBU_AUTODRAW
- );
- if ( pSkinSimple->GetLeftArrowButton()->GetBitmapClicked() != NULL ) {
- btnArwLeft->SetBitmapSelected(*pSkinSimple->GetLeftArrowButton()->GetBitmapClicked());
- }
- btnArwLeft->Show(false);//on creation this one is always false
-
- btnArwRight = new wxBitmapButton(
- this,
- -1,
- *pSkinSimple->GetRightArrowButton()->GetBitmap(),
- wxPoint(301,47),
- wxSize(20,20),
- wxBU_AUTODRAW
- );
- if ( pSkinSimple->GetRightArrowButton()->GetBitmapClicked() != NULL ) {
- btnArwRight->SetBitmapSelected(*pSkinSimple->GetRightArrowButton()->GetBitmapClicked());
- }
- btnArwRight->Show(false);
-
- //
- //// Messages Play Pause Btns
- wxToolTip *ttMessages = new wxToolTip(_("Open a window to view messages"));
- btnMessages = new CLinkButton(
- this,
- ID_SIMPLE_MESSAGES,
- *pSkinSimple->GetMessagesLink()->GetBitmap(),
- wxPoint(11,86),
- wxSize(70,20),
- wxBU_AUTODRAW
- );
- btnMessages->SetToolTip(ttMessages);
-
- wxToolTip *ttAlertMessages = new wxToolTip(_("Open a window to view messages"));
- btnAlertMessages = new CLinkButton(
- this,
- ID_SIMPLE_MESSAGES_ALERT,
- *(pSkinSimple->GetMessagesAlertLink()->GetBitmap()),
- wxPoint(11,86),
- wxSize(70,20),
- wxBU_AUTODRAW
- );
- btnAlertMessages->SetToolTip(ttAlertMessages);
- btnAlertMessages->Show(false);
-
- //spacer
- w_sp1 = new wxWindow(this,-1,wxPoint(83,91),wxSize(2,11));
- i_spacer1 = new ImageLoader(w_sp1);
- i_spacer1->LoadImage(*(pSkinSimple->GetSpacerImage()->GetBitmap()));
-
- // pause btn
- wxToolTip *ttPause = new wxToolTip(_("Stop all activity"));
- btnPause = new CLinkButton(
- this,
- ID_SIMPLE_SUSPEND,
- *pSkinSimple->GetSuspendLink()->GetBitmap(),
- wxPoint(85,86),
- wxSize(59,20),
- wxBU_AUTODRAW
- );
- btnPause->SetToolTip(ttPause);
-
- // resume btn
- wxToolTip *ttResume = new wxToolTip(_("Resume activity"));
- btnResume = new CLinkButton(
- this,
- ID_SIMPLE_RESUME,
- *(pSkinSimple->GetResumeLink()->GetBitmap()),
- wxPoint(85,86),
- wxSize(59,20),
- wxBU_AUTODRAW
- );
- btnResume->SetToolTip(ttResume);
-
- //spacer
- w_sp2 = new wxWindow(this,-1,wxPoint(144,91),wxSize(2,11));
- i_spacer2 = new ImageLoader(w_sp2);
- i_spacer2->LoadImage(*(pSkinSimple->GetSpacerImage()->GetBitmap()));
-
- // Pref Btn
- wxToolTip *ttPreferences = new wxToolTip(_("Open a window to set your preferences"));
- btnPreferences = new CLinkButton(
- this,
- ID_SIMPLE_PREFERENCES,
- *(pSkinSimple->GetPreferencesLink()->GetBitmap()),
- wxPoint(149,86),
- wxSize(81,20),
- wxBU_AUTODRAW
- );
- btnPreferences->SetToolTip(ttPreferences);
-
- //spacer
- w_sp3 = new wxWindow(this,-1,wxPoint(230,91),wxSize(2,11));
- i_spacer3 = new ImageLoader(w_sp3);
- i_spacer3->LoadImage(*(pSkinSimple->GetSpacerImage()->GetBitmap()));
-
- // Advanced View
- wxToolTip *ttAdvView = new wxToolTip(_("Switch to the BOINC advanced view"));
- btnAdvancedView = new CLinkButton(
- this,
- ID_CHANGEGUI,
- *(pSkinSimple->GetAdvancedLink()->GetBitmap()),
- wxPoint(233,86),
- wxSize(101,20),
- wxBU_AUTODRAW
- );
- btnAdvancedView->SetToolTip(ttAdvView);
-
- /// Line
- lnMyProjBtm = new CTransparentStaticLine(this, wxID_ANY, wxPoint(29,83),wxSize(292,1));
- lnMyProjBtm->SetLineColor(pSkinSimple->GetStaticLineColor());
-
- Thaw();
-}
-
-void CProjectsComponent::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxPaintDC dc(this);
- //My Projects
-#ifdef __WXMAC__
- dc.SetFont(wxFont(12,74,90,92,0,wxT("Arial")));
-#else
- dc.SetFont(wxFont(10,74,90,92,0,wxT("Arial")));
-#endif
- dc.DrawText(_("My Projects:"), wxPoint(32,9));
-}
-
-// Check to see if the # of projects
-void CProjectsComponent::UpdateProjectArray() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- if ( pDoc->IsConnected() ) {
- int m_projCnt = pDoc->GetSimpleProjectCount();
-
- // If a new project has been added, figure out which one and then add it;
- if ( m_projCnt > (int) m_statProjects.size() ) {
- PROJECT* project;
- for(int i=0; i < m_projCnt; i++) {
- project = pDoc->state.projects[i];
- bool found = false;
- std::vector<StatImageLoader*>::iterator j;
- for(j=m_statProjects.begin(); j < m_statProjects.end(); j++) {
- if (!strcmp(project->master_url, (*j)->project_url)) {
- found = true;
- break;
- }
- }
- if ( !found ) {
- StatImageLoader *i_statW = new StatImageLoader(this, project->master_url);
- i_statW->LoadImage();
- m_statProjects.push_back(i_statW);
- // recurse in case there is more then one change
- UpdateProjectArray();
- }
- }
- } else if ( m_projCnt < (int) m_statProjects.size() ) {
- PROJECT* project = NULL;
- std::vector<StatImageLoader*>::iterator i;
- for(i=m_statProjects.begin(); i < m_statProjects.end(); i++) {
- project = pDoc->state.lookup_project((*i)->project_url);
- if ( project == NULL ) {
- (*i)->Show(false);
- delete (*i);
- m_statProjects.erase(i);
- break;
- }
- }
- } else {
- return;
- }
- UpdateDisplayedProjects();
- } else {
- std::vector<StatImageLoader*>::iterator i;
- for(i=m_statProjects.end(); i >= m_statProjects.begin(); i--) {
- (*i)->Show(false);
- delete (*i);
- }
- m_statProjects.clear();
- }
-}
-
-void CProjectsComponent::UpdateDisplayedProjects() {
- int size = 7;
- if ( (int) m_statProjects.size() > size ) {
- size = 6;
- if ( m_leftIndex + size >= (int) m_statProjects.size() ) {
- m_leftIndex = (int) m_statProjects.size() - size;
- }
- if ( m_leftIndex == 0 ) {
- btnArwLeft->Show(false);
- btnArwRight->Show(true);
- } else {
- btnArwLeft->Show(true);
- if ( m_leftIndex + size < (int) m_statProjects.size() ) {
- btnArwRight->Show(true);
- } else {
- btnArwRight->Show(false);
- }
- }
- } else {
- m_leftIndex = 0;
- btnArwLeft->Show(false);
- btnArwRight->Show(false);
- }
-
- int numProjects = (int) m_statProjects.size();
- for(int i=0; i < numProjects; i++) {
- if ( i < m_leftIndex || i >= m_leftIndex + size) {
- m_statProjects.at(i)->Show(false);
- } else {
- StatImageLoader* projIcon = m_statProjects.at(i);
- projIcon->Show(true);
- int base = -5;
- if ( size == 6 ) {
- base = 15;
- }
- projIcon->Move(wxPoint(base + 40*(i+1-m_leftIndex),37));
- }
- }
- Refresh(true);
- Update();
-}
-
-
-void CProjectsComponent::OnHelp(wxCommandEvent& event) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnHelp - Function Begin"));
-
- wxString strURL = wxGetApp().GetSkinManager()->GetAdvanced()->GetOrganizationHelpUrl();
-
- wxString wxurl;
- wxurl.Printf(
- wxT("%s?target=simple&version=%s&controlid=%d"),
- strURL.c_str(),
- wxString(BOINC_VERSION_STRING, wxConvUTF8).c_str(),
- event.GetId()
- );
-
- wxLaunchDefaultBrowser(wxurl);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnHelp - Function End"));
-}
-
-
-void CProjectsComponent::OnMessages(wxCommandEvent& /*event*/) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnMessages - Function Begin"));
-
- CSimplePanel* pPanel = wxDynamicCast(GetParent(), CSimplePanel);
- wxASSERT(pPanel);
-
- MessagesViewed();
-
-
- CDlgMessages dlg(GetParent());
- pPanel->SetDlgOpen(true);
- ((CSimpleFrame*)pPanel->GetParent())->SetMsgsDlgOpen(&dlg);
-
- dlg.ShowModal();
-
- pPanel->SetDlgOpen(false);
- ((CSimpleFrame*)pPanel->GetParent())->SetMsgsDlgOpen(NULL);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnMessages - Function End"));
-}
-
-
-void CProjectsComponent::OnSuspend(wxCommandEvent& /*event*/) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnSuspend - Function Begin"));
-
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- pDoc->SetActivityRunMode(RUN_MODE_NEVER, 3600);
-
- btnPause->Show(false);
- btnResume->Show(true);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnSuspend - Function End"));
-}
-
-
-void CProjectsComponent::OnResume(wxCommandEvent& /*event*/) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnResume - Function Begin"));
-
- CMainDocument* pDoc = wxGetApp().GetDocument();
- CC_STATUS ccs;
-
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- pDoc->GetCoreClientStatus(ccs);
- if ((RUN_MODE_NEVER == ccs.task_mode) && (0 >= ccs.task_mode_delay)) {
- pDoc->SetActivityRunMode(RUN_MODE_AUTO, 0);
- } else {
- pDoc->SetActivityRunMode(RUN_MODE_RESTORE, 0);
- }
-
- btnResume->Show(false);
- btnPause->Show(true);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnResume - Function End"));
-}
-
-
-void CProjectsComponent::OnPreferences(wxCommandEvent& /*event*/) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnPreferences - Function Begin"));
-
- CSimplePanel* pPanel = wxDynamicCast(GetParent(), CSimplePanel);
-
- wxASSERT(pPanel);
-
- pPanel->SetDlgOpen(true);
-
- CDlgPreferences dlg(GetParent());
- dlg.ShowModal();
-
- pPanel->SetDlgOpen(false);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnPreferences - Function End"));
-}
-
-
-void CProjectsComponent::OnWizardAttach(wxCommandEvent& /*event*/) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnWizardAttach - Function Begin"));
-
- CSimplePanel* pPanel = wxDynamicCast(GetParent(), CSimplePanel);
-
- wxASSERT(pPanel);
-
- pPanel->SetDlgOpen(true);
-
- pPanel->OnProjectsAttachToProject();
- btnAddProj->Refresh();
-
- pPanel->SetDlgOpen(false);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnWizardAttach - Function End"));
-}
-
-
-void CProjectsComponent::OnWizardUpdate(wxCommandEvent& /*event*/) {
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnWizardUpdate - Function Begin"));
-
- CMainDocument* pDoc = wxGetApp().GetDocument();
- CSimplePanel* pPanel = wxDynamicCast(GetParent(), CSimplePanel);
-
- wxASSERT(pDoc);
- wxASSERT(pPanel);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- if (!pDoc->IsUserAuthorized())
- return;
-
- if (pDoc->IsConnected()) {
-
- pPanel->SetDlgOpen(true);
-
- CWizardAttach* pWizard = new CWizardAttach(this);
-
- pWizard->SyncToAccountManager();
-
- if (pWizard)
- pWizard->Destroy();
-
- btnSynchronize->Refresh();
-
- pPanel->SetDlgOpen(false);
- }
-
- wxLogTrace(wxT("Function Start/End"), wxT("CProjectsComponent::OnWizardUpdate - Function End"));
-}
-
-
-void CProjectsComponent::UpdateInterface()
-{
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- // Check to see if error messages have been received
- if ( receivedErrorMessage ) {
- Freeze();
- if ( alertMessageDisplayed ) {
- btnAlertMessages->Show(false);
- btnMessages->Show(true);
- alertMessageDisplayed = false;
- } else {
- btnAlertMessages->Show(true);
- btnMessages->Show(false);
- alertMessageDisplayed = true;
- }
- Thaw();
- } else {
- if ( alertMessageDisplayed ) {
- Freeze();
- btnAlertMessages->Show(false);
- btnMessages->Show(true);
- alertMessageDisplayed = false;
- Thaw();
- }
- }
-
- // Should we display the synchronize button instead of the
- // attach to project button?
- CC_STATUS status;
- bool is_acct_mgr_detected = false;
-
- pDoc->GetCoreClientStatus(status);
-
- is_acct_mgr_detected = pDoc->ami.acct_mgr_url.size() ? true : false;
-
- if (is_acct_mgr_detected) {
- btnAddProj->Show(false);
- btnSynchronize->Show(true);
- } else {
- if (!status.disallow_attach) {
- btnAddProj->Show(true);
- }
- btnSynchronize->Show(false);
- }
-
- // Show resume or pause as appropriate
- if (RUN_MODE_NEVER == status.task_mode) {
- btnPause->Show(false);
- btnResume->Show(true);
- } else {
- btnPause->Show(true);
- btnResume->Show(false);
- }
-
- // Should we disable the attach to project button?
- if (status.disallow_attach || is_acct_mgr_detected) {
- btnAddProj->Show(false);
- } else {
- btnAddProj->Show(true);
- }
-
- // Should we only be able to see the simple gui?
- if (status.simple_gui_only) {
- btnAdvancedView->Show(false);
- } else {
- btnAdvancedView->Show(true);
- }
-
- // Check number of projects
- UpdateProjectArray();
-
- // Update stat icons
- for(int m = 0; m < (int)m_statProjects.size(); m++){
- StatImageLoader *i_statIcon = m_statProjects.at(m);
- i_statIcon->UpdateInterface();
- }
-
-}
-
-void CProjectsComponent::ReskinInterface()
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- //Set Background color only
- SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
-
- //right button
- btnArwRight->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnArwRight->SetBitmapLabel(*(pSkinSimple->GetRightArrowButton()->GetBitmap()));
- btnArwRight->SetBitmapSelected(*(pSkinSimple->GetRightArrowButton()->GetBitmapClicked()));
-
- //left button
- btnArwLeft->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnArwLeft->SetBitmapLabel(*(pSkinSimple->GetLeftArrowButton()->GetBitmap()));
- btnArwLeft->SetBitmapSelected(*(pSkinSimple->GetLeftArrowButton()->GetBitmapClicked()));
-
- // add project btn
- btnAddProj->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnAddProj->SetBitmapLabel(*(pSkinSimple->GetAttachProjectButton()->GetBitmap()));
- btnAddProj->SetBitmapSelected(*(pSkinSimple->GetAttachProjectButton()->GetBitmapClicked()));
-
- // synchronize btn
- btnSynchronize->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnSynchronize->SetBitmapLabel(*(pSkinSimple->GetSynchronizeButton()->GetBitmap()));
- btnSynchronize->SetBitmapSelected(*(pSkinSimple->GetSynchronizeButton()->GetBitmapClicked()));
-
- // help btn
- btnHelp->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnHelp->SetBitmapLabel(*(pSkinSimple->GetHelpButton()->GetBitmap()));
- btnHelp->SetBitmapSelected(*(pSkinSimple->GetHelpButton()->GetBitmapClicked()));
-
- // messages btn
- btnMessages->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnMessages->SetBitmapLabel(*(pSkinSimple->GetMessagesLink()->GetBitmap()));
- btnMessages->SetBitmapSelected(*(pSkinSimple->GetMessagesLink()->GetBitmap()));
-
- // alert messages btn
- btnAlertMessages->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnAlertMessages->SetBitmapLabel(*(pSkinSimple->GetMessagesAlertLink()->GetBitmap()));
- btnAlertMessages->SetBitmapSelected(*(pSkinSimple->GetMessagesAlertLink()->GetBitmap()));
-
- // pause btn
- btnPause->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnPause->SetBitmapLabel(*(pSkinSimple->GetSuspendLink()->GetBitmap()));
- btnPause->SetBitmapSelected(*(pSkinSimple->GetSuspendLink()->GetBitmap()));
-
- // resume btn
- btnResume->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnResume->SetBitmapLabel(*(pSkinSimple->GetResumeLink()->GetBitmap()));
- btnResume->SetBitmapSelected(*(pSkinSimple->GetResumeLink()->GetBitmap()));
-
- // preferences btn
- btnPreferences->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnPreferences->SetBitmapLabel(*(pSkinSimple->GetPreferencesLink()->GetBitmap()));
- btnPreferences->SetBitmapSelected(*(pSkinSimple->GetPreferencesLink()->GetBitmap()));
-
- // advance view btn
- btnAdvancedView->SetBackgroundColour(*pSkinSimple->GetBackgroundImage()->GetBackgroundColor());
- btnAdvancedView->SetBitmapLabel(*(pSkinSimple->GetAdvancedLink()->GetBitmap()));
- btnAdvancedView->SetBitmapSelected(*(pSkinSimple->GetAdvancedLink()->GetBitmap()));
-
- //set line colors
- lnMyProjTop->SetLineColor(pSkinSimple->GetStaticLineColor());
- lnMyProjBtm->SetLineColor(pSkinSimple->GetStaticLineColor());
-
- // spacers
- i_spacer1->LoadImage(*(pSkinSimple->GetSpacerImage()->GetBitmap()));
- i_spacer2->LoadImage(*(pSkinSimple->GetSpacerImage()->GetBitmap()));
- i_spacer2->LoadImage(*(pSkinSimple->GetSpacerImage()->GetBitmap()));
-
- // Rebuild stat menus and reload icons
- for(int m = 0; m < (int)m_statProjects.size(); m++){
- StatImageLoader *i_statImage = m_statProjects.at(m);
- i_statImage->LoadImage();
- i_statImage->RebuildMenu();
- }
-}
-
-void CProjectsComponent::OnBtnClick(wxCommandEvent& event){ //init function
- wxObject *m_wxBtnObj = event.GetEventObject();
-
- if (m_wxBtnObj==btnArwLeft){
- m_leftIndex--;
- UpdateDisplayedProjects();
- Refresh();
- } else if(m_wxBtnObj==btnArwRight){
- m_leftIndex++;
- UpdateDisplayedProjects();
- Refresh();
- } else if(m_wxBtnObj==btnAdvancedView) {
- wxGetApp().SetActiveGUI(BOINC_ADVANCEDGUI, true);
- }
-}
-
-
-void CProjectsComponent::OnEraseBackground(wxEraseEvent& event){
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- wxDC* dc = event.GetDC();
- dc->DrawBitmap(*pSkinSimple->GetProjectAreaBackgroundImage()->GetBitmap(), 0, 0);
-}
-
-
-void CProjectsComponent::OnMessageCheck(wxTimerEvent& WXUNUSED(event)) {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- if ( pDoc->GetUnreadNoticeCount() ) {
- receivedErrorMessage = true;
- checkForMessagesTimer->Stop();
- }
-}
-
-
-void CProjectsComponent::MessagesViewed() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- receivedErrorMessage = false;
- pDoc->UpdateUnreadNoticeState();
- checkForMessagesTimer->Start();
-}
diff --git a/clientgui/sg_ProjectsComponent.h b/clientgui/sg_ProjectsComponent.h
deleted file mode 100644
index 05a8fb6..0000000
--- a/clientgui/sg_ProjectsComponent.h
+++ /dev/null
@@ -1,105 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _PROJECTSCOMPONENT_H_
-#define _PROJECTSCOMPONENT_H_
-
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_ProjectsComponent.cpp"
-#endif
-
-class SkinClass;
-class StatImageLoader;
-class CSimplePanel;
-class ImageLoader;
-class CTransparentStaticLine;
-
-class CProjectsComponent : public wxPanel {
- DECLARE_DYNAMIC_CLASS( CProjectsComponent )
-
-public:
-
- int clientRunMode;
- int clientNetworkMode;
- char defaultIcnPath[256];
- // projects vector
- std::vector<StatImageLoader*> m_statProjects; // vector of all project icons created for GUI
- wxImage *g_statIcn;
- //static content
- wxStaticText *stMyProj;
- CTransparentStaticLine *lnMyProjTop;
- CTransparentStaticLine *lnMyProjBtm;
- // default icon
- // spacer
- ImageLoader *i_spacer1;
- ImageLoader *i_spacer2;
- ImageLoader *i_spacer3;
-
- wxBitmapButton *btnArwLeft;
- wxBitmapButton *btnArwRight;
- wxBitmapButton *btnAddProj;
- wxBitmapButton *btnSynchronize;
- wxBitmapButton *btnHelp;
- wxBitmapButton *btnMessages;
- wxBitmapButton *btnAlertMessages;
- wxBitmapButton *btnPause;
- wxBitmapButton *btnResume;
- wxBitmapButton *btnPreferences;
- wxBitmapButton *btnAdvancedView;
- wxWindow *w_sp1;
- wxWindow *w_sp2;
- wxWindow *w_sp3;
-
- CProjectsComponent();
- CProjectsComponent(CSimplePanel* parent,wxPoint coord);
- ~CProjectsComponent();
-
- void CreateComponent();
- void UpdateInterface();
- void ReskinInterface();
- void MessagesViewed();
- void OnBtnClick(wxCommandEvent& event);
- void OnPaint(wxPaintEvent& event);
- void UpdateProjectArray();
-
- void OnHelp(wxCommandEvent& event);
- void OnPreferences(wxCommandEvent& event);
- void OnMessages(wxCommandEvent& event);
- void OnSuspend(wxCommandEvent& event);
- void OnResume(wxCommandEvent& event);
- void OnWizardAttach(wxCommandEvent& event);
- void OnWizardUpdate(wxCommandEvent& event);
-
- DECLARE_EVENT_TABLE()
-
-protected:
- void OnEraseBackground(wxEraseEvent& event);
- void OnMessageCheck(wxTimerEvent& WXUNUSED(event));
-
-private:
- wxTimer* checkForMessagesTimer;
- int m_maxNumOfIcons;
- int m_leftIndex;
- bool receivedErrorMessage;
- bool alertMessageDisplayed;
- bool m_bIs_acct_mgr_detected;
- void UpdateDisplayedProjects();
-};
-
-#endif
-
diff --git a/clientgui/sg_StatImageLoader.cpp b/clientgui/sg_StatImageLoader.cpp
deleted file mode 100644
index 96de369..0000000
--- a/clientgui/sg_StatImageLoader.cpp
+++ /dev/null
@@ -1,288 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_StatImageLoader.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "BOINCBaseFrame.h"
-#include "sg_StatImageLoader.h"
-#include "sg_ProjectsComponent.h"
-#include "app_ipc.h"
-
-enum{
- WEBSITE_URL_MENU_ID = 34500,
- WEBSITE_URL_MENU_ID_REMOVE_PROJECT = 34550,
- WEBSITE_URL_MENU_ID_HOMEPAGE = 34551,
-};
-
-
-BEGIN_EVENT_TABLE(StatImageLoader, wxWindow)
- EVT_PAINT(StatImageLoader::OnPaint)
- EVT_LEFT_DOWN(StatImageLoader::PopUpMenu)
- EVT_MENU(WEBSITE_URL_MENU_ID,StatImageLoader::OnMenuLinkClicked)
- EVT_MENU(WEBSITE_URL_MENU_ID_REMOVE_PROJECT,StatImageLoader::OnMenuLinkClicked)
-END_EVENT_TABLE()
-
-StatImageLoader::StatImageLoader(wxWindow* parent, char* url) :
- wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(40,40), wxNO_BORDER)
-{
- safe_strcpy(project_url, url);
- project_files_downloaded_time = 1;
- project_last_rpc_time = 1;
- BuildUserStatToolTip();
- statPopUpMenu = new wxMenu();
- AddMenuItems();
-}
-
-
-StatImageLoader::~StatImageLoader() {
- delete statPopUpMenu;
-}
-
-
-#ifdef __WXMAC__
-void StatImageLoader::PopUpMenu(wxMouseEvent& event)
-{
- // pop up menu: move menu down a bit so tooltip does not obscure it
- PopupMenu(statPopUpMenu, event.m_x-10, event.m_y+40);
-}
-#else
-void StatImageLoader::PopUpMenu(wxMouseEvent& WXUNUSED(event))
-{
- // pop up menu
- PopupMenu(statPopUpMenu);
-}
-#endif
-
-void StatImageLoader::RebuildMenu() {
- for(int i=(int) statPopUpMenu->GetMenuItemCount()-1; i>=0;i--){
- wxMenuItem* item = statPopUpMenu->FindItemByPosition(i);
- statPopUpMenu->Delete(item);
- }
- AddMenuItems();
-}
-
-
-void StatImageLoader::BuildUserStatToolTip() {
- wxString strBuffer = wxEmptyString;
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- PROJECT* project = pDoc->state.lookup_project(project_url);
-
- strBuffer.Printf(
- _("%s. Work done by %s: %0.2f"),
- wxString(project->project_name.c_str(), wxConvUTF8).c_str(),
- wxString(project->user_name.c_str(), wxConvUTF8).c_str(),
- project->user_total_credit
- );
-
- SetToolTip(new wxToolTip(strBuffer));
-}
-
-
-void StatImageLoader::AddMenuItems()
-{
- CMainDocument* pDoc = wxGetApp().GetDocument();
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
-
- PROJECT* project = pDoc->state.lookup_project(project_url);
- urlCount = project->gui_urls.size();
-
- // Add the home page link
- wxMenuItem *urlItem = new wxMenuItem(statPopUpMenu, WEBSITE_URL_MENU_ID_HOMEPAGE,wxString(project->project_name.c_str(), wxConvUTF8));
- Connect( WEBSITE_URL_MENU_ID_HOMEPAGE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(StatImageLoader::OnMenuLinkClicked) );
- statPopUpMenu->Append(urlItem);
-
-
- // Add any GUI urls
- for(unsigned int i = 0; i < urlCount; i++){
- urlItem = new wxMenuItem(statPopUpMenu, WEBSITE_URL_MENU_ID + i, wxGetTranslation(wxString(project->gui_urls[i].name.c_str(), wxConvUTF8)));
- Connect( WEBSITE_URL_MENU_ID + i, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(StatImageLoader::OnMenuLinkClicked) );
-
- statPopUpMenu->Append(urlItem);
- }
-
- // Add the 'remove project' option
- if (!project->attached_via_acct_mgr) {
- statPopUpMenu->AppendSeparator();
- wxMenuItemList menuList = statPopUpMenu->GetMenuItems();
- urlItem = new wxMenuItem(statPopUpMenu, WEBSITE_URL_MENU_ID_REMOVE_PROJECT, _("Remove Project"));
- Connect( WEBSITE_URL_MENU_ID_REMOVE_PROJECT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(StatImageLoader::OnMenuLinkClicked) );
- statPopUpMenu->Append(urlItem);
- }
-}
-
-
-void StatImageLoader::OnMenuLinkClicked(wxCommandEvent& event)
-{
- CMainDocument* pDoc = wxGetApp().GetDocument();
- wxASSERT(pDoc);
- int menuIDevt = event.GetId();
-
- if(menuIDevt == WEBSITE_URL_MENU_ID_REMOVE_PROJECT){
- //call detach project function
- OnProjectDetach();
- } else if (menuIDevt == WEBSITE_URL_MENU_ID_HOMEPAGE ) {
- wxLaunchDefaultBrowser(wxString(project_url, wxConvUTF8));
- } else{
- int menuId = menuIDevt - WEBSITE_URL_MENU_ID;
- 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));
- }
-}
-
-
-void StatImageLoader::OnProjectDetach() {
- wxInt32 iAnswer = 0;
- std::string strProjectName;
- wxString strMessage = wxEmptyString;
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- CProjectsComponent* pComp = wxDynamicCast(GetParent(), CProjectsComponent);
-
- wxASSERT(pDoc);
- wxASSERT(wxDynamicCast(pDoc, CMainDocument));
- wxASSERT(pComp);
-
- if (!pDoc->IsUserAuthorized())
- return;
-
- int indexOfProj = -1;
- int prjCount = pDoc->GetSimpleProjectCount();
- for(int m = 0; m < prjCount; m++){
- PROJECT* project = pDoc->project(m);
- project->get_name(strProjectName);
- if(!strcmp(project->master_url, project_url)){
- indexOfProj = m;
- break;
- }
- }
- strMessage.Printf(
- _("Are you sure you want to remove project '%s'?"),
- strProjectName.c_str()
- );
-
- iAnswer = wxGetApp().SafeMessageBox(
- strMessage,
- _("Remove Project"),
- wxYES_NO | wxICON_QUESTION,
- this
- );
-
- if (wxYES == iAnswer) {
- pDoc->ProjectDetach(indexOfProj);
- pComp->UpdateProjectArray();
- }
-}
-
-
-void StatImageLoader::LoadStatIcon(wxBitmap& image) {
- int width = image.GetWidth();
- int height = image.GetHeight();
- Bitmap = wxBitmap(image);
- SetSize(width, height);
-}
-
-std::string StatImageLoader::GetProjectIconLoc() {
- char urlDirectory[256];
- CMainDocument* pDoc = wxGetApp().GetDocument();
- PROJECT* project = pDoc->state.lookup_project(project_url);
- url_to_project_dir(project->master_url, urlDirectory);
- return (std::string)urlDirectory + "/stat_icon";
-}
-
-
-void StatImageLoader::LoadImage() {
- std::string dirProjectGraphic;
-
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- char defaultIcnPath[256];
- if(boinc_resolve_filename(GetProjectIconLoc().c_str(), defaultIcnPath, sizeof(defaultIcnPath)) == 0){
- wxBitmap* btmpStatIcn = new wxBitmap();
- if ( btmpStatIcn->LoadFile(wxString(defaultIcnPath,wxConvUTF8), wxBITMAP_TYPE_ANY) ) {
- LoadStatIcon(*btmpStatIcn);
- } else {
- LoadStatIcon(*pSkinSimple->GetProjectImage()->GetBitmap());
- }
- delete btmpStatIcn;
- }else{
- LoadStatIcon(*pSkinSimple->GetProjectImage()->GetBitmap());
- }
-}
-
-
-void StatImageLoader::ReloadProjectSpecificIcon() {
- char defaultIcnPath[256];
- // Only update if it is project specific is found
- if(boinc_resolve_filename(GetProjectIconLoc().c_str(), defaultIcnPath, sizeof(defaultIcnPath)) == 0){
- wxBitmap* btmpStatIcn = new wxBitmap();
- if ( btmpStatIcn->LoadFile(wxString(defaultIcnPath,wxConvUTF8), wxBITMAP_TYPE_ANY) ) {
- LoadStatIcon(*btmpStatIcn);
- RebuildMenu();
- Refresh();
- Update();
- }
- delete btmpStatIcn;
- }
-}
-
-
-void StatImageLoader::UpdateInterface() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- 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 ) {
- ReloadProjectSpecificIcon();
- project_files_downloaded_time = project->project_files_downloaded_time;
- }
-
- // Check to see if we need to rebuild the hoover and menu
- if ( project > NULL && project->last_rpc_time > project_last_rpc_time ) {
- RebuildMenu();
- BuildUserStatToolTip();
- project_last_rpc_time = project->last_rpc_time;
- }
-}
-
-
-void StatImageLoader::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxPaintDC dc(this);
- dc.SetBackgroundMode(wxTRANSPARENT);
- if(Bitmap.Ok()) {
- dc.DrawBitmap(Bitmap, 0, 0);
- }
-}
diff --git a/clientgui/sg_StatImageLoader.h b/clientgui/sg_StatImageLoader.h
deleted file mode 100644
index 836259f..0000000
--- a/clientgui/sg_StatImageLoader.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _STATIMAGELOADER_H_
-#define _STATIMAGELOADER_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_StatImageLoader.cpp"
-#endif
-
-
-class StatImageLoader : public wxWindow
-{
-public:
- wxMenu *statPopUpMenu;
- char project_url[256];
- StatImageLoader(wxWindow* parent, char* url);
- ~StatImageLoader();
- void LoadImage();
- void OnMenuLinkClicked(wxCommandEvent& event);
- void OnProjectDetach();
- void PopUpMenu(wxMouseEvent& event);
- void OnPaint(wxPaintEvent& event);
- void RebuildMenu();
- void UpdateInterface();
-
-private:
-
- wxBitmap Bitmap;
- std::string projectIcon;
- int numReloadTries;
- size_t urlCount;
- double project_files_downloaded_time;
- double project_last_rpc_time;
- void LoadStatIcon(wxBitmap& image);
- void ReloadProjectSpecificIcon();
- void BuildUserStatToolTip();
- void AddMenuItems();
- std::string GetProjectIconLoc();
- DECLARE_EVENT_TABLE()
-};
-
-#endif
-
diff --git a/clientgui/sg_TaskCommandPopup.cpp b/clientgui/sg_TaskCommandPopup.cpp
index b8030cd..cdc82c0 100644
--- a/clientgui/sg_TaskCommandPopup.cpp
+++ b/clientgui/sg_TaskCommandPopup.cpp
@@ -27,7 +27,7 @@
IMPLEMENT_DYNAMIC_CLASS(CSimpleTaskPopupButton, CTransparentButton)
BEGIN_EVENT_TABLE(CSimpleTaskPopupButton, CTransparentButton)
- EVT_LEFT_DOWN(CSimpleTaskPopupButton::OnTasksCommandButton)
+ EVT_LEFT_DOWN(CSimpleTaskPopupButton::OnTaskCommandsMouseDown)
EVT_MENU(ID_TASK_WORK_SHOWGRAPHICS, CSimpleTaskPopupButton::OnTaskShowGraphics)
EVT_MENU(ID_TASK_WORK_SUSPEND, CSimpleTaskPopupButton::OnTaskSuspendResume)
EVT_MENU(ID_TASK_WORK_ABORT, CSimpleTaskPopupButton::OnTaskAbort)
@@ -46,6 +46,12 @@ CSimpleTaskPopupButton::CSimpleTaskPopupButton(wxWindow* parent, wxWindowID id,
m_TaskSuspendedViaGUI = false;
m_TaskCommandPopUpMenu = new wxMenu();
AddMenuItems();
+ Connect(
+ id,
+ wxEVT_BUTTON,
+ (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) &CSimpleTaskPopupButton::OnTaskCommandsKeyboardNav
+ );
+
}
@@ -81,7 +87,17 @@ void CSimpleTaskPopupButton::AddMenuItems() {
}
-void CSimpleTaskPopupButton::OnTasksCommandButton(wxMouseEvent& /*event*/) {
+void CSimpleTaskPopupButton::OnTaskCommandsMouseDown(wxMouseEvent& event) {
+ ShowTaskCommandsMenu(ScreenToClient(wxGetMousePosition()));
+}
+
+
+void CSimpleTaskPopupButton::OnTaskCommandsKeyboardNav(wxCommandEvent& event) {
+ ShowTaskCommandsMenu(wxPoint(GetSize().GetWidth()/2, GetSize().GetHeight()/2));
+}
+
+
+void CSimpleTaskPopupButton::ShowTaskCommandsMenu(wxPoint pos) {
CMainDocument* pDoc = wxGetApp().GetDocument();
bool enableShowGraphics = true;
bool enableAbort = true;
@@ -147,7 +163,7 @@ void CSimpleTaskPopupButton::OnTasksCommandButton(wxMouseEvent& /*event*/) {
wxToolTip::Enable(false);
#endif
- PopupMenu(m_TaskCommandPopUpMenu);
+ PopupMenu(m_TaskCommandPopUpMenu, pos.x, pos.y);
#if TESTBIGICONPOPUP
diff --git a/clientgui/sg_TaskCommandPopup.h b/clientgui/sg_TaskCommandPopup.h
index ce24545..650d055 100644
--- a/clientgui/sg_TaskCommandPopup.h
+++ b/clientgui/sg_TaskCommandPopup.h
@@ -41,7 +41,9 @@ class CSimpleTaskPopupButton : public CTransparentButton
private:
void AddMenuItems();
- void OnTasksCommandButton(wxMouseEvent& event);
+ void OnTaskCommandsMouseDown(wxMouseEvent& event);
+ void OnTaskCommandsKeyboardNav(wxCommandEvent& event);
+ void ShowTaskCommandsMenu(wxPoint pos);
void OnTaskShowGraphics(wxCommandEvent& event);
void OnTaskSuspendResume(wxCommandEvent& event);
void OnTaskAbort(wxCommandEvent& event);
diff --git a/clientgui/sg_TaskPanel.cpp b/clientgui/sg_TaskPanel.cpp
index 889b04b..98b931a 100644
--- a/clientgui/sg_TaskPanel.cpp
+++ b/clientgui/sg_TaskPanel.cpp
@@ -31,10 +31,10 @@
#define SLIDESHOWWIDTH 290
#define SLIDESHOWHEIGHT 126
#define SLIDESHOWBORDER 1
-#define DESCRIPTIONSPACER 4
#define HIDEDEFAULTSLIDE 1
#define TESTALLDESCRIPTIONS 0
-#define SCROLLBARWIDTH 18
+#define SCROLLBARSPACER 8
+
enum { suspendedIcon, waitingIcon, runningIcon };
@@ -55,6 +55,7 @@ CScrolledTextBox::CScrolledTextBox( wxWindow* parent) :
SetForegroundColour(*wxBLACK);
m_TextSizer = new wxBoxSizer( wxVERTICAL );
+ m_hLine = GetCharHeight();
this->SetSizerAndFit( m_TextSizer );
this->Layout();
@@ -69,7 +70,7 @@ CScrolledTextBox::~CScrolledTextBox() {
void CScrolledTextBox::SetValue(const wxString& s) {
- int lineHeight, totalLines, availableWidth;
+ int lineHeight, totalLines, totalWidth, usableWidth;
wxString t = s;
// Delete sizer & its children (CTransparentStaticText objects)
@@ -80,11 +81,18 @@ void CScrolledTextBox::SetValue(const wxString& s) {
t.Replace(wxT("</sup>"), wxT(""), true);
t.Replace(wxT("<"), wxT("<"), true);
- wxSize taskPanelSize = GetGrandParent()->GetSize();
- availableWidth = taskPanelSize.GetWidth() - (2*SIDEMARGINS);
- totalLines = Wrap(t, availableWidth - SCROLLBARWIDTH, &lineHeight);
-
+ // First see if it fits without vertical scroll bar
+ totalWidth = GetSize().GetWidth();
+ totalLines = Wrap(t, totalWidth, &lineHeight);
m_TextSizer->FitInside(this);
+ usableWidth = GetClientSize().GetWidth();
+ if (usableWidth < totalWidth) {
+ // It has a vertical scroll bar, so wrap again for reduced width
+ m_TextSizer->Clear(true);
+ totalLines = Wrap(t, usableWidth - SCROLLBARSPACER, &lineHeight);
+ m_TextSizer->FitInside(this);
+ }
+
SetScrollRate(1, lineHeight);
}
@@ -111,10 +119,7 @@ void CScrolledTextBox::OnOutputLine(const wxString& line) {
if ( !line.empty() ) {
m_TextSizer->Add(new CTransparentStaticText(this, wxID_ANY, line));
} else { // empty line, no need to create a control for it
- if ( !m_hLine ) {
- m_hLine = GetCharHeight();
- }
- m_TextSizer->Add(5, m_hLine);
+ m_TextSizer->Add(5, m_hLine/3);
}
}
@@ -136,6 +141,7 @@ int CScrolledTextBox::Wrap(const wxString& text, int widthMax, int *lineHeight)
}
if ( *p == _T('\n') || *p == _T('\0') ) {
+ line.Trim();
OnOutputLine(line);
m_eol = true;
++numLines;
@@ -155,6 +161,7 @@ int CScrolledTextBox::Wrap(const wxString& text, int widthMax, int *lineHeight)
if ( width > widthMax ) {
// remove the last word from this line
line.erase(lastSpace - lineStart, p + 1 - lineStart);
+ line.Trim();
OnOutputLine(line);
m_eol = true;
++numLines;
@@ -194,17 +201,9 @@ CSlideShowPanel::CSlideShowPanel( wxWindow* parent ) :
wxBoxSizer* bSizer1;
bSizer1 = new wxBoxSizer( wxVERTICAL );
- m_institution = new CTransparentStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer1->Add( m_institution, 0, 0, 0 );
-
- m_scienceArea = new CTransparentStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- bSizer1->Add( m_scienceArea, 0, 0, 0 );
-
- bSizer1->AddSpacer(DESCRIPTIONSPACER);
-
m_description = new CScrolledTextBox( this );
GetSize(&w, &h);
- m_description->SetMinSize(wxSize(w, h - (2 * GetCharHeight()) - DESCRIPTIONSPACER));
+ m_description->SetMinSize(wxSize(w, h));
bSizer1->Add( m_description, 1, wxEXPAND, 0 );
this->SetSizer( bSizer1 );
@@ -213,6 +212,7 @@ CSlideShowPanel::CSlideShowPanel( wxWindow* parent ) :
m_SlideBitmap = wxNullBitmap;
m_bCurrentSlideIsDefault = false;
m_bGotAllProjectsList = false;
+ m_bHasBeenDrawn = false;
#ifdef __WXMAC__
// Tell accessibility aids to ignore this panel (but not its contents)
@@ -236,11 +236,36 @@ void CSlideShowPanel::OnSlideShowTimer(wxTimerEvent& WXUNUSED(event)) {
AdvanceSlideShow(true, false);
}
+void CSlideShowPanel::SetDescriptionText(void) {
+ unsigned int i;
+ wxString s, ss;
+
+ TaskSelectionData* selData = ((CSimpleTaskPanel*)GetParent())->GetTaskSelectionData();
+ if (selData == NULL) return;
+ for (i=0; i<m_AllProjectsList.projects.size(); i++) {
+ if (!strcmp(m_AllProjectsList.projects[i]->url.c_str(), selData->project_url)) {
+ s = wxString(m_AllProjectsList.projects[i]->home.c_str(), wxConvUTF8);
+ ss = wxGetTranslation(s);
+ ss.Append("\n\n");
+ s = wxString(m_AllProjectsList.projects[i]->specific_area.c_str(), wxConvUTF8);
+ ss += wxGetTranslation(s);
+ ss.Append("\n\n");
+ s = wxString(m_AllProjectsList.projects[i]->description.c_str(), wxConvUTF8);
+ ss += wxGetTranslation(s);
+ m_description->SetValue(ss);
+
+ m_description->Show(true);
+ Enable( true );
+ m_description->Enable();
+ this->Layout();
+ break;
+ }
+ }
+}
+
void CSlideShowPanel::AdvanceSlideShow(bool changeSlide, bool reload) {
double xRatio, yRatio, ratio;
- unsigned int i;
- wxString s;
TaskSelectionData* selData = ((CSimpleTaskPanel*)GetParent())->GetTaskSelectionData();
if (selData == NULL) return;
@@ -264,8 +289,6 @@ numSlides = 0;
dc.DrawBitmap(backgroundBitmap, 0, 0);
// Force redraws if text unchanged; hide all if not in all-projects list
- m_institution->Show(false);
- m_scienceArea->Show(false);
m_description->Show(false);
Enable( false );
@@ -277,24 +300,8 @@ numSlides = 0;
m_bGotAllProjectsList = true;
}
- for (i=0; i<m_AllProjectsList.projects.size(); i++) {
- if (!strcmp(m_AllProjectsList.projects[i]->url.c_str(), selData->project_url)) {
- s = wxString(m_AllProjectsList.projects[i]->home.c_str(), wxConvUTF8);
- m_institution->SetLabel(wxGetTranslation(s));
- s = wxString(m_AllProjectsList.projects[i]->specific_area.c_str(), wxConvUTF8);
- m_scienceArea->SetLabel(wxGetTranslation(s));
- s = wxString(m_AllProjectsList.projects[i]->description.c_str(), wxConvUTF8);
- m_description->SetValue(wxGetTranslation(s));
-
- m_institution->Show(true);
- m_scienceArea->Show(true);
- m_description->Show(true);
- Enable( true );
- m_description->Enable();
- this->Layout();
- break;
- }
- }
+ SetDescriptionText();
+
return;
#else // HIDEDEFAULTSLIDE
SetBackgroundColour(*wxBLACK);
@@ -312,8 +319,6 @@ numSlides = 0;
#endif // HIDEDEFAULTSLIDE
} else {
#if HIDEDEFAULTSLIDE
- m_institution->Show(false);
- m_scienceArea->Show(false);
m_description->Show(false);
Enable( false );
@@ -409,6 +414,13 @@ numSlides = 0;
);
}
}
+
+ if (!m_bHasBeenDrawn) {
+ m_bHasBeenDrawn = true;
+ if (numSlides <= 0) {
+ SetDescriptionText();
+ }
+ }
}
@@ -425,15 +437,20 @@ void CSlideShowPanel::OnEraseBackground(wxEraseEvent& event) {
IMPLEMENT_DYNAMIC_CLASS(CSimpleTaskPanel, CSimplePanelBase)
BEGIN_EVENT_TABLE(CSimpleTaskPanel, CSimplePanelBase)
- EVT_BOINCBITMAPCOMBOBOX(ID_SGTASKSELECTOR, CSimpleTaskPanel::OnTaskSelection)
#ifdef __WXMAC__
+ EVT_CHOICE(ID_SGTASKSELECTOR, CSimpleTaskPanel::OnTaskSelection)
+#else
+ EVT_COMBOBOX(ID_SGTASKSELECTOR, CSimpleTaskPanel::OnTaskSelection)
+#if 0 // This is apparently no longer needed with wxCocoa 3.0
EVT_ERASE_BACKGROUND(CSimpleTaskPanel::OnEraseBackground)
#endif
+#endif
END_EVENT_TABLE()
CSimpleTaskPanel::CSimpleTaskPanel() {
}
+
CSimpleTaskPanel::CSimpleTaskPanel( wxWindow* parent ) :
CSimplePanelBase( parent )
{
@@ -457,7 +474,7 @@ CSimpleTaskPanel::CSimpleTaskPanel( wxWindow* parent ) :
wxBoxSizer* bSizer2;
bSizer2 = new wxBoxSizer( wxHORIZONTAL );
-
+
m_myTasksLabel = new CTransparentStaticText( this, wxID_ANY, _("Tasks:"), wxDefaultPosition, wxDefaultSize, 0 );
m_myTasksLabel->Wrap( -1 );
bSizer2->Add( m_myTasksLabel, 0, wxRIGHT, 5 );
@@ -1256,16 +1273,17 @@ void CSimpleTaskPanel::OnEraseBackground(wxEraseEvent& event) {
wxDC *dc = event.GetDC();
if (m_ProgressBar->IsShown()) {
- if (m_progressBarRect == NULL) {
+// if (m_progressBarRect == NULL) {
m_progressBarRect = new wxRect(m_ProgressBar->GetRect());
m_progressBarRect->Inflate(1, 0);
- }
+// }
dc->GetClippingBox(&clipRect.x, &clipRect.y, &clipRect.width, &clipRect.height);
if (clipRect.IsEmpty() || m_progressBarRect->Contains(clipRect)) {
return;
}
}
- CSimplePanelBase::OnEraseBackground(event);
+// CSimplePanelBase::OnEraseBackground(event);
+ event.Skip();
}
#endif
diff --git a/clientgui/sg_TaskPanel.h b/clientgui/sg_TaskPanel.h
index 76b0382..a02cfd9 100644
--- a/clientgui/sg_TaskPanel.h
+++ b/clientgui/sg_TaskPanel.h
@@ -58,7 +58,6 @@ class CScrolledTextBox : public wxScrolledWindow
void OnOutputLine(const wxString& line);
wxBoxSizer* m_TextSizer;
- int m_iAvailableHeight;
bool m_eol;
wxString m_text;
int m_hLine;
@@ -81,18 +80,18 @@ class CSlideShowPanel : public wxPanel
~CSlideShowPanel();
void OnSlideShowTimer(wxTimerEvent& WXUNUSED(event));
+ void SetDescriptionText(void);
void AdvanceSlideShow(bool changeSlide, bool reload);
void OnPaint(wxPaintEvent& WXUNUSED(event));
void OnEraseBackground(wxEraseEvent& event);
private:
- CTransparentStaticText* m_institution;
- CTransparentStaticText* m_scienceArea;
CScrolledTextBox* m_description;
wxTimer* m_ChangeSlideTimer;
wxBitmap m_SlideBitmap;
bool m_bCurrentSlideIsDefault;
bool m_bGotAllProjectsList;
+ bool m_bHasBeenDrawn;
ALL_PROJECTS_LIST m_AllProjectsList;
};
@@ -101,13 +100,10 @@ class CSlideShowPanel : public wxPanel
/// Class CSimpleTaskPanel
///////////////////////////////////////////////////////////////////////////////
-#if 0
#ifdef __WXMAC__
#include "MacBitmapComboBox.h"
#else
#define CBOINCBitmapComboBox wxBitmapComboBox
-#define EVT_BOINCBITMAPCOMBOBOX EVT_COMBOBOX
-#endif
#endif
class CSimpleTaskPanel : public CSimplePanelBase
diff --git a/clientgui/sg_ViewTabPage.cpp b/clientgui/sg_ViewTabPage.cpp
deleted file mode 100644
index a455ed2..0000000
--- a/clientgui/sg_ViewTabPage.cpp
+++ /dev/null
@@ -1,847 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation "sg_ViewTabPage.h"
-#endif
-
-#include "stdwx.h"
-#include "diagnostics.h"
-#include "util.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "parse.h"
-#include "error_numbers.h"
-#include "common/wxFlatNotebook.h"
-#include "BOINCGUIApp.h"
-#include "SkinManager.h"
-#include "MainDocument.h"
-#include "sg_CustomControls.h"
-#include "sg_ProgressBar.h"
-#include "sg_ImageButton.h"
-#include "sg_ImageLoader.h"
-#include "sg_ViewTabPage.h"
-#include "app_ipc.h"
-
-
-IMPLEMENT_DYNAMIC_CLASS(CViewTabPage, wxPanel)
-
-enum{
- BTN_SHOW_GRAPHICS,
- BTN_COLLAPSE,
-};
-
-
-BEGIN_EVENT_TABLE(CViewTabPage, wxPanel)
- EVT_PAINT(CViewTabPage::OnPaint)
- EVT_ERASE_BACKGROUND(CViewTabPage::OnEraseBackground)
-END_EVENT_TABLE()
-
-bool isRunning(RESULT* result) {
- bool outcome = false;
-
- // It must be scheduled to be running
- if ( result->scheduler_state == CPU_SCHED_SCHEDULED ) {
- // If either the project or task have been suspended, then it cannot be running
- if ( !result->suspended_via_gui && !result->project_suspended_via_gui ) {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- CC_STATUS status;
- pDoc->GetCoreClientStatus(status);
- // Make sure that the core client isn't global suspended for some reason
- if ( status.task_suspend_reason == 0 || status.task_suspend_reason == SUSPEND_REASON_CPU_THROTTLE ) {
- outcome = true;
- }
- }
- }
-
- return outcome;
-}
-
-
-CViewTabPage::CViewTabPage() {}
-
-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;
- safe_strcpy(project_url, url);
- m_hasGraphic = false;
- resultWU = result;
- //create page
- CreatePage();
- project_files_downloaded_time = 0;
-
-#if wxCHECK_VERSION(2,8,0)
- // Workaround for unknown problem with newer versions of wxWidgets
- // Without this, the size of the panel would be reduced to 336,300
- SetMinSize(wxSize(343, 314));
-#endif
-
-}
-
-CViewTabPage::~CViewTabPage() {
-}
-
-void CViewTabPage::CreatePage()
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
-
- // Show or don't show the icon if the WU is running
- RESULT* resState = NULL;
- CMainDocument* pDoc = wxGetApp().GetDocument();
- resState = pDoc->state.lookup_result(resultWU->project_url, resultWU->name);
- if(resState){
- projName = wxString(resState->project->project_name.c_str(), wxConvUTF8 );
- if (strlen(resState->app->user_friendly_name)) {
- projectFrName = wxString(resState->app->user_friendly_name, wxConvUTF8);
- } else {
- projectFrName = wxString(resState->avp->app_name, wxConvUTF8);
- }
- } else {
- projName = wxString("Not Available", wxConvUTF8 );
- projectFrName = wxString("Not Available", wxConvUTF8);
- }
- //Line Proj Name
- lnProjName = new CTransparentStaticLine(this, wxID_ANY, wxPoint(20,36), wxSize(316,1));
- lnProjName->SetLineColor(pSkinSimple->GetStaticLineColor());
- //Create with a two step process to eliminate compiler warning
- wxStaticLine* spacerLine = new wxStaticLine();
- spacerLine->Create(this,-1,wxPoint(20,36),wxSize(305,1));
-
- //My Progress
- wrkUnitName = wxString(resultWU->name, wxConvUTF8);
- //Main Gauge
- gaugeWUMain=new CProgressBar(this,wxPoint(20,282));
- gaugeWUMain->SetValue(floor(resultWU->fraction_done * 100000)/1000);
- //percent
- percNum = (wxFloat64)(floor(resultWU->fraction_done * 100000)/1000);
- percStr.Printf(_("%.1lf"), percNum);
- gaugePercent = percStr + _T(" %");
- //Elapsed Time
- FormatCPUTime(resultWU, elapsedTimeValue);
- FormatTimeToCompletion(resultWU, timeRemainingValue);
- // show graphic button
- if (resultWU->supports_graphics || strlen(resultWU->graphics_exec_path)) {
- m_hasGraphic = true;
- }
- int status = ComputeState();
-
- // project image behind graphic <><><>
- btnAminBg = new CImageButton(
- this,
- *(pSkinSimple->GetWorkunitAnimationBackgroundImage()->GetBitmap()),
- wxPoint(24,72),
- wxSize(294,146),
- m_hasGraphic,
- status
- );
-
- CreateSlideShowWindow();
- Update();
-}
-
-int CViewTabPage::ComputeState() {
- int status = TAB_STATUS_PREEMPTED;
- if ( isRunning(resultWU) ) {
- status = TAB_STATUS_RUNNING;
- } else {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- CC_STATUS ccStatus;
- pDoc->GetCoreClientStatus(ccStatus);
- if ( ccStatus.task_suspend_reason & SUSPEND_REASON_BATTERIES ) {
- status = TAB_STATUS_PAUSED_POWER;
- } else if ( ccStatus.task_suspend_reason & SUSPEND_REASON_USER_ACTIVE ) {
- status = TAB_STATUS_PAUSED_USER_ACTIVE;
- } else if ( ccStatus.task_suspend_reason & SUSPEND_REASON_USER_REQ ) {
- status = TAB_STATUS_PAUSED_USER_REQ;
- } else if ( ccStatus.task_suspend_reason & SUSPEND_REASON_TIME_OF_DAY ) {
- status = TAB_STATUS_PAUSED_TIME_OF_DAY;
- } else if ( ccStatus.task_suspend_reason & SUSPEND_REASON_BENCHMARKS ) {
- status = TAB_STATUS_PAUSED_BENCHMARKS;
- } else if ( ccStatus.task_suspend_reason & SUSPEND_REASON_INITIAL_DELAY ) {
- status = TAB_STATUS_INITIAL_DELAY;
- }
- }
- return status;
-}
-
-void CViewTabPage::LoadSlideShow(std::vector<wxBitmap> *vSlideShow) {
- char urlDirectory[256];
- CMainDocument* pDoc = wxGetApp().GetDocument();
- 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(result->project->master_url, urlDirectory);
- char file[512];
- char resolvedFile[512];
- wxBitmap* btmpSlideShow;
- for(int i=0; i<99; i++) {
- sprintf(file, "%s/slideshow_%s_%02d", urlDirectory, result->app->name, i);
- if(boinc_resolve_filename(file, resolvedFile, sizeof(resolvedFile)) == 0){
- btmpSlideShow = new wxBitmap();
- if ( btmpSlideShow->LoadFile(wxString(resolvedFile,wxConvUTF8), wxBITMAP_TYPE_ANY) ) {
- if (btmpSlideShow->Ok() ) {
- vSlideShow->push_back(*btmpSlideShow);
- }
- }
- delete btmpSlideShow;
- } else {
- break;
- }
- }
- if ( vSlideShow->size() == 0 ) {
- for(int i=0; i<99; i++) {
- sprintf(file, "%s/slideshow_%02d", urlDirectory, i);
- if(boinc_resolve_filename(file, resolvedFile, sizeof(resolvedFile)) == 0){
- btmpSlideShow = new wxBitmap();
- if ( btmpSlideShow->LoadFile(wxString(resolvedFile,wxConvUTF8), wxBITMAP_TYPE_ANY) ) {
- if (btmpSlideShow->Ok() ) {
- vSlideShow->push_back(*btmpSlideShow);
- }
- }
- delete btmpSlideShow;
- } else {
- break;
- }
- }
- }
-}
-
-// This function will check to see if application specific images are available from the project. If not, then
-// it will return the default image from the skin
-std::vector<wxBitmap> CViewTabPage::GetSlideShow() {
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- std::vector<wxBitmap> vSlideShow;
- LoadSlideShow(&vSlideShow);
- if ( vSlideShow.size() == 0 ) {
- vSlideShow.push_back(*(pSkinSimple->GetWorkunitAnimationImage()->GetBitmap()));
- }
-
- return vSlideShow;
-}
-
-bool CViewTabPage::Downloading() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- if ( pDoc->results.results.size() > 0 ) {
- RESULT* result;
- for(unsigned int i=0; i < pDoc->results.results.size(); i++ ) {
- result = pDoc->result(i);
- if ( result != NULL && result->state == RESULT_FILES_DOWNLOADING ) {
- return true;
- }
- }
- }
- return false;
-}
-
-void CViewTabPage::UpdateInterface()
-{
- // Check to see if new files have been downloaded for the project
- // If so, reload the slide show
- CMainDocument* pDoc = wxGetApp().GetDocument();
- PROJECT* project = pDoc->state.lookup_project(resultWU->project_url);
- if ( project > NULL && project->project_files_downloaded_time > project_files_downloaded_time) {
- project_files_downloaded_time = project->project_files_downloaded_time;
- GetCanvas()->ReloadSlideShow(GetSlideShow());
- }
-
-
- wxString strBuffer = wxEmptyString;
- //Gauge
- gaugeWUMain->SetValue(floor(resultWU->fraction_done * 100000)/1000);
- //percent
- percNum = (wxFloat64)(floor(resultWU->fraction_done * 100000)/1000);
- percStr.Printf(_("%.1lf"), percNum);
- gaugePercent = percStr + _T(" %");
- // Elapsed Time
- FormatCPUTime(resultWU, elapsedTimeValue);
- //lblElapsedTimeValue->SetLabel(strBuffer);
- //lblElapsedTimeValue->Refresh();
- // Remaining time
- FormatTimeToCompletion(resultWU, timeRemainingValue);
- //lblTimeRemainingValue->SetLabel(strBuffer);
- //lblTimeRemainingValue->Refresh();
- DrawText();
-
- // check to see if we can display graphics
- bool changed = false;
- if ((resultWU->supports_graphics || strlen(resultWU->graphics_exec_path)) && isRunning(resultWU) ) {
- if ( !m_hasGraphic ) {
- changed = true;
- }
- m_hasGraphic = true;
- } else {
- if ( m_hasGraphic ) {
- changed = true;
- }
- m_hasGraphic = false;
- }
- int newStatus = ComputeState();
- if ( btnAminBg->GetStatus() != newStatus ) {
- changed = true;
- btnAminBg->SetStatus(newStatus);
- }
-
- btnAminBg->SetEnableShowGraphics(m_hasGraphic);
- if ( changed ) {
- btnAminBg->Refresh();
- btnAminBg->Update();
- m_canvas->Refresh();
- m_canvas->Update();
- }
-#ifdef __WXMAC__
- else {
- btnAminBg->Refresh();
- m_canvas->Refresh();
- lnProjName->Refresh();
- }
- gaugeWUMain->Refresh();
-#endif
-
-}
-
-
-void CViewTabPage::CreateSlideShowWindow() {
- wSlideShow=new wxWindow(this,-1,wxPoint(26,74),wxSize(290,126),wxNO_BORDER);
- m_canvas = new MyCanvas(wSlideShow, wxPoint(0,0), wxSize(290,126), GetSlideShow());
-}
-
-
-void CViewTabPage::ReskinInterface()
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- //animation bg
- btnAminBg->SetImage(*(pSkinSimple->GetWorkunitAnimationBackgroundImage()->GetBitmap()));
- //line
- lnProjName->SetLineColor(pSkinSimple->GetStaticLineColor());
- // gauge
- gaugeWUMain->ReskinInterface();
- wSlideShow->Destroy();
- CreateSlideShowWindow();
-}
-
-
-
-wxInt32 CViewTabPage::FormatCPUTime(RESULT* rslt, wxString& strBuffer) const {
- float fBuffer = 0;
- RESULT* result = rslt;
-
- if (result) {
- if (result->active_task) {
- fBuffer = result->elapsed_time;
- } else {
- if(result->state < RESULT_COMPUTE_ERROR) {
- fBuffer = 0;
- } else {
- fBuffer = result->final_elapsed_time;
- }
- }
- }
-
- if (0 == fBuffer) {
- strBuffer = wxT("---");
- } else {
- SGUITimeFormat(fBuffer,strBuffer);
- }
-
- return 0;
-}
-
-wxInt32 CViewTabPage::FormatTimeToCompletion(RESULT* rslt, wxString& strBuffer) const {
- float fBuffer = 0;
-
- if (rslt) {
- fBuffer = rslt->estimated_cpu_time_remaining;
- }
-
- if (0 >= fBuffer) {
- strBuffer = wxT("---");
- } else {
- SGUITimeFormat(fBuffer,strBuffer);
- }
-
- return 0;
-}
-
-void CViewTabPage::SGUITimeFormat(float fBuffer, wxString& strBuffer) const {
- wxInt32 iHour = 0;
- wxInt32 iMin = 0;
- wxInt32 iSec = 0;
- wxString strTemp;
-
- strBuffer.clear();
- strTemp.clear();
-
- iHour = (wxInt32)(fBuffer / (60 * 60));
- iMin = (wxInt32)(fBuffer / 60) % 60;
- iSec = (wxInt32)(fBuffer) % 60;
-
- strBuffer.Printf(_("%d hr %d min %d sec"), iHour, iMin, iSec);
-
-}
-
-void CViewTabPage::OnWorkShowGraphics() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- wxInt32 iAnswer = 0;
- wxString strMachineName = wxEmptyString;
-
- // TODO: implement hide as well as show
-#if (defined(_WIN32) || defined(__WXMAC__))
- pDoc->GetConnectedComputerName(strMachineName);
- if (!pDoc->IsComputerNameLocal(strMachineName)) {
- iAnswer = wxGetApp().SafeMessageBox(
- _("Are you sure you want to display graphics on a remote machine?"),
- _("Show graphics"),
- wxYES_NO | wxICON_QUESTION,
- this
- );
- } else {
- iAnswer = wxYES;
- }
-#else
- iAnswer = wxYES;
-#endif
-
- if (wxYES == iAnswer) {
- pDoc->WorkShowGraphics(resultWU);
- }
-}
-
-void CViewTabPage::WriteText(wxDC* dc) {
- //Project Name
- dc->SetFont(wxFont(LARGE_FONT,74,90,90,0,wxT("Arial")));
- dc->DrawText(projName, wxPoint(20,8));
-
- dc->SetFont(wxFont(SMALL_FONT,74,90,90,0,wxT("Arial")));
- FormatText(_("Application: "), projectFrName, dc, wxPoint(20,47));
-
- int height, width;
- dc->GetTextExtent(_("Time Remaining: "), &width, &height);
- width = width + 20; // add the starting x position
-
- FormatText(_("Elapsed Time: "), elapsedTimeValue, dc, wxPoint(20,230), width);
- FormatText(_("Time Remaining: "), timeRemainingValue, dc, wxPoint(20,255), width);
-
- dc->DrawText(gaugePercent, wxPoint(290,283));
-
-}
-
-void CViewTabPage::FormatText(const wxString& title, const wxString& text, wxDC* dc, wxPoint pos, int col_width, wxFont font) {
- wxCoord width, height;
- wxCoord col = pos.x;
- wxCoord max_col = 330;
- wxString translated_text;
-
- // Title
- dc->SetFont(font);
- dc->GetTextExtent(title, &width, &height);
- if ( col_width == 0 ) {
- pos.x = 20;
- col_width = width + pos.x;
- } else {
- pos.x = col_width - width;
- }
- dc->DrawText(title, pos);
-
- // How wide was the title? Add 5 pixel buffer before drawing the next piece of text.
- col = col_width + 3;
-
- // Text
- dc->GetTextExtent(text, &width, &height);
- if ( width > (max_col - col) ) {
- int i = (int) text.length();
- while ( width > (max_col - col) ) {
- i--;
- dc->GetTextExtent(text.substr(0,i) + _T("..."), &width, &height);
- }
- translated_text = text.substr(0,i) + _T("...");
- } else {
- translated_text = text;
- }
- dc->DrawText(translated_text, wxPoint(col, pos.y));
-}
-
-
-void CViewTabPage::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxLogTrace(wxT("Function Start/End"), wxT("CViewTabPage::OnPaint - Begin"));
- wxPaintDC dc(this);
- WriteText(&dc);
- wxLogTrace(wxT("Function Start/End"), wxT("CViewTabPage::OnPaint - End"));
-}
-
-
-void CViewTabPage::OnImageButton() {
- if (m_hasGraphic) {
- OnWorkShowGraphics();
- }
-}
-
-void CViewTabPage::DrawText() {
-CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- wxLogTrace(wxT("Function Start/End"), wxT("CViewTabPage::DrawText - Begin"));
-
- wxClientDC dcc(this);
- wxBufferedDC dc(&dcc);
-
- //Project Name
- dc.DrawBitmap(*(pSkinSimple->GetWorkunitAreaBackgroundImage()->GetBitmap()), 0, 0);
- WriteText(&dc);
-
- wxLogTrace(wxT("Function Start/End"), wxT("CViewTabPage::DrawText - End"));
-}
-
-void CViewTabPage::OnEraseBackground(wxEraseEvent& event){
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- wxDC* dc=event.GetDC();
- dc->DrawBitmap(*pSkinSimple->GetWorkunitAreaBackgroundImage()->GetBitmap(), 0, 0);
-}
-
-// ---------------------------------------------------------------------------
-// MyCanvas
-// ---------------------------------------------------------------------------
-
-BEGIN_EVENT_TABLE(MyCanvas, wxWindow)
- EVT_PAINT(MyCanvas::OnPaint)
-END_EVENT_TABLE()
-
-MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size, std::vector<wxBitmap> images)
- : wxWindow(parent, -1, pos, size, wxNO_BORDER | wxNO_FULL_REPAINT_ON_RESIZE)
-{
- SetBackgroundColour(wxColour(_T("BLACK")));
- ssImages = images;
- reloadSlideShow = false;
- LoadSlideShow();
-}
-
-void MyCanvas::LoadSlideShow() {
- vSlideShow.clear();
-
- // Now load the new slide show
- wxBitmap* image;
- ImageLoader* il;
- double xRatio, yRatio, ratio;
- for(unsigned int i=0; i < ssImages.size(); i++) {
- image = &(ssImages.at(i));
-
- // Check to see if they need to be rescaled to fit in the window
- ratio = 1.0;
- xRatio = ((double) GetSize().GetWidth())/((double) image->GetWidth());
- yRatio = ((double) GetSize().GetHeight())/((double) image->GetHeight());
- if ( xRatio < ratio ) {
- ratio = xRatio;
- }
- if ( yRatio < ratio ) {
- ratio = yRatio;
- }
- if ( ratio < 1.0 ) {
- wxImage img = image->ConvertToImage();
- img.Rescale((int) (image->GetWidth()*ratio), (int) (image->GetHeight()*ratio));
- image = new wxBitmap(img);
- }
- if ( xRatio == yRatio ) {
- // If it perfectly fills the window, don't center
- // Centering causes a bug (at least on windows) where if the taskbar
- // is at the top of the page, the images are offset
- il = new ImageLoader(this, false);
- } else {
- il = new ImageLoader(this, true);
- }
- il->LoadImage(*image);
- if ( ratio < 1.0 ) {
- delete image;
- }
- il->Show(false);
- vSlideShow.push_back(il);
- }
- currentImageIndex=0;
- vSlideShow.at(currentImageIndex)->Show(true);
-}
-
-void MyCanvas::ReloadSlideShow(std::vector<wxBitmap> images) {
- ssImages = images;
- reloadSlideShow = true;
-}
-
-void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxLogTrace(wxT("Function Start/End"), wxT("MyCanvas::OnPaint - Begin"));
- wxPaintDC dc(this);
-// if ( vSlideShow.size() > 0 && vSlideShow.at(0).Ok() ) {
-// dc.DrawBitmap(vSlideShow.at(0),0,0,false);
-// }
- wxLogTrace(wxT("Function Start/End"), wxT("MyCanvas::OnPaint - End"));
-}
-
-void MyCanvas::AdvanceSlide() {
- if ( currentImageIndex+1 == (int) vSlideShow.size() ) {
- if ( reloadSlideShow ) {
- vSlideShow.at(currentImageIndex)->Show(false);
- LoadSlideShow();
- vSlideShow.at(0)->Show(true);
- reloadSlideShow=false;
- } else {
- if ( vSlideShow.size() > 1 ) {
- vSlideShow.at(0)->Show(true);
- vSlideShow.at(currentImageIndex)->Show(false);
- }
- }
- currentImageIndex=0;
- } else {
- vSlideShow.at(currentImageIndex+1)->Show(true);
- vSlideShow.at(currentImageIndex)->Show(false);
- currentImageIndex++;
- }
- GetParent()->Update();
-}
-
-#define ID_CHANGE_SLIDE_TIMER 14000
-
-BEGIN_EVENT_TABLE(WorkunitNotebook, wxFlatNotebook)
- EVT_TIMER(ID_CHANGE_SLIDE_TIMER, WorkunitNotebook::OnChangeSlide)
- EVT_FLATNOTEBOOK_PAGE_CHANGED(wxID_ANY, WorkunitNotebook::OnTabChanged)
-END_EVENT_TABLE()
-
-WorkunitNotebook::WorkunitNotebook(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) :
- wxFlatNotebook(parent, id, pos, size, style, name)
-{
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- SetUseBackground(true);
- SetTabAreaBackgroundImage(
- pSkinSimple->GetWorkunitTabAreaBackgroundImage()->GetBitmap()
- );
- SetBackgroundColour(
- *pSkinSimple->GetBackgroundImage()->GetBackgroundColor()
- );
- SetTabAreaColour(
- *pSkinSimple->GetBackgroundImage()->GetBackgroundColor()
- );
- SetGradientColors(
- *pSkinSimple->GetWorkunitActiveTab()->GetGradientFromColor(),
- *pSkinSimple->GetWorkunitActiveTab()->GetGradientToColor(),
- *pSkinSimple->GetWorkunitActiveTab()->GetBorderColor()
- );
- SetGradientColorsInactive(
- *pSkinSimple->GetWorkunitSuspendedTab()->GetGradientFromColor(),
- *pSkinSimple->GetWorkunitSuspendedTab()->GetGradientToColor(),
- *pSkinSimple->GetWorkunitSuspendedTab()->GetBorderColor()
- );
-
- char red = (char)
- (((int) pSkinSimple->GetWorkunitSuspendedTab()->GetGradientFromColor()->Red() +
- (int) pSkinSimple->GetWorkunitSuspendedTab()->GetGradientToColor()->Red() + 255*3)/5);
- char green = (char)
- (((int) pSkinSimple->GetWorkunitSuspendedTab()->GetGradientFromColor()->Green() +
- (int) pSkinSimple->GetWorkunitSuspendedTab()->GetGradientToColor()->Green() + 255*3)/5);
- char blue = (char)
- (((int) pSkinSimple->GetWorkunitSuspendedTab()->GetGradientFromColor()->Blue() +
- (int) pSkinSimple->GetWorkunitSuspendedTab()->GetGradientToColor()->Blue() + 255*3)/5);
- SetActiveTabTextColour(wxColour(255,255,255));
- SetNonActiveTabTextColour(wxColour(red, green, blue));
-
- m_ImageList.push_back(*(pSkinSimple->GetWorkunitActiveTab()->GetBitmap()));
- SetImageList(&m_ImageList);
-
- changeSlideTimer = new wxTimer(this, ID_CHANGE_SLIDE_TIMER);
- changeSlideTimer->Start(10000);
-
- Update();
-#ifdef __WXMAC__
- // If no applications are running, the page corresponding to the last tab
- // would be displayed intially, but that tab itself is not visible if there
- // are more tabs than fit on page, causing problems. So we select the
- // first tab as a default.
- if (m_windows.size()) // If tab 0 exists
- SetSelection(0);
-#endif
-
- for (int i=0; i< (int) m_windows.size(); i++) {
- if ( isRunning(m_windows.at(i)->resultWU) ) {
- SetSelection(i);
- break;
- }
- }
-}
-
-WorkunitNotebook::~WorkunitNotebook() {
- if ( changeSlideTimer->IsRunning() ) {
- changeSlideTimer->Stop();
- }
- delete changeSlideTimer;
-
-}
-
-void WorkunitNotebook::AddTab(RESULT* result) {
- CMainDocument* pDoc = wxGetApp().GetDocument();
- RESULT* resState = NULL;
- std::string projUrl = result->project_url;
- std::string nme = result->name;
- resState = pDoc->state.lookup_result(result->project_url, result->name);
- if(!resState){
- pDoc->ForceCacheUpdate();
- return;
- }
- wxString appShortName = wxString(resState->app->name, wxConvUTF8 );
- // Do not update screen at this point
- Freeze();
- std::string index = " ";
- appShortName += wxString(index.c_str(), wxConvUTF8 );
- CViewTabPage *wTab = new CViewTabPage(this, result, nme, result->project_url);
-
- AddPage(wTab, appShortName, true);
- if(isRunning(resState) ){
- int pageIndex = GetPageIndex(wTab);
- SetPageImageIndex(pageIndex, 0); // this is a running process
- }
- m_windows.push_back(wTab);
- GetParent()->GetSizer()->Layout();
- Thaw();
-}
-
-void WorkunitNotebook::ReskinAppGUI() {
- CSkinSimple* pSkinSimple = wxGetApp().GetSkinManager()->GetSimple();
-
- wxASSERT(pSkinSimple);
- wxASSERT(wxDynamicCast(pSkinSimple, CSkinSimple));
-
- SetUseBackground(true);
- SetTabAreaBackgroundImage(
- pSkinSimple->GetWorkunitTabAreaBackgroundImage()->GetBitmap()
- );
- SetTabAreaColour(
- *pSkinSimple->GetBackgroundImage()->GetBackgroundColor()
- );
-
- SetGradientColors(
- *pSkinSimple->GetWorkunitActiveTab()->GetGradientFromColor(),
- *pSkinSimple->GetWorkunitActiveTab()->GetGradientToColor(),
- *pSkinSimple->GetWorkunitActiveTab()->GetBorderColor()
- );
- SetGradientColorsInactive(
- *pSkinSimple->GetWorkunitSuspendedTab()->GetGradientFromColor(),
- *pSkinSimple->GetWorkunitSuspendedTab()->GetGradientToColor(),
- *pSkinSimple->GetWorkunitSuspendedTab()->GetBorderColor()
- );
-
- m_ImageList.clear();
- m_ImageList.push_back(*(pSkinSimple->GetWorkunitActiveTab()->GetBitmap()));
- SetImageList(&m_ImageList);
-
- for(int i = 0; i < (int)m_windows.size(); i++){
- CViewTabPage *wTab = m_windows.at(i);
- wTab->ReskinInterface();
- }
-}
-
-void WorkunitNotebook::Update() {
- CMainDocument* pDoc = wxGetApp().GetDocument();
-
- // Mark all inactive (this lets us loop only once)
- for(int x = 0; x < (int)m_windows.size(); x ++)
- {
- CViewTabPage *currTab = m_windows[x];
- currTab->isAlive = false;
- }
- // First update existing pages and add new ones
- RESULT* result;
- for(int i = 0; i < (int) pDoc->results.results.size(); i++){
- bool found = false;
- result = pDoc->result(i);
- // only check tasks that are active
- if ( result == NULL || !result->active_task ) {
- continue;
- }
- // loop through the open tabs to find
- for(int j = 0; j < (int)m_windows.size(); j++) {
- CViewTabPage *currTab = m_windows[j];
- if(result->name == currTab->GetTabName()){
- currTab->resultWU = result;
- if (GetSelection() == j)
- currTab->UpdateInterface();
- if(isRunning(result) && this->GetPageImageIndex(j) != 0){
- SetPageImageIndex(j, 0); // this result is current running
- } else if ( !isRunning(result) && this->GetPageImageIndex(j) != -1 ) {
- SetPageImageIndex(j, -1); // this result is not running
- }
- found = true;
- currTab->isAlive = true;
- break; // skip out of this loop
- }
- }
-
- // if it isn't currently one of the tabs then we have a new one! lets add it
- if ( !found ) {
- AddTab(result);
- }
-
- }
-
- // Check pages in descending order so deletion won't change indexes of pages yet to be checked
- for(int x = (int)m_windows.size()-1; x >=0; x--) {
- CViewTabPage *currTab = m_windows[x];
- if(!currTab->isAlive){
- DeletePage(x); // delete the notebook page
- m_windows.erase(m_windows.begin()+x); // delete the page in vector
- }
- }
-}
-
-void WorkunitNotebook::OnChangeSlide(wxTimerEvent& WXUNUSED(event)) {
- for(int x = 0; x < (int)m_windows.size(); x ++) {
- if ( GetPageImageIndex(x) == 0 ) {
- CViewTabPage *currTab = m_windows[x];
- currTab->GetCanvas()->AdvanceSlide();
- }
- }
-}
-
-void WorkunitNotebook::OnTabChanged(wxFlatNotebookEvent& WXUNUSED(event)) {
- int index = GetSelection();
- if (index < 0) return; // No tabs
- if (index < (int)m_windows.size()) {
- CViewTabPage *currTab = m_windows[index];
- currTab->UpdateInterface();
- }
-}
diff --git a/clientgui/sg_ViewTabPage.h b/clientgui/sg_ViewTabPage.h
deleted file mode 100644
index 4acb35c..0000000
--- a/clientgui/sg_ViewTabPage.h
+++ /dev/null
@@ -1,161 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-#ifndef _VIEWTABPAGE_H_
-#define _VIEWTABPAGE_H_
-
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma interface "sg_ViewTabPage.cpp"
-#endif
-
-#ifdef __WXMAC__
-#define SMALL_FONT 12
-#define MEDIUM_FONT 16
-#define LARGE_FONT 20
-#else
-#define SMALL_FONT 9
-#define MEDIUM_FONT 12
-#define LARGE_FONT 16
-#endif
-
-class MyCanvas : public wxWindow
-{
-public:
- MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size, std::vector<wxBitmap> images);
- void OnPaint(wxPaintEvent& event);
- void AdvanceSlide();
- void ReloadSlideShow(std::vector<wxBitmap> images);
-
-private:
- std::vector<ImageLoader*> vSlideShow;
- int currentImageIndex;
- std::vector<wxBitmap> ssImages;
- bool reloadSlideShow;
- void LoadSlideShow();
- DECLARE_EVENT_TABLE()
-};
-
-class CProgressBar;
-class CTransparentStaticLine;
-class CImageButton;
-class WorkunitNotebook;
-
-class CViewTabPage : public wxPanel {
- DECLARE_DYNAMIC_CLASS( CViewTabPage )
-
-public:
-
- bool isAlive;
- // btns ////////////
- ////////////////////
- // animation
- wxBitmap* btmpBgAnim;
- CImageButton * btnAminBg;
- //line
- CTransparentStaticLine *lnProjName;
- //strings
- wxString projName;
- wxString projectFrName;
- wxString wrkUnitName;
- wxString gaugePercent;
- wxString elapsedTimeValue;
- wxString timeRemainingValue;
- //wxGauge *gaugeWUMain;
- CProgressBar *gaugeWUMain;
- wxStaticText *lblWrkUnitName;
- wxStaticText *lblProjectFrName;
- wxString percStr;
- wxFloat64 percNum;
- // bg
- RESULT* resultWU;
-
- CViewTabPage();
- CViewTabPage(
- WorkunitNotebook* parent, RESULT* result, std::string name, char* url
- );
- ~CViewTabPage();
-
- void CreatePage();
- void UpdateInterface();
- void ReskinInterface();
- void OnWorkShowGraphics();
- void OnPaint(wxPaintEvent& event);
- void OnLeftUp(wxMouseEvent& event);
- void DrawText();
- void OnImageButton();
-
- // Setters
- void SetTabName(const std::string nme) { m_name = nme; }
- // Getters
- std::string GetTabName() { return m_name; }
-
- // Animation
- MyCanvas* GetCanvas() const { return m_canvas; }
-
- DECLARE_EVENT_TABLE()
-
-protected:
-
- //tab identifier
- std::string m_name;
- char project_url[256];
- bool m_hasGraphic;
-
- wxInt32 FormatCPUTime( RESULT* rslt, wxString& strBuffer ) const;
- wxInt32 FormatTimeToCompletion( RESULT* rslt, wxString& strBuffer ) const;
- void SGUITimeFormat( float fBuffer, wxString& strBuffer) const;
-
- void OnEraseBackground(wxEraseEvent& event);
-
-private:
-
- void CreateSlideShowWindow();
- void LoadSlideShow(std::vector<wxBitmap> *vSlideShow);
- bool Downloading();
- int ComputeState();
- void WriteText(wxDC* dc);
- void FormatText(const wxString& title, const wxString& text, wxDC* dc, wxPoint pos, int col_width = 0, wxFont font = wxFont(SMALL_FONT,74,90,90,0,wxT("Arial")));
- std::vector<wxBitmap> GetSlideShow();
- wxWindow* wSlideShow;
- MyCanvas* m_canvas;
- double project_files_downloaded_time;
-
-};
-
-class WorkunitNotebook : public wxFlatNotebook {
-
-public:
- WorkunitNotebook(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("FlatNotebook"));
- ~WorkunitNotebook();
- void ReskinAppGUI();
- void Update();
- void OnChangeSlide(wxTimerEvent& WXUNUSED(event));
- void OnTabChanged(wxFlatNotebookEvent& WXUNUSED(event));
-
-
-protected:
-
-private:
- wxFlatNotebookImageList m_ImageList;
- wxTimer* changeSlideTimer;
- std::vector<CViewTabPage*> m_windows; // vector of all window tabs created for notebook
- void AddTab(RESULT* result);
- DECLARE_EVENT_TABLE()
-
-};
-#endif
-
diff --git a/clientgui/skins/Charity Engine/skin.xml b/clientgui/skins/Charity Engine/skin.xml
index d3c7363..a74f969 100644
--- a/clientgui/skins/Charity Engine/skin.xml
+++ b/clientgui/skins/Charity Engine/skin.xml
@@ -34,21 +34,21 @@
</image>
</workunit_suspended_image>
- <dialog_background_image>
+ <dialog_background_image>
<image>
<imagesrc>dialog_background_image.png</imagesrc>
</image>
</dialog_background_image>
- <project_image>
+ <project_image>
<image>
<imagesrc>project_image.png</imagesrc>
</image>
- </project_background_image>
+ </project_image>
</simple>
<advanced>
- <application_name>Charity Engine - BOINC Manager</application_name>
+ <application_name>Charity Engine Desktop</application_name>
<application_short_name>Charity Engine</application_short_name>
<application_logo>ce_about.ico</application_logo>
@@ -83,8 +83,8 @@
<is_branded>1</is_branded>
<organization_name>Charity Engine</organization_name>
- <organization_website>http://www.charityengine.org</organization_website>
- <organization_help_url>http://www.charityengine.org/about</organization_help_url>
+ <organization_website>http://www.charityengine.com</organization_website>
+ <organization_help_url>http://www.charityengine.com/manager_menu.php</organization_help_url>
</advanced>
diff --git a/clientgui/skins/GridRepublic/skin.xml b/clientgui/skins/GridRepublic/skin.xml
index 22b5846..0ff4faf 100644
--- a/clientgui/skins/GridRepublic/skin.xml
+++ b/clientgui/skins/GridRepublic/skin.xml
@@ -34,21 +34,21 @@
</image>
</workunit_suspended_image>
- <dialog_background_image>
+ <dialog_background_image>
<image>
<imagesrc>dialog_background_image.png</imagesrc>
</image>
</dialog_background_image>
- <project_image>
+ <project_image>
<image>
<imagesrc>project_image.png</imagesrc>
</image>
- </project_background_image>
+ </project_image>
</simple>
<advanced>
- <application_name>GridRepublic - BOINC Manager</application_name>
+ <application_name>GridRepublic Desktop</application_name>
<application_short_name>GridRepublic</application_short_name>
<application_logo>gr_about.ico</application_logo>
@@ -84,7 +84,7 @@
<organization_name>GridRepublic</organization_name>
<organization_website>http://www.gridrepublic.org</organization_website>
- <organization_help_url>http://www.gridrepublic.org/joomla/index.php?option=com_mambowiki&board=4&Itemid=35&page=Help&compars=help_documentation</organization_help_url>
+ <organization_help_url>http://www.gridrepublic.org/manager_menu.php</organization_help_url>
</advanced>
diff --git a/clientgui/skins/ProgressThruProcessors/skin.xml b/clientgui/skins/ProgressThruProcessors/skin.xml
index 9f84e42..40e4e21 100644
--- a/clientgui/skins/ProgressThruProcessors/skin.xml
+++ b/clientgui/skins/ProgressThruProcessors/skin.xml
@@ -34,21 +34,21 @@
</image>
</workunit_suspended_image>
- <dialog_background_image>
+ <dialog_background_image>
<image>
<imagesrc>dialog_background_image.png</imagesrc>
</image>
</dialog_background_image>
- <project_image>
+ <project_image>
<image>
<imagesrc>project_image.png</imagesrc>
</image>
- </project_background_image>
+ </project_image>
</simple>
<advanced>
- <application_name>Progress Thru Processors - BOINC Manager</application_name>
+ <application_name>Progress Thru Processors Desktop</application_name>
<application_short_name>Progress Thru Processors</application_short_name>
<application_logo>ptp_about.ico</application_logo>
@@ -83,8 +83,8 @@
<is_branded>1</is_branded>
<organization_name>Progress Thru Processors</organization_name>
- <organization_website>http://www.facebook.com/progressthruprocessors</organization_website>
- <organization_help_url>http://www.facebook.com/progressthruprocessors</organization_help_url>
+ <organization_website>https://apps.facebook.com/processors</organization_website>
+ <organization_help_url>https://apps.facebook.com/processors/manager_menu.php</organization_help_url>
</advanced>
diff --git a/clientgui/stdwx.h b/clientgui/stdwx.h
index d2a2eb0..c46d91a 100644
--- a/clientgui/stdwx.h
+++ b/clientgui/stdwx.h
@@ -23,13 +23,13 @@
// Target Windows 2000 or better with Internet Explorer 5.01 or better
#ifndef WINVER
-#define WINVER 0x0500
+#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
+#define _WIN32_WINNT 0x0501
#endif
#ifndef _WIN32_WINDOWS
-#define _WIN32_WINDOWS 0x0500
+#define _WIN32_WINDOWS 0x0501
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0x0501
@@ -48,6 +48,7 @@
#include <wx/wx.h>
#include <wx/config.h> // configuration support
#include <wx/debug.h> // diagnostics support
+#include <wx/debugrpt.h>
#include <wx/log.h> // logging support
#include <wx/accel.h> // accelerator support
#include <wx/regex.h> // regular expression support
@@ -115,6 +116,12 @@
#include <wx/mstream.h>
#include <wx/hash.h>
#include <wx/selstore.h>
+#include <wx/webview.h>
+#include <wx/webviewfshandler.h>
+#include <wx/snglinst.h>
+#include <wx/bmpcbox.h>
+#include <wx/evtloop.h>
+
#ifdef _WIN32
// Visual Studio 2005 has extended the C Run-Time Library by including "secure"
@@ -131,6 +138,7 @@
// Windows Headers
//
#include <windows.h>
+#include <winternl.h>
#if !defined(__CYGWIN32__) && !defined(__MINGW32__)
#include <crtdbg.h>
#endif
@@ -139,9 +147,9 @@
#include <share.h>
#include <ole2.h>
#include <oleauto.h>
-#include <wininet.h>
#include <shlobj.h>
#include <userenv.h>
+#include <wtsapi32.h>
#if wxUSE_ACCESSIBILITY
#include <oleacc.h>
diff --git a/clientgui/wizardex.cpp b/clientgui/wizardex.cpp
index 38cfb0e..c1bdc4a 100644
--- a/clientgui/wizardex.cpp
+++ b/clientgui/wizardex.cpp
@@ -8,7 +8,7 @@
// 3) Fixed ShowPage() bug on displaying bitmaps
// Robert Vazan (sizers)
// Created: 15.08.99
-// RCS-ID: $Id$
+// RCS-ID: $Id: wizardex.cpp 19603 2009-11-18 17:30:03Z romw $
// Copyright: (c) 1999 Vadim Zeitlin <zeitlin at dptmaths.ens-cachan.fr>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
@@ -650,7 +650,7 @@ void wxWizardEx::OnCancel(wxCommandEvent& WXUNUSED(eventUnused))
// page, but a small extra check won't hurt
wxWindow *win = m_page ? (wxWindow *)m_page : (wxWindow *)this;
- wxWizardExEvent event(wxEVT_WIZARD_CANCEL, GetId(), false, m_page);
+ wxWizardExEvent event(wxEVT_WIZARDEX_CANCEL, GetId(), false, m_page);
if ( !win->GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
{
// no objections - close the dialog
diff --git a/clientgui/wizardex.h b/clientgui/wizardex.h
index b89e65d..713bede 100644
--- a/clientgui/wizardex.h
+++ b/clientgui/wizardex.h
@@ -9,7 +9,7 @@
// Added wxWIZARD_HELP event
// Robert Vazan (sizers)
// Created: 15.08.99
-// RCS-ID: $Id$
+// RCS-ID: $Id: wizardex.h 19588 2009-11-17 19:19:50Z romw $
// Copyright: (c) 1999 Vadim Zeitlin <zeitlin at dptmaths.ens-cachan.fr>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
@@ -49,7 +49,7 @@ public:
const wxChar* resource = NULL
);
- virtual bool Create(
+ bool Create(
wxWizardEx *parent,
int id = wxID_ANY,
const wxChar* resource = NULL
@@ -60,7 +60,7 @@ public:
virtual wxWizardPageEx *GetPrev() const = 0;
virtual wxWizardPageEx *GetNext() const = 0;
-#if wxUSE_VALIDATOR
+#if wxUSE_VALIDATORS
/// Override the base functions to allow a validator to be assigned to this page.
bool TransferDataToWindow()
{
@@ -77,7 +77,7 @@ public:
return GetValidator() ? GetValidator()->Validate(this)
: wxPanel::Validate();
}
-#endif // wxUSE_VALIDATOR
+#endif // wxUSE_VALIDATORS
protected:
// common part of ctors:
diff --git a/clientscr/Mac_Saver_ModuleView.m b/clientscr/Mac_Saver_ModuleView.m
index 3f003ef..e435d2c 100644
--- a/clientscr/Mac_Saver_ModuleView.m
+++ b/clientscr/Mac_Saver_ModuleView.m
@@ -40,22 +40,11 @@ typedef int NSInteger;
typedef float CGFloat;
#endif
-#ifndef GrafPtr
-// OS 10.7 SDK and later do not have QuickDraw headers
-// Although the run-time libraries are still available,
-// we use weak linking in case they are removed in
-// future versions of OS X.
-typedef struct OpaqueGrafPtr* GrafPtr;
-void GetPort(GrafPtr * port) __attribute__((weak_import));
-void SetPortTextFont(GrafPtr port,short txFont) __attribute__((weak_import));
-void SetPortTextSize(CGrafPtr port, short txSize) __attribute__((weak_import));
-#endif
-#define kHelveticaFontID 21
+static int compareOSVersionTo(int toMajor, int toMinor);
void print_to_log_file(const char *format, ...);
void strip_cr(char *buf);
-static SInt32 gSystemVersion = 0;
static double gSS_StartTime = 0.0;
mach_port_t gEventHandle = 0;
@@ -106,12 +95,7 @@ int signof(float x) {
gEventHandle = NXOpenEventStatus();
- OSStatus err = Gestalt(gestaltSystemVersion, &gSystemVersion);
- if (err != noErr) {
- gSystemVersion = 0;
- }
-
- initBOINCSaver();
+ initBOINCSaver();
if (gBOINC_Logo == NULL) {
if (self) {
@@ -288,12 +272,12 @@ int signof(float x) {
// For unkown reasons, OS 10.7 Lion screensaver delays several seconds after
// user activity before calling stopAnimation, so we check user activity here
- if ((gSystemVersion >= 0x1070) && ((getDTime() - gSS_StartTime) > 2.0)) {
+ if ((compareOSVersionTo(10, 7) >= 0) && ((getDTime() - gSS_StartTime) > 2.0)) {
kernResult = IOHIDGetParameter( gEventHandle, CFSTR(EVSIOIDLE), sizeof(UInt64), ¶ms, &rcnt );
if ( kernResult == kIOReturnSuccess ) {
idleTime = ((double)params) / 1000.0 / 1000.0 / 1000.0;
if (idleTime < 1.5) {
- [ self stopAnimation ];
+ [ NSApp terminate:nil ];
}
}
}
@@ -464,29 +448,14 @@ int signof(float x) {
CGContextTranslateCTM (myContext, 0, viewBounds.origin.y + viewBounds.size.height);
CGContextScaleCTM (myContext, 1.0f, -1.0f);
- if (gSystemVersion >= 0x1050) {
- CTFontRef myFont = CTFontCreateWithName(CFSTR("Helvetica"), 20, NULL);
+ CTFontRef myFont = CTFontCreateWithName(CFSTR("Helvetica"), 20, NULL);
- HIThemeTextInfo theTextInfo = {kHIThemeTextInfoVersionOne, kThemeStateActive, kThemeSpecifiedFont,
- kHIThemeTextHorizontalFlushLeft, kHIThemeTextVerticalFlushTop,
- kHIThemeTextBoxOptionNone, kHIThemeTextTruncationNone, 0, false,
- 0, myFont
- };
- textInfo = theTextInfo;
- } else {
-#ifndef __x86_64__
- GrafPtr port;
- GetPort(&port);
- SetPortTextFont(port, kHelveticaFontID);
- SetPortTextSize(port, 20);
-
- HIThemeTextInfo theTextInfo = {0, kThemeStateActive, kThemeCurrentPortFont, //kThemeMenuItemCmdKeyFont, //kThemePushButtonFont,
- kHIThemeTextHorizontalFlushLeft, kHIThemeTextVerticalFlushTop,
- kHIThemeTextBoxOptionNone, kHIThemeTextTruncationNone, 0, false
- };
- textInfo = theTextInfo;
-#endif
- }
+ HIThemeTextInfo theTextInfo = {kHIThemeTextInfoVersionOne, kThemeStateActive, kThemeSpecifiedFont,
+ kHIThemeTextHorizontalFlushLeft, kHIThemeTextVerticalFlushTop,
+ kHIThemeTextBoxOptionNone, kHIThemeTextTruncationNone, 0, false,
+ 0, myFont
+ };
+ textInfo = theTextInfo;
HIThemeGetTextDimensions(cf_msg, (float)gMovingRect.size.width, &textInfo, NULL, &gActualTextBoxHeight, NULL);
gActualTextBoxHeight += TEXTBOXTOPBORDER;
@@ -632,3 +601,27 @@ Bad:
}
@end
+
+
+static int compareOSVersionTo(int toMajor, int toMinor) {
+ SInt32 major, minor;
+ OSStatus err = noErr;
+
+ err = Gestalt(gestaltSystemVersionMajor, &major);
+ if (err != noErr) {
+ fprintf(stderr, "Gestalt(gestaltSystemVersionMajor) returned error %ld\n", (long)err);
+ fflush(stderr);
+ return -1; // gestaltSystemVersionMajor selector was not available before OS 10.4
+ }
+ if (major < toMajor) return -1;
+ if (major > toMajor) return 1;
+ err = Gestalt(gestaltSystemVersionMinor, &minor);
+ if (err != noErr) {
+ fprintf(stderr, "Gestalt(gestaltSystemVersionMinor) returned error %ld\n", (long)err);
+ fflush(stderr);
+ return -1; // gestaltSystemVersionMajor selector was not available before OS 10.4
+ }
+ if (minor < toMinor) return -1;
+ if (minor > toMinor) return 1;
+ return 0;
+}
diff --git a/clientscr/mac_saver_module.cpp b/clientscr/mac_saver_module.cpp
index ef0268b..4d81c76 100644
--- a/clientscr/mac_saver_module.cpp
+++ b/clientscr/mac_saver_module.cpp
@@ -112,18 +112,13 @@ const char * RunningOnBatteryMsg = "Computing and screensaver disabled while ru
// multiple times (once for each display), so we need to guard
// against any problems that may cause.
void initBOINCSaver() {
-#ifdef _DEBUG
- char buf1[256], buf2[256];
- safe_strcpy(buf1, getenv("HOME"));
- safe_strcat(buf1, "/Documents/ss_stdout");
- safe_strcpy(buf2, getenv("HOME"));
- safe_strcat(buf2, "/Documents/ss_stderr");
-
- diagnostics_init(BOINC_DIAG_REDIRECTSTDOUTOVERWRITE
- | BOINC_DIAG_REDIRECTSTDERROVERWRITE
- | BOINC_DIAG_TRACETOSTDOUT, buf1, buf2
+ diagnostics_init(
+ BOINC_DIAG_PERUSERLOGFILES |
+ BOINC_DIAG_REDIRECTSTDOUT |
+ BOINC_DIAG_REDIRECTSTDERR |
+ BOINC_DIAG_TRACETOSTDOUT,
+ "stdoutscr", "stderrscr"
);
-#endif
if (gspScreensaver == NULL) {
gspScreensaver = new CScreensaver();
@@ -443,7 +438,7 @@ int CScreensaver::getSSMessage(char **theMessage, int* coveredFreq) {
int newFrequency = TEXTLOGOFREQUENCY;
*coveredFreq = 0;
pid_t myPid;
- CC_STATE state;
+ CC_STATE ccstate;
OSStatus err;
if (ScreenIsBlanked) {
@@ -472,11 +467,11 @@ int CScreensaver::getSSMessage(char **theMessage, int* coveredFreq) {
if (!rpc->init(NULL)) { // Initialize communications with Core Client
m_bConnected = true;
if (IsDualGPUMacbook) {
- state.clear();
- state.global_prefs.clear_bools();
- int result = rpc->get_state(state);
+ ccstate.clear();
+ ccstate.global_prefs.clear_bools();
+ int result = rpc->get_state(ccstate);
if (!result) {
- OKToRunOnBatteries = state.global_prefs.run_on_batteries;
+ OKToRunOnBatteries = ccstate.global_prefs.run_on_batteries;
} else {
OKToRunOnBatteries = false;
}
diff --git a/clientscr/screensaver.cpp b/clientscr/screensaver.cpp
index 0cefd20..915e64d 100644
--- a/clientscr/screensaver.cpp
+++ b/clientscr/screensaver.cpp
@@ -82,22 +82,22 @@ bool CScreensaver::is_same_task(RESULT* taska, RESULT* taskb) {
return true;
}
-int CScreensaver::count_active_graphic_apps(RESULTS& results, RESULT* exclude) {
+int CScreensaver::count_active_graphic_apps(RESULTS& res, RESULT* exclude) {
unsigned int i = 0;
unsigned int graphics_app_count = 0;
// Count the number of active graphics-capable apps excluding the specified result.
// If exclude is NULL, don't exclude any results.
//
- for (i = 0; i < results.results.size(); i++) {
+ for (i = 0; i < res.results.size(); i++) {
BOINCTRACE(_T("get_random_graphics_app -- active task detected\n"));
BOINCTRACE(
_T("get_random_graphics_app -- name = '%s', path = '%s'\n"),
- results.results[i]->name, results.results[i]->graphics_exec_path
+ res.results[i]->name, res.results[i]->graphics_exec_path
);
- if (!strlen(results.results[i]->graphics_exec_path)) continue;
- if (is_same_task(results.results[i], exclude)) continue;
+ if (!strlen(res.results[i]->graphics_exec_path)) continue;
+ if (is_same_task(res.results[i], exclude)) continue;
BOINCTRACE(_T("get_random_graphics_app -- active task detected w/graphics\n"));
graphics_app_count++;
@@ -111,7 +111,7 @@ int CScreensaver::count_active_graphic_apps(RESULTS& results, RESULT* exclude) {
// If exclude is NULL or an empty string, don't exclude any results.
//
RESULT* CScreensaver::get_random_graphics_app(
- RESULTS& results, RESULT* exclude
+ RESULTS& res, RESULT* exclude
) {
RESULT* rp = NULL;
unsigned int i = 0;
@@ -122,13 +122,13 @@ RESULT* CScreensaver::get_random_graphics_app(
BOINCTRACE(_T("get_random_graphics_app -- Function Start\n"));
- graphics_app_count = count_active_graphic_apps(results, avoid);
+ graphics_app_count = count_active_graphic_apps(res, avoid);
BOINCTRACE(_T("get_random_graphics_app -- graphics_app_count = '%d'\n"), graphics_app_count);
// If no graphics app found other than the one excluded, count again without excluding any
if ((0 == graphics_app_count) && (avoid != NULL)) {
avoid = NULL;
- graphics_app_count = count_active_graphic_apps(results, avoid);
+ graphics_app_count = count_active_graphic_apps(res, avoid);
}
// If no graphics app was found, return NULL
@@ -143,13 +143,13 @@ RESULT* CScreensaver::get_random_graphics_app(
// find the chosen graphics application.
//
- for (i = 0; i < results.results.size(); i++) {
- if (!strlen(results.results[i]->graphics_exec_path)) continue;
- if (is_same_task(results.results[i], avoid)) continue;
+ for (i = 0; i < res.results.size(); i++) {
+ if (!strlen(res.results[i]->graphics_exec_path)) continue;
+ if (is_same_task(res.results[i], avoid)) continue;
current_counter++;
if (current_counter == random_selection) {
- rp = results.results[i];
+ rp = res.results[i];
break;
}
}
diff --git a/clientscr/screensaver_win.cpp b/clientscr/screensaver_win.cpp
index 6bb2e2d..9309030 100644
--- a/clientscr/screensaver_win.cpp
+++ b/clientscr/screensaver_win.cpp
@@ -144,7 +144,6 @@ CScreensaver::CScreensaver() {
//
HRESULT CScreensaver::Create(HINSTANCE hInstance) {
HRESULT hr;
- int retval;
struct ss_periods periods;
m_hInstance = hInstance;
@@ -159,19 +158,18 @@ HRESULT CScreensaver::Create(HINSTANCE hInstance) {
}
// Initialize Diagnostics
- retval = diagnostics_init (
+ int dwDiagnosticsFlags =
#ifdef _DEBUG
BOINC_DIAG_HEAPCHECKENABLED |
BOINC_DIAG_MEMORYLEAKCHECKENABLED |
#endif
BOINC_DIAG_DUMPCALLSTACKENABLED |
- BOINC_DIAG_ARCHIVESTDOUT |
- BOINC_DIAG_REDIRECTSTDOUTOVERWRITE |
- BOINC_DIAG_REDIRECTSTDERROVERWRITE |
- BOINC_DIAG_TRACETOSTDOUT,
- "stdoutscr",
- "stderrscr"
- );
+ BOINC_DIAG_PERUSERLOGFILES |
+ BOINC_DIAG_REDIRECTSTDERR |
+ BOINC_DIAG_REDIRECTSTDOUT |
+ BOINC_DIAG_TRACETOSTDOUT;
+
+ diagnostics_init(dwDiagnosticsFlags, "stdoutscr", "stderrscr");
// Parse the command line and do the appropriate thing
diff --git a/clientscr/ss_app.cpp b/clientscr/ss_app.cpp
index 6c7558a..3fe5ef2 100644
--- a/clientscr/ss_app.cpp
+++ b/clientscr/ss_app.cpp
@@ -21,7 +21,6 @@
#ifdef _WIN32
#include "boinc_win.h"
-#include "win_util.h"
#else
#include <cmath>
#endif
@@ -475,18 +474,8 @@ void boinc_app_key_release(int, int){}
void app_graphics_init() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-
-#ifdef _WIN32
- chdir_to_install_dir();
-#endif
-
ttf_load_fonts(".");
logo.load_image_file(logo_file);
-
-#ifdef _WIN32
- chdir_to_data_dir();
-#endif
-
init_lights();
}
@@ -503,10 +492,6 @@ int main(int argc, char** argv) {
}
}
-#ifdef _WIN32
- chdir_to_data_dir();
-#endif
-
// Initialize the BOINC Diagnostics Framework
int dwDiagnosticsFlags =
#ifdef _DEBUG
@@ -514,6 +499,7 @@ int main(int argc, char** argv) {
BOINC_DIAG_MEMORYLEAKCHECKENABLED |
#endif
BOINC_DIAG_DUMPCALLSTACKENABLED |
+ BOINC_DIAG_PERUSERLOGFILES |
BOINC_DIAG_REDIRECTSTDERR |
BOINC_DIAG_REDIRECTSTDOUT |
BOINC_DIAG_TRACETOSTDOUT;
diff --git a/clienttray/tray_win.cpp b/clienttray/tray_win.cpp
index 170cf37..5d26a03 100644
--- a/clienttray/tray_win.cpp
+++ b/clienttray/tray_win.cpp
@@ -51,15 +51,15 @@ INT CBOINCTray::Run( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR /* lpCm
// Initialize the BOINC Diagnostics Framework
int flags =
#ifdef _DEBUG
+ BOINC_DIAG_HEAPCHECKENABLED |
BOINC_DIAG_MEMORYLEAKCHECKENABLED |
#endif
BOINC_DIAG_DUMPCALLSTACKENABLED |
- BOINC_DIAG_HEAPCHECKENABLED |
+ BOINC_DIAG_PERUSERLOGFILES |
BOINC_DIAG_TRACETOSTDOUT |
BOINC_DIAG_REDIRECTSTDERR |
BOINC_DIAG_REDIRECTSTDOUT;
- chdir_to_data_dir();
diagnostics_init(flags, "stdouttray", "stderrtray");
// Create application window class
diff --git a/configure.ac b/configure.ac
index 2b79f8c..8b8b84a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,7 +6,7 @@ dnl not sure exactly what the minimum version is (but 2.13 wont work)
AC_PREREQ(2.58)
dnl Set the BOINC version here. You can also use the set-version script.
-AC_INIT(BOINC, 7.2.47)
+AC_INIT(BOINC, 7.3.19)
AC_CONFIG_MACRO_DIR([m4])
LIBBOINC_VERSION=`echo ${PACKAGE_VERSION} | sed 's/\./:/g'`
AC_SUBST([LIBBOINC_VERSION])
@@ -15,7 +15,13 @@ AC_CANONICAL_TARGET
dnl generate .tar.gz, .tar.bz2, .zip
dnl AM_INIT_AUTOMAKE(dist-bzip2 dist-zip)
+
+dnl subdir-objects is supposed to become the default soon, but specifying it
+dnl breaks depfile generation. We'll worry about it when that happens.
+dnl AM_INIT_AUTOMAKE(dist-zip subdir-objects)
+
AM_INIT_AUTOMAKE(dist-zip)
+
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_CONFIG_SRCDIR(lib/shmem.cpp)
@@ -102,12 +108,18 @@ AC_ARG_ENABLE(xss,
[enable_xss=${enableval}],
[enable_xss=yes])
+AC_ARG_ENABLE(boinczip,
+ AS_HELP_STRING([--enable-boinczip],
+ [enable building the boinc zip library]),
+ [enable_boinczip=${enableval}],
+ [enable_boinczip=no])
+
AC_ARG_ENABLE(pkg-libs,
AS_HELP_STRING([--enable-pkg-libs],
[Builds and installs components that would be present in a
boinc-libs package. This is a synonym for --disable-server
--disable-client --enable-libraries --disable-static
- --disable-install-headers --disable-manager]),
+ --disable-install-headers --disable-manager --enable-boinczip]),
[
enable_libraries=yes
enable_server=no
@@ -115,6 +127,7 @@ AC_ARG_ENABLE(pkg-libs,
enable_manager=no
enable_install_headers=no
enable_static=no
+ enable_boinczip=yes
],
[])
@@ -123,13 +136,14 @@ AC_ARG_ENABLE(pkg-devel,
[Builds and installs components that would be present in a
boinc-devel package. This is a synonym for --disable-server
--disable-client --enable-libraries --enable-install-headers
- --disable-manger]),
+ --disable-manger --enable-boinczip]),
[
enable_libraries=yes
enable_server=no
enable_client=no
enable_manager=no
enable_install_headers=yes
+ enable_boinczip=yes
],
[])
@@ -145,6 +159,7 @@ AC_ARG_ENABLE(pkg-client,
enable_client=yes
enable_manager=no
enable_install_headers=no
+ enable_boinczip=no
],
[])
@@ -158,6 +173,7 @@ AC_ARG_ENABLE(pkg-manager,
enable_client=no
enable_manager=yes
enable_install_headers=no
+ enable_boinczip=no
],
[])
@@ -309,9 +325,15 @@ dnl GUI
BOINC_CHECK_CYGWIN
dnl enable objective-C
+if test x$OBJC = x ; then
+ OBJC="$CC"
+fi
+if test x$OBJCXX = x ; then
+ OBJCXX="$CXX"
+fi
_AM_DEPENDENCIES([OBJC])
-OBJC="$CC"
AC_SUBST(OBJC)
+AC_SUBST(OBJCXX)
OBJCFLAGS="-ObjC"
AC_SUBST(OBJCFLAGS)
@@ -509,8 +531,11 @@ AX_CHECK_GL
AX_CHECK_GLU
dnl check for glut and prerequesites to the glut-test: libXmu and libXi
+dnl or on windows libGDI32 and libWinMM
AC_CHECK_LIB([Xmu], [fopen], [have_Xmu="yes"], [have_Xmu="no"])
AC_CHECK_LIB([Xi], [fopen], [have_Xi="yes"], [have_Xi="no"])
+AC_CHECK_LIB([gdi32], [fopen])
+AC_CHECK_LIB([winmm], [fopen])
AX_CHECK_GLUT
if test "X${no_x}" != "Xyes" -a "$no_glut" = yes; then
@@ -566,7 +591,7 @@ HINT: on MacOSX/Darwin these libs/includes are sometimes found in '/sw/' (if usi
fi
fi
-AM_CONDITIONAL(BUILD_GRAPHICS_API, [ test "$have_glut" = yes ])
+AM_CONDITIONAL(BUILD_GRAPHICS_API, [ test "$have_glut" = yes -a "$have_jpeg" = 1])
dnl check for X screen saver lib
if test "$enable_xss" == yes; then
@@ -611,7 +636,76 @@ AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME
AC_TYPE_SIGNAL
-AC_CHECK_HEADERS(windows.h sys/types.h sys/un.h arpa/inet.h dirent.h grp.h fcntl.h inttypes.h stdint.h memory.h netdb.h netinet/in.h netinet/tcp.h netinet/ether.h net/if.h net/if_arp.h signal.h strings.h sys/auxv.h sys/file.h sys/fcntl.h sys/ipc.h sys/ioctl.h sys/msg.h sys/param.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/sockio.h sys/socket.h sys/stat.h sys/statvfs.h sys/statfs.h sys/systeminfo.h sys/time.h sys/types.h sys/utsname.h sys/vmmeter.h sys/wait.h unistd.h utmp.h err [...]
+AC_CHECK_HEADERS(winsock2.h winsock.h windows.h ws2tcpip.h winternl.h crtdbg.h sys/types.h sys/un.h arpa/inet.h dirent.h grp.h fcntl.h inttypes.h stdint.h memory.h netdb.h netinet/in.h netinet/tcp.h netinet/ether.h net/if.h net/if_arp.h signal.h strings.h sys/auxv.h sys/file.h sys/fcntl.h sys/ipc.h sys/ioctl.h sys/msg.h sys/param.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/sockio.h sys/socket.h sys/stat.h sys/statvfs.h sys/statfs.h sys/systeminfo.h sys/time.h sys/types.h sys/ut [...]
+
+if test x${ac_cv_header_windows_h} = xyes ; then
+
+AC_CHECK_HEADERS([winhttp.h ntapi.h ddk/ntapi.h dbghelp.h delayimp.h],[], [], [[
+#if HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+]])
+
+AC_CHECK_HEADER(security.h, [
+AC_DEFINE(HAVE_SECURITY_H,1,[Define to 1 if your compiler has the security.h header file])
+AC_DEFINE(SECURITY_WIN32,1,[Define to 1 if your compiler has the security.h header file])
+], [], [[
+#define SECURITY_WIN32 1
+#if HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+]])
+
+AC_CHECK_TYPES([SYSTEM_PROCESSES, CLIENT_ID, VM_COUNTERS, SYSTEM_THREADS, THREAD_STATE, THREAD_WAIT_REASON],[],[],[[
+#if HAVE_WINDOWS_H
+#include <windows.h>
+#endif
+#ifdef HAVE_WINTERNL_H
+#include <winternl.h>
+#elif defined(HAVE_DDK_NTAPI_H)
+#include <ddk/ntapi.h>
+#elif defined(HAVE_NTAPI_H)
+#include <ntapi.h>
+#endif
+]])
+
+fi
+
+AC_CHECK_TYPES([socklen_t],[],[],[[
+#if HAVE_WINDOWS_H
+#include <windows.h>
+#endif
+#ifdef HAVE_SYS_WINSOCK2_H
+#include <winsock2.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
+#ifdef HAVE_WINHTTP_H
+#include <winhttp.h>
+#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+]])
AC_CHECK_HEADER(net/if.h, [], [], [[
#if HAVE_SYS_SOCKET_H
@@ -654,6 +748,7 @@ AC_CHECK_HEADERS(netinet/if_ether.h,[],[],[[
#include <net/if.h>
#endif
]])
+
AC_CHECK_TYPES([struct lifconf, struct lifreq, struct ifconf, struct ifreq, struct ether_addr],[],[],[[
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -705,6 +800,55 @@ AC_PROG_GCC_TRADITIONAL
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(ether_ntoa setpriority sched_setscheduler strlcpy strlcat strcasestr strcasecmp sigaction getutent setutent getisax strdup strdupa daemon stat64 putenv setenv unsetenv res_init strtoull)
+AC_CHECK_DECLS([_fpreset, fpreset],
+ [],[],[[
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_WINDOWS_H
+#include <windows.h>
+#endif
+#ifdef HAVE_FLOAT_H
+#include <float.h>
+#endif
+#ifdef HAVE_IEEEFP_H
+#include <ieeefp.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+]])
+
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
@@ -738,7 +882,7 @@ fi
dnl ---------- wxWidgets --------------------------------------------------
if test "${enable_manager}" = yes ; then
- BOINC_OPTIONS_WXWIDGETS([2.8.0])
+ BOINC_OPTIONS_WXWIDGETS([3.0.0])
fi
dnl ---------- libNotify --------------------------------------------------
@@ -776,6 +920,7 @@ fi
AM_CONDITIONAL(OS_LINUX, [echo $host_os | grep '^linux' > /dev/null])
dnl In case anyone wants to try building the windows code using mingw!
+AM_CONDITIONAL(OS_WIN32, [echo $host_os | egrep '^mingw|^winnt' > /dev/null])
AM_CONDITIONAL(OS_WIN32_MINGW, [echo $host_os | grep '^mingw' > /dev/null])
dnl or OS2
AM_CONDITIONAL(OS_OS2, [echo $host_os | grep '^os2' > /dev/null])
@@ -790,6 +935,7 @@ AM_CONDITIONAL(ENABLE_SERVER, [test "${enable_server}" = yes])
AM_CONDITIONAL(ENABLE_CLIENT, [test "${enable_client}" = yes])
AM_CONDITIONAL(ENABLE_MANAGER, [ test "x${ac_cv_have_wxwidgets}" = xyes -a "${enable_manager}" = yes ])
AM_CONDITIONAL(ENABLE_LIBRARIES, [test "${enable_libraries}" = yes])
+AM_CONDITIONAL(ENABLE_BOINCZIP, [test "${enable_boinczip}" = yes])
AM_CONDITIONAL(INSTALL_HEADERS, [test "${enable_install_headers}" = yes])
AM_CONDITIONAL(HAVE_CUDA_LIB, [test "${enable_client}" = yes -a -f ./coprocs/CUDA/posix/${boinc_platform}/libcudart.so])
@@ -837,6 +983,10 @@ SAH_CHECK_LIB([wsock32],[fopen],[
AC_DEFINE([HAVE_LIBWSOCK32],[1],[Define to 1 if you have the wsock32 library])
CLIENTLIBS="${sah_lib_last} ${CLIENTLIBS}"])
echo DEBUG: CLIENTLIBS=${CLIENTLIBS} >&5
+SAH_CHECK_LIB([userenv],[fopen],[
+ AC_DEFINE([HAVE_LIBUSERENV],[1],[Define to 1 if you have the userenv library])
+ CLIENTLIBS="${sah_lib_last} ${CLIENTLIBS}"])
+ echo DEBUG: CLIENTLIBS=${CLIENTLIBS} >&5
svlibs=$LIBS
if test "${ac_cv_func_res_init}" != "yes" ; then
diff --git a/db/Makefile.am b/db/Makefile.am
index 3548944..479ba37 100644
--- a/db/Makefile.am
+++ b/db/Makefile.am
@@ -10,4 +10,6 @@ endif
## other stuff to go into the distribution
extradir = $(prefix)/share/boinc-server-maker/db
-dist_extra_DATA = constraints.sql schema.sql init_db
+dist_extra_DATA = constraints.sql schema.sql
+
+dist_extra_SCRIPTS = init_db
diff --git a/db/boinc_db.cpp b/db/boinc_db.cpp
index 2ca2531..3af5871 100644
--- a/db/boinc_db.cpp
+++ b/db/boinc_db.cpp
@@ -214,7 +214,8 @@ void DB_APP::db_print(char* buf){
"homogeneous_app_version=%d, "
"non_cpu_intensive=%d, "
"locality_scheduling=%d, "
- "n_size_classes=%d ",
+ "n_size_classes=%d, "
+ "fraction_done_exact=%d ",
create_time,
name,
min_version,
@@ -229,7 +230,8 @@ void DB_APP::db_print(char* buf){
homogeneous_app_version?1:0,
non_cpu_intensive?1:0,
locality_scheduling,
- n_size_classes
+ n_size_classes,
+ fraction_done_exact?1:0
);
}
@@ -252,6 +254,7 @@ void DB_APP::db_parse(MYSQL_ROW &r) {
non_cpu_intensive = (atoi(r[i++]) != 0);
locality_scheduling = atoi(r[i++]);
n_size_classes = atoi(r[i++]);
+ fraction_done_exact = (atoi(r[i++]) != 0);
}
void DB_APP_VERSION::db_print(char* buf){
@@ -491,14 +494,16 @@ void DB_HOST::db_print(char* buf){
"avg_turnaround=%.15e, "
"host_cpid='%s', external_ip_addr='%s', max_results_day=%d, "
"error_rate=%.15e, "
- "product_name='%s' ",
+ "product_name='%s', "
+ "gpu_active_frac=%.15e ",
create_time, userid,
rpc_seqno, rpc_time,
total_credit, expavg_credit, expavg_time,
timezone, domain_name, serialnum,
last_ip_addr, nsame_ip_addr,
- on_frac, connected_frac, active_frac,
- cpu_efficiency, duration_correction_factor,
+ on_frac, connected_frac,
+ active_frac, cpu_efficiency,
+ duration_correction_factor,
p_ncpus, p_vendor, p_model,
p_fpops, p_iops, p_membw,
os_name, os_version,
@@ -511,7 +516,8 @@ void DB_HOST::db_print(char* buf){
avg_turnaround,
host_cpid, external_ip_addr, _max_results_day,
_error_rate,
- product_name
+ product_name,
+ gpu_active_frac
);
UNESCAPE(domain_name);
UNESCAPE(serialnum);
@@ -572,6 +578,7 @@ void DB_HOST::db_parse(MYSQL_ROW &r) {
_max_results_day = atoi(r[i++]);
_error_rate = atof(r[i++]);
strcpy2(product_name, r[i++]);
+ gpu_active_frac = atof(r[i++]);
}
int DB_HOST::update_diff_validator(HOST& h) {
@@ -793,6 +800,10 @@ int DB_HOST::update_diff_sched(HOST& h) {
unescape_string(product_name, sizeof(product_name));
strcat(updates, buf);
}
+ if (gpu_active_frac != h.gpu_active_frac) {
+ sprintf(buf, " gpu_active_frac=%.15e,", gpu_active_frac);
+ strcat(updates, buf);
+ }
int n = strlen(updates);
if (n == 0) return 0;
@@ -814,7 +825,7 @@ int DB_HOST::fpops_percentile(double percentile, double& fpops) {
"select p_fpops from host where expavg_credit>10 order by p_fpops limit %d,1",
m
);
- return get_double(query, fpops);
+ return db->get_double(query, fpops);
}
int DB_HOST::fpops_mean(double& mean) {
@@ -822,7 +833,7 @@ int DB_HOST::fpops_mean(double& mean) {
sprintf(query,
"select avg(p_fpops) from host where expavg_credit>10"
);
- return get_double(query, mean);
+ return db->get_double(query, mean);
}
int DB_HOST::fpops_stddev(double& stddev) {
@@ -830,7 +841,7 @@ int DB_HOST::fpops_stddev(double& stddev) {
sprintf(query,
"select stddev(p_fpops) from host where expavg_credit>10"
);
- return get_double(query, stddev);
+ return db->get_double(query, stddev);
}
void DB_WORKUNIT::db_print(char* buf){
@@ -876,6 +887,49 @@ void DB_WORKUNIT::db_print(char* buf){
);
}
+void DB_WORKUNIT::db_print_values(char* buf) {
+ sprintf(buf,
+ "(0, %d, %d, "
+ "'%s', '%s', %d, "
+ "%f, %f, "
+ "%f, %f, "
+ "%d, "
+ "%u, %f, "
+ "%d, %d, "
+ "%d, %d, %d, "
+ "%d, %f, "
+ "%d, %d, %d, "
+ "%d, %d, "
+ "'%s', "
+ "%d, NOW(), "
+ "%f, "
+ "%d, "
+ "%d, "
+ "%d, "
+ "%d)",
+ create_time, appid,
+ name, xml_doc, batch,
+ rsc_fpops_est, rsc_fpops_bound, rsc_memory_bound, rsc_disk_bound,
+ need_validate,
+ canonical_resultid, canonical_credit,
+ transition_time, delay_bound,
+ error_mask, file_delete_state, assimilate_state,
+ hr_class, opaque,
+ min_quorum,
+ target_nresults,
+ max_error_results,
+ max_total_results,
+ max_success_results,
+ result_template_file,
+ priority,
+ rsc_bandwidth_bound,
+ fileset_id,
+ app_version_id,
+ transitioner_flags,
+ size_class
+ );
+}
+
void DB_WORKUNIT::db_parse(MYSQL_ROW &r) {
int i=0;
clear();
@@ -942,8 +996,11 @@ void DB_RESULT::db_print(char* buf){
"batch=%d, file_delete_state=%d, validate_state=%d, "
"claimed_credit=%.15e, granted_credit=%.15e, opaque=%.15e, random=%d, "
"app_version_num=%d, appid=%d, exit_status=%d, teamid=%d, "
- "priority=%d, mod_time=null, elapsed_time=%.15e, flops_estimate=%.15e, "
- "app_version_id=%d, runtime_outlier=%d, size_class=%d",
+ "priority=%d, elapsed_time=%.15e, flops_estimate=%.15e, "
+ "app_version_id=%d, runtime_outlier=%d, size_class=%d, "
+ "peak_working_set_size=%.0f, "
+ "peak_swap_size=%.0f, "
+ "peak_disk_usage=%.0f ",
create_time, workunitid,
server_state, outcome, client_state,
hostid, userid,
@@ -956,7 +1013,10 @@ void DB_RESULT::db_print(char* buf){
priority, elapsed_time, flops_estimate,
app_version_id,
runtime_outlier?1:0,
- size_class
+ size_class,
+ peak_working_set_size,
+ peak_swap_size,
+ peak_disk_usage
);
UNESCAPE(xml_doc_out);
UNESCAPE(stderr_out);
@@ -977,7 +1037,7 @@ void DB_RESULT::db_print_values(char* buf){
"'%s', '%s', '%s', "
"%d, %d, %d, "
"%.15e, %.15e, %.15e, %d, "
- "%d, %d, %d, %d, %d, null, 0, 0, 0, 0, %d)",
+ "%d, %d, %d, %d, %d, NOW(), 0, 0, 0, 0, %d, 0, 0, 0)",
create_time, workunitid,
server_state, outcome, client_state,
hostid, userid,
@@ -1055,6 +1115,9 @@ void DB_RESULT::db_parse(MYSQL_ROW &r) {
app_version_id = atoi(r[i++]);
runtime_outlier = (atoi(r[i++]) != 0);
size_class = atoi(r[i++]);
+ peak_working_set_size = atof(r[i++]);
+ peak_swap_size = atof(r[i++]);
+ peak_disk_usage = atof(r[i++]);
}
int DB_RESULT::get_unsent_counts(APP& app, int* unsent_count) {
@@ -2117,7 +2180,10 @@ int DB_SCHED_RESULT_ITEM_SET::update_result(SCHED_RESULT_ITEM& ri) {
" xml_doc_out='%s', "
" validate_state=%d, "
" teamid=%d, "
- " elapsed_time=%.15e "
+ " elapsed_time=%.15e, "
+ " peak_working_set_size=%.0f, "
+ " peak_swap_size=%.0f, "
+ " peak_disk_usage=%.0f "
"WHERE "
" id=%u",
ri.hostid,
@@ -2133,6 +2199,9 @@ int DB_SCHED_RESULT_ITEM_SET::update_result(SCHED_RESULT_ITEM& ri) {
ri.validate_state,
ri.teamid,
ri.elapsed_time,
+ ri.peak_working_set_size,
+ ri.peak_swap_size,
+ ri.peak_disk_usage,
ri.id
);
retval = db->do_query(query);
diff --git a/db/boinc_db.h b/db/boinc_db.h
index 012a1b1..bb9ba61 100644
--- a/db/boinc_db.h
+++ b/db/boinc_db.h
@@ -194,6 +194,7 @@ public:
DB_WORKUNIT(DB_CONN* p=0);
int get_id();
void db_print(char*);
+ void db_print_values(char*);
void db_parse(MYSQL_ROW &row);
void operator=(WORKUNIT& w) {WORKUNIT::operator=(w);}
};
@@ -348,6 +349,9 @@ struct SCHED_RESULT_ITEM {
int file_delete_state;
double elapsed_time;
int app_version_id;
+ double peak_working_set_size;
+ double peak_swap_size;
+ double peak_disk_usage;
void clear();
void parse(MYSQL_ROW& row);
diff --git a/db/boinc_db_types.h b/db/boinc_db_types.h
index d953829..5778ac4 100644
--- a/db/boinc_db_types.h
+++ b/db/boinc_db_types.h
@@ -21,6 +21,7 @@
#include <vector>
#include "average.h"
+#include "opencl_boinc.h"
#include "parse.h"
// Sizes of text buffers in memory, corresponding to database BLOBs.
@@ -81,6 +82,8 @@ struct APP {
// type of locality scheduling used by this app (see above)
int n_size_classes;
// for multi-size apps, number of size classes
+ bool fraction_done_exact;
+ // fraction done reported by app is accurate
int write(FILE*);
void clear();
@@ -136,12 +139,6 @@ struct APP_VERSION {
//
BEST_APP_VERSION* bavp;
- // used by validator, not in DB
- //
- std::vector<double>pfc_samples;
- std::vector<double>credit_samples;
- std::vector<double>credit_times;
-
int write(FILE*);
void clear();
@@ -195,6 +192,8 @@ struct USER {
double seti_total_cpu; // number of CPU seconds
char signature[256];
// deprecated as of 9/2004 - may be used as temp
+ // currently used to store a nonce ID while email address
+ // is being verified.
bool has_profile;
char cross_project_id[256];
char passwd_hash[256];
@@ -334,13 +333,20 @@ struct HOST {
// that fail validation
// DEPRECATED
char product_name[256];
+ double gpu_active_frac;
- // the following not in DB
+ // the following items are passed in scheduler requests,
+ // and used in the scheduler,
+ // but not stored in the DB
+ // TODO: move this stuff to a derived class HOST_SCHED
+ //
char p_features[1024];
char virtualbox_version[256];
bool p_vm_extensions_disabled;
+ int num_opencl_cpu_platforms;
+ OPENCL_CPU_PROP opencl_cpu_prop[MAX_OPENCL_CPU_PLATFORMS];
+
// stuff from time_stats
- double gpu_active_frac;
double cpu_and_network_available_frac;
double client_start_time;
double previous_uptime;
@@ -353,6 +359,7 @@ struct HOST {
void fix_nans();
void clear();
+ bool get_opencl_cpu_prop(const char* platform, OPENCL_CPU_PROP&);
};
// values for file_delete state
@@ -589,6 +596,11 @@ struct RESULT {
int size_class;
// -1 means none
+ // the following reported by 7.3.16+ clients
+ double peak_working_set_size;
+ double peak_swap_size;
+ double peak_disk_usage;
+
void clear();
RESULT() {clear();}
};
@@ -625,21 +637,11 @@ struct BATCH {
// project-assigned
char description[256];
// project-assigned
+ double expire_time;
+ // if nonzero, retire the batch after this time
+ // Condor calls this the batch's "lease".
};
-// values of batch.state
-// see html/inc/common_defs.inc
-//
-#define BATCH_STATE_INIT 0
-#define BATCH_STATE_IN_PROGRESS 1
-#define BATCH_STATE_COMPLETE 2
- // "complete" means all workunits have either
- // a canonical result or an error
-#define BATCH_STATE_ABORTED 3
-#define BATCH_STATE_RETIRED 4
- // input/output files can be deleted,
- // result and workunit records can be purged.
-
// info for users who can submit jobs
//
struct USER_SUBMIT {
diff --git a/db/constraints.sql b/db/constraints.sql
index e32daff..7f0ceb5 100644
--- a/db/constraints.sql
+++ b/db/constraints.sql
@@ -132,3 +132,9 @@ alter table assignment
alter table job_file
add unique jf_md5(md5);
+
+alter table badge_user
+ add unique (user_id, badge_id);
+
+alter table badge_team
+ add unique (team_id, badge_id);
diff --git a/db/db_base.cpp b/db/db_base.cpp
index cb00a69..66e596a 100644
--- a/db/db_base.cpp
+++ b/db/db_base.cpp
@@ -424,14 +424,14 @@ int DB_BASE::get_integer(const char* query, int& n) {
return retval;
}
-int DB_BASE::get_double(const char* query, double& x) {
+int DB_CONN::get_double(const char* query, double& x) {
int retval;
MYSQL_ROW row;
MYSQL_RES* resp;
- retval = db->do_query(query);
+ retval = do_query(query);
if (retval) return retval;
- resp = mysql_store_result(db->mysql);
+ resp = mysql_store_result(mysql);
if (!resp) return ERR_DB_NOT_FOUND;
row = mysql_fetch_row(resp);
if (!row || !row[0]) {
@@ -456,7 +456,7 @@ int DB_BASE::sum(double& x, const char* field, const char* clause) {
sprintf(query, "select sum(%s) from %s %s", field, table_name, clause);
- return get_double(query, x);
+ return db->get_double(query, x);
}
DB_BASE_SPECIAL::DB_BASE_SPECIAL(DB_CONN* p) : db(p) {
diff --git a/db/db_base.h b/db/db_base.h
index 44f745d..5a6da4a 100644
--- a/db/db_base.h
+++ b/db/db_base.h
@@ -81,6 +81,7 @@ public:
int start_transaction();
int rollback_transaction();
int commit_transaction();
+ int get_double(const char* query, double&);
MYSQL* mysql;
};
@@ -108,7 +109,6 @@ public:
int count(int&, const char* clause="");
int max_id(int&, const char* clause="");
int sum(double&, const char* field, const char* clause="");
- int get_double(const char* query, double&);
int get_integer(const char* query, int&);
int affected_rows();
diff --git a/db/schema.sql b/db/schema.sql
index 28acae5..b4af601 100644
--- a/db/schema.sql
+++ b/db/schema.sql
@@ -55,6 +55,7 @@ create table app (
non_cpu_intensive tinyint not null default 0,
locality_scheduling integer not null default 0,
n_size_classes smallint not null default 0,
+ fraction_done_exact tinyint not null default 0,
primary key (id)
) engine=InnoDB;
@@ -186,6 +187,7 @@ create table host (
max_results_day integer not null,
error_rate double not null default 0,
product_name varchar(254) not null,
+ gpu_active_frac double not null,
primary key (id)
) engine=InnoDB;
@@ -243,7 +245,7 @@ create table workunit (
max_success_results integer not null,
result_template_file varchar(63) not null,
priority integer not null,
- mod_time timestamp,
+ mod_time timestamp default current_timestamp on update current_timestamp,
rsc_bandwidth_bound double not null,
fileset_id integer not null,
app_version_id integer not null,
@@ -281,16 +283,18 @@ create table result (
exit_status integer not null,
teamid integer not null,
priority integer not null,
- mod_time timestamp,
+ mod_time timestamp default current_timestamp on update current_timestamp,
elapsed_time double not null,
flops_estimate double not null,
app_version_id integer not null,
runtime_outlier tinyint not null,
size_class smallint not null default -1,
+ peak_working_set_size double not null,
+ peak_swap_size double not null,
+ peak_disk_usage double not null,
primary key (id)
) engine=InnoDB;
--- see boinc_db.h for doc
create table batch (
id serial primary key,
user_id integer not null,
@@ -309,7 +313,8 @@ create table batch (
name varchar(255) not null,
app_id integer not null,
project_state integer not null,
- description varchar(255) not null
+ description varchar(255) not null,
+ expire_time double not null
) engine = InnoDB;
-- permissions for job submission
@@ -320,10 +325,11 @@ create table user_submit (
logical_start_time double not null,
submit_all tinyint not null,
-- can submit jobs to any app
- manage_all tinyint not null
+ manage_all tinyint not null,
-- manager privileges for all apps
-- grant/revoke permissions (except manage), change quotas
-- create apps
+ max_jobs_in_progress integer not null
) engine = InnoDB;
-- (user, app) submit permissions
@@ -690,3 +696,37 @@ create table notify (
opaque integer not null
-- some other ID, e.g. that of the thread, user or PM record
);
+
+create table badge (
+ id serial primary key,
+ create_time double not null,
+ type tinyint not null,
+ -- 0=user, 1=team
+ name varchar(255) not null,
+ -- internal use (not visible to users)
+ title varchar(255) not null,
+ -- user-visible, short
+ description varchar(255) not null,
+ -- user-visible, possibly longer
+ image_url varchar(255) not null,
+ -- location of image
+ level varchar(255) not null,
+ -- project-defined
+ tags varchar(255) not null,
+ -- project-defined
+ sql_rule varchar(255) not null
+);
+
+create table badge_user (
+ badge_id integer not null,
+ user_id integer not null,
+ create_time double not null,
+ reassign_time double not null
+);
+
+create table badge_team (
+ badge_id integer not null,
+ team_id integer not null,
+ create_time double not null,
+ reassign_time double not null
+);
diff --git a/db/schema_condor.sql b/db/schema_condor.sql
new file mode 100644
index 0000000..fc9117c
--- /dev/null
+++ b/db/schema_condor.sql
@@ -0,0 +1,10 @@
+create table batch_file_assoc (
+ job_file_id integer not null,
+ batch_id integer not null
+) engine=InnoDB;
+
+alter table batch_file_assoc
+ add unique(job_file_id, batch_id);
+
+alter table workunit
+ add index wu_batch(batch);
diff --git a/dcapi/.gitattributes b/dcapi/.gitattributes
new file mode 100644
index 0000000..1665cfe
--- /dev/null
+++ b/dcapi/.gitattributes
@@ -0,0 +1,25 @@
+# Specify a generic set of rules to help avoid line feed issues across
+# various IDEs.
+#
+
+# Source files
+#
+*.cpp text eol=lf
+*.h text eol=lf
+*.rc text eol=lf
+*.php text eol=lf
+*.c text eol=lf
+
+# Project files
+#
+*.vcproj text eol=crlf
+*.sln text eol=crlf
+*.ac text eol=lf
+*.am text eol=lf
+*.in text eol=lf
+*.m4 text eol=lf
+
+# Commit Notes
+#
+checkin_notes text eol=lf
+checkin_notes_2012 text eol=lf
diff --git a/dcapi/COPYING b/dcapi/COPYING
new file mode 100644
index 0000000..cf0118f
--- /dev/null
+++ b/dcapi/COPYING
@@ -0,0 +1,119 @@
+END USER LICENSE AGREEMENT FOR THE ACADEMIC VERSION OF DC-API SOFTWARE
+
+WARNING: ACADEMIC VERSION OF DC-API SOFTWARE IS FOR NON-COMMERCIAL USE ONLY
+
+This End User License Agreement ("EULA") is a legal agreement between you
+("LICENSEE") (either an individual or a single entity) and MTA SZTAKI, Computer
+and Automation Research Institute, Hungarian Academy of Sciences, Hungary ("MTA
+SZTAKI") for academic use of the software product DC-API development toolset,
+which includes computer software, sample applications and electronic
+documentation (collectively the "SOFTWARE").
+
+For your guidance
+- Academic use includes any activities where fees are not charged, including
+ but not limited to;
+ a) Research activities where the research results are available for free
+ distribution.
+ b) Educational teaching activities (as distinct from Training Programmes
+ below).
+- Commercial use includes any activities where fees are charged, including but
+ not limited to;
+ a) Consultancy
+ b) Training programmes
+ c) Research activities where the research results are not available for free
+ distribution.
+ d) Research activities where research results are released in such a manner
+ that commercial advantage can be gained by a receiving organisation.
+
+You agree that the aggregation of Academic use and Commercial use constitutes
+all uses or potential uses of the SOFTWARE.
+
+Concerning Academic use; any academic report, publication, webpage, or other
+academic disclosure of results obtained with this SOFTWARE must acknowledge
+this SOFTWARE's use by an appropriate citation.
+
+Read the EULA carefully before completing the installation process and using
+the SOFTWARE. If you did not obtain this copy of the SOFTWARE legally, please
+destroy the copy immediately. By installing, copying, or otherwise using the
+SOFTWARE, you agree to be bound by the terms of this EULA.
+
+If you do not agree to the terms of this EULA, MTA SZTAKI is unwilling to
+license the SOFTWARE. In such event, you may not install, copy or otherwise use
+the SOFTWARE.
+
+YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU HAVE READ THIS
+LICENSE, UNDERSTOOD IT, AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.
+
+Furthermore you hereby declare that you understand that this is an academic
+license and that a commercial license for the use of this software exists. You
+agree that contravention of the academic license may result in a liability
+arising for historic, current and future license payments under the terms of
+the prevailing commercial license that was in effect during the time period of
+the contravention.
+
+1. License
+
+Subject to the terms and conditions of this EULA, MTA SZTAKI grants you,
+LICENSEE, a non-exclusive, non-transferable limited license to install and use
+one (1) copy of the SOFTWARE, solely for demonstration, testing, educational,
+evaluation purposes and for academic research. LICENSEE may make one (1) copy
+of the SOFTWARE solely for backup or archival purposes, provided that LICENSEE
+reproduces and includes all copyright and other proprietary notice(s) on the
+copy.
+
+2. Restrictions
+
+LICENSEE may NOT:
+ (i) Rent, lease, lend, transfer, distribute or otherwise transfer rights to the
+ SOFTWARE for any purposes.
+ (ii) Remove any proprietary notices or labels on the SOFTWARE.
+(iii) Modify the SOFTWARE.
+ (iv) Reverse engineer or decompile, decrypt, disassemble or otherwise reduce
+ the SOFTWARE to human-readable form.
+ (v) Use the software for commercial purposes.
+
+3. Ownership
+
+The SOFTWARE is licensed, NOT sold. The foregoing EULA gives LICENSEE limited
+rights to use the SOFTWARE. All rights, title and interest, including all
+copyrights, in and to the SOFTWARE and any copies LICENSEE is permitted to make
+herein are exclusively owned by MTA SZTAKI. MTA SZTAKI retains all rights not
+expressly granted to LICENSEE in this EULA.
+
+4. Disclaimer of Warranties
+
+THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM
+EXTENT PERMITTED BY APPLICABLE LAW, MTA SZTAKI DISCLAIMS ALL WARRANTIES, EITHER
+EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+PERFORMANCE OR MERCHANDABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+NON-INFRINGEMENT WITH REGARD TO THE SOFTWARE. ANY OTHER SOFTWARE, ANY OTHER
+HARDWARE, AND ANY OTHER WRITTEN MATERIAL FURNISHED WITH OR ACCOMPANYING THE
+SOFTWARE IS NOT WARRANTED BY MTA SZTAKI. MTA SZTAKI DOES NOT WARRANT THAT THE
+SOFTWARE WILL MEET LICENSEE REQUIREMENTS, OPERATE WITHOUT INTERRUPTION OR BE
+ERROR-FREE.
+
+5. Limitation of Liability
+
+TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL MTA SZTAKI
+BE LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, DIRECT, INDIRECT, SPECIAL,
+PUNITIVE OR OTHER DAMAGES WHATSOEVER (INCLUDING WITHOUT LIMITATION DAMAGES FOR
+LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION
+OR OTHER PECUNIARY LOSS) ARISING OUT OF THIS AGREEMENT OR CAUSED BY THE USE OR
+INABILITY TO USE THE SOFTWARE, EVEN IF MTA SZTAKI HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+6. Entire Agreement
+
+This EULA constitutes the entire agreement between LICENSEE and MTA SZTAKI and
+supersedes any other prior agreements or understandings, whether oral or
+written, regarding the SOFTWARE. If a provision of this agreement is deemed
+null and void, invalid or without effect, the remainder of this agreement shall
+remain in effect. This Agreement shall be governed by and construed under
+Hungarian law.
+
+7. Termination
+
+Without prejudice to any other rights, MTA SZTAKI may terminate this EULA if
+the licensee fails to comply with the terms and conditions of this EULA. In
+such an event, the LICENSEE must destroy all copies of the SOFTWARE and all of
+its component parts.
diff --git a/dcapi/INSTALL b/dcapi/INSTALL
new file mode 100644
index 0000000..5458714
--- /dev/null
+++ b/dcapi/INSTALL
@@ -0,0 +1,234 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about. Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+ Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
diff --git a/dcapi/Makefile.am b/dcapi/Makefile.am
new file mode 100644
index 0000000..7769f7c
--- /dev/null
+++ b/dcapi/Makefile.am
@@ -0,0 +1,25 @@
+ACLOCAL_AMFLAGS = -I cf
+AUTOMAKE_OPTIONS = foreign 1.7
+
+SUBDIRS = include common doc
+
+EXTRA_DIST = _autosetup.sh
+
+if WITH_BOINC
+SUBDIRS += boinc
+endif
+
+if WITH_CONDOR
+SUBDIRS += condor
+endif
+
+if WITH_LOCAL
+SUBDIRS += local
+endif
+
+if HAVE_JAVA
+SUBDIRS += java
+endif
+
+aclocaldir = $(datadir)/aclocal
+dist_aclocal_DATA = dcapi.m4
diff --git a/dcapi/README-MinGW32 b/dcapi/README-MinGW32
new file mode 100644
index 0000000..6b50b88
--- /dev/null
+++ b/dcapi/README-MinGW32
@@ -0,0 +1,71 @@
+
+ This README details the instructions required for compiling DC-API BOINC client libs
+ on MinGW32. Alternatively we provide a package containing precompiled libraries (see
+ http://doc.desktopgrid.hu/doku.php?id=manual:dc-api&#linux_mingw32cross-compiling_for_windows
+ for details.)
+
+
+ 1. Requirements
+
+ - Debian 6.0
+
+
+ 2. Compiling DC-API on MinGW32
+
+ 2.1 As root run:
+
+ $> apt-get update && apt-get upgrade
+ $> apt-get install mingw32
+ $> apt-get install autoconf libtool make
+ $> apt-get install libglib2.0-dev # DC-API: only needed for autoreconf to finish
+ # (it would complain about missing glib2 libs)
+ $> apt-get install gtk-doc-tools # only needed for autoreconf to finish (it would
+ # complain about gtk-doc missing)
+
+
+ 2.2. Switch to some non-privileged user. You don't need to be root from now on.
+ Next run:
+
+ $> cd ${HOME}
+ $> mkdir -p w32-root/include
+ $> mkdir -p w32-root/lib
+
+
+ 2.3. Get the DC-API source and put it in ${HOME}/dcapi-trunk
+
+
+ 2.4. Run:
+
+ $> wget http://mirror.vcu.edu/pub/windows/cygwin/release/util-linux/libuuid-devel/libuuid-devel-2.21.2-1.tar.bz2
+
+ Uncompress and copy include files to ${HOME}/w32-root/include/uuid/ and libraries to ${HOME}/w32-root/lib/
+
+
+ 2.5. Get pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma from
+ http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/ Uncompress and
+ copy include files to ${HOME}/w32-root/include/ and libraries to ${HOME}/w32-root/lib/
+
+
+ 2.6. Get our boinc lib package from (link is at the bottom of the section):
+
+ http://doc.desktopgrid.hu/doku.php?id=manual:dc-api#linux_mingw32cross-compiling_for_windows
+
+ uncompress, build the package following the instructions found in the README file.
+ Finally copy includes to ${HOME}/w32-root/include/boinc/ and libraries to
+ ${HOME}/w32-root/lib.
+
+
+ 2.7. Modify "-pthread" in dcapi-trunk/cf/boinc.m4 to "-lpthread" (at two places)
+
+
+ 2.8. Finally execute the following:
+
+ $> cd dcapi-trunk
+ $> autoreconf --install --force --symlink
+ $> ./configure --host=i586-mingw32msvc --disable-master --disable-backend-local \
+ --enable-backend-boinc --with-boinc=${HOME}/w32-root/ LDFLAGS=-L${HOME}/w32-root/lib \
+ --prefix=${HOME}/w32-root/ CPPFLAGS=-I${HOME}/w32-root/include/ LIBS="-lpsapi"
+ $> make
+ $> make install
+
+
diff --git a/dcapi/_autosetup.sh b/dcapi/_autosetup.sh
new file mode 100755
index 0000000..f0c5d47
--- /dev/null
+++ b/dcapi/_autosetup.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+gtkdocize --copy
+autoreconf --install --force --symlink
diff --git a/dcapi/boinc/Makefile.am b/dcapi/boinc/Makefile.am
new file mode 100644
index 0000000..5655010
--- /dev/null
+++ b/dcapi/boinc/Makefile.am
@@ -0,0 +1,39 @@
+lib_LTLIBRARIES =
+
+AM_CPPFLAGS = -I$(top_srcdir)/include $(GLIB_CFLAGS)
+
+if BUILD_MASTER
+lib_LTLIBRARIES += libdcapi-boinc.la
+endif
+
+if BUILD_CLIENT
+lib_LTLIBRARIES += libdcapi-client-boinc.la
+endif
+
+pkgconfigdir = ${libdir}/pkgconfig
+pkgconfig_DATA = dcapi-boinc-client.pc dcapi-boinc-master.pc
+
+AM_LDFLAGS = $(BOINC_LDFLAGS) $(GLIB_LIBS)
+
+noinst_HEADERS = common_defs.h dc_boinc.h
+
+libdcapi_boinc_la_SOURCES = \
+ config.C \
+ dc.c \
+ db.C \
+ events.C \
+ result.c \
+ wu.C
+libdcapi_boinc_la_LIBADD = \
+ ../common/libdcapi-common-master.la \
+ -lsched -lboinc -lcrypto -luuid -lm
+libdcapi_boinc_la_CPPFLAGS = $(AM_CPPFLAGS) $(BOINC_SERVER_CPPFLAGS)
+libdcapi_boinc_la_LDFLAGS = -version-info 1:1:0 -export-symbols $(top_srcdir)/common/master.sym
+
+libdcapi_client_boinc_la_SOURCES = \
+ client.C
+libdcapi_client_boinc_la_LIBADD = \
+ ../common/libdcapi-common-client.la \
+ $(BOINC_CLIENT_LIBS)
+libdcapi_client_boinc_la_CPPFLAGS = $(AM_CPPFLAGS) $(BOINC_CPPFLAGS)
+libdcapi_client_boinc_la_LDFLAGS = -static
diff --git a/dcapi/boinc/client.C b/dcapi/boinc/client.C
new file mode 100644
index 0000000..ac2172e
--- /dev/null
+++ b/dcapi/boinc/client.C
@@ -0,0 +1,712 @@
+/*
+ * client.c - Client side of the BOINC DC-API backend
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#ifndef _WIN32
+#include <dirent.h>
+#endif
+
+/* BOINC includes */
+#ifdef _WIN32
+#include <boinc_win.h>
+#include <util.h>
+#endif
+
+#include <boinc_api.h>
+#include <filesys.h>
+#include <diagnostics.h>
+#include <graphics2.h>
+#include <parse.h>
+
+#include <dc_client.h>
+#include <dc_internal.h>
+
+#include "common_defs.h"
+
+/********************************************************************
+ * Constants
+ */
+
+typedef enum {
+ STATE_NORMAL,
+ STATE_SUSPEND,
+ STATE_FINISH
+} client_event_state;
+
+#define LAST_CKPT_FILE "dc_lastckpt"
+
+#ifdef _WIN32
+#define PATHSEP '\\'
+#define __func__ "DC-API"
+#else
+#define PATHSEP '/'
+#endif
+
+
+/********************************************************************
+ * Global variables
+ */
+
+/* Checkpoint file generation counter */
+static int ckpt_generation;
+/* Name of the last completed checkpoint file */
+static char *last_complete_ckpt;
+/* Name of the active (not yet completed) checkpoint file */
+static char active_ckpt[PATH_MAX];
+/* Number of subresults already sent */
+static int subresult_cnt;
+/* Maximum number of allowed subresults */
+static int max_subresults;
+/* Name of the current work unit */
+static char wu_name[256];
+/* State machine for suspend */
+static client_event_state client_state;
+
+
+/********************************************************************
+ * Common API functions
+ */
+
+int DC_getMaxMessageSize(void)
+{
+ return MAX_MESSAGE_SIZE;
+}
+
+#ifdef _WIN32
+static void count_subresults(void)
+{
+ WIN32_FIND_DATA fdata;
+ HANDLE hfind;
+
+ hfind = FindFirstFile("*", &fdata);
+ if (hfind == INVALID_HANDLE_VALUE)
+ return;
+ do {
+ DC_log(LOG_DEBUG, "\t%s", fdata.cFileName);
+ if (!strncmp(fdata.cFileName, SUBRESULT_PFX,
+ strlen(SUBRESULT_PFX)))
+ max_subresults++;
+ } while (FindNextFile(hfind, &fdata));
+ FindClose(hfind);
+}
+#else
+static void count_subresults(void)
+{
+ struct dirent *d;
+ DIR *dir;
+
+ dir = opendir(".");
+ if (!dir)
+ return;
+
+ DC_log(LOG_DEBUG, "Workdir contents:");
+ while ((d = readdir(dir)))
+ {
+ DC_log(LOG_DEBUG, "\t%s", d->d_name);
+ if (!strncmp(d->d_name, SUBRESULT_PFX, strlen(SUBRESULT_PFX)))
+ max_subresults++;
+ }
+ closedir(dir);
+}
+#endif
+
+/* Determine the number of allowed subresults by counting all output files
+ * that have a name starting with SUBRESULT_PFX */
+int DC_getMaxSubresults(void)
+{
+ if (max_subresults)
+ return max_subresults - subresult_cnt;
+
+ count_subresults();
+ return max_subresults;
+}
+
+unsigned DC_getGridCapabilities(void)
+{
+ char path[PATH_MAX];
+ unsigned caps;
+
+ caps = DC_GC_EXITCODE | DC_GC_MESSAGING;
+ if (DC_getMaxSubresults())
+ caps |= DC_GC_SUBRESULT;
+
+ if (!boinc_resolve_filename(DC_LABEL_STDOUT, path, sizeof(path)))
+ caps |= DC_GC_STDOUT;
+ if (!boinc_resolve_filename(DC_LABEL_STDERR, path, sizeof(path)))
+ caps |= DC_GC_STDERR;
+ if (!boinc_resolve_filename(DC_LABEL_CLIENTLOG, path, sizeof(path)))
+ caps |= DC_GC_LOG;
+
+ return caps;
+}
+
+/********************************************************************
+ * Client API functions
+ */
+
+int DC_initClient(void)
+{
+ char path[PATH_MAX], *buf, label[32];
+ int i, ret;
+ FILE *f;
+
+ /* We leave the redirection to BOINC and only copy stdout.txt/stderr.txt
+ * to the final output location in DC_finishClient(). This means BOINC
+ * can rotate the files so they won't grow too big. */
+ if (boinc_init_diagnostics(BOINC_DIAG_REDIRECTSTDERR |
+ BOINC_DIAG_REDIRECTSTDOUT))
+ return DC_ERR_INTERNAL;
+
+ if (boinc_init())
+ return DC_ERR_INTERNAL;
+
+ /* Parse the config file if the master sent one */
+ buf = DC_resolveFileName(DC_FILE_IN, DC_CONFIG_FILE);
+ if (buf)
+ {
+ ret = _DC_parseCfg(buf);
+ if (ret && ret != DC_ERR_SYSTEM)
+ return ret;
+ }
+ free(buf);
+
+ /* Check if we are starting from a checkpoint file */
+ if ((f = boinc_fopen(LAST_CKPT_FILE, "r")))
+ {
+ fgets(path, sizeof(path), f);
+ fclose(f);
+ if (strlen(path))
+ last_complete_ckpt = strdup(path);
+ }
+ /* If the application did not generate a checkpoint file before, check
+ * if the master sent one */
+ else
+ last_complete_ckpt = DC_resolveFileName(DC_FILE_IN, CKPT_LABEL_IN);
+
+ if (last_complete_ckpt)
+ DC_log(LOG_INFO, "Found initial checkpoint file %s",
+ last_complete_ckpt);
+
+ /* Extract the WU name from init_data.xml */
+ if (boinc_is_standalone())
+ {
+ DC_log(LOG_NOTICE, "Running in stand-alone mode, some "
+ "functions are not available");
+ wu_name[0] = '\0';
+ }
+ else
+ {
+ APP_INIT_DATA init_data;
+
+ boinc_get_init_data(init_data);
+ strncpy(wu_name, init_data.wu_name, sizeof(wu_name));
+ }
+
+ /* Initialize all optional output files as empty to prevent
+ * <file_xfer_error>s */
+ for (i = 0; i < DC_getMaxSubresults(); i++)
+ {
+ snprintf(label, sizeof(label), "%s%d", SUBRESULT_PFX, i);
+ if (boinc_resolve_filename(label, path, sizeof(path)))
+ continue;
+ f = boinc_fopen(path, "w");
+ if (f)
+ fclose(f);
+ }
+ ret = boinc_resolve_filename(CKPT_LABEL_OUT, path, sizeof(path));
+ if (!ret)
+ {
+ f = boinc_fopen(path, "w");
+ if (f)
+ fclose(f);
+ }
+
+ DC_log(LOG_INFO, "DC-API initialized for work unit %s", wu_name);
+
+ return 0;
+}
+
+char *DC_resolveFileName(DC_FileType type, const char *logicalFileName)
+{
+ char buf[PATH_MAX];
+ int ret;
+
+ if (!logicalFileName)
+ {
+ DC_log(LOG_ERR, "%s: Missing logical file name", __func__);
+ return NULL;
+ }
+
+ if (!strcmp(logicalFileName, DC_CHECKPOINT_FILE))
+ {
+ if (type == DC_FILE_IN)
+ {
+ if (last_complete_ckpt)
+ return strdup(last_complete_ckpt);
+ return NULL;
+ }
+ else if (type == DC_FILE_OUT)
+ {
+ /* Remove the previous checkpoint if it was not
+ * finished */
+ if (strlen(active_ckpt))
+ unlink(active_ckpt);
+
+ snprintf(active_ckpt, sizeof(active_ckpt), "dc_ckpt_%d",
+ ++ckpt_generation);
+ DC_log(LOG_DEBUG, "Opened new checkpoint file %s",
+ active_ckpt);
+ return strdup(active_ckpt);
+ }
+ else
+ return NULL;
+ }
+
+ /* Temporary files can be created in the current directory */
+ if (type == DC_FILE_TMP)
+ return strdup(logicalFileName);
+
+ ret = boinc_resolve_filename(logicalFileName, buf, sizeof(buf));
+ if (!ret) {
+ if (type == DC_FILE_IN) {
+ if (FILE * file = fopen(buf, "r"))
+ {
+ fclose(file);
+ return strdup(buf);
+ }
+ return NULL;
+ }
+ return strdup(buf);
+ }
+
+ /* Do not fail for missing output files in stand-alone mode */
+ if (!wu_name[0] && type == DC_FILE_OUT)
+ return strdup(logicalFileName);
+ return NULL;
+}
+
+int DC_sendResult(const char *logicalFileName, const char *path,
+ DC_FileMode mode)
+{
+ char label[32], new_path[PATH_MAX], msg[PATH_MAX], *p;
+ int ret;
+
+ if (!logicalFileName)
+ {
+ DC_log(LOG_ERR, "%s: Missing logical file name", __func__);
+ return DC_ERR_BADPARAM;
+ }
+ if (!path)
+ {
+ DC_log(LOG_ERR, "%s: Missing path", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ if (!DC_getMaxSubresults())
+ {
+ DC_log(LOG_ERR, "No more subresults are allowed to be sent");
+ return DC_ERR_NOTIMPL;
+ }
+
+ /* We have to use the subresult labels that were defined by the
+ * master for doing the upload */
+ snprintf(label, sizeof(label), "%s%d", SUBRESULT_PFX, ++subresult_cnt);
+ if (boinc_resolve_filename(label, new_path, sizeof(new_path)))
+ return DC_ERR_INTERNAL;
+
+ /* We need the file name that will appear on the server */
+ p = strrchr(new_path, PATHSEP);
+ if (!p)
+ {
+ DC_log(LOG_ERR, "Failed to determine the on-server file name "
+ "of the subresult");
+ return DC_ERR_INTERNAL;
+ }
+ p++;
+
+ switch (mode)
+ {
+ case DC_FILE_REGULAR:
+ ret = _DC_copyFile(path, new_path);
+ if (ret)
+ return DC_ERR_SYSTEM;
+ break;
+ case DC_FILE_PERSISTENT:
+#ifndef _WIN32
+ ret = link(path, new_path);
+ if (!ret)
+ break;
+#endif
+ /* The client system may not support hard links so
+ * fall back to copying silently */
+ ret = _DC_copyFile(path, new_path);
+ if (ret)
+ return DC_ERR_SYSTEM;
+ break;
+ case DC_FILE_VOLATILE:
+ ret = rename(path, new_path);
+ if (!ret)
+ break;
+ /* If renaming fails, fall back to copying, but in this
+ * case we are also responsible for deleting the
+ * original */
+ ret = _DC_copyFile(path, new_path);
+ if (ret)
+ return DC_ERR_SYSTEM;
+ break;
+ case DC_FILE_REMOTE:
+ /* Ignore this case, entirely handled by BOINC */
+ break;
+ }
+
+ /* Stupid C++ */
+ std::string str = label;
+ ret = boinc_upload_file(str);
+ if (ret)
+ {
+ unlink(new_path);
+ return DC_ERR_INTERNAL;
+ }
+
+ DC_log(LOG_INFO, "File %s (%s) has been scheduled for upload",
+ logicalFileName, label);
+
+ snprintf(msg, sizeof(msg), "%s:%s:%s:%s", DCAPI_MSG_PFX, DC_MSG_UPLOAD,
+ p, logicalFileName);
+ DC_sendMessage(msg);
+
+ /* If we had to copy volatile files, delete the original only when
+ * we are sure the upload will happen */
+ if (mode == DC_FILE_VOLATILE)
+ unlink(path);
+ return 0;
+}
+
+int DC_sendMessage(const char *message)
+{
+ char *xml, *msg;
+ int ret, len;
+
+ if (!message)
+ {
+ DC_log(LOG_ERR, "%s: Missing message", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ if (!wu_name[0])
+ {
+ DC_log(LOG_ERR, "Messaging is not available in stand-alone mode");
+ return DC_ERR_NOTIMPL;
+ }
+
+ int buflen = 6 * strlen(message) + 1;
+ xml = (char *)malloc(buflen);
+ if (!xml)
+ {
+ DC_log(LOG_ERR, "Sending message: Out of memory");
+ return DC_ERR_INTERNAL;
+ }
+
+ xml_escape(message, xml, buflen);
+ len = strlen(xml) + 24;
+ msg = (char *)malloc(len);
+ if (!msg)
+ {
+ DC_log(LOG_ERR, "Sending message: Out of memory");
+ free(xml);
+ return DC_ERR_INTERNAL;
+ }
+ snprintf(msg, len, "<message>%s</message>", xml);
+
+ /* We use the WU's name as the variety */
+ ret = boinc_send_trickle_up(wu_name, msg);
+ free(msg);
+ free(xml);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to send trickle-up message");
+ return DC_ERR_INTERNAL;
+ }
+ return 0;
+}
+
+static DC_ClientEvent *new_event(DC_ClientEventType type)
+{
+ DC_ClientEvent *event;
+
+ event = (DC_ClientEvent *)calloc(1, sizeof(DC_ClientEvent));
+ event->type = type;
+ return event;
+}
+
+static DC_ClientEvent *handle_special_msg(const char *message)
+{
+ if (!strncmp(message, DC_MSG_CANCEL, strlen(DC_MSG_CANCEL)) &&
+ message[strlen(DC_MSG_CANCEL)] == ':')
+ {
+ if (strcmp(message + strlen(DC_MSG_CANCEL) + 1, wu_name))
+ {
+ DC_log(LOG_WARNING, "Received CANCEL message for "
+ "unknown WU %s",
+ message + strlen(DC_MSG_CANCEL) + 1);
+ return NULL;
+ }
+ DC_log(LOG_NOTICE, "Received cancel request from the master");
+ client_state = STATE_FINISH;
+ return new_event(DC_CLIENT_FINISH);
+ }
+ if (!strcmp(message, DC_MSG_SUSPEND))
+ {
+ DC_log(LOG_NOTICE, "Received suspend request from the master");
+ client_state = STATE_SUSPEND;
+ return new_event(DC_CLIENT_CHECKPOINT);
+ }
+
+ DC_log(LOG_WARNING, "Received unknown control message %s", message);
+
+ return NULL;
+}
+
+DC_ClientEvent *DC_checkClientEvent(void)
+{
+ DC_ClientEvent *event;
+ char *buf, *msg;
+ int ret;
+
+ /* Check for checkpoint requests */
+ if (boinc_time_to_checkpoint())
+ {
+ DC_log(LOG_DEBUG, "Core client requested checkpoint");
+ return new_event(DC_CLIENT_CHECKPOINT);
+ }
+
+ /* Check for messages */
+ buf = (char *)malloc(MAX_MESSAGE_SIZE);
+ if (!buf)
+ /* Let's hope the error is transient and we can deliver the
+ * message when DC_checkClientEvent() is called for the next time */
+ return NULL;
+
+ /* Check for trickle-down messages and also handle internal
+ * communication */
+ ret = boinc_receive_trickle_down(buf, MAX_MESSAGE_SIZE);
+ if (ret)
+ {
+ msg = (char *)malloc(MAX_MESSAGE_SIZE);
+ if (!msg)
+ {
+ free(buf);
+ return NULL;
+ }
+ ret = parse_str(buf, "<message>", msg, MAX_MESSAGE_SIZE);
+ if (!ret)
+ {
+ DC_log(LOG_WARNING, "Failed to parse message %s", buf);
+ free(buf);
+ free(msg);
+ return NULL;
+ }
+
+ if (!strncmp(msg, DCAPI_MSG_PFX, strlen(DCAPI_MSG_PFX)) &&
+ msg[strlen(DCAPI_MSG_PFX)] == ':')
+ {
+ event = handle_special_msg(msg +
+ strlen(DCAPI_MSG_PFX) + 1);
+ free(msg);
+ return event;
+ }
+
+ DC_log(LOG_DEBUG, "Received trickle message");
+
+ event = new_event(DC_CLIENT_MESSAGE);
+ event->message = buf;
+ return event;
+ }
+ free(buf);
+
+ if (client_state == STATE_FINISH)
+ return new_event(DC_CLIENT_FINISH);
+
+ return NULL;
+}
+
+void DC_destroyClientEvent(DC_ClientEvent *event)
+{
+ if (!event)
+ return;
+
+ switch (event->type)
+ {
+ case DC_CLIENT_MESSAGE:
+ free(event->message);
+ break;
+ default:
+ break;
+ }
+}
+
+void DC_checkpointMade(const char *filename)
+{
+ FILE *f;
+
+ if (!filename)
+ {
+ /* No file name - reset the checkpoint logic */
+ if (active_ckpt[0])
+ unlink(active_ckpt);
+ active_ckpt[0] = '\0';
+
+ if (last_complete_ckpt)
+ {
+ unlink(last_complete_ckpt);
+ free(last_complete_ckpt);
+ last_complete_ckpt = NULL;
+ }
+
+ boinc_checkpoint_completed();
+ return;
+ }
+
+ if (strcmp(filename, active_ckpt))
+ {
+ DC_log(LOG_ERR, "DC_checkpointMade: bad checkpoint file %s "
+ "(expected %s)", filename, active_ckpt);
+ boinc_checkpoint_completed();
+ return;
+ }
+
+ DC_log(LOG_INFO, "Completed checkpoint %s", filename);
+
+ /* Remember which was the last completed checkpoint */
+ f = boinc_fopen(LAST_CKPT_FILE, "w");
+ if (f)
+ {
+ fprintf(f, "%s", filename);
+ fclose(f);
+ }
+
+ if (last_complete_ckpt)
+ {
+ unlink(last_complete_ckpt);
+ free(last_complete_ckpt);
+ }
+ last_complete_ckpt = strdup(filename);
+
+ /* Reset the active checkpoint */
+ active_ckpt[0] = '\0';
+
+ boinc_checkpoint_completed();
+
+ if (client_state == STATE_SUSPEND)
+ client_state = STATE_FINISH;
+}
+
+void DC_fractionDone(double fraction)
+{
+ boinc_fraction_done(fraction);
+}
+
+void DC_finishClient(int exitcode)
+{
+ char path[PATH_MAX];
+ int ret;
+
+ /* Rename/copy the checkpoint file to the label CKPT_LABEL_OUT
+ * so it will be uploaded together with the result(s) */
+ if (last_complete_ckpt &&
+ !boinc_resolve_filename(CKPT_LABEL_OUT, path, sizeof(path)))
+ {
+#ifndef _WIN32
+ ret = link(last_complete_ckpt, path);
+ if (ret)
+#endif
+ ret = _DC_copyFile(last_complete_ckpt, path);
+
+ DC_log(LOG_DEBUG, "Uploading last complete checkpoint %s",
+ last_complete_ckpt);
+ }
+
+ /* Delete files that we have created */
+ if (last_complete_ckpt)
+ unlink(last_complete_ckpt);
+ if (strlen(active_ckpt))
+ unlink(active_ckpt);
+ unlink(LAST_CKPT_FILE);
+
+ /* Make sure the output is on disk */
+ DC_log(LOG_DEBUG, "Flushing stdout/stderr");
+ fflush(stdout);
+ fflush(stderr);
+
+ if (!boinc_resolve_filename(DC_LABEL_STDOUT, path, sizeof(path)))
+ {
+ DC_log(LOG_DEBUG, "Uploading stdout.txt");
+ _DC_copyFile("stdout.txt", path);
+ }
+
+ if (!boinc_resolve_filename(DC_LABEL_STDERR, path, sizeof(path)))
+ {
+ DC_log(LOG_DEBUG, "Uploading stderr.txt");
+ _DC_copyFile("stderr.txt", path);
+ }
+
+ DC_log(LOG_INFO, "DC-API: Application finished with exit code %d",
+ exitcode);
+ boinc_finish(exitcode);
+ /* We should never get here, but boinc_finish() is not marked
+ * with "noreturn" so this avoids a GCC warning */
+ exit(exitcode);
+}
+
+/********************************************************************
+ * Provide empty implementation for some functions required by the
+ * BOINC libraries
+ */
+
+void app_graphics_init(void)
+{
+}
+
+void app_graphics_resize(int width, int height)
+{
+}
+
+void app_graphics_render(int xs, int ys, double time_of_day)
+{
+}
+
+void app_graphics_reread_prefs(void)
+{
+}
+
+void boinc_app_mouse_move(int x, int y, bool left, bool middle, bool right)
+{
+}
+
+void boinc_app_mouse_button(int x, int y, int which, bool is_down)
+{
+}
+
+void boinc_app_key_press(int x, int y)
+{
+}
+
+void boinc_app_key_release(int x, int y)
+{
+}
diff --git a/dcapi/boinc/common_defs.h b/dcapi/boinc/common_defs.h
new file mode 100644
index 0000000..2b3dbe3
--- /dev/null
+++ b/dcapi/boinc/common_defs.h
@@ -0,0 +1,40 @@
+/*
+ * common_defs.h - Definitions common for both the server and client side
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifndef COMMON_DEFS_H
+#define COMMON_DEFS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Prefix of subresult file labels */
+#define SUBRESULT_PFX "dc_subresult_"
+
+/* Logical names of the checkpoint file */
+#define CKPT_LABEL_IN "dc_ckpt_in"
+#define CKPT_LABEL_OUT "dc_ckpt_out"
+
+/* Maximum allowed message length */
+#define MAX_MESSAGE_SIZE 16384
+
+/* Prefix for internal messages between the client-side and master-side DC-API */
+#define DCAPI_MSG_PFX "__dcapi__"
+
+/* Internal message that a subresult has been uploaded */
+#define DC_MSG_UPLOAD "UPLOAD"
+/* Internal message telling that the client should suspend */
+#define DC_MSG_SUSPEND "SUSPEND"
+/* Internal message for cancelling the client computation */
+#define DC_MSG_CANCEL "CANCEL"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* COMMON_DEFS_H */
diff --git a/dcapi/boinc/config.C b/dcapi/boinc/config.C
new file mode 100644
index 0000000..5c626ef
--- /dev/null
+++ b/dcapi/boinc/config.C
@@ -0,0 +1,80 @@
+/*
+ * config. C - Wrapper code for accessing Boinc project configuration values
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include <sched_config.h>
+#include <sched_util.h>
+
+#include "dc_boinc.h"
+
+SCHED_CONFIG dc_boinc_config G_GNUC_INTERNAL;
+
+int _DC_parseConfigXML(void)
+{
+ int ret;
+
+ ret = dc_boinc_config.parse_file();
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to locate/parse the Boinc project configuration file");
+ return DC_ERR_CONFIG;
+ }
+ return 0;
+}
+
+char *_DC_getUploadDir(void)
+{
+ return dc_boinc_config.upload_dir;
+}
+
+char *_DC_getDownloadDir(void)
+{
+ return dc_boinc_config.download_dir;
+}
+
+int _DC_getUldlDirFanout(void)
+{
+ return dc_boinc_config.uldl_dir_fanout;
+}
+
+char *_DC_getDBName(void)
+{
+ return dc_boinc_config.db_name;
+}
+
+char *_DC_getDBHost(void)
+{
+ return dc_boinc_config.db_host;
+}
+
+char *_DC_getDBUser(void)
+{
+ return dc_boinc_config.db_user;
+}
+
+char *_DC_getDBPasswd(void)
+{
+ return dc_boinc_config.db_passwd;
+}
+
+char *_DC_hierPath(const char *src, int upload)
+{
+ char path[PATH_MAX];
+
+ /* Simplification: always create the directory in the download
+ * hierarchy, but never in the upload hierarchy */
+ dir_hier_path(src, upload ? dc_boinc_config.upload_dir :
+ dc_boinc_config.download_dir,
+ dc_boinc_config.uldl_dir_fanout, path, upload ? FALSE : TRUE);
+ return g_strdup(path);
+}
diff --git a/dcapi/boinc/db.C b/dcapi/boinc/db.C
new file mode 100644
index 0000000..2637a48
--- /dev/null
+++ b/dcapi/boinc/db.C
@@ -0,0 +1,224 @@
+/*
+ * db.C - Wrapper code for accessing the Boinc database from C
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string>
+
+#include <sched_config.h>
+#include <boinc_db.h>
+#include <parse.h>
+
+#include "dc_boinc.h"
+
+int _DC_initDB(void)
+{
+ int ret;
+
+ ret = boinc_db.open(_DC_getDBName(), _DC_getDBHost(), _DC_getDBUser(),
+ _DC_getDBPasswd());
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to connect to the Boinc database "
+ "(error #%d)", ret);
+ return DC_ERR_DATABASE;
+ }
+ return 0;
+}
+
+static int lookup_db_id(DC_Workunit *wu)
+{
+ char *query, *name;
+ DB_WORKUNIT dbwu;
+ int ret;
+
+ if (wu->db_id)
+ return 0;
+
+ name = _DC_getWUName(wu);
+ query = g_strdup_printf("WHERE name = '%s'", name);
+ g_free(name);
+ ret = dbwu.lookup(query);
+ g_free(query);
+
+ if (ret)
+ {
+ char *name = _DC_getWUName(wu);
+
+ DC_log(LOG_ERR, "Failed to look up the ID of WU %s", name);
+ g_free(name);
+ wu->state = DC_WU_UNKNOWN;
+ return DC_ERR_DATABASE;
+ }
+ wu->db_id = dbwu.get_id();
+ return 0;
+}
+
+int _DC_getDBid(DC_Workunit *wu)
+{
+ return lookup_db_id(wu);
+}
+
+void _DC_resultCompleted(DC_Result *result)
+{
+ char *query;
+ int ret;
+
+ ret = lookup_db_id(result->wu);
+ if (ret)
+ return;
+
+ /* We could use DB_WORKUNIT but that would require doing a SELECT
+ * before the UPDATE, which is unneccessary */
+ query = g_strdup_printf("UPDATE workunit "
+ "SET assimilate_state = %d, transition_time = %d "
+ "WHERE id = %d", ASSIMILATE_DONE, (int)time(NULL),
+ result->wu->db_id);
+ boinc_db.do_query(query);
+ g_free(query);
+
+ result->wu->state = DC_WU_FINISHED;
+}
+
+void _DC_updateWUState(DC_Workunit *wu)
+{
+ DB_WORKUNIT dbwu;
+ int ret;
+
+ if (!wu->submitted)
+ {
+ wu->state = DC_WU_READY;
+ return;
+ }
+
+ if (wu->db_id)
+ ret = dbwu.lookup_id(wu->db_id);
+ else
+ {
+ char *name, *query;
+
+ /* Open-code lookup_db_id to avoid a second database lookup */
+ name = _DC_getWUName(wu);
+ query = g_strdup_printf("WHERE name = '%s'", name);
+ g_free(name);
+ ret = dbwu.lookup(query);
+ g_free(query);
+ if (!ret)
+ wu->db_id = dbwu.id;
+ }
+
+ if (ret)
+ wu->state = DC_WU_UNKNOWN;
+ else if (dbwu.error_mask)
+ /* If any bits in the error mask are set, the scheduler won't
+ * send out new results */
+ wu->state = DC_WU_ABORTED;
+ else if (dbwu.assimilate_state == ASSIMILATE_DONE)
+ wu->state = DC_WU_FINISHED;
+ else
+ wu->state = DC_WU_RUNNING;
+}
+
+int DC_cancelWU(DC_Workunit *wu)
+{
+ char *query, *name;
+ int ret;
+
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ ret = lookup_db_id(wu);
+ if (ret)
+ return ret;
+
+ name = _DC_getWUName(wu);
+ query = g_strdup_printf("%s:%s:%s", DCAPI_MSG_PFX, DC_MSG_CANCEL, name);
+ DC_sendWUMessage(wu, query);
+ g_free(name);
+ g_free(query);
+
+ query = g_strdup_printf("UPDATE result "
+ "SET server_state = %d, outcome = %d "
+ "WHERE server_state = %d AND workunitid = %d",
+ RESULT_SERVER_STATE_OVER, RESULT_OUTCOME_DIDNT_NEED,
+ RESULT_SERVER_STATE_UNSENT, wu->db_id);
+ boinc_db.do_query(query);
+ g_free(query);
+
+ query = g_strdup_printf("UPDATE workunit "
+ "SET error_mask = error_mask | %d "
+ "WHERE id = %d",
+ WU_ERROR_CANCELLED, wu->db_id);
+ boinc_db.do_query(query);
+ g_free(query);
+
+ wu->state = DC_WU_ABORTED;
+ return 0;
+}
+
+int DC_sendWUMessage(DC_Workunit *wu, const char *message)
+{
+ char *query, *name;
+ DB_RESULT result;
+ int ret;
+
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ ret = lookup_db_id(wu);
+ if (ret)
+ return ret;
+
+ name = _DC_getWUName(wu);
+ query = g_strdup_printf("WHERE workunitid = %d AND server_state = %d",
+ wu->db_id, RESULT_SERVER_STATE_IN_PROGRESS);
+ while (!result.enumerate(query))
+ {
+ DB_MSG_TO_HOST msg;
+ char *xmlout;
+ int buflen;
+
+ msg.clear();
+ msg.create_time = time(NULL);
+ msg.hostid = result.hostid;
+ msg.handled = false;
+
+ /* BOINC tells output buffer should be 6x input size */
+ buflen = 6 * strlen(message) + 1;
+ xmlout = g_new(char, buflen);
+ if (!xmlout)
+ {
+ DC_log(LOG_WARNING, "Failed to send message because "
+ "ran out of memory");
+ break;
+ }
+
+ xml_escape(message, xmlout, buflen);
+ snprintf(msg.xml, sizeof(msg.xml), "<message>%s</message>", xmlout);
+ g_free(xmlout);
+
+ snprintf(msg.variety, sizeof(msg.variety), "%s", name);
+
+ if (msg.insert())
+ DC_log(LOG_WARNING, "Failed to send message to host %d",
+ result.hostid);
+ }
+ g_free(name);
+ g_free(query);
+
+ return 0;
+}
diff --git a/dcapi/boinc/dc.c b/dcapi/boinc/dc.c
new file mode 100644
index 0000000..6041432
--- /dev/null
+++ b/dcapi/boinc/dc.c
@@ -0,0 +1,348 @@
+/*
+ * dc.c - Master side of the BOINC DC-API backend
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <glib.h>
+
+#include "dc_boinc.h"
+
+/********************************************************************
+ * Data type definitions
+ */
+
+/* Current element being parsed. We are not interested in most of the elements
+ * and also assume that the XML document is always valid */
+typedef enum
+{
+ UNKNOWN,
+ NAME,
+ FILE_NAME,
+ OPEN_NAME
+} element_type;
+
+typedef enum
+{
+ INSIDE_FILE_INFO = (1 << 0),
+ GENERATED_LOCALLY = (1 << 1),
+ UPLOAD_WHEN_PRESENT = (1 << 2)
+} element_flags;
+
+/* The private state of the XML parser */
+typedef struct _fileref_ctx fileref_ctx;
+struct _fileref_ctx
+{
+ element_type element;
+ element_flags flags;
+ char *label;
+ char *path;
+ GList *file_list;
+ int num_files;
+ GHashTable *file_info;
+};
+
+
+/********************************************************************
+ * Prototypes
+ */
+
+/* XML parser callback functions */
+static void fileref_start(GMarkupParseContext *ctx, const char *element_name,
+ const char **attr_names, const char **attr_values, void *ptr,
+ GError **error);
+static void fileref_end(GMarkupParseContext *ctx, const char *element_name,
+ void *ptr, GError **error);
+static void fileref_text(GMarkupParseContext *ctx, const char *text,
+ gsize text_len, void *ptr, GError **error);
+
+
+/********************************************************************
+ * Global variables
+ */
+
+DC_ResultCallback _dc_resultcb;
+DC_SubresultCallback _dc_subresultcb;
+DC_MessageCallback _dc_messagecb;
+
+uuid_t project_uuid;
+char project_uuid_str[37];
+
+/* XML parser descriptor */
+static const GMarkupParser fileref_parser =
+{
+ fileref_start,
+ fileref_end,
+ fileref_text,
+ NULL,
+ NULL
+};
+
+
+/********************************************************************
+ * API functions
+ */
+
+int DC_initMaster(const char *config_file)
+{
+ char *cfgval;
+ int ret;
+
+ if (!config_file)
+ config_file = DC_CONFIG_FILE;
+
+ ret = _DC_parseCfg(config_file);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "The DC-API cannot be initialized without a "
+ "config file");
+ return ret;
+ }
+
+ cfgval = DC_getCfgStr(CFG_PROJECTROOT);
+ if (cfgval)
+ setenv("BOINC_PROJECT_DIR", cfgval, 1);
+ free(cfgval);
+
+ /* Check & switch to the working directory */
+ cfgval = DC_getCfgStr(CFG_WORKDIR);
+ if (!cfgval)
+ {
+ DC_log(LOG_ERR, "%s is not specified in the config file",
+ CFG_WORKDIR);
+ return DC_ERR_CONFIG;
+ }
+
+ if (*cfgval != G_DIR_SEPARATOR)
+ {
+ DC_log(LOG_ERR, "The working directory must be an "
+ "absolute path");
+ return DC_ERR_CONFIG;
+ }
+
+ /* If we are started as a BOINC daemon, then the current dir is
+ * <projectroot>/bin, so we must change to the working directory */
+ if (chdir(cfgval))
+ {
+ DC_log(LOG_ERR, "Failed to set the current directory to %s: %s",
+ cfgval, strerror(errno));
+ free(cfgval);
+ return DC_ERR_CONFIG;
+ }
+ free(cfgval);
+
+ /* Check the project UUID */
+ cfgval = DC_getCfgStr(CFG_INSTANCEUUID);
+ if (!cfgval)
+ {
+ DC_log(LOG_ERR, "%s is not set in the config file",
+ CFG_INSTANCEUUID);
+ return DC_ERR_CONFIG;
+ }
+
+ ret = uuid_parse((char *)cfgval, project_uuid);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Invalid project UUID %s", cfgval);
+ free(cfgval);
+ return DC_ERR_CONFIG;
+ }
+ free(cfgval);
+
+ /* Enforce a canonical string representation of the UUID */
+ uuid_unparse_lower(project_uuid, project_uuid_str);
+
+ ret = _DC_parseConfigXML();
+ if (ret)
+ return ret;
+
+ /* Now connect to the Boinc database */
+ ret = _DC_initDB();
+ if (ret)
+ return ret;
+ ret = _DC_initWUs();
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+int DC_getMaxMessageSize(void)
+{
+ return 32768; /* XXX */
+}
+
+int DC_getMaxSubresults(void)
+{
+ return 100; /* XXX */
+}
+
+unsigned DC_getGridCapabilities(void)
+{
+ return DC_GC_EXITCODE | DC_GC_SUBRESULT | DC_GC_MESSAGING |
+ DC_GC_STDOUT | DC_GC_STDERR | DC_GC_LOG;
+}
+
+void DC_setMasterCb(DC_ResultCallback resultcb,
+ DC_SubresultCallback subresultcb, DC_MessageCallback msgcb)
+{
+ _dc_resultcb = resultcb;
+ _dc_subresultcb = subresultcb;
+ _dc_messagecb = msgcb;
+}
+
+void DC_setResultCb(DC_ResultCallback cb)
+{
+ _dc_resultcb = cb;
+}
+
+void DC_setSubresultCb(DC_SubresultCallback cb)
+{
+ _dc_subresultcb = cb;
+}
+
+void DC_setMessageCb(DC_MessageCallback cb)
+{
+ _dc_messagecb = cb;
+}
+
+
+/********************************************************************
+ * XML file definition parser
+ */
+
+static void fileref_start(GMarkupParseContext *ctx, const char *element_name,
+ const char **attr_names, const char **attr_values, void *ptr,
+ GError **error)
+{
+ fileref_ctx *fctx = ptr;
+
+ if (attr_names && attr_names[0])
+ {
+ *error = g_error_new(G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
+ "Attributes are not recognized in BOINC-generated XML");
+ return;
+ }
+
+ if (!strcmp(element_name, "file_ref"))
+ {
+ g_free(fctx->label);
+ g_free(fctx->path);
+ fctx->label = NULL;
+ fctx->path = NULL;
+ }
+ else if (!strcmp(element_name, "file_name"))
+ fctx->element = FILE_NAME;
+ else if (!strcmp(element_name, "open_name"))
+ fctx->element = OPEN_NAME;
+ else if (!strcmp(element_name, "file_info"))
+ fctx->flags |= INSIDE_FILE_INFO;
+ else if (fctx->flags & INSIDE_FILE_INFO)
+ {
+ if (!strcmp(element_name, "name"))
+ fctx->element = NAME;
+ else if (!strcmp(element_name, "generated_locally"))
+ fctx->flags |= GENERATED_LOCALLY;
+ else if (!strcmp(element_name, "upload_when_present"))
+ fctx->flags |= UPLOAD_WHEN_PRESENT;
+ }
+}
+
+static void fileref_end(GMarkupParseContext *ctx, const char *element_name,
+ void *ptr, GError **error)
+{
+ fileref_ctx *fctx = ptr;
+
+ if (!strcmp(element_name, "file_ref"))
+ {
+ DC_PhysicalFile *file;
+
+ file = _DC_createPhysicalFile(fctx->label, fctx->path);
+ g_free(fctx->label);
+ g_free(fctx->path);
+ fctx->label = NULL;
+ fctx->path = NULL;
+ fctx->file_list = g_list_append(fctx->file_list, file);
+ fctx->num_files++;
+ }
+ else if (!strcmp(element_name, "file_info"))
+ {
+ fctx->flags = 0;
+
+ g_hash_table_insert(fctx->file_info, fctx->path,
+ GINT_TO_POINTER(fctx->flags));
+ fctx->path = NULL;
+ }
+
+ fctx->element = UNKNOWN;
+}
+
+static void fileref_text(GMarkupParseContext *ctx, const char *text,
+ gsize text_len, void *ptr, GError **error)
+{
+ fileref_ctx *fctx = ptr;
+
+ switch (fctx->element)
+ {
+ case NAME:
+ case FILE_NAME:
+ fctx->path = g_strndup(text, text_len);
+ break;
+ case OPEN_NAME:
+ fctx->label = g_strndup(text, text_len);
+ break;
+ default:
+ break;
+ }
+}
+
+GList *_DC_parseFileRefs(const char *xml_doc, int *num_files)
+{
+ GMarkupParseContext *ctx;
+ fileref_ctx fctx;
+ GError *error = NULL;
+
+ memset(&fctx, 0, sizeof(fctx));
+ fctx.file_info = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, NULL);
+
+ ctx = g_markup_parse_context_new(&fileref_parser, 0, &fctx, NULL);
+ if (!g_markup_parse_context_parse(ctx, xml_doc, strlen(xml_doc),
+ &error))
+ goto error;
+ if (!g_markup_parse_context_end_parse(ctx, &error))
+ goto error;
+ if (num_files)
+ *num_files = fctx.num_files;
+
+out:
+ g_markup_parse_context_free(ctx);
+ g_hash_table_destroy(fctx.file_info);
+ g_free(fctx.label);
+ g_free(fctx.path);
+ return fctx.file_list;
+
+error:
+ while (fctx.file_list)
+ {
+ _DC_destroyPhysicalFile(fctx.file_list->data);
+ fctx.file_list = g_list_delete_link(fctx.file_list,
+ fctx.file_list);
+ }
+
+ DC_log(LOG_ERR, "Failed to parse result XML description: %s",
+ error->message);
+ g_error_free(error);
+ goto out;
+}
diff --git a/dcapi/boinc/dc_boinc.h b/dcapi/boinc/dc_boinc.h
new file mode 100644
index 0000000..9c41ca8
--- /dev/null
+++ b/dcapi/boinc/dc_boinc.h
@@ -0,0 +1,219 @@
+/*
+ * dc_boinc.h - Common definitions for the master side of the BOINC DC-API backend
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifndef __DC_BOINC_H_
+#define __DC_BOINC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <dc.h>
+#include <dc_internal.h>
+#include <uuid/uuid.h>
+#include <glib.h>
+
+#include "common_defs.h"
+
+/********************************************************************
+ * Constants
+ */
+
+/* The root direcory of the BOINC project */
+#define CFG_PROJECTROOT "ProjectRootDir"
+/* Level of redundancy (per-client) variant 1. */
+#define CFG_REDUNDANCY "Redundancy"
+/* Level of redundancy (per-client) variant 2.: fine tune parameters */
+#define CFG_MIN_QUORUM "MinQuorum"
+#define CFG_TARGET_NRESULTS "TargetNResults"
+#define CFG_MAX_ERROR_RESULTS "MaxErrorResults"
+#define CFG_MAX_TOTAL_RESULTS "MaxTotalResults"
+#define CFG_MAX_SUCCESS_RESULTS "MaxSuccessResults"
+/* Max. size of output files, including subresults & checkpoint (per-client) */
+#define CFG_MAXOUTPUT "MaxOutputSize"
+/* Max. memory usage (per-client) */
+#define CFG_MAXMEMUSAGE "MaxMemUsage"
+/* Max. disk usage (per-client) */
+#define CFG_MAXDISKUSAGE "MaxDiskUsage"
+/* Estimated number of floating point operations */
+#define CFG_FPOPS_EST "EstimatedFPOps"
+/* Max. number of floating point operations */
+#define CFG_MAXFPOPS "MaxFPOps"
+/* WU deadline */
+#define CFG_DELAYBOUND "DelayBound"
+/* Suspending enabled or not */
+#define CFG_ENABLESUSPEND "EnableSuspend"
+/* Client uses native BOINC API instead of DC-API */
+#define CFG_NATIVECLIENT "NativeClient"
+/* Remote file rewrite regexp match string */
+#define CFG_REGEXPMATCH "InputURLRewriteRegExpMatch"
+/* Remote file rewrite regexp replace string */
+#define CFG_REGEXPREPLACE "InputURLRewriteRegExpReplace"
+/* Upload URL configuration option */
+#define CFG_UPLOADURL "UploadURL"
+
+/* File types in the working directory */
+typedef enum
+{
+ FILE_IN,
+ FILE_OUT,
+ FILE_CKPT,
+ FILE_DCAPI
+} WorkdirFile;
+
+
+/********************************************************************
+ * Data types
+ */
+
+struct _DC_Workunit
+{
+ /* Arguments passed to DC_createWU() */
+ char *client_name;
+ char **argv;
+ int argc;
+ char *tag;
+ int subresults;
+ int priority;
+
+ int serialized : 1;
+ int submitted : 1;
+ int suspended : 1;
+ int nosuspend : 1;
+ int nativeclient : 1;
+
+ /* The WU's UUID */
+ uuid_t uuid;
+ /* State of the WU */
+ DC_WUState state;
+ /* The WU's working directory */
+ char *workdir;
+ /* The WU's ID in the Boinc database */
+ int db_id;
+
+ /* Batch value of the workunit */
+ int batch;
+
+ /* Input file definitions. Elements are of type DC_PhysicalFile */
+ GList *input_files;
+ int num_inputs;
+
+ /* Remote input file definitions. Elements are of type DC_RemoteFile */
+ GList *remote_input_files;
+ int num_remote_inputs;
+
+ /* Output file definitions. Elements are of type char * */
+ GList *output_files;
+ int num_outputs;
+
+ /* Name of the checkpoint file, if exists (relative to workdir) */
+ char *ckpt_name;
+
+ /* Reference count */
+ int refcnt;
+
+ /* Mapping <optional/> attribute to output files */
+ GHashTable *is_optional;
+};
+
+struct _DC_Result
+{
+ DC_Workunit *wu;
+
+ int exit_code;
+ double cpu_time;
+
+ /* List of output files. Elements are of type DC_PhysicalFile */
+ GList *output_files;
+ int num_outputs;
+};
+
+
+/********************************************************************
+ * Global variables
+ */
+
+extern DC_ResultCallback _dc_resultcb G_GNUC_INTERNAL;
+extern DC_SubresultCallback _dc_subresultcb G_GNUC_INTERNAL;
+extern DC_MessageCallback _dc_messagecb G_GNUC_INTERNAL;
+
+extern char project_uuid_str[] G_GNUC_INTERNAL;
+extern uuid_t project_uuid G_GNUC_INTERNAL;
+
+
+/********************************************************************
+ * Function prototypes
+ */
+
+/* Parses the project's config.xml */
+int _DC_parseConfigXML(void) G_GNUC_INTERNAL;
+
+/* Returns the Boinc upload directory */
+char *_DC_getUploadDir(void) G_GNUC_INTERNAL;
+
+/* Returns the Boinc download directory */
+char *_DC_getDownloadDir(void) G_GNUC_INTERNAL;
+
+/* Returns the Boinc upload/download hashing */
+int _DC_getUldlDirFanout(void) G_GNUC_INTERNAL;
+
+/* Returns the database name */
+char *_DC_getDBName(void) G_GNUC_INTERNAL;
+
+/* Returns the database host */
+char *_DC_getDBHost(void) G_GNUC_INTERNAL;
+
+/* Returns the database user ID */
+char *_DC_getDBUser(void) G_GNUC_INTERNAL;
+
+/* Returns the database password */
+char *_DC_getDBPasswd(void) G_GNUC_INTERNAL;
+
+/* Initializes the database connection */
+int _DC_initDB(void) G_GNUC_INTERNAL;
+
+/* Initializes the WU manager */
+int _DC_initWUs(void) G_GNUC_INTERNAL;
+
+/* Creates a new DC_Result */
+DC_Result *_DC_createResult(const char *wu_name, int db_id,
+ const char *xml_doc_in, double cpu_time) G_GNUC_INTERNAL;
+
+/* Destroys a DC_Result */
+void _DC_destroyResult(DC_Result *result) G_GNUC_INTERNAL;
+
+/* Get the name of the WU used in the database */
+char *_DC_getWUName(const DC_Workunit *wu) G_GNUC_INTERNAL;
+
+/* Looks up a WU by name */
+DC_Workunit *_DC_getWUByName(const char *name) G_GNUC_INTERNAL;
+
+/* Looks up the id of a wu */
+int _DC_getDBid(DC_Workunit *wu) G_GNUC_INTERNAL;
+
+/* Parses <file_ref> definitions in an XML document */
+GList *_DC_parseFileRefs(const char *xml_doc, int *num_files) G_GNUC_INTERNAL;
+
+/* Marks a work unit as completed in the database */
+void _DC_resultCompleted(DC_Result *result) G_GNUC_INTERNAL;
+
+/* Updates the WU state from the database */
+void _DC_updateWUState(DC_Workunit *wu) G_GNUC_INTERNAL;
+
+/* C wrapper around dir_hier_path() */
+char *_DC_hierPath(const char *src, int upload) G_GNUC_INTERNAL;
+
+/* Get the full path of a file in the WU's working directory */
+char *_DC_workDirPath(const DC_Workunit *wu, const char *label, WorkdirFile type)
+ G_GNUC_INTERNAL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DC_BOINC_H_ */
diff --git a/dcapi/boinc/dcapi-boinc-client.pc.in b/dcapi/boinc/dcapi-boinc-client.pc.in
new file mode 100644
index 0000000..78b1e87
--- /dev/null
+++ b/dcapi/boinc/dcapi-boinc-client.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: DC-API BOINC Client
+Description: BOINC client implementation for DC-API
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -ldcapi-client-boinc
+Libs.private: @BOINC_CLIENT_LIBS@
+Cflags: -I${includedir}
diff --git a/dcapi/boinc/dcapi-boinc-master.pc.in b/dcapi/boinc/dcapi-boinc-master.pc.in
new file mode 100644
index 0000000..466fff2
--- /dev/null
+++ b/dcapi/boinc/dcapi-boinc-master.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: DC-API BOINC Master
+Description: BOINC master implementation for DC-API
+Version: @PACKAGE_VERSION@
+Requires: glib-2.0 uuid
+Libs: -L${libdir} -ldcapi-boinc
+Libs.private: @BOINC_SERVER_LIBS@ -lm
+Cflags: -I${includedir}
diff --git a/dcapi/boinc/events.C b/dcapi/boinc/events.C
new file mode 100644
index 0000000..fd25418
--- /dev/null
+++ b/dcapi/boinc/events.C
@@ -0,0 +1,453 @@
+/*
+ * events.C - BOINC event handling
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <strings.h>
+
+#include "dc_boinc.h"
+
+#include <boinc_db.h>
+#include <sched_util.h>
+#include <sched_msgs.h>
+#include <parse.h>
+
+/* Be nice to the database and sleep for a long time */
+#define SLEEP_UNIT 15
+
+static void mark_wu_complete(DB_WORKUNIT &dbwu, int do_callback)
+{
+ DC_Workunit *wu;
+
+ /* Invoke the callback with an empty result so the application knows
+ * that the WU has failed */
+ wu = _DC_getWUByName(dbwu.name);
+ if (wu && _dc_resultcb && do_callback)
+ _dc_resultcb(wu, NULL);
+
+ dbwu.assimilate_state = ASSIMILATE_DONE;
+ dbwu.transition_time = time(NULL);
+ dbwu.update();
+}
+
+static int wu_has_failed(DB_WORKUNIT &wu)
+{
+ if (wu.error_mask & WU_ERROR_CANCELLED)
+ {
+ DC_log(LOG_INFO, "Acknowledging cancelled WU %s", wu.name);
+ return TRUE;
+ }
+
+ if (wu.error_mask & WU_ERROR_TOO_MANY_ERROR_RESULTS)
+ {
+ DC_log(LOG_WARNING, "There are too many errors for WU %s",
+ wu.name);
+ return TRUE;
+ }
+
+ if (wu.error_mask & WU_ERROR_TOO_MANY_TOTAL_RESULTS)
+ {
+ DC_log(LOG_WARNING, "There are too many results for WU %s",
+ wu.name);
+ return TRUE;
+ }
+
+ if (wu.error_mask & WU_ERROR_COULDNT_SEND_RESULT)
+ {
+ if (wu.canonical_resultid)
+ return FALSE;
+
+ /* XXX We could count the results that still have a chance to
+ * complete and error out only if there are fewer than
+ * min_quorum, but that's complex */
+ DC_log(LOG_WARNING, "One or more results for WU %s coudln't "
+ "be sent", wu.name);
+ return TRUE;
+ }
+
+ if (!wu.canonical_resultid)
+ {
+ DC_log(LOG_WARNING, "No canonical result for WU %s", wu.name);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static int process_results(void)
+{
+ DC_Result *result;
+ DB_WORKUNIT wu;
+ char *query;
+ int done;
+
+ /* XXX Check LIMIT value */
+ query = g_strdup_printf("WHERE name LIKE '%s\\_%%' "
+ "AND assimilate_state = %d LIMIT 100", project_uuid_str,
+ ASSIMILATE_READY);
+ done = 0;
+ while (!wu.enumerate(query))
+ {
+ DB_RESULT canonical_result;
+
+ if (wu_has_failed(wu))
+ {
+ mark_wu_complete(wu, TRUE);
+ continue;
+ }
+
+ if (canonical_result.lookup_id(wu.canonical_resultid))
+ {
+ DC_log(LOG_ERR, "Result #%d is not in the database",
+ wu.canonical_resultid);
+ mark_wu_complete(wu, TRUE);
+ continue;
+ }
+
+ /* Call the callback function */
+ result = _DC_createResult(wu.name, wu.id,
+ canonical_result.xml_doc_in, canonical_result.cpu_time);
+ if (!result)
+ {
+ mark_wu_complete(wu, TRUE);
+ continue;
+ }
+ _dc_resultcb(result->wu, result);
+ _DC_destroyResult(result);
+ done++;
+ }
+
+ g_free(query);
+ return done;
+}
+
+static void handle_special_msg(DC_Workunit *wu, const char *msg)
+{
+ if (!strncmp(msg, DC_MSG_UPLOAD, strlen(DC_MSG_UPLOAD)) &&
+ _dc_subresultcb)
+ {
+ const char *p = strchr(msg, ':');
+ if (!p)
+ return;
+ const char *q = strchr(p + 1, ':');
+ if (!q)
+ return;
+
+ char *subresult_name = g_strndup(p + 1, (q - p) - 1);
+ char *client_label = g_strdup(q + 1);
+
+ /* Paranoia; the XML signature should already prevent the
+ * client from tampering with the destination path */
+ if (strchr(subresult_name, G_DIR_SEPARATOR))
+ {
+ DC_log(LOG_ERR, "Client sent insecure subresult name, "
+ "ignoring");
+ g_free(subresult_name);
+ g_free(client_label);
+ return;
+ }
+
+ char *path = _DC_hierPath(subresult_name, TRUE);
+ _dc_subresultcb(wu, client_label, path);
+
+ g_free(subresult_name);
+ g_free(client_label);
+ g_free(path);
+ }
+ else
+ DC_log(LOG_WARNING, "Received unknown control message %s", msg);
+}
+
+static int process_messages(void)
+{
+ DB_MSG_FROM_HOST msg;
+ char *query, *buf;
+ DC_Workunit *wu;
+ int done, ret;
+
+ query = g_strdup_printf("WHERE variety LIKE '%s\\_%%' AND handled = 0",
+ project_uuid_str);
+ buf = (char *)g_malloc(MAX_MESSAGE_SIZE);
+ done = 0;
+ while (!msg.enumerate(query))
+ {
+ wu = _DC_getWUByName(msg.variety);
+ if (!wu)
+ {
+ DC_log(LOG_WARNING, "Received message for unknown "
+ "WU %s", msg.variety);
+ goto handled;
+ }
+
+ ret = parse_str(msg.xml, "<message>", buf, MAX_MESSAGE_SIZE);
+ if (!ret)
+ {
+ DC_log(LOG_WARNING, "Failed to parse message %s",
+ msg.xml);
+ goto handled;
+ }
+
+ if (!strncmp(buf, DCAPI_MSG_PFX, strlen(DCAPI_MSG_PFX)))
+ handle_special_msg(wu, buf + strlen(DCAPI_MSG_PFX) + 1);
+ else if (_dc_messagecb)
+ _dc_messagecb(wu, buf);
+ done++;
+handled:
+ msg.handled = 1;
+ msg.update();
+ }
+ g_free(query);
+ g_free(buf);
+ return done;
+}
+
+int DC_processMasterEvents(int timeout)
+{
+ time_t end, now;
+ static int once;
+ int done;
+
+ if (!_dc_resultcb && !_dc_subresultcb && !_dc_messagecb)
+ {
+ DC_log(LOG_ERR, "%s: callbacks are not initialized", __func__);
+ return DC_ERR_CONFIG;
+ }
+
+ /* Warn the user whether she knows what she is doing */
+ if (!once)
+ {
+ if (!_dc_resultcb)
+ DC_log(LOG_NOTICE, "The result callback is not set, "
+ "completed WUs will not be reported");
+ if (!_dc_subresultcb)
+ DC_log(LOG_NOTICE, "The subresult callback is not "
+ "set, subresults will not be reported");
+ if (!_dc_messagecb)
+ DC_log(LOG_NOTICE, "The message callback is not set, "
+ "messages will not be reported");
+ once = 1;
+ }
+
+ end = time(NULL) + timeout;
+ done = 0;
+ while (1)
+ {
+ if (_dc_resultcb)
+ done += process_results();
+ if (_dc_subresultcb || _dc_messagecb)
+ done += process_messages();
+ if (done)
+ break;
+
+ now = time(NULL);
+ if (now >= end)
+ break;
+ sleep(MIN(end - now, SLEEP_UNIT));
+ }
+
+ return done ? 0 : DC_ERR_TIMEOUT;
+}
+
+/* Look for a single result that matches the filter */
+static DC_MasterEvent *look_for_results(const char *wuFilter, const char *wuName)
+{
+ DC_MasterEvent *event;
+ DB_RESULT result;
+ DB_WORKUNIT wu;
+ char *query;
+
+ if (wuFilter)
+ query = g_strdup_printf("WHERE name LIKE '%s\\_%%\\_%s' "
+ "AND assimilate_state = %d LIMIT 1", project_uuid_str,
+ wuFilter, ASSIMILATE_READY);
+ else if (wuName)
+ query = g_strdup_printf("WHERE name LIKE '%s\\_%s%%' "
+ "AND assimilate_state = %d LIMIT 1", project_uuid_str,
+ wuName, ASSIMILATE_READY);
+ else
+ query = g_strdup_printf("WHERE name LIKE '%s\\_%%' "
+ "AND assimilate_state = %d LIMIT 1", project_uuid_str,
+ ASSIMILATE_READY);
+
+ if (wu.enumerate(query))
+ {
+ g_free(query);
+ return NULL;
+ }
+ g_free(query);
+
+ if (wu_has_failed(wu))
+ {
+ mark_wu_complete(wu, FALSE);
+ return NULL;
+ }
+
+ if (result.lookup_id(wu.canonical_resultid))
+ {
+ DC_log(LOG_ERR, "Result #%d is not in the database",
+ wu.canonical_resultid);
+ mark_wu_complete(wu, FALSE);
+ return NULL;
+ }
+
+ event = g_new(DC_MasterEvent, 1);
+ event->type = DC_MASTER_RESULT;
+ event->result = _DC_createResult(wu.name, wu.id, result.xml_doc_in,
+ result.cpu_time);
+ if (!event->result)
+ {
+ mark_wu_complete(wu, FALSE);
+ g_free(event);
+ return NULL;
+ }
+ event->wu = event->result->wu;
+
+ return event;
+}
+
+static DC_MasterEvent *look_for_messages(const char *wuFilter, const char *wuName)
+{
+ DC_MasterEvent *event;
+ DB_MSG_FROM_HOST msg;
+ char *query, *buf;
+ DC_Workunit *wu;
+ int ret;
+
+restart:
+ if (wuFilter)
+ query = g_strdup_printf("WHERE variety LIKE '%s\\_%%\\_%s' "
+ "AND handled = 0", project_uuid_str, wuFilter);
+ else if (wuName)
+ query = g_strdup_printf("WHERE variety LIKE '%s\\_%s%%' "
+ "AND handled = 0", project_uuid_str, wuName);
+ else
+ query = g_strdup_printf("WHERE variety LIKE '%s\\_%%' "
+ "AND handled = 0", project_uuid_str);
+
+ if (msg.enumerate(query))
+ {
+ g_free(query);
+ return NULL;
+ }
+ g_free(query);
+
+ wu = _DC_getWUByName(msg.variety);
+ if (!wu)
+ {
+ DC_log(LOG_WARNING, "Received message for unknown WU %s",
+ msg.variety);
+ msg.handled = 1;
+ msg.update();
+ return NULL;
+ }
+
+ buf = (char *)g_malloc(MAX_MESSAGE_SIZE);
+ ret = parse_str(msg.xml, "<message>", buf, MAX_MESSAGE_SIZE);
+ if (!ret)
+ {
+ DC_log(LOG_WARNING, "Failed to parse message %s", msg.xml);
+ g_free(buf);
+ msg.handled = 1;
+ msg.update();
+ return NULL;
+ }
+
+ if (!strncmp(buf, DCAPI_MSG_PFX, strlen(DCAPI_MSG_PFX)))
+ {
+ handle_special_msg(wu, buf + strlen(DCAPI_MSG_PFX) + 1);
+ g_free(buf);
+ msg.handled = 1;
+ msg.update();
+ goto restart;
+ }
+
+ event = g_new(DC_MasterEvent, 1);
+ event->wu = wu;
+ event->type = DC_MASTER_MESSAGE;
+ event->message = buf;
+ return event;
+}
+
+DC_MasterEvent *DC_waitMasterEvent(const char *wuFilter, int timeout)
+{
+ time_t end, now;
+ DC_MasterEvent *event;
+
+ end = time(NULL) + timeout;
+ while (1)
+ {
+ event = look_for_results(wuFilter, NULL);
+ if (event)
+ break;
+ event = look_for_messages(wuFilter, NULL);
+ if (event)
+ break;
+ now = time(NULL);
+ if (now >= end)
+ break;
+ sleep(MIN(end - now, SLEEP_UNIT));
+ }
+ return event;
+}
+
+DC_MasterEvent *DC_waitWUEvent(DC_Workunit *wu, int timeout)
+{
+ char uuid_str[36];
+ DC_MasterEvent *event;
+ time_t end, now;
+
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return NULL;
+ }
+
+ uuid_unparse_lower(wu->uuid, uuid_str);
+
+ end = time(NULL) + timeout;
+ while (1)
+ {
+ event = look_for_results(NULL, uuid_str);
+ if (event)
+ break;
+ event = look_for_messages(NULL, uuid_str);
+ if (event)
+ break;
+ now = time(NULL);
+ if (now >= end)
+ break;
+ sleep(MIN(end - now, SLEEP_UNIT));
+ }
+ return event;
+}
+
+void DC_destroyMasterEvent(DC_MasterEvent *event)
+{
+ if (!event)
+ return;
+
+ switch (event->type)
+ {
+ case DC_MASTER_RESULT:
+ _DC_destroyResult(event->result);
+ break;
+ case DC_MASTER_SUBRESULT:
+ _DC_destroyPhysicalFile(event->subresult);
+ break;
+ case DC_MASTER_MESSAGE:
+ g_free(event->message);
+ break;
+ default:
+ DC_log(LOG_ERR, "%s: Unknown event type %d",
+ __func__, event->type);
+ break;
+ }
+}
diff --git a/dcapi/boinc/local.conf b/dcapi/boinc/local.conf
new file mode 100644
index 0000000..fa0024b
--- /dev/null
+++ b/dcapi/boinc/local.conf
@@ -0,0 +1,21 @@
+# Template
+# Configuration file for local implementation of DC
+#
+
+BoincRoot = /home/pnorbert/SETI/boinc
+BoincTools = /home/pnorbert/SETI/boinc/tools
+
+#
+# Client code
+#
+
+# Executable is the client program to be executed
+Executable = proba2client
+
+
+#
+# Working directory
+#
+
+WorkingDirectory = /home/pnorbert/SETI/workdir
+
diff --git a/dcapi/boinc/result.c b/dcapi/boinc/result.c
new file mode 100644
index 0000000..b46cfed
--- /dev/null
+++ b/dcapi/boinc/result.c
@@ -0,0 +1,248 @@
+/*
+ * result.c - BOINC result management
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "dc_boinc.h"
+
+/********************************************************************
+ * Functions
+ */
+
+DC_Result *_DC_createResult(const char *wu_name, int db_id,
+ const char *xml_doc_in, double cpu_time)
+{
+ DC_Result *result;
+ GList *l;
+
+ result = g_new0(DC_Result, 1);
+ result->wu = _DC_getWUByName(wu_name);
+ if (!result->wu)
+ {
+ DC_log(LOG_ERR, "Received result for unknown WU %s", wu_name);
+ g_free(result);
+ return NULL;
+ }
+
+ /* Make sure the WU remains valid while the result lives */
+ result->wu->refcnt++;
+
+ if (!result->wu->db_id)
+ result->wu->db_id = db_id;
+
+ result->wu->state = DC_WU_FINISHED;
+ result->cpu_time = cpu_time;
+
+ result->output_files = _DC_parseFileRefs(xml_doc_in,
+ &result->num_outputs);
+ if (!result->output_files)
+ {
+ _DC_destroyResult(result);
+ return NULL;
+ }
+
+ for (l = result->output_files; l; l = l->next)
+ {
+ char *upload_path, *workdir_path;
+ DC_PhysicalFile *file;
+ int ret;
+
+ file = l->data;
+ workdir_path = _DC_workDirPath(result->wu, file->label,
+ FILE_OUT);
+ upload_path = _DC_hierPath(file->path, TRUE);
+
+ ret = link(upload_path, workdir_path);
+ if (ret && errno != ENOENT)
+ {
+ ret = _DC_copyFile(upload_path, workdir_path);
+ if (ret)
+ DC_log(LOG_ERR, "Failed to copy the output "
+ "file %s to %s", upload_path,
+ workdir_path);
+ }
+ g_free(workdir_path);
+ g_free(upload_path);
+ }
+ return result;
+}
+
+void _DC_destroyResult(DC_Result *result)
+{
+ /* Mark the work unit as completed in the database */
+ _DC_resultCompleted(result);
+ /* Drop the reference on the WU */
+ DC_destroyWU(result->wu);
+
+ while (result->output_files)
+ {
+ _DC_destroyPhysicalFile(result->output_files->data);
+ result->output_files = g_list_delete_link(result->output_files,
+ result->output_files);
+ }
+ g_free(result);
+}
+
+DC_GridCapabilities DC_getResultCapabilities(const DC_Result *result)
+{
+ unsigned caps;
+ char *path;
+
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return 0;
+ }
+
+ caps = DC_GC_EXITCODE;
+ path = DC_getResultOutput(result, DC_LABEL_STDOUT);
+ if (path)
+ {
+ caps |= DC_GC_STDOUT;
+ free(path);
+ }
+ path = DC_getResultOutput(result, DC_LABEL_STDERR);
+ if (path)
+ {
+ caps |= DC_GC_STDERR;
+ free(path);
+ }
+ path = DC_getResultOutput(result, DC_LABEL_CLIENTLOG);
+ if (path)
+ {
+ caps |= DC_GC_LOG;
+ free(path);
+ }
+
+ return caps;
+}
+
+DC_Workunit *DC_getResultWU(DC_Result *result)
+{
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return NULL;
+ }
+
+ return result->wu;
+}
+
+int DC_getResultExit(const DC_Result *result)
+{
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return -1;
+ }
+
+ return result->exit_code;
+}
+
+char *DC_getResultOutput(const DC_Result *result, const char *logicalFileName)
+{
+ char *path, *wuname;
+ struct stat st;
+ int fd;
+ GList *l;
+ int ret;
+
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return NULL;
+ }
+ if (!logicalFileName)
+ {
+ DC_log(LOG_ERR, "%s: Missing logical file name", __func__);
+ return NULL;
+ }
+
+ for (l = result->output_files; l; l = l->next)
+ {
+ DC_PhysicalFile *file = l->data;
+
+ if (strcmp(file->label, logicalFileName))
+ continue;
+
+ path = _DC_workDirPath(result->wu, file->label, FILE_OUT);
+
+ /*
+ BOINC will not upload an output file if it's empty.
+
+ Higher level applications might report an error because of the
+ missing file, while the result is actually successful.
+
+ Create an empty output file if it's missing.
+ */
+ ret = stat(path, &st);
+ if (ret)
+ {
+ if (ENOENT == errno)
+ /* does not exist */
+ {
+ DC_log(LOG_WARNING,
+ "File '%s' does not exists; it was probably empty. Creating it",
+ path);
+ if (0 > (fd = creat(path, 0660)))
+ {
+ DC_log(LOG_ERR, "Could not create empty file '%s': open: %s",
+ path, strerror(errno));
+ g_free(path);
+ return NULL;
+ }
+ else
+ close(fd);
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Error opening output file '%s': stat: %s",
+ path, strerror(errno));
+ g_free(path);
+ return NULL;
+ }
+ }
+
+ if (!g_mem_is_system_malloc())
+ {
+ char *tmp;
+
+ tmp = strdup(path);
+ g_free(path);
+ path = tmp;
+ }
+ return path;
+ }
+
+ wuname = _DC_getWUName(result->wu);
+ DC_log(LOG_WARNING, "WU %s does not have an output file named '%s'",
+ wuname, logicalFileName);
+ g_free(wuname);
+ return NULL;
+}
+
+double DC_getResultCPUTime(const DC_Result *result)
+{
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return 0.0;
+ }
+
+ return result->cpu_time;
+}
diff --git a/dcapi/boinc/wu.C b/dcapi/boinc/wu.C
new file mode 100644
index 0000000..64a0d18
--- /dev/null
+++ b/dcapi/boinc/wu.C
@@ -0,0 +1,2016 @@
+/*
+ * wu.C - BOINC work unit management
+ *
+ * Authors:
+ * Gábor Gombás <gombasg at sztaki.hu>
+ *
+ * Copyright (c) 2006 MTA SZTAKI
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <glib.h>
+#include <math.h>
+
+#include <openssl/sha.h>
+
+#include <sched_util.h>
+#include <sched_config.h>
+#include <backend_lib.h>
+#include <md5_file.h>
+
+#include "dc_boinc.h"
+
+/********************************************************************
+ * Constants
+ */
+
+typedef enum
+{
+ WU_NOTAG = -1,
+ WU_WUDESC,
+ WU_INPUT_LABEL,
+ WU_REMOTE_IN_LABEL,
+ WU_OUTPUT_LABEL,
+ WU_TAG,
+ WU_CLIENT_NAME,
+ WU_CLIENT_ARG,
+ WU_SUBRESULTS,
+ WU_SUBMITTED,
+ WU_SERIALIZED,
+ WU_SUSPENDED,
+ WU_NOSUSPEND,
+ WU_NATIVECLIENT,
+ WU_PRIORITY,
+ WU_BATCH
+} wu_tag;
+
+#define WU_DESC_FILE "wu_desc.xml"
+
+
+/********************************************************************
+ * Data type definitions
+ */
+
+struct tag_desc
+{
+ wu_tag id;
+ const char *name;
+};
+
+struct parser_state
+{
+ wu_tag curr_tag;
+ DC_FileMode curr_mode;
+ DC_Workunit *wu;
+ char *curr_url;
+ char *curr_md5;
+ size_t curr_size;
+};
+
+struct wu_params
+{
+ /* Resource control */
+ double rsc_fpops_est;
+ double rsc_fpops_bound;
+ double rsc_memory_bound;
+ double rsc_disk_bound;
+
+ /* Redundancy */
+ int delay_bound;
+ int min_quorum;
+ int target_nresults;
+ int max_error_results;
+ int max_total_results;
+ int max_success_results;
+};
+
+
+/********************************************************************
+ * Prototypes
+ */
+
+int DC_addWUOutputExt(DC_Workunit *wu, const char *logicalFileName, int flags);
+
+/* XML parser callback functions */
+static void wudesc_start(GMarkupParseContext *ctx, const char *element_name,
+ const char **attr_names, const char **attr_values, void *ptr,
+ GError **error);
+static void wudesc_end(GMarkupParseContext *ctx, const char *element_name,
+ void *ptr, GError **error);
+static void wudesc_text(GMarkupParseContext *ctx, const char *text,
+ gsize text_len, void *ptr, GError **error);
+
+
+/********************************************************************
+ * Global variables
+ */
+
+extern SCHED_CONFIG dc_boinc_config G_GNUC_INTERNAL;
+
+static GHashTable *wu_table;
+static int num_wus;
+
+static const struct tag_desc tags[] =
+{
+ { WU_WUDESC, "wudesc" },
+ { WU_INPUT_LABEL, "input_label" },
+ { WU_REMOTE_IN_LABEL, "remote_input_label" },
+ { WU_OUTPUT_LABEL, "output_label" },
+ { WU_TAG, "tag" },
+ { WU_CLIENT_NAME, "client_name" },
+ { WU_CLIENT_ARG, "client_arg" },
+ { WU_SUBRESULTS, "subresults" },
+ { WU_SUBMITTED, "submitted" },
+ { WU_SUSPENDED, "suspended" },
+ { WU_SERIALIZED, "serialized" },
+ { WU_NOSUSPEND, "nosuspend" },
+ { WU_NATIVECLIENT, "nativeclient" },
+ { WU_PRIORITY, "priority" },
+ { WU_BATCH, "batch" }
+};
+
+static const GMarkupParser wudesc_parser =
+{
+ wudesc_start,
+ wudesc_end,
+ wudesc_text,
+ NULL,
+ NULL
+};
+
+
+/********************************************************************
+ * Helper functions
+ */
+
+/* Calculate & create the working directory. The working directory has the
+ * form: <project work dir>/.dcapi-<project uuid>/<hash>/<wu uuid> Where <hash>
+ * is the first 2 hex digits of the uuid
+ */
+static char *get_workdir(const uuid_t uuid, int create)
+{
+ char *tmp, uuid_str[37], *cfgval;
+ GString *str;
+ int ret;
+
+ uuid_unparse_lower(uuid, uuid_str);
+
+ cfgval = DC_getCfgStr(CFG_WORKDIR);
+ if (!cfgval)
+ return NULL;
+ str = g_string_new(cfgval);
+ free(cfgval);
+
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, ".dcapi-");
+ g_string_append(str, project_uuid_str);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append_printf(str, "%02x", uuid[0]);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, uuid_str);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ tmp = str->str;
+ g_string_free(str, FALSE);
+ return tmp;
+
+error:
+ DC_log(LOG_ERR, "Failed to create WU working directory %s: %s",
+ str->str, strerror(errno));
+ g_string_free(str, TRUE);
+ return NULL;
+}
+
+/* Get the full path of a file in the WU's working directory */
+char *_DC_workDirPath(const DC_Workunit *wu, const char *label, WorkdirFile type)
+{
+ static const char *const pfx[] = { "in_", "out_", "checkpoint", "dc_" };
+
+ if (type == FILE_CKPT)
+ return g_strdup_printf("%s%ccheckpoint", wu->workdir,
+ G_DIR_SEPARATOR);
+
+ return g_strdup_printf("%s%c%s%s", wu->workdir, G_DIR_SEPARATOR,
+ pfx[type], label);
+}
+
+/* Open a file in the WU's working directory */
+static FILE *open_workdir_file(const DC_Workunit *wu, const char *label,
+ WorkdirFile type, const char *mode)
+{
+ char *name;
+ FILE *f;
+
+ name = _DC_workDirPath(wu, label, type);
+ f = fopen(name, mode);
+ if (!f)
+ DC_log(LOG_ERR, "Failed to open %s (mode %s): %s",
+ name, mode, strerror(errno));
+ g_free(name);
+ return f;
+}
+
+/* Returns the unique per-wu file name in the BOINC download hierarchy,
+ * without path components */
+static char *get_input_download_name(DC_Workunit *wu, const char *label, const char *physicalfilename)
+{
+ char uuid_str[37];
+
+ if (physicalfilename)
+ return g_strdup(physicalfilename);
+ else
+ {
+ uuid_unparse_lower(wu->uuid, uuid_str);
+ return g_strdup_printf("%s_%s", label, uuid_str);
+ }
+}
+
+/* Returns the full path of the input file in the BOINC download hierarchy */
+static char *get_input_download_path(DC_Workunit *wu, const char *label, const char *physicalfilename)
+{
+ char *filename, *path;
+
+ filename = get_input_download_name(wu, label, physicalfilename);
+ path = _DC_hierPath(filename, FALSE);
+ g_free(filename);
+ return path;
+}
+
+static int wu_uuid_equal(const void *a, const void *b)
+{
+ return uuid_compare((const unsigned char *)a,
+ (const unsigned char *)b) == 0;
+}
+
+static unsigned wu_uuid_hash(const void *ptr)
+{
+ guint32 *h = (guint *)ptr;
+
+ return h[0] ^ h[1] ^ h[2] ^ h[3];
+}
+
+static DC_Workunit *alloc_wu(void)
+{
+ DC_Workunit *wu;
+
+ wu = g_new0(DC_Workunit, 1);
+ wu->is_optional = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
+ wu->refcnt = 1;
+ return wu;
+}
+
+/**
+ * Perform regular expression replacement for a given URL.
+ * @param url the URL to perform the replace on
+ * @return NULL-terminated string array of replacement result(s)
+ */
+static gchar **replace_regex(const char *url)
+{
+ if (!url)
+ return NULL;
+
+ char *regex = DC_getCfgStr(CFG_REGEXPMATCH);
+ if (!regex)
+ return NULL;
+
+ char *replace = DC_getCfgStr(CFG_REGEXPREPLACE);
+ if (!replace)
+ {
+ g_free(regex);
+ return NULL;
+ }
+
+ GRegex *reg = g_regex_new(regex, (GRegexCompileFlags)0, (GRegexMatchFlags)0, NULL);
+ if (!reg)
+ {
+ g_free(regex);
+ g_free(replace);
+ return NULL;
+ }
+
+ gchar *res = g_regex_replace(reg, url, -1, 0, replace, (GRegexMatchFlags)0, NULL);
+ if (!res)
+ {
+ g_free(regex);
+ g_free(replace);
+ return NULL;
+ }
+
+ return g_strsplit(res, "\n", 0);
+}
+
+/********************************************************************
+ * The WU description parser
+ */
+
+static void wudesc_start(GMarkupParseContext *ctx, const char *element_name,
+ const char **attr_names, const char **attr_values, void *ptr,
+ GError **error)
+{
+ struct parser_state *pctx = (struct parser_state *)ptr;
+ int i;
+
+ for (i = 0; i < (int)(sizeof(tags) / sizeof(tags[0])); i++)
+ if (!strcmp(tags[i].name, element_name))
+ break;
+ if (i >= (int)(sizeof(tags) / sizeof(tags[0])))
+ {
+ *error = g_error_new(G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+ "Unknown element %s", element_name);
+ return;
+ }
+
+ if (tags[i].id == WU_INPUT_LABEL)
+ {
+ if (attr_names && attr_names[0] && !strcmp(attr_names[0], "type"))
+ pctx->curr_mode = (DC_FileMode)atoi(attr_values[0]);
+ else
+ pctx->curr_mode = DC_FILE_REGULAR;
+ }
+ else if (tags[i].id == WU_REMOTE_IN_LABEL)
+ {
+ int j = 0;
+ for (; j < 3; j++) {
+ if (attr_names && attr_names[j] && !strcmp(attr_names[j], "url"))
+ pctx->curr_url = g_strdup(attr_values[j]);
+ if (attr_names && attr_names[j] && !strcmp(attr_names[j], "md5"))
+ pctx->curr_md5 = g_strdup(attr_values[j]);
+ if (attr_names && attr_names[j] && !strcmp(attr_names[j], "size"))
+ pctx->curr_size = atoll(attr_values[j]);
+ }
+ }
+ else if (attr_names && attr_names[0])
+ {
+ *error = g_error_new(G_MARKUP_ERROR,
+ G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
+ "Element %s does not take attributes", element_name);
+ return;
+ }
+
+ switch (tags[i].id)
+ {
+ case WU_SERIALIZED:
+ pctx->wu->serialized = TRUE;
+ break;
+ case WU_SUBMITTED:
+ pctx->wu->submitted = TRUE;
+ break;
+ case WU_SUSPENDED:
+ pctx->wu->suspended = TRUE;
+ break;
+ case WU_NOSUSPEND:
+ pctx->wu->nosuspend = TRUE;
+ break;
+ case WU_NATIVECLIENT:
+ pctx->wu->nativeclient = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ pctx->curr_tag = tags[i].id;
+}
+
+static void wudesc_end(GMarkupParseContext *ctx, const char *element_name,
+ void *ptr, GError **error)
+{
+ struct parser_state *pctx = (struct parser_state *)ptr;
+
+ pctx->curr_tag = WU_NOTAG;
+}
+
+static void wudesc_text(GMarkupParseContext *ctx, const char *text,
+ gsize text_len, void *ptr, GError **error)
+{
+ struct parser_state *pctx = (struct parser_state *)ptr;
+ DC_PhysicalFile *file;
+ DC_RemoteFile *rfile;
+ char *tmp, *label;
+
+ switch (pctx->curr_tag)
+ {
+ case WU_INPUT_LABEL:
+ label = g_strndup(text, text_len);
+ tmp = _DC_workDirPath(pctx->wu, label, FILE_IN);
+ file = _DC_createPhysicalFile(label, tmp);
+ g_free(tmp);
+ g_free(label);
+ file->mode = pctx->curr_mode;
+ pctx->wu->input_files =
+ g_list_append(pctx->wu->input_files, file);
+ pctx->wu->num_inputs++;
+ break;
+ case WU_REMOTE_IN_LABEL:
+ label = g_strndup(text, text_len);
+ rfile = _DC_createRemoteFile(label, pctx->curr_url,
+ pctx->curr_md5, pctx->curr_size);
+ pctx->wu->remote_input_files =
+ g_list_append(pctx->wu->remote_input_files, rfile);
+ pctx->wu->num_remote_inputs++;
+ break;
+ case WU_OUTPUT_LABEL:
+ label = g_strndup(text, text_len);
+ pctx->wu->output_files =
+ g_list_append(pctx->wu->output_files, label);
+ pctx->wu->num_outputs++;
+ break;
+ case WU_TAG:
+ pctx->wu->tag = g_strndup(text, text_len);
+ break;
+ case WU_CLIENT_NAME:
+ pctx->wu->client_name = g_strndup(text, text_len);
+ break;
+ case WU_CLIENT_ARG:
+ pctx->wu->argv = g_renew(char *, pctx->wu->argv,
+ pctx->wu->argc + 2);
+ pctx->wu->argv[pctx->wu->argc++] = g_strndup(text, text_len);
+ pctx->wu->argv[pctx->wu->argc] = NULL;
+ break;
+ case WU_SUBRESULTS:
+ tmp = g_strndup(text, text_len);
+ pctx->wu->subresults = atoi(tmp);
+ g_free(tmp);
+ break;
+ case WU_PRIORITY:
+ tmp = g_strndup(text, text_len);
+ pctx->wu->priority = atoi(tmp);
+ g_free(tmp);
+ break;
+ case WU_BATCH:
+ tmp = g_strndup(text, text_len);
+ pctx->wu->batch = atoi(tmp);
+ g_free(tmp);
+ break;
+ case WU_WUDESC:
+ break;
+ case WU_SUSPENDED:
+ case WU_SUBMITTED:
+ case WU_SERIALIZED:
+ case WU_NOSUSPEND:
+ case WU_NATIVECLIENT:
+ /* XXX Emit error? */
+ break;
+ default:
+ break;
+ }
+}
+
+static int write_wudesc(const DC_Workunit *wu)
+{
+ DC_PhysicalFile *file;
+ DC_RemoteFile *rfile;
+ GList *l;
+ FILE *f;
+ int i;
+
+ f = open_workdir_file(wu, WU_DESC_FILE, FILE_DCAPI, "w");
+ if (!f)
+ return DC_ERR_SYSTEM;
+
+ fprintf(f, "<wudesc>\n");
+ if (wu->serialized)
+ fprintf(f, "\t<serialized/>\n");
+ if (wu->submitted)
+ fprintf(f, "\t<submitted/>\n");
+ if (wu->suspended)
+ fprintf(f, "\t<suspended/>\n");
+ if (wu->nosuspend)
+ fprintf(f, "\t<nosuspend/>\n");
+ if (wu->nativeclient)
+ fprintf(f, "\t<nativeclient/>\n");
+ fprintf(f, "\t<tag>%s</tag>\n", wu->tag);
+
+ fprintf(f, "\t<client_name>%s</client_name>\n", wu->client_name);
+ for (i = 0; i < wu->argc; i++)
+ fprintf(f, "\t<client_arg>%s</client_arg>\n", wu->argv[i]);
+
+ for (l = wu->input_files; l; l = l->next)
+ {
+ file = (DC_PhysicalFile *)l->data;
+ fprintf(f, "\t<input_label type=\"%d\">%s</input_label>\n",
+ file->mode, file->label);
+ }
+
+ for (l = wu->remote_input_files; l; l = l->next)
+ {
+ rfile = (DC_RemoteFile *)l->data;
+ fprintf(f, "\t<remote_input_label url=\"%s\" md5=\"%s\" size=\"%zu\">%s</remote_input_label>\n",
+ rfile->url, rfile->remotefilehash, rfile->remotefilesize, rfile->label);
+ }
+
+ for (l = wu->output_files; l; l = l->next)
+ fprintf(f, "\t<output_label>%s</output_label>\n", (char *)l->data);
+
+ fprintf(f, "\t<subresults>%d</subresults>\n", wu->subresults);
+ fprintf(f, "\t<priority>%d</priority>\n", wu->priority);
+ fprintf(f, "\t<batch>%d</batch>\n", wu->batch);
+
+ fprintf(f, "</wudesc>\n");
+ fclose(f);
+ return 0;
+}
+
+/********************************************************************
+ * API functions
+ */
+
+static int generate_client_config(DC_Workunit *wu)
+{
+ DC_PhysicalFile *file;
+ char *workpath;
+ FILE *f;
+
+ workpath = _DC_workDirPath(wu, DC_CONFIG_FILE, FILE_IN);
+ file = _DC_createPhysicalFile(DC_CONFIG_FILE, workpath);
+ g_free(workpath);
+ if (!file)
+ return DC_ERR_INTERNAL;
+ file->mode = DC_FILE_VOLATILE;
+
+ f = fopen(file->path, "w");
+ if (!f)
+ {
+ DC_log(LOG_ERR, "Failed to create file %s: %s", file->path,
+ strerror(errno));
+ return DC_ERR_SYSTEM;
+ }
+ fprintf(f, "# This file is generated by the master-side DC-API\n");
+ fprintf(f, "%s = %s\n", CFG_LOGFILE, DC_LABEL_CLIENTLOG);
+
+ _DC_initClientConfig(wu->client_name, f);
+ fclose(f);
+
+ wu->input_files = g_list_append(wu->input_files, file);
+ wu->num_inputs++;
+ return 0;
+}
+
+DC_Workunit *DC_createWU(const char *clientName, const char *arguments[],
+ int subresults, const char *tag)
+{
+ DC_Workunit *wu;
+ int ret;
+
+ if (!wu_table)
+ {
+ DC_log(LOG_ERR, "%s: Library is not initialized", __func__);
+ return NULL;
+ }
+ if (!clientName)
+ {
+ DC_log(LOG_ERR, "%s: Missing client name", __func__);
+ return NULL;
+ }
+
+ wu = alloc_wu();
+ wu->client_name = g_strdup(clientName);
+ wu->argv = g_strdupv((char **)arguments);
+
+ for (wu->argc = 0; arguments && arguments[wu->argc]; wu->argc++)
+ /* Nothing */;
+
+ wu->subresults = subresults;
+ wu->tag = g_strdup(tag);
+
+ uuid_generate(wu->uuid);
+
+ wu->workdir = get_workdir(wu->uuid, TRUE);
+ if (!wu->workdir)
+ {
+ DC_destroyWU(wu);
+ return NULL;
+ }
+
+ /* Set the default priority */
+ wu->priority = DC_getClientCfgInt(clientName, CFG_DEFAULTPRIO, 0, TRUE);
+
+ /* Set the default batch value */
+ wu->batch = 0;
+
+ /* Add the internal output files */
+ if (DC_getClientCfgBool(clientName, CFG_NATIVECLIENT, FALSE, TRUE))
+ {
+ wu->nativeclient = TRUE;
+ wu->nosuspend = TRUE;
+ }
+ else
+ {
+ /* Add the client config as an internal input file */
+ ret = generate_client_config(wu);
+ if (ret)
+ {
+ DC_destroyWU(wu);
+ return NULL;
+ }
+
+ DC_addWUOutputExt(wu, DC_LABEL_STDOUT, DC_OUTFILE_OPTIONAL);
+ DC_addWUOutputExt(wu, DC_LABEL_STDERR, DC_OUTFILE_OPTIONAL);
+ DC_addWUOutputExt(wu, DC_LABEL_CLIENTLOG, DC_OUTFILE_OPTIONAL);
+ if (DC_getClientCfgBool(clientName, CFG_ENABLESUSPEND, FALSE, TRUE))
+ DC_addWUOutput(wu, CKPT_LABEL_OUT);
+ else
+ wu->nosuspend = TRUE;
+ }
+
+ g_hash_table_insert(wu_table, wu->uuid, wu);
+ ++num_wus;
+
+ return wu;
+}
+
+void DC_destroyWU(DC_Workunit *wu)
+{
+ if (!wu || --wu->refcnt > 0)
+ return;
+
+ g_hash_table_remove(wu_table, wu->uuid);
+ --num_wus;
+
+ switch (wu->state)
+ {
+ case DC_WU_RUNNING:
+ DC_cancelWU(wu);
+ break;
+ default:
+ break;
+ }
+
+ g_hash_table_destroy(wu->is_optional);
+
+ while (wu->input_files)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)wu->input_files->data;
+
+ unlink(file->path);
+ wu->input_files = g_list_delete_link(wu->input_files,
+ wu->input_files);
+ _DC_destroyPhysicalFile(file);
+ }
+
+ while (wu->remote_input_files)
+ {
+ DC_RemoteFile *file = (DC_RemoteFile *)wu->remote_input_files->data;
+
+ wu->remote_input_files = g_list_delete_link(wu->remote_input_files,
+ wu->remote_input_files);
+ _DC_destroyRemoteFile(file);
+ }
+
+ while (wu->output_files)
+ {
+ g_free(wu->output_files->data);
+ wu->output_files = g_list_delete_link(wu->output_files,
+ wu->output_files);
+ }
+
+ if (wu->ckpt_name)
+ {
+ char *path = _DC_workDirPath(wu, wu->ckpt_name, FILE_CKPT);
+ unlink(path);
+ g_free(path);
+ g_free(wu->ckpt_name);
+ }
+
+ if (wu->workdir)
+ {
+ const char *name;
+ GDir *dir;
+ int ret;
+
+ dir = g_dir_open(wu->workdir, 0, NULL);
+ while (dir && (name = g_dir_read_name(dir)))
+ {
+ GString *str = g_string_new(wu->workdir);
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, name);
+ unlink(str->str);
+ g_string_free(str, TRUE);
+ }
+ if (dir)
+ g_dir_close(dir);
+
+ ret = rmdir(wu->workdir);
+ if (ret)
+ DC_log(LOG_WARNING, "Failed to remove WU working "
+ "directory %s: %s", wu->workdir,
+ strerror(errno));
+ g_free(wu->workdir);
+ }
+
+ g_free(wu->client_name);
+ if (wu->argv)
+ g_strfreev(wu->argv);
+ g_free(wu->tag);
+
+ g_free(wu);
+}
+
+/* Check if the logical name is not already registered */
+static int check_logical_name(DC_Workunit *wu, const char *logicalFileName)
+{
+ GList *l;
+
+ if (strchr(logicalFileName, '/') || strchr(logicalFileName, '\\'))
+ {
+ DC_log(LOG_ERR, "Illegal characters in logical file name %s",
+ logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ for (l = wu->input_files; l; l = l->next)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+ if (!strcmp(file->label, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as an "
+ "input file", logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ }
+ for (l = wu->remote_input_files; l; l = l->next)
+ {
+ DC_RemoteFile *file = (DC_RemoteFile *)l->data;
+ if (!strcmp(file->label, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as a "
+ "remote input file", logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ }
+ for (l = wu->output_files; l; l = l->next)
+ {
+ if (!strcmp((char *)l->data, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as an "
+ "output file", logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ }
+ return 0;
+}
+
+int DC_addWUInput(DC_Workunit *wu, const char *logicalFileName, const char *URL,
+ DC_FileMode fileMode, ...)
+{
+ int ret;
+ va_list ap;
+ char *workpath;
+ DC_PhysicalFile *file = NULL;
+ DC_RemoteFile *rfile = NULL;
+ int persistent_on_client = 0;
+
+ if (fileMode & DC_FILE_PERSISTENT_CLIENT)
+ {
+ persistent_on_client = 1;
+ fileMode ^= DC_FILE_PERSISTENT_CLIENT;
+ }
+ /* Sanity checks */
+ if (!wu || !logicalFileName)
+ {
+ DC_log(LOG_ERR, "%s: Missing arguments", __func__);
+ return DC_ERR_BADPARAM;
+ }
+ ret = check_logical_name(wu, logicalFileName);
+ if (ret)
+ return ret;
+
+ /* XXX Check if the wu->num_inputs + wu->num_outputs + wu->subresults
+ * does not exceed the max. number of file slots */
+
+ /* Handle remote http:// files */
+ if (fileMode == DC_FILE_REMOTE && !strncmp("http://", URL, 7))
+ {
+ va_start(ap, fileMode);
+ char *md5 = va_arg(ap, char *);
+ size_t size = va_arg(ap, size_t);
+ va_end(ap);
+
+ rfile = _DC_createRemoteFile(logicalFileName, URL, md5, size);
+ if (!rfile)
+ return DC_ERR_INTERNAL;
+
+ if (persistent_on_client)
+ {
+ rfile->persistentonclient = 1;
+ }
+
+ wu->remote_input_files = g_list_append(wu->remote_input_files, rfile);
+ wu->num_remote_inputs++;
+
+ if (wu->serialized)
+ write_wudesc(wu);
+
+ return 0;
+ }
+
+ /* Now handle local and attic files */
+ workpath = _DC_workDirPath(wu, logicalFileName, FILE_IN);
+ file = _DC_createPhysicalFile(logicalFileName, workpath);
+ g_free(workpath);
+ if (!file)
+ return DC_ERR_INTERNAL;
+
+ /* Handle remote attic:// files */
+ if (fileMode == DC_FILE_REMOTE && !strncmp("attic://", URL, 8))
+ {
+ va_start(ap, fileMode);
+ char *md5 = va_arg(ap, char *);
+ size_t size = va_arg(ap, size_t);
+ va_end(ap);
+
+ // If regular expression for the Attic file gives valid substitutions,
+ // use substitued URLs and keep the file remote
+ gchar **repl = replace_regex(URL);
+ if (repl)
+ {
+ g_strfreev(repl);
+ _DC_destroyPhysicalFile(file);
+
+ rfile = _DC_createRemoteFile(logicalFileName, URL, md5, size);
+ if (!rfile)
+ return DC_ERR_INTERNAL;
+
+ if (persistent_on_client)
+ {
+ rfile->persistentonclient = 1;
+ }
+
+ wu->remote_input_files = g_list_append(wu->remote_input_files, rfile);
+ wu->num_remote_inputs++;
+
+ if (wu->serialized)
+ write_wudesc(wu);
+
+ return 0;
+ }
+
+ char *physicalFileName = g_strrstr(URL,"/");
+ if (!physicalFileName)
+ {
+ DC_log(LOG_ERR, "URL of attic file has wrong format! URL: '%s'", URL);
+ return DC_ERR_BADPARAM;
+ }
+ physicalFileName++;
+ physicalFileName = g_strdup(physicalFileName);
+
+ char *physicalFileHashString = g_strdup_printf("%s %i\n", md5, (int)size);
+
+ DC_log(LOG_DEBUG, "Attic file details: logic: %s, url:%s, md5:%s, size:%i, file:%s, filecont:%s",
+ logicalFileName, URL, md5, (int)size, physicalFileName, physicalFileHashString);
+
+ file->physicalfilename = strdup(physicalFileName);
+ g_free(physicalFileName);
+
+ if (!physicalFileHashString)
+ {
+ DC_log(LOG_ERR, "%s: Hash of attic file "
+ "'%s' not found", __func__, logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ file->physicalfilehash = strdup(physicalFileHashString);
+ g_free(physicalFileHashString);
+ }
+ else if (fileMode == DC_FILE_REMOTE)
+ {
+ DC_log(LOG_ERR, "%s: Unsupported URL received: '%s'",
+ __func__, URL);
+ _DC_destroyPhysicalFile(file);
+ return DC_ERR_BADPARAM;
+ }
+
+ if (persistent_on_client)
+ {
+ file->persistentonclient = 1;
+ }
+
+ switch (fileMode)
+ {
+ case DC_FILE_PERSISTENT:
+ ret = link(URL, file->path);
+ if (!ret)
+ {
+ /* Remember the file mode */
+ file->mode = DC_FILE_PERSISTENT;
+ break;
+ }
+
+ DC_log(LOG_DEBUG, "Hardlinking failed for input file %s: %s; "
+ "falling back to copy", URL, strerror(errno));
+ /* Fall through */
+ case DC_FILE_REGULAR:
+ ret = _DC_copyFile(URL, file->path);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to copy the input file %s to %s",
+ URL, file->path);
+ _DC_destroyPhysicalFile(file);
+ return ret;
+ }
+ break;
+ case DC_FILE_VOLATILE:
+ ret = rename(URL, file->path);
+ if (!ret)
+ break;
+ DC_log(LOG_DEBUG, "Renaming failed for input file %s: %s; "
+ "falling back to copy/delete", URL, strerror(errno));
+ ret = _DC_copyFile(URL, file->path);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to copy the input file %s to %s",
+ URL, file->path);
+ _DC_destroyPhysicalFile(file);
+ return ret;
+ }
+ unlink(URL);
+ break;
+ case DC_FILE_REMOTE:
+ break;
+ default:
+ DC_log(LOG_ERR, "Invalid file mode %d", fileMode);
+ return DC_ERR_BADPARAM;
+ }
+
+ file->mode = fileMode;
+ wu->input_files = g_list_append(wu->input_files, file);
+ wu->num_inputs++;
+
+ if (wu->serialized)
+ write_wudesc(wu);
+
+ return 0;
+}
+
+int DC_addWUOutputExt(DC_Workunit *wu, const char *logicalFileName, int flags)
+{
+ int ret;
+
+ /* Sanity checks */
+ if (!wu || !logicalFileName)
+ {
+ DC_log(LOG_ERR, "%s: Missing arguments", __func__);
+ return DC_ERR_BADPARAM;
+ }
+ ret = check_logical_name(wu, logicalFileName);
+ if (ret)
+ return ret;
+
+ if (flags & DC_OUTFILE_OPTIONAL)
+ g_hash_table_replace(wu->is_optional,
+ g_strdup(logicalFileName),
+ (void*)1);
+
+ /* XXX Check if the wu->num_inputs + wu->num_outputs + wu->subresults
+ * does not exceed the max. number of file slots */
+
+ wu->output_files = g_list_append(wu->output_files,
+ g_strdup(logicalFileName));
+ wu->num_outputs++;
+
+ if (wu->serialized)
+ write_wudesc(wu);
+
+ return 0;
+}
+int DC_addWUOutput(DC_Workunit *wu, const char *logicalFileName)
+{
+ return DC_addWUOutputExt(wu, logicalFileName, 0);
+}
+
+/* This function installs input files to the Boinc download directory */
+static int install_input_files(DC_Workunit *wu)
+{
+ char *dest;
+ GList *l;
+ int ret;
+
+ for (l = wu->input_files; l; l = l->next)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+
+ /* This also creates the directory if needed */
+ dest = get_input_download_path(wu, file->label, file->physicalfilename);
+ /* By creating the hard link ourselves we prevent BOINC from
+ * copying the file later */
+ ret = link(file->path, dest);
+ if (ret)
+ {
+ if (file->physicalfilename)
+ {
+ if (errno == EEXIST)
+ {
+ DC_log(LOG_NOTICE, "File %s already exists under Boinc at %s. Skipping...",file->physicalfilename,dest);
+ }
+ else if (errno == ENOENT)
+ {
+ FILE *f;
+ f = fopen(dest, "w");
+ if (!f)
+ {
+ DC_log(LOG_ERR, "Cannot create file %s: %s",dest,strerror(errno));
+ g_free(dest);
+ return DC_ERR_INTERNAL;
+ }
+ fprintf(f, "This file has been generated by DC-API.\nOriginal location of this file:%s", dest);
+ fclose(f);
+ DC_log(LOG_DEBUG, "File %s has been created by DC-API under Boinc.",dest);
+ }
+ else
+ {
+ DC_log(LOG_ERR, "---Failed to install file %s to the "
+ "Boinc download directory at %s: %s",
+ file->path, dest, strerror(errno));
+ g_free(dest);
+ return DC_ERR_INTERNAL;
+ }
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Failed to install file %s to the "
+ "Boinc download directory at %s: %s",
+ file->path, dest, strerror(errno));
+ g_free(dest);
+ return DC_ERR_INTERNAL;
+ }
+ }
+ if (file->physicalfilehash)
+ {
+ const char *hashFileExt=".md5";
+ GString *hashFile;
+ FILE *f;
+
+ hashFile = g_string_new(dest);
+ g_string_append(hashFile, hashFileExt);
+
+ f = fopen(hashFile->str, "w");
+ if (!f)
+ {
+ if (errno == EEXIST && file->physicalfilename)
+ {
+ DC_log(LOG_NOTICE, "File %s already exists under Boinc. Skipping...",hashFile->str);
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Failed to create hash file %s: %s", hashFile->str,strerror(errno));
+ g_string_free(hashFile, TRUE);
+ g_free(dest);
+ return DC_ERR_INTERNAL;
+ }
+ }
+ else
+ {
+ fprintf(f, "%s", file->physicalfilehash);
+ fclose(f);
+ DC_log(LOG_DEBUG, "Hash file \"%s\" has been created with content \"%s\".", hashFile->str, file->physicalfilehash);
+ }
+
+ g_string_free(hashFile, TRUE);
+ }
+ g_free(dest);
+ }
+
+ /* During resume, we have to install the checkpoint file as well */
+ if (wu->ckpt_name)
+ {
+ char *src;
+
+ src = _DC_workDirPath(wu, wu->ckpt_name, FILE_CKPT);
+ dest = get_input_download_path(wu, wu->ckpt_name, NULL);
+ ret = link(src, dest);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to install file %s to the "
+ "Boinc download directory at %s: %s",
+ src, dest, strerror(errno));
+ g_free(src);
+ g_free(dest);
+ return DC_ERR_INTERNAL;
+ }
+ g_free(src);
+ g_free(dest);
+ }
+
+ return 0;
+}
+
+static void fill_wu_params(const DC_Workunit *wu, struct wu_params *params)
+{
+ int min_quorum = 0;
+ memset(params, 0, sizeof(*params));
+
+ params->rsc_fpops_est = DC_getClientCfgDouble(wu->client_name,
+ CFG_FPOPS_EST, 1e13, TRUE);
+ params->rsc_fpops_bound = DC_getClientCfgDouble(wu->client_name,
+ CFG_MAXFPOPS, 1e15, TRUE);
+ params->rsc_memory_bound = DC_getClientCfgDouble(wu->client_name,
+ CFG_MAXMEMUSAGE, 128 << 20, TRUE);
+ params->rsc_disk_bound = DC_getClientCfgDouble(wu->client_name,
+ CFG_MAXDISKUSAGE, 64 << 20, TRUE);
+ params->delay_bound = DC_getClientCfgInt(wu->client_name,
+ CFG_DELAYBOUND, 4 * 7 * 24 * 60 * 60, TRUE);
+
+ min_quorum = DC_getClientCfgInt(wu->client_name,
+ CFG_MIN_QUORUM, -1, FALSE);
+
+ if (min_quorum != -1)
+ {
+ params->min_quorum = min_quorum;
+ if (params->min_quorum < 1)
+ params->min_quorum = 1;
+
+ params->target_nresults = DC_getClientCfgInt(wu->client_name,
+ CFG_TARGET_NRESULTS, 1, FALSE);
+ if (params->target_nresults < params->min_quorum)
+ params->target_nresults = params->min_quorum;
+
+ params->max_error_results = DC_getClientCfgInt(wu->client_name,
+ CFG_MAX_ERROR_RESULTS, 0, FALSE);
+ if (params->max_error_results < 0)
+ params->max_error_results = 0;
+
+ params->max_total_results = DC_getClientCfgInt(wu->client_name,
+ CFG_MAX_TOTAL_RESULTS, 1, FALSE);
+ if (params->max_total_results < params->min_quorum)
+ params->max_total_results = params->min_quorum;
+
+ params->max_success_results = DC_getClientCfgInt(wu->client_name,
+ CFG_MAX_SUCCESS_RESULTS, 1, FALSE);
+ if (params->max_success_results < params->min_quorum)
+ params->max_success_results = params->min_quorum;
+ } else {
+ params->min_quorum = DC_getClientCfgInt(wu->client_name,
+ CFG_REDUNDANCY, 1, TRUE);
+ if (params->min_quorum < 1)
+ params->min_quorum = 1;
+
+ params->target_nresults = params->min_quorum;
+
+ /* Calculate with logarithmic error */
+ params->max_error_results = params->target_nresults +
+ (int)log(params->min_quorum + 2) + 1;
+ params->max_total_results = (params->target_nresults +
+ (int)log(params->min_quorum + 2)) * 2;
+ params->max_success_results = params->target_nresults +
+ (int)log(params->min_quorum + 2) + 1;
+ }
+}
+
+static void append_wu_file_info(GString *tmpl, int idx, DC_PhysicalFile *file)
+{
+ g_string_append(tmpl, "<file_info>\n");
+ g_string_append_printf(tmpl, "\t<number>%d</number>\n", idx);
+ if (file != NULL && file->persistentonclient == 1)
+ {
+ g_string_append(tmpl, "\t<sticky/>\n");
+ g_string_append(tmpl, "\t<no_delete/>\n");
+ }
+ g_string_append(tmpl, "</file_info>\n");
+}
+
+static void append_wu_remote_file_info(GString *tmpl, int idx, DC_RemoteFile *file)
+{
+ g_string_append(tmpl, "<file_info>\n");
+ g_string_append_printf(tmpl, "\t<number>%d</number>\n", idx);
+ if (file != NULL && file->persistentonclient == 1)
+ {
+ g_string_append(tmpl, "\t<sticky/>\n");
+ g_string_append(tmpl, "\t<no_delete/>\n");
+ }
+ gchar **alts = replace_regex(file->url);
+ if (!alts)
+ {
+ g_string_append_printf(tmpl, "\t<url>%s</url>\n", file->url);
+ }
+ else
+ {
+ int i;
+ for (i = 0; alts[i]; i++)
+ g_string_append_printf(tmpl, "\t<url>%s</url>\n", alts[i]);
+ g_strfreev(alts);
+ }
+ g_string_append_printf(tmpl, "\t<md5_cksum>%s</md5_cksum>\n", file->remotefilehash);
+ g_string_append_printf(tmpl, "\t<nbytes>%lu</nbytes>\n", file->remotefilesize);
+ g_string_append(tmpl, "</file_info>\n");
+}
+
+static void append_wu_file_ref(GString *tmpl, int idx, const char *label)
+{
+ g_string_append(tmpl, "\t<file_ref>\n");
+ g_string_append_printf(tmpl, "\t\t<file_number>%d</file_number>\n", idx);
+ g_string_append_printf(tmpl, "\t\t<open_name>%s</open_name>\n", label);
+ g_string_append(tmpl, "\t</file_ref>\n");
+}
+
+static char *generate_wu_template(DC_Workunit *wu)
+{
+ struct wu_params params;
+ GString *tmpl, *cmd;
+ int i, num_inputs, num_remote_inputs;
+ GList *l;
+ char *p;
+
+ fill_wu_params(wu, ¶ms);
+
+ /* Generate the file info block */
+ num_inputs = wu->num_inputs;
+ num_remote_inputs = wu->num_remote_inputs;
+ if (wu->ckpt_name)
+ num_inputs++;
+
+ tmpl = g_string_new("");
+ for (i = 0, l = wu->input_files; l && i < num_inputs; l = l->next, i++)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+ append_wu_file_info(tmpl, i, file);
+ }
+
+ for (l = wu->remote_input_files; l && i < num_inputs + num_remote_inputs;
+ l = l->next, i++)
+ {
+ DC_RemoteFile *file = (DC_RemoteFile *)l->data;
+ append_wu_remote_file_info(tmpl, i, file);
+ }
+ /* Checkpoint file, if exists */
+ if (wu->ckpt_name)
+ append_wu_file_info(tmpl, i++, NULL);
+
+ /* Generate the workunit description */
+ g_string_append(tmpl, "<workunit>\n");
+ for (i = 0, l = wu->input_files; l && i < num_inputs;
+ l = l->next, i++)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+ append_wu_file_ref(tmpl, i, file->label);
+ }
+
+ for (l = wu->remote_input_files; l && i < num_inputs + num_remote_inputs;
+ l = l->next, i++)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+ append_wu_file_ref(tmpl, i, file->label);
+ }
+
+ /* Checkpoint file */
+ if (wu->ckpt_name)
+ append_wu_file_ref(tmpl, i++, CKPT_LABEL_IN);
+
+ /* Concatenate the shell-quoted argv elements into a single string */
+ cmd = g_string_new("");
+ for (i = 0; i < wu->argc; i++)
+ {
+ if (i)
+ g_string_append_c(cmd, ' ');
+ g_string_append(cmd, wu->argv[i]);
+ }
+ g_string_append_printf(tmpl,
+ "\t<command_line>%s</command_line>\n", cmd->str);
+ g_string_free(cmd, TRUE);
+
+ g_string_append_printf(tmpl,
+ "\t<rsc_fpops_est>%g</rsc_fpops_est>\n", params.rsc_fpops_est);
+ g_string_append_printf(tmpl,
+ "\t<rsc_fpops_bound>%g</rsc_fpops_bound>\n",
+ params.rsc_fpops_bound);
+ g_string_append_printf(tmpl,
+ "\t<rsc_memory_bound>%g</rsc_memory_bound>\n",
+ params.rsc_memory_bound);
+ g_string_append_printf(tmpl,
+ "\t<rsc_disk_bound>%g</rsc_disk_bound>\n",
+ params.rsc_disk_bound);
+ g_string_append_printf(tmpl,
+ "\t<delay_bound>%d</delay_bound>\n", params.delay_bound);
+ g_string_append_printf(tmpl,
+ "\t<min_quorum>%d</min_quorum>\n", params.min_quorum);
+ g_string_append_printf(tmpl,
+ "\t<target_nresults>%d</target_nresults>\n",
+ params.target_nresults);
+ g_string_append_printf(tmpl,
+ "\t<max_error_results>%d</max_error_results>\n",
+ params.max_error_results);
+ g_string_append_printf(tmpl,
+ "\t<max_success_results>%d</max_success_results>\n",
+ params.max_success_results);
+ g_string_append_printf(tmpl,
+ "\t<max_total_results>%d</max_total_results>\n",
+ params.max_total_results);
+
+ g_string_append(tmpl, "</workunit>\n");
+
+ p = tmpl->str;
+ g_string_free(tmpl, FALSE);
+ return p;
+}
+
+static void append_result_file_info(GString *tmpl, int idx, int auto_upload,
+ double max_output)
+{
+ g_string_append(tmpl, "<file_info>\n");
+ g_string_append_printf(tmpl, "\t<name><OUTFILE_%d/></name>\n", idx);
+ g_string_append(tmpl, "\t<generated_locally/>\n");
+ if (auto_upload)
+ g_string_append(tmpl, "\t<upload_when_present/>\n");
+ g_string_append_printf(tmpl, "\t<max_nbytes>%g</max_nbytes>\n", max_output);
+
+ gchar *uploadURL = DC_getCfgStr(CFG_UPLOADURL);
+ if (!uploadURL)
+ g_string_append(tmpl, "\t<url><UPLOAD_URL/></url>\n");
+ else
+ {
+ g_string_append_printf(tmpl, "\t<url>%s</url>\n", uploadURL);
+ free(uploadURL);
+ }
+
+ g_string_append(tmpl, "</file_info>\n");
+}
+
+static void append_result_file_ref(GString *tmpl, int idx, int optional, const char *fmt, ...)
+ G_GNUC_PRINTF(4, 5);
+static void append_result_file_ref(GString *tmpl, int idx, int optional, const char *fmt, ...)
+{
+ char buf[1024];
+ va_list ap;
+
+ g_string_append(tmpl, "\t<file_ref>\n");
+ g_string_append_printf(tmpl, "\t\t<file_name><OUTFILE_%d/></file_name>\n", idx);
+ g_string_append(tmpl, "\t\t<open_name>");
+
+ va_start(ap, fmt);
+ vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+ g_string_append(tmpl, buf);
+
+ g_string_append(tmpl, "</open_name>\n");
+ if (optional)
+ g_string_append(tmpl, "<optional>1</optional>");
+ g_string_append(tmpl, "\t</file_ref>\n");
+}
+
+static char *generate_result_template(DC_Workunit *wu)
+{
+ unsigned char digest[SHA_DIGEST_LENGTH];
+ int i, file_cnt;
+ // support output files larger than 2GB
+ double max_output_size;
+ GString *path, *tmpl;
+ char *file, *cfgval;
+ SHA_CTX sha;
+ GList *l;
+
+ cfgval = DC_getCfgStr(CFG_PROJECTROOT);
+ if (!cfgval)
+ {
+ /* Should never happen here */
+ DC_log(LOG_ERR, "Internal error: project root is not set");
+ return NULL;
+ }
+
+ max_output_size = DC_getClientCfgDouble(wu->client_name, CFG_MAXOUTPUT,
+ 256 * 1024, TRUE);
+ file_cnt = 0;
+
+ tmpl = g_string_new("");
+
+ /* Slots for output files */
+ for (i = 0; i < wu->num_outputs; i++)
+ append_result_file_info(tmpl, file_cnt++, TRUE, max_output_size);
+ /* Slots for subresults - no automatic uploading */
+ for (i = 0; i < wu->subresults; i++)
+ append_result_file_info(tmpl, file_cnt++, FALSE, max_output_size);
+
+ g_string_append(tmpl, "<result>\n");
+ file_cnt = 0;
+ /* The output templates */
+ for (l = wu->output_files; l; l = l->next)
+ {
+ char *lname = (char*)l->data;
+ int optional = 0 != g_hash_table_lookup(wu->is_optional, lname);
+ append_result_file_ref(tmpl, file_cnt++, optional, "%s", lname);
+ }
+
+ /* The subresult templates */
+ for (i = 0; i < wu->subresults; i++)
+ append_result_file_ref(tmpl, file_cnt++, 0, "%s%d", SUBRESULT_PFX, i);
+
+ g_string_append(tmpl, "</result>\n");
+
+ /* Use the hash of the template's contents as the file name,
+ * so we can avoid generating lots of files with the same
+ * content */
+ SHA1_Init(&sha);
+ SHA1_Update(&sha, tmpl->str, strlen(tmpl->str));
+ SHA1_Final(digest, &sha);
+
+ path = g_string_new(cfgval);
+ g_string_append_printf(path, "%ctemplates%cdcapi_",
+ G_DIR_SEPARATOR, G_DIR_SEPARATOR);
+ for (i = 0; i < SHA_DIGEST_LENGTH; i += 2)
+ g_string_append_printf(path, "%02x%02x", digest[i], digest[i + 1]);
+ g_string_append(path, ".xml");
+
+ if (access(path->str, R_OK))
+ {
+ FILE *f = fopen(path->str, "w");
+ if (!f)
+ {
+ DC_log(LOG_ERR, "Failed to create result template %s: %s",
+ path->str, strerror(errno));
+ g_string_free(tmpl, TRUE);
+ g_string_free(path, TRUE);
+ free(cfgval);
+ return NULL;
+ }
+
+ fprintf(f, "%s", tmpl->str);
+ fclose(f);
+ }
+
+ file = g_strdup(path->str + strlen(cfgval) + 1);
+ free(cfgval);
+ g_string_free(path, TRUE);
+ return file;
+}
+
+static int lookup_appid(DC_Workunit *wu)
+{
+ char *query;
+ DB_APP app;
+
+ query = g_strdup_printf("WHERE name = '%s'", wu->client_name);
+ if (app.lookup(query))
+ {
+ DC_log(LOG_ERR, "Failed to look up application %s",
+ wu->client_name);
+ g_free(query);
+ return -1;
+ }
+ g_free(query);
+ return app.get_id();
+}
+
+char *_DC_getWUName(const DC_Workunit *wu)
+{
+ char uuid_str[37];
+
+ uuid_unparse_lower(wu->uuid, uuid_str);
+ if (wu->tag)
+ return g_strdup_printf("%s_%s_%s", project_uuid_str, uuid_str,
+ wu->tag);
+ else
+ return g_strdup_printf("%s_%s", project_uuid_str, uuid_str);
+}
+
+int DC_submitWU(DC_Workunit *wu)
+{
+ char *wu_template, *result_template_file, **infiles, *result_path,
+ *name, *cfgval;
+ struct wu_params params;
+ int i, ret, ninputs;
+ DB_WORKUNIT dbwu;
+ GList *l;
+
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ ret = install_input_files(wu);
+ if (ret)
+ return ret;
+
+ dbwu.clear();
+
+ name = _DC_getWUName(wu);
+ snprintf(dbwu.name, sizeof(dbwu.name), "%s", name);
+ g_free(name);
+
+ dbwu.appid = lookup_appid(wu);
+ if (dbwu.appid == -1)
+ return DC_ERR_DATABASE;
+
+ fill_wu_params(wu, ¶ms);
+ dbwu.rsc_fpops_est = params.rsc_fpops_est;
+ dbwu.rsc_fpops_bound = params.rsc_fpops_bound;
+ dbwu.rsc_memory_bound = params.rsc_memory_bound;
+ dbwu.rsc_disk_bound = params.rsc_disk_bound;
+ dbwu.delay_bound = params.delay_bound;
+
+ dbwu.priority = wu->priority;
+ dbwu.batch = wu->batch;
+
+ wu_template = generate_wu_template(wu);
+ result_template_file = generate_result_template(wu);
+ if (!result_template_file)
+ {
+ g_free(wu_template);
+ return DC_ERR_INTERNAL;
+ }
+ cfgval = DC_getCfgStr(CFG_PROJECTROOT);
+ if (!cfgval)
+ {
+ g_free(wu_template);
+ g_free(result_template_file);
+ errno = ENOMEM;
+ return DC_ERR_SYSTEM;
+ }
+ result_path = g_strdup_printf("%s%c%s", cfgval, G_DIR_SEPARATOR,
+ result_template_file);
+ free(cfgval);
+
+ /* Create the input file name array as required by create_work() */
+ ninputs = wu->num_inputs + wu->num_remote_inputs;
+ if (wu->ckpt_name)
+ ninputs++;
+
+ infiles = g_new0(char *, ninputs + 1);
+ for (l = wu->input_files, i = 0; l && i < wu->num_inputs;
+ l = l->next, i++)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+ infiles[i] = get_input_download_name(wu, file->label, file->physicalfilename);
+ }
+ for (l = wu->remote_input_files; l && i < wu->num_remote_inputs+wu->num_inputs;
+ l = l->next, i++)
+ {
+ DC_RemoteFile *file = (DC_RemoteFile *)l->data;
+ infiles[i] = g_strdup_printf("%s_%s", file->label, md5_string(file->url).c_str());
+ }
+ if (wu->ckpt_name)
+ infiles[i++] = get_input_download_name(wu, wu->ckpt_name, NULL);
+ /* Terminator so we can use g_strfreev() later */
+ infiles[i] = NULL;
+
+ ret = create_work(dbwu, wu_template, result_template_file, result_path,
+ const_cast<const char **>(infiles), ninputs, dc_boinc_config);
+ g_free(result_path);
+ g_strfreev(infiles);
+ g_free(result_template_file);
+ g_free(wu_template);
+
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to create Boinc work unit");
+ return DC_ERR_DATABASE;
+ }
+
+ wu->state = DC_WU_RUNNING;
+
+ wu->submitted = TRUE;
+
+ _DC_getDBid(wu);
+
+ write_wudesc(wu);
+
+ return 0;
+}
+
+char *DC_serializeWU(DC_Workunit *wu)
+{
+ char id[2 * 36 + 2];
+
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return NULL;
+ }
+
+ if (write_wudesc(wu))
+ return NULL;
+
+ wu->serialized = TRUE;
+
+ strncpy(id, project_uuid_str, sizeof(id));
+ id[36] = '_';
+ uuid_unparse_lower(wu->uuid, id + 37);
+ return strdup(id);
+}
+
+DC_Workunit *DC_deserializeWU(const char *buf)
+{
+ if (!wu_table)
+ {
+ DC_log(LOG_ERR, "%s: Library is not initialized", __func__);
+ return NULL;
+ }
+ if (!buf)
+ {
+ DC_log(LOG_ERR, "%s: No serialized data", __func__);
+ return NULL;
+ }
+
+ return _DC_getWUByName(buf);
+}
+
+static DC_Workunit *load_from_boinc_db(const uuid_t uuid)
+{
+ char uuid_str[37], *query, *result_template, *cfgval, *filename;
+ GList *output_files;
+ DB_WORKUNIT db_wu;
+ DC_Workunit *wu;
+ DB_APP app;
+ int ret;
+
+ uuid_unparse_lower(uuid, uuid_str);
+ query = g_strdup_printf("WHERE name LIKE '%s\\_%s%%'", project_uuid_str,
+ uuid_str);
+ ret = db_wu.lookup(query);
+ g_free(query);
+ if (ret)
+ {
+ DC_log(LOG_WARNING, "Could not load WU %s_%s from the BOINC "
+ "database", project_uuid_str, uuid_str);
+ return NULL;
+ }
+
+ ret = app.lookup_id(db_wu.appid);
+ if (ret)
+ {
+ DC_log(LOG_WARNING, "Could not find application ID %d",
+ db_wu.appid);
+ return NULL;
+ }
+
+ cfgval = DC_getCfgStr(CFG_PROJECTROOT);
+ if (!cfgval)
+ {
+ /* Should never happen here */
+ DC_log(LOG_ERR, "Internal error: project root is not set");
+ return NULL;
+ }
+
+ filename = g_strdup_printf("%s%c%s", cfgval, G_DIR_SEPARATOR,
+ db_wu.result_template_file);
+ free(cfgval);
+ ret = g_file_get_contents(filename, &result_template, NULL, NULL);
+ if (!ret)
+ {
+ DC_log(LOG_ERR, "Result template file %s is missing", filename);
+ g_free(filename);
+ return NULL;
+ }
+ g_free(filename);
+
+ wu = alloc_wu();
+ wu->client_name = g_strdup(app.name);
+ memcpy(wu->uuid, uuid, sizeof(wu->uuid));
+
+ /* If the WU is in the database then it was submitted... */
+ wu->submitted = TRUE;
+
+ if (strlen(db_wu.name) > 74)
+ wu->tag = g_strdup(db_wu.name + 74);
+
+ /* Always create the WU's work dir */
+ wu->workdir = get_workdir(wu->uuid, TRUE);
+ if (!wu->workdir)
+ {
+ DC_destroyWU(wu);
+ g_free(result_template);
+ return NULL;
+ }
+
+ output_files = _DC_parseFileRefs(result_template, NULL);
+ g_free(result_template);
+ if (!output_files)
+ {
+ DC_log(LOG_ERR, "Failed to parse the output files for WU %s_%s",
+ project_uuid_str, uuid_str);
+ DC_destroyWU(wu);
+ return NULL;
+ }
+
+ while (output_files)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)output_files->data;
+
+ DC_addWUOutput(wu, file->label);
+ _DC_destroyPhysicalFile(file);
+ output_files = g_list_delete_link(output_files, output_files);
+ }
+
+ /* We may no longer have the input files, this WU can not be suspended */
+ wu->nosuspend = TRUE;
+
+ g_hash_table_insert(wu_table, wu->uuid, wu);
+ ++num_wus;
+
+ _DC_updateWUState(wu);
+
+ return wu;
+}
+
+static DC_Workunit *load_from_disk(const uuid_t uuid)
+{
+ GMarkupParseContext *ctx;
+ struct parser_state pctx;
+ char *workdir, buf[256];
+ DC_Workunit *wu;
+ GError *error = NULL;
+ FILE *f;
+
+ workdir = get_workdir(uuid, FALSE);
+ if (!g_file_test(workdir, G_FILE_TEST_IS_DIR))
+ {
+ g_free(workdir);
+ return NULL;
+ }
+
+ wu = alloc_wu();
+ wu->workdir = workdir;
+ memcpy(wu->uuid, uuid, sizeof(wu->uuid));
+
+ f = open_workdir_file(wu, WU_DESC_FILE, FILE_DCAPI, "r");
+ if (!f)
+ {
+ DC_destroyWU(wu);
+ return NULL;
+ }
+
+ memset(&pctx, 0, sizeof(pctx));
+ pctx.wu = wu;
+ ctx = g_markup_parse_context_new(&wudesc_parser, (GMarkupParseFlags)0,
+ &pctx, NULL);
+ while (fgets(buf, sizeof(buf), f))
+ {
+ if (!g_markup_parse_context_parse(ctx, buf, strlen(buf),
+ &error))
+ goto error;
+ }
+ if (!g_markup_parse_context_end_parse(ctx, &error))
+ goto error;
+
+ g_markup_parse_context_free(ctx);
+ fclose(f);
+
+ g_hash_table_insert(wu_table, wu->uuid, wu);
+ ++num_wus;
+
+ _DC_updateWUState(wu);
+
+ return wu;
+
+error:
+ g_markup_parse_context_free(ctx);
+ fclose(f);
+ DC_destroyWU(wu);
+ DC_log(LOG_ERR, "Failed to parse WU description: %s",
+ error->message);
+ g_error_free(error);
+ return NULL;
+}
+
+DC_Workunit *_DC_getWUByName(const char *name)
+{
+ DC_Workunit *wu;
+ char *uuid_str;
+ uuid_t uuid;
+ int ret;
+
+ /* Check if the WU belongs to this application */
+ uuid_str = g_strndup(name, 36);
+ ret = uuid_parse(uuid_str, uuid);
+ g_free(uuid_str);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "WU name '%s' contains illegal UUID", name);
+ return NULL;
+ }
+
+ if (uuid_compare(uuid, project_uuid))
+ {
+ DC_log(LOG_WARNING, "WU '%s' does not belong to this "
+ "application", name);
+ return NULL;
+ }
+
+ /* WU name syntax: <uuid> '_' <uuid> [ '_' <tag> ] */
+ if (name[36] != '_' || (strlen(name) > 73 && name[73] != '_'))
+ {
+ DC_log(LOG_ERR, "Illegal WU name syntax in '%s'", name);
+ return NULL;
+ }
+
+ /* Check the WU's UUID */
+ uuid_str = g_strndup(name + 37, 36);
+ ret = uuid_parse(uuid_str, uuid);
+ g_free(uuid_str);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "WU name '%s' contains illegal UUID", name);
+ return NULL;
+ }
+
+ wu = (DC_Workunit *)g_hash_table_lookup(wu_table, uuid);
+ if (wu)
+ return wu;
+ wu = load_from_disk(uuid);
+ if (wu)
+ return wu;
+ return load_from_boinc_db(uuid);
+}
+
+static void count_ready(void *key, void *value, void *ptr)
+{
+ DC_Workunit *wu = (DC_Workunit *)value;
+ int *count = (int *)ptr;
+
+ if (wu->state == DC_WU_READY)
+ ++(*count);
+}
+
+int DC_getWUNumber(DC_WUState state)
+{
+ DB_BASE db("", &boinc_db);
+ int val, ret;
+ char *query;
+
+ switch (state)
+ {
+ case DC_WU_READY:
+ val = 0;
+ g_hash_table_foreach(wu_table, count_ready, &val);
+ return val;
+ case DC_WU_RUNNING:
+ query = g_strdup_printf("SELECT COUNT(DISTINCT wu.id) "
+ "FROM result res FORCE INDEX(ind_res_st), workunit wu "
+ "WHERE res.workunitid = wu.id AND "
+ "wu.name LIKE '%s\\_%%' AND "
+ "(res.server_state = %d OR res.server_state = %d)",
+ project_uuid_str, RESULT_SERVER_STATE_UNSENT,
+ RESULT_SERVER_STATE_IN_PROGRESS);
+ ret = db.get_integer(query, val);
+ g_free(query);
+ if (ret)
+ return -1;
+ return val;
+ case DC_WU_FINISHED:
+ query = g_strdup_printf("SELECT COUNT(*) "
+ "FROM workunit wu WHERE "
+ "wu.name LIKE '%s\\_%%' AND "
+ "wu.assimilate_state = %d",
+ project_uuid_str, ASSIMILATE_READY);
+ ret = db.get_integer(query, val);
+ g_free(query);
+ if (ret)
+ return -1;
+ return val;
+ case DC_WU_ABORTED:
+ query = g_strdup_printf("SELECT COUNT(*) "
+ "FROM workunit wu WHERE "
+ "wu.name LIKE '%s\\_%%' AND "
+ "wu.error_mask != 0",
+ project_uuid_str);
+ ret = db.get_integer(query, val);
+ g_free(query);
+ if (ret)
+ return -1;
+ return val;
+ case DC_WU_SUSPENDED:
+ /* XXX */
+ case DC_WU_UNKNOWN:
+ default:
+ return -1;
+ }
+}
+
+char *DC_getWUTag(const DC_Workunit *wu)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return NULL;
+ }
+
+ return strdup(wu->tag);
+}
+
+char *DC_getWUId(const DC_Workunit *wu)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return NULL;
+ }
+
+ if (wu->db_id)
+ return g_strdup_printf("%i",wu->db_id);
+ else
+ return NULL;
+}
+
+int DC_setWUPriority(DC_Workunit *wu, int priority)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ wu->priority = priority;
+ if (wu->serialized)
+ write_wudesc(wu);
+ return 0;
+}
+
+int DC_setWUBatch(DC_Workunit *wu, int batch)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ wu->batch = batch;
+ if (wu->serialized)
+ write_wudesc(wu);
+ return 0;
+}
+
+
+DC_WUState DC_getWUState(DC_Workunit *wu)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_WU_UNKNOWN;
+ }
+
+ return wu->state;
+}
+
+int DC_suspendWU(DC_Workunit *wu)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+
+ if (wu->nosuspend)
+ {
+ char *name = _DC_getWUName(wu);
+ DC_log(LOG_ERR, "Work unit %s can not be suspended", name);
+ g_free(name);
+ return DC_ERR_BADPARAM;
+ }
+
+ return DC_ERR_NOTIMPL;
+}
+
+int DC_resumeWU(DC_Workunit *wu)
+{
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "%s: Missing WU", __func__);
+ return DC_ERR_BADPARAM;
+ }
+ if (!wu->suspended)
+ {
+ char *name = _DC_getWUName(wu);
+ DC_log(LOG_ERR, "Work unit %s is not suspended, cannot resume", name);
+ g_free(name);
+ return DC_ERR_BADPARAM;
+ }
+
+ return DC_ERR_NOTIMPL;
+}
+
+int _DC_initWUs(void)
+{
+ wu_table = g_hash_table_new_full(wu_uuid_hash, wu_uuid_equal, NULL, NULL);
+ return 0;
+}
diff --git a/dcapi/cf/boinc.m4 b/dcapi/cf/boinc.m4
new file mode 100644
index 0000000..3d04cdc
--- /dev/null
+++ b/dcapi/cf/boinc.m4
@@ -0,0 +1,108 @@
+dnl
+dnl Check for BOINC components
+dnl
+
+dnl
+dnl SZDG_BOINC_COMMON
+dnl
+dnl Check for components common for the client and server API
+dnl
+AC_DEFUN([SZDG_BOINC_COMMON], [
+ AC_ARG_WITH([boinc], AS_HELP_STRING([--with-boinc@<:@=DIR@:>@],
+ [Use BOINC (compiled or installed in DIR)]),, [with_boinc=auto])
+
+ no_boinc=
+ if test "$with_boinc" = no; then
+ no_boinc=yes
+ fi
+
+ if test "$no_boinc" != yes; then
+ case "$with_boinc" in
+ yes|auto)
+ BOINC_INCLUDES="/usr/include/boinc"
+ BOINC_CPPFLAGS="-I/usr/include/boinc"
+ BOINC_LDFLAGS=
+ ;;
+ *)
+ # Check if this is an installed or just a compiled-in-place
+ # version
+ if test -d "$with_boinc/sched"; then
+ BOINC_CPPFLAGS="-I$with_boinc/api -I$with_boinc/lib -I$with_boinc/sched -I$with_boinc/tools -I$with_boinc/db"
+ BOINC_LDFLAGS="-L$with_boinc/api -L$with_boinc/lib -L$with_boinc/sched"
+ else
+ BOINC_CPPFLAGS="-I$with_boinc/include/boinc"
+ BOINC_LDFLAGS="-L$with_boinc/lib"
+ fi
+ ;;
+ esac
+ fi
+
+ if test "$no_boinc" != yes; then
+ BOINC_COMMON_LIBS="-lboinc -lcrypto"
+ fi
+
+ AC_SUBST([BOINC_CPPFLAGS])
+ AC_SUBST([BOINC_LDFLAGS])
+])
+
+dnl
+dnl SZDG_BOINC_SERVER
+dnl
+dnl Check for BOINC server-side API
+dnl
+AC_DEFUN([SZDG_BOINC_SERVER], [
+ AC_REQUIRE([SZDG_BOINC_COMMON])
+
+ dnl
+ dnl First check for MySQL
+ dnl
+ AC_PATH_PROG([MYSQL_CONFIG], [mysql_config])
+ if test "$MYSQL_CONFIG" = ""; then
+ no_boinc=yes
+ else
+ MYSQL_CPPFLAGS="`$MYSQL_CONFIG --include`"
+ MYSQL_LIBS=`$MYSQL_CONFIG --libs | sed -e 's,-L/usr/lib , ,'`
+ fi
+ AC_SUBST([MYSQL_CPPFLAGS])
+ AC_SUBST([MYSQL_LIBS])
+
+ if test "$no_boinc" != yes; then
+ BOINC_SERVER_CPPFLAGS="$BOINC_CPPFLAGS $MYSQL_CPPFLAGS"
+ BOINC_SERVER_LIBS="-lsched $BOINC_COMMON_LIBS -lstdc++ $MYSQL_LIBS"
+ fi
+
+ AC_SUBST([BOINC_SERVER_CPPFLAGS])
+ AC_SUBST([BOINC_SERVER_LIBS])
+
+ if test "$with_boinc" = yes && test "$no_boinc" = yes; then
+ AC_MSG_ERROR([BOINC development environment was not found])
+ fi
+])
+
+dnl
+dnl SZDG_BOINC_CLIENT
+dnl
+dnl Check for BOINC client-side API
+dnl
+AC_DEFUN([SZDG_BOINC_CLIENT], [
+ AC_REQUIRE([SZDG_BOINC_COMMON])
+
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $BOINC_CPPFLAGS"
+ save_LDFLAGS="$LDFLAGS $BOINC_LDFLAGS"
+ LDFLAGS="$LDFLAGS $BOINC_LDFLAGS"
+ AC_CHECK_HEADERS([boinc_api.h filesys.h diagnostics.h],, [no_boinc=yes])
+ AC_LANG_PUSH([C++])
+ AC_CHECK_LIB([boinc_api], [boinc_init], [true], [no_boinc=yes],
+ [-lboinc -lm -pthread])
+ AC_LANG_POP([C++])
+ LDFLAGS="$save_LDFLAGS"
+ CPPFLAGS="$save_CPPFLAGS"
+
+ if test "$with_boinc" = yes && test "$no_boinc" = yes; then
+ AC_MSG_ERROR([BOINC development environment was not found])
+ fi
+
+ BOINC_CLIENT_LIBS="-lboinc_api $BOINC_COMMON_LIBS -lstdc++ -lm -pthread"
+ AC_SUBST([BOINC_CLIENT_LIBS])
+])
diff --git a/dcapi/cf/java.m4 b/dcapi/cf/java.m4
new file mode 100644
index 0000000..10f361c
--- /dev/null
+++ b/dcapi/cf/java.m4
@@ -0,0 +1,96 @@
+dnl
+dnl MON_PKG_JAVA
+dnl
+dnl Check for a Java SDK
+dnl
+AC_DEFUN([MON_PKG_JAVA], [
+ AC_ARG_ENABLE([java], AS_HELP_STRING([--enable-java],
+ [Enable Java support @<:@auto@:>@]),
+ [enable_java=$enableval],
+ [enable_java=auto])
+
+ AC_ARG_WITH([java_includes], AS_HELP_STRING([--with-java-includes=DIR],
+ [Where to find jni.h]),
+ [JAVA_INC=-I$withval],
+ [JAVA_INC=])
+
+ no_java=
+
+ # Check the value of --enable-java
+ if test "$enable_shared" = no; then
+ # The JNI module cannot be built if there is no shared lib support
+ AC_MSG_NOTICE([JNI support requires dynamic linking])
+ no_java=yes
+ fi
+ if test "$enable_java" = no; then
+ no_java=yes
+ fi
+
+ # Look for Java programs
+ if test -z "$no_java"; then
+ save_PATH="$PATH"
+ if test "$JAVA_HOME" != ""; then
+ PATH="$JAVA_HOME/bin:$PATH"
+ export PATH
+ fi
+
+ # The java command is not needed for the build but is needed
+ # to run the examples
+ AC_PATH_PROG([JAVA], [java], [none])
+
+ AC_PATH_PROG([JAVAC], [javac], [none])
+ AC_PATH_PROG([JAVAH], [javah], [none])
+ AC_PATH_PROG([JAR], [jar], [none])
+ AC_PATH_PROG([JAVADOC], [javadoc], [none])
+
+ PATH="$save_PATH"
+ export PATH
+
+ if test "$JAVAC" = none || test "$JAVAH" = none || \
+ test "$JAR" = none || test "$JAVADOC" = none; then
+ no_java=yes
+ fi
+ fi
+
+ # Look for <jni.h>
+ if test -z "$no_java"; then
+ if test -z "$JAVA_INC"; then
+ j=`echo $JAVAC | sed -e 's!/bin.*$!!'` #'
+ JAVA_INC="-I$j/include"
+ fi
+
+ # Check for the arch-specific subdirectory containing <jni_md.h>
+ JAVA_INC_ARCH=`echo $JAVA_INC | cut -c 3-`
+ for i in "$JAVA_INC_ARCH"/*; do
+ test -f "$i"/jni_md.h && JAVA_INC="$JAVA_INC -I$i"
+ done
+
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $JAVA_INC"
+ AC_CHECK_HEADER([jni.h],, [no_java=yes])
+ CPPFLAGS="$save_CPPFLAGS"
+ fi
+
+ if test -z "$no_java"; then
+ AC_CACHE_CHECK([for javah version], [mon_cv_javah_version],
+ [mon_cv_javah_version=`$JAVAH -version | cut -d'"' -f2`])
+ AH_TEMPLATE([HAVE_JDK_15], [Define if using JDK 1.5.x])
+ case "$mon_cv_javah_version" in
+ 1.[[56789]].*)
+ AC_DEFINE([HAVE_JDK_15])
+ ;;
+ esac
+ fi
+
+ if test "$enable_java" = yes && test "$no_java" = yes; then
+ AC_MSG_ERROR([Java development tools were not found])
+ fi
+
+ if test -n "$no_java"; then
+ JAVA_INC=
+ AC_MSG_NOTICE([Java support is disabled])
+ fi
+
+ AC_SUBST([JAVA_INC])
+ AM_CONDITIONAL([HAVE_JAVA], [test -z "$no_java"])
+])
diff --git a/dcapi/common/Makefile.am b/dcapi/common/Makefile.am
new file mode 100644
index 0000000..0905d6b
--- /dev/null
+++ b/dcapi/common/Makefile.am
@@ -0,0 +1,29 @@
+noinst_LTLIBRARIES =
+
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+# Symbol file for the master side
+EXTRA_DIST = master.sym
+
+if BUILD_MASTER
+
+noinst_LTLIBRARIES += libdcapi-common-master.la
+libdcapi_common_master_la_CPPFLAGS = $(AM_CPPFLAGS) $(GLIB_CFLAGS) -DMASTER
+libdcapi_common_master_la_SOURCES = \
+ cfg-master.c \
+ logger.c \
+ util.c
+libdcapi_common_master_la_LIBADD = $(GLIB_LIBS)
+
+endif
+
+if BUILD_CLIENT
+
+noinst_LTLIBRARIES += libdcapi-common-client.la
+libdcapi_common_client_la_CPPFLAGS = $(AM_CPPFLAGS) -DCLIENT
+libdcapi_common_client_la_SOURCES = \
+ cfg-client.c \
+ logger.c \
+ util.c
+
+endif
diff --git a/dcapi/common/cfg-client.c b/dcapi/common/cfg-client.c
new file mode 100644
index 0000000..f883347
--- /dev/null
+++ b/dcapi/common/cfg-client.c
@@ -0,0 +1,189 @@
+/*
+ * cfg-client.c
+ *
+ * Simple config file parser for the client
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+
+#include <dc_internal.h>
+#include <dc_common.h>
+
+/********************************************************************
+ * Data type definitions
+ */
+
+struct pair
+{
+ char *key;
+ char *value;
+};
+
+
+/********************************************************************
+ * Global variables
+ */
+
+static struct pair *pairs;
+static int n_pairs;
+
+
+/********************************************************************
+ * Implementation
+ */
+
+static void cut_trailing_whitespace(char *p)
+{
+ char *end;
+
+ end = p + strlen(p) - 1;
+ while (end >= p && *end && isspace(*end))
+ *end-- = '\0';
+}
+
+int _DC_parseCfg(const char *cfgfile)
+{
+ char line[1024], *key, *value;
+ struct pair *tmp;
+ int linecnt, ret;
+ FILE *f;
+
+ /* Should not happen */
+ if (!cfgfile)
+ return DC_ERR_INTERNAL;
+
+ f = fopen(cfgfile, "r");
+ if (!f)
+ {
+ ret = errno;
+ DC_log(LOG_ERR, "Config file %s cannot be opened: %s",
+ cfgfile, strerror(ret));
+ errno = ret;
+ return DC_ERR_SYSTEM;
+ }
+
+ linecnt = 0;
+ while (fgets(line, 1024, f) != NULL)
+ {
+ linecnt++;
+
+ /* Cut leading white space */
+ for (key = line; isspace(*key); key++)
+ /* Nothing */;
+
+ /* Skip empty lines and comments */
+ if (!*key || *key == '\n' || *key == '#')
+ continue;
+
+ value = strchr(line, '=');
+ if (!value)
+ {
+ DC_log(LOG_ERR, "Syntax error in config file %s "
+ "line %d: '=' is missing", cfgfile, linecnt);
+ fclose(f);
+ return DC_ERR_CONFIG;
+ }
+
+ *value++ = '\0';
+ /* Cut leading white space */
+ while (isspace(*value))
+ value++;
+
+ cut_trailing_whitespace(key);
+ cut_trailing_whitespace(value);
+
+ tmp = realloc(pairs, (n_pairs + 1) * sizeof(*tmp));
+ if (!tmp)
+ {
+ DC_log(LOG_ERR, "Out of memory while parsing the "
+ "config file");
+ fclose(f);
+ errno = ENOMEM;
+ return DC_ERR_SYSTEM;
+ }
+
+ tmp[n_pairs].key = strdup(key);
+ tmp[n_pairs].value = strdup(value);
+ pairs = tmp;
+ n_pairs++;
+ }
+
+ fclose(f);
+ return 0;
+}
+
+char *DC_getCfgStr(const char *key)
+{
+ int i;
+
+ if (!key)
+ return NULL;
+
+ for (i = 0; i < n_pairs; i++)
+ {
+ if (pairs[i].key && !strcmp(pairs[i].key, key))
+ return strdup(pairs[i].value);
+ }
+ return NULL;
+}
+
+int DC_getCfgInt(const char *key, int defaultValue)
+{
+ long val;
+ char *p;
+ int i;
+
+ if (!key)
+ return defaultValue;
+
+ for (i = 0; i < n_pairs; i++)
+ {
+ if (pairs[i].key && !strcmp(pairs[i].key, key))
+ break;
+ }
+ if (i >= n_pairs)
+ return defaultValue;
+
+ val = strtol(pairs[i].value, &p, 10);
+ /* Check for unit suffixes */
+ if (p && *p)
+ {
+ long mult = (long) _DC_processSuffix(p);
+ if (mult == -1)
+ {
+ DC_log(LOG_WARNING, "Configuration value for key %s "
+ "is not a valid number, ignoring", key);
+ return defaultValue;
+ }
+ val *= mult;
+ }
+ return val;
+}
+
+int DC_getCfgBool(const char *key, int defaultValue)
+{
+ int i, retval;
+
+ if (!key)
+ return !!defaultValue;
+
+ for (i = 0; i < n_pairs; i++)
+ {
+ if (pairs[i].key && !strcmp(pairs[i].key, key))
+ {
+ retval = _DC_parseBoolean(pairs[i].value);
+ if (retval == -1)
+ retval = defaultValue;
+ return !!retval;
+ }
+ }
+ return !!defaultValue;
+}
diff --git a/dcapi/common/cfg-master.c b/dcapi/common/cfg-master.c
new file mode 100644
index 0000000..2ca7306
--- /dev/null
+++ b/dcapi/common/cfg-master.c
@@ -0,0 +1,312 @@
+/*
+ * cfg-client.c
+ *
+ * Simple config file parser for the client
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <dc.h>
+#include <dc_internal.h>
+
+#include <glib.h>
+
+/********************************************************************
+ * Constants
+ */
+
+/* Name of the group holding the master's configuration */
+#define MASTER_GROUP "Master"
+
+
+/********************************************************************
+ * Global variables
+ */
+
+static GKeyFile *config;
+
+
+/********************************************************************
+ * Implementation
+ */
+
+int _DC_parseCfg(const char *cfgfile)
+{
+ GError *error = NULL;
+ int ret;
+
+ /* Should not happen */
+ if (!cfgfile)
+ return DC_ERR_INTERNAL;
+
+ config = g_key_file_new();
+ ret = g_key_file_load_from_file(config, cfgfile, G_KEY_FILE_NONE,
+ &error);
+ if (!ret)
+ {
+ DC_log(LOG_ERR, "Failed to load the config file %s: %s",
+ cfgfile, error->message);
+ g_error_free(error);
+ return DC_ERR_CONFIG;
+ }
+ return 0;
+}
+
+static char *getCfgStr(const char *group, const char *key)
+{
+ char *value, *tmp;
+
+ if (!config || !key)
+ return NULL;
+
+ value = g_key_file_get_value(config, group, key, NULL);
+ if (!value || g_mem_is_system_malloc())
+ return value;
+ tmp = strdup(value);
+ g_free(value);
+ return tmp;
+}
+
+static int getCfgInt(const char *group, const char *key, int defaultValue,
+ int *err)
+{
+ char *value, *p;
+ long retval;
+
+ if (!config || !key)
+ return defaultValue;
+
+ value = g_key_file_get_value(config, group, key, NULL);
+ if (!value)
+ {
+ *err = 1;
+ return defaultValue;
+ }
+
+ retval = strtol(value, &p, 10);
+ /* Check for unit suffixes */
+ if (p && *p)
+ {
+ long mult = _DC_processSuffix(p);
+ if (mult == -1)
+ {
+ DC_log(LOG_WARNING, "Configuration value for key %s "
+ "is not a valid number, ignoring", key);
+ g_free(value);
+ *err = 1;
+ return defaultValue;
+ }
+ retval *= mult;
+ }
+
+ g_free(value);
+ *err = 0;
+ return retval;
+}
+
+static double getCfgDouble(const char *group, const char *key,
+ double defaultValue, int *err)
+{
+ char *value, *p;
+ double retval;
+
+ if (!config || !key)
+ return defaultValue;
+
+ value = g_key_file_get_value(config, group, key, NULL);
+ if (!value)
+ {
+ *err = 1;
+ return defaultValue;
+ }
+
+ retval = strtod(value, &p);
+ if (p && *p)
+ {
+ long long mult = _DC_processSuffix(p);
+ if (mult == -1)
+ {
+ DC_log(LOG_WARNING, "Configuration value for key %s "
+ "is not a valid number, ignoring", key);
+ g_free(value);
+ *err = 1;
+ return defaultValue;
+ }
+ retval *= mult;
+ }
+
+ g_free(value);
+ *err = 0;
+ return retval;
+}
+
+static int getCfgBool(const char *group, const char *key, int defaultValue,
+ int *err)
+{
+ char *value;
+ int retval;
+
+ if (!config || !key)
+ return !!defaultValue;
+
+ value = g_key_file_get_value(config, group, key, NULL);
+ if (!value)
+ {
+ *err = 1;
+ return !!defaultValue;
+ }
+
+ retval = _DC_parseBoolean(value);
+ g_free(value);
+ if (retval == -1)
+ {
+ *err = 1;
+ return !!defaultValue;
+ }
+ *err = 0;
+ return retval;
+}
+
+char *DC_getCfgStr(const char *key)
+{
+ return getCfgStr(MASTER_GROUP, key);
+}
+
+int DC_getCfgInt(const char *key, int defaultValue)
+{
+ int err;
+
+ return getCfgInt(MASTER_GROUP, key, defaultValue, &err);
+}
+
+int DC_getCfgBool(const char *key, int defaultValue)
+{
+ int err;
+
+ return getCfgBool(MASTER_GROUP, key, defaultValue, &err);
+}
+
+char *DC_getClientCfgStr(const char *clientName, const char *key,
+ int fallbackGlobal)
+{
+ char *group, *val;
+
+ if (!clientName)
+ return NULL;
+
+ group = g_strdup_printf("Client-%s", clientName);
+ val = getCfgStr(group, key);
+ g_free(group);
+ if (!val && fallbackGlobal)
+ val = getCfgStr(MASTER_GROUP, key);
+ return val;
+}
+
+int DC_getClientCfgInt(const char *clientName, const char *key,
+ int defaultValue, int fallbackGlobal)
+{
+ int val, err;
+ char *group;
+
+ if (!clientName)
+ return defaultValue;
+
+ group = g_strdup_printf("Client-%s", clientName);
+ val = getCfgInt(group, key, defaultValue, &err);
+ g_free(group);
+ if (err && fallbackGlobal)
+ val = getCfgInt(MASTER_GROUP, key, defaultValue, &err);
+ return val;
+}
+
+double DC_getClientCfgDouble(const char *clientName, const char *key,
+ double defaultValue, int fallbackGlobal)
+{
+ char *group;
+ double val;
+ int err;
+
+ if (!clientName)
+ return defaultValue;
+
+ group = g_strdup_printf("Client-%s", clientName);
+ val = getCfgDouble(group, key, defaultValue, &err);
+ g_free(group);
+ if (err && fallbackGlobal)
+ val = getCfgDouble(MASTER_GROUP, key, defaultValue, &err);
+ return val;
+}
+
+int DC_getClientCfgBool(const char *clientName, const char *key,
+ int defaultValue, int fallbackGlobal)
+{
+ int val, err;
+ char *group;
+
+ if (!clientName)
+ return !!defaultValue;
+
+ group = g_strdup_printf("Client-%s", clientName);
+ val = getCfgBool(group, key, defaultValue, &err);
+ g_free(group);
+ if (err && fallbackGlobal)
+ val = getCfgBool(MASTER_GROUP, key, defaultValue, &err);
+ return val;
+}
+
+int _DC_initClientConfig(const char *clientName, FILE *f)
+{
+ char **keys, *group, *val;
+ gsize i, cnt;
+
+ if (!clientName)
+ return DC_ERR_BADPARAM;
+
+ group = g_strdup_printf("Client-%s", clientName);
+ keys = g_key_file_get_string_list(config, group, CFG_SENDKEYS, &cnt,
+ NULL);
+
+ /* Always set LogLevel */
+ val = g_key_file_get_value(config, group, CFG_LOGLEVEL, NULL);
+ if (!val)
+ val = g_key_file_get_value(config, MASTER_GROUP, CFG_LOGLEVEL,
+ NULL);
+ if (val)
+ {
+ fprintf(f, "%s = %s\n", CFG_LOGLEVEL, val);
+ g_free(val);
+ }
+
+ /* Copy the values of the requested keys */
+ for (i = 0; keys && i < cnt; i++)
+ {
+ char *p;
+
+ /* Strip white space from the key name */
+ p = keys[i] + strlen(keys[i]) - 1;
+ while (*p == ' ' || *p == '\t')
+ *p-- = '\0';
+ p = keys[i];
+ while (*p == ' ' || *p == '\t')
+ p++;
+
+ val = g_key_file_get_value(config, group, p, NULL);
+ if (!val)
+ val = g_key_file_get_value(config, MASTER_GROUP, p,
+ NULL);
+ if (val)
+ {
+ fprintf(f, "%s = %s\n", p, val);
+ g_free(val);
+ }
+ }
+
+ g_strfreev(keys);
+ g_free(group);
+ return 0;
+}
diff --git a/dcapi/common/logger.c b/dcapi/common/logger.c
new file mode 100644
index 0000000..17d54cb
--- /dev/null
+++ b/dcapi/common/logger.c
@@ -0,0 +1,175 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <errno.h>
+#include <time.h>
+
+#ifndef _WIN32
+#include <unistd.h>
+#include <sys/syslog.h>
+#endif
+
+#include <dc_common.h>
+#include <dc_internal.h>
+
+#ifdef CLIENT
+#include <dc_client.h>
+#else
+#include <glib.h>
+#endif
+
+/* Set the log level to -1 so the first call to DC_log() will call init_log() */
+static int loglevel = -1;
+static FILE *logfile;
+
+#ifndef CLIENT
+G_LOCK_DEFINE_STATIC(logfile);
+#endif
+
+/* Stupid Visual C compiler */
+#ifdef _MSC_VER
+#define INIT(x, y) y
+#else
+#define INIT(x, y) [x] = y
+#endif
+
+static const char *levels[] =
+{
+ INIT(LOG_DEBUG, "Debug"),
+ INIT(LOG_INFO, "Info"),
+ INIT(LOG_NOTICE, "Notice"),
+ INIT(LOG_WARNING, "Warning"),
+ INIT(LOG_ERR, "Error"),
+ INIT(LOG_CRIT, "Critical")
+};
+
+static void init_log(void)
+{
+ char *val;
+
+ /* Default level */
+ loglevel = LOG_NOTICE;
+
+ val = DC_getCfgStr(CFG_LOGLEVEL);
+ if (val)
+ {
+ if (val[0] >= '0' && val[0] <= '9')
+ loglevel = atoi(val);
+ else
+ {
+ unsigned i;
+
+ for (i = 0; i < sizeof(levels) / sizeof(levels[0]); i++)
+ {
+ if (levels[i] && !strcasecmp(levels[i], val))
+ {
+ loglevel = i;
+ break;
+ }
+ }
+
+ if (i >= sizeof(levels) / sizeof(levels[0]))
+ fprintf(stderr, "WARNING: Unknown log level "
+ "specified in the config file, "
+ "using 'Notice'\n");
+ }
+ free(val);
+ }
+
+ val = DC_getCfgStr(CFG_LOGFILE);
+ if (val)
+ {
+ char *tmp;
+
+#if MASTER
+ /* If the log file is not an absolute path, open it
+ * inside the working directory */
+ if (val[0] != '/')
+ {
+ char *dir;
+
+ dir = DC_getCfgStr(CFG_WORKDIR);
+ if (dir)
+ {
+ tmp = malloc(strlen(dir) + 1 + strlen(val) + 1);
+ sprintf(tmp, "%s/%s", dir, val);
+ free(dir);
+ free(val);
+ val = tmp;
+ }
+ }
+#endif /* MASTER */
+#if CLIENT
+ /* Try to resolve the file name first as an output file, and
+ * if that fails, as a temporary file. If both fail, use the
+ * file name verbatim. */
+ tmp = DC_resolveFileName(DC_FILE_OUT, val);
+ if (!tmp)
+ tmp = DC_resolveFileName(DC_FILE_TMP, val);
+ if (tmp)
+ {
+ free(val);
+ val = tmp;
+ }
+#endif /* CLIENT */
+
+ logfile = fopen(val, "a");
+ if (!logfile)
+ {
+ fprintf(stderr, "Failed to open the log file %s: %s\n",
+ val, strerror(errno));
+ exit(1);
+ }
+ free(val);
+ }
+ else
+ logfile = stdout;
+}
+
+void DC_log(int level, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ DC_vlog(level, fmt, ap);
+ va_end(ap);
+}
+
+void DC_vlog(int level, const char *fmt, va_list ap)
+{
+ const char *levstr;
+ char timebuf[32];
+ struct tm *tm;
+ time_t now;
+
+ if (loglevel < 0)
+ init_log();
+ if ((LOG_DEBUG > LOG_ERR && level > loglevel) ||
+ (LOG_DEBUG < LOG_ERR && level < loglevel))
+ return;
+
+ if (level >= 0 && level < (int)(sizeof(levels) / sizeof(levels[0])) && levels[level])
+ levstr = levels[level];
+ else
+ levstr = "Unknown";
+
+ now = time(NULL);
+ tm = localtime(&now);
+ strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", tm);
+
+#ifndef CLIENT
+ G_LOCK(logfile);
+#endif
+ fprintf(logfile, "%s [%s] ", timebuf, levstr);
+ vfprintf(logfile, fmt, ap);
+ fprintf(logfile, "\n");
+ fflush(logfile);
+#ifndef CLIENT
+ G_UNLOCK(logfile);
+#endif
+}
diff --git a/dcapi/common/master.sym b/dcapi/common/master.sym
new file mode 100644
index 0000000..09791be
--- /dev/null
+++ b/dcapi/common/master.sym
@@ -0,0 +1,42 @@
+DC_getMaxMessageSize
+DC_getMaxSubresults
+DC_getGridCapabilities
+DC_log
+DC_vlog
+DC_getCfgStr
+DC_getCfgInt
+DC_getCfgBool
+DC_initMaster
+DC_setMasterCb
+DC_setResultCb
+DC_setSubresultCb
+DC_setMessageCb
+DC_getWUNumber
+DC_getClientCfgStr
+DC_getClientCfgInt
+DC_getClientCfgDouble
+DC_getClientCfgBool
+DC_processMasterEvents
+DC_waitMasterEvent
+DC_waitWUEvent
+DC_destroyMasterEvent
+DC_createWU
+DC_addWUInput
+DC_addWUOutput
+DC_setWUPriority
+DC_serializeWU
+DC_deserializeWU
+DC_getWUState
+DC_submitWU
+DC_getWUId
+DC_getWUTag
+DC_cancelWU
+DC_suspendWU
+DC_resumeWU
+DC_destroyWU
+DC_sendWUMessage
+DC_getResultCapabilities
+DC_getResultWU
+DC_getResultExit
+DC_getResultOutput
+DC_getResultCPUTime
diff --git a/dcapi/common/util.c b/dcapi/common/util.c
new file mode 100644
index 0000000..c7ff481
--- /dev/null
+++ b/dcapi/common/util.c
@@ -0,0 +1,217 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
+
+#include <dc_internal.h>
+#include <dc_common.h>
+
+/********************************************************************
+ * Constants
+ */
+
+/* Buffer size used when copying a file */
+#define COPY_BUFSIZE 65536
+
+
+/********************************************************************
+ * Functions
+ */
+
+#ifdef _WIN32
+int _DC_copyFile(const char *src, const char *dst)
+{
+ if (CopyFile(src, dst, FALSE))
+ return 0;
+ return DC_ERR_SYSTEM;
+}
+#else
+int _DC_copyFile(const char *src, const char *dst)
+{
+ struct stat s;
+ int sfd, dfd;
+ ssize_t ret;
+ char *buf;
+
+ buf = (char *)malloc(COPY_BUFSIZE);
+ if (!buf)
+ {
+ DC_log(LOG_ERR, "_DC_copyFile: Out of memory");
+ return DC_ERR_SYSTEM;
+ }
+
+ sfd = open(src, O_RDONLY);
+ if (sfd == -1)
+ {
+ DC_log(LOG_ERR, "_DC_copyFile: failed to open source file %s: %s",
+ src, strerror(errno));
+ free(buf);
+ return DC_ERR_SYSTEM;
+ }
+
+ fstat(sfd, &s);
+ dfd = open(dst, O_WRONLY | O_CREAT | O_TRUNC, s.st_mode);
+ if (dfd == -1)
+ {
+ DC_log(LOG_ERR, "_DC_copyFile: failed to create destination file %s: %s",
+ dst, strerror(errno));
+ free(buf);
+ close(sfd);
+ return DC_ERR_SYSTEM;
+ }
+
+ while ((ret = read(sfd, buf, COPY_BUFSIZE)) > 0)
+ {
+ char *ptr = buf;
+ while (ret)
+ {
+ ssize_t ret2 = write(dfd, ptr, ret);
+ if (ret2 < 0)
+ goto error;
+ ret -= ret2;
+ ptr += ret2;
+ }
+ }
+
+ if (ret < 0)
+ goto error;
+
+ free(buf);
+ close(sfd);
+ if (close(dfd))
+ {
+ DC_log(LOG_ERR, "_DC_copyFile: I/O error: %s", strerror(errno));
+ unlink(dst);
+ return DC_ERR_SYSTEM;
+ }
+ return 0;
+
+error:
+ DC_log(LOG_ERR, "_DC_copyFile: I/O error: %s", strerror(errno));
+ free(buf);
+ close(sfd);
+ close(dfd);
+ unlink(dst);
+ return DC_ERR_SYSTEM;
+}
+#endif /* _WIN32 */
+
+long long _DC_processSuffix(const char *suffix)
+{
+ while (*suffix == ' ' || *suffix == '\t')
+ suffix++;
+ if (!strcasecmp(suffix, "kb") || !strcasecmp(suffix, "kib"))
+ return 1ll << 10;
+ else if (!strcasecmp(suffix, "mb") || !strcasecmp(suffix, "mib"))
+ return 1ll << 20;
+ else if (!strcasecmp(suffix, "gb") || !strcasecmp(suffix, "gib"))
+ return 1ll << 30;
+ else if (!strcasecmp(suffix, "min"))
+ return 60ll;
+ else if (!strcasecmp(suffix, "h") || !strcasecmp(suffix, "hour"))
+ return 60ll * 60;
+ else if (!strcasecmp(suffix, "day"))
+ return 24ll * 60 * 60;
+ return -1;
+}
+
+int _DC_parseBoolean(const char *value)
+{
+ static const char *truevals[] = {"true", "yes", "on"};
+ static const char *falsevals[] = {"false", "no", "off"};
+ unsigned i;
+
+ for (i = 0; i < sizeof(truevals) / sizeof(truevals[0]); i++)
+ if (!strcasecmp(value, truevals[i]))
+ return 1;
+ for (i = 0; i < sizeof(falsevals) / sizeof(falsevals[0]); i++)
+ if (!strcasecmp(value, falsevals[i]))
+ return 0;
+ return -1;
+}
+
+DC_PhysicalFile *_DC_createPhysicalFile(const char *label,
+ const char *path)
+{
+ DC_PhysicalFile *file;
+
+ file = malloc(sizeof(*file));
+ if (!file)
+ return NULL;
+
+ file->label = strdup(label);
+ file->path = strdup(path);
+ file->physicalfilename = NULL;
+ file->physicalfilehash = NULL;
+ file->persistentonclient = 0;
+
+ if (!file->label || !file->path)
+ {
+ _DC_destroyPhysicalFile(file);
+ return NULL;
+ }
+ file->mode = DC_FILE_REGULAR;
+
+ return file;
+}
+
+DC_RemoteFile *_DC_createRemoteFile(const char *label,
+ const char *url, const char *md5, const size_t size)
+{
+ DC_RemoteFile *file;
+
+ file = malloc(sizeof(*file));
+ if (!file)
+ return NULL;
+
+ file->label = strdup(label);
+ file->url = strdup(url);
+ file->remotefilehash = strdup(md5);
+ file->remotefilesize = size;
+ file->persistentonclient = 0;
+
+ if (!file->label || !file->url || !file->remotefilehash)
+ {
+ _DC_destroyRemoteFile(file);
+ return NULL;
+ }
+
+ return file;
+}
+
+void _DC_destroyPhysicalFile(DC_PhysicalFile *file)
+{
+ if (!file)
+ return;
+
+ free(file->label);
+ free(file->path);
+ if (file->physicalfilename)
+ free(file->physicalfilename);
+ if (file->physicalfilehash)
+ free(file->physicalfilehash);
+ free(file);
+}
+
+void _DC_destroyRemoteFile(DC_RemoteFile *file)
+{
+ if (!file)
+ return;
+
+ free(file->label);
+ free(file->url);
+ free(file->remotefilehash);
+ free(file);
+}
diff --git a/dcapi/condor/Makefile.am b/dcapi/condor/Makefile.am
new file mode 100644
index 0000000..875a1f5
--- /dev/null
+++ b/dcapi/condor/Makefile.am
@@ -0,0 +1,60 @@
+lib_LTLIBRARIES =
+
+if BUILD_MASTER
+lib_LTLIBRARIES += libdcapi-condor.la
+endif
+
+if BUILD_CLIENT
+lib_LTLIBRARIES += libdcapi-client-condor.la
+endif
+
+pkgconfigdir = ${libdir}/pkgconfig
+pkgconfig_DATA = dcapi-condor-client.pc dcapi-condor-master.pc
+
+AM_CPPFLAGS = -I$(top_srcdir)/include $(GLIB_CFLAGS) $(CONDOR_CPPFLAGS)
+AM_LDFLAGS = $(GLIB_LIBS) $(CONDOR_LDFLAGS)
+
+noinst_HEADERS = condor_common.h \
+ condor_defs.h \
+ condor_master.h \
+ condor_wu.h \
+ condor_log.h \
+ condor_utils.h \
+ condor_result.h \
+ condor_slave.h \
+ condor_event.h
+
+libdcapi_condor_la_SOURCES = condor_master.c \
+ condor_common.c \
+ condor_wu.c \
+ condor_managewu.c \
+ condor_log.cc \
+ condor_utils.c \
+ condor_result.c \
+ condor_event.c
+
+libdcapi_condor_la_LIBADD = ../common/libdcapi-common-master.la \
+ $(GLIB_LIBS) \
+ -lcondorapi
+
+libdcapi_client_condor_la_SOURCES = condor_slave.c \
+ condor_common.c \
+ condor_utils.c
+
+libdcapi_client_condor_la_LIBADD = ../common/libdcapi-common-client.la
+libdcapi_client_condor_la_LDFLAGS = -static
+
+#appdir = $(libdir)/dcapi/condor
+#app_PROGRAMS = tss tm
+
+#tss_SOURCES = tss.c tc.c
+#tss_LDADD = ../common/libdcapi-common-client.la libdcapi-client-condor.la
+
+#tm_SOURCES = tm.c tc.c
+#tm_LDADD = ../common/libdcapi-common-master.la libdcapi-condor.la -L. -ldl -luuid -lstdc++
+
+dd: all
+ ssh root at emma 'make -C /home/staff/drdani/prj/szdg/dcapi/trunk/condor install'
+ $(MAKE) -C ../../../apps/uppercase-demo/trunk clean all
+ cp ../../../apps/uppercase-demo/trunk/src/uppercase-demo-client uppercase-demo
+ cp ../../../apps/uppercase-demo/trunk/src/uppercase-demo-master .
diff --git a/dcapi/condor/condor_common.c b/dcapi/condor/condor_common.c
new file mode 100644
index 0000000..1c09c2c
--- /dev/null
+++ b/dcapi/condor/condor_common.c
@@ -0,0 +1,111 @@
+/*
+ * condor/condor_common.c
+ *
+ * DC-API functions common for master and slave side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+/*#include <glib.h>*/
+
+/*
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+*/
+
+#include "dc_common.h"
+
+#include "condor_common.h"
+
+
+struct _DC_s_param _DC_params[cfg_nuof];
+
+
+void
+_DC_init_common(void)
+{
+ int i;
+
+ for (i= 0; i < cfg_nuof; i++)
+ {
+ _DC_params[i].name= 0;
+ _DC_params[i].def= 0;
+ _DC_params[i].lvalue= 0;
+ _DC_params[i].gvalue= 0;
+ }
+ _DC_params[cfg_client_message_box].name= "ClientMessageBox";
+ _DC_params[cfg_client_message_box].def= "_dcapi_client_messages";
+
+ _DC_params[cfg_master_message_box].name= "MasterMessageBox";
+ _DC_params[cfg_master_message_box].def= "_dcapi_master_messages";
+
+ _DC_params[cfg_subresults_box].name= "SubresultBox";
+ _DC_params[cfg_subresults_box].def= "_dcapi_client_subresults";
+
+ _DC_params[cfg_management_box].name= "SystemMessageBox";
+ _DC_params[cfg_management_box].def= "_dcapi_system_messages";
+
+ _DC_params[cfg_architectures].name= "Architectures";
+ _DC_params[cfg_architectures].def= "Client_%s_%s";/* client_name, architecture */
+
+ _DC_params[cfg_submit_file].name= "SubmitFile";
+ _DC_params[cfg_submit_file].def= "_dcapi_condor_submit.txt";
+
+ _DC_params[cfg_executable].name= "Executable";
+ _DC_params[cfg_executable].def= 0/*NULL*/;
+
+ _DC_params[cfg_leave_files].name= "LeaveFiles";
+ _DC_params[cfg_leave_files].def= "0";
+
+ _DC_params[cfg_condor_log].name= "CondorLog";
+ _DC_params[cfg_condor_log].def= "_dcapi_internal_log.txt";
+
+ _DC_params[cfg_checkpoint_file].name= "CheckpointFile";
+ _DC_params[cfg_checkpoint_file].def= "_dcapi_checkpoint";
+
+ _DC_params[cfg_output_cache].name= "SavedOutputs";
+ _DC_params[cfg_output_cache].def= "_dcapi_saved_output";
+
+ _DC_params[cfg_condor_submit_template].name= "CondorSubmitTemplate";
+ _DC_params[cfg_condor_submit_template].def= 0;
+}
+
+
+/* Determines the maximum allowed message length. */
+int DC_getMaxMessageSize(void)
+{
+ return(16384);
+}
+
+
+/* Determines the maximum number of sub-results. */
+int DC_getMaxSubresults(void)
+{
+ return(100);
+}
+
+
+/* Determines the basic capabilities of the underlying grid infrastructure. */
+unsigned DC_getGridCapabilities(void)
+{
+ int cap;
+
+ cap= DC_GC_STDOUT | DC_GC_STDERR;
+ cap|= DC_GC_MESSAGING | DC_GC_LOG | DC_GC_SUBRESULT;
+ cap|= DC_GC_EXITCODE;
+
+ return(cap);
+}
+
+
+/* End of condor/condor_common.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_common.h b/dcapi/condor/condor_common.h
new file mode 100644
index 0000000..79479e0
--- /dev/null
+++ b/dcapi/condor/condor_common.h
@@ -0,0 +1,73 @@
+/*
+ * condor/condor_common.h
+ *
+ * DC-API functions common for master and slave side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#ifndef _DC_API_CONDOR_COMMON_H_
+#define _DC_API_CONDOR_COMMON_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define CLIENT_CONFIG_NAME "_dcapi_configfile.txt"
+
+
+enum _DC_e_param {
+ cfg_client_message_box= 0,
+ cfg_master_message_box,
+ cfg_subresults_box,
+ cfg_management_box,
+ cfg_architectures,
+ cfg_submit_file,
+ cfg_executable,
+ cfg_leave_files,
+ cfg_condor_log,
+ cfg_checkpoint_file,
+ cfg_output_cache,
+ cfg_condor_submit_template,
+ cfg_nuof
+};
+
+struct _DC_s_param {
+ char *name;
+ char *def;
+ char *lvalue;
+ char *gvalue;
+};
+
+
+extern struct _DC_s_param _DC_params[cfg_nuof];
+
+extern void _DC_init_common(void);
+
+
+#define _DCAPI_MSG_MESSAGE "message"
+#define _DCAPI_MSG_LOGICAL "logical_name"
+#define _DCAPI_MSG_COMMAND "command"
+#define _DCAPI_MSG_ACK "acknowledge"
+
+#define _DCAPI_CMD_SUSPEND "suspend"
+#define _DCAPI_ACK_SUSPEND "suspending"
+
+#define _DCAPI_CMD_RESUME "resume"
+
+#define _DCAPI_SIG_SERIALIZED "serialized"
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_common.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_defs.h b/dcapi/condor/condor_defs.h
new file mode 100644
index 0000000..e981437
--- /dev/null
+++ b/dcapi/condor/condor_defs.h
@@ -0,0 +1,126 @@
+/*
+ * condor/condor_defs.h
+ *
+ * DC-API type definitions for master side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#ifndef __DC_API_CONDOR_DEFS_H_
+#define __DC_API_CONDOR_DEFS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <time.h>
+#include <sys/time.h>
+#include <uuid/uuid.h>
+#include "glib.h"
+
+#include "dc.h"
+#include "dc_internal.h"
+
+
+extern char project_uuid_str[37];
+
+struct _DC_condor_event
+{
+ int event;
+ int cluster;
+ int proc;
+ int subproc;
+ time_t time;
+ gboolean reported;
+ union
+ {
+ struct
+ {
+ gboolean normal;
+ int exit_code;
+ } exit_info;
+ struct
+ {
+ char *reason;
+ } abort_info;
+ struct
+ {
+ char *host;
+ } exec_info;
+ };
+};
+
+struct _DC_wu_data
+{
+ char *name; // generated by Create
+ char *client_name; // reference to the config file group
+ char *tag; // Parameter from the app
+ int argc;
+ int subresults;
+ /*uuid_t uuid;*/
+ char *uuid_str;
+ char *workdir;
+ DC_WUState state;
+};
+
+struct _DC_Workunit
+{
+ int magic;
+ struct _DC_wu_data data;
+ char **argv;
+
+ gboolean asked_to_suspend;
+
+ /*char *condor_id;*/
+ GArray *condor_events;
+
+ GList *input_files;
+ GList *output_files;
+ int chk;
+};
+
+struct _DC_Result
+{
+ DC_Workunit *wu;
+};
+
+typedef enum
+{
+ FILE_IN,
+ FILE_OUT,
+ FILE_CKPT,
+ FILE_DCAPI
+} WorkdirFile;
+
+
+typedef enum
+{
+ st_name= 0,
+ st_workdir,
+ st_tag,
+ st_client_name,
+ st_argc,
+ st_argv,
+ st_state,
+ st_state_name,
+ st_nuof_reported,
+ st_reported,
+ st_uuid_str
+} _DC_serialized_token;
+
+
+/*#define DC_LABEL_INTLOG "internal_log.txt"*/
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_defs.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_event.c b/dcapi/condor/condor_event.c
new file mode 100644
index 0000000..cdec87b
--- /dev/null
+++ b/dcapi/condor/condor_event.c
@@ -0,0 +1,85 @@
+/*
+ * condor/condor_event.c
+ *
+ * DC-API functions to handle DC_MasterEvent data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#include <glib.h>
+
+#include "dc.h"
+
+#include "condor_result.h"
+#include "condor_event.h"
+
+
+DC_MasterEvent *
+_DC_event_create(DC_Workunit *wu,
+ DC_Result *result,
+ DC_PhysicalFile *subresult,
+ char *message)
+{
+ DC_MasterEvent *e;
+
+ if ((e= g_new0(DC_MasterEvent, 1)) == NULL)
+ return(NULL);
+ e->wu= wu;
+ if (result)
+ {
+ e->type= DC_MASTER_RESULT;
+ e->result= result;
+ }
+ else if (subresult)
+ {
+ e->type= DC_MASTER_SUBRESULT;
+ e->subresult= subresult;
+ }
+ else if (message)
+ {
+ e->type= DC_MASTER_MESSAGE;
+ e->message= g_strdup(message);
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Wrong invokation of _DC_event_create("
+ "%p,%p,%p,%p)", wu, result, subresult, message);
+ g_free(e);
+ return(NULL);
+ }
+ return(e);
+}
+
+
+void
+_DC_event_destroy(DC_MasterEvent *event)
+{
+ if (!event)
+ return;
+ switch (event->type)
+ {
+ case DC_MASTER_RESULT:
+ if (event->result)
+ _DC_result_destroy(event->result);
+ break;
+ case DC_MASTER_SUBRESULT:
+ if (event->subresult)
+ _DC_destroyPhysicalFile(event->subresult);
+ break;
+ case DC_MASTER_MESSAGE:
+ if (event->message)
+ g_free(event->message);
+ break;
+ default:
+ break;
+ }
+ g_free(event);
+}
+
+
+/* End of condor/condor_event.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_event.h b/dcapi/condor/condor_event.h
new file mode 100644
index 0000000..a9257ec
--- /dev/null
+++ b/dcapi/condor/condor_event.h
@@ -0,0 +1,37 @@
+/*
+ * condor/condor_event.h
+ *
+ * DC-API functions to handle DC_MasterEvent data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#ifndef _DC_API_CONDOR_EVENT_H_
+#define _DC_API_CONDOR_EVENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "dc.h"
+
+
+extern DC_MasterEvent *_DC_event_create(DC_Workunit *wu,
+ DC_Result *result,
+ DC_PhysicalFile *subresult,
+ char *message);
+extern void _DC_event_destroy(DC_MasterEvent *event);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_event.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_log.cc b/dcapi/condor/condor_log.cc
new file mode 100644
index 0000000..48d864c
--- /dev/null
+++ b/dcapi/condor/condor_log.cc
@@ -0,0 +1,279 @@
+/*
+ * condor/condor_log.cc
+ *
+ * DC-API utils to read and process condor "user log" file
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#include <stdio.h>
+#include <time.h>
+#include <sys/time.h>
+#include <glib.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "read_user_log.h"
+
+#include "dc.h"
+#include "dc_common.h"
+
+#include "condor_log.h"
+
+#include "condor_defs.h"
+#include "condor_event.h"
+#include "condor_result.h"
+#include "condor_wu.h"
+#include "condor_utils.h"
+
+
+void
+_DC_wu_update_condor_events(DC_Workunit *wu)
+{
+ ReadUserLog log;
+ GString *fn_org, *fn_tmp;
+ char t[100];
+ int res;
+ unsigned int i;
+
+ if (!wu) {
+ DC_log(LOG_DEBUG, "Invalid work unit passed.");
+ return;
+ }
+
+ fn_org= g_string_new(wu->data.workdir);
+ fn_org= g_string_append(fn_org, "/");
+ fn_org= g_string_append(fn_org, _DC_wu_cfg(wu, cfg_condor_log));
+ strcpy(t, "/tmp/condor_dc_api_XXXXXX");
+ res= mkstemp(t);
+ fn_tmp= g_string_new(t);
+ close(res);
+ _DC_copyFile(fn_org->str, fn_tmp->str);
+ res= log.initialize(fn_tmp->str);
+ if (res != 1)
+ {
+ DC_log(LOG_ERR, "Condor user log file reader "
+ "initialization failed for %s", fn_tmp->str);
+ unlink(fn_tmp->str);
+ g_string_free(fn_org, TRUE);
+ g_string_free(fn_tmp, TRUE);
+ return;
+ }
+
+ i= 1;
+ ULogEvent *event;
+ ULogEventOutcome result;
+ while ((result = log.readEvent(event)) != ULOG_NO_EVENT)
+ {
+ switch (result)
+ {
+ case ULOG_RD_ERROR:
+ DC_log(LOG_ERR, "read error in the log");
+ break;
+ case ULOG_UNK_ERROR:
+ DC_log(LOG_ERR, "unknown error in the log");
+ break;
+ case ULOG_OK:
+ if (wu->condor_events->len < i)
+ {
+ struct _DC_condor_event e;
+ e.event= event->eventNumber;
+ e.cluster= event->cluster;
+ e.proc= event->proc;
+ e.subproc= event->subproc;
+ e.time= mktime(&(event->eventTime));
+ e.reported= FALSE;
+ if (e.event == ULOG_JOB_TERMINATED)
+ {
+ class TerminatedEvent *te=
+ dynamic_cast<class TerminatedEvent *>
+ (event);
+ if (te)
+ {
+ e.exit_info.normal= te->normal;
+ e.exit_info.exit_code= te->returnValue;
+ }
+ }
+ if (e.event == ULOG_JOB_ABORTED)
+ {
+ class JobAbortedEvent *ae=
+ dynamic_cast<class JobAbortedEvent *>
+ (event);
+ if (ae)
+ {
+ e.abort_info.reason=
+ g_strdup(ae->getReason());
+ }
+ }
+ if (e.event == ULOG_EXECUTE)
+ {
+ class ExecuteEvent *ae=
+ dynamic_cast<class ExecuteEvent *>
+ (event);
+ if (ae)
+ {
+ e.exec_info.host=
+ g_strdup(ae->getExecuteHost());
+ }
+ }
+ g_array_append_val(wu->condor_events, e);
+ DC_log(LOG_DEBUG, "Condor event %d %s of %p-\"%s\"",
+ event->eventNumber,
+ ULogEventNumberNames[event->eventNumber],
+ wu, wu->data.name);
+ }
+ i++;
+ delete event;
+ break;
+ default:
+ DC_log(LOG_ERR, "should never get here.");
+ break;
+ }
+ }
+ unlink(fn_tmp->str);
+ g_string_free(fn_org, TRUE);
+ g_string_free(fn_tmp, TRUE);
+ return;
+}
+
+
+DC_MasterEvent *
+_DC_wu_condor2api_event(DC_Workunit *wu)
+{
+ unsigned int i;
+
+ if (!_DC_wu_check(wu))
+ return(NULL);
+ for (i= 0; i < wu->condor_events->len; i++)
+ {
+ struct _DC_condor_event *ce;
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ i);
+ if (ce->reported)
+ continue;
+ ce->reported= TRUE;
+ if (ce->event == ULOG_JOB_TERMINATED)
+ {
+ DC_log(LOG_DEBUG, "Job terminated, "
+ "asked to susp=%d",
+ wu->asked_to_suspend);
+ GString *s;
+ s= g_string_new("");
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ char *message;
+ if ((message= _DC_read_message(s->str,
+ (char *)_DCAPI_MSG_ACK,
+ FALSE)))
+ {
+ DC_log(LOG_DEBUG, "Acknowledge exists: %s",
+ message);
+ if (strcmp(message, _DCAPI_ACK_SUSPEND) == 0)
+ {
+ DC_log(LOG_DEBUG, "Suspend "
+ "acknowledged");
+ _DC_read_message(s->str,
+ (char *)_DCAPI_MSG_ACK,
+ TRUE);
+ wu->asked_to_suspend= TRUE;
+ }
+ }
+ g_string_free(s, TRUE);
+
+ if (wu->asked_to_suspend)
+ {
+ _DC_wu_set_state(wu, DC_WU_SUSPENDED);
+ wu->asked_to_suspend= FALSE;
+ }
+ else
+ {
+ DC_MasterEvent *e;
+ e= _DC_event_create(wu, _DC_result_create(wu),
+ NULL, NULL);
+ DC_log(LOG_DEBUG, "Result event created: "
+ "%p for wu (%p-\"%s\")",
+ e, wu, wu->data.name);
+ DC_log(LOG_DEBUG, "Result of the event: %p",
+ e->result);
+ _DC_wu_set_state(wu, DC_WU_FINISHED);
+ return(e);
+ }
+ }
+ if (ce->event == ULOG_EXECUTE)
+ {
+ /* Fix #1105 */
+ /*_DC_wu_set_state(wu, DC_WU_RUNNING);*/
+ }
+
+ }
+ return(NULL);
+}
+
+
+int
+_DC_wu_exit_code(DC_Workunit *wu, int *res)
+{
+ unsigned int i;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ if (!res)
+ return(DC_OK);
+ for (i= 0; i < wu->condor_events->len; i++)
+ {
+ struct _DC_condor_event *ce;
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ i);
+ if (ce->event == ULOG_JOB_TERMINATED)
+ {
+ *res= ce->exit_info.exit_code;
+ }
+ }
+ return(DC_OK);
+}
+
+
+/* Returns the CPU time used for computing the result, in seconds. */
+
+double
+DC_getResultCPUTime(const DC_Result *result)
+{
+ DC_Workunit *wu;
+ unsigned int i;
+ time_t start= (time_t)-1, end= (time_t)-1;
+
+ if (result == NULL)
+ return(0.0);
+ wu= result->wu;
+ if (wu == NULL)
+ return(0.0);
+
+ for (i= 0; i < wu->condor_events->len; i++)
+ {
+ struct _DC_condor_event *ce;
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ i);
+ if (ce->event == ULOG_EXECUTE)
+ start= ce->time;
+ if (ce->event == ULOG_JOB_TERMINATED ||
+ ce->event == ULOG_JOB_ABORTED)
+ end= ce->time;
+ }
+ if (start == (time_t)-1 ||
+ end == (time_t)-1)
+ return(0.0);
+
+ return difftime(end, start);
+}
+
+
+/* End of condor_log.cc */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_log.h b/dcapi/condor/condor_log.h
new file mode 100644
index 0000000..4880dcc
--- /dev/null
+++ b/dcapi/condor/condor_log.h
@@ -0,0 +1,35 @@
+/*
+ * condor/condor_log.h
+ *
+ * DC-API utils to read and process condor "user log" file
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#ifndef _DC_API_CONDOR_LOG_H_
+#define _DC_API_CONDOR_LOG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "dc.h"
+
+
+extern void _DC_wu_update_condor_events(DC_Workunit *wu);
+extern DC_MasterEvent *_DC_wu_condor2api_event(DC_Workunit *wu);
+extern int _DC_wu_exit_code(DC_Workunit *wu, int *res);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_log.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_managewu.c b/dcapi/condor/condor_managewu.c
new file mode 100644
index 0000000..522c3ae
--- /dev/null
+++ b/dcapi/condor/condor_managewu.c
@@ -0,0 +1,240 @@
+/*
+ * condor/condor_managewu.c
+ *
+ * DC-API wu management functions
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <glib.h>
+
+#include "dc.h"
+
+#include "condor_log.h"
+#include "condor_wu.h"
+#include "condor_utils.h"
+
+
+/*************************************************************** Manage WUs */
+
+static int
+_DC_start_condor_job(DC_Workunit *wu)
+{
+ int ret;
+ GString *cmd;
+ gchar *act, *act2;
+
+ cmd= g_string_new("condor_submit");
+ cmd= g_string_append(cmd, " ");
+ cmd= g_string_append(cmd, _DC_wu_cfg(wu, cfg_submit_file));
+ act= getcwd(NULL, 0);
+ chdir(wu->data.workdir);
+ act2= getcwd(NULL, 0);
+ DC_log(LOG_DEBUG, "Calling \"%s\" in %s...",
+ cmd->str, act2);
+ ret= system(cmd->str);
+ DC_log(LOG_DEBUG, "Returned %d", ret);
+ chdir(act);
+ g_free(act);
+ g_free(act2);
+ g_string_free(cmd, TRUE);
+
+ return ret;
+}
+
+/* Submits a work unit. */
+int
+DC_submitWU(DC_Workunit *wu)
+{
+ int ret;
+ /*GString *fn;*/
+ char *id;
+ int tries;
+ int sleeptime;
+ int maxtries;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ DC_log(LOG_DEBUG, "DC_submitWU(%p-\"%s\")", wu, wu->data.name);
+
+ if (wu->data.state != DC_WU_READY)
+ {
+ DC_log(LOG_INFO, "Re-submission of %s", wu->data.name);
+ return(DC_ERR_BADPARAM);
+ }
+
+ ret= _DC_wu_gen_condor_submit(wu);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Submit file generation failed");
+ return(ret);
+ }
+
+ /*fn= g_string_new(wu->workdir);*/
+ /*fn= g_string_append(fn, "/condor_submit.txt");*/
+ tries=0;
+ sleeptime= DC_getCfgInt("SubmitRetrySleepTime", 2);
+ maxtries = DC_getCfgInt("SubmitRetry", 5);
+ do
+ {
+ ret= _DC_start_condor_job(wu);
+ tries++;
+ if (ret != 0)
+ {
+ if (tries > maxtries)
+ break;
+ DC_log(LOG_INFO, "Failed to submit WU to Condor. Sleeping for %d seconds and retrying (%d of %d)",
+ sleeptime, tries, maxtries);
+ sleep(sleeptime);
+ sleeptime*=2;
+ }
+ } while (ret != 0);
+ if (ret == 0)
+ {
+ /* Fix #1105 */
+ _DC_wu_set_state(wu, DC_WU_RUNNING);
+ _DC_wu_update_condor_events(wu);
+ while (wu->condor_events->len == 0)
+ {
+ sleep(1);
+ _DC_wu_update_condor_events(wu);
+ }
+ /*_DC_wu_set_state(wu, DC_WU_RUNNING);*/
+ id= DC_getWUId(wu);
+ DC_log(LOG_INFO, "Condor id of wu's job: %s", id);
+ g_free(id);
+ }
+ return(ret);
+}
+
+
+static int
+_DC_stop_condor_job(DC_Workunit *wu)
+{
+ char *id;
+ GString *cmd;
+ int ret;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ id= DC_getWUId(wu);
+ if (!id)
+ return(DC_ERR_UNKNOWN_WU);
+ cmd= g_string_new("condor_rm ");
+ cmd= g_string_append(cmd, id);
+ DC_log(LOG_DEBUG, "Calling \"%s\"...", cmd->str);
+ ret= system(cmd->str);
+ DC_log(LOG_DEBUG, "Returned %d", ret);
+ g_string_free(cmd, TRUE);
+ g_free(id);
+ return((ret==0)?DC_OK:DC_ERR_BADPARAM);
+}
+
+
+/* Cancels all computations for a given work unit. */
+int
+DC_cancelWU(DC_Workunit *wu)
+{
+ int ret;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ DC_log(LOG_DEBUG, "DC_cancelWU(%p-\"%s\")", wu, wu->data.name);
+
+ if (wu->data.state != DC_WU_RUNNING &&
+ wu->data.state != DC_WU_SUSPENDED)
+ {
+ DC_log(LOG_NOTICE, "Can not cancel a non-running/non-suspended wu");
+ return(DC_ERR_INTERNAL);
+ }
+ ret= _DC_stop_condor_job(wu);
+ if (wu->data.state == DC_WU_SUSPENDED)
+ ret= 0;
+ _DC_wu_set_state(wu, DC_WU_ABORTED);
+ return((ret==0)?DC_OK:DC_ERR_BADPARAM);
+}
+
+
+/* Temporarily suspends the execution of a work unit. */
+int
+DC_suspendWU(DC_Workunit *wu)
+{
+ GString *dn;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ DC_log(LOG_DEBUG, "DC_suspendWU(%p-\"%s\")", wu, wu->data.name);
+
+ if (wu->data.state != DC_WU_RUNNING)
+ {
+ DC_log(LOG_NOTICE, "Can not suspend a non-running wu");
+ return(DC_ERR_INTERNAL);
+ }
+ dn= g_string_new(wu->data.workdir);
+ g_string_append(dn, "/");
+ g_string_append(dn, _DC_wu_cfg(wu, cfg_management_box));
+ _DC_create_message(dn->str, _DCAPI_MSG_COMMAND, _DCAPI_CMD_SUSPEND,
+ NULL);
+ g_string_free(dn, TRUE);
+ /*wu->asked_to_suspend= TRUE;*/
+ return(DC_OK);
+}
+
+
+/* Resumes computation of a previously suspended work unit. */
+int
+DC_resumeWU(DC_Workunit *wu)
+{
+ int ret;
+ char *id;
+ GString *dn;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ DC_log(LOG_DEBUG, "DC_resumeWU(%p-\"%s\")", wu, wu->data.name);
+
+ if (wu->data.state != DC_WU_SUSPENDED)
+ {
+ DC_log(LOG_NOTICE, "Can not resume a non-suspended wu");
+ return(DC_ERR_INTERNAL);
+ }
+ dn= g_string_new(wu->data.workdir);
+ g_string_append(dn, "/");
+ g_string_append(dn, _DC_wu_cfg(wu, cfg_management_box));
+ _DC_create_message(dn->str, _DCAPI_MSG_COMMAND, _DCAPI_CMD_RESUME,
+ NULL);
+ g_string_free(dn, TRUE);
+ ret= _DC_start_condor_job(wu);
+ if (ret == 0)
+ {
+ _DC_wu_update_condor_events(wu);
+ while (wu->condor_events->len == 0)
+ {
+ sleep(1);
+ _DC_wu_update_condor_events(wu);
+ }
+ DC_log(LOG_DEBUG, "DC_ResumeWU...");
+ _DC_wu_set_state(wu, DC_WU_RUNNING);
+ id= DC_getWUId(wu);
+ DC_log(LOG_INFO, "Condor id of wu's job: %s", id);
+ g_free(id);
+ }
+ return(ret);
+}
+
+
+/* End of condor/condor_managewu.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_master.c b/dcapi/condor/condor_master.c
new file mode 100644
index 0000000..bb57e6f
--- /dev/null
+++ b/dcapi/condor/condor_master.c
@@ -0,0 +1,1356 @@
+/*
+ * condor/condor_master.c
+ *
+ * DC-API functions of master side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <dirent.h>
+#include <sys/stat.h>
+
+#include "dc.h"
+
+#include "condor_master.h"
+#include "condor_common.h"
+#include "condor_defs.h"
+#include "condor_wu.h"
+#include "condor_log.h"
+#include "condor_utils.h"
+#include "condor_event.h"
+
+
+/* some utils */
+
+static struct {
+ DC_WUState state;
+ char *name;
+}
+_DC_state_names[]= {
+ { DC_WU_READY, "READY" },
+ { DC_WU_RUNNING, "RUNNING" },
+ { DC_WU_FINISHED, "FINISHED" },
+ { DC_WU_SUSPENDED, "SUSPENDED" },
+ { DC_WU_ABORTED, "ABORTED" },
+ { DC_WU_UNKNOWN, "UNKNOWN" },
+ { 0, NULL }
+};
+
+
+char *
+_DC_state_name(DC_WUState state)
+{
+ int i;
+ for (i= 0; _DC_state_names[i].name; i++)
+ if (_DC_state_names[i].state == state)
+ return(_DC_state_names[i].name);
+ return("(unknown)");
+}
+
+
+/********************************************************************* INIT */
+
+static GHashTable *_DC_wu_table= NULL;
+uuid_t _DC_project_uuid;
+char *_DC_project_uuid_str= NULL;
+char *_DC_config_file= NULL;
+
+DC_ResultCallback _DC_result_callback= NULL;
+DC_SubresultCallback _DC_subresult_callback= NULL;
+DC_MessageCallback _DC_message_callback= NULL;
+
+
+
+/* Initializes the DC-API. */
+int
+DC_initMaster(const char *configFile)
+{
+ int ret;
+ char *cfgval= NULL;
+ GString *gs;
+
+ if (!configFile)
+ configFile= DC_CONFIG_FILE;
+ if (configFile[0] != '/')
+ {
+ gs= g_string_new(g_get_current_dir());
+ g_string_append(gs, "/");
+ g_string_append(gs, configFile);
+ }
+ else
+ gs= g_string_new(configFile);
+ _DC_config_file= gs->str;
+ g_string_free(gs, FALSE);
+
+ ret= _DC_parseCfg(configFile);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "DC-API config file (%s) parse error",
+ configFile);
+ return(ret);
+ }
+ DC_log(LOG_DEBUG, "DC_initMaster(%s)", configFile);
+
+ _DC_init_utils();
+ _DC_init_common();
+
+ if (!_DC_wu_table)
+ _DC_wu_table= g_hash_table_new_full(g_str_hash,
+ g_str_equal,
+ NULL,
+ NULL);
+
+ cfgval= DC_getCfgStr(CFG_INSTANCEUUID);
+ if (!cfgval)
+ {
+ DC_log(LOG_ERR, "Setting of %s is missing from config file %s",
+ CFG_INSTANCEUUID, configFile);
+ return(DC_ERR_CONFIG);
+ }
+ /*
+ ret= uuid_parse((char *)cfgval, _DC_project_uuid);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Invalid project UUID");
+ g_free(cfgval);
+ return(DC_ERR_CONFIG);
+ }
+ */
+ if (_DC_project_uuid_str)
+ g_free(_DC_project_uuid_str);
+ _DC_project_uuid_str= g_strdup(cfgval);
+ g_free(cfgval);
+
+ /* Enforce a canonical string representation of the UUID */
+ /*uuid_unparse_lower(_DC_project_uuid, _DC_project_uuid_str);*/
+ uuid_parse(_DC_project_uuid_str, _DC_project_uuid);
+
+ return(DC_OK);
+}
+
+
+/****************************************************** Manage WU structure */
+
+/* Creates one work unit. */
+DC_Workunit *
+DC_createWU(const char *clientName,
+ const char *arguments[], int subresults, const char *tag)
+{
+ DC_Workunit *wu;
+ char uuid_str[37];
+ uuid_t wu_uuid;
+ int ret;
+
+ wu= g_new0(DC_Workunit, 1);
+ _DC_wu_changed(wu);
+
+ DC_log(LOG_DEBUG, "DC_createWU(%s, %p, %d, %s)=%p",
+ clientName, arguments, subresults, tag, wu);
+
+ _DC_wu_set_client_name(wu, clientName);
+
+ wu->argv= g_strdupv((char **)arguments);
+ for (_DC_wu_set_argc(wu, 0);
+ arguments && arguments[wu->data.argc];
+ _DC_wu_set_argc(wu, wu->data.argc+1))
+ ;
+ _DC_wu_set_subresults(wu, subresults);
+ _DC_wu_set_tag(wu, g_strdup(tag));
+
+ uuid_generate(wu_uuid);
+ uuid_unparse_lower(wu_uuid, uuid_str);
+ {
+ char *wd= DC_getCfgStr(CFG_WORKDIR);
+ GString *s= g_string_new("");
+ GString *d= g_string_new("");
+
+ g_string_printf(d, "%s/.dcapi-%s/%.2s/%s", wd,
+ _DC_project_uuid_str, uuid_str, uuid_str);
+ g_string_printf(s, "%s", uuid_str);
+
+ _DC_wu_set_uuid_str(wu, s->str);
+ g_string_free(s, FALSE);
+ /*g_string_free(hd, TRUE);*/
+ _DC_wu_set_workdir(wu, d->str);
+ g_string_free(d, FALSE);
+ free(wd);
+ }
+
+ GString *wu_name;
+ wu_name = g_string_new("");
+ if (tag)
+ g_string_printf(wu_name, "%s_%s_%s",_DC_project_uuid_str,
+ wu->data.uuid_str, tag);
+ else
+ g_string_printf(wu_name, "%s_%s", _DC_project_uuid_str,
+ wu->data.uuid_str);
+ wu->data.name = strdup(wu_name->str);
+
+ wu->condor_events= g_array_new(FALSE, FALSE,
+ sizeof(struct _DC_condor_event));
+
+ if (!_DC_wu_table)
+ DC_initMaster(NULL);
+ g_hash_table_insert(_DC_wu_table, wu_name->str, wu);
+
+ g_string_free(wu_name, FALSE);
+
+ ret= _DC_mkdir_with_parents(wu->data.workdir, 0700);
+ if (ret)
+ {
+ DC_log(LOG_ERR,
+ "Failed to create WU working directory %s: %s",
+ wu->data.workdir, strerror(errno));
+ DC_destroyWU(wu);
+ return(NULL);
+ }
+
+ _DC_wu_make_client_config(wu);
+ _DC_wu_make_client_executables(wu);
+ _DC_wu_set_state(wu, DC_WU_READY);
+
+ return(wu);
+}
+
+
+/* Releases internal resources allocated to a work unit. */
+void
+DC_destroyWU(DC_Workunit *wu)
+{
+ int i;
+ GString *s;
+ int serialized= FALSE;
+
+ if (!_DC_wu_check(wu))
+ return;
+ DC_log(LOG_DEBUG, "DC_destroyWU(%p-\"%s\")", wu, wu->data.name);
+
+ if (_DC_wu_table)
+ g_hash_table_remove(_DC_wu_table, wu->data.name);
+
+ s= g_string_new("");
+
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ if ((i= _DC_nuof_messages(s->str, _DCAPI_SIG_SERIALIZED)) > 0)
+ {
+ DC_log(LOG_NOTICE, "destroying a serialized "
+ "wu: %s", wu->data.name);
+ serialized= TRUE;
+ }
+
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_master_message_box));
+ if ((i= _DC_nuof_messages(s->str, _DCAPI_MSG_MESSAGE)) > 0)
+ DC_log(LOG_NOTICE, "%d master messages unhandled by "
+ "destroying wu: %s", i, wu->data.name);
+
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_client_message_box));
+ if ((i= _DC_nuof_messages(s->str, _DCAPI_MSG_MESSAGE)) > 0)
+ DC_log(LOG_NOTICE, "%d client messages unhandled of wu: %s",
+ i, wu->data.name);
+
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_subresults_box));
+ if ((i= _DC_nuof_messages(s->str, _DCAPI_MSG_LOGICAL)) > 0)
+ DC_log(LOG_NOTICE, "%d client subresults unhandled of wu: %s",
+ i, wu->data.name);
+ g_string_free(s, TRUE);
+
+ if (wu->data.state == DC_WU_READY ||
+ wu->data.state == DC_WU_UNKNOWN)
+ DC_log(LOG_NOTICE, "Destroying an unstarted wu: %s", wu->data.name);
+
+ if (wu->data.state == DC_WU_RUNNING ||
+ wu->data.state == DC_WU_SUSPENDED)
+ {
+ DC_log(LOG_NOTICE, "Destroying a started but not yet "
+ "finished wu: %s", wu->data.name);
+ DC_log(LOG_INFO, "WU has been started but not finished "
+ "not removing its workdir %s", wu->data.workdir);
+ }
+ else if (wu->data.workdir)
+ {
+ const char *name;
+ char *exec;
+ GDir *dir;
+ int ret, i;
+ GString *fn;
+ int leave;
+
+ leave= strtol(_DC_wu_cfg(wu, cfg_leave_files), 0, 0);
+ if (leave)
+ DC_log(LOG_INFO, "WU's files not deleted");
+
+ /* Removing generated files */
+ fn= g_string_new(wu->data.workdir);
+ if (!leave &&
+ !serialized)
+ {
+ fn= g_string_append(fn, "/");
+ fn= g_string_append(fn, _DC_wu_cfg(wu, cfg_submit_file));
+ unlink(fn->str);
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ CLIENT_CONFIG_NAME);
+ unlink(fn->str);
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_executable));
+ unlink(fn->str);
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_condor_log));
+ unlink(fn->str);
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ DC_LABEL_STDOUT);
+ unlink(fn->str);
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ DC_LABEL_STDERR);
+ unlink(fn->str);
+ exec= _DC_wu_cfg(wu, cfg_executable);
+ if (!exec)
+ exec= wu->data.client_name;
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ exec);
+ unlink(fn->str);
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ DC_getClientCfgStr(wu->data.client_name,
+ "LogFile",
+ TRUE));
+ unlink(fn->str);
+ }
+
+ if (!leave &&
+ !serialized)
+ {
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_client_message_box));
+ i= _DC_rm(fn->str);
+ if (i > 0)
+ DC_log(LOG_NOTICE, "%d unhandled client messages "
+ "remained", i);
+
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ i= _DC_rm(fn->str);
+ if (i > 0)
+ DC_log(LOG_NOTICE, "%d unhandled system messages "
+ "remained", i);
+
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_master_message_box));
+ i= _DC_rm(fn->str);
+ if (i > 0)
+ DC_log(LOG_NOTICE, "%d unhandled master messages "
+ "remained", i);
+
+ g_string_printf(fn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_subresults_box));
+ i= _DC_rm(fn->str);
+ if (i > 0)
+ DC_log(LOG_NOTICE, "%d unhandled client subresults "
+ "remained", i);
+ }
+
+ g_string_free(fn, TRUE);
+
+ /* The work directory should not contain any extra files, but
+ * just in case */
+ if (!leave &&
+ !serialized)
+ {
+ dir= g_dir_open(wu->data.workdir, 0, NULL);
+ while (dir &&
+ (name= g_dir_read_name(dir)))
+ {
+ GString *str= g_string_new(wu->data.workdir);
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, name);
+ DC_log(LOG_INFO, "Removing unknown file %s",
+ str->str);
+ unlink(str->str);
+ g_string_free(str, TRUE);
+ }
+ if (dir)
+ g_dir_close(dir);
+
+ ret= rmdir(wu->data.workdir);
+ if (ret)
+ {
+ DC_log(LOG_WARNING, "Failed to remove WU working "
+ "directory %s: %s", wu->data.workdir,
+ strerror(errno));
+ }
+ }
+ g_free(wu->data.workdir);
+ }
+
+
+ _DC_wu_set_client_name(wu, NULL);
+ g_free(wu->data.uuid_str);
+ g_strfreev(wu->argv);
+ if (wu->data.name != NULL)
+ g_free(wu->data.name);
+ if (wu->data.tag != NULL)
+ g_free(wu->data.tag);
+ g_array_free(wu->condor_events, TRUE);
+ g_free(wu);
+}
+
+
+/* Sets an input file for the work unit. */
+int
+DC_addWUInput(DC_Workunit *wu,
+ const char *logicalFileName,
+ const char *URL,
+ DC_FileMode fileMode, ...)
+{
+ DC_PhysicalFile *file;
+ char *workpath;
+ int ret;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ /* Remote file aren't supported */
+ if (DC_FILE_REMOTE == fileMode)
+ {
+ DC_log(LOG_ERR, "Unsupported file mode for input file %s",
+ logicalFileName);
+ return(DC_ERR_BADPARAM);
+ }
+
+ DC_log(LOG_DEBUG, "DC_addWUInput(%p-\"%s\", %s, %s, %d)",
+ wu, wu->data.name, logicalFileName, URL, fileMode);
+
+ if (wu->data.state != DC_WU_READY)
+ {
+ DC_log(LOG_INFO, "Modifying started wu %s", wu->data.name);
+ return(DC_ERR_BADPARAM);
+ }
+
+ /* Sanity checks */
+ ret= _DC_wu_check_logical_name(wu, logicalFileName);
+ if (ret)
+ return(ret);
+ workpath= _DC_wu_get_workdir_path(wu, logicalFileName, FILE_IN);
+ file= _DC_createPhysicalFile(logicalFileName, workpath);
+ g_free(workpath);
+ if (!file)
+ return(DC_ERR_INTERNAL);
+
+ switch (fileMode)
+ {
+ case DC_FILE_REGULAR:
+ DC_log(LOG_DEBUG, "Copying regular file %s to %s",
+ URL, file->path);
+ ret= _DC_copyFile(URL, file->path);
+ if (ret)
+ {
+ _DC_destroyPhysicalFile(file);
+ return(ret/*DC_ERR_BADPARAM*/); /* XXX */
+ }
+ break;
+ case DC_FILE_PERSISTENT:
+ DC_log(LOG_DEBUG, "Copying persistent file %s to %s",
+ URL, file->path);
+ ret= _DC_copyFile(URL, file->path);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to copy %s to %s",
+ URL, file->path);
+ _DC_destroyPhysicalFile(file);
+ return(DC_ERR_BADPARAM); /* XXX */
+ }
+ /* Remember the file mode */
+ file->mode= DC_FILE_PERSISTENT;
+ break;
+ case DC_FILE_VOLATILE:
+ DC_log(LOG_DEBUG, "Renaming %s to %s",
+ URL, file->path);
+ ret= rename(URL, file->path);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to rename %s to %s: %s",
+ URL, file->path, strerror(errno));
+ _DC_destroyPhysicalFile(file);
+ return(DC_ERR_BADPARAM);
+ }
+ case DC_FILE_REMOTE:
+ break;
+ }
+
+ wu->input_files= g_list_append(wu->input_files, file);
+ /*wu->num_inputs++; */
+
+ return(0);
+}
+
+
+/* Defines an output file for the work unit. */
+int
+DC_addWUOutput(DC_Workunit *wu, const char *logicalFileName)
+{
+ int ret;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ DC_log(LOG_DEBUG, "DC_addWUOutput(%p-\"%s\", %s)",
+ wu, wu->data.name, logicalFileName);
+
+ if (wu->data.state != DC_WU_READY)
+ {
+ DC_log(LOG_INFO, "Modifying started wu %s", wu->data.name);
+ return(DC_ERR_BADPARAM);
+ }
+
+ /* Sanity checks */
+ ret= _DC_wu_check_logical_name(wu, logicalFileName);
+ if (ret)
+ return ret;
+ DC_log(LOG_DEBUG, "Adding out file %s",
+ logicalFileName);
+ wu->output_files= g_list_append(wu->output_files,
+ g_strdup(logicalFileName));
+ /*wu->num_outputs++;*/
+ return(0);
+}
+
+
+/* Sets the priority for the work unit. */
+int
+DC_setWUPriority(DC_Workunit *wu, int priority)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ DC_log(LOG_DEBUG, "DC_setWUPriority(%p-\"%s\", %d)",
+ wu, wu->data.name, priority);
+
+ if (wu->data.state != DC_WU_READY)
+ {
+ DC_log(LOG_INFO, "Modifying started wu %s", wu->data.name);
+ return(DC_ERR_BADPARAM);
+ }
+
+ return(DC_OK);
+}
+
+
+/* Sets the callback functions that will be called when a particular event. */
+void
+DC_setMasterCb(DC_ResultCallback resultcb,
+ DC_SubresultCallback subresultcb,
+ DC_MessageCallback msgcb)
+{
+ DC_log(LOG_DEBUG, "DC_setMasterCb(%p, %p, %p)",
+ resultcb, subresultcb, msgcb);
+
+ _DC_result_callback= resultcb;
+ _DC_subresult_callback= subresultcb;
+ _DC_message_callback= msgcb;
+}
+
+
+/* Queries the state of a work unit. */
+DC_WUState
+DC_getWUState(DC_Workunit *wu)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_WU_UNKNOWN);
+ return(wu->data.state);
+}
+
+
+/* Queries the low-level ID of the work unit. */
+char *
+DC_getWUId(const DC_Workunit *wu)
+{
+ GString *s;
+ struct _DC_condor_event *ce;
+
+ if (!_DC_wu_check(wu))
+ return(NULL);
+ _DC_wu_update_condor_events((DC_Workunit *)wu);
+ if (wu->condor_events->len == 0)
+ return(NULL);
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ wu->condor_events->len-1);
+ s= g_string_new("");
+ g_string_printf(s, "%d.%d", ce->cluster, ce->proc);
+ return(g_string_free(s, FALSE));
+}
+
+
+/* Queries the tag of a work unit. */
+char *
+DC_getWUTag(const DC_Workunit *wu)
+{
+ if (!_DC_wu_check(wu))
+ return(NULL);
+ return((wu->data.tag)?strdup(wu->data.tag):NULL);
+}
+
+
+#define _DC_SERIALIZED_SEPARATOR '|'
+
+static void
+_DC_sser(GString *ser,
+ _DC_serialized_token tok,
+ char *str)
+{
+ char *s;
+ if (!ser)
+ return;
+ g_string_append_printf(ser, "%c%c%s",
+ _DC_SERIALIZED_SEPARATOR,
+ 'a'+tok,
+ s= _DC_quote_string(str));
+ s?free(s):0;
+}
+
+static void
+_DC_iser(GString *ser,
+ _DC_serialized_token tok,
+ int i)
+{
+ if (!ser)
+ return;
+ g_string_append_printf(ser, "%c%c%d",
+ _DC_SERIALIZED_SEPARATOR,
+ 'a'+tok,
+ i);
+}
+
+
+/* Get the full path of a file in the WU's working directory */
+static char *
+_DC_workDirPath(const DC_Workunit *wu, const char *label, WorkdirFile type)
+{
+ static const char *const pfx[] = { "in_", "out_", "checkpoint", "dc_" };
+
+ if (type == FILE_CKPT)
+ return g_strdup_printf("%s%ccheckpoint", wu->data.workdir,
+ G_DIR_SEPARATOR);
+
+ return g_strdup_printf("%s%c%s%s", wu->data.workdir, G_DIR_SEPARATOR,
+ pfx[type], label);
+}
+
+
+/* Open a file in the WU's working directory */
+static FILE *
+open_workdir_file(const DC_Workunit *wu, const char *label,
+ WorkdirFile type, const char *mode)
+{
+ char *name;
+ FILE *f;
+
+ name = _DC_workDirPath(wu, label, type);
+ f = fopen(name, mode);
+ if (!f)
+ DC_log(LOG_ERR, "Failed to open %s (mode %s): %s",
+ name, mode, strerror(errno));
+ g_free(name);
+ return f;
+}
+
+/* Serializes a work unit description. */
+static char *
+_DC_serializeWU(DC_Workunit *wu)
+{
+ GString *dn, *ser;
+ char *s;
+ int i;
+ unsigned int u;
+
+ if (!_DC_wu_check(wu)) {
+ DC_log(LOG_ERR, "_DC_wu_check() failed for work unit");
+ return(NULL);
+ }
+
+ dn= g_string_new("");
+ g_string_printf(dn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ if (_DC_nuof_messages(dn->str, _DCAPI_SIG_SERIALIZED) > 0)
+ {
+ /* serialized already */
+ s= _DC_read_message(dn->str, _DCAPI_SIG_SERIALIZED, FALSE);
+ g_string_free(dn, TRUE);
+ return(s);
+ }
+ else
+ {
+ /* new serialization */
+ int r;
+ ser= g_string_new("");
+ s= _DC_quote_string(wu->data.name);
+ g_string_append_printf(ser, "%c%s", 'a'+st_name, s);
+ s?free(s):NULL;
+
+ _DC_sser(ser, st_workdir, wu->data.workdir);
+
+ _DC_sser(ser, st_tag, wu->data.tag);
+
+ _DC_sser(ser, st_client_name, wu->data.client_name);
+
+ _DC_sser(ser, st_uuid_str, wu->data.uuid_str);
+
+ _DC_iser(ser, st_argc, wu->data.argc);
+ for (i= 0; i<wu->data.argc; i++)
+ {
+ _DC_sser(ser, st_argv,
+ (wu->argv[i])?(wu->argv[i]):NULL);
+ }
+
+ _DC_iser(ser, st_state, wu->data.state);
+ _DC_sser(ser, st_state_name, _DC_state_name(wu->data.state));
+
+ for (u= r= 0; u < wu->condor_events->len; u++)
+ {
+ struct _DC_condor_event *ce;
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ u);
+ if (ce->reported)
+ r++;
+ }
+ _DC_iser(ser, st_nuof_reported, r);
+ for (u= 0; u < wu->condor_events->len; u++)
+ {
+ struct _DC_condor_event *ce;
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ u);
+ if (ce->reported)
+ _DC_iser(ser, st_reported, u);
+ }
+
+ s= ser->str;
+ g_string_free(ser, FALSE);
+
+ _DC_create_message(dn->str, _DCAPI_SIG_SERIALIZED,
+ s, NULL);
+ g_string_free(dn, TRUE);
+ return(s);
+ }
+ return(0);
+}
+
+char *
+DC_serializeWU(DC_Workunit *wu)
+{
+ FILE *f = open_workdir_file(wu, "serialized.txt", FILE_DCAPI, "w");
+ if (!f)
+ return NULL;
+ char *serialized_data = _DC_serializeWU(wu);
+ fprintf(f, "%s", serialized_data);
+ fclose(f);
+ return strdup(wu->data.name);
+}
+
+
+static int
+_DC_iunser(char *s)
+{
+ int i;
+ if (!s)
+ return(0);
+ i= strtol(s, 0, 0);
+ free(s);
+ return(i);
+}
+
+/* Restores a serialized work unit. */
+static DC_Workunit *
+_DC_deserializeWU(const char *buf)
+{
+ char *tok, *s, *b;
+ char sep[2]= "\0\0";
+ DC_Workunit *wu;
+ int argv_i= 0;
+ GString *dn;
+
+ wu= g_new0(DC_Workunit ,1);
+ _DC_wu_changed(wu);
+ wu->condor_events= g_array_new(FALSE, FALSE,
+ sizeof(struct _DC_condor_event));
+
+ b= strdup(buf);
+ sep[0]= _DC_SERIALIZED_SEPARATOR;
+ tok= strtok(b, sep);
+ while (tok)
+ {
+ _DC_serialized_token st= (_DC_serialized_token)(tok[0]-'a');
+ s= _DC_unquote_string(&tok[1]);
+ switch (st)
+ {
+ case st_name:
+ {
+ _DC_wu_set_name(wu, s);
+ break;
+ }
+ case st_workdir:
+ {
+ _DC_wu_set_workdir(wu, s);
+ _DC_wu_update_condor_events(wu);
+ break;
+ }
+ case st_tag:
+ {
+ _DC_wu_set_tag(wu, s);
+ break;
+ }
+ case st_client_name:
+ {
+ _DC_wu_set_client_name(wu, s);
+ if (!_DC_wu_table)
+ DC_initMaster(NULL);
+ g_hash_table_insert(_DC_wu_table, wu->data.name, wu);
+ break;
+ }
+ case st_uuid_str:
+ {
+ _DC_wu_set_uuid_str(wu, s);
+ break;
+ }
+ case st_argc:
+ {
+ _DC_wu_set_argc(wu, _DC_iunser(s));
+ wu->argv= g_new0(char*, wu->data.argc+1);
+ argv_i= 0;
+ break;
+ }
+ case st_argv:
+ {
+ if (argv_i < wu->data.argc)
+ {
+ wu->argv[argv_i]= s;
+ argv_i++;
+ }
+ break;
+ }
+ case st_state:
+ {
+ DC_log(LOG_DEBUG, "_DC_iunser");
+ _DC_wu_set_state(wu, (DC_WUState)_DC_iunser(s));
+ break;
+ }
+ case st_state_name:
+ {
+ free(s);
+ break;
+ }
+ case st_nuof_reported:
+ {
+ free(s);
+ break;
+ }
+ case st_reported:
+ {
+ unsigned int u;
+ u= _DC_iunser(s);
+ if (u < wu->condor_events->len)
+ {
+ struct _DC_condor_event *ce;
+ ce= &g_array_index(wu->condor_events,
+ struct _DC_condor_event,
+ u);
+ ce->reported= TRUE;
+ }
+ }
+ }
+ tok= strtok(NULL, sep);
+ }
+ free(b);
+
+ if (!_DC_file_exists(wu->data.workdir))
+ {
+ DC_log(LOG_ERR, "Deserialized wu: no workdir (%s)",
+ wu->data.workdir);
+ //DC_destroyWU(wu);
+ //return(NULL);
+ }
+ dn= g_string_new("");
+ g_string_printf(dn, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ _DC_read_message(dn->str, _DCAPI_SIG_SERIALIZED, TRUE);
+ g_string_free(dn, TRUE);
+ return(wu);
+}
+
+/********************************************************************
+ * Helper functions
+ */
+
+/* Calculate & create the working directory. The working directory has the
+ * form: <project work dir>/.dcapi-<project uuid>/<hash>/<wu uuid> Where <hash>
+ * is the first 2 hex digits of the uuid
+ */
+static char *get_workdir(const uuid_t uuid, int create)
+{
+ char *tmp, uuid_str[37], *cfgval;
+ GString *str;
+ int ret;
+
+ uuid_unparse_lower(uuid, uuid_str);
+
+ cfgval = DC_getCfgStr(CFG_WORKDIR);
+ if (!cfgval)
+ return NULL;
+ str = g_string_new(cfgval);
+ free(cfgval);
+
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, ".dcapi-");
+ g_string_append(str, _DC_project_uuid_str);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append_printf(str, "%02x", uuid[0]);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, uuid_str);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ tmp = str->str;
+ g_string_free(str, FALSE);
+ return tmp;
+
+error:
+ DC_log(LOG_ERR, "Failed to create WU working directory %s: %s",
+ str->str, strerror(errno));
+ g_string_free(str, TRUE);
+ return NULL;
+}
+
+
+DC_Workunit *
+DC_deserializeWU(const char *buf)
+{
+ DC_Workunit *wu;
+ char *uuid_str;
+ uuid_t uuid;
+ int ret;
+ char *workdir;
+ char *name = buf;
+ GString *wu_serialized_data;
+ char buffer[256];
+
+ /* Check if the WU belongs to this application */
+ uuid_str = g_strndup(name, 36);
+ ret = uuid_parse(uuid_str, uuid);
+ g_free(uuid_str);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "WU name '%s' contains illegal UUID", name);
+ return NULL;
+ }
+
+ if (uuid_compare(uuid, _DC_project_uuid))
+ {
+ DC_log(LOG_WARNING, "WU '%s' does not belong to this "
+ "application", name);
+ return NULL;
+ }
+
+ /* WU name syntax: <uuid> '_' <uuid> [ '_' <tag> ] */
+ if (name[36] != '_' || (strlen(name) > 73 && name[73] != '_'))
+ {
+ DC_log(LOG_ERR, "Illegal WU name syntax in '%s'", name);
+ return NULL;
+ }
+
+ /* Check the WU's UUID */
+ uuid_str = g_strndup(name + 37, 36);
+ ret = uuid_parse(uuid_str, uuid);
+ g_free(uuid_str);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "WU name '%s' contains illegal UUID", name);
+ return NULL;
+ }
+
+ workdir = get_workdir(uuid, 0);
+ wu = g_new0(DC_Workunit, 1);
+ wu->data.workdir = workdir;
+
+ FILE *f = open_workdir_file(wu, "serialized.txt", FILE_DCAPI, "r");
+ g_free(wu);
+ if (!f)
+ {
+ DC_log(LOG_ERR, "Could not read serialized work unit from '%s'", workdir);
+ return NULL;
+ }
+ wu_serialized_data = g_string_new("");
+ while (fgets(buffer, sizeof(buffer), f)) {
+ g_string_append(wu_serialized_data, buffer);
+ }
+ fclose(f);
+
+ wu = _DC_deserializeWU(wu_serialized_data->str);
+ return wu;
+}
+
+/* iterator for DC_getWUNumber() */
+static DC_WUState _DC_dd_look_for_state;
+static void _DC_dd_check_state(void *key, void *value, void *ptr)
+{
+ DC_Workunit *wu=(DC_Workunit *)value;
+ int *count= (int *)ptr;
+ if (wu->data.state == _DC_dd_look_for_state)
+ ++(*count);
+}
+
+/* Queries the number of WUs known to the API in the given state. */
+int
+DC_getWUNumber(DC_WUState state)
+{
+ int val= 0;
+
+ _DC_dd_look_for_state= state;
+ g_hash_table_foreach(_DC_wu_table, (GHFunc)_DC_dd_check_state, &val);
+ return(val);
+}
+
+
+/************************************************************** Main cycles */
+
+static void
+_DC_process_event(DC_MasterEvent *event)
+{
+ if (!event)
+ return;
+
+ DC_log(LOG_DEBUG, "Processing an event %d, calling callback...",
+ event->type);
+ switch (event->type)
+ {
+ case DC_MASTER_RESULT:
+ {
+ if (_DC_result_callback)
+ (*_DC_result_callback)(event->wu,
+ event->result);
+ break;
+ }
+ case DC_MASTER_SUBRESULT:
+ {
+ if (_DC_subresult_callback)
+ (*_DC_subresult_callback)(event->wu,
+ event->subresult->label,
+ event->subresult->path);
+ break;
+ }
+ case DC_MASTER_MESSAGE:
+ {
+ if (_DC_message_callback)
+ (*_DC_message_callback)(event->wu,
+ event->message);
+ break;
+ }
+ }
+ DC_destroyMasterEvent(event);
+}
+
+
+/* Waits for events and processes them. */
+int
+DC_processMasterEvents(int timeout)
+{
+ /* call callback and destroy event */
+ time_t start, now;
+ DC_MasterEvent *event;
+
+ DC_log(LOG_DEBUG, "DC_processMasterEvents(%d)",
+ timeout);
+
+ if ((event= DC_waitMasterEvent(NULL, 0)) != NULL)
+ _DC_process_event(event);
+ if (timeout==0)
+ return(DC_OK);
+
+ start= time(NULL);
+ now= time(NULL);
+ while (now-start <= timeout &&
+ g_hash_table_size(_DC_wu_table) > 0)
+ {
+ sleep(1);
+ if ((event= DC_waitMasterEvent(NULL, 0)) != NULL)
+ _DC_process_event(event);
+ now= time(NULL);
+ }
+ return(DC_OK);
+}
+
+
+static DC_MasterEvent *_DC_filtered_event;
+static int _DC_counter;
+
+static gboolean
+_DC_check_filtered_wu_event(gpointer wu_name, gpointer w, gpointer ptr)
+{
+ DC_Workunit *wu= (DC_Workunit *)w;
+ char *filter= (char *)ptr;
+ char *tag;
+ int match= TRUE;
+ gboolean found;
+
+ _DC_counter++;
+ tag= DC_getWUTag(wu);
+ if (filter)
+ if (strcmp(tag, filter) != 0)
+ tag= FALSE;
+ tag?free(tag):0;
+ if (!match)
+ {
+ return(FALSE);
+ }
+ if ((_DC_filtered_event= DC_waitWUEvent(wu, 0)) != NULL)
+ DC_log(LOG_DEBUG,
+ "DC_waitWUEvent found an event for wu %p-\"%s\"",
+ wu, wu->data.name);
+ found= _DC_filtered_event != NULL;
+ return(found);
+}
+
+/* Checks for events and return them. */
+DC_MasterEvent *
+DC_waitMasterEvent(const char *wuFilter, int timeout)
+{
+ /* no callback called! */
+ DC_Workunit *wu;
+ time_t start, now;
+
+ if (timeout)
+ DC_log(LOG_DEBUG, "DC_waitMasterEvent(%s, %d)",
+ wuFilter, timeout);
+
+ start= time(NULL);
+ now= time(NULL);
+ do
+ {
+ _DC_filtered_event= NULL;
+ _DC_counter= 0;
+ wu= (DC_Workunit *)
+ g_hash_table_find(_DC_wu_table,
+ _DC_check_filtered_wu_event,
+ (gpointer)wuFilter);
+
+ if (_DC_filtered_event)
+ return(_DC_filtered_event);
+ if (timeout)
+ sleep(1);
+ }
+ while (timeout != 0 &&
+ now-start <= timeout);
+ return(NULL);
+}
+
+
+/* Checks for events for a particular WU. */
+DC_MasterEvent *
+DC_waitWUEvent(DC_Workunit *wu, int timeout)
+{
+ /* no callback called! */
+ time_t start, now;
+ DC_MasterEvent *me= NULL;
+
+ if (!_DC_wu_check(wu))
+ return(NULL);
+ if (timeout)
+ DC_log(LOG_DEBUG, "DC_waitWUEvent(%p-\"%s\", %d)",
+ wu, wu->data.name, timeout);
+
+ start= time(NULL);
+ now= start;
+ do
+ {
+ _DC_wu_update_condor_events(wu);
+ if ((me= _DC_wu_check_client_messages(wu)) != NULL)
+ DC_log(LOG_DEBUG, "DC_waitWUEvent found a message for "
+ "wu %p-\"%s\"", wu, wu->data.name);
+ if (!me)
+ {
+ if ((me= _DC_wu_condor2api_event(wu)) != NULL)
+ DC_log(LOG_DEBUG,
+ "DC_waitWUEvent found a "
+ "condor event for wu %p-\"%s\"",
+ wu, wu->data.name);
+ }
+ if (me)
+ {
+ return(me);
+ }
+ now= time(NULL);
+ if (timeout)
+ sleep(1);
+ }
+ while (timeout !=0 &&
+ now-start <= timeout);
+ return(NULL);
+}
+
+
+/* Destroys an event. */
+void
+DC_destroyMasterEvent(DC_MasterEvent *event)
+{
+ DC_log(LOG_DEBUG, "DC_destroyMasterEvent(%p)", event);
+ _DC_event_destroy(event);
+}
+
+
+/**************************************************************** Messaging */
+
+/* Sends a message to a running work unit. */
+int
+DC_sendWUMessage(DC_Workunit *wu, const char *message)
+{
+ GString *dn;
+ int ret;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ DC_log(LOG_DEBUG, "DC_sendWUMessage(%p-\"%s\", %s)",
+ wu, wu->data.name, message);
+ dn= g_string_new(wu->data.workdir);
+ g_string_append(dn, "/");
+ g_string_append(dn, _DC_wu_cfg(wu, cfg_master_message_box));
+ ret= _DC_create_message(dn->str, _DCAPI_MSG_MESSAGE, message, NULL);
+ g_string_free(dn, TRUE);
+ return(ret);
+}
+
+
+/********************************************************** Result handling */
+
+/* Queries what optional fields are present in the result. */
+unsigned
+DC_getResultCapabilities(const DC_Result *result)
+{
+ int cap;
+ char *fn;
+
+ /* Fix #1106 */
+ cap= DC_GC_EXITCODE | DC_GC_LOG;
+ /*cap|= DC_GC_STDOUT | DC_GC_STDERR;*/
+ fn= DC_getResultOutput(result, DC_LABEL_STDERR);
+ if (_DC_file_exists(fn) &&
+ !_DC_file_empty(fn))
+ cap|= DC_GC_STDERR;
+ free(fn);
+ fn= DC_getResultOutput(result, DC_LABEL_STDOUT);
+ if (_DC_file_exists(fn))
+ cap|= DC_GC_STDOUT;
+ free(fn);
+
+ return(cap);
+}
+
+
+/* Returns the WU that generated this result. */
+DC_Workunit *
+DC_getResultWU(DC_Result *result)
+{
+ if (!result)
+ return(NULL);
+ return(result->wu);
+}
+
+
+/* Returns the exit code of the client application. */
+int
+DC_getResultExit(const DC_Result *result)
+{
+ int i;
+
+ if (!result)
+ return(0);
+ if (!_DC_wu_check(result->wu))
+ return(0);
+ if (_DC_wu_exit_code(result->wu, &i) != DC_OK)
+ return(0);
+ return(i);
+}
+
+
+/* Returns the local name of an output file. */
+char *
+DC_getResultOutput(const DC_Result *result, const char *logicalFileName)
+{
+ GString *fn;
+
+ if (!result)
+ return(NULL);
+ if (!_DC_wu_check(result->wu))
+ return(NULL);
+ fn= g_string_new(result->wu->data.workdir);
+ fn= g_string_append(fn, "/");
+ if (strcmp(logicalFileName, DC_LABEL_CLIENTLOG) == 0)
+ {
+ /* Fix #1107 */
+ char *s= DC_getClientCfgStr(result->wu->data.client_name,
+ "LogFile",
+ FALSE);
+ if (s)
+ {
+ fn= g_string_append(fn, s);
+ free(s);
+ }
+ else
+ fn= g_string_append(fn, DC_LABEL_CLIENTLOG);
+ }
+ else
+ fn= g_string_append(fn, logicalFileName);
+ return(g_string_free(fn, FALSE));
+}
+
+
+/* Application level configuration parameter */
+char *
+_DC_acfg(enum _DC_e_param what)
+{
+ char *v;
+
+ v= DC_getCfgStr(_DC_params[what].name);
+ if (v &&
+ *v)
+ return(v);
+ return(_DC_params[what].def);
+}
+
+
+/* End of condor/condor_master.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_master.h b/dcapi/condor/condor_master.h
new file mode 100644
index 0000000..16b3777
--- /dev/null
+++ b/dcapi/condor/condor_master.h
@@ -0,0 +1,37 @@
+/*
+ * condor/condor_master.h
+ *
+ * DC-API functions of master side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#ifndef _DC_API_CONDOR_MASTER_H_
+#define _DC_API_CONDOR_MASTER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "dc.h"
+
+#include "condor_common.h"
+
+
+extern char *_DC_config_file;
+
+extern char *_DC_acfg(enum _DC_e_param what);
+
+extern char *_DC_state_name(DC_WUState state);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_master.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_result.c b/dcapi/condor/condor_result.c
new file mode 100644
index 0000000..b6ea3de
--- /dev/null
+++ b/dcapi/condor/condor_result.c
@@ -0,0 +1,36 @@
+/*
+ * condor/condor_result.c
+ *
+ * DC-API functions to handle DC_Result data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include "condor_result.h"
+
+
+DC_Result *
+_DC_result_create(DC_Workunit *wu)
+{
+ DC_Result *r;
+
+ r= g_new0(DC_Result, 1);
+ r->wu= wu;
+ return(r);
+}
+
+
+void
+_DC_result_destroy(DC_Result *result)
+{
+ if (!result)
+ return;
+ g_free(result);
+}
+
+
+/* End of condor_result.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_result.h b/dcapi/condor/condor_result.h
new file mode 100644
index 0000000..714a078
--- /dev/null
+++ b/dcapi/condor/condor_result.h
@@ -0,0 +1,33 @@
+/*
+ * condor/condor_result.h
+ *
+ * DC-API functions to handle DC_Result data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#ifndef _DC_API_CONDOR_RESULT_H_
+#define _DC_API_CONDOR_RESULT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "condor_defs.h"
+
+
+extern DC_Result *_DC_result_create(DC_Workunit *wu);
+extern void _DC_result_destroy(DC_Result *result);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_result.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_slave.c b/dcapi/condor/condor_slave.c
new file mode 100644
index 0000000..a1f8106
--- /dev/null
+++ b/dcapi/condor/condor_slave.c
@@ -0,0 +1,365 @@
+/*
+ * condor/condor_slave.c
+ *
+ * DC-API functions of slave side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "dc_common.h"
+#include "dc_client.h"
+#include "dc_internal.h"
+
+#include "condor_common.h"
+#include "condor_slave.h"
+#include "condor_utils.h"
+
+
+static int _DC_checkpoint_file_requested= 0;
+static int _DC_checkpoint_made= 0;
+
+static char *
+_DC_cfg(enum _DC_e_param what)
+{
+ if (what >= cfg_nuof)
+ return(NULL);
+ if (_DC_params[what].lvalue)
+ return(_DC_params[what].lvalue);
+
+ _DC_params[what].lvalue= DC_getCfgStr(_DC_params[what].name);
+ if (_DC_params[what].lvalue)
+ return(_DC_params[what].lvalue);
+ return(_DC_params[what].def);
+}
+
+/* Initializes the client API. */
+int DC_initClient(void)
+{
+ char *message;
+ /*extern int _DC_parseCfg(const char *cfgfile);*/
+
+ int ret= _DC_parseCfg(CLIENT_CONFIG_NAME);
+ if (ret)
+ fprintf(stderr, "Error parsing configfile %s",
+ CLIENT_CONFIG_NAME);
+
+ _DC_init_utils();
+ _DC_init_common();
+
+ DC_log(LOG_DEBUG, "Slave dcapi initialized");
+
+ message= _DC_read_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_COMMAND, /*FALSE*/0);
+ if (message &&
+ strcmp(message, _DCAPI_CMD_RESUME) == 0)
+ {
+ DC_log(LOG_INFO, "Resume, restarting...");
+ _DC_read_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_COMMAND, /*TRUE*/1);
+ }
+
+ return(ret);
+}
+
+
+/* Resolves the local name of input/output files. */
+char *DC_resolveFileName(DC_FileType type,
+ const char *logicalFileName)
+{
+ /* init_log calls this fn, so it is not possible to call DC_log
+ from here */
+ /*DC_log(LOG_DEBUG, "DC_resolveFileName(%d,%s)",
+ type, logicalFileName);*/
+ char *cn= _DC_cfg(cfg_checkpoint_file);
+ if (!strcmp(logicalFileName, DC_CHECKPOINT_FILE))
+ {
+ switch (type)
+ {
+ case DC_FILE_IN:
+ {
+ /* - param of last DC_checkpointMade()
+ - filename created by previous run
+ - NULL otherwise */
+ if (_DC_checkpoint_made)
+ {
+ char *fn= (char*)malloc(strlen(cn)+100);
+ sprintf(fn, "%s_finished.txt", cn);
+ return(fn);
+ }
+ else
+ {
+ FILE *f;
+ char *fn= (char*)malloc(strlen(cn)+100);
+ sprintf(fn, "%s_finished.txt", cn);
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ fclose(f);
+ return(fn);
+ }
+ else
+ {
+ free(fn);
+ return(NULL);
+ }
+ }
+ break;
+ }
+ case DC_FILE_OUT:
+ {
+ char *s;
+ /* new non-existant name */
+ if (_DC_checkpoint_file_requested)
+ {
+ DC_log(LOG_ERR, "Checkpoint file creation "
+ "can not be restarted "
+ "(DC_resolveFileName("
+ DC_CHECKPOINT_FILE
+ ") called twice without calling of "
+ "DC_checkpointMade())");
+ return(NULL);
+ }
+ _DC_checkpoint_file_requested= 1;
+ s= (char*)malloc(strlen(cn)+100);
+ sprintf(s, "%s_creating.txt", cn);
+ return(s);
+ break;
+ }
+ default:
+ return(NULL);
+ }
+ }
+ return(strdup((char*)logicalFileName));
+ switch (type)
+ {
+ case DC_FILE_IN:
+ {
+ /* registered by DC_addWUInput() */
+ break;
+ }
+ case DC_FILE_OUT:
+ {
+ /* registered by DC_addWUOutput */
+ break;
+ }
+ case DC_FILE_TMP:
+ {
+ /* non-registered */
+ break;
+ }
+ default:
+ return(NULL);
+ }
+}
+
+
+/* Sends a sub-result back to the master. */
+int DC_sendResult(const char *logicalFileName,
+ const char *path,
+ DC_FileMode fileMode)
+{
+ char *fn;
+ int ret;
+ /*extern int _DC_copyFile(const char *src, const char *dst);*/
+
+ DC_log(LOG_DEBUG, "DC_sendResult(%s,%s,%d)",
+ logicalFileName,
+ path,
+ fileMode);
+ fn= malloc(strlen(logicalFileName)+100);
+ strcpy(fn, _DC_cfg(cfg_subresults_box));
+ strcat(fn, "/real_files");
+ if ((ret= _DC_mkdir_with_parents(fn, S_IRWXU|
+ S_IRGRP|S_IXGRP|
+ S_IROTH|S_IXOTH)) != DC_OK)
+ {
+ DC_log(LOG_ERR, "Failed to create dir for subresult (%s): %s",
+ fn, strerror(errno));
+ free(fn);
+ return(ret);
+ }
+ strcat(fn, "/");
+ strcat(fn, logicalFileName);
+ if ((ret= _DC_copyFile(path, fn)) != DC_OK)
+ {
+ DC_log(LOG_ERR, "Failed to copy subresult file %s to "
+ "%s", path, fn);
+ free(fn);
+ return(ret);
+ }
+ ret= _DC_create_message(_DC_cfg(cfg_subresults_box),
+ _DCAPI_MSG_LOGICAL, logicalFileName, NULL);
+ free(fn);
+ return(ret);
+}
+
+
+/* Sends a message to the master. */
+int DC_sendMessage(const char *message)
+{
+ DC_log(LOG_DEBUG, "DC_sendMessage(%s)", message);
+ return _DC_create_message(_DC_cfg(cfg_client_message_box),
+ _DCAPI_MSG_MESSAGE, message, NULL);
+}
+
+
+/* Checks for application control events. */
+DC_ClientEvent *DC_checkClientEvent(void)
+{
+ char *message;
+ DC_ClientEvent *e= NULL;
+
+ message= _DC_read_message(_DC_cfg(cfg_master_message_box),
+ _DCAPI_MSG_MESSAGE, /*TRUE*/1);
+ if (message)
+ {
+ if ((e= calloc(1, sizeof(DC_ClientEvent))))
+ {
+ DC_log(LOG_DEBUG, "API event created: %p", e);
+ e->type= DC_CLIENT_MESSAGE;
+ e->message= message;
+ DC_log(LOG_DEBUG, "Message of the event: %s",
+ e->message);
+ }
+ else
+ {
+ free(message);
+ DC_log(LOG_ERR, "Failed to create "
+ "API event, memory allocation "
+ "error");
+ }
+ return(e);
+ }
+
+ message= _DC_read_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_COMMAND, /*TRUE*/1);
+ if (message &&
+ strcmp(message, _DCAPI_CMD_SUSPEND) == 0)
+ {
+ char *fn;
+ int f;
+
+ DC_log(LOG_INFO, "Master asked me to suspend");
+ _DC_create_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_ACK,
+ _DCAPI_ACK_SUSPEND,
+ NULL);
+
+ fn= DC_resolveFileName(DC_FILE_IN, DC_CHECKPOINT_FILE);
+ if (fn != NULL)
+ free(fn);
+ else
+ {
+ DC_log(LOG_WARNING, "Slave suspending but "
+ "no checkpoint made yet");
+ free(fn);
+ }
+
+ fflush(NULL);
+ fn= DC_resolveFileName(DC_FILE_OUT, DC_LABEL_STDOUT);
+ if (fn)
+ {
+ if ((f= open(fn, O_APPEND)) > 0)
+ {
+ fsync(f);
+ close(f);
+ }
+ free(fn);
+ }
+ _DC_create_message(_DC_cfg(cfg_output_cache),
+ DC_LABEL_STDOUT,
+ NULL,
+ DC_LABEL_STDOUT);
+ fn= DC_resolveFileName(DC_FILE_OUT, DC_LABEL_STDERR);
+ if (fn)
+ {
+ if ((f= open(fn, O_APPEND)) > 0)
+ {
+ fsync(f);
+ close(f);
+ }
+ free(fn);
+ }
+ _DC_create_message(_DC_cfg(cfg_output_cache),
+ DC_LABEL_STDERR,
+ NULL,
+ DC_LABEL_STDERR);
+
+ DC_finishClient(0);
+ }
+ return(NULL);
+}
+
+
+/* Destroys the event-specific data returned by DC_checkClientEvent(). */
+void DC_destroyClientEvent(DC_ClientEvent *event)
+{
+ DC_log(LOG_DEBUG, "DC_destroyClientEvent(%p)", event);
+ if (event)
+ {
+ switch (event->type)
+ {
+ case DC_CLIENT_MESSAGE:
+ {
+ if (event->message)
+ free(event->message);
+ break;
+ }
+ default:
+ break;
+ }
+ free(event);
+ }
+}
+
+
+/* Indicates that an application-level checkpoint has completed. */
+void DC_checkpointMade(const char *fileName)
+{
+ DC_log(LOG_DEBUG, "DC_checkpointMade(%s)", fileName);
+ _DC_checkpoint_file_requested= 0;
+ if (fileName)
+ {
+ char *cn= _DC_cfg(cfg_checkpoint_file);
+ char *fn;
+ fn= (char*)malloc(strlen(cn)+100);
+ sprintf(fn, "%s_finished.txt", cn);
+ if (rename(fileName, fn) != 0)
+ {
+ DC_log(LOG_ERR, "Renaming %s to %s failed: %s",
+ fileName, fn, strerror(errno));
+ }
+ else
+ _DC_checkpoint_made++;
+ free(fn);
+ }
+}
+
+
+/* Informs the user interface about the fraction of work already done. */
+void DC_fractionDone(double fraction)
+{
+ DC_log(LOG_DEBUG, "DC_fractionDone(%g)", fraction);
+}
+
+
+/* Finishes computation. */
+void DC_finishClient(int exitcode)
+{
+ DC_log(LOG_DEBUG, "DC_finishClient(%d)", exitcode);
+ exit(exitcode);
+}
+
+
+/* End of condor/condor_slave.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_slave.h b/dcapi/condor/condor_slave.h
new file mode 100644
index 0000000..3b4e3d7
--- /dev/null
+++ b/dcapi/condor/condor_slave.h
@@ -0,0 +1,31 @@
+/*
+ * condor/condor_slave.h
+ *
+ * DC-API functions of slave side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#ifndef __DC_API_CONDOR_SLAVE_H_
+#define __DC_API_CONDOR_SLAVE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Name of the checkpoint file */
+#define CKPT_LABEL "dc_checkpoint"
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_slave.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_utils.c b/dcapi/condor/condor_utils.c
new file mode 100644
index 0000000..63fe59d
--- /dev/null
+++ b/dcapi/condor/condor_utils.c
@@ -0,0 +1,474 @@
+/*
+ * condor/condor_utils.c
+ *
+ * DC-API usefull functions
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "dc_internal.h"
+#include "dc_common.h"
+
+#include "condor_utils.h"
+#include "condor_common.h"
+
+
+void
+_DC_init_utils(void)
+{
+}
+
+
+int
+_DC_mkdir_with_parents(char *dn, mode_t mode)
+{
+ char *p= dn;
+ int res;
+
+ /*fprintf(stderr, "making %s (EEXIST=%d)\n", dn, EEXIST);*/
+ if (!dn ||
+ !*dn)
+ return(0);
+ while (*p)
+ {
+ while (*p != '/' &&
+ *p != '\0')
+ p++;
+ if (*p == '/')
+ {
+ *p= '\0';
+ if (*dn)
+ {
+ /*fprintf(stderr, "mkdir(%s,%d)=",dn,mode);*/
+ res= mkdir(dn, mode);
+ /*fprintf(stderr, "%d %d\n", res, errno);*/
+ }
+ *p= '/';
+ p++;
+ }
+ }
+ /*fprintf(stderr, "mkdir(%s,%d)=",dn,mode);*/
+ res= mkdir(dn, mode);
+ /*fprintf(stderr, "%d %d\n", res, errno);*/
+ if (res != 0 &&
+ errno == EEXIST)
+ return(DC_OK);
+ return(res?DC_ERR_SYSTEM:DC_OK);
+}
+
+
+static int
+_DC_rmsubdir(char *name)
+{
+ DIR *d;
+ struct dirent *de;
+ int i= 0;
+
+ if ((d= opendir(name)) == NULL)
+ {
+ DC_log(LOG_DEBUG, "Open %s: %s", name, strerror(errno));
+ return(0);
+ }
+ while ((de= readdir(d)))
+ {
+ if (strcmp(de->d_name, ".") != 0 &&
+ strcmp(de->d_name, "..") != 0)
+ {
+ char *s= malloc(strlen(name)+strlen(de->d_name) + 10);
+ strcpy(s, name);
+ strcat(s, "/");
+ strcat(s, de->d_name);
+ i+= _DC_rm(s);
+ free(s);
+ }
+ }
+ closedir(d);
+ if (rmdir(name))
+ {
+ DC_log(LOG_ERR, "Failed to rmdir %s: %s",
+ name, strerror(errno));
+ }
+ return(i);
+}
+
+int
+_DC_rm(char *name)
+{
+ struct stat s;
+ int i;
+
+ if (!name ||
+ !*name)
+ return(0);
+ i= lstat(name, &s);
+ if (i != 0)
+ {
+ return(0);
+ }
+ if (S_ISDIR(s.st_mode) &&
+ strcmp(name, ".") != 0 &&
+ strcmp(name, "..") != 0)
+ {
+ return(_DC_rmsubdir(name));
+ }
+ else
+ {
+ if (remove(name))
+ DC_log(LOG_ERR, "Failed to remove %s: %s",
+ name, strerror(errno));
+ }
+ return(1);
+}
+
+
+int
+_DC_file_exists(char *fn)
+{
+ return(access(fn, F_OK) == 0);
+}
+
+
+int
+_DC_file_empty(char *fn)
+{
+ struct stat s;
+
+ if (stat(fn, &s))
+ return(1);
+ return(s.st_size == 0);
+}
+
+
+int
+_DC_create_file(char *fn, char *what)
+{
+ FILE *f= fopen(fn, "w");
+ if (f)
+ {
+ if (what)
+ fprintf(f, "%s", what);
+ fclose(f);
+ return(DC_OK);
+ }
+ else
+ return(DC_ERR_SYSTEM);
+}
+
+
+char *
+_DC_get_file(char *fn)
+{
+ FILE *f;
+ char *buf= NULL;
+
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ int bs= 100, i;
+ char c;
+
+ buf= malloc(bs);
+ i= 0;
+ buf[i]= '\0';
+ while ((c= fgetc(f)) != EOF)
+ {
+ if (i > bs-2)
+ {
+ bs+= 100;
+ buf= realloc(buf, bs);
+ }
+ buf[i]= c;
+ i++;
+ buf[i]= '\0';
+ }
+ fclose(f);
+ }
+ return(buf);
+}
+
+
+static int _DC_message_id= 0;
+
+int
+_DC_create_message(char *box,
+ char *name,
+ const char *message,
+ char *msgfile)
+{
+ char *fn, *fn2;
+ FILE *f;
+ int ret= DC_OK;
+
+ /*DC_log(LOG_DEBUG, "DC_sendMessage(%s)", message);*/
+ if (!box ||
+ !name)
+ return(DC_ERR_BADPARAM);
+ mkdir(box, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
+ _DC_message_id++;
+ fn= malloc(strlen(box)+strlen(name)+100);
+ sprintf(fn, "%s/%s_creating.%d", box, name, _DC_message_id);
+ if ((f= fopen(fn, "w")) != NULL)
+ {
+ if (message)
+ fprintf(f, "%s", message);
+ else if (msgfile)
+ {
+ if (_DC_copyFile(msgfile, fn))
+ DC_log(LOG_ERR, "copyFile(%s,%s) error",
+ msgfile, fn);
+ }
+ else
+ {
+ DC_log(LOG_WARNING, "No message specified for "
+ "creation");
+ }
+ if (fsync(fileno(f)) != 0)
+ DC_log(LOG_ERR, "Sync of %s: %d %s", fn,
+ errno, strerror(errno));
+ fclose(f);
+ /*DC_log(LOG_DEBUG, "Message %d created", _DC_message_id);*/
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Error creating message file (%s)",
+ fn);
+ ret= DC_ERR_SYSTEM;
+ }
+ fn2= malloc(strlen(box)+strlen(name)+100);
+ sprintf(fn2, "%s/%s.%d", box, name, _DC_message_id);
+ rename(fn, fn2);
+ DC_log(LOG_DEBUG, "Message created: %s", fn2);
+ free(fn2);
+ free(fn);
+ return(ret);
+}
+
+
+int
+_DC_nuof_messages(char *box, char *name)
+{
+ DIR *d;
+ struct dirent *de;
+ int nuof= 0;
+ char *s;
+
+ if (!box)
+ return(0);
+ if ((d= opendir(box)) == NULL)
+ return(0);
+ s= malloc(100 + (name?strlen(name):strlen(_DCAPI_MSG_MESSAGE)));
+ strcpy(s, name?name:_DCAPI_MSG_MESSAGE);
+ strcat(s, ".");
+ while ((de= readdir(d)) != NULL)
+ {
+ char *found= strstr(de->d_name, s);
+ if (found == de->d_name)
+ nuof++;
+ }
+ if (d)
+ closedir(d);
+ free(s);
+ return(nuof);
+}
+
+
+char *
+_DC_message_name(char *box, char *name)
+{
+ char *dn, *n;
+ DIR *d;
+ struct dirent *de;
+ int min_id;
+
+ if (!box ||
+ !name)
+ return(NULL);
+ if (!*box ||
+ !*name)
+ return(NULL);
+ /*DC_log(LOG_DEBUG, "_DC_message_name(%s,%s)", box, name);*/
+ dn= strdup(box);
+ n= malloc(strlen(name)+10);
+ strcpy(n, name);
+ strcat(n, ".");
+ /*DC_log(LOG_DEBUG, "opendir(%s)=", dn);*/
+ d= opendir(dn);
+ /*DC_log(LOG_DEBUG, "%p", d);*/
+ min_id= -1;
+ while (d &&
+ (de= readdir(d)) != NULL)
+ {
+ char *found= strstr(de->d_name, n);
+ /*DC_log(LOG_DEBUG, "%s <-> %s", de->d_name, n);*/
+ if (found == de->d_name)
+ {
+ char *pos= strrchr(de->d_name, '.');
+ /*DC_log(LOG_DEBUG, "found");*/
+ if (pos)
+ {
+ int id= 0;
+ pos++;
+ id= strtol(pos, NULL, 10);
+ /*DC_log(LOG_DEBUG, "id=%d", id);*/
+ if (id > 0)
+ {
+ if (min_id < 0)
+ min_id= id;
+ else
+ if (id < min_id)
+ min_id= id;
+ }
+ }
+ }
+ /*else
+ DC_log(LOG_DEBUG, "not found");*/
+ }
+ if (d)
+ closedir(d);
+ if (min_id >= 0)
+ {
+ dn= realloc(dn, strlen(box)+strlen(name)+100);
+ sprintf(dn, "%s/%s.%d", box, name, min_id);
+ free(n);
+ /*DC_log(LOG_DEBUG, "return: %s", dn);*/
+ return(dn);
+ }
+ if (dn)
+ free(dn);
+ if (n)
+ free(n);
+ /*DC_log(LOG_DEBUG, "return null");*/
+ return(NULL);
+}
+
+
+char *
+_DC_read_message(char *box, char *name, int del_msg)
+{
+ FILE *f;
+ char *fn= _DC_message_name(box, name);
+ char *buf= NULL;
+
+ if (fn==NULL)
+ return(NULL);
+ /*DC_log(LOG_DEBUG, "Reading message from %s", fn);*/
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ int bs= 100, i;
+ char c;
+
+ buf= malloc(bs);
+ i= 0;
+ buf[i]= '\0';
+ while ((c= fgetc(f)) != EOF)
+ {
+ if (i > bs-2)
+ {
+ bs+= 100;
+ buf= realloc(buf, bs);
+ }
+ buf[i]= c;
+ i++;
+ buf[i]= '\0';
+ }
+ fclose(f);
+ if (del_msg)
+ unlink(fn);
+ }
+ if (fn!=NULL)
+ free(fn);
+ return(buf);
+}
+
+
+char *
+_DC_quote_string(char *str)
+{
+ int i, n;
+ char *s, *p;
+
+ if (!str)
+ {
+ s= strdup("\\nnn");
+ return(s);
+ }
+ if (!*str)
+ {
+ s= strdup("\\000");
+ return(s);
+ }
+
+ for (i= n= 0; str[i]; i++)
+ {
+ if (!isalnum(str[i]))
+ n++;
+ }
+
+ s= calloc(strlen(str)+10*n+10, 1);
+ for (i= 0, p= s; str[i]; i++)
+ {
+ if (isalnum(str[i]))
+ {
+ *p= str[i];
+ p++;
+ }
+ else
+ {
+ sprintf(p, "\\%03o", str[i]);
+ p+= strlen(p);
+ }
+ }
+ return(s);
+}
+
+
+char *
+_DC_unquote_string(char *str)
+{
+ char *s, *p, *i;
+
+ if (!str)
+ return(NULL);
+ s= calloc(strlen(str)+1, 1);
+ p= str;
+ i= s;
+ while (*p != '\0')
+ {
+ if (*p != '\\')
+ *i= *p;
+ else
+ {
+ char c, *x= p+4;
+ int l;
+ c= *x;
+ *x= '\0';
+ if (strcmp(p+1, "nnn") == 0)
+ {
+ free(s);
+ return(NULL);
+ }
+ l= strtol(p+1, 0, 8);
+ *i= (char)l;
+ *x= c;
+ p= x-1;
+ }
+ p++;
+ i++;
+ }
+ return(s);
+}
+
+
+/* End of condor_utils.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_utils.h b/dcapi/condor/condor_utils.h
new file mode 100644
index 0000000..b6476c6
--- /dev/null
+++ b/dcapi/condor/condor_utils.h
@@ -0,0 +1,54 @@
+/*
+ * condor/condor_utils.h
+ *
+ * DC-API usefull functions
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#ifndef __DC_API_CONDOR_UTILS_H_
+#define __DC_API_CONDOR_UTILS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <fcntl.h>
+
+#include "condor_common.h"
+
+
+extern void _DC_init_utils(void);
+
+/* Usefull funcs */
+extern int _DC_mkdir_with_parents(char *dn, mode_t mode);
+extern int _DC_rm(char *name);
+extern int _DC_file_exists(char *fn);
+extern int _DC_file_empty(char *fn);
+extern int _DC_create_file(char *fn, char *what);
+extern char *_DC_get_file(char *fn);
+
+/* Message passing utilities */
+extern int _DC_create_message(char *box,
+ char *name,
+ const char *message,
+ char *msgfile);
+extern int _DC_nuof_messages(char *box, char *name);
+extern char *_DC_message_name(char *box, char *name);
+extern char *_DC_read_message(char *box, char *name, int del_msg);
+
+extern char *_DC_quote_string(char *str);
+extern char *_DC_unquote_string(char *str);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_utils.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_wu.c b/dcapi/condor/condor_wu.c
new file mode 100644
index 0000000..cd502fb
--- /dev/null
+++ b/dcapi/condor/condor_wu.c
@@ -0,0 +1,628 @@
+/*
+ * condor/condor_wu.c
+ *
+ * DC-API functions to handle DC_Workunit data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "dc.h"
+#include "dc_common.h"
+
+#include "condor_common.h"
+#include "condor_master.h"
+#include "condor_wu.h"
+#include "condor_event.h"
+#include "condor_utils.h"
+
+
+/*****************************************************************************/
+
+void
+_DC_wu_changed(DC_Workunit *wu)
+{
+ unsigned char *p;
+ int i, sum= 0;
+
+ if (!wu)
+ return;
+ p= (unsigned char*)(&(wu->data));
+ for (i= 0; i < (signed)sizeof(struct _DC_wu_data); i++)
+ sum+= p[i];
+ wu->magic= sum;
+ wu->chk= 0-sum;
+}
+
+int
+_DC_wu_check(const DC_Workunit *wu)
+{
+ if (!wu)
+ return(FALSE);
+ if ((wu->magic + wu->chk) != 0)
+ return(FALSE);
+ return(TRUE);
+}
+
+
+int
+_DC_wu_set_client_name(DC_Workunit *wu,
+ const char *new_name)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ g_free(wu->data.client_name);
+ wu->data.client_name= g_strdup(new_name);
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+int
+_DC_wu_set_argc(DC_Workunit *wu,
+ int new_argc)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ wu->data.argc= new_argc;
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+
+int
+_DC_wu_set_uuid_str(DC_Workunit *wu,
+ char *new_uuid_str)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ wu->data.uuid_str= new_uuid_str;
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+int
+_DC_wu_set_name(DC_Workunit *wu,
+ char *new_name)
+{
+ if (!_DC_wu_check(wu)) {
+ DC_log(LOG_ERR, "Cannot change wu name! ('%s')", new_name);
+ return(DC_ERR_UNKNOWN_WU);
+ }
+ wu->data.name= new_name;
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+int
+_DC_wu_set_tag(DC_Workunit *wu,
+ char *new_tag)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ wu->data.tag= new_tag;
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+int
+_DC_wu_set_subresults(DC_Workunit *wu,
+ int new_subresults)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ wu->data.subresults= new_subresults;
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+int
+_DC_wu_set_workdir(DC_Workunit *wu,
+ char *new_workdir)
+{
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+ wu->data.workdir= new_workdir;
+ _DC_wu_changed(wu);
+ return(DC_OK);
+}
+
+
+DC_WUState
+_DC_wu_set_state(DC_Workunit *wu,
+ DC_WUState new_state)
+{
+ /*DC_WUState act= wu->state;*/
+ if (!_DC_wu_check(wu))
+ return(DC_WU_UNKNOWN);
+ DC_log(LOG_DEBUG, "Set state to %s of %p-\"%s\"", _DC_state_name(new_state), wu, wu->data.name);
+ wu->data.state= new_state;
+ _DC_wu_changed(wu);
+ return(wu->data.state);
+}
+
+
+/* Get a configuration parameter */
+char *
+_DC_wu_cfg(DC_Workunit *wu,
+ enum _DC_e_param what)
+{
+ if (!_DC_wu_check(wu))
+ return(NULL);
+ if (what >= cfg_nuof)
+ return(NULL);
+ if (!_DC_params[what].name)
+ return(NULL);
+
+ if (_DC_params[what].gvalue)
+ return(_DC_params[what].gvalue);
+
+ _DC_params[what].gvalue=
+ DC_getClientCfgStr(wu->data.client_name,
+ _DC_params[what].name,
+ /*TRUE*/1);
+ if (_DC_params[what].gvalue)
+ return(_DC_params[what].gvalue);
+ return(_DC_params[what].def);
+}
+
+
+/* Check if the logical name is not already registered */
+int
+_DC_wu_check_logical_name(DC_Workunit *wu,
+ const char *logicalFileName)
+{
+ GList *l;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ if (strchr(logicalFileName, '/') || strchr(logicalFileName, '\\'))
+ {
+ DC_log(LOG_ERR, "Illegal characters in logical file name %s",
+ logicalFileName);
+ return(DC_ERR_BADPARAM);
+ }
+ for (l= wu->input_files; l; l= l->next)
+ {
+ DC_PhysicalFile *file= (DC_PhysicalFile *)l->data;
+
+ if (!strcmp(file->label, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as an "
+ "input file", logicalFileName);
+ return(DC_ERR_BADPARAM);
+ }
+ }
+ for (l= wu->output_files; l; l= l->next)
+ {
+ if (!strcmp((char *)l->data, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as an "
+ "output file", logicalFileName);
+ return(DC_ERR_BADPARAM);
+ }
+ }
+ DC_log(LOG_DEBUG, "Logical filename %s checked OK",
+ logicalFileName);
+ return(0);
+}
+
+
+char *
+_DC_wu_get_workdir_path(DC_Workunit *wu,
+ const char *label,
+ WorkdirFile type)
+{
+ if (!_DC_wu_check(wu))
+ return(NULL);
+ return g_strdup_printf("%s%c%s", wu->data.workdir, G_DIR_SEPARATOR, label);
+}
+
+
+static char *_DC_condor_submit_template=
+"# Built-in template\n"
+"# Date: %d\n"
+"# WU name: %n\n"
+"# WU id: %i\n"
+"# WU workdir: %w\n"
+"# Client name: %c\n"
+"# Number of args: %r\n"
+"# List of input files: \"%I\"\n"
+"# List of output files: \"%O\"\n"
+"\n"
+"Executable = %x\n"
+"arguments = %a\n"
+"Universe = %u\n"
+"output = %o\n"
+"error = %e\n"
+"log = %l\n"
+"Queue\n"
+;
+
+static int
+_DC_wu_process_template(DC_Workunit *wu, char *tmpl, FILE *f)
+{
+ char *cfgarch;
+ char *cfgexec, *cfglog;
+ char *c= tmpl;
+ GString *filelist;
+
+ cfgarch= _DC_acfg(cfg_architectures);
+ cfgexec= _DC_wu_cfg(wu, cfg_executable);
+ if (!cfgexec)
+ cfgexec= wu->data.client_name;
+ cfglog= _DC_wu_cfg(wu, cfg_condor_log);
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ if (!tmpl ||
+ !f)
+ return(DC_ERR_INTERNAL);
+
+ while (*c)
+ {
+ if (*c == '%')
+ {
+ c++;
+ if (*c == '\0')
+ break;
+ switch (*c)
+ {
+ case 'n':
+ {
+ fprintf(f, "%s", wu->data.name);
+ break;
+ }
+ case 'r':
+ {
+ fprintf(f, "%d", wu->data.argc);
+ break;
+ }
+ case 'i':
+ {
+ fprintf(f, "%s", wu->data.uuid_str);
+ break;
+ }
+ case 'w':
+ {
+ fprintf(f, "%s", wu->data.workdir);
+ break;
+ }
+ case 'c':
+ {
+ fprintf(f, "%s", wu->data.client_name);
+ break;
+ }
+ case 'd':
+ {
+ time_t t;
+ char *ft;
+ t= time(NULL);
+ ft= ctime(&t);
+ ft[strlen(ft)-1]= '\0';
+ fprintf(f, "%s", ft);
+ break;
+ }
+ case 'x':
+ {
+ fprintf(f, "%s", cfgexec);
+ break;
+ }
+ case 'a':
+ {
+ int i;
+ for (i= 0; wu->data.argc > 0 &&
+ wu->argv[i]; i++)
+ {
+ char *p= wu->argv[i];
+ if (!(*(wu->argv[i])))
+ fprintf(f, " ''");
+ else
+ {
+ while (*p && !isspace(*p))
+ p++;
+ if (*p)
+ fprintf(f, " '%s'", wu->argv[i]);
+ else
+ fprintf(f, " %s", wu->argv[i]);
+ }
+ }
+ break;
+ }
+ case 'u':
+ {
+ fprintf(f, "vanilla");
+ break;
+ }
+ case 'o':
+ {
+ fprintf(f, "%s", DC_LABEL_STDOUT);
+ break;
+ }
+ case 'e':
+ {
+ fprintf(f, "%s", DC_LABEL_STDERR);
+ break;
+ }
+ case 'l':
+ {
+ fprintf(f, "%s", cfglog);
+ break;
+ }
+ /* capital 'i' */
+ case 'I':
+ {
+ filelist = g_string_new(NULL);
+ g_list_foreach(wu->input_files, _DC_wu_input_list_foreach, filelist);
+ /* remove last comma from the string */
+ filelist = g_string_erase(filelist, filelist->len-1, -1);
+ fprintf(f, "%s", filelist->str);
+ g_string_free(filelist, TRUE);
+ break;
+ }
+ case 'O':
+ {
+ filelist = g_string_new(NULL);
+ g_list_foreach(wu->output_files, _DC_wu_output_list_foreach, filelist);
+ /* remove last comma from the string */
+ filelist = g_string_erase(filelist, filelist->len-1, -1);
+ fprintf(f, "%s", filelist->str);
+ g_string_free(filelist, TRUE);
+ break;
+ }
+ default:
+ {
+ fprintf(f, "%c", *c);
+ break;
+ }
+ }
+ }
+ else
+ {
+ fprintf(f, "%c", *c);
+ }
+ c++;
+ }
+ return(DC_OK);
+}
+
+int
+_DC_wu_gen_condor_submit(DC_Workunit *wu)
+{
+ FILE *f= NULL;
+ GString *fn;
+ char *cfgtmpl;
+ char *tmpl= 0;
+ int ret;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ fn= g_string_new(wu->data.workdir);
+ fn= g_string_append(fn, "/");
+ fn= g_string_append(fn, _DC_wu_cfg(wu, cfg_submit_file));
+ if ((f= fopen(fn->str, "w+")) == NULL)
+ {
+ DC_log(LOG_ERR, "Condor submit file %s creation failed",
+ fn->str);
+ g_string_free(fn, TRUE);
+ return(DC_ERR_SYSTEM);
+ }
+ g_string_free(fn, TRUE);
+
+ cfgtmpl= _DC_wu_cfg(wu, cfg_condor_submit_template);
+ if (!cfgtmpl)
+ tmpl= _DC_condor_submit_template;
+ else
+ {
+ tmpl= _DC_get_file(cfgtmpl);
+ }
+ ret= DC_OK;
+ if (tmpl)
+ {
+ ret= _DC_wu_process_template(wu, tmpl, f);
+ }
+ else
+ {
+ }
+
+ if (f)
+ fclose(f);
+ return(ret);
+}
+
+
+int
+_DC_wu_make_client_executables(DC_Workunit *wu)
+{
+ char *archs;
+ char *exec;
+ int ret;
+ GString *src, *dst;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ archs= _DC_acfg(cfg_architectures);
+
+ exec= _DC_wu_cfg(wu, cfg_executable);
+ if (!exec)
+ exec= wu->data.client_name;
+ src= g_string_new(exec);
+ dst= g_string_new(wu->data.workdir);
+ g_string_append(dst, "/");
+ g_string_append(dst, exec);
+ DC_log(LOG_DEBUG, "Copying client executable %s to %s",
+ src->str, dst->str);
+ ret= _DC_copyFile(src->str, dst->str);
+ g_string_free(src, TRUE);
+ g_string_free(dst, TRUE);
+
+ /*
+ dst= g_string_new(wu->data.workdir);
+ g_string_append(dst, "/");
+ g_string_append(dst, CLIENT_CONFIG_NAME);
+ DC_log(LOG_DEBUG, "Copying config %s to %s",
+ _DC_config_file, dst->str);
+ i= _DC_copyFile(_DC_config_file, dst->str);
+ if (i)
+ ret= i;
+ g_string_free(dst, TRUE);
+ */
+
+ if (!ret)
+ return(ret);
+
+ return(DC_OK);
+}
+
+
+int
+_DC_wu_make_client_config(DC_Workunit *wu)
+{
+ GString *fn;
+ FILE *f;
+ char *s;
+
+ if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);
+
+ fn= g_string_new(wu->data.workdir);
+ g_string_append(fn, "/");
+ g_string_append(fn, CLIENT_CONFIG_NAME);
+ if ((f= fopen(fn->str, "w")) != NULL)
+ {
+ if (_DC_initClientConfig(wu->data.client_name, f))
+ {
+ fclose(f);
+ return(DC_ERR_BADPARAM);
+ }
+ /* Fix #1107 */
+ s= DC_getClientCfgStr(wu->data.client_name,
+ "LogFile",
+ FALSE);
+ if (s)
+ {
+ fprintf(f, "LogFile = %s\n", s);
+ free(s);
+ }
+ else
+ {
+ fprintf(f, "LogFile = %s\n", DC_LABEL_CLIENTLOG);
+ }
+
+ fclose(f);
+ }
+
+ return(DC_OK);
+}
+
+
+/*static int _DC_counter= 0;*/
+
+DC_MasterEvent *
+_DC_wu_check_client_messages(DC_Workunit *wu)
+{
+ GString *s;
+ char *message;
+ DC_MasterEvent *e= NULL;
+
+ if (!_DC_wu_check(wu))
+ return(NULL);
+
+ s= g_string_new(wu->data.workdir);
+ g_string_append_printf(s, "/%s",
+ _DC_wu_cfg(wu, cfg_client_message_box));
+ /*DC_log(LOG_DEBUG, "Checking box %s for message\n", s->str);*/
+ if ((message= _DC_read_message(s->str, _DCAPI_MSG_MESSAGE, TRUE)))
+ {
+ e= _DC_event_create(wu, NULL, NULL, message);
+ DC_log(LOG_DEBUG, "Message event created: %p "
+ "for wu (%p-\"%s\")", e, wu, wu->data.name);
+ DC_log(LOG_DEBUG, "Message of the event: %s", e->message);
+ }
+
+ /*
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ if ((message= _DC_read_message(s->str, _DCAPI_MSG_ACK, TRUE)))
+ {
+ DC_log(LOG_DEBUG, "Acknowledge arrived: %s", message);
+ if (strcmp(message, _DCAPI_ACK_SUSPEND) == 0)
+ {
+ wu->asked_to_suspend= TRUE;
+ }
+ }
+ */
+
+ if (e == NULL/*)
+ _DC_counter++;
+ if (_DC_counter % 5 == 0*/)
+ {
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_subresults_box));
+ /*DC_log(LOG_DEBUG, "Checking box %s for logical_name\n",
+ s->str);*/
+ if ((message= _DC_read_message(s->str, _DCAPI_MSG_LOGICAL,
+ TRUE)))
+ {
+ DC_PhysicalFile *f;
+ g_string_append_printf(s, "/real_files/%s", message);
+ DC_log(LOG_DEBUG, "Got subresult %s %s",
+ message, s->str);
+ f= _DC_createPhysicalFile(message, s->str);
+ e= _DC_event_create(wu, NULL, f, NULL);
+ }
+ }
+
+ g_string_free(s, TRUE);
+ return(e);
+}
+
+
+/* User function for g_list_foreach() in _DC_wu_process_template(): "%I"
+ *
+ * @data DC_PhysicalFile*
+ * @user_data GString
+ */
+void _DC_wu_input_list_foreach(gpointer data, gpointer user_data)
+{
+ if (data != NULL && ((DC_PhysicalFile*)data)->path != NULL)
+ {
+ user_data = g_string_append((GString *)user_data, ((DC_PhysicalFile*)data)->path);
+ /* we want a comma separated list */
+ user_data = g_string_append((GString *)user_data, ",");
+ }
+}
+
+
+/* User function for g_list_foreach() in _DC_wu_process_template(): "%O"
+ *
+ * @data char* data to be appended
+ * @user_data GString the string to append to
+ */
+void _DC_wu_output_list_foreach(gpointer data, gpointer user_data)
+{
+ if (data != NULL)
+ {
+ user_data = g_string_append((GString *)user_data, (char*)data);
+ /* we want a comma separated list */
+ user_data = g_string_append((GString *)user_data, ",");
+ }
+}
+
+
+/* End of condor/condor_wu.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/condor_wu.h b/dcapi/condor/condor_wu.h
new file mode 100644
index 0000000..5e65055
--- /dev/null
+++ b/dcapi/condor/condor_wu.h
@@ -0,0 +1,59 @@
+/*
+ * condor/condor_wu.h
+ *
+ * DC-API functions to handle DC_Workunit data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#ifndef _DC_API_CONDOR_WU_H_
+#define _DC_API_CONDOR_WU_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "condor_defs.h"
+#include "condor_common.h"
+
+
+extern void _DC_wu_changed(DC_Workunit *wu);
+extern int _DC_wu_check(const DC_Workunit *wu);
+
+extern int _DC_wu_set_client_name(DC_Workunit *wu, const char *new_name);
+extern int _DC_wu_set_argc(DC_Workunit *wu, int new_argc);
+extern int _DC_wu_set_uuid_str(DC_Workunit *wu, char *new_uuid_str);
+extern int _DC_wu_set_name(DC_Workunit *wu, char *new_name);
+extern int _DC_wu_set_tag(DC_Workunit *wu, char *new_tag);
+extern int _DC_wu_set_subresults(DC_Workunit *wu, int new_subresults);
+extern int _DC_wu_set_workdir(DC_Workunit *wu, char *new_workdir);
+
+extern DC_WUState _DC_wu_set_state(DC_Workunit *wu,
+ DC_WUState new_state);
+
+extern char *_DC_wu_cfg(DC_Workunit *wu,
+ enum _DC_e_param what);
+
+extern int _DC_wu_check_logical_name(DC_Workunit *wu,
+ const char *logicalFileName);
+extern char *_DC_wu_get_workdir_path(DC_Workunit *wu,
+ const char *label,
+ WorkdirFile type);
+extern int _DC_wu_gen_condor_submit(DC_Workunit *wu);
+extern int _DC_wu_make_client_executables(DC_Workunit *wu);
+extern int _DC_wu_make_client_config(DC_Workunit *wu);
+extern DC_MasterEvent *_DC_wu_check_client_messages(DC_Workunit *wu);
+extern void _DC_wu_input_list_foreach(gpointer data, gpointer user_data);
+extern void _DC_wu_output_list_foreach(gpointer data, gpointer user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of condor/condor_wu.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/dcapi-condor-client.pc.in b/dcapi/condor/dcapi-condor-client.pc.in
new file mode 100644
index 0000000..24053ce
--- /dev/null
+++ b/dcapi/condor/dcapi-condor-client.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: DC-API Condor Client
+Description: Condor client implementation for DC-API
+Version: @PACKAGE_VERSION@
+Requires.private: glib-2.0
+Libs: -L${libdir} -ldcapi-client-condor
+Cflags: -I${includedir}
diff --git a/dcapi/condor/dcapi-condor-master.pc.in b/dcapi/condor/dcapi-condor-master.pc.in
new file mode 100644
index 0000000..3f6fdda
--- /dev/null
+++ b/dcapi/condor/dcapi-condor-master.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: DC-API Condor Master
+Description: Condor master implementation for DC-API
+Version: @PACKAGE_VERSION@
+Requires.private: glib-2.0
+Libs: -L${libdir} -ldcapi-condor -lstdc++ -luuid -ldl @CONDOR_LDFLAGS@ -lcondorapi
+Cflags: -I${includedir}
diff --git a/dcapi/condor/ls_lR.sh b/dcapi/condor/ls_lR.sh
new file mode 100755
index 0000000..5e96ba7
--- /dev/null
+++ b/dcapi/condor/ls_lR.sh
@@ -0,0 +1,2 @@
+date >$HOME/workdir/ls_lR.${1}.txt
+ls -lRa $HOME/workdir/.dcapi* >>$HOME/workdir/ls_lR.${1}.txt 2>&1
diff --git a/dcapi/condor/t.conf b/dcapi/condor/t.conf
new file mode 100644
index 0000000..1ada6ea
--- /dev/null
+++ b/dcapi/condor/t.conf
@@ -0,0 +1,40 @@
+# Template
+# Configuration file for local implementation of DC
+#
+
+[Master]
+#
+# UUID Instance
+#
+
+#InstanceUUID = 4b28cbf7-1881-459b-9e35-220a2b59c0e2
+InstanceUUID = 2
+
+#
+# Working directory
+#
+
+WorkingDirectory = /home/staff/drdani/workdir
+
+#
+# Debugging level
+#
+
+LogLevel = Debug
+LogFile = t.log
+
+#
+# Info abount clients
+#
+Architectures = i386
+Client_ts_i386 = ts
+
+LeaveFiles = 0
+
+CondorSubmitTemplate = tmpl.txt
+
+[Client-short]
+Executable = tss
+
+[Client-long]
+Executable = tss
diff --git a/dcapi/condor/tc.c b/dcapi/condor/tc.c
new file mode 100644
index 0000000..6c57df8
--- /dev/null
+++ b/dcapi/condor/tc.c
@@ -0,0 +1,58 @@
+/*
+ * condor/tc.c
+ *
+ * DC-API test application, utility for both sides
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "tc.h"
+
+void
+create_file(char *fn, char *what)
+{
+ FILE *f= fopen(fn, "w");
+ if (f)
+ {
+ if (what)
+ fprintf(f, "%s", what);
+ fclose(f);
+ }
+}
+
+char *
+get_file(char *fn)
+{
+ FILE *f;
+ char *buf= NULL;
+
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ int bs= 100, i;
+ char c;
+
+ buf= malloc(bs);
+ i= 0;
+ buf[i]= '\0';
+ while ((c= fgetc(f)) != EOF)
+ {
+ if (i > bs-2)
+ {
+ bs+= 100;
+ buf= realloc(buf, bs);
+ }
+ buf[i]= c;
+ i++;
+ buf[i]= '\0';
+ }
+ fclose(f);
+ }
+ return(buf);
+}
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/tc.h b/dcapi/condor/tc.h
new file mode 100644
index 0000000..ce11281
--- /dev/null
+++ b/dcapi/condor/tc.h
@@ -0,0 +1,18 @@
+/*
+ * condor/tc.h
+ *
+ * DC-API test application, utility for both sides
+ *
+ * (c) Daniel Drotos, 2006
+ */
+#ifndef TC_H
+#define TC_H
+
+extern void create_file(char *fn, char *what);
+extern char *get_file(char *fn);
+
+#endif
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/test_input.txt b/dcapi/condor/test_input.txt
new file mode 100644
index 0000000..00048d0
--- /dev/null
+++ b/dcapi/condor/test_input.txt
@@ -0,0 +1,2 @@
+This is a test input file for the uppercase-demo application!
+message = Hello master application
diff --git a/dcapi/condor/tm.c b/dcapi/condor/tm.c
new file mode 100644
index 0000000..e3dc8ab
--- /dev/null
+++ b/dcapi/condor/tm.c
@@ -0,0 +1,355 @@
+/*
+ * condor/tm.c
+ *
+ * DC-API test application, master
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "dc.h"
+
+#include "tc.h"
+
+#define MAX_WU 100
+
+DC_Workunit *wut[MAX_WU];
+
+extern char *_DC_state_name(DC_WUState state);
+
+static void
+fail(char *what, int ret)
+{
+ printf("%s failed: %d\n", what, ret);
+ exit(ret);
+}
+
+static DC_Workunit *
+create_short(void)
+{
+ DC_Workunit *wu;
+
+ printf("Creating short...\n");
+ wu= DC_createWU("short", NULL, 0, NULL);
+ printf("Created short wu: %p\n", wu);
+ if (!wu)
+ fail("DC_createWU", 0);
+ return(wu);
+}
+
+static DC_Workunit *
+create_long(int how_long)
+{
+ DC_Workunit *wu;
+ char *argv[]= {
+ "15",
+ "2",
+ "3",
+ "2",
+ NULL
+ };
+ char l[100];
+
+ printf("Creating long...\n");
+ if (how_long > 0)
+ {
+ sprintf(l, "%d", how_long);
+ argv[0]= l;
+ }
+ wu= DC_createWU("long", (const char **)argv, 0, NULL);
+ printf("Created long wu: %p\n", wu);
+ if (!wu)
+ fail("DC_createWU", 0);
+ return(wu);
+}
+
+static void
+result_cb(DC_Workunit *wu, DC_Result *result)
+{
+ printf("\nresult_cb, wustate=%s\n",
+ _DC_state_name(DC_getWUState(wu)));
+ printf("exit= %d\n", DC_getResultExit(result));
+}
+
+static void
+subresult_cb(DC_Workunit *wu,
+ const char *logical_file_name,
+ const char *path)
+{
+ printf("\nsubresult_cb, wustate=%s\n",
+ _DC_state_name(DC_getWUState(wu)));
+ printf("logical= \"%s\"\n", logical_file_name);
+ printf("path = \"%s\"\n", path);
+ printf("Content: \"%s\"\n", get_file((char*)path));
+ printf("Deleting %s...\n", path);
+ unlink(path);
+}
+
+static void
+message_cb(DC_Workunit *wu, const char *message)
+{
+ printf("\nmessage_cb, wustate=%s\n",
+ _DC_state_name(DC_getWUState(wu)));
+ printf("Message= \"%s\"\n", message);
+}
+
+
+static void
+ls_lR(int i)
+{
+ char cmd[100];
+ sprintf(cmd, "./ls_lR.sh %03d", i);
+ //system(cmd);
+}
+
+int cycle= 0;
+
+static void
+process(DC_Workunit *wu, int timeout)
+{
+ printf("-- %3d %s\n", cycle, _DC_state_name(DC_getWUState(wu)));
+ DC_processMasterEvents(timeout);
+}
+
+static void
+procs(DC_Workunit *wu, DC_WUState state, int timeout)
+{
+ while (DC_getWUState(wu) != state)
+ {
+ cycle++;
+ process(wu, timeout);
+ }
+}
+
+static void
+proci(DC_Workunit *wu, int nr, int timeout)
+{
+ int j;
+ for (j= 0; j < nr; j++)
+ {
+ cycle++;
+ process(wu, timeout);
+ }
+}
+
+static void
+t(int what)
+{
+ DC_Workunit *wu;
+
+ switch (what)
+ {
+ case 1:
+ {
+ int i= 0;
+ printf("test1: running a short wu\n");
+ wu= create_short();
+ printf("Submitting short...\n");
+ if ((i= DC_submitWU(wu)) != 0)
+ fail("DC_submitWU", i);
+ DC_setMasterCb(result_cb, subresult_cb, message_cb);
+ while (DC_getWUState(wu) != DC_WU_FINISHED)
+ {
+ printf("wu is in state %s\n",
+ _DC_state_name(DC_getWUState(wu)));
+ printf("Processing events for 1 sec...\n");
+ DC_processMasterEvents(1);
+ }
+ printf("Destroying short...\n");
+ DC_destroyWU(wu);
+ break;
+ }
+ case 2:
+ {
+ int i, j;
+ printf("test2: running a long wu\n");
+ wu= create_long(0);
+ printf("Submitting long...\n");
+ if ((i= DC_submitWU(wu)) != 0)
+ fail("DC_submitWU", i);
+ DC_setMasterCb(result_cb, subresult_cb, message_cb);
+ while (DC_getWUState(wu) != DC_WU_FINISHED)
+ {
+ i++;
+ printf("Processing events for 1 sec...\n");
+ printf("-- %3d\n", i);
+ ls_lR(i);
+ DC_processMasterEvents(1);
+ }
+ printf("wu finished, but checking events for more 5 secs...\n");
+ for (j= 0; j < 5; j++)
+ {
+ i++;
+ printf("-- %3d\n", i);
+ ls_lR(i);
+ DC_processMasterEvents(1);
+ }
+ printf("Destroying long...\n");
+ DC_destroyWU(wu);
+ break;
+ }
+ case 3:
+ {
+ int r;
+ printf("test3: suspend/resume\n");
+ wu= create_long(20);
+ printf("Submitting long...\n");
+ if ((r= DC_submitWU(wu)) != 0)
+ fail("DC_submitWU", r);
+ DC_setMasterCb(result_cb, subresult_cb, message_cb);
+
+ printf("waiting to be running...\n");
+ procs(wu, DC_WU_RUNNING, 1);
+
+ printf("now running, run a bit...\n");
+ proci(wu, 5, 1);
+
+ printf("Suspending wu...\n");
+ if ((r= DC_suspendWU(wu)) != 0)
+ fail("DC_suspendWU", r);
+
+ printf("waiting to be suspended...\n");
+ procs(wu, DC_WU_SUSPENDED, 1);
+
+ printf("now suspended, wait a bit...\n");
+ proci(wu, 3, 1);
+
+ printf("Resuming wu...\n");
+ if ((r= DC_resumeWU(wu)) != 0)
+ fail("DC_resumeWU", r);
+
+ printf("waiting to be running again...\n");
+ procs(wu, DC_WU_RUNNING, 1);
+
+ printf("waiting to finish...\n");
+ procs(wu, DC_WU_FINISHED, 1);
+
+ printf("Destroying long...\n");
+ DC_destroyWU(wu);
+ break;
+ }
+ case 4:
+ {
+ char *s;
+ int r;
+ wu= create_long(20);
+ printf("Ser=\"%s\"\n", s= DC_serializeWU(wu));
+ create_file("serialized_wu.txt", s);
+ free(s);
+ printf("WU serialized\nSubmitting...\n");
+ if ((r= DC_submitWU(wu)) != 0)
+ fail("DC_submitWU", r);
+ DC_setMasterCb(result_cb, subresult_cb, message_cb);
+
+ printf("waiting to be running...\n");
+ procs(wu, DC_WU_RUNNING, 1);
+ /*DC_destroyWU(wu);*/
+ break;
+ }
+ case 5:
+ {
+ char *s= get_file("serialized_wu.txt");
+ int r;
+ wu= DC_deserializeWU(s);
+ free(s);
+ if (!wu)
+ {
+ printf("Deserialization failed\n");
+ break;
+ }
+
+ printf("Submitting deserialized WU...\n");
+ if ((r= DC_submitWU(wu)) != 0)
+ fail("DC_submitWU", r);
+ DC_setMasterCb(result_cb, subresult_cb, message_cb);
+
+ printf("waiting to be running...\n");
+ procs(wu, DC_WU_RUNNING, 1);
+
+ printf("waiting to finish...\n");
+ procs(wu, DC_WU_FINISHED, 1);
+
+ printf("Destroying...\n");
+ DC_destroyWU(wu);
+ break;
+ }
+ case 6:
+ {
+ int i, nr= 40;
+ int done= 0;
+ DC_setMasterCb(result_cb, subresult_cb, message_cb);
+ printf("Creating and submitting wus...\n");
+ for (i= 0; i < nr; i++)
+ {
+ wut[i]= create_long(10);
+ DC_submitWU(wut[i]);
+ }
+ while (!done)
+ {
+ done= 1;
+ for (i= 0; i < nr; i++)
+ {
+ printf("waiting to finish %d...\n", i);
+ if (wut[i] &&
+ DC_getWUState(wut[i]) != DC_WU_FINISHED &&
+ DC_getWUState(wut[i]) != DC_WU_UNKNOWN)
+ {
+ done= 0;
+ process(wut[i], 1);
+ }
+ }
+ }
+ printf("All WUs finished, processing event for a while...\n");
+ DC_processMasterEvents(10);
+ printf("Destroying all WUs...\n");
+ for (i= 0; i < nr; i++)
+ {
+ printf("%2d\n", i);
+ DC_destroyWU(wut[i]);
+ wut[i]= NULL;
+ }
+ break;
+ }
+ }
+}
+
+
+int
+main(int argc, char *argv[])
+{
+ int i;
+
+ if ((i= DC_initMaster("t.conf")) != 0)
+ fail("DC_initMaster", i);
+
+ if (argc < 2)
+ {
+ printf("Calling all tests...\n");
+ t(1);
+ t(2);
+ t(3);
+ t(4);
+ printf("WU serialized, now wait a bit...\n");
+ sleep(5);
+ printf("Trying to deserialize...\n");
+ t(5);
+ }
+
+ for (i= 1; i < argc; i++)
+ {
+ int l;
+ l= strtol(argv[i], 0, 0);
+ printf("Calling test %d...\n", l);
+ t(l);
+ }
+
+ return 0;
+}
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/tmpl.txt b/dcapi/condor/tmpl.txt
new file mode 100644
index 0000000..a1f80a7
--- /dev/null
+++ b/dcapi/condor/tmpl.txt
@@ -0,0 +1,16 @@
+# test template
+# Date: %d
+# WU name: %n
+# WU id: %i
+# WU workdir: %w"
+# Client name: %c
+# Nr of args: %r
+
+Executable = %x
+arguments = %a
+Universe = %u
+output = %o
+error = %e
+log = %l
+Queue
+
diff --git a/dcapi/condor/ts.c b/dcapi/condor/ts.c
new file mode 100644
index 0000000..4d0ea6a
--- /dev/null
+++ b/dcapi/condor/ts.c
@@ -0,0 +1,165 @@
+/*
+ * condor/ts.c
+ *
+ * DC-API test application, slave
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include "dc_client.h"
+
+#include <stdio.h>
+#include <ctype.h>
+
+static char infile_logical[] = "in.txt";
+static char outfile_logical[] = "out.txt";
+static char ckptfile_logical[] = "ckpt.txt";
+static FILE *infile;
+static FILE *outfile;
+static FILE *ckptfile;
+
+static int frac_input_size;
+static int frac_current_pos = 0;
+
+static void frac_init(void){
+ frac_current_pos = ftell(infile);
+ fseek(infile, 0, SEEK_END);
+ frac_input_size = ftell(infile);
+ fseek(infile, 0, SEEK_SET);
+}
+
+static int do_checkpoint(int frac_current_pos){
+ FILE *ckptfile;
+ char *ckptfile_physical;
+ int retval;
+
+ ckptfile_physical = DC_resolveFileName(DC_FILE_OUT, DC_CHECKPOINT_FILE);
+ ckptfile = fopen(ckptfile_physical, "w");
+ if (ckptfile == NULL){
+ fprintf(stderr, "APP: cannot open checkpoint file for write!!\n");
+ DC_finishClient(6);
+ }
+ fprintf(ckptfile, "%d", frac_current_pos);
+ fclose(ckptfile);
+
+ retval = fflush(outfile);
+ if (retval) {
+ fprintf(stderr, "APP: uppercase flush failed %d\n", retval);
+ DC_finishClient(5);
+ }
+
+ return 0;
+}
+
+static void init_files(void){
+ int ckpt_position;
+ char *infile_physical;
+ char *outfile_physical;
+ char *ckptfile_physical;
+ const char *outfile_openmode = "w";
+
+ /* Open input file */
+ infile_physical = DC_resolveFileName(DC_FILE_IN, infile_logical);
+ infile = fopen(infile_physical, "rb");
+ if (infile == NULL){
+ fprintf(stderr, "APP: Cannot open input file! Logical name: %s, physical name: %s.\n",
+ infile_logical, infile_physical);
+ DC_finishClient(1);
+ }
+ frac_init();
+
+ /* check ckpt file */
+ ckptfile_physical = DC_resolveFileName(DC_FILE_IN, DC_CHECKPOINT_FILE);
+ ckptfile = fopen(ckptfile_physical, "r");
+ if (ckptfile != NULL){
+ /* ckpt file exists: read and set everything according to it */
+ fscanf(ckptfile, "%d", &ckpt_position);
+ fclose(ckptfile);
+ fprintf(stderr, "APP: Found checkpoint file. Checkpoint position: %d.\n", ckpt_position);
+ fseek(infile, ckpt_position, SEEK_SET);
+ frac_current_pos = ckpt_position;
+ outfile_openmode = "r+";
+ }
+
+ /* open output file */
+ outfile_physical = DC_resolveFileName(DC_FILE_OUT, outfile_logical);
+ outfile = fopen(outfile_physical, outfile_openmode);
+ if (outfile == NULL){
+ fprintf(stderr, "APP: Cannot open output file! Logical name: %s, physical name: %s.\n",
+ outfile_logical, outfile_physical);
+ DC_finishClient(2);
+ }
+ fseek(outfile, frac_current_pos, SEEK_SET);
+}
+
+static void do_work(void){
+ int c;
+ int retval;
+
+ while (1) {
+ c = fgetc(infile);
+
+ if (c == EOF) break;
+ c = toupper(c);
+ fputc(c, outfile);
+ frac_current_pos++;
+
+ // if (DC_timeToCheckpoint()){
+ if (1){
+ if(do_checkpoint(frac_current_pos)){
+ fprintf(stderr, "APP: uppercase checkpoint failed.\n");
+ DC_finishClient(3);
+ }
+ // DC_checkpointMade();
+ }
+
+ DC_fractionDone(frac_current_pos/frac_input_size);
+ }
+
+ retval = fflush(outfile);
+ if (retval) {
+ fprintf(stderr, "APP: uppercase flush failed %d\n", retval);
+ DC_finishClient(5);
+ }
+ fclose(outfile);
+}
+
+int main(int argc, char **argv) {
+ int retval = 0;
+
+ retval = DC_initClient();
+ if (retval) {
+ fprintf(stderr, "APP: Error while the initialize. Return value = %d.\n", retval);
+ DC_finishClient(retval);
+ }
+ fprintf(stdout, "APP: Init successful.\n");
+
+ init_files();
+ fprintf(stdout, "APP: Starting from line %d.\n", frac_current_pos+1);
+
+ do_work();
+ fprintf(stdout, "APP: Work finished.\n");
+ fprintf(stderr, "APP: This is only a test error message.\n");
+
+ DC_sendMessage("Client completed. Exiting.");
+
+ DC_finishClient(0);
+ return(0); // Tho' we never reach this line
+}
+
+
+#ifdef _WIN32
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR Args, int WinMode) {
+ LPSTR command_line;
+ char* argv[100];
+ int argc;
+
+ command_line = GetCommandLine();
+ argc = parse_command_line( command_line, argv );
+ return main(argc, argv);
+}
+#endif
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/condor/tss.c b/dcapi/condor/tss.c
new file mode 100644
index 0000000..32d3cbc
--- /dev/null
+++ b/dcapi/condor/tss.c
@@ -0,0 +1,163 @@
+/*
+ * condor/tss.c
+ *
+ * DC-API test application, slave
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "dc_client.h"
+
+#include "tc.h"
+
+
+int cyc= 1;
+int sub= 0;
+int ckp= 0;
+int msg= 0;
+
+static void
+send_subresult(int c)
+{
+ char l[100];
+ char p[100];
+ char s[100];
+
+ printf("cyc=%d Sending subresult...\n", c);
+ sprintf(l, "l_%d", c);
+ sprintf(p, "p_%d", c);
+ sprintf(s, "subresult %d", c);
+ create_file(p, s);
+ DC_sendResult(l, p, DC_FILE_REGULAR);
+}
+
+static void
+mk_checkpoint(int c)
+{
+ char *fn;
+ char buf[100];
+
+ printf("cyc=%d Making checkpoint...\n", c);
+ fn= DC_resolveFileName(DC_FILE_OUT, DC_CHECKPOINT_FILE);
+ if (fn)
+ {
+ sprintf(buf, "%d\n", c);
+ create_file(fn, buf);
+ printf("Checkpoint created in file %s\n", fn);
+ DC_checkpointMade(fn);
+ free(fn);
+ }
+ else
+ printf("Failed\n");
+}
+
+static void
+send_message(int c)
+{
+ char s[100];
+
+ printf("cyc=%d Sending message...\n", c);
+ sprintf(s, "Message=%d, cyc=%d", msg, c);
+ DC_sendMessage(s);
+}
+
+int
+main(int argc, char *argv[])
+{
+ DC_initClient();
+ int i;
+
+ if (argc > 1)
+ {
+ cyc= strtol(argv[1], 0, 0);
+ printf("cyc defined= %d\n", cyc);
+ }
+ if (argc > 2)
+ {
+ sub= strtol(argv[2], 0, 0);
+ printf("sub defined= %d\n", sub);
+ }
+ if (argc > 3)
+ {
+ ckp= strtol(argv[3], 0, 0);
+ printf("ckp defined= %d\n", ckp);
+ }
+ if (argc > 4)
+ {
+ msg= strtol(argv[4], 0, 0);
+ printf("msg defined= %d\n", msg);
+ }
+
+ i= 0;
+ {
+ char *fn= DC_resolveFileName(DC_FILE_IN, DC_CHECKPOINT_FILE);
+ if (fn)
+ {
+ char *s= get_file(fn);
+ printf("Checkpoint file found %s\n", fn);
+ printf("Content: \"%s\"\n", s);
+ i= strtol(s, 0, 0);
+ printf("Continuing from cycle %d\n", i);
+ cyc-= i;
+ free(s);
+ free(fn);
+ }
+ else
+ printf("No checkpoint file found, start from the beginning...\n");
+ }
+ while (cyc)
+ {
+ cyc--;
+ i++;
+ printf("\nCycle %d. starting...\n", i);
+
+ {
+ DC_ClientEvent *e= DC_checkClientEvent();
+ if (e)
+ {
+ switch (e->type)
+ {
+ case DC_CLIENT_CHECKPOINT:
+ {
+ break;
+ }
+ case DC_CLIENT_FINISH:
+ {
+ break;
+ }
+ case DC_CLIENT_MESSAGE:
+ {
+ printf("At cyc=%d got a message: \"%s\"\n", i,
+ e->message);
+ break;
+ }
+ }
+ DC_destroyClientEvent(e);
+ }
+ }
+ sleep(1);
+
+ if (sub &&
+ i%sub == 0)
+ send_subresult(i);
+ if (ckp &&
+ i%ckp == 0)
+ mk_checkpoint(i);
+ if (msg)
+ {
+ send_message(i);
+ msg--;
+ }
+ printf("Done, remaining cycles: %d\n", cyc);
+ }
+
+ DC_finishClient(0);
+}
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/configure.ac b/dcapi/configure.ac
new file mode 100644
index 0000000..2f546e4
--- /dev/null
+++ b/dcapi/configure.ac
@@ -0,0 +1,154 @@
+AC_INIT([Distributed Computing API], [0.11], [desktopgrid at lpds.sztaki.hu], [dcapi])
+AC_CONFIG_MACRO_DIR([cf])
+AC_CONFIG_HEADERS([include/config.h])
+AC_CONFIG_AUX_DIR([scripts])
+AC_CONFIG_SRCDIR([include/dc.h])
+AM_INIT_AUTOMAKE([foreign])
+
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_LIBTOOL
+
+LIBTOOL="$LIBTOOL --silent"
+
+dnl Enable useful warnings
+if test "$ac_cv_c_compiler_gnu" = yes; then
+ CFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -Wsign-compare ${CFLAGS}"
+ CXXFLAGS="-Wall -Wsign-compare ${CXXFLAGS}"
+fi
+
+AC_ARG_ENABLE([client],
+ AS_HELP_STRING([--disable-client], [do not build the client application]),,
+ [enable_client=yes])
+AC_ARG_ENABLE([master],
+ AS_HELP_STRING([--disable-master], [do not build the master application]),,
+ [enable_master=yes])
+
+AM_CONDITIONAL([BUILD_CLIENT], [test "$enable_client" = yes])
+AM_CONDITIONAL([BUILD_MASTER], [test "$enable_master" = yes])
+
+dnl glib is used only on the master side
+if test "$enable_master" = yes; then
+ AM_PATH_GLIB_2_0([2.6.0],,[AC_MSG_ERROR([glib2 is missing])])
+fi
+
+GTK_DOC_CHECK([1.3])
+MON_PKG_JAVA
+
+BACKENDS=
+
+dnl ===================================================================
+dnl BOINC backend
+dnl
+
+AC_ARG_ENABLE([backend-boinc],
+ AS_HELP_STRING([--enable-backend-boinc],
+ [enable the BOINC backend @<:@default=yes@:>@]),,
+ [enable_backend_boinc=auto])
+
+if test "$enable_backend_boinc" != no; then
+ SZDG_BOINC_COMMON
+ if test "$enable_master" = yes; then
+ SZDG_BOINC_SERVER
+ fi
+ if test "$enable_client" = yes; then
+ SZDG_BOINC_CLIENT
+ AC_CHECK_HEADERS([uuid/uuid.h],, [no_boinc=yes])
+ AC_CHECK_LIB([uuid], [uuid_unparse_lower], [true], [no_boinc=yes])
+ fi
+ if test "$no_boinc" = yes; then
+ if test "$enable_backend_boinc" = yes; then
+ AC_MSG_ERROR([BOINC development environment was not found])
+ fi
+ else
+ BACKENDS="$BACKENDS boinc"
+ fi
+fi
+
+AM_CONDITIONAL([WITH_BOINC], [echo $BACKENDS | grep -q boinc])
+
+dnl ===================================================================
+dnl Condor backend
+dnl
+
+AC_ARG_ENABLE([backend-condor],
+ AS_HELP_STRING([--enable-backend-condor],
+ [enable the Condor backend @<:@default=no@:>@]),,
+ [enable_backend_condor=auto])
+
+AC_ARG_WITH([condor-headers],
+ AS_HELP_STRING([--with-condor-headers=DIR],
+ [Use condor headers in DIR]), [CONDOR_CPPFLAGS="-I$withval"])
+AC_ARG_WITH([condor-libs],
+ AS_HELP_STRING([--with-condor-libs=DIR],
+ [Use condor libraries in DIR]), [CONDOR_LDFLAGS="-L$withval"])
+AC_SUBST([CONDOR_CPPFLAGS])
+AC_SUBST([CONDOR_LDFLAGS])
+
+no_condor=
+if test "$enable_backend_condor" != no; then
+ AC_LANG_PUSH([C++])
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $CONDOR_CPPFLAGS"
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $CONDOR_LDFLAGS"
+ AC_CHECK_HEADERS([read_user_log.h],, [no_condor=yes],
+ [AC_INCLUDES_DEFAULT
+#include <time.h>
+])
+ LDFLAGS="$save_LDFLAGS"
+ CPPFLAGS="$save_CPPFLAGS"
+ AC_LANG_POP([C++])
+
+ if test "$no_condor" = yes; then
+ if test "$enable_backend_condor" = yes; then
+ AC_MSG_ERROR([Condor development environment is missing])
+ fi
+ else
+ BACKENDS="$BACKENDS condor"
+ fi
+fi
+
+AM_CONDITIONAL([WITH_CONDOR], [echo $BACKENDS | grep -q condor])
+
+dnl ===================================================================
+dnl Local backend
+dnl
+
+AC_ARG_ENABLE([backend-local],
+ AS_HELP_STRING([--enable-backend-local],
+ [enable the local backend @<:@default=yes@:>@]),,
+ [enable_backend_local=yes])
+
+if test "$enable_backend_local" = yes; then
+ BACKENDS="$BACKENDS local"
+fi
+
+AM_CONDITIONAL([WITH_LOCAL], [test "$enable_backend_local" == yes])
+
+dnl ===================================================================
+dnl Generate output files
+dnl
+
+echo ""
+echo "Enabled backends: $BACKENDS"
+echo "Build master: $enable_master"
+echo "Build client: $enable_client"
+echo ""
+
+AC_CONFIG_FILES([Makefile \
+ include/Makefile \
+ common/Makefile \
+ boinc/Makefile \
+ boinc/dcapi-boinc-client.pc \
+ boinc/dcapi-boinc-master.pc \
+ condor/Makefile \
+ condor/dcapi-condor-client.pc \
+ condor/dcapi-condor-master.pc \
+ local/Makefile \
+ local/dcapi-local-client.pc \
+ local/dcapi-local-master.pc \
+ java/Makefile \
+ java/hu/sztaki/lpds/dc/client/Version.java \
+ doc/Makefile])
+AC_OUTPUT
diff --git a/dcapi/dcapi-deploy b/dcapi/dcapi-deploy
new file mode 100755
index 0000000..aa577bb
--- /dev/null
+++ b/dcapi/dcapi-deploy
@@ -0,0 +1,166 @@
+#! /usr/bin/env python
+
+"""
+DC-API deployement script
+"""
+
+import os, re, shutil, tempfile, uuid
+from optparse import OptionParser
+from ConfigParser import RawConfigParser
+
+class Replacement:
+ def __init__(self, name, value):
+ self.name = name
+ self.value = value
+ self.re = re.compile("\s*" + name + "\s*=")
+ self.found = False
+
+ def subst(self, string):
+ if self.re.match(string):
+ self.found = True
+ pos = string.find('=')
+ return string[:pos] + "= " + self.value + "\n"
+ else:
+ return string
+
+def modify_config(values, section = "Master"):
+ """Modify the DC-API configuration. We can't use the write() method of
+ RawConfigParser() since that does not preserve comments."""
+
+ subst = []
+ for k, v in values.iteritems():
+ r = Replacement(k, v)
+ subst.append(r)
+
+ input = open(options.config, "r")
+ input_lines = input.readlines()
+ input.close()
+
+ output_lines = []
+ section_found = False
+ section_match = re.compile("[[]" + section + "[]]")
+ other_section = re.compile("[[]")
+
+ for line in input_lines:
+ if not section_found:
+ if section_match.match(line):
+ section_found = True
+ output_lines.append(line)
+ else:
+ if other_section.match(line):
+ section_found = False
+ for s in subst:
+ if s.found:
+ continue
+ output_lines.append(s.name + " = " + s.value + "\n")
+ for s in subst:
+ line = s.subst(line)
+ output_lines.append(line)
+
+ handle, name = tempfile.mkstemp(prefix = ".dcapi.", dir =
+ os.path.dirname(options.config))
+ try:
+ output = os.fdopen(handle, "w")
+ output.writelines(output_lines)
+ output.close()
+ shutil.copymode(options.config, name)
+ os.rename(name, options.config)
+ except:
+ os.unlink(name)
+ raise
+
+def deploy():
+ if not backend:
+ parser.error("The backend must be specified")
+
+ defaults = backend.master_defaults()
+ defaults["InstanceUUID"] = str(uuid.uuid4())
+ defaults["WorkingDirectory"] = options.workdir
+
+ modify_config(defaults)
+
+def check():
+ if not backend:
+ parser.error("The backend must be specified")
+
+ config = RawConfigParser()
+ config.readfp(open(options.config))
+
+ if not config.has_section('Master'):
+ raise SystemExit("The [Master] section is missing")
+
+ # The [Master] section may contain either master keys or defaults for client
+ # keys
+ keys = config.options('Master')
+ seen = dict([(x, False) for x in keys])
+ for name, required in backend.get_master_keys():
+ name = name.lower()
+ if name in seen:
+ seen[name] = True
+ elif required:
+ raise SystemExit("Required option '" + name + "' is missing in the [Master] section")
+ for name, required in backend.get_client_keys():
+ name = name.lower()
+ if name in seen:
+ seen[name] = True
+
+ for name, found in seen.iteritems():
+ if not found:
+ print "Option '" + name + "' in the [Master] section seems unused"
+
+ # Now check the client sections
+ for section in config.sections():
+ if section == "Master":
+ continue
+ if not section.startswith("Client-"):
+ print "Unexpected section name: " + section
+ continue
+
+ keys = config.options(section)
+ seen = dict([(x, False) for x in keys])
+ for name, required in backend.get_client_keys():
+ name = name.lower()
+ if name in seen:
+ seen[name] = True
+ elif required:
+ if not config.has_option("Master", name):
+ raise SystemExit("Required option '" + name + "' is missing "
+ "in the [" + section + "] section")
+ for name, found in seen.iteritems():
+ if not found:
+ print "Option '" + name + "' in the [" + section + "] section seems unused"
+
+command_table = {'deploy': deploy,
+ 'check' : check}
+
+parser = OptionParser(usage = "%prog [options] <command>")
+parser.add_option("--config", "-c",
+ metavar = "FILE",
+ help = "specify the location of the config file. The default "
+ "is dc-api.conf in the current directory")
+parser.add_option("--backend", "-b",
+ metavar = "NAME",
+ help = "the backend implementation to use")
+parser.add_option("--workdir", "-w",
+ metavar = "NAME",
+ help = "the work directory of DC-API. Defaults to the "
+ "directory where the config file lives")
+options, args = parser.parse_args()
+if len(args) != 1:
+ parser.error("Wrong number of arguments")
+if not args[0] in command_table:
+ parser.error("Unknown command " + args[0])
+if options.backend is None:
+ parser.error("The backend name must be specified")
+
+if options.config is None:
+ options.config = "dc-api.conf"
+if options.workdir is None:
+ options.workdir = os.path.dirname(os.path.abspath(options.config))
+
+# Load the backend module
+module = __import__("DCAPI." + options.backend)
+cl = getattr(module, options.backend + "_Backend")
+backend = getattr(cl, options.backend + "_Backend")()
+
+command_table[args[0]]()
diff --git a/dcapi/dcapi.m4 b/dcapi/dcapi.m4
new file mode 100644
index 0000000..bae9c6d
--- /dev/null
+++ b/dcapi/dcapi.m4
@@ -0,0 +1,109 @@
+dnl
+dnl SZDG_DCAPI
+dnl
+dnl Check for the Distributed Computing Platform development files
+dnl
+
+AC_DEFUN([_SZDG_DCAPI_COMMON], [
+ AC_ARG_WITH([dcapi_flavor], AS_HELP_STRING([--with-dcapi-flavor],
+ [DCAPI flavor to use @<:@boinc@:>@]),,
+ [with_dcapi_flavor=boinc])
+ PKG_PROG_PKG_CONFIG([0.17])
+])
+
+dnl
+dnl Check for DC-API client libraries.
+dnl
+dnl Usage: SZDG_DCAPI_CLIENT([ACTION-IF-FOIND], [ACTION-IF-NOT-FOUND])
+dnl
+AC_DEFUN([SZDG_DCAPI_CLIENT], [
+ AC_REQUIRE([_SZDG_DCAPI_COMMON])
+
+ DCAPI_CLIENT_LIBS=
+ DCAPI_CLIENT_CFLAGS=
+
+ AC_MSG_CHECKING([for DCAPI_CLIENT])
+ PKG_CHECK_EXISTS([dcapi-${with_dcapi_flavor}-client],
+ [dcapi_client=yes],
+ [dcapi_client=no])
+ AC_MSG_RESULT([$dcapi_client])
+ if test "$dcapi_client" != no; then
+ DCAPI_CLIENT_LIBS=`pkg-config --libs --static dcapi-${with_dcapi_flavor}-client`
+ DCAPI_CLIENT_CPPFLAGS=`pkg-config --cflags dcapi-${with_dcapi_flavor}-client`
+
+ DCAPI_CLIENT_LIBS="-Wl,-Bstatic $DCAPI_CLIENT_LIBS -Wl,-Bdynamic"
+
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $DCAPI_CLIENT_CFLAGS"
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $DCAPI_CLIENT_LIBS"
+ AC_LANG_PUSH([C])
+ AC_CHECK_HEADERS([dc_client.h], [], [dcapi_client=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <dc_client.h>]],
+ [[(void)DC_initClient()]])],
+ [true],
+ [dcapi_client=no])
+ AC_LANG_POP([C])
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ fi
+
+ AC_SUBST([DCAPI_CLIENT_LIBS])
+ AC_SUBST([DCAPI_CLIENT_CFLAGS])
+
+ dnl Backward compatibility: produce an error if the above tests fail
+ dnl and both $1 and $2 are empty
+ m4_ifval(m4_normalize[$1], [], [m4_ifvaln(m4_normalize[$2], [],
+ if test "$dcapi_client" != yes; then
+ AC_MSG_ERROR([DC-API client libraries were not found])
+ fi)])dnl
+
+ if test "$dcapi_client" = yes; then
+ m4_ifval(m4_normalize[$1], [$1], [:])
+ m4_ifvaln([$2],[else
+ $2])dnl
+ fi
+])
+
+dnl
+dnl Check for DC-API master libraries.
+dnl
+dnl Usage: SZDG_DCAPI_MASTER([ACTION-IF-FOIND], [ACTION-IF-NOT-FOUND])
+dnl
+AC_DEFUN([SZDG_DCAPI_MASTER], [
+ AC_REQUIRE([_SZDG_DCAPI_COMMON])
+
+ PKG_CHECK_MODULES([DCAPI_MASTER],
+ [dcapi-${with_dcapi_flavor}-master],
+ [dcapi_master=yes],
+ [dcapi_master=no])
+
+ if test "$dcapi_master" != no; then
+ save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $DCAPI_MASTER_CFLAGS"
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $DCAPI_MASTER_LIBS"
+ AC_LANG_PUSH([C])
+ AC_CHECK_HEADERS([dc.h], [], [dcapi_master=no])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <dc.h>]],
+ [[(void)DC_initMaster((char *)0)]])],
+ [true],
+ [dcapi_master=no])
+ AC_LANG_POP([C])
+ CPPFLAGS="$save_CPPFLAGS"
+ LIBS="$save_LIBS"
+ fi
+
+ dnl Backward compatibility: produce an error if the above tests fail
+ dnl and both $1 and $2 are empty
+ m4_ifval(m4_normalize[$1], [], [m4_ifvaln(m4_normalize[$2], [],
+ if test "$dcapi_master" != yes; then
+ AC_MSG_ERROR([DC-API master libraries were not found])
+ fi)])dnl
+
+ if test "$dcapi_master" = yes; then
+ m4_ifval(m4_normalize[$1], [$1], [:])
+ m4_ifvaln([$2],[else
+ $2])dnl
+ fi
+])
diff --git a/dcapi/doc/Makefile.am b/dcapi/doc/Makefile.am
new file mode 100644
index 0000000..7a730eb
--- /dev/null
+++ b/dcapi/doc/Makefile.am
@@ -0,0 +1,106 @@
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=dc-api
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=../include
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS=
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=../include/*.h
+CFILE_GLOB=
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES=config.h dc_internal.h dc_win32.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = \
+ boinc.xml \
+ condor.xml \
+ concepts.xml \
+ config.xml \
+ intro.xml \
+ using.xml \
+ windows.xml \
+ local.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+INCLUDES=
+GTKDOC_LIBS=
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST +=
+
+CLEANFILES += $(DOC_MODULE)-docs.pdf \
+ $(DOC_MODULE)-docs.odf \
+ $(DOC_MODULE)-docs-combined.xml
+
+# Additional formats
+$(DOC_MODULE)-docs.tex: html-build.stamp customize.xsl
+ dblatex -t tex -p customize.xsl $(DOC_MODULE)-docs.xml
+
+$(DOC_MODULE)-docs.pdf: $(DOC_MODULE)-docs.tex
+ rubber --pdf $(DOC_MODULE)-docs
+
+$(DOC_MODULE)-docs-combined.xml: $(DOC_MODULE)-docs.xml
+ xmllint --xinclude $< > $@
+
+$(DOC_MODULE)-docs.odf: $(DOC_MODULE)-docs-combined.xml
+ docbook2odf --output-file $@ $<
+
+clean-local:
+ -test -e $(DOC_MODULE)-docs.tex && (rubber --clean --pdf $(DOC_MODULE)-docs.tex; rm -f $(DOC_MODULE)-docs.tex)
diff --git a/dcapi/doc/boinc.xml b/dcapi/doc/boinc.xml
new file mode 100644
index 0000000..aa03535
--- /dev/null
+++ b/dcapi/doc/boinc.xml
@@ -0,0 +1,728 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1 id="boinc">
+ <title>BOINC</title>
+
+ <sect2>
+ <title>Terminology</title>
+
+ <para>
+ The term <emphasis>workunit</emphasis> means approximately the same thing
+ for DC-API as for BOINC.
+ </para>
+
+ <para>
+ Both the DC-API and BOINC uses the term <emphasis>result</emphasis>, but
+ they mean different things. In BOINC, results are instances of a work
+ unit waiting to be downloaded or currently under execution. The DC-API
+ result is what BOINC calls the <emphasis>canonical result</emphasis>.
+ This means that when BOINC generates multiple results (e.g. for
+ redundant computation), the DC-API will not be notified about the status
+ of individual BOINC results; instead, it will be notified only if the
+ canonical result is found or the whole work unit is marked as failed by
+ BOINC.
+ </para>
+
+ <para>
+ In the following sections, <emphasis>result</emphasis> will mean the
+ DC-API term, while <emphasis>BOINC result</emphasis> will refer to the
+ BOINC definition.
+ </para>
+
+ <para>
+ The DC-API master application is an <emphasis>assimilator</emphasis> in
+ BOINC terms.
+ </para>
+
+ </sect2>
+
+ <sect2>
+ <title>Configuration options</title>
+
+ <sect3>
+ <title>Master side</title>
+
+ <para>
+ <warning>
+ <para>
+ Important note: the directories specified by
+ <literal>WorkingDirectory</literal>,
+ <literal>ProjectRootDir</literal> and the upload & download
+ directories specified in BOINC's <filename>config.xml</filename>
+ must all reside on the same filesystem since the DC-API uses the
+ <function>link()</function> and <function>rename()</function> system
+ calls.
+ </para>
+ </warning>
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>InstanceUUID</term>
+ <listitem>
+ <para>
+ REQUIRED. The value must be a Universally Unique Identifier. The
+ value must be unique for every master application running on the
+ same grid backend. If two master applications are started with the
+ same <literal>InstanceUUID</literal> value, their behaviour is
+ undefined.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>ProjectRootDir</term>
+ <listitem>
+ <para>
+ OPTIONAL. The location of the project's root directory.
+ This is the directory that contains
+ <filename>config.xml</filename> and other BOINC-related
+ subdirectories.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>UploadURL</term>
+ <listitem>
+ <para>
+ OPTIONAL. The upload handler's URL to send output files of
+ processed BOINC workunits to.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>InputURLRewriteRegExpMatch</term>
+ <listitem>
+ <para>
+ OPTIONAL. This variable along with the <literal>InputURLRewriteRegExpReplace</literal>
+ varaible can be used to rewrite input file URLs based on regular expressions. The
+ variable <literal>InputURLRewriteRegExpMatch</literal> defines the match part of the
+ regular expression, whereas the varibale <literal>InputURLRewriteRegExpReplace</literal>
+ defines the replacement part of the regular expression. An example value of this variable
+ is <literal>attic://([^/]*).*/([^/]*)$</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>InputURLRewriteRegExpReplace</term>
+ <listitem>
+ <para>
+ OPTIONAL. This variable along with the <literal>InputURLRewriteRegExpMatch</literal>
+ varaible can be used to rewrite input file URLs based on regular expressions. The
+ variable <literal>InputURLRewriteRegExpReplace</literal> defines the replace part of the
+ regular expression, whereas the varibale <literal>InputURLRewriteRegExpMatch</literal>
+ defines the match part of the regular expression. An example value of this variable
+ is <literal>http://\1/dl/redir/\2\nhttp://localhost:12345/data/\2</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ <sect3>
+ <title>Per-client configuration</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>Redundancy</term>
+ <listitem>
+ <anchor id="DC-API-Boinc-Redundancy"/>
+ <para>
+ OPTIONAL. Integer value specifying the quorum required to consider
+ the work unit as valid. The default value is 1. If this value is N,
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ N + log(N) initial BOINC results will be created. If one of
+ them finishes, a new one will be created automatically until
+ the work unit either succeeds or fails.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The work unit will be considered failed if more than N +
+ log(N + 2) + 1 BOINC results fail.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The work unit will be considered failed if there are N +
+ log(N + 2) + 1 successful results but the validator could
+ not find a canonical result.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The work unit will be considered failed if the state of the
+ work unit is still not decided after 2 * (N + log(N + 2))
+ BOINC results have been received.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <note>
+ <para>
+ When the redundancy is greater than 1, the work unit can not
+ be suspended using <function><link
+ linkend="DC-suspendWU">DC_suspendWU()</link></function>.
+
+ In the following the options are listed which allow fine tuning
+ redundancy. These options are mutually exclusive with <function><link
+ linkend="DC-API-Boinc-Redundancy">Redundancy</link></function>.
+ </para>
+ </note>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MinQuorum</term>
+ <listitem>
+ <para>
+ OPTIONAL. Integer value specifying the quorum required to consider
+ the work unit as valid. The default value is 1.
+ </para>
+ <note>
+ <para>
+ This option is mutually exclusive with <function><link
+ linkend="DC-API-Boinc-Redundancy">Redundancy</link></function>.
+ <literal>MinQuorum</literal>, <literal>TargetNResults</literal>,
+ <literal>MaxErrorResults</literal> and <literal>MaxTotalResults</literal>
+ should be used combined.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>TargetNResults</term>
+ <listitem>
+ <para>
+ OPTIONAL. Integer value specifying the number of initial BOINC results to be
+ created. The default value is <literal>MinQuorum</literal>.
+ </para>
+ <note>
+ <para>
+ This option is mutually exclusive with <function><link
+ linkend="DC-API-Boinc-Redundancy">Redundancy</link></function>.
+ <literal>MinQuorum</literal>, <literal>TargetNResults</literal>,
+ <literal>MaxErrorResults</literal> and <literal>MaxTotalResults</literal>
+ should be used combined.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxErrorResults</term>
+ <listitem>
+ <para>
+ OPTIONAL. Integer value specifying the maximum number of failed BOINC results
+ for a work unit. The default value is 0.
+ </para>
+ <note>
+ <para>
+ This option is mutually exclusive with <function><link
+ linkend="DC-API-Boinc-Redundancy">Redundancy</link></function>.
+ <literal>MinQuorum</literal>, <literal>TargetNResults</literal>,
+ <literal>MaxErrorResults</literal> and <literal>MaxTotalResults</literal>
+ should be used combined.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxTotalResults</term>
+ <listitem>
+ <para>
+ OPTIONAL. Integer value specifying the total number of BOINC results for a
+ work unit. The default value is <literal>MinQuorum</literal>.
+ </para>
+ <note>
+ <para>
+ This option is mutually exclusive with <function><link
+ linkend="DC-API-Boinc-Redundancy">Redundancy</link></function>.
+ <literal>MinQuorum</literal>, <literal>TargetNResults</literal>,
+ <literal>MaxErrorResults</literal> and <literal>MaxTotalResults</literal>
+ should be used combined.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxSuccessResults</term>
+ <listitem>
+ <para>
+ OPTIONAL. Integer value specifying the maximum number of successful BOINC results
+ for a work unit. The default value is <literal>MinQuorum</literal>.
+ </para>
+ <note>
+ <para>
+ This option is mutually exclusive with <function><link
+ linkend="DC-API-Boinc-Redundancy">Redundancy</link></function>.
+ <literal>MinQuorum</literal>, <literal>TargetNResults</literal>,
+ <literal>MaxErrorResults</literal> and <literal>MaxTotalResults</literal>
+ should be used combined.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxOutputSize</term>
+ <listitem>
+ <para>
+ OPTIONAL. Max. size of any output files the client application
+ generates. The default is 256 KiB. If the size of an output file
+ exceeds this value, the BOINC core client will not upload that
+ file and will report the BOINC result as failed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxMemUsage</term>
+ <listitem>
+ <para>
+ OPTIONAL. Max. memory usage of the client application. The default
+ is 128 MiB. Hosts with less available memory will not download
+ work units for this application. Also, if the applications's real
+ memory usage exceeds this limit, the BOINC core client aborts the
+ application and reports the BOINC result as failed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxDiskUsage</term>
+ <listitem>
+ <para>
+ OPTIONAL. Max. disk usage of the client application, including all
+ output and temporary files. The default is 64 MiB. Hosts with less
+ usable disk space will not download work units for this
+ application. Also, if the application's disk usage exceeds this
+ limit, the BOINC core client aborts the apllication and reports
+ the BOINC result as failed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>EstimatedFPOps</term>
+ <listitem>
+ <para>
+ OPTIONAL. The estimated run-time of the client application,
+ expressed in the number of floating point operations. The default
+ is 10<superscript>13</superscript>. This value is used by the
+ BOINC server to decide whether a given host is eligible to run a
+ work unit and is also used by the BOINC core client for scheduling
+ decisions.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>MaxFPOps</term>
+ <listitem>
+ <para>
+ OPTIONAL. Max. CPU usage of the client application, expressed in
+ the number of floating point operations. The default is
+ 10<superscript>15</superscript>. If the application uses more CPU
+ time than this value divided by the CPU's speed, then the BOINC
+ core client aborts the application and reports the BOINC result as
+ failed.
+ </para>
+ <note>
+ <para>
+ As per recommendations in the BOINC documentation, the value of
+ <literal>MaxFPOps</literal> should be several times larger than
+ the expected run time of a work unit on an avarage host.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>DelayBound</term>
+ <listitem>
+ <para>
+ Time in seconds the BOINC server waits for a result to finish. If
+ a client has donwloaded a BOINC result and did not finish in the
+ given time, the result is considered failed and a new one is
+ generated.
+ </para>
+ <note>
+ <para>
+ If <literal>DelayBound</literal> is smaller than the estimated
+ run time of the application on a given host (calculated by
+ dividing <literal>EstimatedFPOps</literal> by the host's speed),
+ then the BOINC result will not be offered for download. If no
+ host is fast enough to complete the application within the
+ specified time limit, the result will remain unsent for an
+ unspecified amount of time and DC-API will receive no feedback
+ for it.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>EnableSuspend</term>
+ <listitem>
+ <para>
+ OPTIONAL. Boolean value telling if work units for this client can
+ be suspended using <function><link
+ linkend="DC-suspendWU">DC_suspendWU()</link></function> or
+ not. The default value is false.
+ <note>
+ <para>
+ When the redundancy is greater than 1, the work unit can not
+ be suspended using <function><link
+ linkend="DC-suspendWU">DC_suspendWU()</link></function>,
+ regardless of the value of this configuration option.
+ </para>
+ </note>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>NativeClient</term>
+ <listitem>
+ <para>
+ OPTIONAL. Boolean value telling if the client application uses the
+ native BOINC API instead of DC-API. This will prevent adding
+ DC-API specific input and output files to the workunit
+ description.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ <sect3>
+ <title><anchor id="Boinc-Config"/>Considerations for BOINC configuration</title>
+
+ <para>
+ If you want to use master-to-client messaging, you must enable it in the
+ BOINC project's configuration by making sure that the
+ <literal><msg_to_host/></literal> tag is present in
+ <filename>config.xml</filename>. Client-to-master messaging is always
+ enabled and does not require configuration.
+ </para>
+ </sect3>
+
+ </sect2>
+
+ <sect2>
+ <title>Backend-specific issues</title>
+
+ <sect3>
+ <title>Deploying the application</title>
+
+ <para>
+ Deploying the application consists of two steps: registering the client
+ application(s) in the BOINC database, and running the master daemon.
+ </para>
+ <para>
+ All client applications should be compiled for every platform you need,
+ and installed under the project's <filename>apps</filename> directory.
+ The BOINC name of the client application must be the same as the master
+ uses when it calls <function><link
+ linkend="DC-createWU">DC_createWU()</link></function>. See the BOINC
+ documentation about how the client binaries should be named and placed
+ and how they should be registered in the database.
+ </para>
+ <para>
+ The most common method of deploying the master application is to run it
+ as a BOINC daemon by adding it to BOINC's
+ <filename>config.xml</filename>. See the BOINC documentation for
+ details. Other methods of deploying the master application depending on
+ how it was designed are also possible, but the following rules must be
+ fulfilled:
+ <itemizedlist>
+ <listitem>
+ <para>
+ The master application must have access to the BOINC project's
+ <filename>config.xml</filename>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The BOINC <application>file_deleter</application> process must
+ have enough privileges to be able to remove files and directories
+ created by the master application. If the master runs under the
+ same user account as the BOINC daemons, this is usually not a
+ problem.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The master application must be able to create files and
+ directories under the project's <filename>download</filename>
+ directory, and it must be able to access files under the project's
+ <filename>upload</filename> directory.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <!-- XXX Update when the validator API is added -->
+ <para>
+ Besides the master and client applications, you must also define a
+ validator for the application in <filename>config.xml</filename>. If you
+ are not using redundancy then you may use the
+ <filename>sample_trivial_validator</filename> that comes with BOINC.
+ This validator accepts everything without checking.
+ </para>
+ <para>
+ If redundancy is desired, you may use the
+ <application>validator_for_dcapi</application> validator which does a
+ textual (meaning converting between UNIX and Windows line endings)
+ comparison of the first output file.
+ </para>
+ <warning>
+ <para>
+ If you are running multiple master applications under the same BOINC
+ project, and you want to use
+ <filename>sample_trivial_validator</filename> for any of them, then
+ you must use it for all of them. This restricition exists for any
+ other validator that is not DC-API aware, since it can not determine
+ which work unit belongs to which master and therefore which results
+ should it validate and which ones should it leave alone.
+ </para>
+ </warning>
+ </sect3>
+
+ <sect3>
+ <title>Redundant computation</title>
+
+ <para>
+ Redundancy is very important if you are running computations on
+ untrusted clients instead but may even be useful on dedicated clients to
+ protect from hardware failures. Besides deliberate tampering with the
+ output, clients may also produce incorrect results due to hardware
+ problems like bad memory, overheating or faulty CPU or simply disk
+ corruption.
+ </para>
+ <para>
+ Redundant computing means sending the same work unit to multiple
+ different clients and comparing the results. The comparison is performed
+ by a tool BOINC calls <emphasis>validator</emphasis>. The validator
+ usually is application-specific as it must understand the output file
+ format to filter out unimportant noise (like different line endings on
+ different operating systems, or small differences between floating point
+ results due to the different rounding characteristics of different CPU
+ architectures).
+ </para>
+ <para>
+ Redundancy can be enabled in DC-API on a per client application basis by
+ adding the appropriate <link
+ linkend="DC-API-Boinc-Redundancy"><literal>Redundancy</literal></link>
+ value to the client's configuration group.
+ </para>
+ <para>
+ If redundancy is enabled for a client application, work units for that
+ client can not be suspended. The reason that it is generally impossible
+ to compare the state of two BOINC results suspended at two different
+ stage of their execution. If one of the suspended results is already
+ corrupt and is restarted, the validator will no longer recognize the
+ corruption since all new results starting from the corrupted initial
+ state will produce the same but bad output.
+ </para>
+
+ </sect3>
+
+ <sect3>
+ <title>Messaging</title>
+
+ <para>
+ BOINC provides a limited messaging support that is accessible thru the
+ DC-API <function><link
+ linkend="DC-sendWUMessage">DC_sendWUMessage()</link></function> and
+ <function><link
+ linkend="DC-sendMessage">DC_sendMessage()</link></function>
+ functions on the master and client side, respectively.
+ <note>
+ <para>
+ See the note about <link linkend="Boinc-Config">configuration</link>
+ requirements for master-to-client messaging.
+ </para>
+ </note>
+ </para>
+ <para>
+ BOINC messaging has several restrictions:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Messages can only be sent to BOINC results that are currently
+ running. If a work unit has no running result, messages sent to it
+ are silently discarded.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If redundancy is enabled, master-to-client messages are sent to
+ all running BOINC results regardless their state. In case of
+ client-to-master messages, the master cannot tell which BOINC
+ result sent the message. This means that "request-response" style
+ messaging is hard to implement correctly when redundancy is
+ enabled.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Messages sent by the master are delivered only when the client
+ connects to the master next time. Since the master has no control
+ over this, the client should periodically send messages to the
+ master to force a connection if timely receiving of messages sent
+ by the master is important. Be caraful about the extra load placed
+ on the BOINC server by clients sending messages too frequently.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ When multiple messages are being queued in either direction due to
+ the client not connecting to the server frequently enough, they
+ will be delivered to the peer in an undefined order.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Cancelling a running work unit</title>
+
+ <para>
+ The <function><link
+ linkend="DC-cancelWU">DC_cancelWU()</link></function> function can
+ be used to cancel a running work unit. This function is implemented
+ by sending a special message to all running BOINC results. This implies
+ that unless clients where BOINC results for this work unit are running
+ connect back to the BOINC server, the cancel request may not be
+ delivered until the client finishes the computation.
+ </para>
+ <para>
+ Due to a race condition between various components of the BOINC system,
+ it is also possible that a new BOINC result is created and is sent out
+ after the work unit has been cancelled. Such BOINC result will not
+ receive the cancellation request and will run until it finishes its
+ computation. Its result however will not be reported to the DC-API
+ master, so the application should not be concerned about this.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title><anchor id="Boinc-Result"/>When is a result reported</title>
+
+ <!-- XXX Rework when the validator API is merged -->
+ <para>
+ The BOINC core client handles the completion of a BOINC result in two
+ phases: first it uploads the output files, then it notifies the BOINC
+ server that the result has been finised. The validator will notice the
+ completion of the BOINC result only when this notification is received.
+ </para>
+ <para>
+ However, this notification is sent only when the core client has to
+ connect the BOINC server the next time, which may be a long time if the
+ core client has already started processing the next BOINC result while
+ the output files of the previous result were being uploaded.
+ </para>
+ <para>
+ When there are no more work units to download, the client sleeps for a
+ couple of minutes before trying again. This means that the reporting of
+ the completion of the last work unit may be delayed for a couple of
+ minutes even after all its output files have been uploaded.
+ </para>
+ <para>
+ The DC-API master application will receive notification about a result
+ when the validator has made its decision. This may also introduce some
+ delay after all BOINC results have been completed.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Work unit priority</title>
+
+ <para>
+ The priority of a work unit can be set either by using the
+ <function><link
+ linkend="DC-setWUPriority">DC_setWUPriority()</link></function>
+ function or by specifying it in the configuration file using the
+ <literal>DefaultPriority</literal> key. Either way, the priority can
+ be an arbitrary 32-bit integer.
+ </para>
+ <para>
+ The BOINC scheduler dispatches higher priority work units first. Results
+ belonging to work units with lower priorities will not be offered to
+ clients until all the higher priority work units are exhausted.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Common errors</title>
+
+ <para>
+ There are some common errors:
+
+ <variablelist>
+ <varlistentry>
+ <term>No results are reported</term>
+ <listitem>
+ <para>
+ Check the validator. When there is no validator defined in
+ <filename>config.xml</filename> or the validator fails for some
+ reason, the DC-API master will not receive result notifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>The final result is not reported</term>
+ <listitem>
+ <para>
+ There is a couple minutes <link
+ linkend="Boinc-Result">delay</link> before reporting the final
+ result. It is normal.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ I've fixed a bug in a client application, but results are still
+ computed using the old client
+ </term>
+ <listitem>
+ <para>
+ Be sure to give the new client binary with a version number
+ greater than the old client, or otherwise the clients will not
+ notice that the binary has been updated and will not download
+ it.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Open issues</title>
+
+ <para>
+ The following list contains the known problems with DC-API's BOINC
+ backend:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Messages are not removed from the <literal>msg_to_host</literal>
+ and <literal>msg_from_host</literal> tables by the
+ <application>db_purge</application> tool, so they need to be cleaned
+ up manually from time to time to prevent the database from being
+ filled up.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The DC-API creates result template files in the
+ <filename>templates</filename> subdirectory in the project's root
+ directory, but those files are never removed.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ </sect2>
+</sect1>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/doc/concepts.xml b/dcapi/doc/concepts.xml
new file mode 100644
index 0000000..96ad35a
--- /dev/null
+++ b/dcapi/doc/concepts.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1 id="concepts">
+ <title>General concepts</title>
+
+
+ <sect2>
+ <title>Programming model</title>
+
+ <para>
+ DC-API applications consist of two major components: a master application
+ and one or more client applications. The master is responsible for
+ dividing the global input data into smaller chunks and distributing these
+ chunks in the form of work units. Interpreting the output generated by the
+ work units and combining them to form a global output is also the job of
+ the master.
+ </para>
+ <para>
+ The master application usually runs as a daemon, but it is also possible
+ to write a master that runs periodically (e.g. from
+ <application>cron</application>), processes the outstanding events, and
+ exits.
+ </para>
+ <para>
+ Client applications are simple sequential programs that take their input
+ from the master, perform some computation on it and produce some output.
+ </para>
+
+ <sect3>
+ <title>Writing a master application</title>
+
+ <para>
+ A typical master application does the following steps:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Initializes the DC-API library by calling <function><link
+ linkend="DC-initMaster">DC_initMaster()</link></function>
+ function.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Calls the <function><link
+ linkend="DC-setResultCb">DC_setResultCb()</link></function>
+ function and optionally some of the <function><link
+ linkend="DC-setSubresultCb">DC_setSubresultCb()</link></function>,
+ <function><link
+ linkend="DC-setMessageCb">DC_setMessageCb()</link></function>,
+ <function><link
+ linkend="DC-setSuspendCb">DC_setSuspendCb()</link></function>
+ and <function><link
+ linkend="DC-setValidateCb">DC_setValidateCb()</link></function>
+ functions, depending on the features (messaging, subresults etc.)
+ it wants to use.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ In its main loop, the master calls the <function><link
+ linkend="DC-createWU">DC_createWU()</link></function> function
+ to create new work units when needed. If the total number of work
+ units is small (depending on the grid infrastructure), then the
+ master may also create all the work units in advance. If the total
+ number of work units is too large for this, the master may use the
+ <function><link
+ linkend="DC-getWUNumber">DC_getWUNumber()</link></function>
+ function to determine the number of running work units, and create
+ new work units only if this number falls below a certain threshold.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Also in its main loop the master calls the <function><link
+ linkend="DC-processMasterEvents">DC_processMasterEvents()</link></function>
+ function that checks for outstanding events and invokes the
+ appropriate callbacks.
+ </para>
+ <para>
+ Alternatively, the master may use the <function><link
+ linkend="DC-waitMasterEvent">DC_waitMasterEvent()</link></function>
+ and <function><link
+ linkend="DC-waitWUEvent">DC_waitWUEvent()</link></function>
+ functions instead of <function><link
+ linkend="DC-processMasterEvents">DC_processMasterEvents()</link></function>
+ if it prefers to receive event structures instead of using
+ callbacks.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Writing a client application</title>
+
+ <para>
+ A typical client application performs the following steps:
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Initializes the DC-API library by calling <function><link
+ linkend="DC-initClient">DC_initClient()</link></function>
+ function.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Identifies the location of its input/output files by calling the
+ <function><link
+ linkend="DC-resolveFileName">DC_resolveFileName()</link></function>
+ function.
+ <note>
+ <para>
+ The client application may not assume that it can
+ read/create/write any files other than the names returned by
+ <function><link
+ linkend="DC-resolveFileName">DC_resolveFileName()</link></function>.
+ </para>
+ </note>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ During the computation, the client should periodically call the
+ <function><link
+ linkend="DC-checkClientEvent">DC_checkClientEvent()</link></function>
+ function and process the received events.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If possible, the client should call the <function><link
+ linkend="DC-fractionDone">DC_fractionDone()</link></function>
+ function with the fraction of the work completed. On some grid
+ infrastructures (e.g. BOINC) this will allow the client's supervisor
+ process to show the progression of the application to the user.
+ </para>
+ <para>
+ Ideally the value passed to the <function><link
+ linkend="DC-fractionDone">DC_fractionDone()</link></function>
+ function should be proportional to the time elapsed so far compared
+ to the total time that will be needed to complete the computation.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The client should call the <function><link
+ linkend="DC-finishClient">DC_finishClient()</link></function>
+ function at the end of the computation. As a result all output files
+ will be sent to the master and the master will be notified about the
+ completion of the work unit.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Messaging</title>
+
+ <para>
+ The DC-API provides limited messaging functionality between the master
+ application and the clients. The DC-API has the following features and
+ restrictions:
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Messages are not reliable in the sense that if the client is not
+ actually running when a message is being sent to it (e.g. because it
+ is queued by the backend grid infrastructure), then the message may
+ be silently dropped.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The ordering of messages is not neccessarily maintained.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Messages are delivered asynchronously. There is no limit for the
+ time elapsed before a message is actually delivered.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Due to the above restrictions, DC-API messages are not suitable for
+ message-based parallel processing. They are meant for sending short status
+ messages about long-running operations, or for sending control messages
+ like a command to cancel a given computation.
+ </para>
+ </sect2>
+
+</sect1>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/doc/condor.xml b/dcapi/doc/condor.xml
new file mode 100644
index 0000000..e613a7c
--- /dev/null
+++ b/dcapi/doc/condor.xml
@@ -0,0 +1,440 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1 id="condor">
+ <title>CONDOR</title>
+
+ <sect2 id="condor_app">
+ <title>Application in Condor environment</title>
+
+ <para>
+ Master-worker application developed using DC-API can be run in a
+ Condor environment. The master program must be started by hand and
+ it submits workunits to a Condor execution pool.
+ </para>
+
+ <para>
+ All files that generated by the application including the master and
+ the worker programs and the DC-API library itself are placed under a
+ directory called <emphasis>working directory</emphasis>.
+ </para>
+
+ </sect2>
+
+ <sect2 id="condor_environment">
+ <title>Condor environment</title>
+
+ <para>
+ To execute a DC-API application using Condor version of the DC-API
+ library you have to set up a Condor environment and have access to
+ it.
+ </para>
+
+ <para>
+ Master program of the application must be started on a Condor submit
+ host so it will be able to submit workunits as Condos jobs.
+ </para>
+
+ <para>
+ Working directory of the application must be accessible by the
+ master and the worker processes too so it should be placed on a
+ shared filesystem (e.g. NFS) which is available for the submit and
+ the execution hosts in the Condor pool.
+ </para>
+
+ </sect2>
+
+ <sect2 id="condor_required">
+ <title>Required tools</title>
+
+ <para>
+ To compile the application using Condor version of the DC-API
+ library you need an additional library <filename
+ class="libraryfile">libcondorapi.a</filename> which is included in the
+ Condor installation. This library must be linked to the application
+ besides the DC-API library.
+
+ <caution><title>Do not use Condor's lib directory</title>
+ <para>
+ Do not specify Condor's lib directory for the linker when
+ compiling the application. For example do not use the option:
+
+ <example><title>Linker option</title>
+ <programlisting>
+ ... -L$CONDOR_HOME/lib ...
+ </programlisting>
+ </example>
+
+ Instead, copy out the <filename
+ class="libraryfile">libcondorapi.a</filename> file to somewhere else
+ and use that directory after the linker's -L option.
+ </para>
+ </caution>
+
+ </para>
+
+ </sect2>
+
+ <sect2 id="condor_configuration">
+ <title>Configuration options</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>InstanceUUID</term>
+ <listitem>
+ <para>
+
+ REQUIRED. Identification of running instance of the
+ application. For CONDOR backend it can be any string not
+ just an UUID.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>WorkingDirectory</term>
+ <listitem>
+ <para>
+
+ REQUIRED. Name of working directory of the
+ application. All files that are generated by the
+ application or the DC-API library are placed under this
+ directory. Different applications can use the same working
+ directory because every instance has its own subdirectory
+ there.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ClientMessageBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where messages are placed which are sent by the client to
+ the master by <function><link
+ linkend="DC-sendMessage">DC_sendMessage()</link></function>. Default
+ value is <filename>_dcapi_client_messages</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>MasterMessageBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where <function><link
+ linkend="DC-sendWUMessage">DC_sendWUMessage()</link></function>
+ places messages sent by the master to the client. Default
+ value is <filename>_dcapi_master_messages</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SubresultBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where <function><link
+ linkend="DC-sendResult">DC_sendResult()</link></function>
+ places subresults generated by the client. Default
+ value is <filename>_dcapi_client_subresults</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SystemMessageBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where the master and client program place management
+ messages for example when the master asks the client to
+ suspend and it sends back an acknowlegde. Default value is
+ <filename>_dcapi_system_messages</filename>
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SubmitFile</term>
+ <listitem>
+ <para>
+
+ Name of the file in workunit's working directory which is
+ generated by the master and used as submit information for
+ Condor when a workunit is prepared to start. Default value
+ is <filename>_dcapi_condor_submit.txt</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Executable</term>
+ <listitem>
+ <para>
+
+ Name of the executable file of the client (workunit). By
+ default it is the <parameter>clientName</parameter>
+ parameter which was passed to <function><link
+ linkend="DC-createWU">DC_createWU()</link></function>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>LeaveFiles</term>
+ <listitem>
+ <para>
+
+ Specifies if files, directories generated in workunit's
+ working directory should be deleted or not after workunit
+ ends. Zero value means delete and non-zero value means not
+ to delete. Default value is 0.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>CondorLog</term>
+ <listitem>
+ <para>
+
+ Name of the file in workunit's working directory where
+ Condor writes records about events happen to the Condor
+ job. Default value is
+ <filename>_dcapi_internal_log.txt</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>CheckpointFile</term>
+ <listitem>
+ <para>
+
+ Name of file in workunit's working directory where
+ checkpoint information is written by the
+ client. <function><link
+ linkend="DC-resolveFileName">DC_resolveFileName()</link></function>
+ will resolve <link
+ linkend="DC-CHECKPOINT-FILE:CAPS">DC_CHECKPOINT_FILE</link>
+ to this name. Default value is
+ <filename>_dcapi_checkpoint</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SavedOutputs</term>
+ <listitem>
+ <para>
+
+ Name of directory in workunit's working directory where
+ workunit's standard output is saved when it is
+ suspended. Deafult values is
+ <filename>_dcapi_saved_output</filename>. There is no
+ facility in the DC-API yet to merge saved output together.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>CondorSubmitTemplate</term>
+ <listitem>
+ <para>
+
+ Name of the file which is used as template when generating
+ Condor submit file. If not specified then a built-in template
+ will be used. % character can be used to include variable data
+ into the generated file. Recorgnized % instructions:
+
+ <variablelist>
+ <varlistentry>
+ <term>%%</term>
+ <listitem>
+ <para>
+ Literal %.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%d</term>
+ <listitem>
+ <para>
+ Current date and time
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%n</term>
+ <listitem>
+ <para>
+ Name of the workunit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%i</term>
+ <listitem>
+ <para>
+ Internal ID of the workunit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%w</term>
+ <listitem>
+ <para>
+ Name of working directory of the workunit.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%c</term>
+ <listitem>
+ <para>
+ Client name.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%r</term>
+ <listitem>
+ <para>
+ Number of the arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%x</term>
+ <listitem>
+ <para>
+ Name of the executable.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%a</term>
+ <listitem>
+ <para>
+ Argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%u</term>
+ <listitem>
+ <para>
+ Condor universe (always vanilla).
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%o</term>
+ <listitem>
+ <para>
+ File for standard output of the job.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%e</term>
+ <listitem>
+ <para>
+ File for standard error of the job.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%l</term>
+ <listitem>
+ <para>
+ File for Condor user log.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%I</term>
+ <listitem>
+ <para>
+ Comma separated list of input files (physical filenames with path). Capital 'i'.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>%O</term>
+ <listitem>
+ <para>
+ Comma separated list of output files.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SubmitRetry</term>
+ <listitem>
+ <para>
+ If a job cannot be submitted, how many times should DC-API try before giving
+ up and reporting it as failed. Default value is 5.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SubmitRetrySleepTime</term>
+ <listitem>
+ <para>
+ Defines the start value for the sleep period between job submission retries.
+ Default value is 2. It is multiplied by 2 after each retry, so 2 seconds sleep
+ before the first retry, 4 seconds before the second, 8 second before the third
+ and so on.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+
+
+ </para>
+ </listitem>
+
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+</sect1>
+
+<!-- End of condor.xml -->
diff --git a/dcapi/doc/config.xml b/dcapi/doc/config.xml
new file mode 100644
index 0000000..7427fa6
--- /dev/null
+++ b/dcapi/doc/config.xml
@@ -0,0 +1,267 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1 id="configuration">
+ <title>Configuration</title>
+
+ <para>
+ The DC-API library uses a configuration file to control its operations. The
+ location of the config file must be specified by the master application when
+ it calls the <function><link
+ linkend="DC-initMaster">DC_initMaster()</link></function> function.
+ <note>
+ <para>
+ Individual work units may also use a config file that has a slightly
+ different format than the master's config file. Work unit config files
+ however are usually generated by the DC-API library on the master side so
+ applications should not be concerned about it.
+ </para>
+ </note>
+ </para>
+
+ <sect2>
+ <title>Configuration file format</title>
+
+ <para>
+ The DC-API configuration file contains key-value pairs organized into
+ groups. The full syntax description can be found in the
+ <ulink
+ url="http://freedesktop.org/Standards/desktop-entry-spec">Desktop
+ Entry Specification</ulink>, but we
+ also give a brief explanation below.
+ </para>
+ <para>
+ Lines starting with <literal>#</literal> are considered comments
+ and are ignored. Groups are started by a line containing the group's name
+ between brackets (<literal>[</literal> and <literal>]</literal>). Groups
+ are terminated by the start of an other group or by the end of the file.
+ </para>
+ <para>
+ A group may contain a list of <literal>key = value</literal> assignments,
+ each in a separate line. White space arount the <literal>=</literal>
+ character is ignored. Note that the DC-API do not use the localized string
+ feature of the Desktop Entry Specification.
+ </para>
+ <para>
+ Configuration values can be of 4 types:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Simple strings. According to the format specification, they must be
+ UTF-8 encoded.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Integer values.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Floating point values. For both integer and floating point values,
+ the following suffixes are recognized:
+
+ <variablelist>
+ <varlistentry>
+ <term>kb, kib</term>
+ <listitem>
+ <para>
+ A multiplier of 2<superscript>10</superscript> (1024)
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>mb, mib</term>
+ <listitem>
+ <para>
+ A multiplier of 2<superscript>20</superscript>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>gb, gib</term>
+ <listitem>
+ <para>
+ A multiplier of 2<superscript>30</superscript>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>min</term>
+ <listitem>
+ <para>
+ A multiplier of 60
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>h, hour</term>
+ <listitem>
+ <para>
+ A multiplier of 3600
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>day</term>
+ <listitem>
+ <para>
+ A multiplier of 86400
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Boolean values. The strings <literal>true</literal>,
+ <literal>yes</literal> and <literal>on</literal> means true, the
+ strings <literal>false</literal>, <literal>no</literal> and
+ <literal>off</literal> are considered false.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>Generic configuration items</title>
+
+ <para>
+ The DC-API configuration file should contain a group called
+ <literal>[Master]</literal> that defines global configuration options.
+ There may be also groups called <literal>[Client-CLIENTNAME]</literal> where
+ <literal>CLIENTNAME</literal> is the logical name of a client application
+ the master wishes to start (the same string that is passed to the
+ <function><link linkend="DC-createWU">DC_createWU()</link></function> function).
+ </para>
+ <para>
+ Default values for client-specific configuration options may also be
+ specified in the <literal>[Master]</literal> group. If the same key is
+ also present in a client-specific group, the client-specific value will
+ override the value in the <literal>[Master]</literal> group.
+ </para>
+
+ <sect3>
+ <title>Configuration values for the master application</title>
+
+ <para>
+ The following entries can be specified in the <literal>[Master]</literal>
+ group. Grid backends may require and/or allow further items; refer to the
+ backend-specific documentation.
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>WorkingDirectory</term>
+ <listitem>
+ <para>
+ REQUIRED. The working directory of the master application. The value
+ must be an absolute path. The DC-API sets the master's current
+ directory to the value specified here when the <function><link
+ linkend="DC-initMaster">DC_initMaster()</link></function>
+ function is called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>LogLevel</term>
+ <listitem>
+ <para>
+ OPTIONAL. Specifies the verbosity of log messages generated by the
+ DC-API or by the master application if it uses the <function><link
+ linkend="DC-log">DC_log()</link></function> or <function><link
+ linkend="DC-vlog">DC_vlog()</link></function> functions. The allowed values
+ in the order of increasing priority are <literal>Debug</literal>,
+ <literal>Info</literal>, <literal>Notice</literal>,
+ <literal>Warning</literal>, <literal>Error</literal> and
+ <literal>Critical</literal>, the default being
+ <literal>Notice</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>LogFile</term>
+ <listitem>
+ <para>
+ OPTIONAL. Specifies the name of the file where log messages should
+ be written to. If not specified, log messages are sent to the
+ application's standard output.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+ <sect3>
+ <title>Configuration values individual work units</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>LogLevel</term>
+ <listitem>
+ <para>
+ OPTIONAL. Specifies the verbosity of log messages generated by the
+ DC-API or by the client application if it uses the <function><link
+ linkend="DC-log">DC_log()</link></function> or <function><link
+ linkend="DC-vlog">DC_vlog()</link></function> functions. The
+ allowed values in the order of increasing priority are
+ <literal>Debug</literal>, <literal>Info</literal>,
+ <literal>Notice</literal>, <literal>Warning</literal>,
+ <literal>Error</literal> and <literal>Critical</literal>, the
+ default being <literal>Notice</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>LogFile</term>
+ <listitem>
+ <para>
+ OPTIONAL. Specifies the name of the file where log messages should
+ be written to. The value must be a relative file name without any
+ path components.
+ </para>
+ <para>
+ The default value is determined by the DC-API when it creates the
+ work unit and generally it should not be overridden.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SendCfgKeys</term>
+ <listitem>
+ <para>
+ OPTIONAL. Specifies a <literal>;</literal>-separated list of
+ configuration keys that should be sent to the client application
+ when a work unit is created. <literal>LogLevel</literal> and
+ <literal>LogFile</literal> are always included so those should not
+ be listed.
+ </para>
+ <para>
+ The client application may use the <function><link
+ linkend="DC-getCfgStr">DC_getCfgStr()</link></function>,
+ <function><link
+ linkend="DC-getCfgInt">DC_getCfgInt()</link></function>, and
+ <function><link
+ linkend="DC-getCfgBool">DC_getCfgBool()</link></function>
+ functions to access the values of the keys specified by
+ <literal>SendCfgKeys</literal>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>DefaultPriority</term>
+ <listitem>
+ <para>
+ OPTIONAL. Specifies the default priority of the work unit. The
+ priority is an integer number; its allowed range and exact meaning
+ depends on the grid backend. The default value is 0.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ </sect2>
+
+</sect1>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/doc/customize.xsl b/dcapi/doc/customize.xsl
new file mode 100644
index 0000000..680ac7c
--- /dev/null
+++ b/dcapi/doc/customize.xsl
@@ -0,0 +1,7 @@
+<?xml version='1.0'?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
+ <xsl:param name="co.linkends.show">0</xsl:param>
+ <xsl:param name="doc.collab.show">0</xsl:param>
+ <xsl:param name="latex.babel.language">english</xsl:param>
+ <xsl:param name="latex.babel.use">1</xsl:param>
+</xsl:stylesheet>
diff --git a/dcapi/doc/dc-api-docs.xml b/dcapi/doc/dc-api-docs.xml
new file mode 100644
index 0000000..67b018f
--- /dev/null
+++ b/dcapi/doc/dc-api-docs.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <bookinfo>
+ <title>DC-API Manual</title>
+ </bookinfo>
+
+ <chapter id="general">
+ <title>General information</title>
+ <xi:include href="intro.xml"/>
+ <xi:include href="concepts.xml"/>
+ <xi:include href="config.xml"/>
+ <xi:include href="using.xml"/>
+ </chapter>
+
+ <chapter id="backends">
+ <title>Backend-specific information</title>
+ <xi:include href="boinc.xml"/>
+ <xi:include href="condor.xml"/>
+ <xi:include href="local.xml"/>
+ </chapter>
+
+ <chapter id="reference">
+ <title>Reference</title>
+ <xi:include href="xml/dc_common.xml"/>
+ <xi:include href="xml/dc_client.xml"/>
+ <xi:include href="xml/dc.xml"/>
+ </chapter>
+</book>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/doc/dc-api-overrides.txt b/dcapi/doc/dc-api-overrides.txt
new file mode 100644
index 0000000..e69de29
diff --git a/dcapi/doc/dc-api-sections.txt b/dcapi/doc/dc-api-sections.txt
new file mode 100644
index 0000000..0565e4a
--- /dev/null
+++ b/dcapi/doc/dc-api-sections.txt
@@ -0,0 +1,108 @@
+<SECTION>
+<TITLE>common</TITLE>
+<FILE>dc_common</FILE>
+<INCLUDE>dc_common.h</INCLUDE>
+
+DC_ErrorCode
+DC_GridCapabilities
+DC_FileMode
+DC_CONFIG_FILE
+DC_LABEL_STDOUT
+DC_LABEL_STDERR
+DC_LABEL_CLIENTLOG
+DC_PhysicalFile
+DC_RemoteFile
+DC_getCfgStr
+DC_getCfgInt
+DC_getCfgBool
+DC_log
+DC_vlog
+
+<SUBSECTION>
+DC_getMaxMessageSize
+DC_getMaxSubresults
+DC_getGridCapabilities
+</SECTION>
+
+<SECTION>
+<TITLE>client</TITLE>
+<FILE>dc_client</FILE>
+<INCLUDE>dc_client.h</INCLUDE>
+
+DC_FileType
+DC_CHECKPOINT_FILE
+DC_ClientEventType
+DC_ClientEvent
+
+<SUBSECTION>
+DC_initClient
+DC_resolveFileName
+DC_sendResult
+DC_sendMessage
+DC_checkClientEvent
+DC_destroyClientEvent
+DC_checkpointMade
+DC_fractionDone
+DC_finishClient
+</SECTION>
+
+<SECTION>
+<TITLE>master</TITLE>
+<FILE>dc</FILE>
+<INCLUDE>dc.h</INCLUDE>
+
+DC_WUState
+DC_MasterEventType
+DC_Workunit
+DC_Result
+DC_MasterEvent
+DC_ResultCallback
+DC_SubresultCallback
+DC_MessageCallback
+
+<SUBSECTION>
+DC_initMaster
+DC_setMasterCb
+DC_setMessageCb
+DC_setResultCb
+DC_setSubresultCb
+
+<SUBSECTION>
+DC_processMasterEvents
+DC_waitMasterEvent
+DC_waitWUEvent
+DC_destroyMasterEvent
+
+<SUBSECTION>
+DC_getWUNumber
+DC_createWU
+DC_addWUInput
+DC_addWUOutput
+DC_setWUPriority
+DC_setWUBatch
+DC_serializeWU
+DC_deserializeWU
+DC_getWUState
+DC_submitWU
+DC_getWUId
+DC_getWUTag
+DC_cancelWU
+DC_suspendWU
+DC_resumeWU
+DC_destroyWU
+DC_sendWUMessage
+
+<SUBSECTION>
+DC_getClientCfgStr
+DC_getClientCfgInt
+DC_getClientCfgDouble
+DC_getClientCfgBool
+
+<SUBSECTION>
+DC_getResultCapabilities
+DC_getResultWU
+DC_getResultExit
+DC_getResultOutput
+DC_getResultCPUTime
+</SECTION>
+
diff --git a/dcapi/doc/intro.xml b/dcapi/doc/intro.xml
new file mode 100644
index 0000000..47acec8
--- /dev/null
+++ b/dcapi/doc/intro.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1>
+ <title>Introduction</title>
+
+ <para>
+ The DC-API was created by MTA SZTAKI to allow easy implementation and
+ deployment of distributed applications on multiple grid environments.
+ </para>
+ <para>
+ In order to accomodate the needs of very different grid environments, the
+ DC-API supports only a restricted master-worker programming model. The
+ restrictions include:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Master-worker concept: there is a designated
+ <emphasis>master</emphasis> process running somewhere on the grid
+ infrastructure. The master process can submit worker processes called
+ <emphasis>work units</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Every work unit is a sequential application.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ There is support for limited messaging between the master and the
+ running work units. It can be used to send status and control
+ messages, but it is not suitable for parallel programming.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ There can not be any direct communication between work units.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+</sect1>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/doc/local.xml b/dcapi/doc/local.xml
new file mode 100644
index 0000000..bed60ed
--- /dev/null
+++ b/dcapi/doc/local.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1 id="local">
+ <title>Standalone</title>
+
+ <sect2 id="local_app">
+ <title>Standalone application</title>
+
+ <para>
+ Standalone backend does not use any special execution environment to
+ execute client jobs. Clients are spawned as local processes so the
+ master and all workers are running as local processes on the same
+ host. The execution host must be a UNIX wokstation because this is
+ the only supported platform for this backend yet.
+ </para>
+
+ <sect3 id="local_name">
+ <title>Name of the standalone backend</title>
+
+ <para>The name of this backend is:</para>
+
+ <para><emphasis>local</emphasis></para>
+
+ <para>This name must be used to identify the backend when using the
+ library to <link linkend="build-unix">build
+ application</link>.</para>
+
+ </sect3>
+
+ <sect3 id="local_exec">
+ <title>Execution of clients</title>
+
+ <para> Call of <function><link
+ linkend="DC-submitWU">DC_submitWU()</link></function> in master
+ process spawns a new UNIX process using
+ <function>fork</function>/<function>exec</function> mechanism and
+ starts the executable of the client. Client changes its directory to
+ its own working directory which is prepared by the master for
+ it.</para>
+
+ <para>Event handling procedures of the master process
+ (<function><link
+ linkend="DC-waitWUEvent">DC_waitWUEvent()</link></function>,
+ <function><link
+ linkend="DC-processMasterEvents">DC_processMasterEvents()</link></function>,
+ etc.) check the operating system for the client's process and report
+ it as finished when it disapears.</para>
+
+ </sect3>
+
+ <sect3 id="local_messaging">
+ <title>Message passing</title>
+
+ <para>It is possible to send messages between the master and a
+ client (see <function><link
+ linkend="DC-sendMessage">DC_sendMessage()</link></function> and
+ <function><link
+ linkend="DC-sendResult">DC_sendResult()</link></function>
+ functions). Messages are passed as files. Message files are placed
+ in "message boxes", which are directories created in client's
+ working directory. Name of the message box directories can be
+ specified by configuration options (see <link
+ linkend="local_ClientMessageBox">ClientMessageBox</link>, and <link
+ linkend="local_MasterMessageBox">MasterMessageBox</link>), so they
+ will not interfere with client's own created files and
+ directories.</para>
+
+ <para>This backend maintains order of the messages so they will be
+ received in the same order as they were sent.</para>
+
+ </sect3>
+
+ </sect2>
+
+ <sect2 id="local_configuration">
+ <title>Configuration options</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>InstanceUUID</term>
+ <listitem>
+ <para>
+
+ REQUIRED. Identification of running instance of the
+ application. For Standalone backend it can be any string not
+ just an UUID.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>WorkingDirectory</term>
+ <listitem>
+ <para>
+
+ REQUIRED. Name of working directory of the
+ application. All files that are generated by the
+ application or the DC-API library are placed under this
+ directory. Different applications can use the same working
+ directory because every instance has its own subdirectory
+ there.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="local_ClientMessageBox">
+ <term>ClientMessageBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where messages are placed which are sent by the client to
+ the master by <function><link
+ linkend="DC-sendMessage">DC_sendMessage()</link></function>. Default
+ value is <filename>_dcapi_client_messages</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="local_MasterMessageBox">
+ <term>MasterMessageBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where <function><link
+ linkend="DC-sendWUMessage">DC_sendWUMessage()</link></function>
+ places messages sent by the master to the client. Default
+ value is <filename>_dcapi_master_messages</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>SubresultBox</term>
+ <listitem>
+ <para>
+
+ Name of the directory in workunit's working directory
+ where <function><link
+ linkend="DC-sendResult">DC_sendResult()</link></function>
+ places subresults generated by the client. Default
+ value is <filename>_dcapi_client_subresults</filename>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>Executable</term>
+ <listitem>
+ <para>
+
+ Name of the executable file of the client (workunit). By
+ default it is the <parameter>clientName</parameter>
+ parameter which was passed to <function><link
+ linkend="DC-createWU">DC_createWU()</link></function>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>LeaveFiles</term>
+ <listitem>
+ <para>
+
+ Specifies if files, directories generated in workunit's
+ working directory should be deleted or not after workunit
+ ends. Zero value means delete and non-zero value means not
+ to delete. Default value is 0.
+
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </sect2>
+</sect1>
+
+<!-- End of local.xml -->
diff --git a/dcapi/doc/states.fig b/dcapi/doc/states.fig
new file mode 100644
index 0000000..d46f2fe
--- /dev/null
+++ b/dcapi/doc/states.fig
@@ -0,0 +1,108 @@
+#FIG 3.2 Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 -1 3.000 0 1 1 0 1943.603 2825.830 765 1575 225 2835 2610 4410
+ 0 0 1.00 60.00 120.00
+5 1 0 1 0 7 50 -1 -1 3.000 0 1 1 0 4962.663 2326.311 5625 4275 7020 2385 5985 540
+ 0 0 1.00 60.00 120.00
+6 4410 4095 5625 4455
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 4410 4095 5625 4095 5625 4455 4410 4455 4410 4095
+4 0 0 50 -1 0 12 0.0000 4 135 855 4590 4342 FINISHED\001
+-6
+6 1800 405 2835 765
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 1800 405 2835 405 2835 765 1800 765 1800 405
+4 0 0 50 -1 0 12 0.0000 4 135 660 1987 652 READY\001
+-6
+6 585 2700 2070 3060
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 585 2700 2070 2700 2070 3060 585 3060 585 2700
+4 0 0 50 -1 0 12 0.0000 4 135 1095 780 2947 SUSPENDED\001
+-6
+6 765 1395 2115 1755
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 765 1395 2115 1395 2115 1755 765 1755 765 1395
+4 0 0 50 -1 0 12 0.0000 4 135 870 1005 1642 RUNNING\001
+-6
+6 2610 4230 3870 4590
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 2610 4230 3870 4230 3870 4590 2610 4590 2610 4230
+4 0 0 50 -1 0 12 0.0000 4 135 915 2782 4477 ABORTED\001
+-6
+6 4365 405 5985 765
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 4365 405 5985 405 5985 765 4365 765 4365 405
+4 0 0 50 -1 0 12 0.0000 4 165 1140 4605 637 NOT_EXISTS\001
+-6
+6 5265 2610 6660 2970
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 5265 2610 6660 2610 6660 2970 5265 2970 5265 2610
+4 0 0 50 -1 0 12 0.0000 4 135 990 5467 2857 UNKNOWN\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2340 765 1440 1395
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2115 1575 5175 765
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2070 2880 5220 765
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3285 4230 5220 765
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1305 3060 3285 4230
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2115 1575 5040 4095
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2115 1575 3285 4230
+2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2115 1575 5265 2790
+2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2070 2880 5265 2790
+2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 5040 4095 5895 2970
+2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3285 4230 5265 2790
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1305 1755 1305 2700
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1440 2700 1440 1755
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 4365 540 2835 540
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 2835 630 4365 630
+2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 5940 2610 5580 765
+4 0 0 50 -1 0 10 0.0000 4 150 750 495 2565 suspendWU\001
+4 0 0 50 -1 0 10 0.0000 4 105 705 1485 2565 resumeWU\001
+4 0 0 50 -1 0 10 0.0000 4 105 705 1170 1080 submitWU\001
+4 0 0 50 -1 0 10 0.0000 4 105 645 1665 4455 cancelWU\001
+4 0 0 50 -1 0 10 0.0000 4 135 735 3105 1125 destroyWU\001
+4 0 0 50 -1 0 10 0.0000 4 135 735 3555 1485 destroyWU\001
+4 0 0 50 -1 0 10 0.0000 4 135 735 4140 1710 destroyWU\001
+4 0 0 50 -1 0 10 0.0000 4 105 630 3285 495 createWU\001
+4 0 0 50 -1 0 10 0.0000 4 135 735 3285 765 destroyWU\001
+4 0 0 50 -1 0 10 0.0000 4 135 735 5445 1215 destroyWU\001
+4 0 0 50 -1 0 10 0.0000 4 135 735 6300 720 destroyWU\001
+4 0 0 50 -1 0 10 0.0000 4 105 645 1575 3735 cancelWU\001
diff --git a/dcapi/doc/tmpl/dc-unused.sgml b/dcapi/doc/tmpl/dc-unused.sgml
new file mode 100644
index 0000000..e69de29
diff --git a/dcapi/doc/tmpl/dc.sgml b/dcapi/doc/tmpl/dc.sgml
new file mode 100644
index 0000000..153b4ce
--- /dev/null
+++ b/dcapi/doc/tmpl/dc.sgml
@@ -0,0 +1,608 @@
+<!-- ##### SECTION Title ##### -->
+Master
+
+<!-- ##### SECTION Short_Description ##### -->
+functionality specific to the master-side of DC-API.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+ This section describes the functions and definitions available for DC-API
+ master applications.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM DC_WUState ##### -->
+<para>
+State of work units.
+</para>
+
+ at DC_WU_READY: ready for submission.
+ at DC_WU_RUNNING: submitted to the grid infrastructure. Note that this does not
+ mean that the work unit is really running as it might be queued etc.
+ at DC_WU_FINISHED: the work unit has completed successfuly.
+ at DC_WU_SUSPENDED: the work unit is suspended.
+ at DC_WU_ABORTED: the work unit has aborted either due to an error or due to the
+ user calling DC_cancelWU().
+ at DC_WU_UNKNOWN: DC-API is not able to determine the state of the work unit.
+
+<!-- ##### ENUM DC_MasterEventType ##### -->
+<para>
+Types of events the master application may receive.
+</para>
+
+ at DC_MASTER_RESULT: a new #DC_Result is available.
+ at DC_MASTER_SUBRESULT: a subresult has arrived.
+ at DC_MASTER_MESSAGE: a message has arrived.
+
+<!-- ##### STRUCT DC_Workunit ##### -->
+<para>
+Opaque type representing a work unit. A work unit consists of an executable
+client application together with its command-line parameters and input
+files.
+</para>
+
+
+<!-- ##### STRUCT DC_Result ##### -->
+<para>
+Opaque type representing the result of a successfully completed work unit.
+The result structure contains the output files the work unit produced as
+well as (optionally, depending on the infrastructure) its exit code, standard
+output and error, and any log file created by the grid infrastructure.
+</para>
+
+
+<!-- ##### STRUCT DC_MasterEvent ##### -->
+<para>
+Describes an event received by the master application.
+</para>
+
+ at type: the type of the event.
+ at wu: the work unit that generated the event.
+ at result: the received #DC_Result if @type is %DC_MASTER_RESULT.
+ at subresult: the received subresult if @type is %DC_MASTER_SUBRESULT.
+ at message: the received message if @type is %DC_MASTER_MESSAGE.
+
+<!-- ##### USER_FUNCTION DC_ResultCallback ##### -->
+<para>
+Prototype of the callback function used for reporting results.
+</para>
+
+ at wu: the work unit this result belongs to.
+ at result: the received result.
+
+
+<!-- ##### USER_FUNCTION DC_SubresultCallback ##### -->
+<para>
+Prototype of the callback function used for reporting subresults. Note that
+if the infrastructure supports redundant computation, subresults may arrive
+from all running instances, even if they will be later marked as invalid.
+</para>
+
+ at wu: the work unit this subresult belongs to.
+ at logicalFileName: logical name of the received file, if specified by the
+ client.
+ at path: the real path name of the received file.
+
+
+<!-- ##### USER_FUNCTION DC_MessageCallback ##### -->
+<para>
+Prototype of the callback function used for reporting messages. Note that
+if the infrastructure supports redundant computation, the master will receive
+messages from all running client instances, even if they will be later marked
+as invalid.
+</para>
+
+ at wu: the work unit the message is for.
+ at message: contents of the message.
+
+
+<!-- ##### FUNCTION DC_initMaster ##### -->
+<para>
+Initializes the master side of the DC-API. This function must be called first
+before calling any other DC-API functions.
+</para>
+
+ at configFile: name of the configuration file to use. %NULL means use
+ %DC_CONFIG_FILE.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_setMasterCb ##### -->
+<para>
+Sets the callback functions to be used for event reporting. One or more of the
+callbacks may be %NULL if the master does not wish to receive the specific
+event.
+</para>
+<para>
+This function is deprecated, use the separate DC_setMessageCb(), DC_setResultCb()
+and DC_setSubresultCb() functions instead.
+</para>
+
+ at resultcb: the callback to be used to report results.
+ at subresultcb: the callback to be used to report subresults.
+ at msgcb: the callback for reporting messages.
+
+
+<!-- ##### FUNCTION DC_setMessageCb ##### -->
+<para>
+Sets the callback function that will be called when the master receives a
+new message from one of the running workunits.
+</para>
+
+ at cb: the callback to be used to report messages.
+
+
+<!-- ##### FUNCTION DC_setResultCb ##### -->
+<para>
+Sets the callback function that will be called when a workunit finishes.
+</para>
+
+ at cb: the callback to be used to report results.
+
+
+<!-- ##### FUNCTION DC_setSubresultCb ##### -->
+<para>
+Sets the callback function that will be called when a subresult becomes available.
+</para>
+
+ at cb: the callback to be used to report subresults.
+
+
+<!-- ##### FUNCTION DC_processMasterEvents ##### -->
+<para>
+Processes work unit events. In case of a work unit completes and its result is
+available, or if a message or a subresult has arrived, the appropriate callback
+functions will be called.
+</para>
+<para>
+The received event will be automatically destroyed when the callback function
+returns (including the deletion of files if the event was a result or
+subresult). If the master application wants to access any information belonging
+to the event (e.g. the output files the client created), then the callback
+function must explicitely make a copy of any data it is interested in. In case
+of physical files (i.e., results and subresults), the callback is allowed to
+simply rename the files therefore preventing DC-API from deleting them.
+</para>
+
+ at timeout: time to wait (in seconds) for an event to arrive. 0 means do not wait
+ if there are no events to process.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_waitMasterEvent ##### -->
+<para>
+ Checks for events and returns them directly. This function does not invoke any
+ event-processing callbacks.
+ <note>
+ <para>
+ Contrary to DC_processMasterEvents(), the application is responsible for
+ destroying the returned event when it is no longer needed.
+ </para>
+ </note>
+</para>
+
+ at wuFilter: if not %NULL, only work units having a tag that matches @wuFilter
+ will be checked for events.
+ at timeout: time to wait (in seconds) for an event to arrive. 0 means do not wait
+ if there are no events to process.
+ at Returns: an event if one is available or %NULL if a timeout has occured. The
+ returned event must be destroyed using DC_destroyMasterEvent() when it is
+ no longer needed.
+
+
+<!-- ##### FUNCTION DC_waitWUEvent ##### -->
+<para>
+ Checks for events for a particular work unit. This function does not invoke any
+ event-processing callbacks.
+ <note>
+ <para>
+ Contrary to DC_processMasterEvents(), the application is responsible for
+ destroying the returned event when it is no longer needed.
+ </para>
+ </note>
+</para>
+
+ at wu: the work unit that should be watched for events.
+ at timeout: time to wait (in seconds) for an event to arrive. 0 means do not wait
+ if there are no events to process.
+ at Returns: an event if one is available or %NULL if a timeout has occured. The
+ returned event must be destroyed using DC_destroyMasterEvent() when it is
+ no longer needed.
+
+
+<!-- ##### FUNCTION DC_destroyMasterEvent ##### -->
+<para>
+Destroys a #DC_MasterEvent obtained by calling DC_waitMasterEvent() or DC_waitWUEvent().
+</para>
+
+ at event: the #DC_MasterEvent to destroy.
+
+
+<!-- ##### FUNCTION DC_getWUNumber ##### -->
+<para>
+Returns the number of existing work units having the specified state.
+</para>
+
+ at state: the state to query.
+ at Returns: the number of work units in state @state or -1 if @state is invalid.
+
+
+<!-- ##### FUNCTION DC_createWU ##### -->
+<para>
+Creates a new work unit. The work unit is not known to the underlying grid
+infrastructure until DC_submitWU() is called. The returned work unit is in
+the %DC_WU_READY state.
+</para>
+
+ at clientName: logical name of the client application. Mapping this name to an
+ real binary executable depends on the DC-API backend in use.
+ at arguments: %NULL-terminated list of command line arguments.
+ at subresults: number of subresults the client will be allowed to generate.
+ Specify 0 if the client will not send back any subresults.
+ at tag: arbitrary string to attach to this work unit. The value of this
+ string is not used by the DC-API itself, it is free for the application
+ writer to make use of it.
+ at Returns: a #DC_Workunit if successful or %NULL if there was not enough memory
+ to allocate the structure.
+
+
+<!-- ##### FUNCTION DC_addWUInput ##### -->
+<para>
+Adds an input file to a work unit. This function may be called only for work
+units in state %DC_WU_READY (i.e., before the work unit is submitted).
+</para>
+
+ at wu: the work unit to add the input file to.
+ at logicalFileName: the logical file name the client will use to refer to this
+ input file. The client should call the DC_resolveFileName() function
+ with the %DC_FILE_IN file type and this name to get the real name of
+ the file on the local system.
+ at URL: URL of the input file. May also be a local path on the master's
+ file system.
+ at fileMode: usage mode of the file. Passing %DC_FILE_PERSISTENT or
+ %DC_FILE_VOLATILE allows DC-API to optimize the disk space
+ requirements of the application.
+ at Varargs: in case using %DC_FILE_REMOTE file mode, the MD5 hash string (char *)
+ and file size information (size_t) have to be passed.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_addWUOutput ##### -->
+<para>
+Adds an output file specification to a work unit. Files registered using this
+function will be transferred back to the master when the client finishes. This
+function may be called only for work units in state %DC_WU_READY (i.e., before
+the work unit is submitted).
+</para>
+
+ at wu: the work unit to add the output file definition to.
+ at logicalFileName: the logical file name the client will use to refer to this
+ output file. The client should call the DC_resolveFileName() function
+ with the %DC_FILE_OUT file type and this name to get the real name of
+ the file on the local system.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_setWUPriority ##### -->
+<para>
+Sets the priority of a work unit. Depending on the underlying grid
+infrastructure, this function may be called only for work units in state
+%DC_WU_READY (i.e., before the work unit is submitted). The priority
+value may be in the range 1-100, higher number meaning more important
+work unit. The default priority is 50. Note that not all infrastructures
+support priorities and the number of supported levels may be fewer than 100.
+</para>
+
+ at wu: the work unit.
+ at priority: the priority of the work unit.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_setWUBatch ##### -->
+<para>
+Sets the batch identifier of a work unit. Batch identifier reflects the
+corresponding workunits. Workunits with the same batch identifier belongs
+to the same group of workunits. Depending on the underlying grid
+infrastructure, this function may be called only for work units in state
+%DC_WU_READY (i.e., before the work unit is submitted). The batch value
+may be in the range of an integer. The default batch is 0. Note that not
+all infrastructures support batch handling.
+</para>
+
+ at wu: the work unit.
+ at batch: the batch identifier of the work unit.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_serializeWU ##### -->
+<para>
+Serializes a #DC_Workunit structure. The returned string may be stored on
+persistent storage and can be used to re-create the work unit description
+in a different process. The format of the returned string is not specified,
+the only guarantee DC-API gives is that it will not contain newline
+characters.
+</para>
+
+ at wu: the work unit to serialize.
+ at Returns: a string that can be passed to DC_deserializeWU() to restore the
+ work unit. %NULL is returned if the serialization fails. The returned
+ string should be de-allocated using free() when it is no longer needed.
+
+
+<!-- ##### FUNCTION DC_deserializeWU ##### -->
+<para>
+Restores a serialized work unit. May be called from a different process than
+the work unit was serialized in.
+</para>
+
+ at buf: a string obtained by calling DC_serializeWU() previously.
+ at Returns: a #DC_Workunit or %NULL if the de-serialization has failed.
+
+
+<!-- ##### FUNCTION DC_getWUState ##### -->
+<para>
+Queries the state of a work unit.
+</para>
+
+ at wu: the work unit to examine.
+ at Returns: the state of the work unit.
+
+
+<!-- ##### FUNCTION DC_submitWU ##### -->
+<para>
+Submits a work unit to the grid infrastructure. It is up to the infrastructure
+when the work unit actually begins execution.
+</para>
+
+ at wu: a #DC_Workunit.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_getWUId ##### -->
+<para>
+Returns the infrastructure-specific low-level ID of the work unit. This
+identifier should appear in infrastructure-level log files and can be
+used to track the job if a problem with the grid infrastructure is suspected.
+</para>
+
+ at wu: a #DC_Workunit.
+ at Returns: the infrastructure-specific identifier. %NULL is returned if the
+ work unit is not known to the infrastructure (i.e., it has not been
+ submitted yet or it has already completed or aborted). The returned
+ value should be deallocated using free() when it is no longer needed.
+
+
+<!-- ##### FUNCTION DC_getWUTag ##### -->
+<para>
+Returns the user-specified tag of a work unit.
+</para>
+
+ at wu: a #DC_Workunit.
+ at Returns: the tag that was given to DC_createWU(). The returned value should be
+ deallocated using free() when it is no longer needed.
+
+
+<!-- ##### FUNCTION DC_cancelWU ##### -->
+<para>
+ Cancels all computation for a given work unit.
+ <note>
+ <para>
+ Depending on the infrastructure and the client implementation, it may take
+ a long time till all running clients are really stopped.
+ </para>
+ </note>
+</para>
+
+ at wu: a #DC_Workunit to cancel.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_suspendWU ##### -->
+<para>
+ Suspends the execution of a work unit. If the client is running, it is
+ instructed to perform a checkpoint; the checkpoint image is then transferred
+ back to the master so it can be restarted later using DC_resumeWU().
+ <note>
+ <para>
+ Explicit support is required from both the grid infrastructure and from
+ the client application implementation in order suspend to work.
+ </para>
+ </note>
+ <note>
+ <para>
+ Suspend is not compatible with redundant computing. If the infrastructure
+ supports redundant computing, you must disable it if you want to use
+ suspend. Suspending a work unit when redundant computation is enabled can
+ have undefined effects, including silent corruption of the result.
+ </para>
+ </note>
+</para>
+
+ at wu: the #DC_Workunit to suspend.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_resumeWU ##### -->
+<para>
+Resumes the computation of a work unit that was previously suspended using
+DC_suspendWU().
+</para>
+
+ at wu: the #DC_Workunit to resume.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_destroyWU ##### -->
+<para>
+Destroys a work unit. All input and output files belonging to the work unit
+will be deleted, and any internal resources allocated to the work unit will be
+de-allocated. If the work unit is still running, it will be cancelled.
+</para>
+
+ at wu: the #DC_Workunit to destroy.
+
+
+<!-- ##### FUNCTION DC_sendWUMessage ##### -->
+<para>
+ Sends a message to a running work unit. The message is sent asynchronously
+ and this function does not wait for the message to be delivered. Delivery of
+ the message will happen only when the client explicitely checks for it which
+ can take an arbitrary long time, depending on the infrastructure and on the
+ client implementation. The maximum allowed length of messages can be
+ determined with the DC_getMaxMessageSize() function.
+ <note>
+ <para>
+ If redundant computing is in effect, the same message is sent to all
+ currently running client instances.
+ </para>
+ </note>
+ <note>
+ <para>
+ The message may be lost if the client is not running but it queued by the
+ infrastructure's scheduler.
+ </para>
+ </note>
+</para>
+
+ at wu: the target #DC_Workunit.
+ at message: the message to send.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_getClientCfgStr ##### -->
+<para>
+Returns the value belonging to the specified key @key for the specific client
+application @clientName in the configuration file.
+</para>
+
+ at clientName: the name of the client application.
+ at key: the key to look up.
+ at fallbackGlobal: if %TRUE and the key is not defined in the client configuration,
+ it will be looked up in the master configuration as well.
+ at Returns: the value belonging to the key or %NULL if it is not defined in the
+ config file. The returned value must be deallocated using free() when it is
+ no longer needed.
+
+
+<!-- ##### FUNCTION DC_getClientCfgInt ##### -->
+<para>
+Returns the integer value belonging to the specified key @key for the
+specific client application @clientName in the configuration
+file. Unit suffixes like 'KB', 'GB' or 'hour' are also allowed.
+</para>
+
+ at clientName: the name of the client application.
+ at key: the key to look up.
+ at defaultValue: the default value to return if the key is not defined or its value
+ cannot be interpreted as a number.
+ at fallbackGlobal: if %TRUE and the key is not defined in the client configuration,
+ it will be looked up in the master configuration as well.
+ at Returns: the value belonging to the key or @defaultValue if it is not defined in the
+ config file.
+
+
+<!-- ##### FUNCTION DC_getClientCfgDouble ##### -->
+<para>
+Returns the double precision floating point value belonging to the specified
+key @key for the specific client application @clientName in the configuration
+file. Unit suffixes like 'KB', 'GB' or 'hour' are also allowed.
+</para>
+
+ at clientName: the name of the client application.
+ at key: the key to look up.
+ at defaultValue: the default value to return if the key is not defined or its value
+ cannot be interpreted as a number.
+ at fallbackGlobal: if %TRUE and the key is not defined in the client configuration,
+ it will be looked up in the master configuration as well.
+ at Returns: the value belonging to the key or @defaultValue if it is not defined in the
+ config file.
+
+
+<!-- ##### FUNCTION DC_getClientCfgBool ##### -->
+<para>
+Returns the boolean value belonging to the specified key @key for the specific
+client application @clientName in the configuration file.
+</para>
+
+ at clientName: the name of the client application.
+ at key: the key to look up.
+ at defaultValue: the default value to return if the key is not defined or its value
+ cannot be interpreted as a boolean value.
+ at fallbackGlobal: if %TRUE and the key is not defined in the client configuration,
+ it will be looked up in the master configuration as well.
+ at Returns: the value belonging to the key or @defaultValue if it is not defined in the
+ config file.
+
+
+<!-- ##### FUNCTION DC_getResultCapabilities ##### -->
+<para>
+Determines what kind of information is present in the received result.
+</para>
+
+ at result: a #DC_Result.
+ at Returns: zero or more of %DC_GC_EXITCODE, %DC_GC_STDOUT, %DC_GC_STDERR and
+ %DC_GC_LOG OR'ed together.
+
+
+<!-- ##### FUNCTION DC_getResultWU ##### -->
+<para>
+Returns the work unit that generated this result.
+</para>
+
+ at result: a #DC_Result.
+ at Returns: the work unit that generated this result, or %NULL if it cannot be
+ determined.
+
+
+<!-- ##### FUNCTION DC_getResultExit ##### -->
+<para>
+Returns the exit code of the client application.
+</para>
+
+ at result: a #DC_Result.
+ at Returns: the client's exit code (the value it passed to DC_finishClient()). If
+ the %DC_GC_EXITCODE capability is not set for this result, then 0 is
+ returned.
+
+
+<!-- ##### FUNCTION DC_getResultOutput ##### -->
+<para>
+Returns the real path name for a logical output file name.
+</para>
+
+ at result: a #DC_Result.
+ at logicalFileName: the logical file name used by the client when creating the
+ output file. The special constants %DC_LABEL_STDOUT, %DC_LABEL_STDERR
+ and %DC_LABEL_CLIENTLOG are also recognized for returning the client's
+ standard output, error and infrastructure-generated log file,
+ repsectively.
+ at Returns: the real path name of the logical file or %NULL if the client did
+ not send back a file with the requrested logical name. The returned
+ string should be deallocated using free() when it is no longer needed.
+
+
+<!-- ##### FUNCTION DC_getResultCPUTime ##### -->
+<para>
+ Returns the CPU time used for computing the result, in seconds.
+ <note>
+ <para>
+ If redundant computing is enabled, only the CPU time of the canonical
+ result is returned.
+ </para>
+ </note>
+</para>
+
+ at result: a #DC_Result.
+ at Returns: the CPU time needed to compute the result.
+
+
diff --git a/dcapi/doc/tmpl/dc_client.sgml b/dcapi/doc/tmpl/dc_client.sgml
new file mode 100644
index 0000000..a58a005
--- /dev/null
+++ b/dcapi/doc/tmpl/dc_client.sgml
@@ -0,0 +1,238 @@
+<!-- ##### SECTION Title ##### -->
+Client
+
+<!-- ##### SECTION Short_Description ##### -->
+functionality specific to the client-side of DC-API.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+This section describes the functions and definitions available for DC-API
+applications on the client side.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM DC_FileType ##### -->
+<para>
+File types for the DC_resolveFileName() function. Some grid infrastructures
+use different locations for storing files of different usage, therefore DC-API
+needs to know the expected usage of logical files to be able to determine the
+correct physical location.
+</para>
+
+ at DC_FILE_IN: the file is an input file.
+ at DC_FILE_OUT: the file is an output file.
+ at DC_FILE_TMP: the file is a temporary file that will not sent back to the master.
+
+<!-- ##### MACRO DC_CHECKPOINT_FILE ##### -->
+<para>
+Logical name of the application-level checkpoint file. See DC_resolveFileName()
+for details about checkpoint file usage.
+</para>
+
+
+
+<!-- ##### ENUM DC_ClientEventType ##### -->
+<para>
+ClientEvent types that can be received.
+</para>
+
+ at DC_CLIENT_CHECKPOINT: a checkpoint should be made. The application must call
+ DC_checkpointMade() to acknowledge the request even if it does not
+ support checkpointing (it should pass a %NULL pointer as the file name
+ in this case).
+ at DC_CLIENT_FINISH: the computation should be aborted.
+ at DC_CLIENT_MESSAGE: a message has arrived.
+
+<!-- ##### STRUCT DC_ClientEvent ##### -->
+<para>
+ClientEvent received from the master.
+</para>
+
+ at type: type of the event.
+ at message: contents of the message if @type is %DC_CLIENT_MESSAGE.
+
+<!-- ##### FUNCTION DC_initClient ##### -->
+<para>
+Initializes the client API. This function must be called first before calling
+any other DC-API functions.
+</para>
+
+ at void:
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_resolveFileName ##### -->
+<para>
+ Resolves the local name of input/output files. The real name (and path) of an
+ input/output file may be different from what the client expects. This
+ function performs the translation from the logical names used by the client
+ to the real names used by the infrastructure.
+ <note>
+ <para>
+ The client must not assume that it can read/write/create any files other
+ than the names returned by this function.
+ </para>
+ </note>
+</para>
+
+<para>
+The handling of application-level checkpoint files is special. The intention is
+to never modify an already completed checkpoint file, so even if the client
+is interrupted in the middle of writing to the checkpoint file, the previous
+checkpoint is still intact and can be used to resume computation.
+</para>
+
+<para>
+When @logicalFileName is %DC_CHECKPOINT_FILE, @type is interpreted as follows:
+ <itemizedlist>
+ <listitem>
+ <para>
+ If @type is %DC_FILE_IN, then the path name of the last completed
+ checkpoint file (as indicated by the client by calling
+ DC_checkpointMade() previously) is returned. The client must not modify
+ this file in any way. If the client did not create any checkpoints so
+ far but it was resumed from a previous checkpoint, then the path name
+ of the original checkpoint file is returned. If there are no previous
+ checkpoints at all, %NULL is returned.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If @type is %DC_FILE_OUT, then a name for a new non-existant checkpoint
+ file is returned. The client should write the checkpoint information to
+ this file and should call DC_checkpointMade() with this file name to
+ indicate that the checkpoint is complete. After calling
+ DC_checkpointMade(), the client is not allowed to modify the checkpoint
+ file in any way, and must call DC_resolveFileName() again to obtain a
+ new name for a new checkpoint file.
+ </para>
+ </listitem>
+ </itemizedlist>
+</para>
+
+<para>
+When @logicalFileName is not %DC_CHECKPOINT_FILE, the following rules apply:
+<itemizedlist>
+ <listitem>
+ <para>
+ If @type is %DC_FILE_IN, then @logicalFileName must be one of the
+ names the master registered using DC_addWUInput() when the work
+ unit was created.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If @type is %DC_FILE_OUT, then @logicalFileName must be one of
+ the names the master registered using DC_addWUOutput() when the
+ work unit was created.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ If @type is %DC_FILE_TMP, then @logicalFileName must not match
+ any registered input or output logical names.
+ </para>
+ </listitem>
+</itemizedlist>
+</para>
+
+ at type: the tpe of the file.
+ at logicalFileName: the logical name of the file used by the client.
+ at Returns: the real path name of the file. The value should be deallocated using
+ free() when it is no longer needed. %NULL is returned if @type is
+ invalid or @logicalFileName is not known to the infrastructure.
+
+
+<!-- ##### FUNCTION DC_sendResult ##### -->
+<para>
+Sends a sub-result file back to the master. The sending of the file may happen
+asynchronously, in this case this function will not wait for the transfer to
+finish (or even to start).
+</para>
+
+ at logicalFileName: the logical name of the file to send. This identifier will be
+ received by the master.
+ at path: the local path name of the file to send.
+ at fileMode: tells how the file should be handled.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_sendMessage ##### -->
+<para>
+Sends a message to the master. The sending of the message may happen
+asynchronously, in this case this function will not wait for the transfer to
+finish (or even to start). The maximum length of a message that may be sent
+using this function can be determined by calling DC_getMaxMessageSize().
+</para>
+
+ at message: the message to send.
+ at Returns: 0 if successful or a #DC_ErrorCode.
+
+
+<!-- ##### FUNCTION DC_checkClientEvent ##### -->
+<para>
+Checks for client control events. The returned event should be destroyed using
+DC_destroyClientEvent() when it is no longer needed. If the returned event is
+%DC_CLIENT_CHECKPOINT but the client does not support checkpointing, it should
+still call the DC_checkpointMade() function with a %NULL argument to inform the
+grid infrastructure that no checkpoint will be delivered.
+</para>
+
+ at void:
+ at Returns: a #DC_ClientEvent or %NULL if there are no outstanding events.
+
+
+<!-- ##### FUNCTION DC_destroyClientEvent ##### -->
+<para>
+Destroys an event returned by DC_checkClientEvent().
+</para>
+
+ at event: the event to destroy.
+
+
+<!-- ##### FUNCTION DC_checkpointMade ##### -->
+<para>
+Informs the DC-API that an application-level checkpoint has been made.
+See the DC_resolveFileName() for a description of checkpoint file handling.
+</para>
+
+ at fileName: the name of the checkpoint file. This should be a value
+ returned by DC_resolveFileName(%DC_FILE_OUT, %DC_CHECKPOINT_FILE).
+ The checkpoint file must not be modified after this
+ function has been called. @fileName can also be %NULL meaning that
+ the application does not in fact support checkpointing, but just
+ acknowledges a %DC_CLIENT_CHECKPOINT event.
+
+
+<!-- ##### FUNCTION DC_fractionDone ##### -->
+<para>
+Informs the controlling environment about the fraction of the work already
+done. Ideally this should be the CPU time used so far divided by the total CPU
+time that will be needed for the computation.
+</para>
+
+ at fraction: the fraction of the work completed.
+
+
+<!-- ##### FUNCTION DC_finishClient ##### -->
+<para>
+Finishes computation. Tells the DC-API to finish this work unit and start a
+new one. All output files are transferred to the master and the master is
+notified about the completion of the work unit.
+</para>
+
+ at exitcode: the return code of the process that will be reported back to the
+ master. 0 means success; any other value tells the grid infrastructure
+ that the work unit has failed.
+
+
diff --git a/dcapi/doc/tmpl/dc_common.sgml b/dcapi/doc/tmpl/dc_common.sgml
new file mode 100644
index 0000000..2303244
--- /dev/null
+++ b/dcapi/doc/tmpl/dc_common.sgml
@@ -0,0 +1,207 @@
+<!-- ##### SECTION Title ##### -->
+Common
+
+<!-- ##### SECTION Short_Description ##### -->
+functionality available on both the client and master side.
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+The functions and definitions described below are available at both the
+client and master side of DC-API in the same form, but may have a
+slightly different meaning.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### ENUM DC_ErrorCode ##### -->
+<para>
+Error codes returned by DC-API functions.
+</para>
+
+ at DC_OK: no error.
+ at DC_ERR_CONFIG: configuration error (syntax error, illegal or missing values).
+ at DC_ERR_DATABASE: database error.
+ at DC_ERR_NOTIMPL: the function is not implemented.
+ at DC_ERR_UNKNOWN_WU: the work unit is not known to DC-API.
+ at DC_ERR_TIMEOUT: the operation timed out.
+ at DC_ERR_BADPARAM: the function was passed illegal parameters.
+ at DC_ERR_SYSTEM: a system call has failed, check errno for the reason.
+ at DC_ERR_INTERNAL: an internal error occured in DC-API.
+
+<!-- ##### ENUM DC_GridCapabilities ##### -->
+<para>
+These flags define the capabilities of the underlying grid system.
+</para>
+
+ at DC_GC_EXITCODE: the client's exit code is propagated to the master.
+ at DC_GC_STDOUT: the client's standard output is sent back to the master.
+ at DC_GC_STDERR: the client's standard error is sent back to the master.
+ at DC_GC_LOG: infrastructure-specific log files are available.
+ at DC_GC_SUSPEND: suspending of work units is supported.
+ at DC_GC_SUBRESULT: subresults are supported.
+ at DC_GC_MESSAGING: message sending is supported.
+
+<!-- ##### ENUM DC_FileMode ##### -->
+<para>
+Tells how should DC-API treat physical files passed to it.
+</para>
+
+ at DC_FILE_REGULAR: the application wishes to continue using the file, so DC-API
+ must make an internal copy of it.
+ at DC_FILE_PERSISTENT: the application guarantees that the file will not change
+ and will not be deleted during the lifetime of the application. This
+ lets DC-API use symbolic or hard links instead of copying to save space.
+ at DC_FILE_VOLATILE: the application does not want to use the file in any way in
+ the future. DC-API will remove the file when it is no longer needed.
+ at DC_FILE_REMOTE: the application uses a remote file not physically present.
+
+<!-- ##### MACRO DC_CONFIG_FILE ##### -->
+<para>
+Default name of the DC-API configuration file.
+</para>
+
+
+
+<!-- ##### MACRO DC_LABEL_STDOUT ##### -->
+<para>
+Logical name of the client's standard output used with DC_getResultOutput().
+</para>
+
+
+
+<!-- ##### MACRO DC_LABEL_STDERR ##### -->
+<para>
+Logical name of the client's standard error used with DC_getResultOutput().
+</para>
+
+
+
+<!-- ##### MACRO DC_LABEL_CLIENTLOG ##### -->
+<para>
+Logical name of the client's ifrastructure log used with DC_getResultOutput().
+</para>
+
+
+
+<!-- ##### STRUCT DC_PhysicalFile ##### -->
+<para>
+Describes a physical file.
+</para>
+
+ at label: logical name of the file as used by the application.
+ at path: the real path name of the file.
+ at mode: usage mode of the file.
+ at physicalfilename: filename to be used in case of Attic files.
+ at physicalfilehash: MD5 hash and size information of Attic files.
+
+<!-- ##### STRUCT DC_RemoteFile ##### -->
+<para>
+Describes a physical file.
+</para>
+
+ at label: logical name of the file as used by the application.
+ at url: the URL of the file.
+ at remotefilehash: the MD5 hash of the file.
+ at remotefilesize: the size of the file.
+
+<!-- ##### FUNCTION DC_getCfgStr ##### -->
+<para>
+Returns the value belonging to the specified key @name in the configuration file.
+</para>
+
+ at name: the key to look up.
+ at Returns: the value belonging to the key or %NULL if it is not defined in the
+ config file. The returned value must be deallocated using free() when it is
+ no longer needed.
+
+
+<!-- ##### FUNCTION DC_getCfgInt ##### -->
+<para>
+Returns the integer value belonging to the specified key @name in the configuration
+file. Unit suffixes like 'KB', 'GB' or 'hour' are also allowed.
+</para>
+
+ at name: the key to look up.
+ at defaultValue: the default value to return if the key is not defined or its value
+ cannot be interpreted as a number.
+ at Returns: the value belonging to the key or @defaultValue if it is not defined in the
+ config file.
+
+
+<!-- ##### FUNCTION DC_getCfgBool ##### -->
+<para>
+Returns the boolean value belonging to the specified key @name in the configuration
+file.
+</para>
+
+ at name: the key to look up.
+ at defaultValue: the default value to return if the key is not defined or its value
+ cannot be interpreted as a boolean value.
+ at Returns: the value belonging to the key or @defaultValue if it is not defined in the
+ config file.
+
+
+<!-- ##### FUNCTION DC_log ##### -->
+<para>
+Emits a message to the master's log file.
+</para>
+
+ at level: the severity of the. The level codes defined for the system's syslog()
+ function should be used.
+ at fmt: format of the message, as per printf().
+ at Varargs: any extra arguments required by @fmt.
+
+
+<!-- ##### FUNCTION DC_vlog ##### -->
+<para>
+Emits a message to the master's log file.
+</para>
+
+ at level: the severity of the. The level codes defined for the system's syslog()
+ function should be used.
+ at fmt: format of the message, as per printf().
+ at args: any extra arguments required by @fmt.
+
+
+<!-- ##### FUNCTION DC_getMaxMessageSize ##### -->
+<para>
+Returns the maximum length of a message that DC_sendMessage() (client side) and
+DC_sendWUMessage() (master side) accepts.
+</para>
+
+ at void:
+ at Returns: the maximum allowed message size.
+
+
+<!-- ##### FUNCTION DC_getMaxSubresults ##### -->
+<para>
+On the master side, returns the maximum number of sub-result files that can be
+specified when creating a new work unit.
+</para>
+<para>
+On the client side, returns the number of sub-results the client is still
+allowed to send.
+</para>
+
+ at void:
+ at Returns: the number of sub-results allowed.
+
+
+<!-- ##### FUNCTION DC_getGridCapabilities ##### -->
+<para>
+Determines the capabilities of the underlying grid infrastructure.
+</para>
+
+ at void:
+ at Returns: the appropriate #DC_GridCapabilities constants OR'ed together.
+
+
diff --git a/dcapi/doc/using.xml b/dcapi/doc/using.xml
new file mode 100644
index 0000000..be69733
--- /dev/null
+++ b/dcapi/doc/using.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect1 id="using-for-applications">
+ <title>Using the library to build applications</title>
+
+ <sect2 id="build-unix">
+ <title>On UNIX platforms</title>
+
+ <para>
+ The DC-API library uses the <command>pkg-config</command> system to help
+ the building of applications. For every backend, two
+ <command>pkg-config</command> modules are available:
+ <literal>dcapi-<replaceable><backend></replaceable>-client</literal>
+ for building client applications and
+ <literal>dcapi-<replaceable><backend></replaceable>-master</literal>
+ for building master applications.
+ </para>
+
+ <para>
+ During compilation, the <command>pkg-config --cflags
+ <replaceable><module></replaceable></command> command gives the
+ list of compiler directives (like include file locations) that have to be
+ passed to the compiler whenever one of the DC-API headers is referenced in
+ a source file.
+ </para>
+
+ <para>
+ During linking, the <command>pkg-config --libs
+ <replaceable><module></replaceable></command> command will return
+ the list of libraries and linker options required to link the application
+ with DC-API.
+ </para>
+
+ <para>
+ If you have built DC-API from source and have installed it at a
+ non-standard location (i.e. not under <filename>/usr</filename> or
+ <filename>/usr/local</filename>), you may have to set the
+ <envar>PKG_CONFIG_PATH</envar> environment variable to point to the
+ directory where the <filename>.pc</filename> files are located in order
+ to <command>pkg-config</command> to find them.
+ </para>
+ </sect2>
+
+ <xi:include href="windows.xml" xmlns:xi="http://www.w3.org/2003/XInclude"/>
+
+</sect1>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/doc/windows.xml b/dcapi/doc/windows.xml
new file mode 100644
index 0000000..887a658
--- /dev/null
+++ b/dcapi/doc/windows.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0"?>
+<!DOCTYPE sect2 PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<sect2 id="build-windows">
+ <title>On Windows</title>
+
+ <sect3>
+ <title>Prerequisites</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Microsoft Visual Studio 7.1
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ DC-API library and header files
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Zip file containing the skeleton for an application
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3>
+ <title>Preparing the repository</title>
+
+ <para>
+ Unzip the contents of the attached zip file. Copy the following three
+ header files of the DC-API in the <filename
+ class='directory'>include</filename> directory: <filename
+ class='headerfile'>dc_client.h</filename>, <filename
+ class='headerfile'>dc_common.h</filename>, <filename
+ class='headerfile'>dc_win32.h</filename>. Copy the following library
+ file of the DC-API in the <filename class='directory'>lib</filename>
+ directory: <filename class='libraryfile'>dc_client.lib</filename>.
+ </para>
+ <para>
+ The source code of the application goes into the <filename
+ class='directory'>src</filename> directory, which already contains an
+ application skeleton. The Visual Studio Related files are in the <filename
+ class='directory'>win_build</filename> directory.
+ </para>
+ </sect3>
+
+ <sect3>
+ <title>Using Visual Studio to compile the application</title>
+
+ <para>
+ Open the <filename>application.sln</filename> file in Microsoft Visual
+ Studio 7.1 (MVS from now on). Open up the 'Soultion Explorer' window in
+ MVS, if it is not open yet
+ (<keycombo><keycap>Ctrl</keycap><keycap>Alt</keycap><keycap>L</keycap></keycombo>).
+ In the 'Solution Explorer' window you will see the Solution called
+ 'application' to which several subdirectories belong.
+ </para>
+ <para>
+ Open up the <filename class='directory'>Source Files</filename>
+ subdirectory to check that <filename>application.c</filename> is already
+ added to the solution. Double click on <filename>application.c</filename>
+ to open it up in MVS. Similarily, the header files are located in the
+ <filename class='directory'>Header Files</filename> subdirectory.
+ </para>
+
+ <sect4>
+ <title>Adding more source files to the solution</title>
+
+ <para>
+ If you want to add more header or source files, put them in the
+ <filename class='directory'>include</filename> or the <filename
+ class='directory'>src</filename> directories, respectively. After the
+ files are settled in place right click on the <filename
+ class='directory'>Source Files</filename> in the 'Solution Explorer'
+ and choose
+ <menuchoice>
+ <guimenu>Add</guimenu>
+ <guimenuitem>Add Existing Item</guimenuitem>
+ </menuchoice>
+ from the menu to add the source files. Do the same for the header files
+ to add them to the <filename class='directory'>Header Files</filename>
+ directory.
+ </para>
+ </sect4>
+
+ <sect4>
+ <title>Developing the application</title>
+
+ <para>
+ The source file <filename>application.c</filename> already contains the
+ neccessary include files and some basic functions for an application
+ utilizing the DC-API to compile. The source is structured in an
+ intuitive way. You can use these functions to realize the several
+ functions of a BOINC application (like checkpointing) or you can clear
+ these and develop your own methods.
+ </para>
+ </sect4>
+
+ <sect4>
+ <title>Compiling the solution</title>
+
+ <para>
+ The skeleton 'application' solution is set up to compile with the
+ DC-API. In the middle part on the menu of MVS there is a drop down box
+ showing <guimenuitem>Debug</guimenuitem> or
+ <guimenuitem>Release</guimenuitem>. With this drop down box, you can
+ select different configurations to compile your application with. Before
+ compiling set this to the appropriate configuration.
+ </para>
+ <para>
+ If you compile in <guimenuitem>Debug</guimenuitem> mode,
+ <itemizedlist>
+ <listitem>
+ <para>
+ you'll be able to debug the application by visually stepping
+ through the execution,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ however, the executable will be bigger and will not be
+ optimalized.
+ </para>
+ </listitem>
+ </itemizedlist>
+ Use this mode for debugging only.
+ </para>
+ <para>
+ If you compile in <guimenuitem>Release</guimenuitem> mode,
+ <itemizedlist>
+ <listitem>
+ <para>
+ the executable will be optimalized, resulting in a faster and
+ smaller code,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ however, you'll not be able to visually debug your applcation.
+ </para>
+ </listitem>
+ </itemizedlist>
+ Use this mode for compiling release versions.
+ </para>
+ <para>
+ To compile the application select <guimenuitem>Build
+ solution</guimenuitem> from the <guimenu>Build</guimenu> menu or press
+ <keycap>F7</keycap>. During compilation you will see an output window
+ showing the progress of the compilation.
+ </para>
+ <para>
+ If compilation fails the last line of the output window will show:
+ <screen>
+Build: 0 succeeded, 1 failed, 0 skipped</screen>
+ Scroll back in the 'Output Window' to locate the problem and correct it
+ as neccessary.
+ </para>
+ <para>
+ If compilation is successful the last line of the output window will
+ show: <screen>
+Build: 1 succeeded, 0 failed, 0 skipped
+ </screen>
+ </para>
+ <para>
+ During compilation a subdirectory is created in the <filename
+ class='directory'>win_build</filename>
+ directory of the repository having the same name as the current
+ configuration (Debug or Release) You will find the compiled executable
+ in these subdirectories with the name
+ <application>application_1.00_windows_intelx86.exe</application>.
+ </para>
+
+ </sect4>
+ <sect4>
+ <title>Debugging the application</title>
+
+ <para>
+ If the application is successfully compiled in
+ <guimenuitem>Debug</guimenuitem> mode, you can debug it visually. During
+ debugging the current directory where the application will look for its
+ input and output files will the <filename
+ class='directory'>win_build</filename> directory. Copy the input files
+ of the application in the <filename
+ class='directory'>win_build</filename> directory. Select
+ <guimenuitem>Step Into</guimenuitem> from the <guimenu>Debug</guimenu>
+ menu to start debugging or press <keycap>F11</keycap>. If the
+ application is outdated, MVS will ask to recompile it, select
+ <guimenuitem>Yes</guimenuitem>. The applcation will be started and you
+ will see a yellow arrow pointing to the current line of code to be
+ executed. Keep pressing <keycap>F11</keycap> to step through the program
+ lines. If the next call is a function, you can skip the function
+ by pressing <keycap>F10</keycap> (<guimenuitem>Step Over</guimenuitem>)
+ and continue debugging on the point where the function returns.
+ </para>
+
+ <para>
+ You can set breakpoints in the code by clicking on the grey area next to
+ the program line, where the yellow arrow moves during debugging. A big
+ red dot appears marking a breakpoint.
+ </para>
+ <para>
+ To clear the breakpoint click on the big red dot or select
+ <guimenuitem>Clear All Breakpoints</guimenuitem>
+ (<keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap><keycap>F9</keycap></keycombo>)
+ from the 'Debug' menu. You can start the application in debug mode by
+ selecting <guimenuitem>Start</guimenuitem> from the
+ <guimenu>Debug</guimenu> menu, or by pressing <keycap>F5</keycap>.
+ Execution will be breaken on the point where you have set breakpoints.
+ To continue execution after a breakpoint press <keycap>F5</keycap>.
+ </para>
+ <para>
+ To stop debugging press
+ <keycombo><keycap>Shift</keycap><keycap>F5</keycap></keycombo> or select
+ the <guimenuitem>Stop Debugging</guimenuitem> item in the menu of MVS.
+ </para>
+ </sect4>
+ <sect4>
+ <title>Changing configuration properties</title>
+
+ <para>
+ You can change the properties of 'Debug' and 'Release' modes by right
+ clicking on the 'applcation' in the 'Solution Explorer' window and
+ selecting <guimenuitem>Properties</guimenuitem>. However, the
+ configuration is already set up to best suit the needs of application
+ development with DC-API so in most cases no configuration option is
+ needed to be changed.
+ </para>
+ </sect4>
+ </sect3>
+</sect2>
+<!-- vim: set ai sw=2 tw=80: -->
diff --git a/dcapi/examples/message-example/Makefile.am b/dcapi/examples/message-example/Makefile.am
new file mode 100644
index 0000000..e4f8074
--- /dev/null
+++ b/dcapi/examples/message-example/Makefile.am
@@ -0,0 +1,45 @@
+ACLOCAL_AMFLAGS = -I .
+
+AUTOMAKE_OPTIONS = 1.7
+
+appdir = ${libdir}/boinc/apps/message-example
+app_PROGRAMS =
+app_DATA = dc-api.conf input.txt
+
+EXTRA_DIST = \
+ dc-api.conf \
+ input.txt \
+ message-example-client.xml.in \
+ message-example-master.xml.in
+
+if BUILD_CLIENT
+app_PROGRAMS += message-example-client
+app_DATA += message-example-client.xml
+endif
+
+if BUILD_MASTER
+app_PROGRAMS += message-example-master
+app_DATA += message-example-master.xml
+endif
+
+CLEANFILES = message-example-client.xml message-example-master.xml
+
+message_example_client_SOURCES = client.c common.h
+message_example_client_CPPFLAGS = $(DCAPI_CLIENT_CFLAGS)
+message_example_client_LDADD = $(DCAPI_CLIENT_LIBS)
+
+message_example_master_SOURCES = master.c common.h
+message_example_master_CPPFLAGS = $(DCAPI_MASTER_CFLAGS)
+message_example_master_LDADD = $(DCAPI_MASTER_LIBS)
+
+message-example-client.xml: message-example-client.xml.in
+ $(SED) -e "s, at PACKAGE_VERSION\@,$(PACKAGE_VERSION)," \
+ -e "s, at appdir\@,$(appdir)," \
+ -e "s, at target\@,$(target_triplet)," \
+ $< > $@
+
+message-example-master.xml: message-example-master.xml.in
+ $(SED) -e "s, at PACKAGE_VERSION\@,$(PACKAGE_VERSION)," \
+ -e "s, at appdir\@,$(appdir)," \
+ -e "s, at target\@,$(target_triplet)," \
+ $< > $@
diff --git a/dcapi/examples/message-example/client.c b/dcapi/examples/message-example/client.c
new file mode 100644
index 0000000..f97df84
--- /dev/null
+++ b/dcapi/examples/message-example/client.c
@@ -0,0 +1,155 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc_client.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include "common.h"
+
+static FILE *infile;
+static FILE *outfile;
+
+static int messages_received;
+
+/* Open input and output files, and check is there is a checkpoint file */
+static void init_files(void)
+{
+ char *file_name;
+
+ /* Open the input file */
+ file_name = DC_resolveFileName(DC_FILE_IN, INPUT_LABEL);
+ if (!file_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the input file name\n");
+ DC_finishClient(1);
+ }
+
+ infile = fopen(file_name, "r");
+ if (!infile)
+ {
+ perror("APP: Could not open the input file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+
+ /* Open the output file */
+ file_name = DC_resolveFileName(DC_FILE_OUT, OUTPUT_LABEL);
+ if (!file_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the output file name\n");
+ DC_finishClient(1);
+ }
+
+ outfile = fopen(file_name, "w");
+ if (!outfile)
+ {
+ perror("APP: Could not open/create the output file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+}
+
+static void message_arrived(const char *message)
+{
+ char reply[256];
+
+ fprintf(stderr, "APP: message: '%s' arrived, sending reply\n", message);
+
+ snprintf(reply, sizeof(reply), "Reply to: %s", message);
+ DC_sendMessage(reply);
+ messages_received++;
+}
+
+/* The real work */
+static void do_work(void)
+{
+ char buf[32];
+ int c;
+
+ while ((c = fgetc(infile)) != EOF)
+ {
+ DC_ClientEvent *event;
+
+ c = toupper(c);
+ if (fputc(c, outfile) == EOF)
+ {
+ perror("APP: fputc");
+ DC_finishClient(1);
+ }
+
+ /* Send the just-converted character to the master. This in
+ * turn also allows receiving messages from the master */
+ snprintf(buf, sizeof(buf), "Processed %c", c);
+ DC_sendMessage(buf);
+
+ /* Real applications do real computation that takes time. Here
+ * we just emulate it. We sleep for a long time to prevent
+ * sending messages too often. */
+ sleep(30);
+
+ /* Check if either the master or the BOINC core client asked
+ * us to do something */
+ event = DC_checkClientEvent();
+ if (!event)
+ continue;
+
+ if (event->type == DC_CLIENT_CHECKPOINT)
+ {
+ DC_log(LOG_INFO, "Checkpoint request received");
+ DC_checkpointMade(NULL);
+ }
+ else if (event->type == DC_CLIENT_MESSAGE)
+ message_arrived(event->message);
+
+ /* Make sure we do not leak memory */
+ DC_destroyClientEvent(event);
+ }
+
+ if (fclose(outfile))
+ {
+ perror("APP: Closing the output file has failed");
+ DC_finishClient(1);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int retval;
+
+ retval = DC_initClient();
+ if (retval)
+ {
+ fprintf(stderr, "APP: Failed to initialize the DC-API. Return "
+ "value was %d\n", retval);
+ DC_finishClient(1);
+ }
+ fprintf(stdout, "APP: DC-API initialization was successful.\n");
+
+ init_files();
+
+ do_work();
+
+ fprintf(stdout, "APP: Work finished. Received %d messages from the "
+ "master.\n", messages_received);
+
+ DC_finishClient(0);
+ return(0); // Tho' we never reach this line
+}
+
+#ifdef _WIN32
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR Args, int WinMode)
+{
+ LPSTR command_line;
+ char *argv[100];
+ int argc;
+
+ command_line = GetCommandLine();
+ argc = parse_command_line(command_line, argv);
+ return main(argc, argv);
+}
+#endif
diff --git a/dcapi/examples/message-example/common.h b/dcapi/examples/message-example/common.h
new file mode 100644
index 0000000..ee05c5d
--- /dev/null
+++ b/dcapi/examples/message-example/common.h
@@ -0,0 +1,12 @@
+/*
+ * Common definitions used by both the master and the client
+ */
+
+#ifndef COMMON_H
+#define COMMON_H
+
+/* Logical names of the input/output files */
+#define INPUT_LABEL "in.txt"
+#define OUTPUT_LABEL "out.txt"
+
+#endif /* COMMON_H */
diff --git a/dcapi/examples/message-example/configure.ac b/dcapi/examples/message-example/configure.ac
new file mode 100644
index 0000000..666c0ef
--- /dev/null
+++ b/dcapi/examples/message-example/configure.ac
@@ -0,0 +1,35 @@
+AC_INIT([Message Passing Example Application], [6.00], [desktopgrid at lpds.sztaki.hu], [message-example])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_SRCDIR([client.c])
+
+dnl The platform code uses the target triplet
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE([foreign])
+
+AC_PROG_CC
+
+dnl We need sed for substituting the XML templates
+AC_PATH_PROG([SED], [sed])
+
+dnl Enable extra warnings if we are using GCC
+if test "$ac_cv_c_compiler_gnu" = yes; then
+ CFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -Wsign-compare ${CFLAGS}"
+fi
+
+AC_ARG_ENABLE([client], AS_HELP_STRING([--disable-client], [do not build the client application]),, [enable_client=yes])
+AC_ARG_ENABLE([master], AS_HELP_STRING([--disable-master], [do not build the master application]),, [enable_master=yes])
+
+AM_CONDITIONAL([BUILD_CLIENT], [test "$enable_client" = yes])
+AM_CONDITIONAL([BUILD_MASTER], [test "$enable_master" = yes])
+
+if test "$enable_client" = yes; then
+ SZDG_DCAPI_CLIENT([], [AC_MSG_ERROR([DC-API client libraries were not found])])
+fi
+
+if test "$enable_master" = yes; then
+ SZDG_DCAPI_MASTER([], [AC_MSG_ERROR([DC-API master libraries were not found])])
+fi
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/dcapi/examples/message-example/dc-api.conf b/dcapi/examples/message-example/dc-api.conf
new file mode 100644
index 0000000..d362732
--- /dev/null
+++ b/dcapi/examples/message-example/dc-api.conf
@@ -0,0 +1,39 @@
+[Master]
+#--------------------------------------------------------
+# General configuration, for both BOINC and LOCAL DC-API implementation
+#--------------------------------------------------------
+
+#
+# Working directory. boinc_appmgr will set it automatically
+#
+
+WorkingDirectory = *Must be specified*
+
+#
+# UUID Instance. boinc_appmgr will set it automatically
+#
+
+InstanceUUID = *Must be specified*
+
+#
+# Debugging level
+#
+
+LogLevel = Debug
+
+#--------------------------------------------------------
+# Configuration for BOINC DC-API implementation
+#--------------------------------------------------------
+
+#
+# BOINC project root directory. boinc_appmgr will set it automatically
+#
+
+ProjectRootDir = *Must be specified*
+
+#--------------------------------------------------------
+# Configuration for LOCAL DC-API implementation
+#--------------------------------------------------------
+[Client-message-example]
+
+name = message-example-client
diff --git a/dcapi/examples/message-example/input.txt b/dcapi/examples/message-example/input.txt
new file mode 100644
index 0000000..1583aa3
--- /dev/null
+++ b/dcapi/examples/message-example/input.txt
@@ -0,0 +1,5 @@
+"Eml�k�l, hogy eml�kezz, ha eml�kem m�r csak eml�k lesz."
+"Nem az az igazi, akivel le tudsz �lni egy �letet,* hanem az, aki n�lk�l nem."
+"Ne s�rj, hogy v�get�rt!* �r�lj, hogy megt�rt�nt!"
+"Ha lehet, Veled...*...ha nem, n�lk�led...*...de ellened soha!"
+"Az �let �letvesz�lyes.* Eddig m�g mindenki belehalt."
diff --git a/dcapi/examples/message-example/master.c b/dcapi/examples/message-example/master.c
new file mode 100644
index 0000000..38a3297
--- /dev/null
+++ b/dcapi/examples/message-example/master.c
@@ -0,0 +1,184 @@
+/**************************************************
+ * Message-examle Master program
+ *
+ * Created by: Gabor Vida
+ *
+ * The aim of the program is to test message passing between the master and
+ * the client in a Public Resource Computing environment. The
+ * program follows the client server model, therefore having a server-side and
+ * a client-side part.
+ *
+ * This is the server-side part of the program. It creates a WorkUnit (WU) for
+ * a Boinc project using the DC Application Programming Interface. The program
+ * takes a text file (input.txt) and submits it into the PRC-infrastructure,
+ * where it get processed by a client. After the submittion, the master waits
+ * for a user interaction (press ENTER), when the client downloaded the WU.
+ * After this, the master sends a sample message to the client, which is
+ * running around 5 mins on the client. If everything goes well, the client
+ * will get the message, and sends back a reply. After the client has returned
+ * the results of the WU, the program assimilates it.
+ *
+ *****************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc.h>
+
+#include <stdlib.h>
+#include <getopt.h>
+#include <string.h>
+#include <limits.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "common.h"
+
+/* Command line options */
+static const struct option longopts[] =
+{
+ { "config", required_argument, NULL, 'c' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL }
+};
+
+static int do_exit;
+
+static void process_result(DC_Workunit *wu, DC_Result *result)
+{
+ char *tag;
+
+ /* Extract our own private identifier */
+ tag = DC_getWUTag(wu);
+ DC_log(LOG_NOTICE, "Work unit %s has completed", tag);
+
+ /* We no longer need the work unit */
+ DC_destroyWU(wu);
+ free(tag);
+
+ /* This will cause the main loop to quit */
+ do_exit = 1;
+}
+
+static void process_message(DC_Workunit *wu, const char *message)
+{
+ char *tag;
+
+ tag = DC_getWUTag(wu);
+ DC_log(LOG_NOTICE, "Message '%s' has arrived from work unit %s", message, tag);
+
+ free(tag);
+}
+
+static DC_Workunit *create_work(void)
+{
+ DC_Workunit *wu;
+
+ wu = DC_createWU("message-example", NULL, 0, "message-test");
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "Work unit creation has failed");
+ exit(1);
+ }
+
+ if (DC_addWUInput(wu, INPUT_LABEL, "input.txt", DC_FILE_PERSISTENT))
+ {
+ DC_log(LOG_ERR, "Failed to register WU input file");
+ exit(1);
+ }
+
+ if (DC_addWUOutput(wu, OUTPUT_LABEL))
+ {
+ DC_log(LOG_ERR, "Failed to register WU output file");
+ exit(1);
+ }
+
+ if (DC_submitWU(wu))
+ {
+ DC_log(LOG_ERR, "Failed to submit WU");
+ exit(1);
+ }
+
+ return wu;
+}
+
+static void print_help(const char *prog) __attribute__((noreturn));
+static void print_help(const char *prog)
+{
+ const char *p;
+
+ /* Strip the path component if present */
+ p = strrchr(prog, '/');
+ if (p)
+ prog = p;
+
+ printf("Usage: %s {-c|--config} <config file>\n", prog);
+ printf("Available options:\n");
+ printf("\t-c <file>, --config <file>\tUse the specified config. file\n");
+ printf("\t-h, --help\t\t\tThis help text\n");
+ exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+ char *config_file = NULL;
+ DC_Workunit *wu;
+ int c;
+
+ while ((c = getopt_long(argc, argv, "ch", longopts, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'c':
+ config_file = optarg;
+ break;
+ case 'h':
+ print_help(argv[0]);
+ break;
+ default:
+ exit(1);
+ }
+ }
+
+ if (optind != argc)
+ {
+ fprintf(stderr, "Extra arguments on the command line\n");
+ exit(1);
+ }
+
+ /* Specifying the config file is mandatory, otherwise the master can't
+ * run as a BOINC daemon */
+ if (!config_file)
+ {
+ config_file = strdup("dc-api.conf");
+ fprintf(stdout, "You didn't specified the config file, use 'dc-api.conf'\n");
+ }
+
+ /* Initialize the DC-API */
+ if (DC_initMaster(config_file))
+ {
+ fprintf(stderr, "Master: DC_initMaster failed, exiting.\n");
+ exit(1);
+ }
+
+ /* Set the callbacks for receiving messages & the result */
+ DC_setMasterCb(process_result, NULL, process_message);
+
+ wu = create_work();
+ DC_log(LOG_NOTICE, "Master: Work unit has been created. Waiting "
+ "for result/message");
+
+ /* Wait for the work units to finish */
+ while (!do_exit)
+ {
+ DC_processMasterEvents(60);
+
+ /* The result processing destroys the WU, so make sure we
+ * only try to send a message if the WU is still alive */
+ if (!do_exit)
+ DC_sendWUMessage(wu, "What's up?");
+ }
+
+ return 0;
+}
diff --git a/dcapi/examples/message-example/message-example-client.xml.in b/dcapi/examples/message-example/message-example-client.xml.in
new file mode 100644
index 0000000..f311994
--- /dev/null
+++ b/dcapi/examples/message-example/message-example-client.xml.in
@@ -0,0 +1,27 @@
+<?xml version="1.0" standalone="no"?>
+<client>
+ <!-- Application name -->
+ <name>message-example</name>
+
+ <!-- User-friendly name for Boinc -->
+ <user_friendly_name>Messaging example</user_friendly_name>
+
+ <!-- Application version. Boinc requirements:
+ - The version number must contain two components (major.minor)
+ - Both component may be 1 or 2 digits long
+ - The major version must be the same as the Boinc server major
+ version -->
+ <version>@PACKAGE_VERSION@</version>
+
+ <platform>
+ <!-- The name of the platform -->
+ <name>@target@</name>
+
+ <!-- The name of the main client binary. It will be
+ automatically renamed to the name expected by Boinc -->
+ <binary>message-example-client</binary>
+
+ <!-- Additional files can also be installed -->
+ <!-- <lib>winlib.dll</lib> -->
+ </platform>
+</client>
diff --git a/dcapi/examples/message-example/message-example-master.xml.in b/dcapi/examples/message-example/message-example-master.xml.in
new file mode 100644
index 0000000..9d1bdb1
--- /dev/null
+++ b/dcapi/examples/message-example/message-example-master.xml.in
@@ -0,0 +1,41 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ Configuration template for the message example application
+-->
+<master>
+ <!-- Application name -->
+ <name>message-example</name>
+
+ <!-- Application version. There are no restrictions for the format of
+ master version numbers -->
+ <version>@PACKAGE_VERSION@</version>
+
+ <!-- Data files used by the master -->
+ <files>
+ <file>input.txt</file>
+ </files>
+
+ <!-- Master daemon definition -->
+ <daemon>
+ <binary>message-example-master</binary>
+ <arguments>
+ <arg>--config</arg>
+ <arg>${workdir}/dc-api.conf</arg>
+ </arguments>
+ </daemon>
+
+ <!-- The application manager script will substitute the correct
+ values for us -->
+ <dcapi-conf>dc-api.conf</dcapi-conf>
+
+ <!-- Validator daemon definition -->
+ <daemon>
+ <name>validator_for_textfiles</name>
+ <arguments>
+ <arg>-d</arg>
+ <arg>3</arg>
+ <arg>-app</arg>
+ <arg>message-example</arg>
+ </arguments>
+ </daemon>
+</master>
diff --git a/dcapi/examples/serialize-example/Makefile.am b/dcapi/examples/serialize-example/Makefile.am
new file mode 100644
index 0000000..1cc238f
--- /dev/null
+++ b/dcapi/examples/serialize-example/Makefile.am
@@ -0,0 +1,45 @@
+ACLOCAL_AMFLAGS = -I .
+
+AUTOMAKE_OPTIONS = 1.7
+
+appdir = ${libdir}/boinc/apps/serialize-example
+app_PROGRAMS =
+app_DATA = dc-api.conf input.txt
+
+EXTRA_DIST = \
+ dc-api.conf \
+ input.txt \
+ serialize-example-client.xml.in \
+ serialize-example-master.xml.in
+
+if BUILD_CLIENT
+app_PROGRAMS += serialize-example-client
+app_DATA += serialize-example-client.xml
+endif
+
+if BUILD_MASTER
+app_PROGRAMS += serialize-example-master
+app_DATA += serialize-example-master.xml
+endif
+
+CLEANFILES = serialize-example-client.xml serialize-example-master.xml
+
+serialize_example_client_SOURCES = client.c common.h
+serialize_example_client_CPPFLAGS = $(DCAPI_CLIENT_CFLAGS)
+serialize_example_client_LDADD = $(DCAPI_CLIENT_LIBS)
+
+serialize_example_master_SOURCES = master.c common.h
+serialize_example_master_CPPFLAGS = $(DCAPI_MASTER_CFLAGS)
+serialize_example_master_LDADD = $(DCAPI_MASTER_LIBS)
+
+serialize-example-client.xml: serialize-example-client.xml.in
+ $(SED) -e "s, at PACKAGE_VERSION\@,$(PACKAGE_VERSION)," \
+ -e "s, at appdir\@,$(appdir)," \
+ -e "s, at target\@,$(target_triplet)," \
+ $< > $@
+
+serialize-example-master.xml: serialize-example-master.xml.in
+ $(SED) -e "s, at PACKAGE_VERSION\@,$(PACKAGE_VERSION)," \
+ -e "s, at appdir\@,$(appdir)," \
+ -e "s, at target\@,$(target_triplet)," \
+ $< > $@
diff --git a/dcapi/examples/serialize-example/client.c b/dcapi/examples/serialize-example/client.c
new file mode 100644
index 0000000..2713263
--- /dev/null
+++ b/dcapi/examples/serialize-example/client.c
@@ -0,0 +1,130 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc_client.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include "common.h"
+
+static FILE *infile;
+static FILE *outfile;
+
+/* Open input and output files, and check is there is a checkpoint file */
+static void init_files(void)
+{
+ char *file_name;
+
+ /* Open the input file */
+ file_name = DC_resolveFileName(DC_FILE_IN, INPUT_LABEL);
+ if (!file_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the input file name\n");
+ DC_finishClient(1);
+ }
+
+ infile = fopen(file_name, "r");
+ if (!infile)
+ {
+ perror("APP: Could not open the input file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+
+ /* Open the output file */
+ file_name = DC_resolveFileName(DC_FILE_OUT, OUTPUT_LABEL);
+ if (!file_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the output file name\n");
+ DC_finishClient(1);
+ }
+
+ outfile = fopen(file_name, "w");
+ if (!outfile)
+ {
+ perror("APP: Could not open/create the output file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+}
+
+/* The real work */
+static void do_work(void)
+{
+ int c;
+
+ while ((c = fgetc(infile)) != EOF)
+ {
+ DC_ClientEvent *event;
+
+ c = toupper(c);
+ if (fputc(c, outfile) == EOF)
+ {
+ perror("APP: fputc");
+ DC_finishClient(1);
+ }
+
+ /* Real applications do real computation that takes time. Here
+ * we just emulate it */
+ sleep(3);
+
+ /* Check if either the master or the BOINC core client asked
+ * us to do something */
+ event = DC_checkClientEvent();
+ if (!event)
+ continue;
+
+ /* If it is time, do a checkpoint */
+ if (event->type == DC_CLIENT_CHECKPOINT)
+ DC_checkpointMade(NULL);
+
+ /* Make sure we do not leak memory */
+ DC_destroyClientEvent(event);
+ }
+
+ if (fclose(outfile))
+ {
+ perror("APP: Closing the output file has failed");
+ DC_finishClient(1);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int retval;
+
+ retval = DC_initClient();
+ if (retval)
+ {
+ fprintf(stderr, "APP: Failed to initialize the DC-API. Return "
+ "value was %d\n", retval);
+ DC_finishClient(1);
+ }
+ fprintf(stdout, "APP: DC-API initialization was successful.\n");
+
+ init_files();
+ do_work();
+ fprintf(stdout, "APP: Work finished.\n");
+
+ DC_finishClient(0);
+ return(0); // Tho' we never reach this line
+}
+
+#ifdef _WIN32
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR Args, int WinMode)
+{
+ LPSTR command_line;
+ char *argv[100];
+ int argc;
+
+ command_line = GetCommandLine();
+ argc = parse_command_line(command_line, argv);
+ return main(argc, argv);
+}
+#endif
+
+
diff --git a/dcapi/examples/serialize-example/common.h b/dcapi/examples/serialize-example/common.h
new file mode 100644
index 0000000..ee05c5d
--- /dev/null
+++ b/dcapi/examples/serialize-example/common.h
@@ -0,0 +1,12 @@
+/*
+ * Common definitions used by both the master and the client
+ */
+
+#ifndef COMMON_H
+#define COMMON_H
+
+/* Logical names of the input/output files */
+#define INPUT_LABEL "in.txt"
+#define OUTPUT_LABEL "out.txt"
+
+#endif /* COMMON_H */
diff --git a/dcapi/examples/serialize-example/configure.ac b/dcapi/examples/serialize-example/configure.ac
new file mode 100644
index 0000000..b48c6cf
--- /dev/null
+++ b/dcapi/examples/serialize-example/configure.ac
@@ -0,0 +1,35 @@
+AC_INIT([Example Application for master checkpoint], [6.00], [desktopgrid at lpds.sztaki.hu], [serialize-example])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_SRCDIR([client.c])
+
+dnl The platform code uses the target triplet
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE([foreign])
+
+AC_PROG_CC
+
+dnl We need sed for substituting the XML templates
+AC_PATH_PROG([SED], [sed])
+
+dnl Enable extra warnings if we are using GCC
+if test "$ac_cv_c_compiler_gnu" = yes; then
+ CFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -Wsign-compare ${CFLAGS}"
+fi
+
+AC_ARG_ENABLE([client], AS_HELP_STRING([--disable-client], [do not build the client application]),, [enable_client=yes])
+AC_ARG_ENABLE([master], AS_HELP_STRING([--disable-master], [do not build the master application]),, [enable_master=yes])
+
+AM_CONDITIONAL([BUILD_CLIENT], [test "$enable_client" = yes])
+AM_CONDITIONAL([BUILD_MASTER], [test "$enable_master" = yes])
+
+if test "$enable_client" = yes; then
+ SZDG_DCAPI_CLIENT([], [AC_MSG_ERROR([DC-API client libraries were not found])])
+fi
+
+if test "$enable_master" = yes; then
+ SZDG_DCAPI_MASTER([], [AC_MSG_ERROR([DC-API master libraries were not found])])
+fi
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/dcapi/examples/serialize-example/dc-api.conf b/dcapi/examples/serialize-example/dc-api.conf
new file mode 100644
index 0000000..f8fd939
--- /dev/null
+++ b/dcapi/examples/serialize-example/dc-api.conf
@@ -0,0 +1,39 @@
+[Master]
+#--------------------------------------------------------
+# General configuration, for both BOINC and LOCAL DC-API implementation
+#--------------------------------------------------------
+
+#
+# Working directory. boinc_appmgr will set it automatically
+#
+
+WorkingDirectory = *Must be specified*
+
+#
+# UUID Instance. boinc_appmgr will set it automatically
+#
+
+InstanceUUID = *Must be specified*
+
+#
+# Debugging level
+#
+
+LogLevel = Debug
+
+#--------------------------------------------------------
+# Configuration for BOINC DC-API implementation
+#--------------------------------------------------------
+
+#
+# BOINC project root directory. boinc_appmgr will set it automatically
+#
+
+ProjectRootDir = *Must be specified*
+
+#--------------------------------------------------------
+# Configuration for LOCAL DC-API implementation
+#--------------------------------------------------------
+[Client-serialize-example]
+
+name = serialize-example-client
diff --git a/dcapi/examples/serialize-example/input.txt b/dcapi/examples/serialize-example/input.txt
new file mode 100644
index 0000000..81fdf7b
--- /dev/null
+++ b/dcapi/examples/serialize-example/input.txt
@@ -0,0 +1 @@
+"Eml�k�l, hogy eml�kezz, ha eml�kem m�r csak eml�k lesz."
diff --git a/dcapi/examples/serialize-example/master.c b/dcapi/examples/serialize-example/master.c
new file mode 100644
index 0000000..d9a2c11
--- /dev/null
+++ b/dcapi/examples/serialize-example/master.c
@@ -0,0 +1,216 @@
+/**************************************************
+ * Checkpointing example Master program
+ *
+ * Created by: Gabor Vida
+ *
+ * The aim of the program is to test the serialize and deserialize
+ * functions of the master side DC API. The program follows the
+ * client server model, therefore having a server-side and
+ * a client-side part.
+ *
+ * This is the server-side part of the program. It creates a WorkUnit (WU) for
+ * a Boinc project using the DC Application Programming Interface. The program
+ * takes a text file (input.txt) and submits it into the PRC-infrastructure,
+ * where it get processed by a client. After the submittion, the master makes a
+ * checkpoint with the DC_serializeWU function, than exits.
+ * At the next start is tries to deserialize the saved WU, and waits for the result.
+ * If everything goes well, the master will get the result of the serialized and
+ * deserialized WorkUnit.
+ *
+ *****************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc.h>
+
+#include <stdlib.h>
+#include <getopt.h>
+#include <string.h>
+#include <limits.h>
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include "common.h"
+
+#define CHECKPOINT_LABEL "ckpt.txt"
+
+static int finished_wus;
+
+static DC_Workunit *workunit;
+
+/* Command line options */
+static const struct option longopts[] =
+{
+ { "config", required_argument, NULL, 'c' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL }
+};
+
+static void create_ckpt(void)
+{
+ FILE *f;
+ char *ckpt;
+
+ f = fopen(CHECKPOINT_LABEL, "w");
+ if (!f)
+ {
+ DC_log(LOG_ERR, "Failed to open ckpt file (%s) for writing.", CHECKPOINT_LABEL);
+ exit(1);
+ }
+
+ ckpt = DC_serializeWU(workunit);
+
+ fprintf(f, "%s", ckpt);
+ fclose(f);
+
+ DC_log(LOG_NOTICE, "Master: serialized: %s", ckpt);
+}
+
+static void create_work(void)
+{
+ workunit = DC_createWU("serialize-example", NULL, 0, "serialize-test");
+ if (!workunit)
+ {
+ DC_log(LOG_ERR, "Work unit creation has failed");
+ exit(1);
+ }
+
+ if (DC_addWUInput(workunit, INPUT_LABEL, "input.txt", DC_FILE_PERSISTENT))
+ {
+ DC_log(LOG_ERR, "Failed to register WU input file");
+ exit(1);
+ }
+
+ if (DC_addWUOutput(workunit, OUTPUT_LABEL))
+ {
+ DC_log(LOG_ERR, "Failed to register WU output file");
+ exit(1);
+ }
+
+ if (DC_submitWU(workunit))
+ {
+ DC_log(LOG_ERR, "Failed to submit WU");
+ exit(1);
+ }
+}
+
+static void print_help(const char *prog) __attribute__((noreturn));
+static void print_help(const char *prog)
+{
+ const char *p;
+
+ /* Strip the path component if present */
+ p = strrchr(prog, '/');
+ if (p)
+ prog = p;
+
+ printf("Usage: %s {-c|--config} <config file>\n", prog);
+ printf("Available options:\n");
+ printf("\t-c <file>, --config <file>\tUse the specified config. file\n");
+ printf("\t-h, --help\t\t\tThis help text\n");
+ exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+ DC_MasterEvent *event;
+ FILE *f;
+ char buf[512];
+ char *config_file = NULL;
+ int c;
+
+ while ((c = getopt_long(argc, argv, "ch", longopts, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'c':
+ config_file = optarg;
+ break;
+ case 'h':
+ print_help(argv[0]);
+ break;
+ default:
+ exit(1);
+ }
+ }
+
+ if (optind != argc)
+ {
+ fprintf(stderr, "Extra arguments on the command line\n");
+ exit(1);
+ }
+
+ /* Specifying the config file is mandatory, otherwise the master can't
+ * run as a BOINC daemon */
+ if (!config_file)
+ {
+ fprintf(stderr, "Error: the config file is not specified\n");
+ exit(1);
+ }
+
+ /* Initialize the DC-API */
+ if (DC_initMaster(config_file))
+ {
+ fprintf(stderr, "Master: DC_initMaster failed, exiting.\n");
+ exit(1);
+ }
+
+ /* Try to open checkpoint file */
+ f = fopen(CHECKPOINT_LABEL, "r");
+ if (f)
+ {
+ DC_log(LOG_NOTICE, "Master: Found checkpoint!");
+ fgets(buf, sizeof(buf), f);
+ workunit = DC_deserializeWU(buf);
+ if(!workunit)
+ {
+ DC_log(LOG_ERR, "DC_desirializeWU returned NULL for WU: %s", buf);
+ exit(1);
+ }
+ fclose(f);
+ DC_log(LOG_NOTICE, "Master: deserialized: %s", buf);
+ }
+ else
+ {
+ DC_log(LOG_NOTICE, "Master: Creating work unit");
+ create_work();
+ DC_log(LOG_NOTICE, "Master: Work unit has been created and submitted.");
+ DC_log(LOG_NOTICE, "Creating checkpoint.");
+ create_ckpt();
+ DC_log(LOG_NOTICE, "Master: Exit application. Please restart it!");
+ exit(0);
+ }
+
+ /* Wait for the work units to finish */
+ while (finished_wus == 0)
+ {
+ DC_log(LOG_NOTICE, "Master: Starting waitWUEvent with timeout 600 for the deserialized WU");
+ event = DC_waitWUEvent(workunit, 600);
+ if(!event)
+ continue;
+
+ if (event->type == DC_MASTER_RESULT)
+ {
+ char *tag;
+
+ /* Extract our own private identifier */
+ tag = DC_getWUTag(workunit);
+ DC_log(LOG_NOTICE, "Work unit %s has completed", tag);
+
+ /* We no longer need the work unit */
+ DC_destroyWU(workunit);
+
+ finished_wus++;
+
+ free(tag);
+ }
+ DC_destroyMasterEvent(event);
+ }
+
+ unlink(CHECKPOINT_LABEL);
+
+ return 0;
+}
diff --git a/dcapi/examples/serialize-example/serialize-example-client.xml.in b/dcapi/examples/serialize-example/serialize-example-client.xml.in
new file mode 100644
index 0000000..f089164
--- /dev/null
+++ b/dcapi/examples/serialize-example/serialize-example-client.xml.in
@@ -0,0 +1,27 @@
+<?xml version="1.0" standalone="no"?>
+<client>
+ <!-- Application name -->
+ <name>serialize-example</name>
+
+ <!-- User-friendly name for Boinc -->
+ <user_friendly_name>Serialization example</user_friendly_name>
+
+ <!-- Application version. Boinc requirements:
+ - The version number must contain two components (major.minor)
+ - Both component may be 1 or 2 digits long
+ - The major version must be the same as the Boinc server major
+ version -->
+ <version>@PACKAGE_VERSION@</version>
+
+ <platform>
+ <!-- The name of the platform -->
+ <name>@target@</name>
+
+ <!-- The name of the main client binary. It will be
+ automatically renamed to the name expected by Boinc -->
+ <binary>serialize-example-client</binary>
+
+ <!-- Additional files can also be installed -->
+ <!-- <lib>winlib.dll</lib> -->
+ </platform>
+</client>
diff --git a/dcapi/examples/serialize-example/serialize-example-master.xml.in b/dcapi/examples/serialize-example/serialize-example-master.xml.in
new file mode 100644
index 0000000..ebc6d84
--- /dev/null
+++ b/dcapi/examples/serialize-example/serialize-example-master.xml.in
@@ -0,0 +1,41 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ Configuration template for the serialize example application
+-->
+<master>
+ <!-- Application name -->
+ <name>serialize-example</name>
+
+ <!-- Application version. There are no restrictions for the format of
+ master version numbers -->
+ <version>@PACKAGE_VERSION@</version>
+
+ <!-- Data files used by the master -->
+ <files>
+ <file>input.txt</file>
+ </files>
+
+ <!-- Master daemon definition -->
+ <daemon>
+ <binary>serialize-example-master</binary>
+ <arguments>
+ <arg>--config</arg>
+ <arg>${workdir}/dc-api.conf</arg>
+ </arguments>
+ </daemon>
+
+ <!-- The application manager script will substitute the correct
+ values for us -->
+ <dcapi-conf>dc-api.conf</dcapi-conf>
+
+ <!-- Validator daemon definition -->
+ <daemon>
+ <name>validator_for_textfiles</name>
+ <arguments>
+ <arg>-d</arg>
+ <arg>3</arg>
+ <arg>-app</arg>
+ <arg>serialize-example</arg>
+ </arguments>
+ </daemon>
+</master>
diff --git a/dcapi/examples/uppercase-with-callback/Makefile.am b/dcapi/examples/uppercase-with-callback/Makefile.am
new file mode 100644
index 0000000..c23039f
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/Makefile.am
@@ -0,0 +1,45 @@
+ACLOCAL_AMFLAGS = -I .
+
+AUTOMAKE_OPTIONS = 1.7
+
+appdir = ${libdir}/boinc/apps/uppercase-example
+app_PROGRAMS =
+app_DATA = dc-api.conf input.txt
+
+EXTRA_DIST = \
+ dc-api.conf \
+ input.txt \
+ uppercase-example-client.xml.in \
+ uppercase-example-master.xml.in
+
+if BUILD_CLIENT
+app_PROGRAMS += uppercase-example-client
+app_DATA += uppercase-example-client.xml
+endif
+
+if BUILD_MASTER
+app_PROGRAMS += uppercase-example-master
+app_DATA += uppercase-example-master.xml
+endif
+
+CLEANFILES = uppercase-example-client.xml uppercase-example-master.xml
+
+uppercase_example_client_SOURCES = client.c common.h
+uppercase_example_client_CPPFLAGS = $(DCAPI_CLIENT_CFLAGS)
+uppercase_example_client_LDADD = $(DCAPI_CLIENT_LIBS)
+
+uppercase_example_master_SOURCES = master.c common.h
+uppercase_example_master_CPPFLAGS = $(DCAPI_MASTER_CFLAGS)
+uppercase_example_master_LDADD = $(DCAPI_MASTER_LIBS)
+
+uppercase-example-client.xml: uppercase-example-client.xml.in
+ $(SED) -e "s, at PACKAGE_VERSION\@,$(PACKAGE_VERSION)," \
+ -e "s, at appdir\@,$(appdir)," \
+ -e "s, at target\@,$(target_triplet)," \
+ $< > $@
+
+uppercase-example-master.xml: uppercase-example-master.xml.in
+ $(SED) -e "s, at PACKAGE_VERSION\@,$(PACKAGE_VERSION)," \
+ -e "s, at appdir\@,$(appdir)," \
+ -e "s, at target\@,$(target_triplet)," \
+ $< > $@
diff --git a/dcapi/examples/uppercase-with-callback/client.c b/dcapi/examples/uppercase-with-callback/client.c
new file mode 100644
index 0000000..2747e7e
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/client.c
@@ -0,0 +1,258 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc_client.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#include <io.h>
+#else
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include "common.h"
+
+static FILE *infile;
+static FILE *outfile;
+
+/* Needed to report the percentage of the work already done */
+static int frac_total_size;
+static int frac_current_pos;
+
+/* Save the value of frac_current_pos to the ckpt file */
+static void do_checkpoint(void)
+{
+ char *ckptfile_name;
+ FILE *ckptfile;
+ int retval;
+
+ /* Ensure that the output file is really on the disk before we create
+ * the checkpoint file */
+ retval = fflush(outfile);
+ if (retval)
+ {
+ perror("APP: flushing the output file has failed");
+ DC_finishClient(1);
+ }
+
+ ckptfile_name = DC_resolveFileName(DC_FILE_OUT, DC_CHECKPOINT_FILE);
+ if (!ckptfile_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the checkpoint file "
+ "name\n");
+ DC_finishClient(1);
+ }
+
+ ckptfile = fopen(ckptfile_name, "w");
+ if (!ckptfile)
+ {
+ perror("APP: Could not create the checkpoint file");
+ DC_finishClient(1);
+ }
+
+ fprintf(ckptfile, "%d", frac_current_pos);
+ retval = fclose(ckptfile);
+ if (retval)
+ {
+ perror("APP: Closing the checkpoint file has failed");
+ DC_finishClient(1);
+ }
+
+ /* Tell the DC-API that the checkpoint is ready */
+ DC_checkpointMade(ckptfile_name);
+
+ /* Update the estimation about the work done */
+ DC_fractionDone(frac_current_pos/frac_total_size);
+}
+
+/* Open input and output files, and check is there is a checkpoint file */
+static void init_files(void)
+{
+ const char *outfile_openmode = "w";
+ char *file_name;
+
+ /* Open the input file */
+ file_name = DC_resolveFileName(DC_FILE_IN, INPUT_LABEL);
+ if (!file_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the input file name\n");
+ DC_finishClient(1);
+ }
+
+ infile = fopen(file_name, "rb");
+ if (!infile)
+ {
+ perror("APP: Could not open the input file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+
+ /* Determine the size of the input file */
+ fseek(infile, 0, SEEK_END);
+ frac_total_size = ftell(infile);
+ fseek(infile, 0, SEEK_SET);
+
+ /* Check the checkpoint file */
+ file_name = DC_resolveFileName(DC_FILE_IN, DC_CHECKPOINT_FILE);
+ if (file_name)
+ {
+ FILE *ckptfile;
+ int ret;
+
+ ckptfile = fopen(file_name, "r");
+ if (!ckptfile)
+ {
+ perror("APP: Could not open the initial checkpoint file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+
+ /* ckpt file exists: read and set everything according to it */
+ ret = fscanf(ckptfile, "%d", &frac_current_pos);
+ if (ret != 1 || frac_current_pos < 0 ||
+ frac_current_pos > frac_total_size)
+ {
+ fprintf(stderr, "APP: Failed to parse the contents of "
+ "the checkpoint file, starting from the "
+ "beginning\n");
+ frac_current_pos = 0;
+ }
+ else
+ {
+ fprintf(stderr, "APP: Found checkpoint file, starting "
+ "from position %d.\n", frac_current_pos);
+ outfile_openmode = "r+";
+ }
+ fclose(ckptfile);
+
+ fseek(infile, frac_current_pos, SEEK_SET);
+ }
+
+ /* Open the output file */
+ file_name = DC_resolveFileName(DC_FILE_OUT, OUTPUT_LABEL);
+ if (!file_name)
+ {
+ fprintf(stderr, "APP: Could not resolve the output file name\n");
+ DC_finishClient(1);
+ }
+
+ outfile = fopen(file_name, outfile_openmode);
+ if (!outfile)
+ {
+ perror("APP: Could not open/create the output file");
+ DC_finishClient(1);
+ }
+ free(file_name);
+
+ /* If we are starting from a checkpoint file, restore the state of
+ * the output file as well */
+#ifdef _WIN32
+ _chsize(fileno(outfile), frac_current_pos);
+#else
+ ftruncate(fileno(outfile), frac_current_pos);
+#endif
+
+ fseek(outfile, 0, SEEK_END);
+}
+
+/* The real work */
+static void do_work(void)
+{
+ int c;
+#ifndef _WIN32
+ struct timespec time_to_sleep;
+#endif
+
+ while ((c = fgetc(infile)) != EOF)
+ {
+ DC_ClientEvent *event;
+
+ c = toupper(c);
+ if (fputc(c, outfile) == EOF)
+ {
+ perror("APP: fputc");
+ DC_finishClient(1);
+ }
+ frac_current_pos++;
+
+ /* Real applications do real computation here that takes time. Here
+ * we will emulate waiting a second at the end of each line */
+
+ if (c == '\n')
+#ifdef _WIN32
+ ::Sleep(1000);
+#else
+ {
+ time_to_sleep.tv_sec=1;
+ time_to_sleep.tv_nsec=0;
+ while (0 > nanosleep(&time_to_sleep, &time_to_sleep))
+ if (errno != EINTR) break;
+ }
+#endif
+
+ /* Check if either the master or the BOINC core client asked
+ * us to do something */
+ event = DC_checkClientEvent();
+ if (!event)
+ continue;
+
+ /* If it is time, do a checkpoint */
+ if (event->type == DC_CLIENT_CHECKPOINT)
+ do_checkpoint();
+
+ /* Make sure we do not leak memory */
+ DC_destroyClientEvent(event);
+ }
+
+ if (fclose(outfile))
+ {
+ perror("APP: Closing the output file has failed");
+ DC_finishClient(1);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int retval;
+
+ retval = DC_initClient();
+ if (retval)
+ {
+ fprintf(stderr, "APP: Failed to initialize the DC-API. Return "
+ "value was %d\n", retval);
+ DC_finishClient(1);
+ }
+ fprintf(stderr, "APP: DC-API initialization was successful.\n");
+
+ init_files();
+ do_work();
+ fprintf(stderr, "APP: Work finished.\n");
+
+ DC_finishClient(0);
+ return(0); // Tho' we never reach this line
+}
+
+#ifdef _WIN32
+
+extern int parse_command_line( char *, char ** );
+
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR Args, int WinMode)
+{
+ LPSTR command_line;
+ char* argv[100];
+ int argc;
+
+ command_line = GetCommandLine();
+ argc = parse_command_line( command_line, argv );
+ return main(argc, argv);
+}
+#endif
+
+
diff --git a/dcapi/examples/uppercase-with-callback/common.h b/dcapi/examples/uppercase-with-callback/common.h
new file mode 100644
index 0000000..ee05c5d
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/common.h
@@ -0,0 +1,12 @@
+/*
+ * Common definitions used by both the master and the client
+ */
+
+#ifndef COMMON_H
+#define COMMON_H
+
+/* Logical names of the input/output files */
+#define INPUT_LABEL "in.txt"
+#define OUTPUT_LABEL "out.txt"
+
+#endif /* COMMON_H */
diff --git a/dcapi/examples/uppercase-with-callback/configure.ac b/dcapi/examples/uppercase-with-callback/configure.ac
new file mode 100644
index 0000000..956aae8
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/configure.ac
@@ -0,0 +1,35 @@
+AC_INIT([Uppercase Example Application], [6.00], [desktopgrid at lpds.sztaki.hu], [uppercase-example])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_SRCDIR([client.c])
+
+dnl The platform code uses the target triplet
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE([foreign])
+
+AC_PROG_CC
+
+dnl We need sed for substituting the XML templates
+AC_PATH_PROG([SED], [sed])
+
+dnl Enable extra warnings if we are using GCC
+if test "$ac_cv_c_compiler_gnu" = yes; then
+ CFLAGS="-Wall -Wmissing-prototypes -Wstrict-prototypes -Wsign-compare ${CFLAGS}"
+fi
+
+AC_ARG_ENABLE([client], AS_HELP_STRING([--disable-client], [do not build the client application]),, [enable_client=yes])
+AC_ARG_ENABLE([master], AS_HELP_STRING([--disable-master], [do not build the master application]),, [enable_master=yes])
+
+AM_CONDITIONAL([BUILD_CLIENT], [test "$enable_client" = yes])
+AM_CONDITIONAL([BUILD_MASTER], [test "$enable_master" = yes])
+
+if test "$enable_client" = yes; then
+ SZDG_DCAPI_CLIENT([], [AC_MSG_ERROR([DC-API client libraries were not found])])
+fi
+
+if test "$enable_master" = yes; then
+ SZDG_DCAPI_MASTER([], [AC_MSG_ERROR([DC-API master libraries were not found])])
+fi
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/dcapi/examples/uppercase-with-callback/dc-api.conf b/dcapi/examples/uppercase-with-callback/dc-api.conf
new file mode 100644
index 0000000..77b31b6
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/dc-api.conf
@@ -0,0 +1,39 @@
+[Master]
+#--------------------------------------------------------
+# General configuration, for both BOINC and LOCAL DC-API implementation
+#--------------------------------------------------------
+
+#
+# Working directory. boinc_appmgr will set it automatically
+#
+
+WorkingDirectory = *Must be specified*
+
+#
+# UUID Instance. boinc_appmgr will set it automatically
+#
+
+InstanceUUID = *Must be specified*
+
+#
+# Debugging level
+#
+
+LogLevel = Debug
+
+#--------------------------------------------------------
+# Configuration for BOINC DC-API implementation
+#--------------------------------------------------------
+
+#
+# BOINC project root directory. boinc_appmgr will set it automatically
+#
+
+ProjectRootDir = *Must be specified*
+
+#--------------------------------------------------------
+# Configuration for LOCAL DC-API implementation
+#--------------------------------------------------------
+[Client-uppercase-example]
+
+name = uppercase-example-client
diff --git a/dcapi/examples/uppercase-with-callback/input.txt b/dcapi/examples/uppercase-with-callback/input.txt
new file mode 100644
index 0000000..f662cc0
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/input.txt
@@ -0,0 +1,233 @@
+"Eml�k�l, hogy eml�kezz, ha eml�kem m�r csak eml�k lesz."
+"Nem az az igazi, akivel le tudsz �lni egy �letet,* hanem az, aki n�lk�l nem."
+"Ne s�rj, hogy v�get�rt!* �r�lj, hogy megt�rt�nt!"
+"Ha lehet, Veled...*...ha nem, n�lk�led...*...de ellened soha!"
+"Az �let �letvesz�lyes.* Eddig m�g mindenki belehalt."
+"Ha nem tetszik, ahogy vezetek, akkor t�n�s a j�rd�r�l!"
+"Az egypup� tev�t az k�l�nb�zteti meg a k�tpup�t�l, aki akarja"
+"Okos pil�ta nem katapult�l alag�tban."
+"�n t�maszkodom re�d,* Te t�maszkodj re�m,* �s megl�tod hogy minden rendben lesz."
+"Ha az igazs�g az utadban �ll,* ez azt jelenti, hogy rossz �ton j�rsz."
+"H�romf�le ember l�tezik.* Aki tud sz�molni �s aki nem!"
+"Egy perc hossz�s�g�t az hat�rozza meg,* hogy a WC-ajt� melyik oldal�n v�rakozol!"
+"Az is d�nt�s, ha d�ntened kell,* �s �gy d�ntesz, hogy nem d�ntesz!"
+"Egyetlen baj a semmittev�ssel,* hogy sohasem tudod, mikor v�gezt�l."
+"Egyszer kipr�b�ltam a telefon-szexet,* de a lyukak t�l kicsik voltak."
+"�ll�t�lag t�z �v m�lva v�get �r a h�t sz�k esztend�."
+"�rdekl�d�s hi�ny�ban a holnap elmarad!"
+"Azt hiszem felfordulok �s megn�zem mi van odalent."
+"Az �riember olyan vad�llat, aki valameddig tud v�rni."
+"Csak a naivak hiszik azt hogy a l�gy a szob�ban a kij�ratot keresi!"
+"M�r hetedik �ve, hogy az any�som �tj�n Kar�csonykor.* Ideje �j�tani. Id�n be is fogjuk engedni.""
+"Nem szoktam vajas kenyeret kenni...*...az n�lam m�r f�z�snek sz�m�t."
+"Ha a kukoricaolaj kukoric�b�l k�sz�l...*...akkor a babaolaj?"
+"M�r l�tom a f�nyt az alag�t v�g�n...*...de mi�rt dud�l?"
+"A menzai �tkez�s titka a gyorsas�g.* Mire r�j�ssz, hogy milyen rossz, m�r meg is etted."
+"Akkor van g�z, ha a h�lyes�g szorgalommal p�rosul!"
+"Az �let olyan, mint a forr� f�rd�.* Min�l tov�bb tart ann�l r�ncosabb leszel!"
+"Az igaz bar�t a kezedet fogja �s a sz�vedet sim�tja."
+"Az �let olyan, mint a kis�cs�m.* �lland�an vissza �t, de m�gis szeretem."
+"Az �jjel azt �lmodtam hogy megettem egy kil� vattacukrot.* Mikor fel�bredtem nem volt meg a p�rn�m."
+"A legut�bbi �lmomat �gy defini�lom, hogy de-fini-�lom."
+"Az �ram alatt l�v� alkatr�sz ugyan�gy n�z ki, mint amelyik nincs �ram alatt...*...csak m�s a fog�sa."
+"A feles�gem azzal v�dol, hogy sose figyelek r�.* Vagy valami ilyesmivel."
+"Ha a fekete doboz olyan anyagb�l van, ami mindent kib�r,* akkor mi�rt nem csin�lj�k abb�l az eg�sz rep�l�t?"
+"Olyan randa vagyok, hogy a pszichi�tern�l mindig hason kell fek�dn�m."
+"J�l csak a sz�v�vel l�t az ember...*...ami igaz�n l�nyeges az a szemnek l�thatatlan."
+"- R�vid leszek - mondta a kigy�, �s a vonat el� vetette mag�t."
+"Ha megig�rem, hogy hi�nyozni fogsz...*...elm�sz?"
+"Szabad orsz�gban szabad ember szabad akarat�bol azt mond �s azt tesz...*...amit szabad."
+"Olyan hideg volt, hogy egy �gyv�d a saj�t zseb�be tette a kez�t!"
+"A n�i nemmel ne foglalkozz!* Csak a n�i IGENnel!"
+"F�ny derult a Loch-Ness-i sz�rny titk�ra! Nincs is titk�ra..."
+"Most j�v�k egy IQ tesztr�l. Szerencsere negativ!"
+"Az alkohol �l, butit* �s savakkal aldehideket k�pez."
+"Ne vesztegesd id�det arra, aki nem tart T�ged �rdemesnek arra, hogy veled t�ltse."
+"Az �let egy h�lye j�t�k. De a grafik�ja nagyon ott van!! "
+"Egy mosoly semmibe sem ker�l, de nagyon sokat �r!"
+"Olyan levertnek �rzem magam!" - mondta a kar�..."
+"Olyan nincs, hogy vereked�s k�zben futballmeccs t�r ki?"
+"A pul�ver az a ruhadarab, amelyet a gyereknek halad�ktalanul fel kell venni, ha f�zik a mama."
+"Ha igaz az, hogy a term�szetben minden kiegyenl�t�dik,* akkor valahol nagyon sok okoss�g van elrejtve!"
+"A m�ltkor l�ttam egy ajt�t, amire az volt ki�rva, hogy N�K.* Bementem, de csak egy v�c� volt."
+"Nem mintha f�ln�k meghalni...*..csak nem akarok ottlenni, amikor bek�vetkezik."
+"Olyan ronda vagy, hogy a f�nyk�peddel fogamz�sg�tl� tablett�t lehetne rekl�mozni."
+"�vekig nem sz�ltam a feles�gemhez...* Nem akartam f�lbeszakitani."
+"Tegnap megmentettem egy l�nyt a nemi er�szakt�l...* Uralkodtam magamon."
+"Gyerekkoromban a sz�leim sokszor elk�lt�ztek. De �n mindig megtal�ltam �ket."
+"�s egy�tt alszik majd a b�r�ny �s a farkas, de a b�r�ny nem alszik majd valami j�l."
+"Egy gyorsolvas�-tanfolyam elv�gz�se ut�n* a H�bor� �s b�k�t nem eg�szen 20 perc alatt olvastam el...* Valami oroszokr�l sz�l."
+"Nem az a k�rd�s, hogy van-e menyorsz�g,* hanem hogy h�nyig van nyitva �s melyik busszal lehet odajutni."
+"Az agyam a m�sodik legkedvesebb szervem."
+"A p�nz jobb, mint a szeg�nys�g...*...m�r csak anyagi szempontb�l is."
+"Az eg�szs�g val�szin�leg a hal�l leglassabb form�ja."
+"A sziv p�ros szerv... *...csak a p�rja valaki m�sban van."
+"A v�rfert�z�s maradjon a csal�dban."
+"Megpr�b�ltalak leveg�nek n�zni, de r�j�ttem, hogy leveg� n�lk�l nem tudok �lni."
+"A l�t hat�rozza meg a tudatot...*...ha megiszod a l�t, a tudatod elsz�ll."
+"Ha azt mondt�k nem vagy �r�lt...*...f�lreinform�ltak."
+"Az ember er�s, de szive megszakad, ha azt kit szeret, szeretnie nem szabad."
+"Ma van a tegnap holnapja..."
+"A feles�gem egy f�nyerem�ny...*...meg is �t�ttem."
+"A sziv olyan, mint egy sz�l vir�g, ha nem szeretik elhervad."
+"K�lt� az, aki nem �r ki a lap sz�l�ig a k�nyvben."
+"K�nyebb utol�rni a hazug embert, ha s�nta."
+"L�gy kedves gyerekeiddel,* mert �k fogj�k neked kiv�lasztani a szoci�lis otthont."
+"Irigys�ged megtiszteltet�s sz�momra, de sajnos nem tudom viszonozni."
+"Mindenki j� valamire, ha m�sra nem, h�t elrettent� p�ld�nak."
+"Ha k�pes vagy arra, hogy a hib�idb�l tanulj, akkor m�g sokat fogsz tanulni."
+"Hatalmas kagyl�gy�jtem�nyem van, amit csak �gy elsz�rva tartok a vil�g tengerpartjain.* Tal�n m�r l�ttad Te is..."
+"A vita nemesit...*...v�gs� esetben pedig ott a l�ncf�r�sz."
+"Ha pr�b�lkozol, csal�dhatsz, de ha nem pr�b�lkozol...*...akkor v�ged."
+"Ha az elef�ntot megragadod a k�t h�ts� l�b�n�l �s az �llat menek�lni akar...*...akkor ne er�ltesd a dolgot."
+"A vizcsapb�l viz folyik...*...a g�zcsapb�l g�z...* De mi j�n a t�zcsapb�l?"
+"A serd�l�kor akkor kezd�dik, amikor a sz�l�k kezdenek nehezen kezelhet�k lenni."
+"�ltal�ban elalv�sig �bren szoktam lenni."
+"�rdekl�d�s hi�ny�ban a holnap elmarad."
+"A t�nc egy vizszintes ir�nyu v�gy f�gg�leges kifejez�d�se."
+"Ki a hideget nem szereti...*...h�ember nem lehet."
+"A tapasztalat j� iskola, csak a tandij magas."
+"Okos vagy, ha csak a fel�t hiszed el annak, amit hallassz.* Zseni�lis, ha tudod, melyik fel�t!"
+"Ugy �rzem magam, mint f�ll�bu ember a fen�kberug� versenyen."
+"Veget�ri�nus = r�gi indi�n sz�* jelent�se: b�na vad�sz"
+"A leg�gyesebb �llat az �rge...*...buz�val teli pofazacsk�val is k�pes rep�lni,* mik�zben egy baglyot egyensulyoz a h�t�n."
+"Noone can tell me, nobody knows...*...where the wind comes from, where the wind goes..."
+"K�rustag voltam, amig r� nem j�ttek honnan j�n a zaj."
+"Megpr�b�lok �r�kk� �lni...*...eddig siker�lt..."
+"Szerelem, ha egyik a m�sikat rep�lni hagyja, de ha lezuhan,* f�l sz�rny�t k�lcs�nadja."
+"- A helymeghat�roz�st tal�n n�gyszemk�zt k�ne megbesz�lni...* - ...Kicsit lejjebb nem lehetne?"
+"...�s beleborzongok, l�tv�n, hogy N�lk�led �ltem."
+"Felirat kuty�s h�z kapuj�n:* - �n 6 m�sodperc alatt gyorsulok sz�zra. �s Te?"
+"Felirat kuty�s h�z kapuj�n:* - Kedves bet�r�! A kutya mindenkit beenged.* A gondok kifel� j�vet kezd�dnek."
+"Felirat kuty�s h�z kapuj�n:* - Vigy�zat! Kutya ugyan nincs,* de any�som itthon van!"
+"Felirat a kutyah�zon:* Az �jszakai bel�poket itt lyukasztj�k "
+"Nincs vele semmi baj, csak egyszer� a lelke, mint egy barlangrajz."
+"Annyi p�nzem van, ami b�ven kitart �letem v�g�ig...*...felt�ve, hogy ma d�lut�n n�gykor meghalok."
+"A hiba olykor a hibakeres� k�sz�l�k�ben van."
+"Az �let r�z�s �tj�n a bar�tok a leng�scsillap�t�k."
+"Ne feledd: ha valaki felbosszant, az arcodon 42 izom r�ndul�ssze.*De csup�n n�gy izom kell ahhoz, hogy kinyujtsd a kezed, �s pof�n v�gd."
+"Dud�lj nyugodtan, �ppen t�rat cser�lek..."
+"A h�lyes�g a hidrog�n mellett a legnagyobb mennyis�gben el�fordul� anyag a vil�gegyetemben"
+"M�r a j�v� sem a r�gi..."
+"A b�natomat italba akartam folytani, de tud �szni az a bestia."
+"Szeretem az extr�m sportokat, mert k�zben rengeteg �j bar�tot ismerek meg:*ment�s�ket, balesetiseket, gy�gytorn�szokat �s kedves embereket, akik kih�vt�k a ment�ket!"
+"Ismertem egy olyan cs�nya n�t, hogy amikor e-mailben elk�ldte a f�nyk�p�t,* felismerte az antiv�rus..."
+"Nekirohant, mint r�szeg f�rj a kivil�g�tatlan sodr�f�nak."
+"Az �g�ret sz�p sz�, de a Landwirtschaftausstellung m�g szebb!"
+"Ketten j�ttek ki az erd�b�l. Az egyik futva, a m�sik medve."
+"Someday you might understand...* Egy sz�p napon majd meg�rted..."
+"Live your life without regrets...* don't be someone, who they forget..."
+"Haribo macht Kinder froh, und erwachsene ebenso!"
+"Eszem faszom meg�ll..."
+"Magyarorsz�g �llamform�ja r�ntotth�s!"
+"Ez egy lelkes tansz�k!"
+"Mennyi az id�?*Nem tudom, �lland�an v�ltozik."
+"Tingles and everything..."
+"K�ssz, hogy ilyen fasz volt�l!"
+"Csal�df�m m�lys�gi bej�r�s�val kapcsolatos leveleket mag�nba k�rn�m."
+"Ez nem sziv�s...*...ez BME!"
+"Vil�gh�r� von�sn�gyes keres k�t heged�st �s egy csellist�t."
+"N�h�ny ember intelligenci�j�n manaps�g m�r egy intelligens mos�g�p is t�ltesz..."
+"Min�l bonyolultabb a helyzet, ann�l higgadtabban kell vislekedni."
+"Aj�nlom ezt azok figyelm�be, akik a tegnapi el�ad�st nem tudt�k mintav�telezni..."
+"Sz�gyen a fut�s, de a kurva anyj�t annak, aki �ld�z!"
+"WHAT!?!..."
+"El�l a t�ltosok gyorsitj�k...H�tul a bar�tok megtolj�k!"
+"�s lesz aki tudja mire val�...a 424-es csatahaj�!"
+"Mindig mondtam, hogy megmondtam..."
+"Fogadd el, hogy egyszer te vagy a galamb,*m�skor meg a szobor!"
+"Egy dolog biztos, m�gpedig az, hogy semmi sem biztos.*Vagyis nem biztos, hogy semmi sem biztos."
+"Az ember �tlagos alv�sig�nye:*csakm�g 5 perc."
+"Hamlettnek �zenem : LENNI!!!"
+"K�t dolgot nem szabad csin�lni: a tegnap est�n gondolkodni,*�s m�g egyszer annyit inni..."
+"Sz�p vagy sz�p vagy mint az �lom, �n a t�k�r garant�lom."
+"Ne menj ilyen szorosan elottem!"
+"Csak a kezd�k sz�rf�znek a neten...�n cirk�lok..."
+"K�ldtem neki egy SMS-t, hogy irja meg a telefonsz�m�t, mert elfelejtettem!"
+"Tegnap olyan inform�ci��hs�g t�rt r�m, hogy megettem egy postagalambot."
+"Sp�rolj a vizzel! F�r�dj m�sodmagaddal!"
+"Forditsd arcodat a Nap fel�, akkor az �rny�kok m�g�d ker�lnek."
+"A biztons�gi �v lehet hogy korl�toz a mozg�sban,*de m�g mindig nem annyira mint a tol�sz�k!"
+"A szenilit�sban az a legjobb,*hogy saj�t magad elol dughatod el a kar�csonyi aj�nd�kokat."
+"Andersen meghalt...*Mese nincs..."
+"A d�monokat dobol�ssal el�zni igyekvo bennsz�l�tteket len�zik a civiliz�lt amerikaiak,*akik dud�l�ssal akarj�k feloszlatni a k�zleked�si dug�kat..."
+"A sz�vegszerkeszt� elsz�ll, az ir�s megmarad."
+"Elv�rni a vil�gt�l, hogy igazs�gos legyen veled, mert j� vagy, ugyanolyan,*mintha azt v�rod egy bik�t�l, hogy ne t�madjon meg, mert veget�ri�nus vagy."
+"A s�n egy makacs mad�r.*Csak akkor hajlando rep�lni ha belerugok."
+"Ne feledd: amat�r�k �pitett�k No� b�rk�j�t - profik a Titanicot!"
+"A tizezer m�rf�ldes utaz�s is egyetlen l�p�ssel kezd�dik."
+"Tanar Ur, ugye lesz OHV? >-)"
+"The most valuable natural resource in the 21st century is the human brain..."
+"But life goes on..."
+"Mi a lehetetlen vagyunk egy lehetetlen vil�gegyetemben..."
+"Minden �llat egyenl�, de vannak k�zt�k egyenl�bbek."
+"A h�zass�g kiv�l� iskolap�lda, de �n m�g nem vagyok iskola�rett..."
+"Infinity plus shipping and handling"
+"Only always..."
+"H�rom m�gikus sz�: K�sz�n�m, K�rem, Abrakadabra"
+"Akkor lenn�nk boldogok, ha tudn�nk r�la..."
+"Ne s�llyed le a h�lye ember szintj�re, mert legy�z a rutinj�val!"
+"Az �let nem m�rf�ldk�vekbol, hanem pillanatokb�l �ll"
+"- Mennyi? / - 42. / - Mi 42? / - Mi mennyi?"
+"Gy�l�l�m a Windowst..."
+"-Think outside the box. --What box? -Exactly"
+"Ki a gomb�t szereti, rossz ember nem lehet... sok�ig."
+"Eszem szerint pesszimista vagyok, akaratom �s hitem arra vezet, hogy optimista legyek."
+"L�gy �nmagad s tanuld meg j�l: ha majd Magadra lelsz, elveszted mind a bajt."
+"Az a puszta t�ny, hogy valaki ismeri saj�t baj�nak ok�t, m�r maga is gy�gy�t� erej�!"
+"Okoskod�s a tett hal�la."
+"Vigy�zz! Nem csak a kard, a sz� is sebezhet."
+"Ne a p�nz�rt! Egym�s�rt �lj�nk."
+"N�h�ny orvos �lma: beteg n�lk�li betegs�g."
+"D�h�nket, f�lt�kenys�g�nket nem a t�bbi ember okozza."
+"Minden probl�m�nak t�bb t�k�letes megold�sa is van."
+"Az �let a hal�l �lma."
+"Az es� k�nnyeket s�rt az ablakra."
+"A gondban l�v� ember seg�t�s�nek egyik legjobb m�dja egyszer�en vele lenni."
+"Ember vagyok. �s szeretnem kell valakit."
+"Okos enged, ha m�r szenved."
+"Te j� �g, milyen sz�p vagy!"
+"Soha ne add f�l. Soha!"
+"Ne gy�zk�dd az agyadat, a hiba a val�s�gban van."
+"A t�rv�nyek azokra vonatkoznak, akik betartj�k �ket."
+"A tigrist a vad�szat el�tt gondolatban el kell ejteni, a t�bbi csak formalit�s."
+"Minden ember annyit �r, amennyit �nmag�n dolgozott."
+"Marathonn�l a rem�nytelens�g gy�zedelmeskedett."
+"Az �lmokat nem szabad elfelejteni."
+"A cs�sz�-m�sz�k soha nem botlanak meg."
+"Ha kiv�gtad az utols� f�t �s megm�rgezted az utols� foly�t, r� fogsz j�nni arra, hogy a p�nzt nem lehet megenni."
+"A tan�tv�ny nem ed�ny, amit megt�lteni, hanem f�klya, amit l�ngra lobbantani kell."
+"Egy n�i sz�v hossz� t�von val� megtart�s�nak eszk�ze az orgazmus"
+"Egyenk�nt a lavina h�pelyhei is �rtatlanok..."
+"Killer Bunnies and the quest for the magic carrot"
+"Huh, I made You look!"
+"Ezt a h�ly�t, bazdmeg..."
+"Te zsibbad�k..."
+"- The question is: What is a mana-mana? - The question is: Who cares?!?"
+"�n 'j�' dikt�tor lenn�k...>)"
+"Hogy a Force-feedbackes kapany�l �sse ki a fogadat..."
+"Rule #4: Never make a promise you can't keep"
+"Amerika: �lni �s �lni hagyni...Magyarorsz�g: �lni �s eltiporni...Makes a tiny little difference"
+"Magyaritottak a telefon kozpontban is. Azt irtak ki: tavbeszelo centrum."
+"A person's true wealth is the good he or she does in the world."
+"To accomplish great things, we must not only act,*ut also dream; not only plan, but also believe."
+"To accomplish great things,*we must not only dream, but act."
+"Failure is only the opportunity to begin again,*this time more wisely."
+"Great changes may not happen right away,*ut with effort even the difficult may become easy."
+"The willow knows what the storm does not:*that the power to endure harm*outlives the power to inflict it."
+"Don't ask for a light load,*ut rather ask for a strong back."
+"What counts is not necessarily the size of*the dog in the fight - it's the*size of the fight in the dog."
+"To reach a port we must sail,*sometimes with the wind & sometimes against it.*ut we must not drift or lie at anchor."
+"If the going is real easy, beware,*you may be headed down hill."
+"Neked ugye MI a bajod?"
+"The electricity is a very simple thing"
+"well, something about you just makes me smile"
+"I mean, one day, out of no where.... boom.... there is Adam at the bean counter"
+"You should start your own company one day"
+"A legt�bb ember lusta k�z�nyben �li le �let�t"
+"We spend as we lend Cos we're happy to pretend Everything's gonna be OK"
+"Did it ever make sense to you to say Bye"
+"No one I know could ever keep up with you."
+"~, sweet ~"
+"doesn't said"
+"A ver�b bal �s jobb sz�rnya k�z�tt az a k�l�nbs�g, hogy mind a ketto egyforma, de k�l�n�sen a bal"
\ No newline at end of file
diff --git a/dcapi/examples/uppercase-with-callback/master.c b/dcapi/examples/uppercase-with-callback/master.c
new file mode 100644
index 0000000..b16284b
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/master.c
@@ -0,0 +1,283 @@
+/**************************************************
+ * Uppercase Master program
+ *
+ * Created by: Gabor Vida
+ * Fine tuned by: Adam Kornafeld
+ * Upgraded to DC-API 2.0 by: Gabor Vida
+ *
+ * The aim of the program is to process text files (make all of their
+ * characters uppercase) in a Public Resource Computing environment. The
+ * program follows the client server model, therefore having a server-side and
+ * a client-side part.
+ *
+ * This is the server-side part of the program. It creates WorkUnits (WUs) for
+ * a Boinc project using the DC Application Programming Interface. The program
+ * takes a text file (master_input) divides it to smaller parts of LINES_PER_WU
+ * lines each and submits them into the PRC-infrastructure, where they get
+ * processed by the clients. After the clients have returned the results of the
+ * WUs, the program assimilates them and constructs a final output file, by
+ * concatenating the output of the results.
+ *
+ *****************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc.h>
+
+#include <stdlib.h>
+#include <getopt.h>
+#include <string.h>
+#include <limits.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "common.h"
+
+#define LINES_PER_WU 20
+
+/* Number of WUs we have created */
+static int created_wus;
+/* Number of results we have received so far */
+static int processed_wus;
+
+/* Command line options */
+static const struct option longopts[] =
+{
+ { "config", required_argument, NULL, 'c' },
+ { "help", no_argument, NULL, 'h' },
+ { NULL }
+};
+
+/* Concatenate all results in their original order to form the final output */
+static void calculate_final_result(void)
+{
+ FILE *output;
+ int i;
+
+ output = fopen("final_output.txt", "w");
+ if (!output)
+ {
+ DC_log(LOG_ERR, "Cannot open final_output.txt for writing: %s",
+ strerror(errno));
+ exit(1);
+ }
+
+ for(i = 0; i < created_wus; i++)
+ {
+ char result_filename[PATH_MAX], buf[256];
+ FILE *result;
+
+ snprintf(result_filename, sizeof(result_filename),
+ "result_%d.txt", i);
+ result = fopen(result_filename, "r");
+ if (!result)
+ DC_log(LOG_WARNING, "The result for WU %d is missing "
+ "from the final output", i);
+ else
+ {
+ while (fgets(buf, sizeof(buf), result))
+ fprintf(output, buf);
+ fclose(result);
+ }
+ }
+
+ fclose(output);
+}
+
+/* Copies the output files into the master working directory */
+static void process_result(DC_Workunit *wu, DC_Result *result)
+{
+ char *output_filename, *tag, cmd[256];
+
+ /* Internal housekeeping of the number of results we have seen */
+ processed_wus++;
+
+ /* Extract our own private identifier */
+ tag = DC_getWUTag(wu);
+
+ if (!result)
+ {
+ DC_log(LOG_WARNING, "Work unit %s has failed", tag);
+ free(tag);
+
+ /* In a real application we would create a new work unit
+ * instead of the failed one and submit it again. Here we
+ * just let it fail. */
+ return;
+ }
+
+ output_filename = DC_getResultOutput(result, OUTPUT_LABEL);
+ if (!output_filename)
+ {
+ DC_log(LOG_WARNING, "Work unit %s contains no output file",
+ tag);
+ free(tag);
+
+ /* The same comment applies here as above for the no result
+ * case */
+ return;
+ }
+
+ DC_log(LOG_NOTICE, "Work unit %s has completed", tag);
+
+ /* The result file is available only as long as the work unit exists,
+ * so we have to save it if we want to use it later */
+ snprintf(cmd, sizeof(cmd), "/bin/cp '%s' 'result_%s.txt'",
+ output_filename, tag);
+ system(cmd);
+
+ /* We no longer need the work unit */
+ DC_destroyWU(wu);
+
+ free(output_filename);
+ free(tag);
+}
+
+static void create_work(void)
+{
+ FILE *input;
+
+ input = fopen("input.txt", "r");
+ if (!input)
+ {
+ DC_log(LOG_ERR, "Failed to open the master input file: %s",
+ strerror(errno));
+ exit(1);
+ }
+
+ while (!feof(input))
+ {
+ char wu_tag[16], buf[1024];
+ DC_Workunit *wu;
+ FILE *f;
+ int i;
+
+ /* Tag every WU with its index, so we can reconstruct the
+ * final output file in the correct order */
+ snprintf(wu_tag, sizeof(wu_tag), "%d", created_wus + 1);
+
+ wu = DC_createWU("uppercase-example", NULL, 0, wu_tag);
+ if (!wu)
+ {
+ DC_log(LOG_ERR, "Work unit creation has failed");
+ exit(1);
+ }
+
+ f = fopen("wu-input.txt", "w");
+ if (!f)
+ {
+ DC_log(LOG_ERR, "Failed to create wu-input.txt: %s",
+ strerror(errno));
+ exit(1);
+ }
+
+ for (i = 0; i < LINES_PER_WU; i++)
+ {
+ if (!fgets(buf, sizeof(buf), input))
+ break;
+ fprintf(f, "%s", buf);
+ }
+ fclose(f);
+
+ if (DC_addWUInput(wu, INPUT_LABEL, "wu-input.txt",
+ DC_FILE_VOLATILE))
+ {
+ DC_log(LOG_ERR, "Failed to register WU input file");
+ exit(1);
+ }
+ if (DC_addWUOutput(wu, OUTPUT_LABEL))
+ {
+ DC_log(LOG_ERR, "Failed to register WU output file");
+ exit(1);
+ }
+
+ if (DC_submitWU(wu))
+ {
+ DC_log(LOG_ERR, "Failed to submit WU");
+ exit(1);
+ }
+
+ /* If everything went well, increment the number of WUs we have
+ * created */
+ ++created_wus;
+ }
+ fclose(input);
+}
+
+static void print_help(const char *prog) __attribute__((noreturn));
+static void print_help(const char *prog)
+{
+ const char *p;
+
+ /* Strip the path component if present */
+ p = strrchr(prog, '/');
+ if (p)
+ prog = p;
+
+ printf("Usage: %s {-c|--config} <config file>\n", prog);
+ printf("Available options:\n");
+ printf("\t-c <file>, --config <file>\tUse the specified config. file\n");
+ printf("\t-h, --help\t\t\tThis help text\n");
+ exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+ char *config_file = NULL;
+ int c;
+
+ while ((c = getopt_long(argc, argv, "c:h", longopts, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'c':
+ config_file = optarg;
+ break;
+ case 'h':
+ print_help(argv[0]);
+ break;
+ default:
+ exit(1);
+ }
+ }
+
+ if (optind != argc)
+ {
+ fprintf(stderr, "Extra arguments on the command line\n");
+ exit(1);
+ }
+
+ /* Specifying the config file is mandatory, otherwise the master can't
+ * run as a BOINC daemon */
+ if (!config_file)
+ {
+ fprintf(stderr, "You must specify the config file\n");
+ exit(1);
+ }
+
+ /* Initialize the DC-API */
+ if (DC_initMaster(config_file))
+ {
+ fprintf(stderr, "Master: DC_initMaster failed, exiting.\n");
+ exit(1);
+ }
+
+ /* We need the result callback function only */
+ DC_setMasterCb(process_result, NULL, NULL);
+
+ DC_log(LOG_NOTICE, "Master: Creating work units");
+ create_work();
+ DC_log(LOG_NOTICE, "Master: %d work units have been created. Waiting "
+ "for results...", created_wus);
+
+ /* Wait for the work units to finish */
+ while (processed_wus < created_wus)
+ DC_processMasterEvents(600);
+
+ /* Got all the results -> build the final output file */
+ calculate_final_result();
+
+ return 0;
+}
diff --git a/dcapi/examples/uppercase-with-callback/uppercase-example-client.xml.in b/dcapi/examples/uppercase-with-callback/uppercase-example-client.xml.in
new file mode 100644
index 0000000..f53583f
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/uppercase-example-client.xml.in
@@ -0,0 +1,27 @@
+<?xml version="1.0" standalone="no"?>
+<client>
+ <!-- Application name -->
+ <name>uppercase-example</name>
+
+ <!-- User-friendly name for Boinc -->
+ <user_friendly_name>Uppercase example</user_friendly_name>
+
+ <!-- Application version. Boinc requirements:
+ - The version number must contain two components (major.minor)
+ - Both component may be 1 or 2 digits long
+ - The major version must be the same as the Boinc server major
+ version -->
+ <version>@PACKAGE_VERSION@</version>
+
+ <platform>
+ <!-- The name of the platform -->
+ <name>@target@</name>
+
+ <!-- The name of the main client binary. It will be
+ automatically renamed to the name expected by Boinc -->
+ <binary>uppercase-example-client</binary>
+
+ <!-- Additional files can also be installed -->
+ <!-- <lib>winlib.dll</lib> -->
+ </platform>
+</client>
diff --git a/dcapi/examples/uppercase-with-callback/uppercase-example-master.xml.in b/dcapi/examples/uppercase-with-callback/uppercase-example-master.xml.in
new file mode 100644
index 0000000..6ebb70b
--- /dev/null
+++ b/dcapi/examples/uppercase-with-callback/uppercase-example-master.xml.in
@@ -0,0 +1,41 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ Configuration template for the uppercase example application
+-->
+<master>
+ <!-- Application name -->
+ <name>uppercase-example</name>
+
+ <!-- Application version. There are no restrictions for the format of
+ master version numbers -->
+ <version>@PACKAGE_VERSION@</version>
+
+ <!-- Data files used by the master -->
+ <files>
+ <file>input.txt</file>
+ </files>
+
+ <!-- Master daemon definition -->
+ <daemon>
+ <binary>uppercase-example-master</binary>
+ <arguments>
+ <arg>--config</arg>
+ <arg>${workdir}/dc-api.conf</arg>
+ </arguments>
+ </daemon>
+
+ <!-- The application manager script will substitute the correct
+ values for us -->
+ <dcapi-conf>dc-api.conf</dcapi-conf>
+
+ <!-- Validator daemon definition -->
+ <daemon>
+ <name>sample_trivial_validator</name>
+ <arguments>
+ <arg>-d</arg>
+ <arg>3</arg>
+ <arg>-app</arg>
+ <arg>uppercase-example</arg>
+ </arguments>
+ </daemon>
+</master>
diff --git a/dcapi/gtk-doc.make b/dcapi/gtk-doc.make
new file mode 100644
index 0000000..354ffb7
--- /dev/null
+++ b/dcapi/gtk-doc.make
@@ -0,0 +1,173 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+EXTRA_DIST = \
+ $(content_files) \
+ $(HTML_IMAGES) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+ $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+else
+all-local:
+endif
+
+docs: html-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo 'gtk-doc: Scanning header files'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && \
+ gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+ else \
+ cd $(srcdir) ; \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ @echo 'gtk-doc: Rebuilding template files'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+ touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+ @true
+
+tmpl/*.sgml:
+ @true
+
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+ @echo 'gtk-doc: Building XML'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+ touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo 'gtk-doc: Building HTML'
+ @-chmod -R u+w $(srcdir)
+ rm -rf $(srcdir)/html
+ mkdir $(srcdir)/html
+ cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+ @echo 'gtk-doc: Fixing cross-references'
+ cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ touch html-build.stamp
+
+##############
+
+clean-local:
+ rm -f *~ *.bak
+ rm -rf .libs
+
+distclean-local:
+ cd $(srcdir) && \
+ rm -rf xml $(REPORT_FILES) \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+ cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+ -installfiles=`echo $(srcdir)/html/*`; \
+ if test "$$installfiles" = '$(srcdir)/html/*'; \
+ then echo '-- Nothing to install' ; \
+ else \
+ $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+ for i in $$installfiles; do \
+ echo '-- Installing '$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+ done; \
+ echo '-- Installing $(srcdir)/html/index.sgml' ; \
+ $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+ which gtkdoc-rebase >/dev/null && \
+ gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) ; \
+ fi
+
+
+uninstall-local:
+ rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+ @false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+ mkdir $(distdir)/tmpl
+ mkdir $(distdir)/xml
+ mkdir $(distdir)/html
+ -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+ -cp $(srcdir)/xml/*.xml $(distdir)/xml
+ cp $(srcdir)/html/* $(distdir)/html
+ -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+ -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+ cd $(distdir) && rm -f $(DISTCLEANFILES)
+ -gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/dcapi/include/Makefile.am b/dcapi/include/Makefile.am
new file mode 100644
index 0000000..b9199a7
--- /dev/null
+++ b/dcapi/include/Makefile.am
@@ -0,0 +1,2 @@
+include_HEADERS = dc.h dc_client.h dc_common.h
+noinst_HEADERS = dc_internal.h
diff --git a/dcapi/include/dc.h b/dcapi/include/dc.h
new file mode 100644
index 0000000..0e3f062
--- /dev/null
+++ b/dcapi/include/dc.h
@@ -0,0 +1,217 @@
+/*
+ * DC-API: Distributed Computing Platform for Master-Worker Applications
+ *
+ * Master side
+ *
+ * Authors:
+ * Norbert Podhorszki <pnorbert at sztaki.hu>
+ * Gabor Vida <vida at sztaki.hu>
+ * Gabor Gombas <gombasg at sztaki.hu>
+ *
+ * Copyright MTA SZTAKI, 2006
+ */
+#ifndef _DC_H_
+#define _DC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <dc_common.h>
+
+/********************************************************************
+ * Constant definitions
+ */
+
+/* Possible states of a work unit */
+typedef enum {
+ DC_WU_READY, /* Created, but not yet submitted */
+ DC_WU_RUNNING, /* Submitted and running */
+ DC_WU_FINISHED, /* The WU finished normally according to the grid
+ infrastructure. Note that the application client
+ returning an error code is considered a 'normal'
+ shutdown as far as the infrastructure is concerned,
+ so you should check the exit status and/or other
+ output. */
+ DC_WU_SUSPENDED,/* The work unit is suspended */
+ DC_WU_ABORTED, /* The WU was aborted for some reason (infrastructure
+ failure, no canonical result, or by calling
+ DC_cancel()) */
+ DC_WU_UNKNOWN /* The WU's state is not known. This may happen for
+ example when a WU is serialized, then it finishes,
+ and upon deserialization the underlying grid
+ infrastructure no longer knows about it */
+} DC_WUState;
+
+/* Possible event types */
+typedef enum {
+ DC_MASTER_RESULT, /* A DC_Result is available */
+ DC_MASTER_SUBRESULT, /* A sub-result is available */
+ DC_MASTER_MESSAGE /* A message has arrived */
+} DC_MasterEventType;
+
+
+/********************************************************************
+ * Data types
+ */
+
+/* Opaque type representing a workunit */
+typedef struct _DC_Workunit DC_Workunit;
+
+/* Opaque type representing a result */
+typedef struct _DC_Result DC_Result;
+
+/* Description of a DC-API event */
+typedef struct _DC_MasterEvent DC_MasterEvent;
+struct _DC_MasterEvent
+{
+ DC_MasterEventType type;
+ DC_Workunit *wu;
+ union
+ {
+ DC_Result *result;
+ DC_PhysicalFile *subresult;
+ char *message;
+ };
+};
+
+/* Prototype of the result handling callback function. */
+typedef void (*DC_ResultCallback)(DC_Workunit *wu, DC_Result *result);
+
+/* Prototype of the sub-result handling callback. */
+typedef void (*DC_SubresultCallback)(DC_Workunit *wu,
+ const char *logicalFileName, const char *path);
+
+/* Prototype of the message-handling callback. */
+typedef void (*DC_MessageCallback)(DC_Workunit *wu, const char *message);
+
+
+/********************************************************************
+ * Function prototypes: Library utilities
+ */
+
+/* Initializes the DC-API. */
+int DC_initMaster(const char *configFile);
+
+/* Sets the callback functions that will be called when a particular event. */
+void DC_setMasterCb(DC_ResultCallback resultcb,
+ DC_SubresultCallback subresultcb, DC_MessageCallback msgcb);
+
+/* Set the callback functions for particular events */
+void DC_setResultCb(DC_ResultCallback cb);
+void DC_setSubresultCb(DC_SubresultCallback cb);
+void DC_setMessageCb(DC_MessageCallback cb);
+
+/* Queries the number of WUs known to the API in the given state. */
+int DC_getWUNumber(DC_WUState state);
+
+/* Queries per-client configuration variables */
+char *DC_getClientCfgStr(const char *clientName, const char *key,
+ int fallbackGlobal);
+
+/* Queries per-client configuration variables */
+int DC_getClientCfgInt(const char *clientName, const char *key,
+ int defaultValue, int fallbackGlobal);
+
+/* Queries per-client configuration variables */
+double DC_getClientCfgDouble(const char *clientName, const char *key,
+ double defaultValue, int fallbackGlobal);
+
+/* Queries per-client configuration variables */
+int DC_getClientCfgBool(const char *clientName, const char *key,
+ int defaultValue, int fallbackGlobal);
+
+/********************************************************************
+ * Function prototypes: Event processing
+ */
+
+/* Waits for events and processes them. */
+int DC_processMasterEvents(int timeout);
+
+/* Checks for events and return them. */
+DC_MasterEvent *DC_waitMasterEvent(const char *wuFilter, int timeout);
+
+/* Checks for events for a particular WU. */
+DC_MasterEvent *DC_waitWUEvent(DC_Workunit *wu, int timeout);
+
+/* Destroys an event. */
+void DC_destroyMasterEvent(DC_MasterEvent *event);
+
+/********************************************************************
+ * Function prototypes: Work unit management
+ */
+
+/* Creates one work unit. */
+DC_Workunit *DC_createWU(const char *clientName, const char *arguments[],
+ int subresults, const char *tag);
+
+/* Sets an input file for the work unit. */
+int DC_addWUInput(DC_Workunit *wu, const char *logicalFileName, const char *URL,
+ DC_FileMode fileMode, ...);
+
+/* Defines an output file for the work unit. */
+int DC_addWUOutput(DC_Workunit *wu, const char *logicalFileName);
+
+/* Sets the priority for the work unit. */
+int DC_setWUPriority(DC_Workunit *wu, int priority);
+
+/* Sets the batch id for the work unit. */
+int DC_setWUBatch(DC_Workunit *wu, int batch);
+
+/* Serializes a work unit description. */
+char *DC_serializeWU(DC_Workunit *wu);
+
+/* Restores a serialized work unit. */
+DC_Workunit *DC_deserializeWU(const char *buf);
+
+/* Queries the state of a work unit. */
+DC_WUState DC_getWUState(DC_Workunit *wu);
+
+/* Submits a work unit. */
+int DC_submitWU(DC_Workunit *wu);
+
+/* Queries the low-level ID of the work unit. */
+char *DC_getWUId(const DC_Workunit *wu);
+
+/* Queries the tag of a work unit. */
+char *DC_getWUTag(const DC_Workunit *wu);
+
+/* Cancels all computations for a given work unit. */
+int DC_cancelWU(DC_Workunit *wu);
+
+/* Temporarily suspends the execution of a work unit. */
+int DC_suspendWU(DC_Workunit *wu);
+
+/* Resumes computation of a previously suspended work unit. */
+int DC_resumeWU(DC_Workunit *wu);
+
+/* Releases internal resources allocated to a work unit. */
+void DC_destroyWU(DC_Workunit *wu);
+
+/* Sends a message to a running work unit. */
+int DC_sendWUMessage(DC_Workunit *wu, const char *message);
+
+/********************************************************************
+ * Function prototypes: Result handling
+ */
+
+/* Queries what optional fields are present in the result. */
+unsigned DC_getResultCapabilities(const DC_Result *result);
+
+/* Returns the WU that generated this result. */
+DC_Workunit *DC_getResultWU(DC_Result *result);
+
+/* Returns the exit code of the client application. */
+int DC_getResultExit(const DC_Result *result);
+
+/* Returns the local name of an output file. */
+char *DC_getResultOutput(const DC_Result *result, const char *logicalFileName);
+
+/* Returns the CPU time used by the result. */
+double DC_getResultCPUTime(const DC_Result *result);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DC_H_ */
diff --git a/dcapi/include/dc_client.h b/dcapi/include/dc_client.h
new file mode 100644
index 0000000..9c0f230
--- /dev/null
+++ b/dcapi/include/dc_client.h
@@ -0,0 +1,96 @@
+/*
+ * DC-API: Distributed Computing Platform for Master-Worker Applications
+ *
+ * Client side
+ *
+ * Authors:
+ * Norbert Podhorszki <pnorbert at sztaki.hu>
+ * Gabor Vida <vida at sztaki.hu>
+ * Gabor Gombas <gombasg at sztaki.hu>
+ *
+ * Copyright MTA SZTAKI, 2006
+ */
+#ifndef _DC_CLIENT_H_
+#define _DC_CLIENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <dc_common.h>
+
+/********************************************************************
+ * Constant definitions
+ */
+
+/* File types for the DC_ResolveFileName function */
+typedef enum {
+ DC_FILE_IN,
+ DC_FILE_OUT,
+ DC_FILE_TMP
+} DC_FileType;
+
+/* Special handle for the checkpoint file */
+#define DC_CHECKPOINT_FILE "__DC_CHECKPOINT_"
+
+/* Control events */
+typedef enum {
+ DC_CLIENT_CHECKPOINT, /* Checkpointing is requested */
+ DC_CLIENT_FINISH, /* Computation should be aborted */
+ DC_CLIENT_MESSAGE /* A message has arrived */
+} DC_ClientEventType;
+
+
+/********************************************************************
+ * Data types
+ */
+
+/* Description of a DC-API event */
+typedef struct _DC_ClientEvent DC_ClientEvent;
+struct _DC_ClientEvent
+{
+ DC_ClientEventType type;
+ union
+ {
+ char *message;
+ };
+};
+
+
+/********************************************************************
+ * Function prototypes
+ */
+
+/* Initializes the client API. */
+int DC_initClient(void);
+
+/* Resolves the local name of input/output files. */
+char *DC_resolveFileName(DC_FileType type, const char *logicalFileName);
+
+/* Sends a sub-result back to the master. */
+int DC_sendResult(const char *logicalFileName, const char *path,
+ DC_FileMode fileMode);
+
+/* Sends a message to the master. */
+int DC_sendMessage(const char *message);
+
+/* Checks for application control events. */
+DC_ClientEvent *DC_checkClientEvent(void);
+
+/* Destroys the event-specific data returned by DC_checkClientEvent(). */
+void DC_destroyClientEvent(DC_ClientEvent *event);
+
+/* Indicates that an application-level checkpoint has completed. */
+void DC_checkpointMade(const char *fileName);
+
+/* Informs the user interface about the fraction of work already done. */
+void DC_fractionDone(double fraction);
+
+/* Finishes computation. */
+void DC_finishClient(int exitcode) __attribute__((__noreturn__));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DC_CLIENT_H_ */
diff --git a/dcapi/include/dc_common.h b/dcapi/include/dc_common.h
new file mode 100644
index 0000000..1bdf39e
--- /dev/null
+++ b/dcapi/include/dc_common.h
@@ -0,0 +1,148 @@
+/*
+ * DC-API: Distributed Computing Platform for Master-Worker Applications
+ *
+ * Common definitions for both the master and client side
+ *
+ * Authors:
+ * Gabor Gombas <gombasg at sztaki.hu>
+ *
+ * Copyright MTA SZTAKI, 2006
+ */
+#ifndef __DC_COMMON_H_
+#define __DC_COMMON_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _WIN32
+#include <dc_win32.h>
+#else
+#include <sys/syslog.h>
+#endif
+
+#include <string.h>
+#include <stdarg.h>
+
+/********************************************************************
+ * Constant definitions
+ */
+
+/* API error codes */
+typedef enum {
+ DC_OK, /* No error */
+ DC_ERR_CONFIG, /* Configuration error */
+ DC_ERR_DATABASE, /* Error with the internal data base */
+ DC_ERR_NOTIMPL, /* Not implemented by the API or by the
+ underlying grid infrastructure */
+ DC_ERR_UNKNOWN_WU, /* Unknown WU identifier */
+ DC_ERR_TIMEOUT, /* Timeout */
+ DC_ERR_BADPARAM, /* Bad function parameter */
+ DC_ERR_SYSTEM, /* A system call has failed, check errno */
+ DC_ERR_INTERNAL, /* Internal error */
+} DC_ErrorCode;
+
+/* Flags describing what capabilities does the underlying grid system
+ * support */
+typedef enum {
+ DC_GC_EXITCODE = (1 << 0), /* DC_Result contains the
+ client's exit code */
+ DC_GC_STDOUT = (1 << 1), /* The client's standard output
+ is available for the
+ master */
+ DC_GC_STDERR = (1 << 2), /* Client's standard error is
+ available for the master */
+ DC_GC_LOG = (1 << 3), /* Log file generated by the
+ execution environment is
+ available for the master */
+ DC_GC_SUSPEND = (1 << 4), /* DC_suspendWU() works */
+ DC_GC_SUBRESULT = (1 << 5), /* Sub-results work */
+ DC_GC_MESSAGING = (1 << 6) /* Message sending works */
+} DC_GridCapabilities;
+
+/* File classification when passing a physical file name to DC-API */
+typedef int DC_FileMode;
+#define DC_FILE_REGULAR (0) /* Not persistent, needs copy */
+#define DC_FILE_PERSISTENT (1) /* Persistent, link is enough */
+#define DC_FILE_VOLATILE (2) /* DC-API should remove the original */
+#define DC_FILE_REMOTE (3) /* HTTP files physically not present */
+#define DC_FILE_PERSISTENT_CLIENT (1 << 7) /* FLAG: Persistent on client */
+
+#define DC_OUTFILE_OPTIONAL (1 << 8) /* FLAG: Output file is optional */
+
+/* Default name of the configuration file */
+#define DC_CONFIG_FILE "dc-api.conf"
+
+/* Logical names for special files */
+#define DC_LABEL_STDOUT "dc_stdout.txt"
+#define DC_LABEL_STDERR "dc_stderr.txt"
+#define DC_LABEL_CLIENTLOG "dc_clientlog.txt"
+
+
+/********************************************************************
+ * Data types
+ */
+
+/* Descriptor of a physical file */
+typedef struct _DC_PhysicalFile DC_PhysicalFile;
+struct _DC_PhysicalFile
+{
+ char *label;
+ char *path;
+ DC_FileMode mode;
+ char *physicalfilename;
+ char *physicalfilehash;
+ int persistentonclient;
+};
+
+/* Descriptor of a remote file */
+typedef struct _DC_RemoteFile DC_RemoteFile;
+struct _DC_RemoteFile
+{
+ char *label;
+ char *url;
+ char *remotefilehash;
+ size_t remotefilesize;
+ int persistentonclient;
+};
+
+
+/********************************************************************
+ * Function prototypes
+ */
+
+#ifndef __GNUC__
+#define __attribute__(x)
+#endif
+
+/* Determines the maximum allowed message length. */
+int DC_getMaxMessageSize(void);
+
+/* Determines the maximum number of sub-results. */
+int DC_getMaxSubresults(void);
+
+/* Determines the basic capabilities of the underlying grid infrastructure. */
+unsigned DC_getGridCapabilities(void);
+
+/* Prints a message to the log file. */
+void DC_log(int level, const char *fmt, ...)
+ __attribute__((format(printf, 2, 3)));
+void DC_vlog(int level, const char *fmt, va_list args)
+ __attribute__((format(printf, 2, 0)));
+
+/* Returns the value associated with the specified key in the config. file */
+char *DC_getCfgStr(const char *name);
+
+/* Returns the integer value associated with the specified key in the config.
+ * file */
+int DC_getCfgInt(const char *name, int defaultValue);
+
+/* Returns the boolean value associated with the specified key in the config.
+ * file */
+int DC_getCfgBool(const char *name, int defaultValue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DC_COMMON_H_ */
diff --git a/dcapi/include/dc_internal.h b/dcapi/include/dc_internal.h
new file mode 100644
index 0000000..6316ab3
--- /dev/null
+++ b/dcapi/include/dc_internal.h
@@ -0,0 +1,82 @@
+/*
+ * DC-API: Distributed Computing Platform for Master-Worker Applications
+ *
+ * Internal definitions
+ *
+ * Authors:
+ * Gabor Gombas <gombasg at sztaki.hu>
+ *
+ * Copyright MTA SZTAKI, 2006
+ */
+
+/* <private_header> */
+
+#ifndef __DC_INTERNAL_H_
+#define __DC_INTERNAL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <dc_common.h>
+
+/********************************************************************
+ * Constants
+ */
+
+/* Master's working directory (absolute path) */
+#define CFG_WORKDIR "WorkingDirectory"
+/* Application instance UUID */
+#define CFG_INSTANCEUUID "InstanceUUID"
+/* Log level */
+#define CFG_LOGLEVEL "LogLevel"
+/* Log file location */
+#define CFG_LOGFILE "LogFile"
+/* Configuration items to send to clients */
+#define CFG_SENDKEYS "SendCfgKeys"
+/* Default WU priority */
+#define CFG_DEFAULTPRIO "DefaultPriority"
+
+
+/********************************************************************
+ * Function prototypes
+ */
+
+/* Parses a configuration file */
+int _DC_parseCfg(const char *cfgfile) __attribute__((visibility("hidden")));
+
+/* Copies a file */
+int _DC_copyFile(const char *src, const char *dst) __attribute__((visibility("hidden")));
+
+/* Processes a unit suffix and adjust the value accordingly */
+long long _DC_processSuffix(const char *suffix) __attribute__((visibility("hidden")));
+
+/* Parses a boolean value */
+int _DC_parseBoolean(const char *value) __attribute__((visibility("hidden")));
+
+/* Allocates a physical file descriptor */
+DC_PhysicalFile *_DC_createPhysicalFile(const char *label, const char *path)
+ __attribute__((visibility("hidden")));
+
+/* Allocates a remote file descriptor */
+DC_RemoteFile *_DC_createRemoteFile(const char *label, const char *url, const char *md5, const size_t size)
+ __attribute__((visibility("hidden")));
+
+/* De-allocates a physical file descriptor */
+void _DC_destroyPhysicalFile(DC_PhysicalFile *file)
+ __attribute__((visibility("hidden")));
+
+/* De-allocates a remote file descriptor */
+void _DC_destroyRemoteFile(DC_RemoteFile *file)
+ __attribute__((visibility("hidden")));
+
+/* Initializa a config file for a client */
+int _DC_initClientConfig(const char *clientName, FILE *f)
+ __attribute__((visibility("hidden")));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DC_INTERNAL_H_ */
diff --git a/dcapi/include/dc_win32.h b/dcapi/include/dc_win32.h
new file mode 100644
index 0000000..d5146fe
--- /dev/null
+++ b/dcapi/include/dc_win32.h
@@ -0,0 +1,40 @@
+/*
+ * DC-API: Distributed Computing Platform for Master-Worker Applications
+ *
+ * Compatibility definitions for Windows
+ *
+ * Authors:
+ * Gabor Gombas <gombasg at sztaki.hu>
+ *
+ * Copyright MTA SZTAKI, 2006
+ */
+
+/* <private_header> */
+
+#ifndef _DC_WIN32_H_
+#define _DC_WIN32_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Windows does not have syslog.h */
+enum {
+ LOG_DEBUG,
+ LOG_INFO,
+ LOG_NOTICE,
+ LOG_WARNING,
+ LOG_ERR,
+ LOG_CRIT
+};
+
+/* No ssize_t */
+typedef long ssize_t;
+
+#define strcasecmp(a, b) stricmp(a, b)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DC_WIN32_H_ */
diff --git a/dcapi/java/Makefile.am b/dcapi/java/Makefile.am
new file mode 100644
index 0000000..c5a8309
--- /dev/null
+++ b/dcapi/java/Makefile.am
@@ -0,0 +1,181 @@
+AM_CPPFLAGS = $(JAVA_INC)
+
+# We need the following build order:
+# 1. Java classes
+# 2. dc-client.jar
+# 3. jni_proto.h
+# 4. libdcapi-java-client.la
+
+
+#######################################################################
+# Rules for building the Java part
+
+# Directory prefix of the classes
+CLASSDIR = hu/sztaki/lpds/dc
+
+# Generate debugging information by default
+AM_JAVACFLAGS = -g
+
+COMMON_SRCS = \
+ $(CLASSDIR)/DCException.java \
+ $(CLASSDIR)/FileMode.java \
+ $(CLASSDIR)/FileType.java \
+ $(CLASSDIR)/RuntimeDCException.java
+CLIENT_SRCS = \
+ $(CLASSDIR)/client/Event.java \
+ $(CLASSDIR)/client/DCClient.java \
+ $(CLASSDIR)/client/Version.java
+
+DOCFILES = \
+ $(CLASSDIR)/overview.html \
+ $(CLASSDIR)/package.html
+
+noinst_JAVA = $(COMMON_SRCS) $(CLIENT_SRCS)
+
+COMMON_CLASSES = $(COMMON_SRCS:.java=.class)
+COMMON_CLASSNAMES = $(subst /,.,$(COMMON_CLASSES:.class=))
+
+CLIENT_CLASSES = $(CLIENT_SRCS:.java=.class)
+CLIENT_CLASSNAMES = $(subst /,.,$(CLIENT_CLASSES:.class=))
+
+COMMON_JAR = dc-common-$(PACKAGE_VERSION).jar
+CLIENT_JAR = dc-client-$(PACKAGE_VERSION).jar
+JARFILES = $(COMMON_JAR) $(CLIENT_JAR)
+
+javadir = $(datadir)/dc-api
+java_DATA = $(JARFILES)
+
+install-data-hook:
+ cd $(DESTDIR)$(javadir) && \
+ rm -f dc-common.jar && \
+ rm -f dc-client.jar && \
+ $(LN_S) $(COMMON_JAR) dc-common.jar && \
+ $(LN_S) $(CLIENT_JAR) dc-client.jar
+
+# Override automake defaults
+CLASSPATH_ENV =
+JAVAROOT = $(top_builddir)/java
+
+# Depending on $(CLASSFILES) does not work. This solution is not documented
+# in the automake manual but works with automake-1.7
+$(CLIENT_JAR): classnoinst.stamp
+ $(JAR) -cf $@ $(CLIENT_CLASSES)
+
+$(COMMON_JAR): classnoinst.stamp
+ $(JAR) -cf $@ $(COMMON_CLASSES)
+
+$(CLASSDIR)/client/Version.java: $(CLASSDIR)/client/Version.java.in $(top_builddir)/configure.ac
+ cd $(top_builddir) && $(SHELL) ./config.status java/$(CLASSDIR)/client/Version.java
+
+
+#######################################################################
+# Rules for building the JNI part
+
+lib_LTLIBRARIES = \
+ libdcapi-java-client.la
+noinst_HEADERS = util.h
+BUILT_SOURCES = jni_proto.h jni_export.sym
+
+libdcapi_java_client_la_SOURCES = \
+ client.c \
+ util.c
+libdcapi_java_client_la_LDFLAGS = \
+ -avoid-version \
+ -release $(PACKAGE_VERSION) \
+ -export-symbols=jni_export.sym
+libdcapi_java_client_la_LIBADD = \
+ $(top_builddir)/boinc/libdcapi-client-boinc.la
+libdcapi_java_client_la_DEPENDENCIES = jni_export.sym
+
+# jni_proto.h contains both the consumer and producer-side JNI prototypes
+jni_proto.h: $(JARFILES)
+ $(JAVAH) -classpath $(COMMON_JAR):$(CLIENT_JAR) -o $@ -jni $(COMMON_CLASSNAMES) $(CLIENT_CLASSNAMES)
+ -touch $@
+
+# Generate the list of to-be-exported symbols from jni_proto.h
+# This is a little fragile but works
+jni_export.sym: jni_proto.h
+ grep '^JNIEXPORT.*JNICALL ' $< | \
+ sed -e 's/JNIEXPORT.*JNICALL //' > $@
+ echo "JNI_OnLoad" >> $@
+ echo "JNI_OnUnload" >> $@
+
+# On Darwin, the JVM wants a .jnilib extension instead of the native .dylib
+install-exec-hook:
+ case $(host_os) in \
+ darwin*) \
+ $(LN_S) -f $(DESTDIR)$(libdir)/libdcapi-java-client-$(PACKAGE_VERSION).dylib $(DESTDIR)$(libdir)/libdcapi-java-client-$(PACKAGE_VERSION).jnilib; \
+ esac
+
+
+#######################################################################
+# Misc. rules
+
+EXTRA_DIST = \
+ $(noinst_JAVA) \
+ $(DOCFILES)
+
+MOSTLYCLEANFILES = \
+ $(COMMON_CLASSES) \
+ $(CLIENT_CLASSES) \
+ $(JARFILES) \
+ javacore.txt \
+ core.*
+
+CLEANFILES = \
+ doc.stamp \
+ jni_export.sym \
+ jni_proto.h
+
+
+#######################################################################
+# Build and install the API documentation
+
+TARGET_DIR = $(docdir)/java
+
+doc.stamp: classnoinst.stamp $(DOCFILES)
+ -mkdir $(top_builddir)/java/doc 2>/dev/null
+ $(JAVADOC) -quiet -d $(top_builddir)/java/doc \
+ -sourcepath $(srcdir) \
+ -classpath $(COMMON_JAR):$(CLIENT_JAR) \
+ -overview $(srcdir)/$(CLASSDIR)/overview.html \
+ hu.sztaki.lpds.dc
+ -touch $@
+
+all-local: doc.stamp
+
+clean-local:
+ -rm -rf doc
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR)
+ $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR)/producer
+ (installfiles=`echo $(srcdir)/doc/*.html $(srcdir)/doc/*.css`; \
+ if test "$$installfiles" = '$(srcdir)/doc/*.html $(srcdir)/doc/*.css'; \
+ then echo '-- Nothing to install' ; \
+ else \
+ for i in $$installfiles; do \
+ echo '-- Installing '$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+ done; \
+ echo '-- Installing $(srcdir)/doc/package-list' ; \
+ $(INSTALL_DATA) $(srcdir)/doc/package-list $(DESTDIR)$(TARGET_DIR); \
+ fi)
+ (installfiles=`echo $(srcdir)/doc/$(CLASSDIR)/*.html`; \
+ if test "$$installfiles" = '$(srcdir)/doc/$(CLASSDIR)/*.html'; \
+ then echo '-- Nothing to install' ; \
+ else \
+ for i in $$installfiles; do \
+ echo '-- Installing '$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR); \
+ done; \
+ fi)
+ (installfiles=`echo $(srcdir)/doc/$(CLASSDIR)/producer/*.html`; \
+ if test "$$installfiles" = '$(srcdir)/doc/$(CLASSDIR)/producer/*.html'; \
+ then echo '-- Nothing to install' ; \
+ else \
+ for i in $$installfiles; do \
+ echo '-- Installing '$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR)/$(CLASSDIR)/producer; \
+ done; \
+ fi)
diff --git a/dcapi/java/client.c b/dcapi/java/client.c
new file mode 100644
index 0000000..7a33e77
--- /dev/null
+++ b/dcapi/java/client.c
@@ -0,0 +1,483 @@
+/** @file client.c
+ *
+ * Client-side DC-API JNI code
+ *
+ * Author: Gábor Gombás
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <dc_client.h>
+
+#include "util.h"
+
+/**********************************************************************
+ * Global variables
+ */
+
+/* Java VM handle for the callbacks */
+static JavaVM *myvm;
+
+/* Bitmask for debugging classes */
+unsigned jni_debug = 0;
+
+
+/**********************************************************************
+ * Class: hu.sztaki.lpds.dc.client.Event
+ */
+
+/* Throws: RuntimeDCException, DCException */
+JNIEXPORT jstring JNICALL Java_hu_sztaki_lpds_dc_client_Event_getMessage
+ (JNIEnv *env, jobject this)
+{
+ DC_ClientEvent *event;
+ jfieldID field;
+ jclass cls;
+ int type;
+
+ cls = (*env)->GetObjectClass(env, this);
+ if (!cls)
+ return NULL;
+
+ field = (*env)->GetFieldID(env, cls, "type", "I");
+ if (!field)
+ {
+ propagate_runtime(env, "Failed to look up the type field");
+ return NULL;
+ }
+
+ type = (*env)->GetIntField(env, this, field);
+ if (type != DC_CLIENT_MESSAGE)
+ {
+ throw_dcexc(env, DC_ERR_BADPARAM, "This is not a message event");
+ return NULL;
+ }
+
+ field = (*env)->GetFieldID(env, cls, "ptr", "J");
+ if (!field)
+ {
+ propagate_runtime(env, "Failed to look up the type field");
+ return NULL;
+ }
+
+ event = (DC_ClientEvent *)(*env)->GetLongField(env, this, field);
+ if (!event || !event->message)
+ {
+ throw_exc(env, CLASS_RuntimeDCException, "Empty message event?!?");
+ return NULL;
+ }
+
+ return (*env)->NewStringUTF(env, event->message);
+}
+
+/* Throws: RuntimeDCException */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_Event_finalize
+ (JNIEnv *env, jobject this)
+{
+ DC_ClientEvent *event;
+ jfieldID field;
+ jclass cls;
+
+ cls = (*env)->GetObjectClass(env, this);
+ if (!cls)
+ return;
+
+ field = (*env)->GetFieldID(env, cls, "ptr", "J");
+ if (!field)
+ {
+ propagate_runtime(env, "Failed to look up the type field");
+ return;
+ }
+
+ event = (DC_ClientEvent *)(*env)->GetLongField(env, this, field);
+ DC_destroyClientEvent(event);
+}
+
+/**********************************************************************
+ * Class: hu.sztaki.lpds.dc.DCClient
+ */
+
+/* Throws: none */
+JNIEXPORT jint JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_getMaxMessageSize
+ (JNIEnv *env G_GNUC_UNUSED, jclass cls G_GNUC_UNUSED)
+{
+ return DC_getMaxMessageSize();
+}
+
+/* Throws: none */
+JNIEXPORT jint JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_getMaxSubresults
+ (JNIEnv *env G_GNUC_UNUSED, jclass cls G_GNUC_UNUSED)
+{
+ return DC_getMaxSubresults();
+}
+
+/* Throws: NullPointerException */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_log
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jint level, jstring msgstr)
+{
+ const char *msg;
+
+ if (!msgstr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "Message cannot be null");
+ return;
+ }
+
+ msg = (*env)->GetStringUTFChars(env, msgstr, NULL);
+ if (!msg)
+ return;
+
+ DC_log(level, "%s", msg);
+ (*env)->ReleaseStringUTFChars(env, msgstr, msg);
+}
+
+/* Throws: NullPointerException, IllegalArgumentException */
+JNIEXPORT jstring JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_getCfgStr
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jstring namestr)
+{
+ const char *name;
+ jstring res;
+ char *value;
+
+ if (!namestr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "Configuration key name cannot be null");
+ return NULL;
+ }
+
+ name = (*env)->GetStringUTFChars(env, namestr, NULL);
+ if (!name)
+ return NULL;
+
+ value = DC_getCfgStr(name);
+ if (!value)
+ {
+ throw_exc(env, CLASS_IllegalArgumentException,
+ "Configuration key %s does not exist", name);
+ (*env)->ReleaseStringUTFChars(env, namestr, name);
+ return NULL;
+ }
+
+ res = (*env)->NewStringUTF(env, value);
+ free(value);
+ (*env)->ReleaseStringUTFChars(env, namestr, name);
+
+ return res;
+}
+
+/* Throws: NullPointerException */
+JNIEXPORT jint JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_getCfgInt
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jstring namestr, jint defaultValue)
+{
+ const char *name;
+ jint res;
+
+ if (!namestr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "Configuration key name cannot be null");
+ return defaultValue;
+ }
+
+ name = (*env)->GetStringUTFChars(env, namestr, NULL);
+ if (!name)
+ return defaultValue;
+
+ res = DC_getCfgInt(name, defaultValue);
+ (*env)->ReleaseStringUTFChars(env, namestr, name);
+
+ return res;
+}
+
+/* Throws: NullPointerException */
+JNIEXPORT jboolean JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_getCfgBool
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jstring namestr, jboolean defaultValue)
+{
+ const char *name;
+ jboolean res;
+
+ if (!namestr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "Configuration key name cannot be null");
+ return defaultValue;
+ }
+
+ name = (*env)->GetStringUTFChars(env, namestr, NULL);
+ if (!name)
+ return defaultValue;
+
+ res = DC_getCfgBool(name, defaultValue);
+ (*env)->ReleaseStringUTFChars(env, namestr, name);
+
+ return res;
+}
+
+/* Throws: DCException */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_init
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED)
+{
+ int ret;
+
+ ret = DC_initClient();
+ if (ret)
+ throw_dcexc(env, ret, "Failed to initialize the DC-API library");
+}
+
+/* Throws: DCException, NullPointerException */
+JNIEXPORT jstring JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_resolveFileName
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jobject typeobj, jstring namestr)
+{
+ DC_FileType type;
+ const char *name;
+ jfieldID field;
+ jstring res;
+ char *pname;
+
+ if (!typeobj)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The file type can not be null");
+ return NULL;
+ }
+ if (!namestr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The file name can not be null");
+ return NULL;
+ }
+
+ cls = (*env)->GetObjectClass(env, typeobj);
+ if (!cls)
+ return NULL;
+
+ field = (*env)->GetFieldID(env, cls, "code", "I");
+ if (!field)
+ {
+ propagate_runtime(env, "Failed to look up the code field");
+ return NULL;
+ }
+
+ type = (*env)->GetIntField(env, typeobj, field);
+ name = (*env)->GetStringUTFChars(env, namestr, NULL);
+ pname = DC_resolveFileName(type, name);
+ (*env)->ReleaseStringUTFChars(env, namestr, name);
+ if (!pname)
+ {
+ throw_dcexc(env, DC_ERR_BADPARAM, "File name lookup failed");
+ return NULL;
+ }
+
+ res = (*env)->NewStringUTF(env, pname);
+ free(pname);
+ return res;
+}
+
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_sendResult
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jstring namestr, jstring pathstr, jobject modeobj)
+{
+ const char *name, *path;
+ DC_FileMode mode;
+ jfieldID field;
+ int ret;
+
+ if (!modeobj)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The file mode can not be null");
+ return;
+ }
+ if (!namestr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The logical file name can not be null");
+ return;
+ }
+ if (!pathstr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The physical file name can not be null");
+ return;
+ }
+
+ cls = (*env)->GetObjectClass(env, modeobj);
+ if (!cls)
+ return;
+
+ field = (*env)->GetFieldID(env, cls, "code", "I");
+ if (!field)
+ {
+ propagate_runtime(env, "Failed to look up the code field");
+ return;
+ }
+
+ mode = (*env)->GetIntField(env, modeobj, field);
+ name = (*env)->GetStringUTFChars(env, namestr, NULL);
+ path = (*env)->GetStringUTFChars(env, pathstr, NULL);
+
+ ret = DC_sendResult(name, path, mode);
+ (*env)->ReleaseStringUTFChars(env, namestr, name);
+ (*env)->ReleaseStringUTFChars(env, pathstr, path);
+ if (ret)
+ throw_dcexc(env, ret, "Sub-result sending failed");
+}
+
+/* Throws: NullPointerException */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_sendMessage
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jstring msgstr)
+{
+ const char *msg;
+
+ if (!msgstr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The message can not be null");
+ return;
+ }
+
+ msg = (*env)->GetStringUTFChars(env, msgstr, NULL);
+ DC_sendMessage(msg);
+ (*env)->ReleaseStringUTFChars(env, msgstr, msg);
+}
+
+/* Throws: none */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_finish
+ (JNIEnv *env G_GNUC_UNUSED, jclass cls G_GNUC_UNUSED, jint exitCode)
+{
+ DC_finishClient(exitCode);
+}
+
+/* Throws: NullPointerException */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_checkpointMade
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED, jstring pathstr)
+{
+ const char *path;
+
+ if (!pathstr)
+ {
+ throw_exc(env, CLASS_NullPointerException,
+ "The file name can not be null");
+ return;
+ }
+
+ path = (*env)->GetStringUTFChars(env, pathstr, NULL);
+ DC_checkpointMade(path);
+ (*env)->ReleaseStringUTFChars(env, pathstr, path);
+}
+
+/* Throws: none */
+JNIEXPORT void JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_fractionDone
+ (JNIEnv *env G_GNUC_UNUSED, jclass cls G_GNUC_UNUSED, jdouble fraction G_GNUC_UNUSED)
+{
+ DC_fractionDone(fraction);
+}
+
+/* Throws: none */
+JNIEXPORT jobject JNICALL Java_hu_sztaki_lpds_dc_client_DCClient_checkEvent
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED)
+{
+ DC_ClientEvent *event;
+ jobject eventobj;
+ jmethodID meth;
+ int ret;
+
+ event = DC_checkClientEvent();
+ if (!event)
+ return NULL;
+
+ ret = GET_CTOR(env, ClientEvent, &cls, &meth);
+ if (ret)
+ return NULL;
+
+ eventobj = (*env)->NewObject(env, cls, meth, event->type, (jlong)event);
+ return eventobj;
+}
+
+/**********************************************************************
+ * Class: hu.sztaki.lpds.dc.client.Version
+ */
+
+JNIEXPORT jstring JNICALL Java_hu_sztaki_lpds_dc_client_Version_getNativeVersion
+ (JNIEnv *env, jclass cls G_GNUC_UNUSED)
+{
+ return (*env)->NewStringUTF(env, PACKAGE_VERSION);
+}
+
+/**********************************************************************
+ * JNI module initialization and finalization
+ */
+
+JNIEXPORT jint JNI_OnLoad(JavaVM *jvm, void *res G_GNUC_UNUSED)
+{
+ union getenvarg jnienv;
+ const char *ver;
+ jmethodID meth;
+ jstring verstr;
+ jclass cls;
+ int ret;
+
+ myvm = jvm;
+
+ if ((*myvm)->GetEnv(myvm, &jnienv.ptr, JNI_VERSION_1_2))
+ return 0;
+
+ /* Check that the JNI and Java versions match */
+ cls = find_class(jnienv.env, CLASS_ClientVersion);
+ if (!cls)
+ {
+ fprintf(stderr, "Class hu.sztaki.lpds.dc.Version was "
+ "not found\n");
+ return 0;
+ }
+ meth = (*jnienv.env)->GetStaticMethodID(jnienv.env, cls, "getVersion",
+ SIG_ClientVersion_getVersion);
+ if (!meth)
+ {
+ fprintf(stderr, "Method hu.sztaki.lpds.dc.Version."
+ "getVersion() was not found\n");
+ return 0;
+ }
+ verstr = (*jnienv.env)->CallStaticObjectMethod(jnienv.env, cls, meth);
+ if ((*jnienv.env)->ExceptionCheck(jnienv.env))
+ {
+ fprintf(stderr, "Exception occurred while checking the "
+ "version\n");
+ return 0;
+ }
+ ver = (*jnienv.env)->GetStringUTFChars(jnienv.env, verstr, NULL);
+ if (!ver)
+ {
+ fprintf(stderr, "Failed to retrieve the version string\n");
+ return 0;
+ }
+ if (strcmp(ver, PACKAGE_VERSION))
+ {
+ fprintf(stderr, "DC-API version mismatch: Java side is %s, "
+ "JNI side is %s\n", ver, PACKAGE_VERSION);
+ (*jnienv.env)->ReleaseStringUTFChars(jnienv.env, verstr, ver);
+ return 0;
+ }
+ (*jnienv.env)->ReleaseStringUTFChars(jnienv.env, verstr, ver);
+
+ (*jnienv.env)->DeleteLocalRef(jnienv.env, verstr);
+ (*jnienv.env)->DeleteLocalRef(jnienv.env, cls);
+
+ /* Look for & process dc.jni.debug */
+ ret = parse_debug_options(jnienv.env);
+ if (ret)
+ return 0;
+
+ return JNI_VERSION_1_2;
+}
+
+JNIEXPORT void JNI_OnUnload(JavaVM *jvm G_GNUC_UNUSED,
+ void *res G_GNUC_UNUSED)
+{
+}
diff --git a/dcapi/java/example/boinc-java-launcher b/dcapi/java/example/boinc-java-launcher
new file mode 100644
index 0000000..10b7aea
--- /dev/null
+++ b/dcapi/java/example/boinc-java-launcher
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+#
+# Script to launch java applications in a BOINC environment
+#
+
+set +v
+
+libdcapi-jre=`sed -n '/^<soft_link>/ s/<[^>]*>//gp' libdcapi-jre.tar`
+app-jar=`sed -n '/^<soft_link>/ s/<[^>]*>//gp' Uppercase.jar`
+
+[ -d jre ] || gunzip -c "$libdcapi-jre" | tar xf -
+
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib
+export LD_LIBRARY_PATH
+
+exec ./jre/bin/java -jar "$app-jar"
diff --git a/dcapi/java/example/compile b/dcapi/java/example/compile
new file mode 100644
index 0000000..aad169b
--- /dev/null
+++ b/dcapi/java/example/compile
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+javac uppercase.java
+
+jar cmf manifest Uppercase.jar Uppercase.class hu
\ No newline at end of file
diff --git a/dcapi/java/example/manifest b/dcapi/java/example/manifest
new file mode 100644
index 0000000..b371ae7
--- /dev/null
+++ b/dcapi/java/example/manifest
@@ -0,0 +1 @@
+Main-Class: Uppercase
diff --git a/dcapi/java/example/uppercase.java b/dcapi/java/example/uppercase.java
new file mode 100644
index 0000000..7f81d96
--- /dev/null
+++ b/dcapi/java/example/uppercase.java
@@ -0,0 +1,157 @@
+import hu.sztaki.lpds.dc.*;
+import hu.sztaki.lpds.dc.client.*;
+
+import java.io.*;
+import java.util.*;
+
+class Uppercase {
+
+static {
+ System.loadLibrary("dc-java-client-0.9");
+}
+
+ private static FileReader infile = null;
+ private static FileWriter outfile = null;
+ private static FileReader ckptin = null;
+ private static FileWriter ckptout = null;
+
+ private static int pos = 0;
+
+ public static void main(String argsp[]) {
+
+ DCClient cli = new DCClient();
+
+ try {
+ cli.init();
+ } catch (DCException e)
+ {
+ System.out.println("APP: Failed to initilaize DC-API");
+ }
+
+ init_files(cli);
+
+ do_work(cli);
+
+ cli.finish(0);
+ }
+
+ private static void init_files(DCClient dc) {
+ String file_name = "";
+ String ckpt = "";
+
+ // INPUT File
+ try {
+ file_name = dc.resolveFileName(FileType.IN, "in.txt");
+ } catch (DCException e) {
+ System.out.println("APP: Could not resolve input file name.");
+ dc.finish(1);
+ }
+ try {
+ infile = new FileReader(file_name);
+ } catch (IOException e) {
+ System.out.println("APP: Could not open input file.");
+ dc.finish(1);
+ }
+
+ //CKPT File
+ try {
+ ckptin = new FileReader("ckpt.txt");
+
+ try {
+ BufferedReader br = new BufferedReader(ckptin);
+ ckpt = br.readLine();
+ } catch (IOException ex) {
+ System.out.println("APP: Could not read ckpt file.");
+ dc.finish(1);
+ }
+
+ StringTokenizer ckptst = new StringTokenizer(ckpt);
+ pos = Integer.parseInt(ckptst.nextToken());
+
+ try {
+ for (int i=0; i<pos; i++) {
+ infile.read();
+ }
+ }catch (IOException er)
+ {
+ System.out.println("APP: Could not read input file.");
+ dc.finish(1);
+ }
+
+
+ } catch (FileNotFoundException e) {
+ }
+
+ //OUTPUT File
+ try {
+ file_name = dc.resolveFileName(FileType.OUT, "out.txt");
+ } catch (DCException e) {
+ System.out.println("APP: Could not resolve output file name.");
+ dc.finish(1);
+ }
+ try {
+ outfile = new FileWriter(file_name, true);
+ } catch (IOException e) {
+ System.out.println("APP: Could not create/open output file.");
+ dc.finish(1);
+ }
+ }
+
+ private static void do_work(DCClient dc) {
+ int i;
+ char c;
+
+ try {
+ while ( (i = infile.read()) > -1) {
+ c = (char)i;
+ pos++;
+ try {
+ outfile.write(Character.toUpperCase(c));
+ } catch (IOException e) {
+ System.out.println("APP: Could not write output file.");
+ dc.finish(1);
+ }
+
+ do_checkpoint(dc);
+
+ Event ev = dc.checkEvent();
+ if (ev == null)
+ continue;
+
+ if(ev.isCheckpointRequest())
+ do_checkpoint(dc);
+ }
+ }catch (IOException e){
+ System.out.println("APP: Could not read input file.");
+ dc.finish(1);
+ }
+ try {
+ outfile.close();
+ } catch (IOException e)
+ {
+ System.out.println("APP: Could not close output file.");
+ dc.finish(1);
+ }
+ }
+
+ private static void do_checkpoint(DCClient dc) {
+
+ try {
+ outfile.flush();
+ } catch (IOException e) {
+ System.out.println("APP: Could not flush output file.");
+ dc.finish(1);
+ }
+
+ try {
+ ckptout = new FileWriter("ckpt.txt");
+ ckptout.write(String.valueOf(pos));
+ ckptout.close();
+ }catch (IOException ec) {
+ System.out.println("APP: Could not write ckpt file.");
+ dc.finish(1);
+ }
+
+ }
+ //end class
+}
\ No newline at end of file
diff --git a/dcapi/java/hu/sztaki/lpds/dc/DCException.java b/dcapi/java/hu/sztaki/lpds/dc/DCException.java
new file mode 100644
index 0000000..d53cb55
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/DCException.java
@@ -0,0 +1,45 @@
+package hu.sztaki.lpds.dc;
+
+import java.lang.Exception;
+
+/**
+ * The <code>DCException</code> class represents the errors returned by DC-API.
+ *
+ * @author Gábor Gombás
+ */
+
+public class DCException extends Exception {
+
+ /* Error codes. The values must match the C code. */
+ public static final int DC_ERR_CONFIG = 1;
+ public static final int DC_ERR_DATABASE = 2;
+ public static final int DC_ERR_NOTIMPL = 3;
+ public static final int DC_ERR_UNKNOWN_WU = 4;
+ public static final int DC_ERR_TIMEOUT = 5;
+ public static final int DC_ERR_BADPARAM = 6;
+ public static final int DC_ERR_SYSTEM = 7;
+ public static final int DC_ERR_INTERNAL = 8;
+
+ private static String messages[] = {
+ "No error",
+ "Configuration error",
+ "Database error",
+ "Function not implemented",
+ "Unknown work unit",
+ "Timeout occured",
+ "Bad parameter",
+ "Failed system call",
+ "Internal library error"
+ };
+
+ private int code;
+
+ private DCException(int code, String message) {
+ super(message + ": " + messages[code]);
+ this.code = code;
+ }
+
+ public int getCode() {
+ return code;
+ }
+}
diff --git a/dcapi/java/hu/sztaki/lpds/dc/FileMode.java b/dcapi/java/hu/sztaki/lpds/dc/FileMode.java
new file mode 100644
index 0000000..5e22bb5
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/FileMode.java
@@ -0,0 +1,29 @@
+package hu.sztaki.lpds.dc;
+
+/**
+ * The <code>FileMode</code> class contains the valid file mode constants.
+ *
+ * @author Gábor Gombás
+ */
+
+public final class FileMode {
+ /* The codes must match their C equivalend */
+ private static final int DC_FILE_REGULAR = 0;
+ private static final int DC_FILE_PERSISTENT = 1;
+ private static final int DC_FILE_VOLATILE = 2;
+
+ /* Public instances */
+ public static final FileMode REGULAR = new FileMode(DC_FILE_REGULAR);
+ public static final FileMode PERSISTENT = new FileMode(DC_FILE_PERSISTENT);
+ public static final FileMode VOLATILE = new FileMode(DC_FILE_VOLATILE);
+
+ /* Class implementation */
+ private int code;
+ private FileMode(int code) {
+ this.code = code;
+ }
+
+ int getCode() {
+ return code;
+ }
+};
diff --git a/dcapi/java/hu/sztaki/lpds/dc/FileType.java b/dcapi/java/hu/sztaki/lpds/dc/FileType.java
new file mode 100644
index 0000000..d8bf134
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/FileType.java
@@ -0,0 +1,29 @@
+package hu.sztaki.lpds.dc;
+
+/**
+ * The <code>FileType</code> class contains the valid file type constants.
+ *
+ * @author Gábor Gombás
+ */
+
+public final class FileType {
+ /* The codes must match their C equivalend */
+ private static final int DC_FILE_IN = 0;
+ private static final int DC_FILE_OUT = 1;
+ private static final int DC_FILE_TMP = 2;
+
+ /* Public instances */
+ public static final FileType IN = new FileType(DC_FILE_IN);
+ public static final FileType OUT = new FileType(DC_FILE_OUT);
+ public static final FileType TMP = new FileType(DC_FILE_TMP);
+
+ /* Class implementation */
+ private int code;
+ private FileType(int code) {
+ this.code = code;
+ }
+
+ int getCode() {
+ return code;
+ }
+};
diff --git a/dcapi/java/hu/sztaki/lpds/dc/RuntimeDCException.java b/dcapi/java/hu/sztaki/lpds/dc/RuntimeDCException.java
new file mode 100644
index 0000000..708c5e4
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/RuntimeDCException.java
@@ -0,0 +1,42 @@
+package hu.sztaki.lpds.dc;
+
+/**
+ * An <code>RuntimeDCException</code> is thrown when the JNI glue code detects
+ * an error within itself.
+ *
+ * @author Gábor Gombás
+ */
+
+public class RuntimeDCException extends RuntimeException {
+
+ /**
+ * Creates a new <code>RuntimeDCException</code> with the
+ * given message.
+ *
+ * @param msg the message of the exception.
+ */
+ public RuntimeDCException(String msg) {
+ super(msg);
+ }
+
+ /**
+ * Creates a new <code>RuntimeDCException</code> with the
+ * given message and cause.
+ *
+ * @param msg the message of the exception.
+ * @param cause the cause of the exception.
+ */
+ public RuntimeDCException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+
+ /**
+ * Creates a new <code>RuntimeDCException</code> with the
+ * given cause.
+ *
+ * @param cause the cause of the exception.
+ */
+ public RuntimeDCException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/dcapi/java/hu/sztaki/lpds/dc/client/DCClient.java b/dcapi/java/hu/sztaki/lpds/dc/client/DCClient.java
new file mode 100644
index 0000000..17c2247
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/client/DCClient.java
@@ -0,0 +1,43 @@
+package hu.sztaki.lpds.dc.client;
+
+import hu.sztaki.lpds.dc.*;
+
+public class DCClient {
+
+ public final static String DC_CHECKPOINT_FILE = new String("__DC_CHECKPOINT_");
+
+ /* ==========================================================
+ * Class initialization
+ */
+
+ static {
+ System.loadLibrary("dc-java-client-" + Version.getVersion());
+ if (!Version.getVersion().equals(Version.getNativeVersion()))
+ throw new RuntimeException("DC-API version mismatch: " +
+ "Java side is " + Version.getVersion() + ", " +
+ "JNI side is " + Version.getNativeVersion());
+ }
+
+ /* ==========================================================
+ * Methods from dc_common.h
+ */
+ public final synchronized static native int getMaxMessageSize();
+ public final synchronized static native int getMaxSubresults();
+ public final synchronized static native void log(int level, String message);
+
+ public final synchronized static native String getCfgStr(String key);
+ public final synchronized static native int getCfgInt(String key, int defaultValue);
+ public final synchronized static native boolean getCfgBool(String key, boolean DefaultValue);
+
+ /* ==========================================================
+ * Methods from dc_client.h
+ */
+ public final synchronized static native void init() throws DCException;
+ public final synchronized static native String resolveFileName(FileType type, String logicalName) throws DCException;
+ public final synchronized static native void sendResult(String logicalFileName, String path, FileMode mode) throws DCException;
+ public final synchronized static native void sendMessage(String message) throws DCException;
+ public final synchronized static native void finish(int exitCode);
+ public final synchronized static native void checkpointMade(String path);
+ public final synchronized static native void fractionDone(double fraction);
+ public final synchronized static native Event checkEvent();
+}
diff --git a/dcapi/java/hu/sztaki/lpds/dc/client/Event.java b/dcapi/java/hu/sztaki/lpds/dc/client/Event.java
new file mode 100644
index 0000000..b8f4667
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/client/Event.java
@@ -0,0 +1,37 @@
+package hu.sztaki.lpds.dc.client;
+
+import hu.sztaki.lpds.dc.DCException;
+
+public final class Event {
+
+ private final static int DC_CLIENT_CHECKPOINT = 0;
+ private final static int DC_CLIENT_FINISH = 1;
+ private final static int DC_CLIENT_MESSAGE = 2;
+
+ /* Event type */
+ private int type;
+
+ /* Pointer to the C data structure */
+ private long ptr;
+
+ private Event(int type, long ptr) {
+ this.type = type;
+ this.ptr = ptr;
+ }
+
+ public boolean isCheckpointRequest() {
+ return type == DC_CLIENT_CHECKPOINT;
+ }
+
+ public boolean isFinishRequest() {
+ return type == DC_CLIENT_FINISH;
+ }
+
+ public boolean isMessage() {
+ return type == DC_CLIENT_MESSAGE;
+ }
+
+ public native String getMessage() throws DCException;
+
+ native public void finalize();
+}
diff --git a/dcapi/java/hu/sztaki/lpds/dc/client/Version.java.in b/dcapi/java/hu/sztaki/lpds/dc/client/Version.java.in
new file mode 100644
index 0000000..3a884c2
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/client/Version.java.in
@@ -0,0 +1,30 @@
+package hu.sztaki.lpds.dc.client;
+
+/**
+ * The <code>Version</code> class contains the version of the DC-API package
+ * the Java interface was built for.
+ *
+ * This class is used by both the Java and the JNI component to test each
+ * other's version number.
+ *
+ * @author Gábor Gombás
+ */
+
+public final class Version {
+
+ /**
+ * Returns the version of the Java interface package.
+ *
+ * @return the version string.
+ */
+ public static final String getVersion() {
+ return "@PACKAGE_VERSION@";
+ }
+
+ /**
+ * Returns the version of the underlying JNI libraries.
+ *
+ * @return the version string.
+ */
+ public static final native String getNativeVersion();
+}
diff --git a/dcapi/java/hu/sztaki/lpds/dc/client/package.html b/dcapi/java/hu/sztaki/lpds/dc/client/package.html
new file mode 100644
index 0000000..90b3114
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/client/package.html
@@ -0,0 +1,6 @@
+<body>
+Provides client access to the Distributed Computing Platform.
+
+ at author Gábor Gombás
+
+</body>
diff --git a/dcapi/java/hu/sztaki/lpds/dc/overview.html b/dcapi/java/hu/sztaki/lpds/dc/overview.html
new file mode 100644
index 0000000..d2e3c40
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/overview.html
@@ -0,0 +1,23 @@
+<body>
+This package provides access to the Distributed Computing Platform from the Java
+language.
+
+<p>
+The underlying JNI library understands the following system properties:
+<ul>
+<li><tt>dc.jni.debug</tt>: If set, additional debugging messages are
+ logged for every command and every metric value received. The value of
+ this property consists of a series of tokens separated by commas. The
+ possible tokens are understood:
+ <ul>
+ <li><tt>all</tt>: turn on all debugging options.
+ <li><tt>event</tt>: log the reception of events.
+ <li><tt>exception<tt>: log the generation of exceptions.
+ </ul>
+ Every token except <tt>all</tt> can be prefixed with "<tt>no</tt>" to
+ prohibit the corresponding messages.
+</ul>
+
+ at author Gábor Gombás
+
+</body>
diff --git a/dcapi/java/hu/sztaki/lpds/dc/package.html b/dcapi/java/hu/sztaki/lpds/dc/package.html
new file mode 100644
index 0000000..748e59a
--- /dev/null
+++ b/dcapi/java/hu/sztaki/lpds/dc/package.html
@@ -0,0 +1,6 @@
+<body>
+Provides common access to the Distributed Computing Platform.
+
+ at author Gábor Gombás
+
+</body>
diff --git a/dcapi/java/jre-boinc/jre_for_boinc_guide.txt b/dcapi/java/jre-boinc/jre_for_boinc_guide.txt
new file mode 100644
index 0000000..d92ae6f
--- /dev/null
+++ b/dcapi/java/jre-boinc/jre_for_boinc_guide.txt
@@ -0,0 +1,41 @@
+Guide for preparing Java Runtime Environment (JRE)
+for use in a BOINC infrastructure on Linux clients.
+---------------------------------------------------
+
+1. Requirements
+---------------
+
+ i. JRE available at http://java.sun.com/javase/downloads/index.jsp
+
+ ii. DC-API for java (libdcapi-java-client-0.9.so, libdcapi-boinc-client.so)
+
+2. Preparing
+------------
+
+ i. Extract the 'bin' and 'lib' directories from the JRE distribution.
+ This can be done, by installing JRE on a machine and locating the
+ necessary directories in the installation directory.
+ Copy these two directories with all of their content to a directory
+ called jre.
+
+ ii. Put the files of DC-API in a directory called lib
+
+ iii. Tar the contents of the above directories (jre, lib) in an archive
+ called lidc-jre.tar
+ eg.: tar czvf lidc-jre.tar jre lib
+
+
+3. Deploying a java application on a BOINC server
+-------------------------------------------------
+
+ i. The java application on BOINC consists of the following
+ a. libdcapi-jre.tar - the jre prepared in part 2.
+ b. application.jar - the java application to be run in BOINC
+ c. launcher - script that untars jre and calls java with the
+ jar of the application on the client computer
+
+ ii. Give execution rights to the launcher script only.
+
+ iii. Proceed with signing the files and installing them to the boinc server as usual...
+
+
diff --git a/dcapi/java/util.c b/dcapi/java/util.c
new file mode 100644
index 0000000..a1e4d1c
--- /dev/null
+++ b/dcapi/java/util.c
@@ -0,0 +1,350 @@
+/** @file util.c
+ *
+ * Utilities common for the producer and consumer side JNI libraries
+ *
+ * Author: Gábor Gombás
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dc_client.h>
+#include "util.h"
+
+#include <alloca.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+/**********************************************************************
+ * Throwing exceptions
+ */
+
+static void throw_runtime(JNIEnv *env, jthrowable cause, const char *msg)
+{
+ jthrowable exc;
+ jmethodID meth;
+ jstring msgstr;
+ jclass cls;
+ int ret;
+
+ if (jni_debug & DBG_EXCEPTION)
+ DC_log(LOG_NOTICE, "JNI: Throwing RuntimeDCException: %s",
+ msg);
+
+ msgstr = (*env)->NewStringUTF(env, msg);
+ if (!msgstr)
+ return;
+ ret = GET_CTOR(env, RuntimeDCException, &cls, &meth);
+ if (ret)
+ return;
+ exc = (*env)->NewObject(env, cls, meth, msgstr, cause);
+ if (!exc)
+ return;
+ (*env)->DeleteLocalRef(env, msgstr);
+ (*env)->DeleteLocalRef(env, cls);
+
+ (*env)->Throw(env, exc);
+}
+
+static void exception_runtime(JNIEnv *env, jobject cause, const char *fmt, ...)
+{
+ char msg[256];
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsnprintf(msg, sizeof(msg), fmt, ap);
+ va_end(ap);
+
+ throw_runtime(env, cause, msg);
+}
+
+void propagate_runtime(JNIEnv *env, const char *fmt, ...)
+{
+ jthrowable cause;
+ char msg[256];
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsnprintf(msg, sizeof(msg), fmt, ap);
+ va_end(ap);
+
+ cause = (*env)->ExceptionOccurred(env);
+ (*env)->ExceptionClear(env);
+
+ throw_runtime(env, cause, msg);
+}
+
+void throw_exc(JNIEnv *env, const char *classname, const char *fmt, ...)
+{
+ char msg[256];
+ va_list ap;
+ jclass cls;
+
+ va_start(ap, fmt);
+ vsnprintf(msg, sizeof(msg), fmt, ap);
+ va_end(ap);
+
+ if (jni_debug & DBG_EXCEPTION)
+ {
+ const char *p;
+
+ p = strrchr(classname, '/');
+ if (!p)
+ p = classname;
+ DC_log(LOG_NOTICE, "JNI: Throwing %s: %s", p, msg);
+ }
+
+ cls = find_class(env, classname);
+ if (!cls)
+ return;
+ (*env)->ThrowNew(env, cls, msg);
+}
+
+void throw_dcexc(JNIEnv *env, int code, const char *fmt, ...)
+{
+ jthrowable exc;
+ jmethodID meth;
+ jstring msgstr;
+ char msg[256];
+ va_list ap;
+ jclass cls;
+ int ret;
+
+ va_start(ap, fmt);
+ vsnprintf(msg, sizeof(msg), fmt, ap);
+ va_end(ap);
+
+ if (jni_debug & DBG_EXCEPTION)
+ DC_log(LOG_NOTICE, "JNI: Throwing DCException: %s", msg);
+
+ msgstr = (*env)->NewStringUTF(env, msg);
+ if (!msgstr)
+ return;
+ ret = GET_CTOR(env, DCException, &cls, &meth);
+ if (ret)
+ return;
+ exc = (*env)->NewObject(env, cls, meth, code, msgstr);
+ if (!exc)
+ return;
+ (*env)->DeleteLocalRef(env, msgstr);
+ (*env)->DeleteLocalRef(env, cls);
+
+ (*env)->Throw(env, exc);
+}
+
+/**********************************************************************
+ * Looking up classes and methods
+ */
+
+jclass find_class(JNIEnv *env, const char *classname)
+{
+ jclass cls;
+
+ cls = (*env)->FindClass(env, classname);
+ if (!cls)
+ {
+ unsigned i;
+ char *p;
+
+ p = alloca(strlen(classname) + 1);
+ strcpy(p, classname);
+ for (i = 0; p[i]; i++)
+ if (p[i] == '/')
+ p[i] = '.';
+ DC_log(LOG_ERR, "JNI: Class %s was not found", p);
+
+ /* If FindClass() did not throw an exception, do it now */
+ if (!(*env)->ExceptionCheck(env))
+ {
+ jclass exc;
+ exc = (*env)->FindClass(env,
+ CLASS_ClassNotFoundException);
+ if (exc)
+ (*env)->ThrowNew(env, exc, p);
+ }
+ }
+
+ return cls;
+}
+
+int get_constructor(JNIEnv *env, const char *classname, const char *signature,
+ jclass *cls, jmethodID *meth)
+{
+ *cls = find_class(env, classname);
+ if (!*cls)
+ return -1;
+
+ *meth = (*env)->GetMethodID(env, *cls, "<init>", signature);
+ if (!*meth)
+ {
+ int i;
+ char *buf;
+
+ buf = malloc(strlen(classname) + 1);
+ if (!buf)
+ return -1;
+
+ /* Convert the classname */
+ strcpy(buf, classname);
+ for (i = 0; buf[i]; i++)
+ if (buf[i] == '/')
+ buf[i] = '.';
+
+ propagate_runtime(env, "Class %s has no constructor with "
+ "signature %s", buf, signature);
+ free(buf);
+
+ return -1;
+ }
+ return 0;
+}
+
+jmethodID get_method_id(JNIEnv *env, jclass cls, const char *methodname,
+ const char *signature)
+{
+ jthrowable excoccurred;
+ const char *namestr;
+ jmethodID meth;
+ jclass clscls;
+ jobject name;
+
+ meth = (*env)->GetMethodID(env, cls, methodname, signature);
+ if (meth)
+ return meth;
+
+ /* Now the failure path. First save & clear pending exceptions */
+ excoccurred = (*env)->ExceptionOccurred(env);
+ if (excoccurred)
+ (*env)->ExceptionClear(env);
+
+ /* Determine the class name */
+ clscls = (*env)->GetObjectClass(env, cls);
+ if (!clscls)
+ return NULL;
+
+ meth = (*env)->GetMethodID(env, clscls, "getName", SIG_Class_getName);
+ if (!meth)
+ {
+ if ((*env)->ExceptionCheck(env))
+ {
+ (*env)->ExceptionDescribe(env);
+ (*env)->ExceptionClear(env);
+ }
+ exception_runtime(env, excoccurred, "Failed to locate the "
+ "getName() method of a java.lang.Class object");
+ return NULL;
+ }
+
+ name = (*env)->CallObjectMethod(env, cls, meth);
+ if (!name)
+ {
+ if ((*env)->ExceptionCheck(env))
+ {
+ (*env)->ExceptionDescribe(env);
+ (*env)->ExceptionClear(env);
+ }
+ exception_runtime(env, excoccurred, "Failed to invoke the "
+ "getName() method of a java.lang.Class object");
+ return NULL;
+ }
+
+ namestr = (*env)->GetStringUTFChars(env, name, 0);
+ if (!namestr)
+ {
+ propagate_runtime(env, "Failed to retrieve the name of a "
+ "java.lang.Class object");
+ return NULL;
+ }
+
+ DC_log(LOG_ERR, "JNI: Failed to locate method %s (signature: '%s') of "
+ "class %s", methodname, signature, namestr);
+
+ exception_runtime(env, excoccurred, "Method %s.%s() was not found",
+ namestr, methodname);
+
+ (*env)->ReleaseStringUTFChars(env, name, namestr);
+
+ return NULL;
+}
+
+/**********************************************************************
+ * Parse the value of dc.jni.debug
+ */
+
+int parse_debug_options(JNIEnv *env)
+{
+ jstring keystr, optstr;
+ jmethodID meth;
+ jclass cls;
+
+ /* Check for properties */
+ cls = find_class(env, CLASS_System);
+ if (!cls)
+ {
+ fprintf(stderr, "Class java.lang.System was not found\n");
+ return -1;
+ }
+ meth = (*env)->GetStaticMethodID(env, cls, "getProperty",
+ SIG_System_getProperty);
+ if (!meth)
+ {
+ fprintf(stderr, "Method java.lang.System.getProperty() "
+ "was not found\n");
+ return -1;
+ }
+
+ /* Look for & process dc.jni.debug */
+ keystr = (*env)->NewStringUTF(env, "dc.jni.debug");
+ if (!keystr)
+ {
+ fprintf(stderr, "Failed to instantiate String object\n");
+ return -1;
+ }
+ optstr = (*env)->CallStaticObjectMethod(env, cls, meth, keystr);
+ if ((*env)->ExceptionCheck(env))
+ {
+ fprintf(stderr, "Exception occurred while reading the "
+ "properties\n");
+ return -1;
+ }
+ if (optstr)
+ {
+ const char *options;
+ char *opts, *p;
+
+ options = (*env)->GetStringUTFChars(env, optstr, NULL);
+ if (!options)
+ return -1;
+
+ opts = alloca(strlen(options + 1));
+ strcpy(opts, options);
+
+ while ((p = strsep(&opts, ",")))
+ {
+ if (!strcmp(p, "all"))
+ jni_debug = (unsigned)-1;
+ else if (!strcmp(p, "event"))
+ jni_debug |= DBG_EVENT;
+ else if (!strcmp(p, "noevent"))
+ jni_debug &= ~DBG_EVENT;
+ else if (!strcmp(p, "exception"))
+ jni_debug |= DBG_EXCEPTION;
+ else if (!strcmp(p, "noexception"))
+ jni_debug &= ~DBG_EXCEPTION;
+ else
+ fprintf(stderr, "JNI: property "
+ "dc.jni.debug contains an unknown "
+ "token: %s\n", p);
+ }
+ (*env)->ReleaseStringUTFChars(env, optstr, options);
+ }
+
+ if (optstr)
+ (*env)->DeleteLocalRef(env, optstr);
+ (*env)->DeleteLocalRef(env, keystr);
+ (*env)->DeleteLocalRef(env, cls);
+
+ return 0;
+}
diff --git a/dcapi/java/util.h b/dcapi/java/util.h
new file mode 100644
index 0000000..82f8373
--- /dev/null
+++ b/dcapi/java/util.h
@@ -0,0 +1,155 @@
+/** @file util.h
+ *
+ * Utilities common for the producer and consumer side JNI libraries
+ *
+ * Author: Gábor Gombás
+ */
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#include "jni_proto.h"
+
+#ifndef __GNUC__
+#define __attribute__((x))
+#endif
+
+#define G_GNUC_UNUSED __attribute__((__unused__))
+#define G_GNUC_INTERNAL __attribute__((__visibility__("internal")))
+#define G_GNUC_PRINTF(x, y) __attribute((__format__(__printf__, x, y)))
+
+/**********************************************************************
+ * Data type definitions
+ */
+
+/* This is used to obey strict aliasing rules and shut up gcc warnings */
+union getenvarg
+{
+ JNIEnv *env;
+ void *ptr;
+};
+
+
+/**********************************************************************
+ * Constants
+ */
+
+/* Macros used for class definitions:
+ *
+ * CLASS_<cls> The fully qualified name of the class (using '/',
+ * not '.')
+ * CTOR_<cls> The signature of the class' constructor
+ * SIG_<cls>_<meth> The signature of method <meth> of class <cls>
+ */
+
+/* Native Java classes */
+#define CLASS_ArrayList \
+ "java/util/ArrayList"
+#define CTOR_ArrayList \
+ "(I)V"
+#define SIG_ArrayList_add \
+ "(ILjava/lang/Object;)V"
+#define CLASS_Boolean \
+ "java/lang/Boolean"
+#define CTOR_Boolean \
+ "(Z)V"
+#define SIG_Boolean_booleanValue \
+ "()Z"
+#define SIG_Class_getName \
+ "()Ljava/lang/String;"
+#define CLASS_ClassNotFoundException \
+ "java/lang/ClassNotFoundException"
+#define CLASS_Double \
+ "java/lang/Double"
+#define CTOR_Double \
+ "(D)V"
+#define SIG_Double_doubleValue \
+ "()D"
+#define CLASS_IllegalArgumentException \
+ "java/lang/IllegalArgumentException"
+#define CLASS_Integer \
+ "java/lang/Integer"
+#define CTOR_Integer \
+ "(I)V"
+#define SIG_Integer_intValue \
+ "()I"
+#define CLASS_Long \
+ "java/lang/Long"
+#define CTOR_Long \
+ "(J)V"
+#define SIG_Long_longValue \
+ "()J"
+#define CLASS_NullPointerException \
+ "java/lang/NullPointerException"
+#define CLASS_System \
+ "java/lang/System"
+#define SIG_System_getProperty \
+ "(Ljava/lang/String;)Ljava/lang/String;"
+
+/* Classes defined in package hu.sztaki.lpds.dc */
+#define CLASS_ClientEvent \
+ "hu/sztaki/lpds/dc/client/Event"
+#define CTOR_ClientEvent \
+ "(JI)V"
+#define CLASS_ClientVersion \
+ "hu/sztaki/lpds/dc/client/Version"
+#define SIG_ClientVersion_getVersion \
+ "()Ljava/lang/String;"
+#define CLASS_DCException \
+ "hu/sztaki/lpds/dc/DCException"
+#define CTOR_DCException \
+ "(ILjava/lang/String;)V"
+#define CLASS_RuntimeDCException \
+ "hu/sztaki/lpds/dc/RuntimeDCException"
+#define CTOR_RuntimeDCException \
+ "(Ljava/lang/String;Ljava/lang/Throwable;)V"
+
+
+/* Debugging classes */
+#define DBG_CONN (1 << 0)
+#define DBG_EVENT (1 << 1)
+#define DBG_EXCEPTION (1 << 2)
+
+
+/**********************************************************************
+ * Macros
+ */
+
+#define RETURN_IF_EXCEPTION(env, x) do {\
+ if ((*(env))->ExceptionCheck(env)) \
+ return (x); \
+ } while (0)
+
+#define GET_CTOR(env, name, cls, meth) \
+ get_constructor(env, CLASS_ ## name, CTOR_ ## name, cls, meth)
+#define GET_METH(env, cls, clsname, methname) \
+ get_method_id(env, cls, G_STRINGIFY(methname), \
+ SIG_ ## clsname ## _ ## methname)
+
+
+/**********************************************************************
+ * Prototypes
+ */
+
+void propagate_runtime(JNIEnv *env, const char *fmt, ...)
+ G_GNUC_PRINTF(2, 3) G_GNUC_INTERNAL;
+void throw_exc(JNIEnv *env, const char *classname, const char *fmt, ...)
+ G_GNUC_PRINTF(3, 4) G_GNUC_INTERNAL;
+void throw_dcexc(JNIEnv *env, int code, const char *fmt, ...)
+ G_GNUC_PRINTF(3, 4) G_GNUC_INTERNAL;
+
+jclass find_class(JNIEnv *env, const char *classname) G_GNUC_INTERNAL;
+int get_constructor(JNIEnv *env, const char *class, const char *args,
+ jclass *cls, jmethodID *meth) G_GNUC_INTERNAL;
+jmethodID get_method_id(JNIEnv *env, jclass cls, const char *methodname,
+ const char *signature) G_GNUC_INTERNAL;
+int parse_debug_options(JNIEnv *env) G_GNUC_INTERNAL;
+
+
+/**********************************************************************
+ * Global variables
+ */
+
+extern unsigned jni_debug G_GNUC_INTERNAL;
+
+#endif /* UTIL_H */
diff --git a/dcapi/local/Makefile.am b/dcapi/local/Makefile.am
new file mode 100644
index 0000000..82a7ce0
--- /dev/null
+++ b/dcapi/local/Makefile.am
@@ -0,0 +1,38 @@
+lib_LTLIBRARIES =
+
+if BUILD_MASTER
+lib_LTLIBRARIES += libdcapi-local.la
+endif
+
+if BUILD_CLIENT
+lib_LTLIBRARIES += libdcapi-client-local.la
+endif
+
+pkgconfigdir = ${libdir}/pkgconfig
+pkgconfig_DATA = dcapi-local-client.pc dcapi-local-master.pc
+
+AM_CPPFLAGS = -I$(top_srcdir)/include $(GLIB_CFLAGS)
+
+noinst_HEADERS = \
+ local_common.h \
+ local_master.h \
+ local_result.h \
+ local_utils.h \
+ local_wu.h
+
+libdcapi_local_la_SOURCES = \
+ local_master.c \
+ local_events.c \
+ local_result.c \
+ local_utils.c \
+ local_common.c \
+ local_wu.c
+libdcapi_local_la_LIBADD = ../common/libdcapi-common-master.la $(GLIB_LIBS) -luuid
+libdcapi_local_la_LDFLAGS = -version-info 1:0:0 -export-symbols $(top_srcdir)/common/master.sym
+
+libdcapi_client_local_la_SOURCES = \
+ local_client.c \
+ local_utils.c \
+ local_common.c
+libdcapi_client_local_la_LIBADD = ../common/libdcapi-common-client.la
+libdcapi_client_local_la_LDFLAGS = -static
diff --git a/dcapi/local/dcapi-local-client.pc.in b/dcapi/local/dcapi-local-client.pc.in
new file mode 100644
index 0000000..811ecc1
--- /dev/null
+++ b/dcapi/local/dcapi-local-client.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: DC-API Local Client
+Description: Local client implementation for DC-API
+Version: @PACKAGE_VERSION@
+Requires.private: glib-2.0
+Libs: -L${libdir} -ldcapi-client-local
+Cflags: -I${includedir}
diff --git a/dcapi/local/dcapi-local-master.pc.in b/dcapi/local/dcapi-local-master.pc.in
new file mode 100644
index 0000000..718093a
--- /dev/null
+++ b/dcapi/local/dcapi-local-master.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: DC-API Local Master
+Description: Local master implementation for DC-API
+Version: @PACKAGE_VERSION@
+Requires: glib-2.0 uuid
+Libs: -L${libdir} -ldcapi-local
+Cflags: -I${includedir}
diff --git a/dcapi/local/local_client.c b/dcapi/local/local_client.c
new file mode 100644
index 0000000..bbaa419
--- /dev/null
+++ b/dcapi/local/local_client.c
@@ -0,0 +1,373 @@
+/*
+ * local/local_client.c
+ *
+ * DC-API functions of client side
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <dc_client.h>
+#include <dc_internal.h>
+
+#include "local_common.h"
+#include "local_utils.h"
+
+
+static int _DC_checkpoint_file_requested= 0;
+static int _DC_checkpoint_made= 0;
+
+static char *
+_DC_cfg(enum _DC_e_param what)
+{
+ if (what >= cfg_nuof)
+ return(NULL);
+ if (_DC_params[what].lvalue)
+ return(_DC_params[what].lvalue);
+
+ _DC_params[what].lvalue= DC_getCfgStr(_DC_params[what].name);
+ if (_DC_params[what].lvalue)
+ return(_DC_params[what].lvalue);
+ return(_DC_params[what].def);
+}
+
+/********************************************************************
+ * Common API functions
+ */
+
+int DC_getMaxMessageSize(void)
+{
+ return MAX_MESSAGE_SIZE;
+}
+
+int DC_getMaxSubresults(void)
+{
+ return MAX_SUBRESULTS;
+}
+
+unsigned DC_getGridCapabilities(void)
+{
+ return (DC_GridCapabilities)(DC_GC_STDERR | DC_GC_STDOUT);
+}
+
+/********************************************************************
+ * Client API functions
+ */
+/*done*/
+int DC_initClient(void)
+{
+ char *message;
+ int ret= _DC_parseCfg(CLIENT_CONFIG_NAME);
+
+ if (ret)
+ fprintf(stderr, "Error parsing configfile %s",
+ CLIENT_CONFIG_NAME);
+
+ _DC_init_utils();
+ _DC_init_common();
+
+ DC_log(LOG_DEBUG, "Slave dcapi initialized");
+
+ message= _DC_read_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_COMMAND, /*FALSE*/0);
+ if (message &&
+ strcmp(message, _DCAPI_CMD_RESUME) == 0)
+ {
+ DC_log(LOG_INFO, "Resume, restarting...");
+ _DC_read_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_COMMAND, /*TRUE*/1);
+ }
+
+ return ret;
+}
+
+/*done*/
+char *DC_resolveFileName(DC_FileType type, const char *logicalFileName)
+{
+ /* init_log calls this fn, so it is not possible to call DC_log
+ from here */
+ /*DC_log(LOG_DEBUG, "DC_resolveFileName(%d,%s)",
+ type, logicalFileName);*/
+ char *cn= _DC_cfg(cfg_checkpoint_file);
+ if (!strcmp(logicalFileName, DC_CHECKPOINT_FILE))
+ {
+ switch (type)
+ {
+ case DC_FILE_IN:
+ {
+ /* - param of last DC_checkpointMade()
+ - filename created by previous run
+ - NULL otherwise */
+ if (_DC_checkpoint_made)
+ {
+ char *fn= (char*)malloc(strlen(cn)+100);
+ sprintf(fn, "%s_finished.txt", cn);
+ return(fn);
+ }
+ else
+ {
+ FILE *f;
+ char *fn= (char*)malloc(strlen(cn)+100);
+ sprintf(fn, "%s_finished.txt", cn);
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ fclose(f);
+ return(fn);
+ }
+ else
+ {
+ free(fn);
+ return(NULL);
+ }
+ }
+ break;
+ }
+ case DC_FILE_OUT:
+ {
+ char *s;
+ /* new non-existant name */
+ if (_DC_checkpoint_file_requested)
+ {
+ DC_log(LOG_ERR, "Checkpoint file creation "
+ "can not be restarted "
+ "(DC_resolveFileName("
+ DC_CHECKPOINT_FILE
+ ") called twice without calling of "
+ "DC_checkpointMade())");
+ return(NULL);
+ }
+ _DC_checkpoint_file_requested= 1;
+ s= (char*)malloc(strlen(cn)+100);
+ sprintf(s, "%s_creating.txt", cn);
+ return(s);
+ break;
+ }
+ default:
+ return(NULL);
+ }
+ }
+ return(strdup((char*)logicalFileName));
+/*
+ if (!strcmp(logicalFileName, DC_CHECKPOINT_FILE))
+ {
+ return strdup(CKPT_LABEL);
+ }
+ return strdup(logicalFileName);
+*/
+}
+
+/*done*/
+int DC_sendResult(const char *logicalFileName, const char *path, DC_FileMode fileMode)
+{
+ char *fn;
+ int ret;
+
+ DC_log(LOG_DEBUG, "DC_sendResult(%s,%s,%d)",
+ logicalFileName,
+ path,
+ fileMode);
+ fn= malloc(strlen(logicalFileName)+100);
+ strcpy(fn, _DC_cfg(cfg_subresults_box));
+ strcat(fn, "/real_files");
+ if ((ret= _DC_mkdir_with_parents(fn, S_IRWXU|
+ S_IRGRP|S_IXGRP|
+ S_IROTH|S_IXOTH)) != DC_OK)
+ {
+ DC_log(LOG_ERR, "Failed to create dir for subresult (%s): %s",
+ fn, strerror(errno));
+ free(fn);
+ return(ret);
+ }
+ strcat(fn, "/");
+ strcat(fn, logicalFileName);
+ if ((ret= _DC_copyFile(path, fn)) != DC_OK)
+ {
+ DC_log(LOG_ERR, "Failed to copy subresult file %s to "
+ "%s", path, fn);
+ free(fn);
+ return(ret);
+ }
+ ret= _DC_create_message(_DC_cfg(cfg_subresults_box),
+ _DCAPI_MSG_LOGICAL, logicalFileName, NULL);
+ free(fn);
+ return(ret);
+
+ // not implemented yet!
+
+ return DC_ERR_NOTIMPL;
+}
+
+/*done*/
+int DC_sendMessage(const char *message)
+{
+ DC_log(LOG_DEBUG, "DC_sendMessage(%s)", message);
+ return _DC_create_message(_DC_cfg(cfg_client_message_box),
+ _DCAPI_MSG_MESSAGE, message, NULL);
+ // not implemented yet!
+
+ return DC_ERR_NOTIMPL;
+}
+
+/*done*/
+DC_ClientEvent *DC_checkClientEvent(void)
+{
+ char *message;
+ DC_ClientEvent *e= NULL;
+
+ message= _DC_read_message(_DC_cfg(cfg_master_message_box),
+ _DCAPI_MSG_MESSAGE, /*TRUE*/1);
+ if (message)
+ {
+ if ((e= calloc(1, sizeof(DC_ClientEvent))))
+ {
+ DC_log(LOG_DEBUG, "API event created: %p", e);
+ e->type= DC_CLIENT_MESSAGE;
+ e->message= message;
+ DC_log(LOG_DEBUG, "Message of the event: %s",
+ e->message);
+ }
+ else
+ {
+ free(message);
+ DC_log(LOG_ERR, "Failed to create "
+ "API event, memory allocation "
+ "error");
+ }
+ return(e);
+ }
+
+ message= _DC_read_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_COMMAND, /*TRUE*/1);
+ if (message &&
+ strcmp(message, _DCAPI_CMD_SUSPEND) == 0)
+ {
+ char *fn;
+ int f;
+
+ DC_log(LOG_INFO, "Master asked me to suspend");
+ _DC_create_message(_DC_cfg(cfg_management_box),
+ _DCAPI_MSG_ACK,
+ _DCAPI_ACK_SUSPEND,
+ NULL);
+
+ fn= DC_resolveFileName(DC_FILE_IN, DC_CHECKPOINT_FILE);
+ if (fn != NULL)
+ free(fn);
+ else
+ {
+ DC_log(LOG_WARNING, "Slave suspending but "
+ "no checkpoint made yet");
+ free(fn);
+ }
+
+ fflush(NULL);
+ fn= DC_resolveFileName(DC_FILE_OUT, DC_LABEL_STDOUT);
+ if (fn)
+ {
+ if ((f= open(fn, O_APPEND)) > 0)
+ {
+ fsync(f);
+ close(f);
+ }
+ free(fn);
+ }
+ _DC_create_message(_DC_cfg(cfg_output_cache),
+ DC_LABEL_STDOUT,
+ NULL,
+ DC_LABEL_STDOUT);
+ fn= DC_resolveFileName(DC_FILE_OUT, DC_LABEL_STDERR);
+ if (fn)
+ {
+ if ((f= open(fn, O_APPEND)) > 0)
+ {
+ fsync(f);
+ close(f);
+ }
+ free(fn);
+ }
+ _DC_create_message(_DC_cfg(cfg_output_cache),
+ DC_LABEL_STDERR,
+ NULL,
+ DC_LABEL_STDERR);
+
+ DC_finishClient(0);
+ }
+ // not implemented yet!
+
+ return NULL;
+}
+
+/*done*/
+void DC_destroyClientEvent(DC_ClientEvent *event)
+{
+ DC_log(LOG_DEBUG, "DC_destroyClientEvent(%p)", event);
+ if (event)
+ {
+ switch (event->type)
+ {
+ case DC_CLIENT_MESSAGE:
+ {
+ if (event->message)
+ free(event->message);
+ break;
+ }
+ default:
+ break;
+ }
+ free(event);
+ }
+ // not implemented yet!
+}
+
+/*done*/
+void DC_checkpointMade(const char *fileName)
+{
+ DC_log(LOG_DEBUG, "DC_checkpointMade(%s)", fileName);
+ _DC_checkpoint_file_requested= 0;
+ if (fileName)
+ {
+ char *cn= _DC_cfg(cfg_checkpoint_file);
+ char *fn;
+ fn= (char*)malloc(strlen(cn)+100);
+ sprintf(fn, "%s_finished.txt", cn);
+ if (rename(fileName, fn) != 0)
+ {
+ DC_log(LOG_ERR, "Renaming %s to %s failed: %s",
+ fileName, fn, strerror(errno));
+ }
+ else
+ _DC_checkpoint_made++;
+ free(fn);
+ }
+}
+
+void DC_fractionDone(double fraction)
+{
+ // Nothing to do with it.
+}
+
+void DC_finishClient(int exitcode)
+{
+ // XXX Need to send a message to the master side of the DC_API!
+
+ exit(exitcode);
+}
+
+
+/* End of local/local_client.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_common.c b/dcapi/local/local_common.c
new file mode 100644
index 0000000..b674540
--- /dev/null
+++ b/dcapi/local/local_common.c
@@ -0,0 +1,62 @@
+/*
+ * local/local_common.c
+ *
+ * DC-API functions common for master and slave side
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+
+#include "local_common.h"
+
+
+struct _DC_s_param _DC_params[cfg_nuof];
+
+
+void
+_DC_init_common(void)
+{
+ int i;
+
+ for (i= 0; i < cfg_nuof; i++)
+ {
+ _DC_params[i].name= 0;
+ _DC_params[i].def= 0;
+ _DC_params[i].lvalue= 0;
+ _DC_params[i].gvalue= 0;
+ }
+ _DC_params[cfg_client_message_box].name= "ClientMessageBox";
+ _DC_params[cfg_client_message_box].def= "_dcapi_client_messages";
+
+ _DC_params[cfg_master_message_box].name= "MasterMessageBox";
+ _DC_params[cfg_master_message_box].def= "_dcapi_master_messages";
+
+ _DC_params[cfg_subresults_box].name= "SubresultBox";
+ _DC_params[cfg_subresults_box].def= "_dcapi_client_subresults";
+
+ _DC_params[cfg_management_box].name= "SystemMessageBox";
+ _DC_params[cfg_management_box].def= "_dcapi_system_messages";
+
+ _DC_params[cfg_executable].name= "Executable";
+ _DC_params[cfg_executable].def= 0/*NULL*/;
+
+ _DC_params[cfg_leave_files].name= "LeaveFiles";
+ _DC_params[cfg_leave_files].def= "0";
+
+ _DC_params[cfg_checkpoint_file].name= "CheckpointFile";
+ _DC_params[cfg_checkpoint_file].def= "_dcapi_checkpoint";
+
+ _DC_params[cfg_output_cache].name= "SavedOutputs";
+ _DC_params[cfg_output_cache].def= "_dcapi_saved_output";
+}
+
+
+/* End of local/local_common.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_common.h b/dcapi/local/local_common.h
new file mode 100644
index 0000000..3140b28
--- /dev/null
+++ b/dcapi/local/local_common.h
@@ -0,0 +1,119 @@
+/*
+ * local/local_common.h
+ *
+ * DC-API definitions of both client and master side
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+/* Definitions common for both the server and client side */
+#ifndef __DC_API_LOCAL_COMMON_H
+#define __DC_API_LOCAL_COMMON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For the local backend, it is OK to use glib on the client side as well */
+#include <glib.h>
+
+/* Prefix of subresult file labels */
+#define SUBRESULT_PFX "dc_subresult_"
+
+/* Logical names of the standard output file */
+#define STDOUT_LABEL "dc_stdout"
+
+/* Logical names of the standard error file */
+#define STDERR_LABEL "dc_stderr"
+
+/* Logical names of the checkpoint file */
+#define CKPT_LABEL "dc_checkpoint"
+
+/* Name of the client-side config. file */
+#define CLIENTCONF_LABEL "dc_client.conf"
+
+/* Maximum allowed message length */
+#define MAX_MESSAGE_SIZE 16384
+
+/* Maximum allowed message length */
+/*
+ * local/local_master.c
+ *
+ * DC-API functions of master side
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#define MAX_SUBRESULTS 100
+
+/* Prefix for internal messages between the client-side and master-side DC-API */
+#define DCAPI_MSG_PFX "__dcapi__"
+
+/* Must match the definition of WorkdirFile */
+static const char *const workdir_prefixes[] =
+{
+ "in_", "out_", "checkpoint", "dc_"
+};
+
+
+/****************************************************************************/
+
+#define CLIENT_CONFIG_NAME "_dcapi_configfile.txt"
+
+
+enum _DC_e_param {
+ cfg_client_message_box= 0,
+ cfg_master_message_box,
+ cfg_subresults_box,
+ cfg_management_box,
+ cfg_executable,
+ cfg_leave_files,
+ cfg_checkpoint_file,
+ cfg_output_cache,
+ cfg_nuof
+};
+
+struct _DC_s_param {
+ char *name;
+ char *def;
+ char *lvalue;
+ char *gvalue;
+};
+
+
+extern struct _DC_s_param _DC_params[cfg_nuof] G_GNUC_INTERNAL;
+
+extern void _DC_init_common(void) G_GNUC_INTERNAL;
+#define _DCAPI_MSG_MESSAGE "message"
+#define _DCAPI_MSG_LOGICAL "logical_name"
+#define _DCAPI_MSG_COMMAND "command"
+#define _DCAPI_MSG_ACK "acknowledge"
+
+#define _DCAPI_CMD_SUSPEND "suspend"
+#define _DCAPI_ACK_SUSPEND "suspending"
+
+#define _DCAPI_CMD_RESUME "resume"
+
+#define _DCAPI_SIG_SERIALIZED "serialized"
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DC_API_LOCAL_COMMON_H */
+
+
+/* End of local/local_common.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_events.c b/dcapi/local/local_events.c
new file mode 100644
index 0000000..2790278
--- /dev/null
+++ b/dcapi/local/local_events.c
@@ -0,0 +1,532 @@
+/*
+ * local/local_events.c
+ *
+ * DC-API functions related to event handling
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "local_master.h"
+#include "local_utils.h"
+#include "local_result.h"
+
+
+static int _DC_wu_terminated(DC_Workunit *wu)
+{
+ char syscmd[256];
+ int retval;
+
+ snprintf(syscmd, 256, "ps -p %d >/dev/null", wu->pid);
+ retval = system(syscmd);
+
+ /* retval == 0 means that the process is still in output of ps
+ but it can be <defunct>.
+ So check it again.
+ */
+ if (retval == 0) {
+ snprintf(syscmd, 256, "ps -p %d | grep defunct >/dev/null",
+ wu->pid);
+ retval = system(syscmd);
+ if (retval == 0) retval = 1; /* defunct means finished */
+ else if (retval == 1) retval = 0;
+ }
+ if (retval == 1) { /* process finished (not exists) */
+ /* create the result object */
+ DC_log(LOG_INFO, "Work unit %s with pid %d is found to be finished",
+ wu->name, wu->pid);
+ wu->state = DC_WU_FINISHED;
+ return 1;
+ }
+ return 0;
+}
+
+/* by DD */
+static DC_MasterEvent *
+_DC_event_create(DC_Workunit *wu,
+ DC_Result *result,
+ DC_PhysicalFile *subresult,
+ char *message)
+{
+ DC_MasterEvent *e;
+
+ if ((e= g_new0(DC_MasterEvent, 1)) == NULL)
+ return(NULL);
+ e->wu= wu;
+ if (result)
+ {
+ e->type= DC_MASTER_RESULT;
+ e->result= result;
+ }
+ else if (subresult)
+ {
+ e->type= DC_MASTER_SUBRESULT;
+ e->subresult= subresult;
+ }
+ else if (message)
+ {
+ e->type= DC_MASTER_MESSAGE;
+ e->message= g_strdup(message);
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Wrong invokation of _DC_event_create("
+ "%p,%p,%p,%p)", wu, result, subresult, message);
+ g_free(e);
+ return(NULL);
+ }
+ return(e);
+}
+
+/* by DD */
+static DC_MasterEvent *
+_DC_wu_infra2api_event(DC_Workunit *wu)
+{
+ if (_DC_wu_terminated(wu))
+ {
+ DC_log(LOG_DEBUG, "Job terminated, "
+ "asked to susp=%d",
+ wu->asked_to_suspend);
+ GString *s;
+ s= g_string_new("");
+ g_string_printf(s, "%s/%s", wu->workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ char *message;
+ if ((message= _DC_read_message(s->str,
+ _DCAPI_MSG_ACK,
+ FALSE)))
+ {
+ DC_log(LOG_DEBUG, "Acknowledge exists: %s",
+ message);
+ if (strcmp(message, _DCAPI_ACK_SUSPEND) == 0)
+ {
+ DC_log(LOG_DEBUG, "Suspend "
+ "acknowledged");
+ _DC_read_message(s->str,
+ _DCAPI_MSG_ACK,
+ TRUE);
+ wu->asked_to_suspend= TRUE;
+ }
+ }
+ g_string_free(s, TRUE);
+
+ if (wu->asked_to_suspend)
+ {
+ /*_DC_wu_set_state(wu, DC_WU_SUSPENDED);*/
+ wu->state= DC_WU_SUSPENDED;
+ wu->asked_to_suspend= FALSE;
+ }
+ else
+ {
+ DC_MasterEvent *e;
+ e= _DC_event_create(wu, _DC_result_create(wu),
+ NULL, NULL);
+ DC_log(LOG_DEBUG, "Result event created: "
+ "%p for wu (%p-\"%s\")",
+ e, wu, wu->name);
+ DC_log(LOG_DEBUG, "Result of the event: %p",
+ e->result);
+ /*_DC_wu_set_state(wu, DC_WU_FINISHED);*/
+ wu->state= DC_WU_FINISHED;
+ return(e);
+ }
+ }
+ return(NULL);
+}
+
+static void testWUEvents(void *key, void *value, void *ptr) /* by VG */
+{
+ DC_Workunit *wu = (DC_Workunit *)value;
+ DC_Result *result;
+ char syscmd[256];
+ int retval;
+
+ snprintf(syscmd, 256, "ps -p %d >/dev/null", wu->pid);
+ retval = system(syscmd);
+
+ /* retval == 0 means that the process is still in output of ps
+ but it can be <defunct>.
+ So check it again.
+ */
+ if (retval == 0) {
+ snprintf(syscmd, 256, "ps -p %d | grep defunct >/dev/null",
+ wu->pid);
+ retval = system(syscmd);
+ if (retval == 0) retval = 1; /* defunct means finished */
+ else if (retval == 1) retval = 0;
+ }
+ if (retval == 1) { /* process finished (not exists) */
+ /* create the result object */
+ DC_log(LOG_INFO, "Work unit %s with pid %d is found to be finished",
+ wu->name, wu->pid);
+ wu->state = DC_WU_FINISHED;
+
+ result = _DC_createResult(wu->name);
+ if (result)
+ {
+ _DC_result_callback(result->wu, result);
+ _DC_destroyResult(result);
+ }
+ }
+
+ return;
+}
+
+int _DC_searchForEvents() /* by VG */
+{
+ if (!_DC_wu_table)
+ {
+ DC_log(LOG_WARNING, "Searching for events is only usefull if there is any running work unit!");
+ return DC_ERR_BADPARAM;
+ }
+
+ g_hash_table_foreach(_DC_wu_table, (GHFunc)testWUEvents, NULL);
+
+ return DC_OK;
+}
+
+
+/* by DD */
+/*
+static void
+_DC_event_destroy(DC_MasterEvent *event)
+{
+ if (!event)
+ return;
+ switch (event->type)
+ {
+ case DC_MASTER_RESULT:
+ if (event->result)
+ _DC_result_destroy(event->result);
+ break;
+ case DC_MASTER_SUBRESULT:
+ if (event->subresult)
+ _DC_destroyPhysicalFile(event->subresult);
+ break;
+ case DC_MASTER_MESSAGE:
+ if (event->message)
+ g_free(event->message);
+ break;
+ default:
+ break;
+ }
+ g_free(event);
+}
+*/
+
+/* by DD */
+static DC_MasterEvent *
+_DC_wu_check_client_messages(DC_Workunit *wu)
+{
+ GString *s;
+ char *message;
+ DC_MasterEvent *e= NULL;
+
+ /*if (!_DC_wu_check(wu))
+ return(NULL);*/
+
+ s= g_string_new(wu->workdir);
+ g_string_append_printf(s, "/%s",
+ _DC_wu_cfg(wu, cfg_client_message_box));
+ /*DC_log(LOG_DEBUG, "Checking box %s for message\n", s->str);*/
+ if ((message= _DC_read_message(s->str, _DCAPI_MSG_MESSAGE, TRUE)))
+ {
+ e= _DC_event_create(wu, NULL, NULL, message);
+ DC_log(LOG_DEBUG, "Message event created: %p "
+ "for wu (%p-\"%s\")", e, wu, wu->name);
+ DC_log(LOG_DEBUG, "Message of the event: %s", e->message);
+ }
+
+ /*
+ g_string_printf(s, "%s/%s", wu->data.workdir,
+ _DC_wu_cfg(wu, cfg_management_box));
+ if ((message= _DC_read_message(s->str, _DCAPI_MSG_ACK, TRUE)))
+ {
+ DC_log(LOG_DEBUG, "Acknowledge arrived: %s", message);
+ if (strcmp(message, _DCAPI_ACK_SUSPEND) == 0)
+ {
+ wu->asked_to_suspend= TRUE;
+ }
+ }
+ */
+
+ if (e == NULL/*)
+ _DC_counter++;
+ if (_DC_counter % 5 == 0*/)
+ {
+ g_string_printf(s, "%s/%s", wu->workdir,
+ _DC_wu_cfg(wu, cfg_subresults_box));
+ /*DC_log(LOG_DEBUG, "Checking box %s for logical_name\n",
+ s->str);*/
+ if ((message= _DC_read_message(s->str, _DCAPI_MSG_LOGICAL,
+ TRUE)))
+ {
+ DC_PhysicalFile *f;
+ g_string_append_printf(s, "/real_files/%s", message);
+ DC_log(LOG_DEBUG, "Got subresult %s %s",
+ message, s->str);
+ f= _DC_createPhysicalFile(message, s->str);
+ e= _DC_event_create(wu, NULL, f, NULL);
+ }
+ }
+
+ g_string_free(s, TRUE);
+ return(e);
+}
+
+
+/* by DD */
+static void
+_DC_process_event(DC_MasterEvent *event)
+{
+ if (!event)
+ return;
+
+ DC_log(LOG_DEBUG, "Processing an event %d, calling callback...",
+ event->type);
+ switch (event->type)
+ {
+ case DC_MASTER_RESULT:
+ {
+ if (_DC_result_callback)
+ (*_DC_result_callback)(event->wu,
+ event->result);
+ break;
+ }
+ case DC_MASTER_SUBRESULT:
+ {
+ if (_DC_subresult_callback)
+ (*_DC_subresult_callback)(event->wu,
+ event->subresult->label,
+ event->subresult->path);
+ break;
+ }
+ case DC_MASTER_MESSAGE:
+ {
+ if (_DC_message_callback)
+ (*_DC_message_callback)(event->wu,
+ event->message);
+ break;
+ }
+ }
+ DC_destroyMasterEvent(event);
+}
+
+int DC_processMasterEvents(int timeout)
+{
+ /* call callback and destroy event */
+ time_t start, now;
+ DC_MasterEvent *event;
+
+ DC_log(LOG_DEBUG, "DC_processMasterEvents(%d)",
+ timeout);
+
+ if ((event= DC_waitMasterEvent(NULL, 0)) != NULL)
+ _DC_process_event(event);
+ if (timeout==0)
+ return(DC_OK);
+
+ start= time(NULL);
+ now= time(NULL);
+ while (now-start <= timeout &&
+ g_hash_table_size(_DC_wu_table) > 0)
+ {
+ sleep(1);
+ if ((event= DC_waitMasterEvent(NULL, 0)) != NULL)
+ _DC_process_event(event);
+ now= time(NULL);
+ }
+ return(DC_OK);
+/*
+ int retval;
+ static time_t start, current;
+
+ if (!_dc_resultcb || !_dc_subresultcb || !_dc_messagecb)
+ {
+ DC_log(LOG_ERR, "DC_processMasterEvents: callbacks are not set up");
+ return DC_ERR_CONFIG;
+ }
+
+ DC_log(LOG_INFO, "DC_processMasterEvents: Searching for events ...");
+
+ start = time(NULL);
+ while (1)
+ {
+*/
+ /* implemted in rm.c */
+/*
+ retval = _DC_searchForEvents();
+ if (retval)
+ return retval;
+
+ if (DC_getWUNumber(DC_WU_RUNNING) == 0)
+ {
+ DC_log(LOG_INFO, "DC_processMasterEvents: No more running workunits ... returning");
+ return 0;
+ }
+
+ current = time(NULL);
+ if (current - start > timeout)
+ {
+ DC_log(LOG_INFO, "DC_processMasterEvents: timeout is over ... returning");
+ return 0;
+ }
+ sleep(sleep_interval);
+ }
+*/
+}
+
+/* by DD */
+static DC_MasterEvent *_DC_filtered_event;
+static int _DC_counter;
+
+static gboolean
+_DC_check_filtered_wu_event(gpointer wu_name, gpointer w, gpointer ptr)
+{
+ DC_Workunit *wu= (DC_Workunit *)w;
+ char *filter= (char *)ptr;
+ char *tag;
+ int match= TRUE;
+ gboolean found;
+
+ _DC_counter++;
+ tag= DC_getWUTag(wu);
+ if (filter)
+ if (strcmp(tag, filter) != 0)
+ tag= FALSE;
+ tag?free(tag):0;
+ if (!match)
+ {
+ return(FALSE);
+ }
+ if ((_DC_filtered_event= DC_waitWUEvent(wu, 0)) != NULL)
+ DC_log(LOG_DEBUG,
+ "DC_waitWUEvent found an event for wu %p-\"%s\"",
+ wu, wu->name);
+ found= _DC_filtered_event != NULL;
+ return(found);
+}
+
+
+DC_MasterEvent *DC_waitMasterEvent(const char *wuFilter, int timeout)
+{
+ /* no callback called! */
+ DC_Workunit *wu;
+ time_t start, now;
+
+ if (timeout)
+ DC_log(LOG_DEBUG, "DC_waitMasterEvent(%s, %d)",
+ wuFilter, timeout);
+
+ start= time(NULL);
+ now= time(NULL);
+ do
+ {
+ _DC_filtered_event= NULL;
+ _DC_counter= 0;
+ wu= (DC_Workunit *)
+ g_hash_table_find(_DC_wu_table,
+ _DC_check_filtered_wu_event,
+ (gpointer)wuFilter);
+ if (_DC_filtered_event)
+ return(_DC_filtered_event);
+ if (timeout)
+ sleep(1);
+ }
+ while (timeout != 0 &&
+ now-start <= timeout);
+ return(NULL);
+/*
+ DC_MasterEvent *event;
+
+// event = look_for_results(wuFilter, NULL, timeout);
+
+ return event;
+*/
+}
+
+DC_MasterEvent *DC_waitWUEvent(DC_Workunit *wu, int timeout)
+{
+ /* no callback called! */
+ time_t start, now;
+ DC_MasterEvent *me= NULL;
+
+ /*if (!_DC_wu_check(wu))
+ return(NULL);*/
+ if (timeout)
+ DC_log(LOG_DEBUG, "DC_waitWUEvent(%p-\"%s\", %d)",
+ wu, wu->name, timeout);
+
+ start= time(NULL);
+ now= start;
+ do
+ {
+ if ((me= _DC_wu_check_client_messages(wu)) != NULL)
+ DC_log(LOG_DEBUG, "DC_waitWUEvent found a message for "
+ "wu %p-\"%s\"", wu, wu->name);
+ if (!me)
+ {
+ if ((me= _DC_wu_infra2api_event(wu)) != NULL)
+ DC_log(LOG_DEBUG,
+ "DC_waitWUEvent found an "
+ "infrastructure event for wu %p-\"%s\"",
+ wu, wu->name);
+ }
+ if (me)
+ {
+ return(me);
+ }
+ now= time(NULL);
+ if (timeout)
+ sleep(1);
+ }
+ while (timeout !=0 &&
+ now-start <= timeout);
+ return(NULL);
+/*
+ DC_MasterEvent *event;
+
+ return event;
+*/
+}
+
+/* by VG */
+void DC_destroyMasterEvent(DC_MasterEvent *event)
+{
+ if (!event)
+ return;
+
+ switch (event->type)
+ {
+ case DC_MASTER_RESULT:
+ _DC_destroyResult(event->result);
+ break;
+ case DC_MASTER_SUBRESULT:
+ _DC_destroyPhysicalFile(event->subresult);
+ break;
+ case DC_MASTER_MESSAGE:
+ g_free(event->message);
+ break;
+ default:
+ DC_log(LOG_ERR, "Unknown event type %d", event->type);
+ break;
+ }
+}
+
+
+/* End of local/local_events.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_master.c b/dcapi/local/local_master.c
new file mode 100644
index 0000000..bb3a234
--- /dev/null
+++ b/dcapi/local/local_master.c
@@ -0,0 +1,845 @@
+/*
+ * local/local_master.C
+ *
+ * DC-API functions of master side
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id: local_master.c 2246 2009-09-08 15:28:03Z gombasg $ */
+/* $Date: 2009-09-08 17:28:03 +0200 (Tue, 08 Sep 2009) $ */
+/* $Revision: 2246 $ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <signal.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "local_common.h"
+#include "local_master.h"
+#include "local_utils.h"
+#include "local_wu.h"
+
+
+/********************************************************************
+ * Global variables
+ */
+
+DC_ResultCallback _DC_result_callback;
+DC_SubresultCallback _DC_subresult_callback;
+DC_MessageCallback _DC_message_callback;
+
+char project_uuid_str[37];
+uuid_t project_uuid;
+int sleep_interval;
+
+GHashTable *_DC_wu_table;
+
+
+/********************************************************************
+ * API functions
+ */
+
+int DC_initMaster(const char *config_file)
+{
+ char *cfgval;
+ int ret;
+
+ _DC_init_common();
+
+ if (!config_file)
+ config_file = DC_CONFIG_FILE;
+
+ ret = _DC_parseCfg(config_file);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "The DC-API cannot be initialized without a "
+ "config file");
+ return ret;
+ }
+
+ /* Check the working directory */
+ cfgval = DC_getCfgStr(CFG_WORKDIR);
+ if (!cfgval)
+ {
+ DC_log(LOG_ERR, "%s is not specified in the config file",
+ CFG_WORKDIR);
+ return DC_ERR_CONFIG;
+ }
+ free(cfgval);
+
+ /* Check sleep interval */
+ sleep_interval = DC_getCfgInt(CFG_SLEEPINTERVAL, DEFAULT_SLEEP_INTERVAL);
+ if (sleep_interval < 1)
+ sleep_interval = 1;
+
+ /* Check the project UUID */
+ cfgval = DC_getCfgStr(CFG_INSTANCEUUID);
+ if (!cfgval)
+ {
+ DC_log(LOG_ERR, "%s is not set in the config file",
+ CFG_INSTANCEUUID);
+ return DC_ERR_CONFIG;
+ }
+
+ ret = uuid_parse((char *)cfgval, project_uuid);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Invalid project UUID");
+ free(cfgval);
+ return DC_ERR_CONFIG;
+ }
+ free(cfgval);
+
+ /* Enforce a canonical string representation of the UUID */
+ uuid_unparse_lower(project_uuid, project_uuid_str);
+
+ return DC_OK;
+}
+
+int DC_getMaxMessageSize(void)
+{
+ return MAX_MESSAGE_SIZE;
+}
+
+int DC_getMaxSubresults(void)
+{
+ return MAX_SUBRESULTS;
+}
+
+unsigned DC_getGridCapabilities(void)
+{
+ return DC_GC_STDOUT | DC_GC_STDERR;
+}
+
+void DC_setMasterCb(DC_ResultCallback resultcb, DC_SubresultCallback subresultcb,
+ DC_MessageCallback msgcb)
+{
+ _DC_result_callback = resultcb;
+ _DC_subresult_callback = subresultcb;
+ _DC_message_callback = msgcb;
+}
+
+void DC_setResultCb(DC_ResultCallback cb)
+{
+ _DC_result_callback = cb;
+}
+
+void DC_setSubresultCb(DC_SubresultCallback cb)
+{
+ _DC_subresult_callback = cb;
+}
+
+void DC_setMessageCb(DC_MessageCallback cb)
+{
+ _DC_message_callback = cb;
+}
+
+
+/********************************************************************
+ * Functions
+ */
+
+static char *get_workdir(const uuid_t uuid, int create)
+{
+ char *tmp, uuid_str[37], *cfgval;
+ GString *str;
+ int ret;
+
+ uuid_unparse_lower(uuid, uuid_str);
+
+ cfgval = DC_getCfgStr(CFG_WORKDIR);
+ if (!cfgval)
+ return NULL;
+ str = g_string_new(cfgval);
+ free(cfgval);
+
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, ".dcapi-");
+ g_string_append(str, project_uuid_str);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append_printf(str, "%02x", uuid[0]);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, uuid_str);
+ if (create)
+ {
+ ret = mkdir(str->str, 0755);
+ if (ret && errno != EEXIST)
+ goto error;
+ }
+
+ tmp = str->str;
+ g_string_free(str, FALSE);
+ return tmp;
+
+error:
+ DC_log(LOG_ERR, "Failed to create WU working directory %s: %s",
+ str->str, strerror(errno));
+ g_string_free(str, TRUE);
+ return NULL;
+}
+
+
+DC_Workunit *DC_createWU(const char *clientName, const char *arguments[],
+ int subresults, const char *tag)
+{
+ char uuid_str[37];
+ DC_Workunit *wu;
+
+ if (subresults > MAX_SUBRESULTS){
+ DC_log(LOG_ERR, "DC_createWU: The given subresult number: %d is too high. (max:%d)",
+ subresults, MAX_SUBRESULTS);
+ return NULL;
+ }
+
+ if (!clientName)
+ {
+ DC_log(LOG_ERR, "DC_createWU: clientName is not supplied");
+ return NULL;
+ }
+
+ wu = g_new0(DC_Workunit, 1);
+
+ wu->argv = g_strdupv((char **)arguments);
+
+ for (wu->argc = 0; arguments && arguments[wu->argc]; wu->argc++)
+ /* Nothing */;
+
+ wu->subresults = subresults;
+ wu->tag = g_strdup(tag);
+
+ uuid_generate(wu->uuid);
+ uuid_unparse_lower(wu->uuid, uuid_str);
+ wu->uuid_str = g_strdup(uuid_str);
+
+ if (tag)
+ wu->name = g_strdup_printf("%s_%s_%s", project_uuid_str,
+ uuid_str, tag);
+ else
+ wu->name = g_strdup_printf("%s_%s", project_uuid_str, uuid_str);
+
+ /* Calculate & create the working directory. The working directory
+ * has the form:
+ * <project work dir>/.dcapi-<project uuid>/<hash>/<wu uuid>
+ * Where <hash> is the first 2 hex digits of the uuid
+ */
+ wu->workdir = get_workdir(wu->uuid, TRUE);
+ if (!wu->workdir)
+ {
+ DC_destroyWU(wu);
+ return NULL;
+ }
+
+ wu->client_name = /*DC_getClientCfgStr(clientName, "name", FALSE);*/
+ strdup(clientName);
+ /*wu->client_path = DC_getClientCfgStr(clientName, "path", FALSE);*/
+
+ if (!wu->client_name/* || !wu->client_path*/)
+ {
+ DC_log(LOG_ERR, "Failed to create WU. Cannot find client name\n"
+ "Define client application in the config file:\n"
+ "[Client-%s]\nname = <client name>\npath = <client path>", clientName);
+ DC_destroyWU(wu);
+ return NULL;
+ }
+
+ DC_log(LOG_DEBUG, "client path: %%s, client name: %s from client: %s",
+ /*wu->client_path,*/ wu->client_name, clientName);
+
+ if (!_DC_wu_table)
+ _DC_wu_table = g_hash_table_new_full(g_str_hash, g_str_equal,
+ NULL, NULL);
+ g_hash_table_insert(_DC_wu_table, wu->name, wu);
+
+ return wu;
+}
+
+
+static char *get_workdir_path(DC_Workunit *wu, const char *label,
+ WorkdirFile type)
+{
+ return g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, label);
+}
+
+void DC_destroyWU(DC_Workunit *wu)
+{
+ char *path;
+ int leave= strtol(_DC_wu_cfg(wu, cfg_leave_files), 0, 0);
+ if (!wu)
+ return;
+
+ if (_DC_wu_table)
+ g_hash_table_remove(_DC_wu_table, wu->name);
+
+ switch (wu->state)
+ {
+ case DC_WU_RUNNING:
+ /* XXX Abort the work unit */
+ break;
+ default:
+ break;
+ }
+
+ while (wu->input_files &&
+ !leave)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)wu->input_files->data;
+
+ unlink(file->path);
+ wu->input_files = g_list_delete_link(wu->input_files,
+ wu->input_files);
+ _DC_destroyPhysicalFile(file);
+ }
+
+ while (wu->output_files &&
+ !leave)
+ {
+ char *name = (char *)wu->output_files->data;
+ char *file = g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, name);
+ unlink(file);
+ g_free(file);
+
+ g_free(wu->output_files->data);
+ wu->output_files = g_list_delete_link(wu->output_files,
+ wu->output_files);
+ }
+
+ /* checkpoint file */
+ path = g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, CKPT_LABEL);
+ if (!leave)
+ unlink(path);
+ g_free(path);
+
+ /* standard output file */
+ path = g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, STDOUT_LABEL);
+ if (!leave)
+ unlink(path);
+ g_free(path);
+
+ /* standard error file */
+ path = g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, STDERR_LABEL);
+ if (!leave)
+ unlink(path);
+ g_free(path);
+
+ if (wu->client_name &&
+ !leave)
+ {
+ char *path = g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, wu->client_name);
+ unlink(path);
+ g_free(path);
+ g_free(wu->client_name);
+ /*g_free(wu->client_path);*/
+ }
+
+ if (wu->workdir &&
+ !leave)
+ {
+ const char *name;
+ GDir *dir;
+ int ret;
+
+ dir = g_dir_open(wu->workdir, 0, NULL);
+ /* The work directory should not contain any extra files, but
+ * just in case */
+ while (dir && (name = g_dir_read_name(dir)))
+ {
+ GString *str = g_string_new(wu->workdir);
+ g_string_append_c(str, G_DIR_SEPARATOR);
+ g_string_append(str, name);
+ DC_log(LOG_INFO, "Removing unknown file %s",
+ str->str);
+ unlink(str->str);
+ g_string_free(str, TRUE);
+ }
+ if (dir)
+ g_dir_close(dir);
+
+ ret = rmdir(wu->workdir);
+ if (ret)
+ DC_log(LOG_WARNING, "Failed to remove WU working "
+ "directory %s: %s", wu->workdir,
+ strerror(errno));
+ g_free(wu->workdir);
+ }
+
+ g_free(wu->uuid_str);
+ g_strfreev(wu->argv);
+ g_free(wu->tag);
+ g_free(wu->name);
+
+ g_free(wu);
+}
+
+/* Check if the logical name is not already registered */
+static int check_logical_name(DC_Workunit *wu, const char *logicalFileName)
+{
+ GList *l;
+
+ if (strchr(logicalFileName, '/') || strchr(logicalFileName, '\\'))
+ {
+ DC_log(LOG_ERR, "Illegal characters in logical file name %s",
+ logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ for (l = wu->input_files; l; l = l->next)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+
+ if (!strcmp(file->label, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as an "
+ "input file", logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ }
+ for (l = wu->output_files; l; l = l->next)
+ {
+ if (!strcmp((char *)l->data, logicalFileName))
+ {
+ DC_log(LOG_ERR, "File %s is already registered as an "
+ "output file", logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+ }
+ return 0;
+}
+
+#define COPY_BUFSIZE 65536
+static int copy_file(const char *src, const char *dst)
+{
+ int sfd, dfd;
+ ssize_t ret;
+ char *buf;
+
+ buf = (char *)g_malloc(COPY_BUFSIZE);
+ sfd = open(src, O_RDONLY);
+ if (sfd == -1)
+ {
+ DC_log(LOG_ERR, "Failed to open %s for copying: %s", src,
+ strerror(errno));
+ g_free(buf);
+ return -1;
+ }
+ dfd = open(dst, O_WRONLY | O_CREAT | O_TRUNC, 00664);
+ if (dfd == -1)
+ {
+ DC_log(LOG_ERR, "Failed to create %s: %s", dst, strerror(errno));
+ g_free(buf);
+ close(sfd);
+ return -1;
+ }
+
+ while ((ret = read(sfd, buf, COPY_BUFSIZE)) > 0)
+ {
+ char *ptr = buf;
+ while (ret)
+ {
+ ssize_t ret2 = write(dfd, ptr, ret);
+ if (ret2 < 0)
+ {
+ DC_log(LOG_ERR, "Error writing to %s: %s", dst,
+ strerror(errno));
+ close(sfd);
+ close(dfd);
+ unlink(dst);
+ g_free(buf);
+ return -1;
+ }
+ ret -= ret2;
+ ptr += ret2;
+ }
+ }
+
+ if (ret < 0)
+ {
+ DC_log(LOG_ERR, "Error reading from %s: %s", src, strerror(errno));
+ close(sfd);
+ close(dfd);
+ g_free(buf);
+ unlink(dst);
+ return -1;
+ }
+
+ g_free(buf);
+ close(sfd);
+ if (close(dfd))
+ {
+ DC_log(LOG_ERR, "Error writing to %s: %s", dst, strerror(errno));
+ unlink(dst);
+ return -1;
+ }
+ return 0;
+}
+
+int DC_addWUInput(DC_Workunit *wu, const char *logicalFileName, const char *URL,
+ DC_FileMode fileMode, ...)
+{
+ DC_PhysicalFile *file;
+ char *workpath;
+ int ret;
+
+ /* Sanity checks */
+ ret = check_logical_name(wu, logicalFileName);
+ if (ret)
+ return ret;
+
+ if (fileMode & DC_FILE_PERSISTENT_CLIENT)
+ {
+ DC_log(LOG_WARNING, "File mode DC_FILE_PERSISTENT_CLIENT for input file %s is not supported",
+ logicalFileName);
+ fileMode ^= DC_FILE_PERSISTENT_CLIENT;
+ }
+
+ /* Remote files aren't supported */
+ if (DC_FILE_REMOTE == fileMode)
+ {
+ DC_log(LOG_ERR, "Unsupported file mode for input file %s",
+ logicalFileName);
+ return DC_ERR_BADPARAM;
+ }
+
+ workpath = get_workdir_path(wu, logicalFileName, FILE_IN);
+ file = _DC_createPhysicalFile(logicalFileName, workpath);
+ g_free(workpath);
+ if (!file)
+ return DC_ERR_INTERNAL;
+
+ switch (fileMode)
+ {
+ case DC_FILE_REGULAR:
+ ret = copy_file(URL, file->path);
+ if (ret)
+ {
+ _DC_destroyPhysicalFile(file);
+ return DC_ERR_BADPARAM; /* XXX */
+ }
+ break;
+ case DC_FILE_PERSISTENT:
+ ret = link(URL, file->path);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to link %s to %s: %s",
+ URL, file->path, strerror(errno));
+ _DC_destroyPhysicalFile(file);
+ return DC_ERR_BADPARAM; /* XXX */
+ }
+ /* Remember the file mode */
+ file->mode = DC_FILE_PERSISTENT;
+ break;
+ case DC_FILE_VOLATILE:
+ ret = rename(URL, file->path);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "Failed to rename %s to %s: %s",
+ URL, file->path, strerror(errno));
+ _DC_destroyPhysicalFile(file);
+ return DC_ERR_BADPARAM; /* XXX */
+ }
+ default:
+ DC_log(LOG_ERR, "Unsupported file mode for input file %s",
+ logicalFileName);
+ _DC_destroyPhysicalFile(file);
+ return DC_ERR_BADPARAM;
+ }
+
+ wu->input_files = g_list_append(wu->input_files, file);
+ wu->num_inputs++;
+ return 0;
+}
+
+int DC_addWUOutput(DC_Workunit *wu, const char *logicalFileName)
+{
+ int ret;
+
+ /* Sanity checks */
+ ret = check_logical_name(wu, logicalFileName);
+ if (ret)
+ return ret;
+
+ wu->output_files = g_list_append(wu->output_files,
+ g_strdup(logicalFileName));
+ wu->num_outputs++;
+ return 0;
+}
+
+int DC_submitWU(DC_Workunit *wu)
+{
+ pid_t pid;
+ char *old_path, *new_path;
+
+ if (wu->state != DC_WU_READY)
+ {
+ DC_log(LOG_ERR, "Only WUs in READY state can be submitted");
+ return DC_ERR_BADPARAM;
+ }
+
+ /* copy the exec into the workdir */
+ old_path = g_strdup_printf(/*"%s%c%s", wu->client_path, G_DIR_SEPARATOR, wu->client_name*/
+ "%s", _DC_wu_cfg(wu, cfg_executable));
+ new_path = g_strdup_printf("%s%c%s", wu->workdir, G_DIR_SEPARATOR, wu->client_name);
+ if (link(old_path, new_path))
+ {
+ DC_log(LOG_ERR, "Failed to link %s to %s: %s",
+ old_path, new_path, strerror(errno));
+ return DC_ERR_BADPARAM;
+ }
+ g_free(old_path);
+ g_free(new_path);
+
+ if((pid=fork())<0) {
+ DC_log(LOG_ERR,"Cannot fork!\nerrno=%d %s\n",
+ errno, strerror(errno));
+ return DC_ERR_BADPARAM;
+ }
+
+ if(pid==0) /* client process */
+ {
+ /* change into working directory of the WU */
+ if (chdir(wu->workdir))
+ {
+ DC_log(LOG_ERR,"Cannot cd into %s\nerrno=%d %s\n",
+ wu->workdir, errno, strerror(errno));
+ return DC_ERR_BADPARAM;
+ }
+
+ /* hook up stdout and stderr to specially-named files */
+ freopen(STDOUT_LABEL, "a", stdout);
+ freopen(STDERR_LABEL, "a", stderr);
+
+ /* execute the client */
+ DC_log(LOG_INFO, "Work unit : %s executes: %s", wu->name, wu->client_name);
+ execv(wu->client_name, wu->argv);
+ DC_log(LOG_ERR, "Cannot execute. Errno=%d %s\n",
+ errno, strerror(errno));
+ exit(1);
+ }
+
+ wu->pid = pid;
+ wu->state = DC_WU_RUNNING;
+
+ return DC_OK;
+}
+
+int DC_cancelWU(DC_Workunit *wu)
+{
+ if (!wu || wu->state != DC_WU_RUNNING)
+ return DC_ERR_BADPARAM;
+
+ kill(wu->pid, SIGTERM);
+ wu->state = DC_WU_ABORTED;
+ return 0;
+}
+
+DC_Workunit *_DC_getWUByName(const char *name)
+{
+ DC_Workunit *wu;
+ char *uuid_str;
+ uuid_t uuid;
+ int ret;
+
+ if (_DC_wu_table)
+ {
+ wu = (DC_Workunit *)g_hash_table_lookup(_DC_wu_table, name);
+ if (wu)
+ return wu;
+ }
+
+ /* Check if the WU belongs to this application */
+ uuid_str = g_strndup(name, 36);
+ ret = uuid_parse(uuid_str, uuid);
+ g_free(uuid_str);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "WU name contains illegal UUID");
+ return NULL;
+ }
+
+ if (uuid_compare(uuid, project_uuid))
+ {
+ DC_log(LOG_WARNING, "WU does not belong to this application");
+ return NULL;
+ }
+
+ if (name[36] != '_')
+ {
+ DC_log(LOG_ERR, "Illegal WU name syntax");
+ return NULL;
+ }
+
+ /* Check the WU's UUID */
+ uuid_str = g_strndup(name + 37, 36);
+ ret = uuid_parse(uuid_str, uuid);
+ g_free(uuid_str);
+ if (ret)
+ {
+ DC_log(LOG_ERR, "WU name contains illegal UUID");
+ return NULL;
+ }
+
+ DC_log(LOG_ERR, "WU %s not found!", name);
+ return NULL;
+}
+
+static DC_WUState matchState;
+static void countState(void *key, void *value, void *ptr)
+{
+ DC_Workunit *wu = (DC_Workunit *)value;
+ int *count = (int *)ptr;
+
+ if (wu->state == matchState) ++(*count);
+}
+
+int DC_getWUNumber(DC_WUState state)
+{
+ int val = 0;
+
+ matchState = state;
+ g_hash_table_foreach(_DC_wu_table, (GHFunc)countState, &val);
+
+ return val;
+}
+
+char *DC_getWUId(const DC_Workunit *wu)
+{
+ char *id, *ret;
+
+ id = g_strdup_printf("%d", wu->pid);
+ ret = strdup(id);
+
+ g_free(id);
+ return ret;
+}
+
+char *DC_getWUTag(const DC_Workunit *wu)
+{
+ char *tag= NULL;
+
+ if (wu->tag)
+ tag = strdup(wu->tag);
+
+ return tag;
+}
+
+int DC_setWUPriority(DC_Workunit *wu, int priority)
+{
+ return 0;
+}
+
+/* Queries the state of a work unit. */
+DC_WUState
+DC_getWUState(DC_Workunit *wu)
+{
+ return(/*DC_ERR_NOTIMPL*/wu->state);
+}
+
+/* Temporarily suspends the execution of a work unit. */
+int
+DC_suspendWU(DC_Workunit *wu)
+{
+ return(DC_ERR_NOTIMPL);
+}
+
+/* Resumes computation of a previously suspended work unit. */
+int
+DC_resumeWU(DC_Workunit *wu)
+{
+ return(DC_ERR_NOTIMPL);
+}
+
+/* Serializes a work unit description. */
+char *
+DC_serializeWU(DC_Workunit *wu)
+{
+ return(NULL/*DC_ERR_NOTIMPL*/);
+}
+
+/* Restores a serialized work unit. */
+DC_Workunit *
+DC_deserializeWU(const char *buf)
+{
+ return(NULL/*DC_ERR_NOTIMPL*/);
+}
+
+
+/**************************************************************** Messaging */
+
+/* Sends a message to a running work unit. */
+int
+DC_sendWUMessage(DC_Workunit *wu, const char *message)
+{
+ GString *dn;
+ int ret;
+
+ /*if (!_DC_wu_check(wu))
+ return(DC_ERR_UNKNOWN_WU);*/
+ DC_log(LOG_DEBUG, "DC_sendWUMessage(%p-\"%s\", %s)",
+ wu, wu->name, message);
+ dn= g_string_new(wu->workdir);
+ g_string_append(dn, "/");
+ g_string_append(dn, _DC_wu_cfg(wu, cfg_master_message_box));
+ ret= _DC_create_message(dn->str, (char*)_DCAPI_MSG_MESSAGE, message, NULL);
+ g_string_free(dn, TRUE);
+ return(ret);
+}
+
+
+static struct {
+ DC_WUState state;
+ char *name;
+}
+_DC_state_names[]= {
+ { DC_WU_READY, (char*) "READY" },
+ { DC_WU_RUNNING, (char*) "RUNNING" },
+ { DC_WU_FINISHED, (char*) "FINISHED" },
+ { DC_WU_SUSPENDED, (char*) "SUSPENDED" },
+ { DC_WU_ABORTED, (char*) "ABORTED" },
+ { DC_WU_UNKNOWN, (char*) "UNKNOWN" }
+};
+
+char *
+_DC_state_name(DC_WUState state)
+{
+ int i;
+ for (i= 0; _DC_state_names[i].name; i++)
+ if (_DC_state_names[i].state == state)
+ return _DC_state_names[i].name;
+ return _DC_state_names[DC_WU_UNKNOWN].name;
+}
+
+
+/* End of local/local_master.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_master.h b/dcapi/local/local_master.h
new file mode 100644
index 0000000..1424005
--- /dev/null
+++ b/dcapi/local/local_master.h
@@ -0,0 +1,147 @@
+/*
+ * local/local_master.h
+ *
+ * DC-API definitions of master side
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#ifndef __DC_API_LOCAL_MASTER_H
+#define __DC_API_LOCAL_MASTER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/types.h>
+
+#include <dc.h>
+#include <dc_internal.h>
+#include <uuid/uuid.h>
+#include <glib.h>
+
+#include "local_common.h"
+
+/********************************************************************
+ * Constants
+ */
+
+/* DCAPI configuration keys */
+#define CFG_SLEEPINTERVAL "SleepingInterval"
+
+#define DEFAULT_SLEEP_INTERVAL 5
+
+/* File types in the working directory */
+typedef enum
+{
+ FILE_IN,
+ FILE_OUT,
+ FILE_CKPT,
+ FILE_DCAPI
+} WorkdirFile;
+
+
+/********************************************************************
+ * Data types
+ */
+
+struct _DC_Workunit
+{
+ /* Arguments passed to DC_createWU() */
+ char *client_name;
+ /*char *client_path;*/
+ char **argv;
+ int argc;
+ char *tag;
+ int subresults;
+
+ /* State of the WU */
+ char *name;
+ uuid_t uuid;
+ char *uuid_str;
+ DC_WUState state;
+ char *workdir;
+ pid_t pid;
+
+ /* Input file definitions. Elements are of type DC_PhysicalFile */
+ GList *input_files;
+ int num_inputs;
+
+ /* Output file definitions. Elements are of type char * */
+ GList *output_files;
+ int num_outputs;
+
+ /* by DD */
+ int asked_to_suspend;
+};
+
+struct _DC_Result
+{
+ DC_Workunit *wu;
+
+ int exit_code;
+ double cpu_time;
+
+ /* List of output files. Elements are of type DC_PhysicalFile */
+ GList *output_files;
+ int num_outputs;
+};
+
+
+/********************************************************************
+ * Global variables
+ */
+
+extern DC_ResultCallback _DC_result_callback G_GNUC_INTERNAL;
+extern DC_SubresultCallback _DC_subresult_callback G_GNUC_INTERNAL;
+extern DC_MessageCallback _DC_message_callback G_GNUC_INTERNAL;
+
+extern GHashTable *_DC_wu_table G_GNUC_INTERNAL;
+
+extern char project_uuid_str[37] G_GNUC_INTERNAL;
+extern uuid_t project_uuid G_GNUC_INTERNAL;
+extern int sleep_interval G_GNUC_INTERNAL;
+
+/********************************************************************
+ * Function prototypes
+ */
+
+/* Allocates a physical file descriptor */
+DC_PhysicalFile *_DC_createPhysicalFile(const char *label,
+ const char *path) G_GNUC_INTERNAL;
+
+/* De-allocates a physical file descriptor */
+void _DC_destroyPhysicalFile(DC_PhysicalFile *file) G_GNUC_INTERNAL;
+
+/* Calls a g_hash_table_foreach function for the wu_table */
+int _DC_searchForEvents(void) G_GNUC_INTERNAL;
+
+/* Creates a new DC_Result */
+DC_Result *_DC_createResult(const char *wu_name) G_GNUC_INTERNAL;
+
+/* Destroys a DC_Result */
+void _DC_destroyResult(DC_Result *result) G_GNUC_INTERNAL;
+
+/* Looks up a WU by name */
+DC_Workunit *_DC_getWUByName(const char *name) G_GNUC_INTERNAL;
+
+char *_DC_state_name(DC_WUState state) G_GNUC_INTERNAL;
+
+char *_DC_wu_cfg(DC_Workunit *wu, enum _DC_e_param what) G_GNUC_INTERNAL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DC_API_LOCAL_MASTER_H */
+
+
+/* End of local/local_master.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_result.c b/dcapi/local/local_result.c
new file mode 100644
index 0000000..935fdc6
--- /dev/null
+++ b/dcapi/local/local_result.c
@@ -0,0 +1,217 @@
+/*
+ * local/local_result.c
+ *
+ * DC-API functions related to result handling
+ *
+ * (c) Gabor Vida 2005-2006, Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <glib.h>
+#include "local_master.h"
+#include "local_result.h"
+
+
+DC_Result *
+_DC_result_create(DC_Workunit *wu)
+{
+ DC_Result *r;
+
+ r= g_new0(DC_Result, 1);
+ r->wu= wu;
+ return(r);
+}
+
+
+void
+_DC_result_destroy(DC_Result *result)
+{
+ if (!result)
+ return;
+ g_free(result);
+}
+
+
+/********************************************************************
+ * Functions
+ */
+
+DC_Result *_DC_createResult(const char *wu_name)
+{
+ char *logicalName;
+ GList *l;
+ DC_Result *result;
+ DC_PhysicalFile *file;
+ FILE *f;
+
+ result = g_new0(DC_Result, 1);
+ result->wu = _DC_getWUByName(wu_name);
+ if (!result->wu)
+ {
+ DC_log(LOG_ERR, "Received result for unknown WU %s", wu_name);
+ g_free(result);
+ return NULL;
+ }
+
+ for (l = result->wu->output_files; l; l = l->next)
+ {
+ logicalName = g_strdup_printf("%s/%s", result->wu->workdir, (char *)l->data);
+ f = fopen(logicalName, "r");
+ if (f != NULL) /* File exists */
+ {
+ file = _DC_createPhysicalFile((char *)l->data, logicalName);
+ result->output_files = g_list_append(result->output_files, file);
+ result->num_outputs++;
+ fclose(f);
+ }
+ g_free(logicalName);
+ }
+
+ return result;
+}
+
+void _DC_destroyResult(DC_Result *result)
+{
+ while (result->output_files)
+ {
+ _DC_destroyPhysicalFile((DC_PhysicalFile *)result->output_files->data);
+ result->output_files = g_list_delete_link(result->output_files,
+ result->output_files);
+ }
+ g_free(result);
+}
+
+unsigned DC_getResultCapabilities(const DC_Result *result)
+{
+ return (DC_GC_STDOUT | DC_GC_STDERR | DC_GC_EXITCODE);
+}
+
+DC_Workunit *DC_getResultWU(DC_Result *result)
+{
+ return result->wu;
+}
+
+static int wait_result(DC_Result *result)
+{
+ struct rusage rusage;
+ pid_t pid;
+
+ if (!result->wu->pid)
+ return 0;
+
+ pid = wait4(result->wu->pid, &result->exit_code, WNOHANG, &rusage);
+ if (pid != result->wu->pid)
+ {
+ DC_log(LOG_ERR, "wu with pid %d not exited according to waitpid. retval: %d",
+ result->wu->pid, pid);
+ return DC_ERR_SYSTEM;
+ }
+
+ result->cpu_time = rusage.ru_utime.tv_sec +
+ (double)rusage.ru_utime.tv_usec / 1000000 +
+ rusage.ru_stime.tv_sec +
+ (double)rusage.ru_stime.tv_usec / 1000000;
+
+ /* Make sure we do not call wait4() again */
+ result->wu->pid = 0;
+
+ return 0;
+}
+
+int DC_getResultExit(const DC_Result *result)
+{
+ int ret;
+
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return 0.0;
+ }
+
+ ret = wait_result((DC_Result *)result); /* XXX */
+ if (ret)
+ return -1;
+
+ if (!WIFEXITED(result->exit_code))
+ {
+ DC_log(LOG_WARNING, "DC_getResultExit: wu with pid %d terminated not normally.",
+ result->wu->pid); /* XXX pid is 0 at this point */
+ return -1;
+ }
+
+ return WEXITSTATUS(result->exit_code);
+}
+
+double DC_getResultCPUTime(const DC_Result *result)
+{
+ int ret;
+
+ if (!result)
+ {
+ DC_log(LOG_ERR, "%s: Missing result", __func__);
+ return 0.0;
+ }
+
+ ret = wait_result((DC_Result *)result); /* XXX */
+ if (ret)
+ return -1;
+
+ return result->cpu_time;
+}
+
+char *DC_getResultOutput(const DC_Result *result, const char *logicalFileName)
+{
+ char *physicalFileName;
+ GList *l;
+
+ for (l = result->output_files; l; l = l->next)
+ {
+ DC_PhysicalFile *file = (DC_PhysicalFile *)l->data;
+
+ if(!strcmp(file->label, logicalFileName))
+ {
+ physicalFileName = strdup(file->path);
+ return physicalFileName;
+ }
+ }
+
+ if (!strcmp(logicalFileName, DC_LABEL_STDOUT))
+ {
+ char *tmp = g_strdup_printf("%s%c%s", result->wu->workdir, G_DIR_SEPARATOR, STDOUT_LABEL);
+ physicalFileName = strdup(tmp);
+ g_free(tmp);
+ return physicalFileName;
+ }
+
+ if (!strcmp(logicalFileName, DC_LABEL_STDERR))
+ {
+ char *tmp = g_strdup_printf("%s%c%s", result->wu->workdir, G_DIR_SEPARATOR, STDERR_LABEL);
+ physicalFileName = strdup(tmp);
+ g_free(tmp);
+ return physicalFileName;
+ }
+
+ DC_log(LOG_ERR, "DC_getResultOutput: The %s file is not part of the given result", logicalFileName);
+
+ return NULL;
+}
+
+
+/* End of local/local_result.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_result.h b/dcapi/local/local_result.h
new file mode 100644
index 0000000..ada2931
--- /dev/null
+++ b/dcapi/local/local_result.h
@@ -0,0 +1,33 @@
+/*
+ * local/local_result.h
+ *
+ * DC-API functions to handle DC_Result data type
+ *
+ * (c) Daniel Drotos, 2006
+ */
+
+#ifndef _DC_API_LOCAL_RESULT_H_
+#define _DC_API_LOCAL_RESULT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "local_master.h"
+
+
+DC_Result *_DC_result_create(DC_Workunit *wu) G_GNUC_INTERNAL;
+void _DC_result_destroy(DC_Result *result) G_GNUC_INTERNAL;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of local/local_result.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_utils.c b/dcapi/local/local_utils.c
new file mode 100644
index 0000000..bd9fa9c
--- /dev/null
+++ b/dcapi/local/local_utils.c
@@ -0,0 +1,479 @@
+/*
+ * local/local_utils.c
+ *
+ * DC-API usefull functions
+ *
+ * (c) Daniel Drotos, 2006-2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <dc_internal.h>
+#include <dc_common.h>
+
+#include "local_common.h"
+#include "local_utils.h"
+
+
+void
+_DC_init_utils(void)
+{
+}
+
+
+int
+_DC_mkdir_with_parents(char *dn, mode_t mode)
+{
+ char *p= dn;
+ int res;
+
+ /*fprintf(stderr, "making %s (EEXIST=%d)\n", dn, EEXIST);*/
+ if (!dn ||
+ !*dn)
+ return(0);
+ while (*p)
+ {
+ while (*p != '/' &&
+ *p != '\0')
+ p++;
+ if (*p == '/')
+ {
+ *p= '\0';
+ if (*dn)
+ {
+ /*fprintf(stderr, "mkdir(%s,%d)=",dn,mode);*/
+ res= mkdir(dn, mode);
+ /*fprintf(stderr, "%d %d\n", res, errno);*/
+ }
+ *p= '/';
+ p++;
+ }
+ }
+ /*fprintf(stderr, "mkdir(%s,%d)=",dn,mode);*/
+ res= mkdir(dn, mode);
+ /*fprintf(stderr, "%d %d\n", res, errno);*/
+ if (res != 0 &&
+ errno == EEXIST)
+ return(DC_OK);
+ return(res?DC_ERR_SYSTEM:DC_OK);
+}
+
+
+static int
+_DC_rmsubdir(char *name)
+{
+ DIR *d;
+ struct dirent *de;
+ int i= 0;
+
+ if ((d= opendir(name)) == NULL)
+ {
+ DC_log(LOG_DEBUG, "Open %s: %s", name, strerror(errno));
+ return(0);
+ }
+ while ((de= readdir(d)))
+ {
+ if (strcmp(de->d_name, ".") != 0 &&
+ strcmp(de->d_name, "..") != 0)
+ {
+ char *s= malloc(strlen(name)+strlen(de->d_name) + 10);
+ strcpy(s, name);
+ strcat(s, "/");
+ strcat(s, de->d_name);
+ i+= _DC_rm(s);
+ free(s);
+ }
+ }
+ closedir(d);
+ if (rmdir(name))
+ {
+ DC_log(LOG_ERR, "Failed to rmdir %s: %s",
+ name, strerror(errno));
+ }
+ return(i);
+}
+
+int
+_DC_rm(char *name)
+{
+ struct stat s;
+ int i;
+
+ if (!name ||
+ !*name)
+ return(0);
+ i= lstat(name, &s);
+ if (i != 0)
+ {
+ return(0);
+ }
+ if (S_ISDIR(s.st_mode) &&
+ strcmp(name, ".") != 0 &&
+ strcmp(name, "..") != 0)
+ {
+ return(_DC_rmsubdir(name));
+ }
+ else
+ {
+ if (remove(name))
+ DC_log(LOG_ERR, "Failed to remove %s: %s",
+ name, strerror(errno));
+ }
+ return(1);
+}
+
+
+int
+_DC_file_exists(char *fn)
+{
+ return(access(fn, F_OK) == 0);
+}
+
+
+int
+_DC_file_empty(char *fn)
+{
+ struct stat s;
+
+ if (stat(fn, &s))
+ return(1);
+ return(s.st_size == 0);
+}
+
+
+int
+_DC_create_file(char *fn, char *what)
+{
+ FILE *f= fopen(fn, "w");
+ if (f)
+ {
+ if (what)
+ fprintf(f, "%s", what);
+ fclose(f);
+ return(DC_OK);
+ }
+ else
+ return(DC_ERR_SYSTEM);
+}
+
+
+char *
+_DC_get_file(char *fn)
+{
+ FILE *f;
+ char *buf= NULL;
+
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ int bs= 100, i;
+ char c;
+
+ buf= malloc(bs);
+ i= 0;
+ buf[i]= '\0';
+ while ((c= fgetc(f)) != EOF)
+ {
+ if (i > bs-2)
+ {
+ bs+= 100;
+ buf= realloc(buf, bs);
+ }
+ buf[i]= c;
+ i++;
+ buf[i]= '\0';
+ }
+ fclose(f);
+ }
+ return(buf);
+}
+
+
+static int _DC_message_id= 0;
+
+int
+_DC_create_message(char *box,
+ char *name,
+ const char *message,
+ char *msgfile)
+{
+ char *fn, *fn2;
+ FILE *f;
+ int ret= DC_OK;
+
+ /*DC_log(LOG_DEBUG, "DC_sendMessage(%s)", message);*/
+ if (!box ||
+ !name)
+ return(DC_ERR_BADPARAM);
+ mkdir(box, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
+ _DC_message_id++;
+ fn= malloc(strlen(box)+strlen(name)+100);
+ sprintf(fn, "%s/%s_creating.%d", box, name, _DC_message_id);
+ if ((f= fopen(fn, "w")) != NULL)
+ {
+ if (message)
+ fprintf(f, "%s", message);
+ else if (msgfile)
+ {
+ if (_DC_copyFile(msgfile, fn))
+ DC_log(LOG_ERR, "copyFile(%s,%s) error",
+ msgfile, fn);
+ }
+ else
+ {
+ DC_log(LOG_WARNING, "No message specified for "
+ "creation");
+ }
+ if (fsync(fileno(f)) != 0)
+ DC_log(LOG_ERR, "Sync of %s: %d %s", fn,
+ errno, strerror(errno));
+ fclose(f);
+ /*DC_log(LOG_DEBUG, "Message %d created", _DC_message_id);*/
+ }
+ else
+ {
+ DC_log(LOG_ERR, "Error creating message file (%s)",
+ fn);
+ ret= DC_ERR_SYSTEM;
+ }
+ fn2= malloc(strlen(box)+strlen(name)+100);
+ sprintf(fn2, "%s/%s.%d", box, name, _DC_message_id);
+ rename(fn, fn2);
+ DC_log(LOG_DEBUG, "Message created: %s", fn2);
+ free(fn2);
+ free(fn);
+ return(ret);
+}
+
+
+int
+_DC_nuof_messages(char *box, char *name)
+{
+ DIR *d;
+ struct dirent *de;
+ int nuof= 0;
+ char *s;
+
+ if (!box)
+ return(0);
+ if ((d= opendir(box)) == NULL)
+ return(0);
+ s= malloc(100 + (name?strlen(name):strlen(_DCAPI_MSG_MESSAGE)));
+ strcpy(s, name?name:_DCAPI_MSG_MESSAGE);
+ strcat(s, ".");
+ while ((de= readdir(d)) != NULL)
+ {
+ char *found= strstr(de->d_name, s);
+ if (found == de->d_name)
+ nuof++;
+ }
+ if (d)
+ closedir(d);
+ free(s);
+ return(nuof);
+}
+
+
+char *
+_DC_message_name(char *box, char *name)
+{
+ char *dn, *n;
+ DIR *d;
+ struct dirent *de;
+ int min_id;
+
+ if (!box ||
+ !name)
+ return(NULL);
+ if (!*box ||
+ !*name)
+ return(NULL);
+ /*DC_log(LOG_DEBUG, "_DC_message_name(%s,%s)", box, name);*/
+ dn= strdup(box);
+ n= malloc(strlen(name)+10);
+ strcpy(n, name);
+ strcat(n, ".");
+ /*DC_log(LOG_DEBUG, "opendir(%s)=", dn);*/
+ d= opendir(dn);
+ /*DC_log(LOG_DEBUG, "%p", d);*/
+ min_id= -1;
+ while (d &&
+ (de= readdir(d)) != NULL)
+ {
+ char *found= strstr(de->d_name, n);
+ /*DC_log(LOG_DEBUG, "%s <-> %s", de->d_name, n);*/
+ if (found == de->d_name)
+ {
+ char *pos= strrchr(de->d_name, '.');
+ /*DC_log(LOG_DEBUG, "found");*/
+ if (pos)
+ {
+ int id= 0;
+ pos++;
+ id= strtol(pos, NULL, 10);
+ /*DC_log(LOG_DEBUG, "id=%d", id);*/
+ if (id > 0)
+ {
+ if (min_id < 0)
+ min_id= id;
+ else
+ if (id < min_id)
+ min_id= id;
+ }
+ }
+ }
+ /*else
+ DC_log(LOG_DEBUG, "not found");*/
+ }
+ if (d)
+ closedir(d);
+ if (min_id >= 0)
+ {
+ dn= realloc(dn, strlen(box)+strlen(name)+100);
+ sprintf(dn, "%s/%s.%d", box, name, min_id);
+ free(n);
+ /*DC_log(LOG_DEBUG, "return: %s", dn);*/
+ return(dn);
+ }
+ if (dn)
+ free(dn);
+ if (n)
+ free(n);
+ /*DC_log(LOG_DEBUG, "return null");*/
+ return(NULL);
+}
+
+
+char *
+_DC_read_message(char *box, char *name, int del_msg)
+{
+ FILE *f;
+ char *fn= _DC_message_name(box, name);
+ char *buf= NULL;
+
+ if (fn==NULL)
+ return(NULL);
+ /*DC_log(LOG_DEBUG, "Reading message from %s", fn);*/
+ if ((f= fopen(fn, "r")) != NULL)
+ {
+ int bs= 100, i;
+ char c;
+
+ buf= malloc(bs);
+ i= 0;
+ buf[i]= '\0';
+ while ((c= fgetc(f)) != EOF)
+ {
+ if (i > bs-2)
+ {
+ bs+= 100;
+ buf= realloc(buf, bs);
+ }
+ buf[i]= c;
+ i++;
+ buf[i]= '\0';
+ }
+ fclose(f);
+ if (del_msg)
+ unlink(fn);
+ }
+ if (fn!=NULL)
+ free(fn);
+ return(buf);
+}
+
+
+
+char *
+_DC_quote_string(char *str)
+{
+ int i, n;
+ char *s, *p;
+
+ if (!str)
+ {
+ s= strdup("\\nnn");
+ return(s);
+ }
+ if (!*str)
+ {
+ s= strdup("\\000");
+ return(s);
+ }
+
+ for (i= n= 0; str[i]; i++)
+ {
+ if (!isalnum(str[i]))
+ n++;
+ }
+
+ s= calloc(strlen(str)+10*n+10, 1);
+ for (i= 0, p= s; str[i]; i++)
+ {
+ if (isalnum(str[i]))
+ {
+ *p= str[i];
+ p++;
+ }
+ else
+ {
+ sprintf(p, "\\%03o", str[i]);
+ p+= strlen(p);
+ }
+ }
+ return(s);
+}
+
+
+char *
+_DC_unquote_string(char *str)
+{
+ char *s, *p, *i;
+
+ if (!str)
+ return(NULL);
+ s= calloc(strlen(str)+1, 1);
+ p= str;
+ i= s;
+ while (*p != '\0')
+ {
+ if (*p != '\\')
+ *i= *p;
+ else
+ {
+ char c, *x= p+4;
+ int l;
+ c= *x;
+ *x= '\0';
+ if (strcmp(p+1, "nnn") == 0)
+ {
+ free(s);
+ return(NULL);
+ }
+ l= strtol(p+1, 0, 8);
+ *i= (char)l;
+ *x= c;
+ p= x-1;
+ }
+ p++;
+ i++;
+ }
+ return(s);
+}
+
+
+/* End of local/local_utils.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_utils.h b/dcapi/local/local_utils.h
new file mode 100644
index 0000000..96f7690
--- /dev/null
+++ b/dcapi/local/local_utils.h
@@ -0,0 +1,52 @@
+/*
+ * local/local_utils.h
+ *
+ * DC-API usefull functions
+ *
+ * (c) Daniel Drotos, 2006-2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#ifndef __DC_API_LOCAL_UTILS_H_
+#define __DC_API_LOCAL_UTILS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <fcntl.h>
+
+#include "local_common.h"
+
+
+void _DC_init_utils(void) G_GNUC_INTERNAL;
+
+/* Usefull funcs */
+int _DC_mkdir_with_parents(char *dn, mode_t mode) G_GNUC_INTERNAL;
+int _DC_rm(char *name) G_GNUC_INTERNAL;
+int _DC_file_exists(char *fn) G_GNUC_INTERNAL;
+int _DC_file_empty(char *fn) G_GNUC_INTERNAL;
+int _DC_create_file(char *fn, char *what) G_GNUC_INTERNAL;
+char *_DC_get_file(char *fn) G_GNUC_INTERNAL;
+
+/* Message passing utilities */
+int _DC_create_message(char *box,
+ char *name,
+ const char *message,
+ char *msgfile) G_GNUC_INTERNAL;
+int _DC_nuof_messages(char *box, char *name) G_GNUC_INTERNAL;
+char *_DC_message_name(char *box, char *name) G_GNUC_INTERNAL;
+char *_DC_read_message(char *box, char *name, int del_msg) G_GNUC_INTERNAL;
+
+char *_DC_quote_string(char *str) G_GNUC_INTERNAL;
+char *_DC_unquote_string(char *str) G_GNUC_INTERNAL;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DCAPI_LOCAL_UTILS_H_ */
diff --git a/dcapi/local/local_wu.c b/dcapi/local/local_wu.c
new file mode 100644
index 0000000..bf1632f
--- /dev/null
+++ b/dcapi/local/local_wu.c
@@ -0,0 +1,45 @@
+/*
+ * local/local_wu.c
+ *
+ * DC-API functions of master side
+ *
+ * (c) Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#include "local_master.h"
+
+
+/* Get a configuration parameter */
+char *
+_DC_wu_cfg(DC_Workunit *wu,
+ enum _DC_e_param what)
+{
+ /*if (!_DC_wu_check(wu))
+ return(NULL);*/
+ if (what >= cfg_nuof)
+ return(NULL);
+ if (!_DC_params[what].name)
+ return(NULL);
+
+ if (_DC_params[what].gvalue)
+ return(_DC_params[what].gvalue);
+
+ _DC_params[what].gvalue=
+ DC_getClientCfgStr(wu->client_name,
+ _DC_params[what].name,
+ /*TRUE*/1);
+ if (_DC_params[what].gvalue)
+ return(_DC_params[what].gvalue);
+ return(_DC_params[what].def);
+}
+
+
+/* End of local/local_wu.c */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/local/local_wu.h b/dcapi/local/local_wu.h
new file mode 100644
index 0000000..2b420d2
--- /dev/null
+++ b/dcapi/local/local_wu.h
@@ -0,0 +1,33 @@
+/*
+ * local/local_wu.h
+ *
+ * DC-API functions of master side
+ *
+ * (c) Daniel Drotos, 2007
+ */
+
+/* $Id$ */
+/* $Date$ */
+/* $Revision$ */
+
+#ifndef __DC_API_LOCAL_WU_H
+#define __DC_API_LOCAL_WU_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Get a configuration parameter */
+char *_DC_wu_cfg(DC_Workunit *wu, enum _DC_e_param what) G_GNUC_INTERNAL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of local/local_wu.h */
+
+/* Local variables: */
+/* c-file-style: "linux" */
+/* End: */
diff --git a/dcapi/python/DCAPI/BOINC_Backend.py b/dcapi/python/DCAPI/BOINC_Backend.py
new file mode 100644
index 0000000..39f0bfb
--- /dev/null
+++ b/dcapi/python/DCAPI/BOINC_Backend.py
@@ -0,0 +1,27 @@
+import os
+
+from DCAPI.DCAPI_Backend import DCAPI_Backend
+
+import boinc_path_config
+from Boinc import configxml
+
+class BOINC_Backend(DCAPI_Backend):
+ """DC-API deployment interface for BOINC"""
+
+ def __init__(self):
+ DCAPI_Backend.__init__(self)
+ try:
+ self.config = configxml.default_config()
+ except:
+ raise SystemExit("Failed to locate/parse the BOINC project configuration")
+ self.master_keys.extend([("ProjectRootDir", False)])
+ self.client_keys.extend([("Redundancy", False),
+ ("MaxOutputSize", False),
+ ("MaxMemUsage", False),
+ ("MaxDiskUsage", False),
+ ("EstimatedFPOps", True),
+ ("MaxFPOps", True),
+ ("DelayBound", True)])
+
+ def master_defaults(self):
+ return {'ProjectRootDir': os.path.dirname(self.config.filename)}
diff --git a/dcapi/python/DCAPI/Condor_Backend.py b/dcapi/python/DCAPI/Condor_Backend.py
new file mode 100644
index 0000000..57db7fb
--- /dev/null
+++ b/dcapi/python/DCAPI/Condor_Backend.py
@@ -0,0 +1,19 @@
+from DCAPI.DCAPI_Backend import DCAPI_Backend
+
+class Condor_Backend(DCAPI_Backend):
+ """DC-API deployment interface for Condor"""
+
+ def __init__(self):
+ DCAPI_Backend.__init__(self)
+ self.master_keys.extend([("SleepingInterval", False)])
+ self.client_keys.extend([("ClientMessageBox", False),
+ ("MasterMessageBox", False),
+ ("SubresultBox", False),
+ ("SystemMessageBox", False),
+ ("Executable", True),
+ ("LeaveFiles", False),
+ ("CheckpointFile", False),
+ ("SavedOutputs", False),
+ ("SubmitFile", False),
+ ("CondorLog", False),
+ ("CondorSubmitTemplate", False)])
diff --git a/dcapi/python/DCAPI/DCAPI_Backend.py b/dcapi/python/DCAPI/DCAPI_Backend.py
new file mode 100644
index 0000000..c7de497
--- /dev/null
+++ b/dcapi/python/DCAPI/DCAPI_Backend.py
@@ -0,0 +1,17 @@
+class DCAPI_Backend:
+ def __init__(self):
+ self.master_keys = [("WorkingDirectory", True),
+ ("InstanceUUID", True),
+ ("LogLevel", False),
+ ("LogFile", False)]
+ self.client_keys = [("SendCfgKeys", False),
+ ("LogLevel", False)]
+
+ def master_defaults(self):
+ pass
+
+ def get_master_keys(self):
+ return self.master_keys
+
+ def get_client_keys(self):
+ return self.client_keys
diff --git a/dcapi/python/DCAPI/__init__.py b/dcapi/python/DCAPI/__init__.py
new file mode 100644
index 0000000..cad43db
--- /dev/null
+++ b/dcapi/python/DCAPI/__init__.py
@@ -0,0 +1,3 @@
+"""
+Empty
+"""
diff --git a/dcapi/python/DCAPI/local_Backend.py b/dcapi/python/DCAPI/local_Backend.py
new file mode 100644
index 0000000..0382df9
--- /dev/null
+++ b/dcapi/python/DCAPI/local_Backend.py
@@ -0,0 +1,16 @@
+from DCAPI.DCAPI_Backend import DCAPI_Backend
+
+class local_Backend(DCAPI_Backend):
+ """DC-API deployment interface for local execution"""
+
+ def __init__(self):
+ DCAPI_Backend.__init__(self)
+ self.master_keys.extend([("SleepingInterval", False)])
+ self.client_keys.extend([("ClientMessageBox", False),
+ ("MasterMessageBox", False),
+ ("SubresultBox", False),
+ ("SystemMessageBox", False),
+ ("Executable", True),
+ ("LeaveFiles", False),
+ ("CheckpointFile", False),
+ ("SavedOutputs", False)])
diff --git a/dcapi/tmp/dc_client_fortran.c b/dcapi/tmp/dc_client_fortran.c
new file mode 100644
index 0000000..6d7b169
--- /dev/null
+++ b/dcapi/tmp/dc_client_fortran.c
@@ -0,0 +1,251 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <dc_client.h>
+
+/********************************************************************
+ * Helper Functions
+ */
+
+// Fortran strings are passed as character array which is not null-terminated plus length
+//
+static char *string_from_fortran(const char *string, int string_len)
+{
+ char *p;
+
+ p = (char *)malloc(string_len + 1);
+ memcpy(p, string, string_len);
+ p[string_len] = 0;
+
+ return p;
+}
+
+// remove terminating null and pad with blanks for FORTRAN
+//
+static void string_to_fortran(char *string, int string_len)
+{
+ int i;
+ for (i = strlen(string); i < string_len; i++)
+ {
+ string[i] = ' ';
+ }
+}
+
+// remove whitespace from start and end of a string
+//
+void strip_whitespace(char *string)
+{
+ int n;
+
+ while (1)
+ {
+ if (!string[0]) break;
+ if (!isascii(string[0])) break;
+ if (!isspace(string[0])) break;
+ strcpy(string, string+1);
+ }
+
+ while (1)
+ {
+ n = (int)strlen(string);
+ if (n == 0) break;
+ if (!isascii(string[n-1])) break;
+ if (!isspace(string[n-1])) break;
+ string[n-1] = 0;
+ }
+}
+
+/********************************************************************
+ * FORTRAN DC Client API Functions
+ */
+
+void dc_initclient_(int* retval)
+{
+ *retval = DC_initClient();
+}
+
+char *DC_resolveFileNameAuto(const char *logicalFileName)
+{
+ char *filename;
+
+ filename = DC_resolveFileName(DC_FILE_IN, filename);
+ if (!filename)
+ {
+ DC_resolveFileName(DC_FILE_TMP, filename);
+ if (!filename)
+ {
+ DC_log(LOG_ERR, "Resolving file '%s' failed!", filename);
+ return NULL;
+ }
+ DC_log(LOG_DEBUG, "file %s resolved by DC_FILE_TMP", filename);
+ return filename;
+ }
+ DC_log(LOG_DEBUG, "file %s resolved by DC_FILE_IN", filename);
+ return filename;
+}
+
+void dc_resolvefilename_(int* fileType, const char *logicalFileName, char *physicalFileName,
+ int logicalFileNameLen, int physicalFileNameLen)
+{
+ char *filename;
+
+ filename = string_from_fortran(logicalFileName, logicalFileNameLen);
+ strip_whitespace(filename);
+
+ switch(*fileType)
+ {
+ case 1:
+ physicalFileName = DC_resolveFileName(DC_FILE_IN, filename);
+ break;
+ case 2:
+ physicalFileName = DC_resolveFileName(DC_FILE_OUT, filename);
+ break;
+ case 3:
+ physicalFileName = DC_resolveFileName(DC_FILE_TMP, filename);
+ break;
+ case 4:
+ physicalFileName = DC_resolveFileNameAuto(filename);
+ break;
+ default:
+ DC_log(LOG_ERR, "Undefined DC_FileType in DC_resolveFileName_ function call.");
+ DC_log(LOG_ERR, "DC_FileType: %d, logicalFileName: %s", *fileType, filename);
+ if (filename)
+ free(filename);
+ exit(1);
+ }
+
+ string_to_fortran(physicalFileName, physicalFileNameLen);
+ if(filename)
+ free(filename);
+}
+
+void dc_sendresult_(const char *logicalFileName, const char *path,
+ int* fileMode, int logicalFileNameLen, int pathLen, int* retval)
+{
+ char *filename;
+ char *filePath;
+
+ filename = string_from_fortran(logicalFileName, logicalFileNameLen);
+ strip_whitespace(filename);
+ filePath = string_from_fortran(path, pathLen);
+ strip_whitespace(filePath);
+
+ switch(*fileMode)
+ {
+ case 1:
+ *retval = DC_sendResult(filename, filePath, DC_FILE_REGULAR);
+ break;
+ case 2:
+ *retval = DC_sendResult(filename, filePath, DC_FILE_PERSISTENT);
+ break;
+ case 3:
+ *retval = DC_sendResult(filename, filePath, DC_FILE_VOLATILE);
+ break;
+ default:
+ DC_log(LOG_ERR, "Undefined DC_FileMode in DC_sendResult function call.");
+ DC_log(LOG_ERR, "DC_FileMode: %d, logicalFileName: %s, path: %s",
+ *fileMode, filename, filePath);
+ if (filename)
+ free(filename);
+ if (filePath)
+ free(filePath);
+ exit(1);
+ }
+ if (filename)
+ free(filename);
+ if (filePath)
+ free(filePath);
+}
+
+void dc_sendmessage_(const char *message, int messageLen, int* retval)
+{
+ char *msg;
+
+ msg = string_from_fortran(message, messageLen);
+ strip_whitespace(msg);
+ *retval = DC_sendMessage(msg);
+ if(msg)
+ free(msg);
+}
+
+void dc_checkclientevent_(void)
+{
+ // XXX not impl yet
+}
+
+void dc_destroyclientevent_(void)
+{
+ // XXX not impl yet
+}
+
+void dc_checkpointmade_(const char *filename, int filename_len)
+{
+ char *file;
+
+ file = string_from_fortran(filename, filename_len);
+ strip_whitespace(file);
+ DC_checkpointMade(file);
+ if (file)
+ free(file);
+}
+
+void dc_fractiondone_(double* fraction)
+{
+ DC_fractionDone(*fraction);
+}
+
+void dc_finishclient_(int* exitcode)
+{
+ DC_finishClient(*exitcode);
+}
+
+void dc_getmaxmessagesize_(int* retval)
+{
+ *retval = DC_getMaxMessageSize();
+}
+
+void dc_getmaxsubresults_(int* retval)
+{
+ *retval = DC_getMaxSubresults();
+}
+
+void dc_getgridcapabilities_(void)
+{
+ // XXX not impl yet
+}
+
+void dc_getcfgstr_(const char *name, char *string, int nameLen, int stringLen)
+{
+ char *key;
+ char *value;
+
+ key = string_from_fortran(name, nameLen);
+ strip_whitespace(key);
+ string = DC_getCfgStr(key);
+ string_to_fortran(string, stringLen);
+ if (key)
+ free(key);
+}
+
+void dc_getcfgint_(const char *name, int* defaultValue, int nameLen, int* retval)
+{
+ char *key;
+
+ key = string_from_fortran(name, nameLen);
+ strip_whitespace(key);
+ *retval = DC_getCfgInt(key, *defaultValue);
+ if (key)
+ free(key);
+}
+
+void dc_getcfgbool_(const char *name, int* defaultValue, int nameLen, int* retval)
+{
+ char *key;
+
+ key = string_from_fortran(name, nameLen);
+ strip_whitespace(key);
+ *retval = DC_getCfgBool(key, *defaultValue);
+ if (key)
+ free(key);
+}
diff --git a/doc/addon_data.php b/doc/addon_data.php
index 59f8a3d..1dcb8a7 100644
--- a/doc/addon_data.php
+++ b/doc/addon_data.php
@@ -37,6 +37,16 @@ array(
$win = array(
array(
+ 'http://code.google.com/p/boinc-client-configuration/',
+ 'BOINC Client Configuration',
+ '1.2.5',
+ 'Windows GUI for editing the client configuration file',
+ 'http://code.google.com/p/boinc-client-configuration/',
+ 'Windows',
+ 'BOINC Client Configuration provides a graphical user interface (GUI) for editing the BOINC client configuration file (cc_config.xml)',
+ 1382122439
+),
+array(
'http://www.setispirit.de/',
'SETISpirit',
'1.0.4',
@@ -81,7 +91,7 @@ array(
array(
'http://www.bc-team.org/downloads.php',
'BOINCcalculator',
- '0.3.2',
+ '0.5.1',
'Show details of CPDN jobs',
'http://wiki.bc-team.org/index.php?title=BOINCcalculator',
'Windows (all)',
diff --git a/doc/boinc_news.php b/doc/boinc_news.php
index 9182a25..5384eed 100644
--- a/doc/boinc_news.php
+++ b/doc/boinc_news.php
@@ -2062,7 +2062,7 @@ We hope to resolve this issue soon.
array("March 31, 2003",
"We are preparing a BOINC-based version of SETI at home.
-See a <a href=setiathome.jpg>preview of the graphics</a>.
+See a <a href=http://boinc.berkeley.edu/setiathome.jpg>preview of the graphics</a>.
"),
array("March 25, 2003",
diff --git a/doc/build_po.php b/doc/build_po.php
index 89feeeb..344e444 100755
--- a/doc/build_po.php
+++ b/doc/build_po.php
@@ -34,10 +34,12 @@ HDR;
$out = fopen("BOINC-Web.pot", "w");
fwrite($out, $header);
-$pipe = popen("xgettext --omit-header -o - --keyword=tra -L PHP $path/*.inc $path/*.php", "r");
+
+$files = "docutil.php download.php help.php help_funcs.php index.php projects.inc ../html/inc/news.inc";
+$pipe = popen("xgettext --omit-header -o - --keyword=tra -L PHP $files", "r");
stream_copy_to_stream($pipe, $out);
fclose($pipe);
fclose($out);
-echo "Created BOINC-Web.pot. Move it to ../locale/templates\n";
+echo "Created BOINC-Web.pot. If it's OK, move it to ../locale/templates and commit\n";
?>
diff --git a/doc/download.php b/doc/download.php
index 981aa2c..cf60cf1 100644
--- a/doc/download.php
+++ b/doc/download.php
@@ -10,6 +10,7 @@ require_once("../html/inc/translation.inc");
$client_info = $_SERVER['HTTP_USER_AGENT'];
function latest_version($p) {
+ $dev = false;
foreach ($p['versions'] as $i=>$v) {
if (!$dev && is_dev($v)) continue;
return $v;
@@ -24,9 +25,19 @@ function latest_version($p) {
function download_link($pname, $button=false) {
global $platforms;
global $url_base;
+ global $client_info;
$p = $platforms[$pname];
$v = latest_version($p);
$file = $v['file'];
+ if (array_key_exists('vbox_file', $v)) {
+ $vbox_file = $v['vbox_file'];
+ } else {
+ $vbox_file = null;
+ }
+ if (strstr($client_info, 'Windows NT 4') || strstr($client_info, 'Windows NT 5')) {
+ $vbox_file = null;
+ }
+ $vbox_version = $v['vbox_version'];
$long_name = $p['name'];
$num = $v['num'];
$path = "dl/$file";
@@ -35,13 +46,47 @@ function download_link($pname, $button=false) {
$s = number_format(filesize($path)/1000000, 2);
if ($button) {
+ if ($vbox_file) {
+ echo tra("We recommend that you also install VirtualBox, so your computer can work on science projects that require it.");
+ echo " <a href=wiki/VirtualBox>";
+ echo tra("Learn more about VirtualBox.");
+ echo "</a>";
+
+ echo "<table><tr valign=top><td>\n";
+ $vbox_url = $url_base.$vbox_file;
+ $vbox_path = "dl/$vbox_file";
+ $vbox_size = number_format(filesize($vbox_path)/1000000, 2);
+ echo "
+ <table cellpadding=10><tr valign=top><td class=button>
+ <a href=\"$vbox_url\"><font size=4><u>"
+ .tra("Download BOINC + VirtualBox")
+ ."</u></font></a>
+ <br>"
+ .sprintf(tra("for %s"), $long_name)
+ ." ($vbox_size MB)"
+ ."<br><span class=note>"
+ .sprintf(tra("BOINC %s"), $num)
+ .", "
+ .sprintf(tra("VirtualBox %s"), $vbox_version)
+ ."</span></td></tr>
+ </table>
+ ";
+ echo "</td><td>\n";
+ }
echo "
- <table cellpadding=10><tr><td class=heading>
+ <table cellpadding=10><tr valign=top><td class=button>
<a href=\"$url\"><font size=4><u>".tra("Download BOINC")."</u></font></a>
- <br>".
- sprintf(tra("%s for %s (%s MB)"), $num, $long_name, $s )."
- </td></tr> </table>
+ <br>"
+ .sprintf(tra("for %s"), $long_name)
+ ." ($s MB)"
+ ."<br><span class=note>"
+ .sprintf(tra("BOINC %s"), $num)
+ ."</span></td></tr>
+ </table>
";
+ if ($vbox_file) {
+ echo "</td></tr></table>\n";
+ }
if ($pname == 'linux'||$pname == 'linuxx64') {
echo "<p>", linux_info();
}
@@ -86,11 +131,19 @@ function show_pictures() {
function show_download($pname) {
echo "
<table cellpadding=10><tr><td valign=top>
- ".tra("BOINC is a program that lets you donate your idle computer time to science projects like SETI at home, Climateprediction.net, Rosetta at home, World Community Grid, and many others. <p> After installing BOINC on your computer, you can connect it to as many of these projects as you like.")
+ ".tra("BOINC is a program that lets you donate your idle computer time to science projects like SETI at home, Climateprediction.net, Rosetta at home, World Community Grid, and many others.")
+ ." "
+ .tra("After installing BOINC on your computer, you can connect it to as many of these projects as you like.")
."<p>"
.tra("You may run this software on a computer only if you own the computer or have the permission of its owner.").
"<p>"
;
+ if ($pname == 'android') {
+ echo "<b>"
+ .tra("We recommend that you download BOINC from the Google Play Store or Amazon Appstore, not from here.")
+ ." </b>
+ ";
+ }
if ($pname) {
download_link($pname, true);
} else {
@@ -109,14 +162,18 @@ function show_download($pname) {
download_link('linuxcompat');
end_table();
}
+ if ($pname != 'android') {
+ echo "
+ <p>
+ After downloading BOINC you must <b>install</b> it:
+ <ul>
+ <li> Save the file to disk.
+ <li> Double-click on the file icon.
+ </ul>
+ ";
+ }
echo "
<p>
- After downloading BOINC you must <b>install</b> it:
- <ul>
- <li> Save the file to disk.
- <li> Double-click on the file icon.
- </ul>
- <p>
<center>
<a href=\"wiki/System_requirements\"><span class=nobr>".tra("System requirements")."</span></a>
· <a href=\"wiki/Release_Notes\"><span class=nobr>".tra("Release notes")."</span></a>
@@ -158,9 +215,10 @@ if (get_str2('all_platforms')) {
show_download('mac');
}
} else if (strstr($client_info, 'Linux') && strstr($client_info, 'Android')) {
- // Check for Android before Linux, since Android contains the Linux kernel and the
+ // Check for Android before Linux,
+ // since Android contains the Linux kernel and the
// web browser user agent string list Linux too.
- show_download('android');
+ show_download('androidarm');
} else if (strstr($client_info, 'Linux')) {
if (strstr($client_info, 'x86_64')) {
show_download('linuxx64');
diff --git a/doc/download_all.php b/doc/download_all.php
index 21f156f..c879f04 100644
--- a/doc/download_all.php
+++ b/doc/download_all.php
@@ -30,14 +30,14 @@ function dl_item($x, $y) {
";
}
-function version_url($v) {
+function version_url($file) {
global $url_base;
- $file = $v["file"];
- if (is_dev($v)) {
- return "http://boinc.berkeley.edu/dl/$file";
- } else {
- return $url_base.$file;
- }
+ return $url_base.$file;
+// if (is_dev($v)) {
+// return "http://boinc.berkeley.edu/dl/$file";
+// } else {
+// return $url_base.$file;
+// }
}
function show_detail($v) {
@@ -45,7 +45,7 @@ function show_detail($v) {
$file = $v["file"];
$status = $v["status"];
$path = "dl/$file";
- $url = version_url($v);
+ $url = version_url($v['file']);
$dlink = "<a href=$url>$file</a>";
$s = number_format(filesize($path)/1000000, 2);
$date = $v["date"];
@@ -66,7 +66,7 @@ function show_version_xml($v, $p) {
$file = $v["file"];
$status = $v["status"];
$path = "dl/$file";
- $url = version_url($v);
+ $url = version_url($v['file']);
$dlink = "<a href=$url>$file</a>";
$s = number_format(filesize($path)/1000000, 2);
$date = $v["date"];
@@ -87,6 +87,7 @@ function show_version_xml($v, $p) {
}
function show_version($pname, $i, $v) {
+ if (!$v) return;
$num = $v["num"];
$file = $v["file"];
$status = $v["status"];
@@ -102,11 +103,21 @@ function show_version($pname, $i, $v) {
$date = $v["date"];
$type = $v["type"];
$type_text = type_text($type);
- $url = version_url($v);
+ $url = version_url($v['file']);
+
+ $link = "<a href=\"$url\"><b>Download</b></a> ($s MB)";
+ if (array_key_exists('vbox_file', $v)) {
+ $vbox_file = $v['vbox_file'];
+ $vbox_version = $v['vbox_version'];
+ $vbox_url = version_url($vbox_file);
+ $vbox_path = "dl/$vbox_file";
+ $vbox_size = number_format(filesize($vbox_path)/1000000, 2);
+ $link .= "<br><a href=\"$vbox_url\"><b>Download BOINC + VirtualBox $vbox_version</b></a> ($vbox_size MB)";
+ }
echo "<tr>
<td class=rowlineleft>$num</td>
<td class=rowline>$status</td>
- <td class=rowline><a href=\"$url\"><b>Download</b></a> ($s MB)</td>
+ <td class=rowline>$link</td>
<td class=rowlineright>$date</td>
</tr>
";
diff --git a/doc/get_platforms.inc b/doc/get_platforms.inc
index e2e285d..3cca2e4 100644
--- a/doc/get_platforms.inc
+++ b/doc/get_platforms.inc
@@ -3,9 +3,7 @@
ini_set('display_errors', 'stdout');
error_reporting(E_ALL);
-// Mediawiki extension to show a project's platforms.
// The platforms for a given project are stored in a file platforms/URL
-//
function friendly_name($p) {
$x = explode('[', $p);
@@ -35,25 +33,99 @@ function friendly_name($p) {
case 'x86_64-pc-solaris': $q = 'Solaris/x64'; break;
case 'windows_intelx86_64': $q = 'Windows/x64'; break;
case 'arm-android-linux-gnu': $q = 'Android/ARM'; break;
+ case 'arm-android': $q = 'Android/ARM'; break;
case 'arm-unknown-linux-gnu': $q = 'Linux/ARM'; break;
case 'x86_64-pc-freebsd': $q = 'FreeBSD/x86'; break;
+ case 'arm-unknown-linux-gnueabihf': $q = 'Linux on ARM (e.g., Raspberry Pi)';
}
if (strlen($pc)) {
if (strstr($pc, 'cuda')) $q .= " (NVIDIA GPU)";
else if (strstr($pc, 'ati')) $q .= " (AMD/ATI GPU)";
+ else if (strstr($pc, 'intel_gpu')) $q .= " (Intel GPU)";
else if (strstr($pc, 'mt')) $q .= " (multicore)";
+ else if (strstr($pc, 'vbox32')) $q .= " (VirtualBox 32-bit)";
+ else if (strstr($pc, 'vbox64')) $q .= " (VirtualBox 64-bit)";
}
return $q;
}
+function get_platform_icon_flags($l) {
+ $x = new StdClass;
+ $x->windows = false;
+ $x->mac = false;
+ $x->linux = false;
+ $x->android = false;
+ $x->freebsd = false;
+ $x->rasp_pi = false;
+ $x->nvidia_gpu = false;
+ $x->amd_gpu = false;
+ $x->intel_gpu = false;
+ $x->vbox = false;
+ foreach ($l as $p) {
+ $y = explode('[', $p);
+ $pc = "";
+ if (sizeof($y) > 1) {
+ $p = $y[0];
+ $pc = substr($y[1], 0, -1);
+ }
+ if (strstr($p, "windows")) $x->windows = true;
+ if (strstr($p, "darwin")) $x->mac = true;
+ if (strstr($p, "linux")) $x->linux = true;
+ if (strstr($p, "android")) $x->android = true;
+ if (strstr($p, "freebsd")) $x->freebsd = true;
+ if (strstr($p, "arm-unknown-linux-gnueabihf")) $x->rasp_pi = true;
+ if (strstr($p, "armv5")) $x->rasp_pi = true;
+ if (strstr($p, "armv6")) $x->rasp_pi = true;
+ if (strstr($pc, "ati")) $x->amd_gpu = true;
+ if (strstr($pc, "cuda")) $x->nvidia_gpu = true;
+ if (strstr($pc, "intel_gpu")) $x->intel_gpu = true;
+ if (strstr($pc, "vbox")) $x->vbox = true;
+ }
+ return $x;
+}
+
+function platform_icons($f) {
+ $x = "";
+ $ht = 40;
+ $hs = 5;
+ if ($f->windows) {
+ $x .= "<img hspace=$hs height=$ht src=images/windows.jpg title=\"Supports Microsoft Windows\">";
+ }
+ if ($f->mac) {
+ $x .= "<img hspace=$hs height=$ht src=images/mac.jpg title=\"Supports Mac OS X\">";
+ }
+ if ($f->linux) {
+ $x .= "<img hspace=$hs height=$ht src=images/linux.jpg title=\"Supports Linux\">";
+ }
+ if ($f->android) {
+ $x .= "<img hspace=$hs height=$ht src=images/android.png title=\"Supports Android\">";
+ }
+ if ($f->freebsd) {
+ $x .= "<img hspace=$hs height=$ht src=images/freebsd.png title=\"Supports FreeBSD\">";
+ }
+ if ($f->rasp_pi) {
+ $x .= "<img hspace=$hs height=$ht src=images/raspberry-pi.jpg title=\"Supports Raspberry Pi\">";
+ }
+ if ($f->nvidia_gpu) {
+ $x .= "<img hspace=$hs height=$ht src=images/nvidia.jpg title=\"Supports NVIDIA GPUs\">";
+ }
+ if ($f->amd_gpu) {
+ $x .= "<img hspace=$hs height=$ht src=images/amd_gpu.jpg title=\"Supports AMD GPUs\">";
+ }
+ if ($f->intel_gpu) {
+ $x .= "<img hspace=$hs height=$ht src=images/intel_gpu.jpg title=\"Supports Intel GPUs\">";
+ }
+ if ($f->vbox) {
+ $x .= "<img hspace=$hs height=$ht src=images/vbox.jpg title=\"Supports VirtualBox\">";
+ }
+ return $x;
+}
+
function canonical_plan_class($pc) {
- //if (strstr($pc, "mt")) return "mt";
if (strstr($pc, "atiOpenCL")) return "opencl_ati";
if (strstr($pc, "nvidiaOpenCL")) return "opencl_nvidia";
- if (strstr($pc, "intelOpenCL")) return "opencl_intel";
- if (strstr($pc, "cuda")) return "cuda";
- if (strstr($pc, "ati")) return "ati";
- return null;
+ if (strstr($pc, "intelOpenCL")) return "opencl_intel_gpu";
+ return $pc;
}
// get platforms from get_project_config.php (preferred method)
@@ -76,15 +148,20 @@ function canonical_plan_class($pc) {
// </platform>
// ...
//
-function get_platforms(&$url) {
+function get_platforms($url) {
+ if (strstr($url, "radioactive")) return null;
$url .= 'get_project_config.php';
$x = @file_get_contents($url);
- if (!$x) return null;
+ if (!$x) {
+ //echo "no file $url";
+ return null;
+ }
libxml_use_internal_errors(true);
+ $x = trim($x);
$s = simplexml_load_string($x);
- if (!$s) return null;
- if (array_key_exists('rpc_prefix', $s)) {
- $url = $s->rpc_prefix;
+ if (!$s) {
+ //echo "XML parse error";
+ return null;
}
if (!array_key_exists('platforms', $s)) {
return null;
@@ -126,7 +203,10 @@ function get_platforms(&$url) {
function get_platforms2($url) {
$url .= 'apps.php?xml=1';
$x = @file_get_contents($url);
- if (!$x) return null;
+ if (!$x) {
+ //echo "no file $url\n";
+ return null;
+ }
libxml_use_internal_errors(true);
$s = simplexml_load_string($x);
$list = null;
@@ -151,18 +231,27 @@ function get_platforms2($url) {
// convert an array of platform names into a comma-separated
// list of human-readable names
//
-function make_friendly_string($l) {
+function make_friendly_string($l, $comma) {
if (!count($l)) return "Unknown";
- $x = "";
- $first = true;
+ $fn = array();
foreach($l as $p) {
$p = friendly_name($p);
if (!$p) continue;
+ $fn[] = $p;
+ }
+ $fn = array_unique($fn);
+ $x = "";
+ $first = true;
+ foreach($fn as $p) {
if ($first) {
$x .= "$p";
$first = false;
} else {
- $x .= ", $p";
+ if ($comma) {
+ $x .= ", $p";
+ } else {
+ $x .= "<br>$p";
+ }
}
}
return $x;
@@ -174,7 +263,7 @@ function get_platforms_cached($url) {
$u = urlencode($url);
$fname = "/home/boincadm/boinc/doc/platforms/$u";
$t = @filemtime($fname);
- if ($t && $t > time() - 86400) {
+ if ($t && $t > time() - 604800) {
$l = json_decode(file_get_contents($fname));
} else {
$l = get_platforms($url);
@@ -197,22 +286,34 @@ function get_platforms_cached($url) {
// return platforms as a human-readable string
//
-function get_platforms_string($url) {
+function get_platforms_string($url, $comma=true) {
$l = get_platforms_cached($url);
- return make_friendly_string($l);
+ return make_friendly_string($l, $comma);
+}
+
+function get_platform_icons($url) {
+ $l = get_platforms_cached($url);
+ $flags = get_platform_icon_flags($l);
+ return platform_icons($flags);
}
//$u = "http://www.worldcommunitygrid.org/";
+//$u = "http://asteroidsathome.net/boinc/";
//$u = "http://setiathome.berkeley.edu/";
//$u = "http://aqua.dwavesys.com/";
//$u = "http://lhcathome2.cern.ch/test4theory";
+//$u = "http://www.rnaworld.de/rnaworld/";
+//$u = "http://boinc.gorlaeus.net/";
+//$u = "http://einstein.phys.uwm.edu/";
//$x = get_platforms($u);
//print_r($x);
-//echo get_platforms_string("http://setiathome.berkeley.edu/");
+//echo get_platforms_string($u);
//$x = "http://sat.isa.ru/pdsat/";
//print_r( get_platforms($x));
+// Mediawiki extension to show a project's platforms.
+//
function wfPlatforms() {
global $wgParser;
$wgParser->setHook( "platforms", "get_platforms_string" );
diff --git a/doc/index.php b/doc/index.php
index e8bf92d..d15bf09 100644
--- a/doc/index.php
+++ b/doc/index.php
@@ -13,6 +13,7 @@ if ($host == "bolt.berkeley.edu") {
require_once("docutil.php");
require_once("../html/inc/translation.inc");
+require_once("../html/inc/language_names.inc");
function show_participant() {
$i = rand(0, 99);
@@ -90,15 +91,11 @@ function show_participate() {
</td></tr>
<tr><td>
<p>
- ".sprintf(
- tra(" Use the idle time on your computer (Windows, Mac, or Linux) to cure diseases, study global warming, discover pulsars, and do many other types of scientific research. It's safe, secure, and easy: %sChoose%s projects %sDownload%s and run BOINC software %sEnter%s an email address and password. "),
- "<ol> <li> <a href=projects.php><b>",
- "</b></a>",
- "<li> <a href=download.php><b>",
- "</b></a>",
- "<li> <b>",
- "</b>"
- )."
+ ".tra("Use the idle time on your computer (Windows, Mac, Linux, or Android) to cure diseases, study global warming, discover pulsars, and do many other types of scientific research. It's safe, secure, and easy:")."
+ <ol>
+ <li> <a href=projects.php>".tra("Choose projects")."</a>
+ <li> <a href=download.php>".tra("Download BOINC software")."</a>
+ <li> ".tra("Enter an email address and password.")."
</ol>
<p>
".sprintf(
@@ -200,42 +197,6 @@ function show_nsf() {
";
}
-require_once("../html/inc/language_names.inc");
-
-function language_select() {
- global $language_names;
- $supported_languages = getSupportedLanguages();
- $bd = tra("Browser default");
- echo "
- <option value=auto selected=\"selected\">-- language --
- <option value=auto>$bd
- ";
- if ($bd != "Browser default") echo " (Browser default)";
- foreach ($language_names as $lang) {
- if (!in_array($lang[0], $supported_languages)) continue;
- echo "<option value=".$lang[0].">".$lang[1]." (".$lang[2].")";
- }
-}
-
-// how to add language names:
-// paste into notepad++, select ANSI format,
-// then copy/paste into here
-function language_form() {
- echo "
- <table><tr><td>
- <form name=language method=get action=set_language.php>
- <select class=selectbox name=lang onchange=\"javascript: submit()\">
- ";
- language_select();
- echo "</select>
- </form>
- <script type=\"text/javascript\">
- document.language.lang.selectedIndex=0;
- </script>
- </td></tr></table>
- ";
-}
-
header("Content-type: text/html; charset=utf-8");
html_tag();
diff --git a/doc/links.php b/doc/links.php
index aadf7cc..4e8ca14 100644
--- a/doc/links.php
+++ b/doc/links.php
@@ -19,6 +19,16 @@ function site($url, $name) {
$info_sites = array(
array(
+ "http://www.pkcarlisle.com/smboinc.html",
+ "Running BOINC over a Samba Server",
+ "(in English)"
+ ),
+ array(
+ "http://www.overclock.net/f/365/overclock-net-boinc-team",
+ "Overclock.net",
+ "(in English)"
+ ),
+ array(
"http://projekty.czechnationalteam.cz/",
"BOINC projects",
"(in Czech)"
@@ -218,6 +228,7 @@ language("Dutch", array(
site("http://www.boinc.be", "www.boinc.be"),
));
language("English", array(
+ site("http://www.overclock.net/f/365/overclock-net-boinc-team", "Overclock.net"),
site("http://z15.invisionfree.com/The_Boinc_Bar/index.php?act=idx", "The BOINC Bar"),
site("http://www.s15.invisionfree.com/Crunchers_Inc/index.php?act=idx", "Crunchers Inc."),
site("http://www.calmchaosonline.com/", "Calm Chaos"),
diff --git a/doc/logo.php b/doc/logo.php
index 83eedc2..0c5716a 100644
--- a/doc/logo.php
+++ b/doc/logo.php
@@ -82,6 +82,10 @@ $wallpaper = array(
<a href=images/BOINC_background_1_grey.jpg><img src=images/BOINC_background_1_grey_120.jpg></a>
<a href=images/BOINC_background_2_blue.jpg><img src=images/BOINC_background_2_blue_120.jpg></a>"
),
+ array(
+ "Jacob Klein",
+ "<a href=images/boinc_logo_1920x1080.png><img width=180 src=images/boinc_logo_1920x1080.png></a>"
+ ),
);
art_list_head();
art_list_show($wallpaper);
diff --git a/doc/poll_my_result.php.old b/doc/poll_my_result.php.old
deleted file mode 100644
index ef6fba8..0000000
--- a/doc/poll_my_result.php.old
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-require_once("docutil.php");
-require_once("poll.inc");
-require_once("../html/inc/translation.inc");
-require_once("poll_data.inc");
-
-mysql_pconnect("localhost", "boincadm", null);
-mysql_select_db("poll");
-
-session_set_cookie_params(86400*365);
-session_start();
-$uid = session_id();
-
-$response = select_response($uid);
-if ($response) {
- header('Content-type: text/xml');
- echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
- echo "<response>
- $response->xml
- </response>
- ";
-} else {
- echo "no response";
-}
-
-?>
diff --git a/doc/project_list.php b/doc/project_list.php
index 6b21a5d..4f3449e 100644
--- a/doc/project_list.php
+++ b/doc/project_list.php
@@ -22,14 +22,17 @@ foreach ($areas as $area) {
shuffle($projects);
foreach ($projects as $p) {
$np = null;
- if (array_key_exists(5, $p)) {
+ if (array_key_exists(5, $p) && strlen($p[5])) {
$np->image = $p[5];
}
$np->url = $p[1];
$np->web_url = $p[1];
- if (array_key_exists(6, $p)) {
+ if (array_key_exists(6, $p) && strlen($p[6])) {
$np->web_url = $p[6];
}
+ if (array_key_exists(7, $p) && strlen($p[7])) {
+ $np->summary = $p[7];
+ }
$np->home = $p[2];
$np->general_area = $area_name;
$np->specific_area = $p[3];
@@ -40,14 +43,7 @@ foreach ($areas as $area) {
}
}
-$client_info = $_SERVER['HTTP_USER_AGENT'];
-$is_android = strstr($client_info, "android");
-
foreach($proj_list as $p) {
- if (!$is_android) {
- if ($p->name == "Albert at home") continue;
- if ($p->name == "WCG Beta Test") continue;
- }
echo " <project>
<name>$p->name</name>
<url>$p->url</url>
@@ -69,6 +65,10 @@ foreach($proj_list as $p) {
echo " <image>http://boinc.berkeley.edu/images/$p->image</image>
";
}
+ if (isset($p->summary)) {
+ echo " <summary>$p->summary</summary>
+";
+ }
echo " </project>
";
}
diff --git a/doc/projects.inc b/doc/projects.inc
index 81e8e03..bde3112 100644
--- a/doc/projects.inc
+++ b/doc/projects.inc
@@ -6,9 +6,10 @@ require_once("../inc/translation.inc");
// 1: web site URL
// 2: home
// 3: area
-// 4: goals
+// 4: description
// 5: logo
// 6: master URL (if different from web site)
+// 7: 1-sentence summary
$sensing = array(
tra("Distributed sensing"),
@@ -18,19 +19,22 @@ $sensing = array(
"http://qcn.stanford.edu/sensor/",
tra("Stanford University"),
tra("Seismology"),
- tra("The Quake-Catcher Network is developing the world's largest seismic network using sensors attached to Internet-connected computers. You must buy a sensor to participate."),
- ""
+ tra("Quake-Catcher Network is developing the world's largest seismic network using sensors attached to computers and smartphones."),
+ "",
+ "",
+ "Help detect earthquakes"
),
array(
"Radioactive at Home",
"http://radioactiveathome.org/boinc/",
tra("BOINC Poland Foundation"),
tra("Environmental research"),
- tra("This project is creating a free and continuously updated map of radiation levels by using sensors connected to volunteers' computers. You must buy a sensor to participate."),
+ tra("Radioactive at Home is creating a free and continuously updated map of radiation levels using sensors connected to volunteers' computers. You must buy a sensor to participate."),
"radioactive.jpg",
+ "",
+ "Monitor radiation levels"
),
),
- "<br><span class=\"note\">".tra("To participate in these projects you must buy a sensor and attach it to your computer.")."</span>",
);
$cogsci = array(
@@ -42,18 +46,34 @@ $cogsci = array(
"University of Dayton and Wright State University",
"Cognitive Science",
"MindModeling at Home uses computational cognitive process modeling to better understand the human mind, and specifically to study the mechanisms and processes that enable and moderate human performance and learning.",
- "mmlogo.gif"
+ "mmlogo.gif",
+ "",
+ "Model the human brain"
),
+ ),
+);
+
+// put projects here if
+// - you don't want to show them in project list, but
+// - you might want to show them in the future.
+// That way their strings will still appear in the translation file
+//
+$dormant_projects = array(
+ array(
array(
"FreeHAL",
"http://www.freehal.net/freehal_at_home/",
tra("Private"),
tra("Artificial intelligence"),
- tra("Parse and convert semantic nets for use in FreeHAL, an artificial intelligence that uses semantic networks, stemmers, part of speech databases, and part of speech taggers in order to imitate human behavior in conversations.")
+ tra("Parse and convert semantic nets for use in FreeHAL, an artificial intelligence that uses semantic networks, stemmers, part of speech databases, and part of speech taggers in order to imitate human behavior in conversations."),
+ "",
+ "",
+ "Create an artificial intelligence"
),
),
);
+
$biomed = array(
tra("Biology and Medicine"),
array(
@@ -63,7 +83,9 @@ $biomed = array(
"Rechenkraft.net e.V.",
"Molecular biology",
"RNA World seeks to identify, analyze, structurally predict and design RNA molecules on the basis of established bioinformatics software.",
- "rna4.png"
+ "rna4.png",
+ "",
+ "Study and design RNA molecules"
),
array(
"FightMalaria at Home",
@@ -71,7 +93,9 @@ $biomed = array(
tra("University College Dublin"),
tra("Antimalarial drug discovery"),
tra("The parasite that causes malaria continues to evolve resistance to available medication. We therefore urgently need to discover new drugs to replace existing drugs. Importantly, these new drugs need to target NEW proteins in the parasite. The FightMalaria at Home project is aimed at finding these new targets."),
- "FMAH_banner3_wt.png"
+ "FMAH_banner3_wt.png",
+ "",
+ "Develop malaria drugs"
),
array(
"POEM at HOME",
@@ -79,33 +103,51 @@ $biomed = array(
tra("University of Karlsruhe (Germany)"),
tra("Protein structure prediction"),
tra("POEM at HOME uses a computational approach to predict the biologically active structure of proteins, to understand the signal-processing mechanisms when the proteins interact with one another, to understand diseases related to protein malfunction or aggregation, and to develop new drugs on the basis of the three-dimensions structure of biologically important proteins."),
- "poem.jpg"
- ),
- array(
- "Docking at Home",
- "http://docking.cis.udel.edu/",
- tra("University of Delaware"),
- tra("Study of protein - ligand interactions"),
- tra("Docking at Home has both bioscience and computer science goals. The project aims to further knowledge of the atomic details of protein-ligand interactions and, by doing so, will search for insights into the discovery of novel pharmaceuticals."),
- "docking.png"
+ "poem.jpg",
+ "",
+ "Study protein structure and interaction"
),
+// array(
+// "Docking at Home",
+// "http://docking.cis.udel.edu/",
+// tra("University of Delaware"),
+// tra("Study of protein - ligand interactions"),
+// tra("Docking at Home has both bioscience and computer science goals. The project aims to further knowledge of the atomic details of protein-ligand interactions and, by doing so, will search for insights into the discovery of novel pharmaceuticals."),
+// "docking.png",
+// "",
+// "Study protein-ligand interactions"
+// ),
+// array(
+// "Simulation One",
+// "http://mmgboinc.unimi.it/",
+// "Universita degli Studi, Milan, Italy",
+// "Molecular biology",
+// "The project studies osmoprotectants - small molecules that protect proteins, for example by thermal stress. Thanks to these molecules in nature we can find plants able to survive without water, or bacteria able to survive in extreme environmental conditions. And how is this possible? Answering this question could have a major impact in agriculture, e.g. developing plants that require less water intake.",
+// "SimOne_logo.png",
+// "",
+// "Study molecules that protect proteins"
+// ),
array(
"GPUGrid.net",
"http://www.gpugrid.net/",
tra("Barcelona Biomedical Research Park (PRBB)"),
tra("Molecular simulations of proteins"),
tra("GPUGrid.net opens novel computational scenarios by the first full-atom molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. New biomedical applications suddenly become possible giving a new role to computational biology for biomedical research."),
- "gpugrid.png"
- ),
- array(
- "Superlink at Technion",
- "http://cbl-boinc-server2.cs.technion.ac.il/superlinkattechnion/",
- tra("Technion, Israel"),
- tra("Genetic linkage analysis"),
- tra("Superlink at Technion helps geneticists all over the world find disease-provoking genes causing some types of diabetes, hypertension (high blood pressure), cancer, schizophrenia and many others."),
- "superlink_logo.gif"
+ "gpugrid.png",
+ "",
+ "Help biomedical research"
),
// array(
+// "Superlink at Technion",
+// "http://cbl-boinc-server2.cs.technion.ac.il/superlinkattechnion/",
+// tra("Technion, Israel"),
+// tra("Genetic linkage analysis"),
+// tra("Superlink at Technion helps geneticists all over the world find disease-provoking genes causing some types of diabetes, hypertension (high blood pressure), cancer, schizophrenia and many others."),
+// "superlink_logo.gif",
+// "",
+// "Find genetic causes of diseases"
+// ),
+// array(
// "Proteins at Home",
// "http://biology.polytechnique.fr/proteinsathome",
// tra("Ecole Polytechnique, Paris"),
@@ -119,7 +161,9 @@ $biomed = array(
tra("University of Maryland Center for Bioinformatics and Computational Biology"),
tra("Life science research"),
tra("The Lattice Project supplies computing power to scientists at the University of Maryland studying evolutionary relationships based on DNA sequence data; bacterial, plasmid, and virus protein sequences; and biological diversity in nature reserves. "),
- "lattice.gif"
+ "lattice.gif",
+ "",
+ "Study evolution using genetics"
),
array(
"Malariacontrol.net",
@@ -127,7 +171,9 @@ $biomed = array(
tra("The Swiss Tropical Institute"),
tra("Epidemiology"),
tra("Simulation models of the transmission dynamics and health effects of malaria are an important tool for malaria control. They can be used to determine optimal strategies for delivering mosquito nets, chemotherapy, or new vaccines which are currently under development and testing. Such modeling is extremely computer intensive, requiring simulations of large human populations with a diverse set of parameters related to biological and social factors that influence the distr [...]
- "africaathome.gif"
+ "africaathome.gif",
+ "",
+ "Study the spread of malaria"
),
// array(
// "Tanpaku",
@@ -150,8 +196,10 @@ $biomed = array(
"http://boinc.bakerlab.org/rosetta/",
tra("University of Washington"),
tra("Biology"),
- tra("Determine the 3-dimensional shapes of proteins in research that may ultimately lead to finding cures for some major human diseases. By running Rosetta at home you will help us speed up and extend our research in ways we couldn't possibly attempt without your help. You will also be helping our efforts at designing new proteins to fight diseases such as HIV, Malaria, Cancer, and Alzheimer's"),
- "rosetta_at_home_logo.jpg"
+ tra("Determine the 3-dimensional shapes of proteins in research that may ultimately lead to finding cures for some major human diseases. By running Rosetta at home you will help us speed up and extend our research in ways we couldn't possibly attempt without your help. You will also be helping our efforts at designing new proteins to fight diseases such as HIV, malaria, cancer, and Alzheimer's"),
+ "rosetta_at_home_logo.jpg",
+ "",
+ "Study diseases such as HIV, malaria, cancer, and Alzheimer's"
),
array(
"SIMAP",
@@ -159,7 +207,9 @@ $biomed = array(
tra("University of Vienna"),
tra("Biology"),
tra("Calculate similarities between proteins. SIMAP provides a public database of the resulting data, which plays a key role in many bioinformatics research projects."),
- "simaplogo.jpg"
+ "simaplogo.jpg",
+ "",
+ "Calculate similarities between proteins"
),
),
);
@@ -180,20 +230,43 @@ $earth = array(
tra("Climate study"),
tra("Investigate the approximations that have to be made in state-of-the-art climate models. By running the model thousands of times we hope to find out how the model responds to slight tweaks to these approximations - slight enough to not make the approximations any less realistic. This will allow us to improve our understanding of how sensitive our models are to small changes and also to things like changes in carbon dioxide and the sulphur cycle. This will allow us to expl [...]
"cpn_logo_world_1.jpg",
- "http://climateapps2.oucs.ox.ac.uk/cpdnboinc/"
+ "http://climateapps2.oucs.ox.ac.uk/cpdnboinc/",
+ "Study long-term climate change"
),
),
);
$astro_phys_chem = array(
- tra("Astronomy, Physics, and Chemistry"),
+ tra("Physical Science"),
array(
array(
+ "CONVECTOR",
+ "http://convector.fsv.cvut.cz/",
+ "Czech Technical University in Prague",
+ tra("Mechanical engineering"),
+ tra("Currently we are calculating the optimum design of a structure call the 52 bar truss"),
+ "convector.jpg",
+ "",
+ "Study mechanical engineering"
+ ),
+ array(
+ "theSkyNet POGS",
+ "http://pogs.theskynet.org/pogs/",
+ "The International Centre for Radio Astronomy Research (Perth, Australia)",
+ tra("Astronomy"),
+ tra("We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby Universe. We will measure physical parameters (such as stellar mass surface density, star formation rate surface density, attenuation, and first-order star formation history) on a resolved pixel-by-pixel basis using spectral energy distribution (SED) fitting techniques in a distributed computing mode."),
+ "",
+ "",
+ "Analyze images of space"
+ ),
+ array(
"Asteroids at home",
"http://asteroidsathome.net/boinc/",
"Charles University in Prague",
"Astrophysics",
"The aim of the project is to derive shapes and spin for a significant part of the asteroid population. As input data, we use any asteroid photometry that is available. The results are asteroid convex shape models with the direction of the spin axis and the rotation period.",
- "asteroids_logo.jpg"
+ "asteroids_logo.jpg",
+ "",
+ "Study the properties of asteroids"
),
array(
"Constellation",
@@ -201,16 +274,21 @@ $astro_phys_chem = array(
"<a href='http://rechenkraft.net'>Rechenkraft.net</a>, <a href='http://stuttgart.dglr.de'>DGLR</a>, <a href='http://selfnet.de'>Selfnet</a>, and <a href='http://shackspace.de'>shack</a>",
"Aerospace-related science and engineering",
"Constellation is a platform for aerospace-related simulations, including trajectory optimization of launchers, satellites and probes, simulation of Moon's near-surface exosphere, and analysis of dynamic systems of exploration-rovers",
- "constellation2.png"
- ),
- array(
- "eOn",
- "http://eon.ices.utexas.edu/eon2/",
- tra("University of Texas at Austin"),
- tra("Chemistry"),
- tra("A common problem in theoretical chemistry, condensed matter physics and materials science is the calculation of the time evolution of an atomic scale system where, for example, chemical reactions and/or diffusion occur. Generally the events of interest are quite rare (many orders of magnitude slower than the vibrational movements of the atoms), and therefore direct simulations, tracking every movement of the atoms, would take thousands of years of computer calculations o [...]
+ "constellation2.png",
+ "",
+ "Perform aerospace-related simulations"
),
// array(
+// "eOn",
+// "http://eon.ices.utexas.edu/eon2/",
+// tra("University of Texas at Austin"),
+// tra("Chemistry"),
+// tra("A common problem in theoretical chemistry, condensed matter physics and materials science is the calculation of the time evolution of an atomic scale system where, for example, chemical reactions and/or diffusion occur. Generally the events of interest are quite rare (many orders of magnitude slower than the vibrational movements of the atoms), and therefore direct simulations, tracking every movement of the atoms, would take thousands of years of computer calculations [...]
+// "",
+// "",
+// "Study the time evolution of atomic systems"
+// ),
+// array(
// "Orbit at home",
// "http://orbit.psi.edu/oah/",
// tra("Planetary Science Institute"),
@@ -224,7 +302,9 @@ $astro_phys_chem = array(
tra("University of Illinois at Urbana-Champaign"),
tra("Astronomy"),
tra("The goal of Cosmology at Home is to search for the model that best describes our Universe and to find the range of models that agree with the available astronomical particle physics data."),
- "cosmo.jpg"
+ "cosmo.jpg",
+ "",
+ "Study the evolution of the Universe"
),
array(
"Milkyway at home",
@@ -233,6 +313,8 @@ $astro_phys_chem = array(
tra("Astronomy"),
tra("The goal of Milkyway at Home is to create a highly accurate three dimensional model of the Milky Way galaxy using data gathered by the Sloan Digital Sky Survey."),
"mw.png",
+ "",
+ "Study the structure of the Milky Way galaxy"
),
array(
"Leiden Classical",
@@ -240,7 +322,9 @@ $astro_phys_chem = array(
tra("Leiden University, The Netherlands"),
tra("Chemistry"),
tra("Surface science calculations using Classical Dynamics. Leiden Classical allows volunteers, students and other scientist to submit their personal calculations to the grid. Each user has his own personal queue for Classical Dynamics jobs. In this way students have used the grid to simulate liquid argon, or to test the validity of the ideal gas law by actually doing the simulations through the grid."),
- "leiden_classical.png"
+ "leiden_classical.png",
+ "",
+ "Help students do atomic simulations"
),
// array(
// "uFluids at home",
@@ -256,23 +340,27 @@ $astro_phys_chem = array(
tra("Univ. of Wisconsin - Milwaukee, Max Planck Institute"),
tra("Astrophysics"),
tra("Search for spinning neutron stars (also called pulsars) using data from the LIGO and GEO gravitational wave detectors, and from the Arecibo radio observatory. Einstein at Home is a World Year of Physics 2005 project supported by the American Physical Society (APS) and by a number of international organizations."),
- "einstein.jpg"
- ),
- array(
- "Albert at home",
- "http://albert.phys.uwm.edu/",
- tra("Univ. of Wisconsin - Milwaukee, Max Planck Institute"),
- tra("Astrophysics"),
- "Test project for Einstein at home",
- ""
+ "einstein.jpg",
+ "",
+ "Help detect pulsars and gravitational waves"
),
+// array(
+// "Albert at home",
+// "http://albert.phys.uwm.edu/",
+// tra("Univ. of Wisconsin - Milwaukee, Max Planck Institute"),
+// tra("Astrophysics"),
+// "Test project for Einstein at home",
+// ""
+// ),
array(
"LHC at home",
"http://lhcathomeclassic.cern.ch/sixtrack/",
tra("CERN (European Organization for Nuclear Research)"),
tra("Physics"),
tra("The Large Hadron Collider (LHC) is a particle accelerator at CERN, the European Organization for Nuclear Research, the world's largest particle physics laboratory. It is the most powerful instrument ever built to investigate on particles proprieties. LHC at home runs simulations to improve the design of LHC and its detectors."),
- "lhc.jpg"
+ "lhc.jpg",
+ "",
+ "Improve the design of the Large Hadron Collider"
),
array(
"LHC at home Test4Theory",
@@ -280,7 +368,9 @@ $astro_phys_chem = array(
tra("CERN (European Organization for Nuclear Research)"),
tra("Physics"),
tra("This project uses CERN-developed virtual machine technology for full-fledged LHC event physics simulation on volunteer computers. Requires that you install VirtualBox on your computer"),
- "t4t.png"
+ "t4t.png",
+ "",
+ "Simulate high-energy particle collisions"
),
array(
"SETI at home",
@@ -288,7 +378,9 @@ $astro_phys_chem = array(
tra("University of California, Berkeley"),
tra("Astrophysics, astrobiology"),
tra("SETI (Search for Extraterrestrial Intelligence) is a scientific area whose goal is to detect intelligent life outside Earth. One approach, known as radio SETI, uses radio telescopes to listen for narrow-bandwidth radio signals from space. Such signals are not known to occur naturally, so a detection would provide evidence of extraterrestrial technology."),
- "seti_logo.png"
+ "seti_logo.png",
+ "",
+ "Search for evidence of extra-terrestrial life"
),
// array(
// "Quantum Monte Carlo at Home",
@@ -298,14 +390,16 @@ $astro_phys_chem = array(
// tra("Study the structure and reactivity of molecules using Quantum Chemistry."),
// "logo_oben.jpg"
// ),
- array(
- "Spinhenge at home",
- "http://spin.fh-bielefeld.de/",
- tra("Bielefeld University of Applied Sciences"),
- tra("Chemical engineering and nanotechnology"),
- tra("The study of molecular magnets and controlled nanoscale magnetism. These magnetic molecules may be used to develop tiny magnetic switches, with applications in medicine (such as local tumor chemotherapy) and biotechnology."),
- "rotating-fe30-h90px.gif"
- ),
+// array(
+// "Spinhenge at home",
+// "http://spin.fh-bielefeld.de/",
+// tra("Bielefeld University of Applied Sciences"),
+// tra("Chemical engineering and nanotechnology"),
+// tra("The study of molecular magnets and controlled nanoscale magnetism. These magnetic molecules may be used to develop tiny magnetic switches, with applications in medicine (such as local tumor chemotherapy) and biotechnology."),
+// "rotating-fe30-h90px.gif",
+// "",
+// "Study nanoscale magnetism"
+// ),
),
);
@@ -318,14 +412,19 @@ $mixed = array(
tra("Chinese Academy of Sciences"),
tra("Physics, biochemistry, and others"),
tra("The objective of CAS at home is to encourage and assist scientists in China to adopt the technologies of volunteer computing and volunteer thinking for their research."),
- "cas_at_home.jpg"
+ "cas_at_home.jpg",
+ "",
+ "Help Chinese researchers"
),
array(
"Yoyo at home",
"http://www.rechenkraft.net/yoyo/",
tra("Private"),
tra("Mathematics, physics, evolution"),
- tra("Yoyo at home is an adapter between BOINC and several existing volunteer computing projects: ECM, Muon, Evolution at home, and distributed.net")
+ tra("Yoyo at home is an adapter between BOINC and several existing volunteer computing projects: ECM, Muon, Evolution at home, and distributed.net"),
+ "",
+ "",
+ "Do research in math, physics, and evolution"
),
array(
"EDGeS at Home",
@@ -333,7 +432,9 @@ $mixed = array(
tra("MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"),
tra("European research projects"),
tra("The EDGeS at Home Beta project integrates volunteer computing into the service grid network of Europe by allowing service grids to send workunits to be processed by the volunteers of this project. The scientific projects covered by the project include math, physics, biology, etc."),
- "logo_edges.png"
+ "logo_edges.png",
+ "",
+ "Help European researchers"
),
array(
"Ibercivis",
@@ -341,15 +442,19 @@ $mixed = array(
tra("Spanish universities and research centers"),
tra("Various Spanish research projects"),
tra("Research in physics, material science, and biomedicine"),
- "cabecera2.jpg"
+ "cabecera2.jpg",
+ "",
+ "Help Spanish researchers"
),
array(
"World Community Grid",
"http://www.worldcommunitygrid.org/",
- tra("IBM Corporate Community Relations"),
- tra("Humanitarian research on disease, natural disasters and hunger."),
- tra("To further critical non-profit research on some of humanity's most pressing problems by creating the world's largest volunteer computing grid. Research includes HIV/AIDS, cancer, muscular dystrophy, dengue fever, and many more."),
+ tra("IBM Corporate Citizenship"),
+ tra("Medical, environmental and other humanitarian research"),
+ tra("To further critical non-profit research on some of humanity's most pressing problems by creating the world's largest volunteer computing grid. Research includes HIV-AIDS, cancer, tropical and neglected diseases, solar energy, clean water and many more."),
"wcg.jpg",
+ "",
+ "Do biomedical and environmental research"
),
),
);
@@ -362,7 +467,9 @@ $math = array(
"University of North Dakota, Computer Science Department",
tra("Computer Science"),
"Research in computational complexity",
- ""
+ "",
+ "",
+ "Study the Subset Sum problem"
),
array(
"OProject at Home",
@@ -370,7 +477,9 @@ $math = array(
tra("Private"),
tra("Mathematics, Physics, Artificial Intelligence"),
tra("Simulation of quantum computing; Goldbach's conjecture."),
- "oproject_logo.png"
+ "oproject_logo.png",
+ "",
+ "Do research in math, physics, and Artificial Intelligence"
),
array(
"NumberFields at home",
@@ -378,7 +487,9 @@ $math = array(
"Arizona State University, school of Mathematics",
"Mathematics",
"NumberFields at home searches for fields with special properties. The primary application of this research is in the realm of algebraic number theory. Number theorists can mine the data for interesting patterns to help them formulate conjectures about number fields. Ultimately, this research will lead to a deeper understanding of the profound properties of numbers, the basic building blocks of all mathematics.",
- "nf_banner_10.jpg"
+ "nf_banner_10.jpg",
+ "",
+ "Do research in algebraic number theory"
),
array(
"VolPEx",
@@ -386,15 +497,19 @@ $math = array(
"University of Houston",
"Computer science",
"Creating effective parallel computing on multiple volatile nodes. Apply research on REMD Protein Folding.",
- ""
+ "",
+ "",
+ "Study parallel computing across multiple computers"
),
array(
"SAT at home",
"http://sat.isa.ru/pdsat/",
- "Institute for Systems Analysis and Institute for System Dynamics and Control Theory, Russian Academy of Science",
+ "Institute for System Dynamics and Control Theory and Institute for Information Transmission Problems, Russian Academy of Science",
"Computer Science",
"Solve hard and practically important problems (discrete functions inversion problems, discrete optimization, bioinformatics, etc.) that can be effectively reduced to Boolean satisfiability problem.",
- "sat_logo.png"
+ "sat_logo.png",
+ "",
+ "Study computational complexity"
),
// array(
// "Mersenne at home",
@@ -412,13 +527,18 @@ $math = array(
tra("Cryptography"),
"To give the world's security experts the best tools available for detecting weak hashes. This can help them to force developers to use more secure methods of password protection.",
"freerainbowtables_logo.png",
+ "",
+ "Study hash functions"
),
array(
"Enigma at Home",
"http://www.enigmaathome.net/",
tra("Private"),
tra("Cryptography"),
- tra("Attempt to decode 3 original Enigma messages. The signals were intercepted in the North Atlantic in 1942 and are believed to be unbroken.")
+ tra("Attempt to decode 3 original Enigma messages. The signals were intercepted in the North Atlantic in 1942 and are believed to be unbroken."),
+ "",
+ "",
+ "Decode WWII submarine messages"
),
array(
"Collatz Conjecture",
@@ -426,6 +546,9 @@ $math = array(
tra("Private"),
tra("Mathematics"),
tra("Study the Collatz Conjecture, an unsolved conjecture in mathematics"),
+ "",
+ "",
+ "Study the Collatz Conjecture"
),
array(
"NFS at home",
@@ -433,7 +556,9 @@ $math = array(
tra("California State University Fullerton"),
tra("Factorization of large integers"),
tra("NFS at Home is a research project that uses Internet-connected computers to do the lattice sieving step in the Number Field Sieve factorization of large integers. As a young school student, you gained your first experience at breaking an integer into prime factors, such as 15 = 3 * 5 or 35 = 5 * 7. NFS at Home is a continuation of that experience, only with integers that are hundreds of digits long."),
- "NFS_Logo.jpg"
+ "NFS_Logo.jpg",
+ "",
+ "Study the factorization of large integers"
),
array(
"VTU at home",
@@ -442,6 +567,8 @@ $math = array(
tra("Software testing"),
tra("The aim of this project is to provide a powerful distributed computing platform for scientists of Vilnius Gediminas Technical University (VGTU) as well as others Lithuanian academic institutions. Current applications involve the study of Monte-Carlo based software testing."),
"vtuathome-white.gif",
+ "",
+ "Help Lithuanian researchers"
),
// array(
// "AQUA at home",
@@ -465,7 +592,9 @@ $math = array(
tra("Mathematical Institute of Leiden University / Kennislink"),
tra("Mathematics"),
tra("Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b < c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the product of the distinct prime factors of n. The ABC conjecture says that there are only finitely many a,b,c such that log(c)/log(rad(abc)) > h for any real h > 1. The ABC conjecture is currently one of the greatest open problems in mathematics. If it is proven to be true, a lot of other open problems can be answered direc [...]
- "abclogo.jpg"
+ "abclogo.jpg",
+ "",
+ "Study the ABC conjecture"
),
array(
"PrimeGrid",
@@ -473,7 +602,9 @@ $math = array(
tra("Private"),
tra("Mathematics"),
tra("Primegrid has multiple projects searching for different forms of very large prime numbers, including searching for the largest known prime number."),
- "primegrid_logo.png"
+ "primegrid_logo.png",
+ "",
+ "Search for large prime numbers"
),
array(
"primaboinca",
@@ -481,7 +612,9 @@ $math = array(
tra("Hochschule RheinMain University of Applied Sciences"),
tra("Mathematics"),
tra("Search for counterexamples to two conjectures related to the identification of prime numbers"),
- "logo_primaboinca.gif"
+ "logo_primaboinca.gif",
+ "",
+ "Study the properties of prime numbers"
),
array(
"SZTAKI Desktop Grid",
@@ -489,7 +622,9 @@ $math = array(
tra("MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"),
tra("Mathematics"),
tra("Find all the generalized binary number systems (in which bases are matrices and digits are vectors) up to dimension 11."),
- "szdg1_small.jpg"
+ "szdg1_small.jpg",
+ "",
+ "Study number theory"
),
// array(
// "Riesel Sieve",
@@ -523,14 +658,16 @@ $math = array(
// tra("The eight queens problem consists of trying to place eight queens on a chessboard so that no queen attacks any other queen. I has long been known that there are 92 solutions, of which 12 are distinct. NQueens at home studies the generalization to N queens on an NxN board, for N=19 and greater."),
// "NQueens-Logo1b.png"
// ),
- array(
- "sudoku at vtaiwan",
- "http://sudoku.nctu.edu.tw/",
- "National Chiao Tung University, Taiwan",
- tra("Mathematics"),
- "Sudoku at vtaiwan seeks to solve the minimum Sudoku problem, a well-known problem in mathematics and computer science.",
- "sudoku.png"
- ),
+// array(
+// "sudoku at vtaiwan",
+// "http://sudoku.nctu.edu.tw/",
+// "National Chiao Tung University, Taiwan",
+// tra("Mathematics"),
+// "Sudoku at vtaiwan seeks to solve the minimum Sudoku problem, a well-known problem in mathematics and computer science.",
+// "sudoku.png",
+// "",
+// "Find the minimum Sudoku puzzle"
+// ),
// array(
// "Surveill at Home",
// "http://surveill.dei.uc.pt/surveill",
diff --git a/doc/projects.php b/doc/projects.php
index 0cc7295..904de74 100644
--- a/doc/projects.php
+++ b/doc/projects.php
@@ -41,7 +41,7 @@ a partial summary is <a href=http://boincfaq.mundayweb.com/index.php?view=67>her
<p>
If your computer is equipped with a Graphics Processing Unit
(GPU), you may be able to
-<a href=http://boinc.berkeley.edu/wiki/GPU_computing>use it to compute faster</a>.
+<a href=\"http://boinc.berkeley.edu/wiki/GPU_computing\">use it to compute faster</a>.
";
// Display projects grouped by area.
@@ -74,7 +74,7 @@ function grouped_display($areas) {
$home = $p[2];
$area = $p[3];
$master_url = $p[1];
- if (array_key_exists(6, $p)) {
+ if (array_key_exists(6, $p) && strlen($p[6])) {
$master_url = $p[6];
}
$p = get_platforms_string($master_url);
@@ -136,10 +136,16 @@ function ordered_display($areas, $sort) {
$area = $p['area'];
$spec_area = $p[3];
$master_url = $p[1];
- if (array_key_exists(6, $p)) {
+ if (array_key_exists(6, $p) && strlen($p[6])) {
$master_url = $p[6];
}
- $p = get_platforms_string($master_url);
+ $p = get_platform_icons($master_url);
+ if (!$p) {
+ $p = tra("Unknown");
+ } else {
+ $pd = get_platforms_string($master_url, false);
+ $p .= "<br><a href=projects.php onmouseover=\"popup('Supported platforms:<br>$pd', 240)\">Details</a>";
+ }
echo "<tr class=row$n>
<td valign=top>$x</td>
<td valign=top>$area</td>
@@ -155,7 +161,7 @@ function ordered_display($areas, $sort) {
//grouped_display($areas);
-$sort = $_GET['sort'];
+$sort = @$_GET['sort'];
ordered_display($areas, $sort);
echo "
</ul>
diff --git a/doc/set_language.php b/doc/set_language.php
new file mode 100644
index 0000000..f11e593
--- /dev/null
+++ b/doc/set_language.php
@@ -0,0 +1,11 @@
+<?php
+require_once("../html/inc/translation.inc");
+$languages = get_supported_languages();
+$lang = $_GET['lang'];
+if (!in_array($lang, $languages) && $lang!="auto" && $lang!="en") {
+ echo "Language $lang is not supported";
+} else {
+ setcookie('lang', $lang, time()+3600*24*365);
+ header('Location: index.php');
+}
+?>
diff --git a/doc/update_translations.php b/doc/update_translations.php
index ee98cd7..06e99d5 100755
--- a/doc/update_translations.php
+++ b/doc/update_translations.php
@@ -9,7 +9,9 @@ $lang_log_level = 0;
system("rm -f $lang_language_dir/$lang_compiled_dir/*");
-build_translation_array_files($lang_language_dir, $lang_translations_dir, $lang_compiled_dir);
+build_translation_array_files(
+ $lang_language_dir, $lang_translations_dir, $lang_compiled_dir
+);
echo "update_translations finished\n";
?>
diff --git a/doc/versions.inc b/doc/versions.inc
index 6be3a98..0cfe542 100644
--- a/doc/versions.inc
+++ b/doc/versions.inc
@@ -9,7 +9,7 @@ function type_text($type) {
case "win_new":
return "Windows installer";
case "bare_core":
- return "Core client only (command-line)";
+ return "Command-line client (no GUI)";
case "sea":
return "Self-extracting archive";
case "mac_advanced":
@@ -24,7 +24,7 @@ function type_text($type) {
case "win_new":
return "<a href=win_install.php>Windows installer</a>";
case "bare_core":
- return "<a href=bare_core.php>Core client only (command-line)</a>";
+ return "<a href=bare_core.php>Command-line client (no GUI)</a>";
case "sea":
return "<a href=sea.php>Self-extracting archive</a>";
case "mac_advanced":
@@ -43,33 +43,37 @@ function linux_info() {
instead. ";
}
-$w72dev = array(
- "num"=>"7.1.17",
+$w74dev = array(
+ "num"=>"7.3.11",
"status"=>"Development version",
- "file"=>"boinc_7.1.17_windows_intelx86.exe",
- "date"=>"14 June 2013",
+ "file"=>"boinc_7.3.11_windows_intelx86.exe",
+ "vbox_file"=>"boinc_7.3.11_windows_intelx86_vbox.exe",
+ "vbox_version"=>"4.2.16",
+ "date"=>"10 Mar 2014",
"type"=>"win_new",
);
-$w70 = array(
- "num"=>"7.0.64",
+$w72 = array(
+ "num"=>"7.2.42",
"status"=>"Recommended version",
- "file"=>"boinc_7.0.64_windows_intelx86.exe",
- "date"=>"17 Apr 2013",
+ "file"=>"boinc_7.2.42_windows_intelx86.exe",
+ "vbox_file"=>"boinc_7.2.42_windows_intelx86_vbox.exe",
+ "vbox_version"=>"4.2.16",
+ "date"=>"28 Feb 2014",
"type"=>"win_new",
);
-$w70old = array(
- "num"=>"7.0.28",
+$w70 = array(
+ "num"=>"7.0.64",
"status"=>"Older version",
- "file"=>"boinc_7.0.28_windows_intelx86.exe",
- "date"=>"21 May 2012",
+ "file"=>"boinc_7.0.64_windows_intelx86.exe",
+ "date"=>"17 Apr 2013",
"type"=>"win_new",
);
$w66 = array(
"num"=>"6.6.38",
- "status"=>"Older version (also works on Windows 98, Windows ME)",
+ "status"=>"Older version (also works on Windows 98, Windows ME)",
"file"=>"boinc_6.6.38_windows_intelx86.exe",
"date"=>"28 Oct 2009",
"type"=>"win_new",
@@ -83,51 +87,55 @@ $w5816 = array(
"type"=>"win_new",
);
-$w72x64dev = array(
- "num"=>"7.1.17",
+$w74x64dev = array(
+ "num"=>"7.3.11",
"status"=>"Development version",
- "file"=>"boinc_7.1.17_windows_x86_64.exe",
- "date"=>"14 June 2013",
+ "file"=>"boinc_7.3.11_windows_x86_64.exe",
+ "vbox_file"=>"boinc_7.3.11_windows_x86_64_vbox.exe",
+ "vbox_version"=>"4.2.16",
+ "date"=>"10 Mar 2014",
"type"=>"win_new",
);
-$w70x64 = array(
- "num"=>"7.0.64",
+$w72x64 = array(
+ "num"=>"7.2.42",
"status"=>"Recommended version",
- "file"=>"boinc_7.0.64_windows_x86_64.exe",
- "date"=>"17 Apr 2013",
+ "file"=>"boinc_7.2.42_windows_x86_64.exe",
+ "vbox_file"=>"boinc_7.2.42_windows_x86_64_vbox.exe",
+ "vbox_version"=>"4.2.16",
+ "date"=>"28 Feb 2014",
"type"=>"win_new",
);
-$w70x64old = array(
- "num"=>"7.0.28",
+$w70x64 = array(
+ "num"=>"7.0.64",
"status"=>"Older version",
- "file"=>"boinc_7.0.28_windows_x86_64.exe",
- "date"=>"21 May 2012",
+ "file"=>"boinc_7.0.64_windows_x86_64.exe",
+ "date"=>"17 Apr 2013",
"type"=>"win_new",
);
-$m72dev = array(
- "num"=>"7.1.17",
+$m74dev = array(
+ "num"=>"7.3.13",
"status"=>"Development version (standard GUI)",
- "file"=>"boinc_7.1.17_macOSX_i686.zip",
- "date"=>"14 June 2013",
+ "file"=>"boinc_7.3.13_macOSX_i686.zip",
+ "date"=>"13 Mar 2014",
"type"=>"mac_advanced",
);
-$m70 = array(
- "num"=>"7.0.65",
+$m72 = array(
+ "num"=>"7.2.42",
"status"=>"Recommended version (standard GUI)",
- "file"=>"boinc_7.0.65_macOSX_i686.zip",
- "date"=>"17 Apr 2013",
+ "file"=>"boinc_7.2.42_macOSX_i686.zip",
+ "date"=>"28 Feb 2014",
"type"=>"mac_advanced",
);
-$m70old = array(
- "num"=>"7.0.31",
+$m70 = array(
+ "num"=>"7.0.65",
"status"=>"Older version (standard GUI)",
- "file"=>"boinc_7.0.31_macOSX_i686.zip",
- "date"=>"7 July 2012",
+ "file"=>"boinc_7.0.65_macOSX_i686.zip",
+ "date"=>"17 Apr 2013",
"type"=>"mac_advanced",
);
@@ -147,27 +155,27 @@ $m66 = array(
"type"=>"mac_advanced",
);
-$m72cdev = array(
- "num"=>"7.1.17",
+$m74cdev = array(
+ "num"=>"7.3.13",
"status"=>"Development version (Unix command-line version)",
- "file"=>"boinc_7.1.17_i686-apple-darwin.zip",
- "date"=>"14 June 2013",
+ "file"=>"boinc_7.3.13_i686-apple-darwin.zip",
+ "date"=>"13 Mar 2014",
"type"=>"bare_core",
);
-$m70c = array(
- "num"=>"7.0.65",
+$m72c = array(
+ "num"=>"7.2.42",
"status"=>"Recommended version (Unix command-line version)",
- "file"=>"boinc_7.0.65_i686-apple-darwin.zip",
- "date"=>"17 Apr 2013",
+ "file"=>"boinc_7.2.42_i686-apple-darwin.zip",
+ "date"=>"28 Feb 2014",
"type"=>"bare_core",
);
-$m70cold = array(
- "num"=>"7.0.31",
+$m70c = array(
+ "num"=>"7.0.65",
"status"=>"Older version (Unix command-line version)",
- "file"=>"boinc_7.0.31_i686-apple-darwin.zip",
- "date"=>"29 July 2012",
+ "file"=>"boinc_7.0.65_i686-apple-darwin.zip",
+ "date"=>"17 Apr 2013",
"type"=>"bare_core",
);
@@ -203,52 +211,60 @@ $l66 = array(
"type"=>"sea",
);
-$l72ubuntudev = array(
- "num"=>"7.1.17",
+$l74ubuntudev = array(
+ "num"=>"7.3.11",
"status"=>"Development version",
- "file"=>"boinc_7.1.17_i686-pc-linux-gnu.sh",
- "date"=>"14 June 2013",
+ "file"=>"boinc_7.3.11_i686-pc-linux-gnu.sh",
+ "date"=>"12 Mar 2014",
+ "type"=>"sea",
+);
+
+$l72ubuntu = array(
+ "num"=>"7.2.42",
+ "status"=>"Recommended version",
+ "file"=>"boinc_7.2.42_i686-pc-linux-gnu.sh",
+ "date"=>"28 Feb 2014",
"type"=>"sea",
);
$l70ubuntu = array(
"num"=>"7.0.65",
- "status"=>"Recommended version",
+ "status"=>"Older version",
"file"=>"boinc_7.0.65_i686-pc-linux-gnu.sh",
"date"=>"17 Apr 2013",
"type"=>"sea",
);
-$l70ubuntuold = array(
- "num"=>"7.0.28",
- "status"=>"Older version",
- "file"=>"boinc_7.0.28_i686-pc-linux-gnu.sh",
- "date"=>"21 May 2012",
+$l74ubuntux64dev = array(
+ "num"=>"7.3.11",
+ "status"=>"Development version",
+ "file"=>"boinc_7.3.11_x86_64-pc-linux-gnu.sh",
+ "date"=>"12 Mar 2014",
"type"=>"sea",
);
-$l72ubuntux64dev = array(
- "num"=>"7.1.17",
- "status"=>"Development version",
- "file"=>"boinc_7.1.17_x86_64-pc-linux-gnu.sh",
- "date"=>"14 June 2013",
+$l72ubuntux64 = array(
+ "num"=>"7.2.42",
+ "status"=>"Recommended version",
+ "file"=>"boinc_7.2.42_x86_64-pc-linux-gnu.sh",
+ "date"=>"28 Feb 2014",
"type"=>"sea",
);
$l70ubuntux64 = array(
"num"=>"7.0.65",
- "status"=>"Recommended version",
+ "status"=>"Older version",
"file"=>"boinc_7.0.65_x86_64-pc-linux-gnu.sh",
"date"=>"17 Apr 2013",
"type"=>"sea",
);
-$l70ubuntux64old = array(
- "num"=>"7.0.28",
- "status"=>"Older version",
- "file"=>"boinc_7.0.28_x86_64-pc-linux-gnu.sh",
- "date"=>"21 May 2012",
- "type"=>"sea",
+$a73 = array(
+ "num"=>"7.3.7",
+ "status"=>"Recommended Version",
+ "file"=>"boinc_7.3.7.apk",
+ "date"=>"3 Mar 2014",
+ "type"=>"apk",
);
// platform descriptors. For each one, "versions"
@@ -256,27 +272,26 @@ $l70ubuntux64old = array(
// i.e. the first non-dev version is the current one
$windows = array(
- "name"=>"Windows",
- "description"=>"2000/XP/Vista/7/8",
+ "name"=>"Windows 32-bit",
+ "description"=>"XP/Vista/7/8/8.1",
"dbname" => "windows_intelx86",
"versions"=>array(
- $w72dev,
- $w70,
- $w70old,
- $w66,
- $w5816,
+ $w74dev,
+ $w72,
+ $w70,
+ $w66,
+ $w5816,
)
);
$windowsx64 = array(
"name"=>"Windows 64-bit",
- "description"=>"XP/Vista/7/8",
+ "description"=>"XP/Vista/7/8/8.1",
"dbname" => "windows_x86_64",
"versions"=>array(
- $w72x64dev,
- $w70x64,
- $w70x64old,
- $w612x64,
+ $w74x64dev,
+ $w72x64,
+ $w70x64,
)
);
@@ -285,12 +300,12 @@ $mac = array(
"description"=>"Version 10.4.0+",
"dbname" => "x86_64-apple-darwin",
"versions"=>array(
- $m72dev,
- $m70,
- $m70old,
- $m72cdev,
- $m70c,
- $m70cold,
+ $m74dev,
+ $m72,
+ $m70,
+ $m74cdev,
+ $m72c,
+ $m70c,
)
);
@@ -299,10 +314,10 @@ $macppc = array(
"description"=>"Version 10.4.0+",
"dbname" => "powerpc-apple-darwin",
"versions"=>array(
- $m612_ppc,
- $m612c_ppc,
- $m66,
- $m66c,
+ $m612_ppc,
+ $m612c_ppc,
+ $m66,
+ $m66c,
)
);
@@ -311,9 +326,9 @@ $linux = array(
"description"=> linux_info(),
"dbname" => "i686-pc-linux-gnu",
"versions"=>array(
- $l72ubuntudev,
- $l70ubuntu,
- $l70ubuntuold,
+ $l74ubuntudev,
+ $l72ubuntu,
+ $l70ubuntu,
)
);
@@ -322,9 +337,9 @@ $linuxx64 = array(
"description"=> linux_info(),
"dbname" => "x86_64-pc-linux-gnu",
"versions"=>array(
- $l72ubuntux64dev,
- $l70ubuntux64,
- $l70ubuntux64old,
+ $l74ubuntux64dev,
+ $l72ubuntux64,
+ $l70ubuntux64,
)
);
@@ -338,6 +353,33 @@ $linuxcompat = array(
)
);
+$androidarm = array(
+ "name"=>"Android/ARM",
+ "description"=>"Android version 2.3 and later<br>We recommend that, rather than downloading BOINC from here,</br>you get it from the Google Play Store or the Amazon app store (for Kindle Fire)",
+ "dbname" => "arm-android-linux-gnu",
+ "versions"=>array(
+ $a73,
+ )
+);
+
+$androidmips = array(
+ "name"=>"Android/MIPS",
+ "description"=>"Android version 2.3 and later<br>We recommend that, rather than downloading BOINC from here,</br>you get it from the Google Play Store or the Amazon app store (for Kindle Fire)",
+ "dbname" => "mips-android-linux-gnu",
+ "versions"=>array(
+ $a73,
+ )
+);
+
+$androidx86 = array(
+ "name"=>"Android/x86",
+ "description"=>"Android version 2.3 and later<br>We recommend that, rather than downloading BOINC from here,</br>you get it from the Google Play Store or the Amazon app store (for Kindle Fire)",
+ "dbname" => "x86-android-linux-gnu",
+ "versions"=>array(
+ $a73,
+ )
+);
+
$platforms = array(
"win"=>$windows,
"winx64"=>$windowsx64,
@@ -345,7 +387,10 @@ $platforms = array(
"macppc"=>$macppc,
"linux"=>$linux,
"linuxx64"=>$linuxx64,
- "linuxcompat"=>$linuxcompat,
+ "linuxcompat"=>$linuxcompat,
+ "androidarm"=>$androidarm,
+ "androidmips"=>$androidmips,
+ "androidx86"=>$androidx86,
);
function is_dev($v) {
diff --git a/doc/white.css b/doc/white.css
index 72e10bb..0a57fca 100644
--- a/doc/white.css
+++ b/doc/white.css
@@ -42,8 +42,7 @@ table.box {
table.bordered {
border: 2px solid #e8e8e8;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
+ border-radius: 6px;
}
body {
@@ -75,7 +74,7 @@ span.inboxunread {
span.note{
font-weight: normal;
- font-size: 0.9em;
+ font-size: 0.8em;
}
span.news_date {
color: rgb(100,100,100);
@@ -104,25 +103,28 @@ td.indent {
border-left: 4px solid white;
}
+td.button{
+ background-color: rgb(223, 240, 255);
+ border: 1px solid lightblue;
+ border-radius: 10px;
+}
+
td.heading{
background-color: rgb(223, 240, 255);
border: 1px solid lightblue;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
+ border-radius: 6px;
}
td.heading_left {
background-color: rgb(223, 240, 255);
border: 1px solid lightgray;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
+ border-radius: 6px;
}
td.heading_right {
background-color: rgb(255, 255, 214);
border: 1px solid goldenrod;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
+ border-radius: 6px;
}
td.fieldname {
@@ -200,15 +202,13 @@ input.btn {
border-right: none;
padding: 3px 6px;
white-space: nowrap;
- -moz-border-radius: 6px 0px 0px 6px;
- -webkit-border-radius: 6px 0px 0px 6px;
+ border-radius: 6px 0px 0px 6px;
}
.rowlineright {
border: 1px solid lightblue;
border-left: none;
- -moz-border-radius: 0px 6px 6px 0px;
- -webkit-border-radius: 0px 6px 6px 0px;
+ border-radius: 0px 6px 6px 0px;
}
.dev { color: red; font-weight: bold }
diff --git a/html/inc/boinc_db.inc b/html/inc/boinc_db.inc
index d652e4f..1c471aa 100644
--- a/html/inc/boinc_db.inc
+++ b/html/inc/boinc_db.inc
@@ -125,6 +125,27 @@ class BoincUser {
}
return self::$cache[$id];
}
+ static function lookup_auth($auth) {
+ $db = BoincDb::get();
+ $auth = BoincDb::escape_string($auth);
+ return self::lookup("authenticator='$auth'");
+ }
+ static function lookup_email_addr($email_addr) {
+ $db = BoincDb::get();
+ $email_addr = BoincDb::escape_string($email_addr);
+ return self::lookup("email_addr='$email_addr'");
+ }
+ static function lookup_name($name) {
+ $name = BoincDb::escape_string($name);
+ $users = BoincUser::enum("name='$name'");
+ switch (sizeof($users)) {
+ case 1:
+ return $users[0];
+ case 0:
+ return null;
+ }
+ return -1;
+ }
static function count($clause) {
$db = BoincDb::get();
return $db->count('user', $clause);
@@ -158,10 +179,14 @@ class BoincUser {
$db->delete_aux('profile', "userid=$this->id");
return $db->delete($this, 'user');
}
- function sum($field) {
+ static function sum($field) {
$db = BoincDb::get();
return $db->sum('user', $field);
}
+ static function percentile($field, $clause, $pct) {
+ $db = BoincDb::get();
+ return $db->percentile('user', $field, $clause, $pct);
+ }
}
class BoincTeam {
@@ -198,6 +223,20 @@ class BoincTeam {
$db = BoincDb::get();
return $db->delete($this, 'team');
}
+ static function percentile($field, $clause, $pct) {
+ $db = BoincDb::get();
+ return $db->percentile('team', $field, $clause, $pct);
+ }
+ static function max($field) {
+ $db = BoincDb::get();
+ return $db->max('team', $field);
+ }
+ static function enum_fields($fields, $where_clause, $order_clause=null) {
+ $db = BoincDb::get();
+ return $db->enum_fields(
+ 'team', 'BoincTeam', $fields, $where_clause, $order_clause
+ );
+ }
}
class BoincTeamDelta {
@@ -321,7 +360,7 @@ class BoincApp {
$db = BoincDb::get();
return $db->update($this, 'app', $clause);
}
- function sum($field) {
+ static function sum($field) {
$db = BoincDb::get();
return $db->sum('app', $field);
}
@@ -369,7 +408,7 @@ class BoincProfile {
$db = BoincDb::get();
return $db->insert('profile', $clause);
}
- static function enum($clause, $clause2=null) {
+ static function enum($clause=null, $clause2=null) {
$db = BoincDb::get();
return $db->enum('profile', 'BoincProfile', $clause, $clause2);
}
@@ -444,6 +483,18 @@ class BoincPlatform {
$db = BoincDb::get();
return $db->lookup_id($id, 'platform', 'BoincPlatform');
}
+ static function lookup($clause) {
+ $db = BoincDb::get();
+ return $db->lookup('platform', 'BoincPlatform', $clause);
+ }
+ function update($clause) {
+ $db = BoincDb::get();
+ return $db->update($this, 'platform', $clause);
+ }
+ static function insert($clause) {
+ $db = BoincDb::get();
+ return $db->insert('platform', $clause);
+ }
}
class BoincHostAppVersion {
@@ -501,4 +552,92 @@ function latest_avs_app($appid) {
return $r;
}
+class BoincBadge {
+ static function enum($where_clause) {
+ $db = BoincDb::get();
+ return $db->enum('badge', 'BoincBadge', $where_clause);
+ }
+ static function insert($clause) {
+ $db = BoincDb::get();
+ $ret = $db->insert('badge', $clause);
+ if (!$ret) return 0;
+ return $db->insert_id();
+ }
+ function update($clause) {
+ $db = BoincDb::get();
+ return $db->update($this, 'badge', $clause);
+ }
+ static function lookup_id($id) {
+ $db = BoincDb::get();
+ return $db->lookup_id($id, 'badge', 'BoincBadge');
+ }
+ static function lookup($clause) {
+ $db = BoincDb::get();
+ return $db->lookup('badge', 'BoincBadge', $clause);
+ }
+ function delete() {
+ $db = BoincDb::get();
+ return $db->delete($this, 'badge');
+ }
+}
+
+class BoincBadgeUser {
+ static function enum($where_clause) {
+ $db = BoincDb::get();
+ return $db->enum('badge_user', 'BoincBadgeUser', $where_clause);
+ }
+ static function insert($clause) {
+ $db = BoincDb::get();
+ $ret = $db->insert('badge_user', $clause);
+ if (!$ret) return false;
+ return true;
+ }
+ static function lookup($clause) {
+ $db = BoincDb::get();
+ return $db->lookup('badge_user', 'BoincBadgeUser', $clause);
+ }
+ static function update($clause) {
+ $db = BoincDb::get();
+ return $db->update_aux('badge_user', $clause);
+ }
+ static function delete($clause) {
+ $db = BoincDb::get();
+ $db->delete_aux('badge_user', $clause);
+ }
+ static function count($clause) {
+ $db = BoincDb::get();
+ return $db->count('badge_user', $clause);
+ }
+}
+
+class BoincBadgeTeam {
+ static function enum($where_clause) {
+ $db = BoincDb::get();
+ return $db->enum('badge_team', 'BoincBadgeTeam', $where_clause);
+ }
+ static function insert($clause) {
+ $db = BoincDb::get();
+ $ret = $db->insert('badge_team', $clause);
+ if (!$ret) return false;
+ return true;
+ }
+ static function lookup($clause) {
+ $db = BoincDb::get();
+ return $db->lookup('badge_team', 'BoincBadgeTeam', $clause);
+ }
+ static function update($clause) {
+ $db = BoincDb::get();
+ return $db->update_aux('badge_team', $clause);
+ }
+ static function delete($clause) {
+ $db = BoincDb::get();
+ $db->delete_aux('badge_team', $clause);
+ }
+ static function count($clause) {
+ $db = BoincDb::get();
+ return $db->count('badge_team', $clause);
+ }
+}
+
+
?>
diff --git a/html/inc/bossa_db.inc b/html/inc/bossa_db.inc
index cf5866c..bc48d6c 100644
--- a/html/inc/bossa_db.inc
+++ b/html/inc/bossa_db.inc
@@ -223,22 +223,15 @@ class BossaJobInst {
// first look for unfinished jobs previously assigned to this user
//
- $query = "select * from ".$db->db_name.".bossa_job_inst where app_id=$app->id and user_id=$user->id and finish_time=0 limit 1";
- $result = $db->do_query($query);
- if ($result) {
- $ji = mysql_fetch_object($result, 'BossaJobInst');
- mysql_free_result($result);
- if ($ji) return $ji;
- }
+ $job = $db->lookup("bossa_job_inst", "BossaJobInst",
+ "app_id=$app->id and user_id=$user->id and finish_time=0 limit 1"
+ );
+ if ($job) return $job;
if ($app->calibration_frac && drand() < $app->calibration_frac) {
- $query = "select * from ".$db->db_name.".bossa_job where app_id=$app->id and (select count(*) from ".$db->db_name.".bossa_job_inst where job_id=bossa_job.id and user_id=$user->id) = 0 and state=1 and calibration=1 order by priority_0 desc limit 1";
- $result = $db->do_query($query);
- if (!$result) return null;
- $job = mysql_fetch_object($result, 'BossaJob');
+ $job = $db->lookup("bossa_job", "BossaJob", "app_id=$app->id and (select count(*) from ".$db->db_name.".bossa_job_inst where job_id=bossa_job.id and user_id=$user->id) = 0 and state=1 and calibration=1 order by priority_0 desc limit 1");
if (!$job) return null;
$job->update("priority_0=priority_0-1");
- mysql_free_result($result);
} else {
if (isset($user->bossa->category)) {
$prio = "priority_".$user->bossa->category;
@@ -248,12 +241,8 @@ class BossaJobInst {
// skips jobs for which this user
// has already been assigned an instance
//
- $query = "select * from ".$db->db_name.".bossa_job where app_id=$app->id and (select count(*) from ".$db->db_name.".bossa_job_inst where job_id=bossa_job.id and user_id=$user->id) = 0 and state=1 and calibration=0 order by $prio desc limit 1";
- $result = $db->do_query($query);
- if (!$result) return null;
- $job = mysql_fetch_object($result, 'BossaJob');
+ $job = $db->lookup("bossa_job", "BossaJob", "app_id=$app->id and (select count(*) from ".$db->db_name.".bossa_job_inst where job_id=bossa_job.id and user_id=$user->id) = 0 and state=1 and calibration=0 order by $prio desc limit 1");
if (!$job) return null;
- mysql_free_result($result);
}
$now = time();
diff --git a/html/inc/cache.inc b/html/inc/cache.inc
index 4cd8c46..18ec3ab 100644
--- a/html/inc/cache.inc
+++ b/html/inc/cache.inc
@@ -126,22 +126,6 @@ function cache_need_to_regenerate($path, $max_age){
clearstatcache();
$lastmodified = @filemtime($path);
if ($lastmodified) {
-
- // Check to see if this is a conditional fetch.
- //
- $if_modified_since = isset($request['If-Modified-Since']) ?
- (explode(';',$request['If-Modified-Since'])) : false;
-
- if ($if_modified_since) {
- $if_modified_since=strtotime($if_modified_since[0]);
- }
-
- if ($if_modified_since && ($if_modified_since == $lastmodified)) {
- Header("Last-Modified: " . gmdate("D, d M Y H:i:s",$lastmodified) . " GMT");
- Header('HTTP/1.0 304 Not Modified');
- exit;
- }
-
// See if cached copy is too old.
// If so regenerate,
// and touch the cached copy so other processes
diff --git a/html/inc/common_defs.inc b/html/inc/common_defs.inc
index e1f3660..e192ca7 100644
--- a/html/inc/common_defs.inc
+++ b/html/inc/common_defs.inc
@@ -32,6 +32,7 @@ define('ANON_PLATFORM_NVIDIA', -3);
define('ANON_PLATFORM_ATI', -4);
define('ANON_PLATFORM_INTEL', -5);
+define('RESULT_SERVER_STATE_INACTIVE', 1);
define('RESULT_SERVER_STATE_UNSENT', 2);
define('RESULT_SERVER_STATE_IN_PROGRESS', 4);
define('RESULT_SERVER_STATE_OVER', 5);
@@ -52,6 +53,22 @@ define('VALIDATE_STATE_NO_CHECK', 3);
define('VALIDATE_STATE_INCONCLUSIVE',4);
define('VALIDATE_STATE_TOO_LATE', 5);
+define('WU_ERROR_COULDNT_SEND_RESULT', 1);
+define('WU_ERROR_TOO_MANY_ERROR_RESULTS', 2);
+define('WU_ERROR_TOO_MANY_SUCCESS_RESULTS', 4);
+define('WU_ERROR_TOO_MANY_TOTAL_RESULTS', 8);
+define('WU_ERROR_CANCELLED', 16);
+define('WU_ERROR_NO_CANONICAL_RESULT', 32);
+
+define('FILE_DELETE_INIT', 0);
+define('FILE_DELETE_READY', 1);
+define('FILE_DELETE_DONE', 2);
+define('FILE_DELETE_ERROR', 3);
+
+define('ASSIMILATE_INIT', 0);
+define('ASSIMILATE_READY', 1);
+define('ASSIMILATE_DONE', 2);
+
// from lib/common_defs.h
//
define('RESULT_NEW', 0);
@@ -63,4 +80,17 @@ define('RESULT_FILES_UPLOADED', 5);
define('RESULT_ABORTED', 6);
define('RESULT_UPLOAD_FAILED', 7);
+// from lib/error_numbers.h
+//
+define('ERR_XML_PARSE', -112);
+define('ERR_DB_NOT_FOUND', -136);
+define('ERR_DB_NOT_UNIQUE', -137);
+define('ERR_DB_CANT_CONNECT', -138);
+define('ERR_PROJECT_DOWN', -183);
+define('ERR_BAD_USER_NAME', -188);
+define('ERR_BAD_EMAIL_ADDR', -205);
+define('ERR_BAD_PASSWD', -206);
+define('ERR_ACCT_CREATION_DISABLED', -208);
+define('ERR_ATTACH_FAIL_INIT', -209);
+define('ERR_ATTACH_FAIL_DOWNLOAD', -210);
?>
diff --git a/html/inc/db.inc b/html/inc/db.inc
index b1a138d..f7a82fb 100644
--- a/html/inc/db.inc
+++ b/html/inc/db.inc
@@ -22,6 +22,9 @@ require_once('../inc/boinc_db.inc');
// database-related functions.
// Presentation code (HTML) shouldn't be here
+// DEPRECATED; use boinc_db.inc instead.
+// TODO: replace calls to these functions
+
function db_init_aux($try_replica=false) {
$config = get_config();
$user = parse_config($config, "<db_user>");
@@ -58,34 +61,6 @@ function db_init_aux($try_replica=false) {
return 0;
}
-function lookup_user_auth($auth) {
- $auth = BoincDb::escape_string($auth);
- return BoincUser::lookup("authenticator='$auth'");
-}
-
-function lookup_user_id($id) {
- return BoincUser::lookup_id($id);
-}
-
-function lookup_user_email_addr($email_addr) {
- $e = BoincDb::escape_string($email_addr);
- return BoincUser::lookup("email_addr='$e'");
-}
-
-function lookup_user_name($name) {
- // TODO: is the following double escaped? Why?
- $name = BoincDb::escape_string($name);
- $users = BoincUser::enum("name='".boinc_real_escape_string($name)."'");
- if (sizeof($users)==1) {
- return $users[0];
- }
- return null;
-}
-
-function lookup_host($id) {
- return BoincHost::lookup_id($id);
-}
-
function lookup_team($id) {
return BoincTeam::lookup_id($id);
}
diff --git a/html/inc/db_conn.inc b/html/inc/db_conn.inc
index f00f54a..7f32489 100644
--- a/html/inc/db_conn.inc
+++ b/html/inc/db_conn.inc
@@ -23,12 +23,26 @@
/// represents a connection to a database.
// Intended to be subclassed (e.g., BoincDb, BossaDb)
+if (class_exists("mysqli")) {
+ define("MYSQLI", true);
+} else {
+ define("MYSQLI", false);
+}
+
class DbConn {
var $db_conn;
var $db_name;
function init_conn($user, $passwd, $host, $name) {
- $this->db_conn = mysql_pconnect($host, $user, $passwd);
+ if (MYSQLI) {
+ if (version_compare(PHP_VERSION, '5.3.0') < 0) {
+ $this->db_conn = new mysqli($host, $user, $passwd);
+ } else {
+ $this->db_conn = new mysqli("p:".$host, $user, $passwd);
+ }
+ } else {
+ $this->db_conn = mysql_pconnect($host, $user, $passwd);
+ }
if (!$this->db_conn) {
return false;
}
@@ -36,15 +50,23 @@ class DbConn {
return true;
}
+ // in keeping with PHP/MySQL convention, return true (nonzero) on success.
+ // (This is the opposite of the BOINC convention)
+ //
function do_query($q) {
global $generating_xml;
+ $q = str_replace('DBNAME', $this->db_name, $q);
//echo "query: $q<br>\n";
- $ret = mysql_query($q, $this->db_conn);
+ if (MYSQLI) {
+ $ret = $this->db_conn->query($q);
+ } else {
+ $ret = mysql_query($q, $this->db_conn);
+ }
if (!$ret) {
if (!$generating_xml) {
echo "Database Error<br>\n";
}
- //echo ": ", mysql_error(), "\n<pre>";
+ //echo ": ", $this->base_error(), "\n<pre>";
//var_dump(debug_backtrace());
//echo "</pre>query: $q\n";
return null;
@@ -52,30 +74,34 @@ class DbConn {
return $ret;
}
+ // # rows affected by last query
+ //
function affected_rows() {
- return mysql_affected_rows($this->db_conn);
+ if (MYSQLI) {
+ $this->db_conn->affected_rows;
+ } else {
+ return mysql_affected_rows($this->db_conn);
+ }
}
function lookup_fields($table, $classname, $fields, $clause) {
- $query = "select $fields from ".$this->db_name.".$table where $clause";
+ $query = "select $fields from DBNAME.$table where $clause";
$result = $this->do_query($query);
if (!$result) {
return null;
}
- $obj = mysql_fetch_object($result, $classname);
- mysql_free_result($result);
+ if (MYSQLI) {
+ $obj = $result->fetch_object($classname);
+ $result->free();
+ } else {
+ $obj = mysql_fetch_object($result, $classname);
+ mysql_free_result($result);
+ }
return $obj;
}
function lookup($table, $classname, $clause) {
- $query = "select * from ".$this->db_name.".$table where $clause";
- $result = $this->do_query($query);
- if (!$result) {
- return null;
- }
- $obj = mysql_fetch_object($result, $classname);
- mysql_free_result($result);
- return $obj;
+ return $this->lookup_fields($table, $classname, "*", $clause);
}
function lookup_id($id, $table, $classname) {
@@ -86,10 +112,17 @@ class DbConn {
$result = $this->do_query($query);
if (!$result) return null;
$x = array();
- while ($obj = mysql_fetch_object($result, $classname)) {
- $x[] = $obj;
+ if (MYSQLI) {
+ while ($obj = $result->fetch_object($classname)) {
+ $x[] = $obj;
+ }
+ $result->free();
+ } else {
+ while ($obj = mysql_fetch_object($result, $classname)) {
+ $x[] = $obj;
+ }
+ mysql_free_result($result);
}
- mysql_free_result($result);
return $x;
}
@@ -100,16 +133,10 @@ class DbConn {
if ($where_clause) {
$where_clause = "where $where_clause";
}
- $query = "select $fields from ".$this->db_name.".$table $where_clause $order_clause";
- $result = $this->do_query($query);
- if (!$result) return null;
- $x = array();
- while ($obj = mysql_fetch_object($result, $classname)) {
- $x[] = $obj;
- }
- mysql_free_result($result);
- return $x;
+ $query = "select $fields from DBNAME.$table $where_clause $order_clause";
+ return $this->enum_general($classname,$query);
}
+
function enum($table, $classname, $where_clause=null, $order_clause=null) {
return self::enum_fields(
$table, $classname, '*', $where_clause, $order_clause
@@ -117,66 +144,102 @@ class DbConn {
}
function update($obj, $table, $clause) {
- $query = "update ".$this->db_name.".$table set $clause where id=$obj->id";
+ $query = "update DBNAME.$table set $clause where id=$obj->id";
return $this->do_query($query);
}
function update_aux($table, $clause) {
- $query = "update ".$this->db_name.".$table set $clause";
+ $query = "update DBNAME.$table set $clause";
return $this->do_query($query);
}
function insert($table, $clause) {
- $query = "insert into ".$this->db_name.".$table $clause";
+ $query = "insert into DBNAME.$table $clause";
return $this->do_query($query);
}
function delete($obj, $table) {
- $query = "delete from ".$this->db_name.".$table where id=$obj->id";
+ $query = "delete from DBNAME.$table where id=$obj->id";
return $this->do_query($query);
}
function delete_aux($table, $clause) {
- $query = "delete from ".$this->db_name.".$table where $clause";
+ $query = "delete from DBNAME.$table where $clause";
return $this->do_query($query);
}
function insert_id() {
- return mysql_insert_id($this->db_conn);
+ if (MYSQLI) {
+ return $this->db_conn->insert_id;
+ } else {
+ return mysql_insert_id($this->db_conn);
+ }
}
- function count($table, $clause) {
- $query = "select count(*) as total from ".$this->db_name.".$table where $clause";
+ function get_int($query, $field) {
$result = $this->do_query($query);
- $cnt = mysql_fetch_object($result);
- mysql_free_result($result);
- if ($cnt) return $cnt->total;
- return null;
+ if (MYSQLI) {
+ $x = $result->fetch_object("StdClass");
+ $result->free();
+ } else {
+ $x = mysql_fetch_object($result);
+ mysql_free_result($result);
+ }
+ if ($x) return $x->$field;
+ return false;
}
- function sum($table, $field, $clause="") {
- $query = "select sum($field) as total from ".$this->db_name.".$table $clause";
+ function get_double($query, $field) {
$result = $this->do_query($query);
- $cnt = mysql_fetch_object($result);
- mysql_free_result($result);
- if ($cnt) return (double)$cnt->total;
- return null;
+ if (MYSQLI) {
+ $x = $result->fetch_object("StdClass");
+ $result->free();
+ } else {
+ $x = mysql_fetch_object($result);
+ mysql_free_result($result);
+ }
+ if ($x) return (double)$x->$field;
+ return false;
+ }
+ function count($table, $clause="TRUE") {
+ $query = "select count(*) as total from DBNAME.$table where $clause";
+ return $this->get_int($query, 'total');
+ }
+ function sum($table, $field, $clause="") {
+ $query = "select sum($field) as total from DBNAME.$table $clause";
+ return $this->get_double($query, 'total');
}
function max($table, $field, $clause="") {
- $query = "select max($field) as total from ".$this->db_name.".$table $clause";
- $result = $this->do_query($query);
- $cnt = mysql_fetch_object($result);
- mysql_free_result($result);
- if ($cnt) return (double)$cnt->total;
- return null;
+ $query = "select max($field) as total from DBNAME.$table $clause";
+ return $this->get_double($query, 'total');
+ }
+ function percentile($table, $field, $clause, $pct) {
+ $n = $this->count($table, $clause);
+ if (!$n) return false;
+ $m = (int)($n*$pct/100);
+ $query = "select $field from DBNAME.$table where $clause order by $field limit $m,1";
+ return $this->get_double($query, $field);
}
function replace($table, $clause) {
- $query = "replace into ".$this->db_name.".$table set $clause";
+ $query = "replace into DBNAME.$table set $clause";
return $this->do_query($query);
}
function base_escape_string($string) {
- return mysql_real_escape_string($string);
+ if (MYSQLI) {
+ return $this->db_conn->escape_string($string);
+ } else {
+ return mysql_real_escape_string($string);
+ }
}
function base_error() {
- return mysql_error($this->db_conn);
+ if (MYSQLI) {
+ return $this->db_conn->error;
+ } else {
+ return mysql_error($this->db_conn);
+ }
}
function table_exists($table_name) {
- $result = $this->do_query("show tables from ".$this->db_name." like '$table_name'");
- $t = mysql_fetch_array($result);
- mysql_free_result($result);
+ $result = $this->do_query("show tables from DBNAME like '$table_name'");
+ if (MYSQLI) {
+ $t = $result->fetch_array();
+ $result->free();
+ } else {
+ $t = mysql_fetch_array($result);
+ mysql_free_result($result);
+ }
if ($t[0] == "$table_name") return true;
return false;
}
diff --git a/html/inc/db_ops.inc b/html/inc/db_ops.inc
index cc8337a..9ff7b92 100644
--- a/html/inc/db_ops.inc
+++ b/html/inc/db_ops.inc
@@ -16,6 +16,8 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+// TODO: most of this code shouldn't exist.
+
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
@@ -23,7 +25,7 @@ ini_set('display_startup_errors', true);
require_once("../inc/result.inc");
class BoincAssignment {
- static function enum($where_clause) {
+ static function enum($where_clause = null) {
$db = BoincDb::get();
return $db->enum('assignment', 'BoincAssignment', $where_clause);
}
@@ -578,7 +580,7 @@ function server_state_select() {
<select name=\"server_state\">
<option value=\"CHOOSE_ALL\" selected=\"selected\"> Any </option>
";
- for($i=1; $i<6; $i++) {
+ for ($i=1; $i<6; $i++) {
$res = new StdClass;
$res->server_state=$i;
echo "<option value=\"$i\"> "."[$i] ".' '.result_server_state_string($res)."</option>\n";
@@ -591,7 +593,7 @@ function outcome_select() {
<select name=\"outcome\">
<option value=\"CHOOSE_ALL\" selected=\"selected\"> Any </option>
";
- for($i=0; $i<8; $i++) {
+ for ($i=0; $i<8; $i++) {
$res = new StdClass;
$res->outcome = $i;
$res->exit_status = 0;
@@ -605,11 +607,11 @@ function validate_state_select() {
<select name=\"validate_state\">
<option value=\"CHOOSE_ALL\" selected=\"selected\"> Any </option>
";
- for($i=0; $i<NVALIDATE_STATES; $i++) {
+ for ($vs=0; $vs<NVALIDATE_STATES; $vs++) {
$res = new StdClass;
$res->validate_state = $vs;
$res->exit_status = 0;
- echo "<option value=\"$i\"> "."[$i] ".' '.validate_state_str($res)."</option>\n";
+ echo "<option value=\"$vs\"> "."[$vs] ".' '.validate_state_str($res)."</option>\n";
}
echo "</select>\n";
}
@@ -619,7 +621,7 @@ function client_state_select() {
<select name=\"client_state\">
<option value=\"CHOOSE_ALL\" selected=\"selected\"> Any </option>
";
- for($i=0; $i<7; $i++) {
+ for ($i=0; $i<7; $i++) {
$res = new StdClass;
$res->client_state = $i;
$res->exit_status = 0;
@@ -651,7 +653,8 @@ function sort_order_select() {
<select name=\"sort_by_order\">
<option value=\"asc\">Ascending
<option value=\"desc\" selected>Descending
- </select>\n";
+ </select>
+ ";
}
function table_title($table) {
@@ -750,9 +753,10 @@ function show_host_short($host) {
<tr>
<td><a href=\"db_action.php?table=host&id=$host->id\">$host->id</a></td>
<td>$host->last_ip_addr</td>
- <td>$host->domain_name</td>";
- printf("<td>%.2f</td>", $host->expavg_credit);
- printf("<td>%.1f</td>", $host->total_credit);
+ <td>$host->domain_name</td>
+ ";
+ printf("<td>%.2f</td>", $host->expavg_credit);
+ printf("<td>%.1f</td>", $host->total_credit);
echo "<td>$host->p_vendor $host->p_model</td>
<td>$host->os_name $host->os_version</td>
</tr>
@@ -943,7 +947,7 @@ function show_workunit_short($wu) {
}
function host_user_link($hostid) {
- if (!$hostid) return '----';
+ if (!$hostid) return '---';
$h = "<a href=\"db_action.php?table=host&id=$hostid\">$hostid</a>";
$result = mysql_query("select userid from host where id='$hostid' limit 1");
@@ -960,8 +964,8 @@ function host_user_link($hostid) {
function validate_color($validate_state) {
switch ($validate_state) {
- case 1: return '33cc33'; // valid, green
- case 2: return 'ffa500'; // invalid result, orange
+ case 1: return '33cc33'; // valid, green
+ case 2: return 'ffa500'; // invalid result, orange
}
return '';
}
@@ -1000,7 +1004,7 @@ function show_result_ops($result) {
row("Server state", result_server_state_string($result)." [$result->server_state]");
row("Outcome", result_outcome_string($result)." [$result->outcome]");
row("Client state", result_client_state_string($result)." [$result->client_state]");
- row("Exit status", exit_status_string($result));
+ row("Exit status", exit_status_string($result->exit_status));
row("Host ID", "<a href=\"db_action.php?table=host&id=$result->hostid\">" . host_name_by_id($result->hostid) . "</a> [$result->hostid]");
row("User ID", "<a href=\"db_action.php?table=user&id=$result->userid\">" . user_name_by_id($result->userid) . "</a> [$result->userid]");
row("CPU time", $result->cpu_time);
@@ -1011,10 +1015,15 @@ function show_result_ops($result) {
row("Batch", $result->batch);
row("File delete state", file_delete_state_str($result->file_delete_state)." [$result->file_delete_state]");
row("Validate state", validate_state_str($result)." [$result->validate_state]");
- row("claimed credit", $result->claimed_credit);
row("Granted credit", $result->granted_credit);
row("Application", "<a href=\"db_action.php?table=app&id=$result->appid\">".app_name_by_id($result->appid)."</a>");
- row("App version", "<a href=\"db_action.php?table=app_version&appid=$result->appid&clauses=version_num%3D$result->app_version_num\">".$result->app_version_num."</a>");
+ if ($result->app_version_id > 0) {
+ $x1 = "<a href=\"db_action.php?table=app_version&id=$result->app_version_id\">";
+ $x2 = "</a>";
+ } else {
+ $x1 = $x2 = "";
+ }
+ row("App version", $x1.app_version_string($result).$x2);
row("App version ID", $result->app_version_id);
row("Estimated GFLOPS", number_format($result->flops_estimate/1e9, 2));
row("Random",$result->random);
@@ -1048,7 +1057,6 @@ function result_short_header() {
<th>app<br>ver</th>
<th>received <br><i>or</i> <font color=\"#ff3333\">dead</font><font color=\"#33cc33\">line</font> <br><i>or</i> <font color=\"#9900cc\">created</font></th>
<th>CPU<br>hours</th>
- <th>claimed<br>credit</th>
<th>granted<br>credit</th>
</tr>
";
@@ -1063,9 +1071,9 @@ function show_result_short($result) {
$cs = result_client_state_string($result);
$oc = "$oc ($cs)";
}
- if ($result->received_time)
+ if ($result->received_time) {
$received = time_str($result->received_time);
- else {
+ } else {
// result has not been received yet, so show report deadline either
// in green if in the future or in red if in the past.
$timenow=time();
@@ -1080,16 +1088,11 @@ function show_result_short($result) {
$received = "<font color=\"#ff3333\">". time_str($result->report_deadline) . "</font>";
}
}
- $version = sprintf("%.2f", $result->app_version_num/100);
- $av = BoincAppVersion::lookup_id($result->app_version_id);
- if ($av) {
- $version .= " [$av->plan_class]";
- }
+ $version = app_version_string($result);
$outcome_color = outcome_color($result->outcome);
$validate_color = validate_color($result->validate_state);
$host_user = host_user_link($result->hostid);
$cpu_hours = sprintf("%.1f",$result->cpu_time / 3600);
- $claimed_credit = credit_str($result->claimed_credit);
$granted_credit = "<a href=credit.php?resultid=$result->id>".credit_str($result->granted_credit)."</a>";
$delete_state = file_delete_state_str($result->file_delete_state);
@@ -1102,12 +1105,11 @@ function show_result_short($result) {
<td>$cs2</td>
<td bgcolor=$validate_color>$vs</td>
<td>$delete_state</td>
- <td>", exit_status_string($result), "</td>
+ <td>", exit_status_string($result->exit_status), "</td>
<td>$host_user</td>
<td>$version</td>
<td>$received</td>
<td>$cpu_hours</td>
- <td>$claimed_credit</td>
<td>$granted_credit</td>
</tr>
";
@@ -1167,10 +1169,12 @@ function show_user_summary($maxuser) {
<td><h2>top10 Poster</h2></td>
<td><h2>top$maxuser Countries</h2></td>
<td><h2>top$maxuser Languages</h2></td>
- </tr>";
+ </tr>
+ ";
echo "<tr valign=\"top\">";
echo "<td><table border=\"1\">
- <tr><th> </th><th> </th></tr>";
+ <tr><th> </th><th> </th></tr>
+ ";
row2_plain("Users:", $stats['maxuser']);
row2_plain("Profiles:", $stats['profuser']);
row2_plain("Team members:", $stats['teamuser']);
@@ -1178,8 +1182,7 @@ function show_user_summary($maxuser) {
echo "<td><table border=\"2\">\n";
echo "<tr><th>User</th><th># posts</th></tr>\n";
for ($p=1; $p<=10; $p++) {
- row2_plain(user_links_ops($top10poster[$p]),
- $top10poster[$p]->posts);
+ row2_plain(user_links_ops($top10poster[$p]), $top10poster[$p]->posts);
}
echo "</table></td>";
echo "<td><table border=\"2\">\n";
@@ -1236,6 +1239,7 @@ function team_name_by_id($teamid) {
function user_name_by_id($user_id) {
$result = mysql_query("select * from user where id = $user_id");
$user = mysql_fetch_object($result);
+ if (!$user) return "No user";
return $user->name;
}
@@ -1248,6 +1252,7 @@ function app_name_by_id($appid) {
function wu_name_by_id($workunitid) {
$result = mysql_query("select * from workunit where id = $workunitid");
$wu = mysql_fetch_object($result);
+ if (!$wu) return "Missing workunit";
return $wu->name;
}
@@ -1260,6 +1265,7 @@ function platform_name_by_id($platformid) {
function host_name_by_id($hostid) {
$result = mysql_query("select * from host where id = $hostid");
$host = mysql_fetch_object($result);
+ if (!$host) return "No host";
if (!strlen($host->domain_name) && !strlen($host->last_ip_addr)) {
return "(blank)";
} else {
diff --git a/html/inc/email.inc b/html/inc/email.inc
index 6189393..becc511 100644
--- a/html/inc/email.inc
+++ b/html/inc/email.inc
@@ -25,24 +25,12 @@ require_once("../project/project.inc");
$config = get_config();
$master_url = parse_config($config, "<master_url>");
-// Determine if phpmailer is installed and to be used (defined in project.inc)
-if (isset($USE_PHPMAILER)) {
- if ($USE_PHPMAILER) {
- require_once("../inc/phpmailer/class.phpmailer.php");
- }
-} else {
- $USE_PHPMAILER = false;
-}
-
// send an email, using PHPMailer or not.
//
function send_email($user, $subject, $body, $body_html=null) {
- global $USE_PHPMAILER;
- global $PHPMAILER_HOST;
- global $PHPMAILER_MAILER;
-
- if ($USE_PHPMAILER) {
- $mail = new PHPMailer();
+ if (function_exists("make_php_mailer")) {
+ require_once("../inc/phpmailer/class.phpmailer.php");
+ $mail = make_php_mailer();
$mail->AddAddress($user->email_addr, $user->name);
$mail->Subject = $subject;
if ($body_html) {
@@ -51,10 +39,6 @@ function send_email($user, $subject, $body, $body_html=null) {
} else {
$mail->Body = $body;
}
- $mail->From = EMAIL_FROM;
- $mail->FromName = EMAIL_FROM_NAME;
- $mail->Host = $PHPMAILER_HOST;
- $mail->Mailer = $PHPMAILER_MAILER;
if (!$mail->Send()) {
echo $mail->ErrorInfo;
return false;
diff --git a/html/inc/forum.inc b/html/inc/forum.inc
index c1ecff8..ddb3e22 100644
--- a/html/inc/forum.inc
+++ b/html/inc/forum.inc
@@ -114,7 +114,7 @@ function show_forum_header($user) {
echo "<table cellpadding=\"5\" width=\"100%\" class=\"forum_header\">";
echo "<tr>
";
-
+
// Search
echo "
<td>
@@ -126,7 +126,7 @@ function show_forum_header($user) {
<span class=\"smalltext\"><a href=\"forum_search.php\">".tra("Advanced search")."</a></span>
</td>
";
-
+
if ($user) {
echo "<td align=\"right\">\n";
echo "<p>".tra("Private messages").": ", pm_notification($user);
@@ -507,6 +507,9 @@ function show_post(
$tokens = "";
$options = get_output_options($logged_in_user);
+ if (is_admin($user)) {
+ $options->htmlitems = false;
+ }
// check whether the poster is on the list of people to ignore
//
@@ -701,7 +704,7 @@ function show_post_and_context($post, $thread, $forum, $options, $n) {
$content = output_transform($post->content, $options);
$when = time_diff_str($post->timestamp, time());
- $user = lookup_user_id($post->user);
+ $user = BoincUser::lookup_id($post->user);
$title = cleanup_title($thread->title);
$m = $n%2;
if ($post->hidden) {
@@ -800,7 +803,7 @@ function notify_subscriber($thread, $user) {
//
function create_post($content, $parent_id, $user, $forum, $thread, $signature) {
$content = substr($content, 0, 64000);
- $content = mysql_real_escape_string($content);
+ $content = BoincDb::escape_string($content);
$now = time();
$sig = $signature?1:0;
$id = BoincPost::insert("(thread, user, timestamp, content, parent_post, signature) values ($thread->id, $user->id, $now, '$content', $parent_id, $sig)");
@@ -844,7 +847,7 @@ function update_forum_timestamp($forum) {
function create_thread($title, $content, $user, $forum, $signature, $export) {
$title = trim($title);
$title = sanitize_tags($title);
- $title = mysql_real_escape_string($title);
+ $title = BoincDb::escape_string($title);
$now = time();
$status = 0;
if (is_news_forum($forum) && !$export) {
@@ -886,11 +889,24 @@ function delete_post($post, $thread, $forum) {
}
$count = BoincPost::count("thread=$thread->id");
if ($count == 0) {
- $forum->update("threads=threads-1");
+ if (!$thread->hidden) {
+ $forum->update("threads=threads-1");
+ }
$thread->delete();
} else {
update_thread_timestamp($thread);
}
+ return true;
+}
+
+function delete_thread($thread, $forum) {
+ $nposts = BoincPost::count("thread=$thread->id and hidden=0");
+ $forum->update("posts=posts-$nposts");
+ BoincPost::delete_aux("thread=$thread->id");
+ if (!$thread->hidden) {
+ $forum->update("threads=threads-1");
+ }
+ $thread->delete();
}
// delete all forum records related to user
@@ -909,7 +925,7 @@ function forum_delete_user($user) {
BoincSubscription::delete($s->userid, $s->threadid);
}
$p = BoincForumPrefs::lookup_userid($user->id);
- $p->delete();
+ if ($p) $p->delete();
}
function move_post($post, $old_thread, $old_forum, $new_thread, $new_forum) {
@@ -1043,7 +1059,8 @@ function get_thread_posts($threadid, $sort_style, $show_hidden) {
return BoincPost::enum($sql);
}
-// Show the links for possible moderation actions related to a single post
+// Show links for post moderation actions;
+// logged in user has moderation rights.
//
function show_post_moderation_links(
$config, $logged_in_user, $post, $forum, $tokens
@@ -1063,10 +1080,10 @@ function show_post_moderation_links(
);
if ($forum->parent_type == 0) {
- if ($logged_in_user->prefs->privilege(S_ADMIN) || ($logged_in_user->prefs->privilege(S_MODERATOR) && $moderators_allowed_to_ban)) {
+ if (is_admin($logged_in_user) || $moderators_allowed_to_ban) {
show_button("forum_moderate_post.php?action=banish_user&id=".$post->id."&userid=".$post->user."$tokens", tra("Banish author"));
}
- if ($logged_in_user->prefs->privilege(S_MODERATOR) && $moderators_vote_to_ban) {
+ if ($moderators_vote_to_ban) {
require_once("../inc/forum_banishment_vote.inc");
if (vote_is_in_progress($post->user)) {
show_button(
@@ -1084,19 +1101,29 @@ function show_post_moderation_links(
);
}
}
+ if (is_admin($logged_in_user)) {
+ show_button("forum_moderate_post.php?action=delete&id=".$post->id."$tokens", tra("Delete"), tra("Delete this post"));
+ }
}
}
+// is the given user allowed to
+// - add threads to News forum
+// - use HTML in posts
+// - delete threads and posts
+//
+function is_admin($user) {
+ if (!$user) return false;
+ if ($user->prefs->privilege(S_SCIENTIST)) return true;
+ if ($user->prefs->privilege(S_DEV)) return true;
+ if ($user->prefs->privilege(S_ADMIN)) return true;
+ return false;
+}
+
function user_can_create_thread($user, $forum) {
if (!$user) return false;
- if ($forum->is_dev_blog){
- if (
- (!$user->prefs->privilege(S_SCIENTIST)) &&
- (!$user->prefs->privilege(S_DEV)) &&
- (!$user->prefs->privilege(S_ADMIN))
- ) {
- return false;
- }
+ if ($forum->is_dev_blog && !is_admin($user)) {
+ return false;
}
return true;
}
@@ -1149,6 +1176,12 @@ function check_reply_access($user, $forum, $thread) {
check_post_access($user, $forum);
}
+// is the given user allowed to moderate the given forum? this includes
+// - post to locked threads
+// - see hidden threads and posts
+// - edit their posts at any time
+// - hide/unhide/move threads and posts
+
function is_moderator($user, $forum) {
if (!$user) return false;
$type = $forum?$forum->parent_type:0;
diff --git a/html/inc/forum_db.inc b/html/inc/forum_db.inc
index c63c4a7..0ebaa02 100644
--- a/html/inc/forum_db.inc
+++ b/html/inc/forum_db.inc
@@ -126,6 +126,10 @@ class BoincPost {
$db = BoincDb::get();
return $db->delete($this, 'post');
}
+ static function delete_aux($clause) {
+ $db = BoincDb::get();
+ return $db->delete_aux('post', $clause);
+ }
}
class BoincForumPrefs {
@@ -190,26 +194,27 @@ class BoincForumLogging {
}
self::$cache[$threadid] = $x;
}
- static function cleanup() {
- // TODO - clean this up
-
+ static function delete_aux($clause) {
$db = BoincDb::get();
- $sql = "SELECT timestamp FROM ".$db->db_name.".forum_logging where userid=0 and threadid=0";
- $result=$db->do_query($sql);
- if (mysql_num_rows($result)>0) {
- $data=mysql_fetch_object($result);
- if ($data->timestamp<time()-MAX_FORUM_LOGGING_TIME){
- $sql = "DELETE FROM ".$db->db_name.".forum_logging where timestamp<'".(time()-MAX_FORUM_LOGGING_TIME)."' and userid != 0";
- $db->do_query($sql);
- echo mysql_error();
- $sql = "REPLACE INTO ".$db->db_name.".forum_logging set userid=0, threadid=0, timestamp='".time()."'";
- $db->do_query($sql);
+ return $db->delete_aux('forum_logging', $clause);
+ }
+ static function cleanup() {
+ // Every 28 days, delete records older than 28 days.
+ // Keep track of the last time we did this in a special record
+ // with userid = threadid = 0.
+ // This gets called from forum_index.php
+ // (i.e. each time the forum main page is loaded).
+ //
+ $fl = BoincForumLogging::lookup(0, 0);
+ if ($fl) {
+ if ($fl->timestamp<time()-MAX_FORUM_LOGGING_TIME){
+ BoincForumLogging::delete_aux("timestamp<'".(time()-MAX_FORUM_LOGGING_TIME)."' and userid != 0");
+ BoincForumLogging::replace(0, 0, time());
}
} else {
- //No cleanup timestamp found, make one:
- $sql = "INSERT INTO ".$db->db_name.".forum_logging set userid=0, threadid=0, timestamp=0";
- $db->do_query($sql);
- echo mysql_error();
+ // No cleanup timestamp found, make one
+ //
+ BoincForumLogging::replace(0, 0, 0);
}
}
}
@@ -295,7 +300,7 @@ class BoincNotify {
$db = BoincDb::get();
return $db->delete($this, 'notify');
}
- function delete_aux($clause) {
+ static function delete_aux($clause) {
$db = BoincDb::get();
$db->delete_aux('notify', $clause);
}
diff --git a/html/inc/forum_rss.inc b/html/inc/forum_rss.inc
index 95b01c4..b769645 100644
--- a/html/inc/forum_rss.inc
+++ b/html/inc/forum_rss.inc
@@ -22,7 +22,16 @@ require_once("../inc/util.inc");
require_once("../inc/text_transform.inc");
require_once("../project/project.inc");
-function show_forum_rss_item($thread, $userid, $threads_only, $truncate) {
+// return true if the given HTML may contain images or video
+//
+function contains_image_or_video($x) {
+ if (strstr($x, "<img ")) return true;
+ if (strstr($x, "<object ")) return true;
+ if (strstr($x, "<iframe ")) return true;
+ return false;
+}
+
+function show_forum_rss_item($thread, $userid, $threads_only, $no_images) {
$unique_url=URL_BASE."forum_thread.php?id=".$thread->id;
$clause2 = " and hidden=0 ";
@@ -35,13 +44,14 @@ function show_forum_rss_item($thread, $userid, $threads_only, $truncate) {
if (!count($posts)) return;
$post = $posts[0];
$post_date = gmdate('D, d M Y H:i:s',$post->timestamp).' GMT';
- $t = bb2html($post->content, true);
- if ($truncate) {
- if (strlen($post->content) > 256) {
- $t = substr($post->content, 0, 256).". . .";
- }
+ $post_user = BOincUser::lookup_id($post->user);
+ BoincForumPrefs::lookup($post_user);
+ $options = new output_options();
+ if (is_admin($post_user)) {
+ $options->htmlitems = false;
}
- //$t = htmlspecialchars($t);
+ $t = output_transform($post->content, $options);
+ if ($no_images && contains_image_or_video($t)) return;
echo "<item>
<title><![CDATA[".sanitize_tags(bb2html($thread->title))."]]></title>
<link>$unique_url</link>
@@ -52,7 +62,7 @@ function show_forum_rss_item($thread, $userid, $threads_only, $truncate) {
";
}
-function forum_rss($forumid, $userid, $truncate, $threads_only, $ndays) {
+function forum_rss($forumid, $userid, $threads_only, $ndays) {
$clause = "forum=$forumid ";
if ($userid) {
@@ -82,6 +92,8 @@ function forum_rss($forumid, $userid, $truncate, $threads_only, $ndays) {
$last_mod_time = $threads_only?$t->create_time:$t->timestamp;
$create_date = gmdate('D, d M Y H:i:s', $last_mod_time) . ' GMT';
header ("Last-Modified: " . $create_date);
+ } else {
+ $create_date = gmdate('D, d M Y H:i:s') . ' GMT';
}
header ("Content-Type: application/xml");
@@ -109,10 +121,8 @@ function forum_rss($forumid, $userid, $truncate, $threads_only, $ndays) {
</image>
";
- // write news items
- //
foreach ($threads as $thread) {
- show_forum_rss_item($thread, $userid, $threads_only, $truncate);
+ show_forum_rss_item($thread, $userid, $threads_only, false);
}
echo "
diff --git a/html/inc/host.inc b/html/inc/host.inc
index f53414f..610973b 100644
--- a/html/inc/host.inc
+++ b/html/inc/host.inc
@@ -44,7 +44,7 @@ function sched_log_link($x) {
function location_form($host) {
$none = "selected";
- $h=$w=$s="";
+ $h=$w=$s=$m="";
if ($host->venue == "home") $h = "selected";
if ($host->venue == "work") $w = "selected";
if ($host->venue == "school") $s = "selected";
@@ -99,7 +99,7 @@ function show_host($host, $user, $ipprivate) {
if ($x >= 0) $x="+$x";
row2(tra("Local Standard Time"), tra("UTC %1 hours", $x));
} else {
- $owner = lookup_user_id($host->userid);
+ $owner = BoincUser::lookup_id($host->userid);
if ($owner && $owner->show_hosts) {
row2(tra("Owner"), user_links($owner));
} else {
@@ -123,23 +123,23 @@ function show_host($host, $user, $ipprivate) {
if ($v) {
row2(tra("BOINC version"), $v);
}
- $x = $host->m_nbytes/(1024*1024);
+ $x = $host->m_nbytes/MEGA;
$y = round($x, 2);
row2(tra("Memory"), tra("%1 MB", $y));
if ($host->m_cache > 0) {
- $x = $host->m_cache/1024;
+ $x = $host->m_cache/KILO;
$y = round($x, 2);
row2(tra("Cache"), tra("%1 KB", $y));
}
if ($user) {
- $x = $host->m_swap/(1024*1024);
+ $x = $host->m_swap/MEGA;
$y = round($x, 2);
row2(tra("Swap space"), tra("%1 MB", $y));
- $x = $host->d_total/(1024*1024*1024);
+ $x = $host->d_total/GIGA;
$y = round($x, 2);
row2(tra("Total disk space"), tra("%1 GB", $y));
- $x = $host->d_free/(1024*1024*1024);
+ $x = $host->d_free/GIGA;
$y = round($x, 2);
row2(tra("Free Disk Space"), tra("%1 GB", $y));
}
@@ -149,14 +149,14 @@ function show_host($host, $user, $ipprivate) {
$x = $host->p_iops/(1000*1000);
$y = round($x, 2);
row2(tra("Measured integer speed"), tra("%1 million ops/sec", $y));
- $x = $host->n_bwup/(1024);
+ $x = $host->n_bwup/KILO;
$y = round($x, 2);
if ($y > 0) {
row2(tra("Average upload rate"), tra("%1 KB/sec", $y));
} else {
row2(tra("Average upload rate"), tra("Unknown"));
}
- $x = $host->n_bwdown/(1024);
+ $x = $host->n_bwdown/KILO;
$y = round($x, 2);
if ($y > 0) {
row2(tra("Average download rate"), tra("%1 KB/sec", $y));
@@ -182,11 +182,12 @@ function show_host($host, $user, $ipprivate) {
if ($user) {
row2(tra("Number of times client has contacted server"), $host->rpc_seqno);
row2(tra("Last time contacted server"), sched_log_link($host->rpc_time));
- row2(tra("% of time BOINC is running"), 100*$host->on_frac." %");
+ row2(tra("% of time BOINC is running"), number_format(100*$host->on_frac, 2)."%");
if ($host->connected_frac > 0) {
- row2(tra("While BOINC running, % of time host has an Internet connection"), 100*$host->connected_frac." %");
+ row2(tra("While BOINC running, % of time host has an Internet connection"), number_format(100*$host->connected_frac, 2)."%");
}
- row2(tra("While BOINC running, % of time work is allowed"), 100*$host->active_frac." %");
+ row2(tra("While BOINC running, % of time work is allowed"), number_format(100*$host->active_frac, 2)."%");
+ row2(tra("While BOINC running, % of time GPU work is allowed"), number_format(100*$host->gpu_active_frac, 2)."%");
if ($host->cpu_efficiency) {
row2(tra("Average CPU efficiency"), $host->cpu_efficiency);
}
@@ -288,7 +289,7 @@ function gpu_desc($x) {
$i = (int)$d[5];
$maj = (int)($i/100);
$min = $i%100;
- $str .= sprintf(" OpenCL: %d.%02d", $maj, $min);
+ $str .= sprintf(" OpenCL: %d.%d", $maj, $min);
}
}
}
diff --git a/html/inc/language_names.inc b/html/inc/language_names.inc
index 60c039e..5cdb868 100644
--- a/html/inc/language_names.inc
+++ b/html/inc/language_names.inc
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2013 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -17,41 +17,80 @@
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
$language_names = array(
- array("ar", "العربية", "Arabic"),
- array("be", "Беларускі", "Belarusian"),
- array("bg", "Български", "Bulgarian"),
- array("ca", "Català", "Catalan"),
- array("cs", "Čeština ", "Czech"),
- array("cy", "Cymraeg", "Welsh"),
- array("da", "Dansk", "Danish"),
- array("de", "Deutsch ", "German"),
- array("el", "Ελληνικά", "Greek"),
- array("en", "English", "English"),
- array("es", "Español", "Spanish"),
- array("sa", "فارسی", "Persian"),
- array("fi", "Suomi", "Finnish"),
- array("fr", "Français", "French"),
- array("gl", "Galego", "Galician"),
- array("he", "עִבְרִית", "Hebrew"),
- array("hr", "Hrvatski", "Croatian"),
- array("hu", "Magyar", "Hungarian"),
- array("it", "Italiano", "Italian"),
- array("ja", "日本語", "Japanese"),
- array("ko", "한국어", "Korean"),
- array("lt", "Lietuvių", "Lithuanian"),
- array("lv", "Latviešu", "Latvian"),
- array("nl", "Nederlands", "Dutch"),
- array("pl", "Polski", "Polish"),
- array("pt_BR", "Português - Brasil", "Portuguese - Brazil"),
- array("pt_PT", "Português", "Portuguese"),
- array("ro", "Română", "Romanian"),
- array("ru", "Русский", "Russian"),
- array("sk", "Slovenčina", "Slovakian"),
- array("sl", "Slovenščina", "Slovenian"),
- array("sv", "Svenska", "Swedish"),
- array("tr", "Türkçe", "Turkish"),
- array("zh_CN", "简体中文", "Chinese"),
- array("zh_TW", "繁體中文", "Chinese (Taiwan)"),
+ array("ar", "العربية", "Arabic"),
+ array("be", "Беларускі", "Belarusian"),
+ array("bg", "Български", "Bulgarian"),
+ array("ca", "Català", "Catalan"),
+ array("cs", "Čeština ", "Czech"),
+ array("cy", "Cymraeg", "Welsh"),
+ array("da", "Dansk", "Danish"),
+ array("de", "Deutsch ", "German"),
+ array("el", "Ελληνικά", "Greek"),
+ array("en", "English", "English"),
+ array("es", "Español", "Spanish"),
+ array("sa", "فارسی", "Persian"),
+ array("fi", "Suomi", "Finnish"),
+ array("fr", "Français", "French"),
+ array("gl", "Galego", "Galician"),
+ array("he", "עִבְרִית", "Hebrew"),
+ array("hr", "Hrvatski", "Croatian"),
+ array("hu", "Magyar", "Hungarian"),
+ array("ms", "بهاس ملايو", "Malay"),
+ array("it", "Italiano", "Italian"),
+ array("ja", "日本語", "Japanese"),
+ array("ko", "한국어", "Korean"),
+ array("lt", "Lietuvių", "Lithuanian"),
+ array("lv", "Latviešu", "Latvian"),
+ array("nl", "Nederlands", "Dutch"),
+ array("pl", "Polski", "Polish"),
+ array("pt_BR", "Português - Brasil", "Portuguese - Brazil"),
+ array("pt_PT", "Português", "Portuguese"),
+ array("ro", "Română", "Romanian"),
+ array("ru", "Русский", "Russian"),
+ array("sk", "Slovenčina", "Slovakian"),
+ array("sl", "Slovenščina", "Slovenian"),
+ array("sv", "Svenska", "Swedish"),
+ array("tr", "Türkçe", "Turkish"),
+ array("zh_CN", "简体中文", "Chinese"),
+ array("zh_TW", "繁體中文", "Chinese (Taiwan)"),
);
+function language_select() {
+ global $language_names;
+ $supported_languages = get_supported_languages();
+ $supported_languages[] = "en";
+ $bd = tra("Browser default");
+ echo "
+ <option value=auto selected=\"selected\">-- language --
+ <option value=auto>$bd
+ ";
+ if ($bd != "Browser default") echo " (Browser default)";
+ foreach ($language_names as $lang) {
+ if (!in_array($lang[0], $supported_languages)) continue;
+ if ($lang[0] == "en") {
+ echo "<option value=".$lang[0].">".$lang[1];
+ } else {
+ echo "<option value=".$lang[0].">".$lang[1]." (".$lang[2].")";
+ }
+ }
+}
+
+// show a menu of supported languages
+//
+function language_form() {
+ echo "
+ <table><tr><td>
+ <form name=language method=get action=set_language.php>
+ <select class=selectbox name=lang onchange=\"javascript: submit()\">
+ ";
+ language_select();
+ echo "</select>
+ </form>
+ <script type=\"text/javascript\">
+ document.language.lang.selectedIndex=0;
+ </script>
+ </td></tr></table>
+ ";
+}
+
?>
diff --git a/html/inc/news.inc b/html/inc/news.inc
index 881d256..4aea5d8 100644
--- a/html/inc/news.inc
+++ b/html/inc/news.inc
@@ -24,18 +24,20 @@ function news_item($date, $title, $post) {
echo "<span class=news_title>$title</span><br>\n";
}
$d = time_str($date);
+ $options = new output_options();
+ $options->htmlitems = false;
if (is_string($post)) {
$forum_link = false;
- $text = output_transform($post);
+ $text = output_transform($post, $options);
} else {
$forum_link = true;
- $text = output_transform($post->content);
+ $text = output_transform($post->content, $options);
}
echo "
<span class=news_content>$text</span>
<span class=news_date>$d
";
- if ($forum_link) {
+ if ($forum_link && !DISABLE_FORUMS) {
echo "
· <a href=".URL_BASE."forum_thread.php?id=$post->thread> ".tra("Comment")."</a>
";
diff --git a/html/inc/prefs.inc b/html/inc/prefs.inc
index 0970191..8cab4ae 100644
--- a/html/inc/prefs.inc
+++ b/html/inc/prefs.inc
@@ -301,7 +301,7 @@ if (isset($accelerate_gpu_apps_pref) && $accelerate_gpu_apps_pref) {
);
}
-if ($app_types->count > 1) {
+//if ($app_types->count > 1) {
if ($app_types->cpu) {
$project_pref_descs[] = new PREF_BOOL (
tra(
@@ -341,7 +341,7 @@ if ($app_types->count > 1) {
if ($app_types->intel_gpu) {
$project_pref_descs[] = new PREF_BOOL (
tra(
- "Use Intel GPU %1 Enforced by version 7.0+ %2",
+ "Use Intel GPU %1 Enforced by version 7.2+ %2",
"<br><span class=note>",
"</span>"
),
@@ -350,7 +350,7 @@ if ($app_types->count > 1) {
true
);
}
-}
+//}
if (isset($project_has_beta) && $project_has_beta) {
$project_pref_descs[] = new PREF_BOOL(
@@ -638,7 +638,8 @@ function row_top($x, $ncols=6, $class="heading") {
echo "<td class=$class width=10%><b>".tra("Default")."</b></td>
<td class=$class width=10%><b>".tra("Home")."</b></td>
<td class=$class width=10%><b>".tra("School")."</b></td>
- <td class=$class width=10%><b>".tra("Work")."</b></td>";
+ <td class=$class width=10%><b>".tra("Work")."</b></td>
+ ";
echo "<td width=15%><br></td></tr>\n";
}
@@ -797,7 +798,7 @@ function prefs_show_privacy($user, $columns) {
function prefs_show_project_specific($prefs, $columns=false) {
if ($columns) {
- $project_specific_prefs = project_specific_prefs_parse($prefs->project_specific);
+ $project_specific_prefs = project_specific_prefs_parse($prefs->project_specific);
$project_specific_prefs->home = isset($prefs->home) ? project_specific_prefs_parse($prefs->home->project_specific) : "";
$project_specific_prefs->work = isset($prefs->work) ? project_specific_prefs_parse($prefs->work->project_specific) : "";
$project_specific_prefs->school = isset($prefs->school) ? project_specific_prefs_parse($prefs->school->project_specific) : "";
@@ -880,10 +881,13 @@ function print_prefs_display_project($user, $columns=false) {
function print_prefs_display_global($user, $columns=false) {
$global_prefs = prefs_parse_global($user->global_prefs);
- echo "<span class=note>".
- tra("These apply to all BOINC projects in which you participate.<br>
- On computers participating in multiple projects, the most recently modified preferences will be used.").
- "</span><br><br>";
+ echo "<span class=note>"
+ .tra("These apply to all BOINC projects in which you participate.")
+ ."<br>"
+ .tra("On computers participating in multiple projects, the most recently modified preferences will be used.")
+ ."<br>"
+ .tra("These preferences do not apply to Android devices.")
+ ."</span><br><br>";
if (isset($global_prefs->mod_time)) {
echo tra("Preferences last modified:")." ".pretty_time_str($global_prefs->mod_time);
}
@@ -1033,7 +1037,7 @@ function venue_show($user) {
}
function venue_form($user) {
- $n=$h=$w=$s='';
+ $n=$h=$w=$s=$m='';
if ($user->venue == '') $n = 'selected';
if ($user->venue == 'home') $h = 'selected';
if ($user->venue == 'work') $w = 'selected';
@@ -1052,10 +1056,6 @@ function venue_parse_form(&$user) {
$user->venue = $_GET['default_venue'];
}
-function venue_update($user) {
- mysql_query("update user set venue='$user->venue' where id=$user->id");
-}
-
////////////////////////////////////////////
//
// Functions to parse form elements, modifying a preferences structure
@@ -1185,9 +1185,8 @@ function project_prefs_make_xml($prefs, $primary=true) {
// Update user's prefs in database, from a given structure
//
function global_prefs_update(&$user, $prefs) {
- $prefs_xml = mysql_real_escape_string(global_prefs_make_xml($prefs));
- $query = "update user set global_prefs='$prefs_xml' where id=$user->id";
- $retval = mysql_query($query);
+ $prefs_xml = BoincDb::escape_string(global_prefs_make_xml($prefs));
+ $retval = $user->update("global_prefs='$prefs_xml'");
if (!$retval) {
return 1;
}
@@ -1196,11 +1195,10 @@ function global_prefs_update(&$user, $prefs) {
}
function project_prefs_update(&$user, $prefs) {
- $prefs_xml = mysql_real_escape_string(project_prefs_make_xml($prefs));
+ $prefs_xml = BoincDb::escape_string(project_prefs_make_xml($prefs));
$send_email = $user->send_email?1:0;
$show_hosts = $user->show_hosts?1:0;
- $query = "update user set project_prefs='$prefs_xml', send_email=$send_email, show_hosts=$show_hosts where id=$user->id";
- $retval = mysql_query($query);
+ $retval = $user->update("project_prefs='$prefs_xml', send_email=$send_email, show_hosts=$show_hosts");
if (!$retval) {
return 1;
}
diff --git a/html/inc/profile.inc b/html/inc/profile.inc
index c675689..9f924e0 100644
--- a/html/inc/profile.inc
+++ b/html/inc/profile.inc
@@ -166,7 +166,7 @@ function scale_image(
// of said user's profile.
function get_profile_summary($profile) {
- $user = get_user_from_id($profile->userid);
+ $user = BoincUser::lookup_id($profile->userid);
if (!$user || !$profile) {
error_page(tra("Database error"));
@@ -176,8 +176,9 @@ function get_profile_summary($profile) {
$description = "";
if (strlen($profile->response1) != 0) {
- $temp = $profile->response1;
- $description = "(\"" . sub_sentence(sanitize_tags($temp), ' ', MAX_DESC_LENGTH, true) . "\")";
+ $temp = output_transform($profile->response1);
+ $temp = sanitize_tags($temp);
+ $description = "(\"" . sub_sentence($temp, ' ', MAX_DESC_LENGTH, true) . "\")";
}
diff --git a/html/inc/recaptchalib.php b/html/inc/recaptchalib.php
index aea6e0d..570cf49 100644
--- a/html/inc/recaptchalib.php
+++ b/html/inc/recaptchalib.php
@@ -36,7 +36,7 @@
* The reCAPTCHA server URL's
*/
define("RECAPTCHA_API_SERVER", "http://api.recaptcha.net");
-define("RECAPTCHA_API_SECURE_SERVER", "https://api-secure.recaptcha.net");
+define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api");
define("RECAPTCHA_VERIFY_SERVER", "api-verify.recaptcha.net");
/**
diff --git a/html/inc/result.inc b/html/inc/result.inc
index 4bc8fea..87e5a44 100644
--- a/html/inc/result.inc
+++ b/html/inc/result.inc
@@ -44,7 +44,7 @@ function app_version_string($result) {
$id = $result->app_version_id;
switch ($id) {
- case 0: return "";
+ case 0: return "---";
case ANON_PLATFORM_UNKNOWN:
return anon_platform_string($result);
case ANON_PLATFORM_CPU:
@@ -131,37 +131,37 @@ $state_clause = array(
);
function state_num($result) {
- if ($result->server_state == 4) return 1;
- if ($result->server_state == 5 && $result->outcome == 1) {
- if ($result->validate_state == 0) {
+ if ($result->server_state == RESULT_SERVER_STATE_IN_PROGRESS) return 1;
+ if ($result->server_state == RESULT_SERVER_STATE_OVER && $result->outcome == RESULT_OUTCOME_SUCCESS) {
+ if ($result->validate_state == VALIDATE_STATE_INIT) {
return STATE_PENDING;
}
- if ($result->validate_state == 4) {
+ if ($result->validate_state == VALIDATE_STATE_INCONCLUSIVE) {
return STATE_INCONCLUSIVE;
}
}
- if ($result->server_state == 5
- && $result->outcome == 1
- && $result->validate_state == 1
+ if ($result->server_state == RESULT_SERVER_STATE_OVER
+ && $result->outcome == RESULT_OUTCOME_SUCCESS
+ && $result->validate_state == VALIDATE_STATE_VALID
) {
return STATE_VALID;
}
- if ($result->server_state == 5
- && ($result->outcome == 6
- || ($result->outcome ==1
- && ($result->validate_state == 2
- || $result->validate_state == 3
- || $result->validate_state == 5
+ if ($result->server_state == RESULT_SERVER_STATE_OVER
+ && ($result->outcome == RESULT_OUTCOME_VALIDATE_ERROR
+ || ($result->outcome == RESULT_OUTCOME_SUCCESS
+ && ($result->validate_state == VALIDATE_STATE_INVALID
+ || $result->validate_state == VALIDATE_STATE_NO_CHECK
+ || $result->validate_state == VALIDATE_STATE_TOO_LATE
)
)
)
) {
return STATE_INVALID;
}
- if ($result->server_state == 5
- && ($result->outcome == 3
- || $result->outcome = 4
- || $result->outcome = 7
+ if ($result->server_state == RESULT_SERVER_STATE_OVER
+ && ($result->outcome == RESULT_OUTCOME_CLIENT_ERROR
+ || $result->outcome = RESULT_OUTCOME_NO_REPLY
+ || $result->outcome = RESULT_OUTCOME_CLIENT_DETACHED
)
) {
return STATE_ERROR;
@@ -171,23 +171,23 @@ function state_num($result) {
function state_string($result) {
switch ($result->server_state) {
- case 1: return tra("Inactive");
- case 2: return tra("Unsent");
- case 4: return tra("In progress");
- case 5:
+ case RESULT_SERVER_STATE_INACTIVE: return tra("Inactive");
+ case RESULT_SERVER_STATE_UNSENT: return tra("Unsent");
+ case RESULT_SERVER_STATE_IN_PROGRESS: return tra("In progress");
+ case RESULT_SERVER_STATE_OVER:
switch ($result->outcome) {
- case 1:
+ case RESULT_OUTCOME_SUCCESS:
switch ($result->validate_state) {
- case 0: return tra("Completed, waiting for validation");
- case 1: return tra("Completed and validated");
- case 2: return tra("Completed, marked as invalid");
- case 3: return tra("Completed, can't validate");
- case 4: return tra("Completed, validation inconclusive");
- case 5: return tra("Completed, too late to validate");
+ case VALIDATE_STATE_INIT: return tra("Completed, waiting for validation");
+ case VALIDATE_STATE_VALID: return tra("Completed and validated");
+ case VALIDATE_STATE_INVALID: return tra("Completed, marked as invalid");
+ case VALIDATE_STATE_NO_CHECK: return tra("Completed, can't validate");
+ case VALIDATE_STATE_INCONCLUSIVE: return tra("Completed, validation inconclusive");
+ case VALIDATE_STATE_TOO_LATE: return tra("Completed, too late to validate");
}
return tra("Completed");
- case 2: return tra("Couldn't send");
- case 3:
+ case RESULT_OUTCOME_COULDNT_SEND: return tra("Couldn't send");
+ case RESULT_OUTCOME_CLIENT_ERROR:
if ($result->exit_status == -221
|| $result->exit_status == 202
) {
@@ -199,18 +199,18 @@ function state_string($result) {
return tra("Not started by deadline - canceled");
}
switch($result->client_state) {
- case 1: return tra("Error while downloading");
- case 2:
- case 3: return tra("Error while computing");
- case 4: return tra("Error while uploading");
- case 6: return tra("Aborted by user");
- case 7: return tra("Upload failed");
+ case RESULT_FILES_DOWNLOADING: return tra("Error while downloading");
+ case RESULT_FILES_DOWNLOADED:
+ case RESULT_COMPUTE_ERROR: return tra("Error while computing");
+ case RESULT_FILES_UPLOADING: return tra("Error while uploading");
+ case RESULT_ABORTED: return tra("Aborted by user");
+ case RESULT_UPLOAD_FAILED: return tra("Upload failed");
}
return tra("Error");
- case 4: return tra("Timed out - no response");
- case 5: return tra("Didn't need");
- case 6: return tra("Validate error");
- case 7: return tra("Abandoned");
+ case RESULT_OUTCOME_NO_REPLY: return tra("Timed out - no response");
+ case RESULT_OUTCOME_DIDNT_NEED: return tra("Didn't need");
+ case RESULT_OUTCOME_VALIDATE_ERROR: return tra("Validate error");
+ case RESULT_OUTCOME_CLIENT_DETACHED: return tra("Abandoned");
}
}
return tra("Unknown");
@@ -218,81 +218,81 @@ function state_string($result) {
function result_server_state_string($result) {
switch($result->server_state) {
- case 1: return tra("Inactive");
- case 2: return tra("Unsent");
- case 4: return tra("In progress");
- case 5: return tra("Over");
+ case RESULT_SERVER_STATE_INACTIVE: return tra("Inactive");
+ case RESULT_SERVER_STATE_UNSENT: return tra("Unsent");
+ case RESULT_SERVER_STATE_IN_PROGRESS: return tra("In progress");
+ case RESULT_SERVER_STATE_OVER: return tra("Over");
}
return tra("Unknown");
}
function result_outcome_string($result) {
switch($result->outcome) {
- case 0: return "---";
- case 1: return tra("Success");
- case 2: return tra("Couldn't send");
- case 3:
+ case RESULT_OUTCOME_INIT: return "---";
+ case RESULT_OUTCOME_SUCCESS: return tra("Success");
+ case RESULT_OUTCOME_COULDNT_SEND: return tra("Couldn't send");
+ case RESULT_OUTCOME_CLIENT_ERROR:
if ($result->exit_status <> -221) {
return tra("Computation error");
}
return tra("Redundant result");
- case 4: return tra("No reply");
- case 5: return tra("Didn't need");
- case 6: return tra("Validate error");
- case 7: return tra("Abandoned");
+ case RESULT_OUTCOME_NO_REPLY: return tra("No reply");
+ case RESULT_OUTCOME_DIDNT_NEED: return tra("Didn't need");
+ case RESULT_OUTCOME_VALIDATE_ERROR: return tra("Validate error");
+ case RESULT_OUTCOME_CLIENT_DETACHED: return tra("Abandoned");
}
return tra("Unknown");
}
function result_client_state_string($result) {
switch($result->client_state) {
- case 0: return tra("New");
- case 1: return tra("Downloading");
- case 2: return tra("Processing");
- case 3: return tra("Compute error");
- case 4: return tra("Uploading");
- case 5: return tra("Done");
- case 6:
- if ($result->exit_status == -221) {
+ case RESULT_NEW: return tra("New");
+ case RESULT_FILES_DOWNLOADING: return tra("Downloading");
+ case RESULT_FILES_DOWNLOADED: return tra("Processing");
+ case RESULT_COMPUTE_ERROR: return tra("Compute error");
+ case RESULT_FILES_UPLOADING: return tra("Uploading");
+ case RESULT_FILES_UPLOADED: return tra("Done");
+ case RESULT_ABORTED:
+ if ($result->exit_status == -221 || $result->exit_status == 202) {
return tra("Cancelled by server");
}
return tra("Aborted by user");
- case 7: return tra("Upload failed");
+ case RESULT_UPLOAD_FAILED: return tra("Upload failed");
}
return tra("Unknown");
}
function validate_state_str($result) {
switch($result->validate_state) {
- case 0: return tra("Initial");
- case 1: return tra("Valid");
- case 2:
+ case VALIDATE_STATE_INIT: return tra("Initial");
+ case VALIDATE_STATE_VALID: return tra("Valid");
+ case VALIDATE_STATE_INVALID:
if ($result->exit_status <> -221) {
return tra("Invalid");
}
return tra("Not necessary");
- case 3: return tra("Workunit error - check skipped");
- case 4: return tra("Checked, but no consensus yet");
- case 5: return tra("Task was reported too late to validate");
+ case VALIDATE_STATE_NO_CHECK: return tra("Workunit error - check skipped");
+ case VALIDATE_STATE_INCONCLUSIVE: return tra("Checked, but no consensus yet");
+ case VALIDATE_STATE_TOO_LATE: return tra("Task was reported too late to validate");
}
return tra("Unknown");
}
function assimilate_state_str($s) {
switch($s) {
- case 0: return "Initial";
- case 1: return "Ready to assimilate";
- case 2: return "Assimilated";
+ case ASSIMILATE_INIT: return "Initial";
+ case ASSIMILATE_READY: return "Ready to assimilate";
+ case ASSIMILATE_DONE: return "Assimilated";
}
return "Unknown";
}
function file_delete_state_str($s) {
switch($s) {
- case 0: return "Initial";
- case 1: return "Ready to delete";
- case 2: return "Deleted";
- case 3: return "Delete Error";
+ case FILE_DELETE_INIT: return "Initial";
+ case FILE_DELETE_READY: return "Ready to delete";
+ case FILE_DELETE_DONE: return "Deleted";
+ case FILE_DELETE_ERROR: return "Delete Error";
}
return "Unknown";
}
@@ -619,14 +619,7 @@ function result_error_mask_str($x){
}
}
-function exit_status_string($result) {
- $x = $result->exit_status;
- if ($x == 0) {
- $y = parse_element($result->stderr_out, "<exit_status>");
- if ($y) {
- $x = (int)$y;
- }
- }
+function exit_status_string($x) {
return sprintf("%d (0x%x)", $x, $x). " ".result_error_mask_str($x);
}
@@ -636,18 +629,30 @@ function show_result($result, $show_outfile_links=false) {
row2(tra("Workunit"), "<a href=\"workunit.php?wuid=$result->workunitid\">$result->workunitid</a>");
row2(tra("Created"), time_str($result->create_time));
row2(tra("Sent"), time_str($result->sent_time));
+ row2(tra("Report deadline"), time_str($result->report_deadline));
row2(tra("Received"), time_str($result->received_time));
row2(tra("Server state"), result_server_state_string($result));
row2(tra("Outcome"), result_outcome_string($result));
row2(tra("Client state"), result_client_state_string($result));
- row2(tra("Exit status"), exit_status_string($result));
+ row2(tra("Exit status"), exit_status_string($result->exit_status));
row2(tra("Computer ID"), host_link($result->hostid));
- row2(tra("Report deadline"), time_str($result->report_deadline));
- row2(tra("Run time"), number_format($result->elapsed_time, 2));
- row2(tra("CPU time"), number_format($result->cpu_time, 2));
+ row2(tra("Run time"), time_diff($result->elapsed_time));
+ row2(tra("CPU time"), time_diff($result->cpu_time));
row2(tra("Validate state"), validate_state_str($result));
row2(tra("Credit"), number_format($result->granted_credit, 2));
row2(tra("Application version"), app_version_string($result));
+ if ($result->peak_working_set_size) {
+ $x = number_format($result->peak_working_set_size/MEGA, 2);
+ row2("Peak working set size", "$x MB");
+ }
+ if ($result->peak_swap_size) {
+ $x = number_format($result->peak_swap_size/MEGA, 2);
+ row2("Peak swap size", "$x MB");
+ }
+ if ($result->peak_disk_usage) {
+ $x = number_format($result->peak_disk_usage/MEGA, 2);
+ row2("Peak disk usage", "$x MB");
+ }
if ($show_outfile_links && $result->outcome == 1) {
$fanout = parse_config(get_config(), "<uldl_dir_fanout>");
$names = get_outfile_names($result);
@@ -751,6 +756,7 @@ function result_navigation($info, $where_clause) {
}
}
+ $x .= "<form action=result.php>".tra("Task name:")."<input size=40 name=result_name><input type=submit value='OK'></form>";
$x .= "</center><br>";
return $x;
}
diff --git a/html/inc/sandbox.inc b/html/inc/sandbox.inc
index 19eb0bb..b521767 100644
--- a/html/inc/sandbox.inc
+++ b/html/inc/sandbox.inc
@@ -25,16 +25,20 @@ require_once("../inc/dir_hier.inc");
// Return path of sandbox directory for the given user.
// Create dir if not present.
//
+if (!function_exists("sandbox_dir")){
function sandbox_dir($user) {
- if (!is_dir("../../sandbox")) {
- mkdir("../../sandbox");
+ $dir = parse_config(get_config(), "<sandbox_dir>");
+ if (!$dir) { $dir = "../../sandbox/"; }
+ if (!is_dir($dir)) {
+ mkdir($dir);
}
- $d = "../../sandbox/$user->id";
+ $d = "$dir/$user->id";
if (!is_dir($d)) {
mkdir($d);
}
return $d;
}
+}
function sandbox_write_link_file($path, $size, $md5) {
file_put_contents($path, "sb $size $md5");
@@ -65,6 +69,7 @@ function sandbox_lf_exist($user, $md5) {
// parse a link file and return (error, size, md5)
//
function sandbox_parse_link_file($path) {
+ if (!file_exists($path)) { return array(true, null, null); }
$x = file_get_contents($path);
$n = sscanf($x, "%s %d %s", $s, $size, $md5);
if ($n != 3) return array(true, null, null);
@@ -86,7 +91,7 @@ function sandbox_file_name($user, $md5) {
function sandbox_physical_path($user, $md5) {
global $fanout;
$f = sandbox_file_name($user, $md5);
- return dir_hier_path($f, "../../download", $fanout);
+ return dir_hier_path($f, parse_config(get_config(), "<download_dir>"), $fanout);
}
// return list of files in sandbox
@@ -104,11 +109,17 @@ function sandbox_file_names($user) {
// return a <select> for files in sandbox
//
-function sandbox_file_select($user, $select_name) {
+function sandbox_file_select($user, $select_name, $regexp = null, $allow_none = false) {
+ if ($regexp === null) {
+ $regexp = $select_name;
+ }
$x = "<select name=$select_name>\n";
+ if ($allow_none) {
+ $x .= "<option value=\"\">--- None</option>\n";
+ }
$files = sandbox_file_names($user);
foreach ($files as $f) {
- if(preg_match("/$select_name/",$f)){
+ if(preg_match("/$regexp/",$f)){
$x .= "<option value=\"$f\">$f</option>\n";
}
}
diff --git a/html/inc/submit.inc b/html/inc/submit.inc
index d21ad74..b159109 100644
--- a/html/inc/submit.inc
+++ b/html/inc/submit.inc
@@ -44,10 +44,26 @@ function req_to_xml($req, $op) {
<rsc_fpops_est>$job->rsc_fpops_est</rsc_fpops_est>
<command_line>$job->command_line</command_line>
";
+ if ((isset($job->target_team)) && ($job->target_team)) {
+ $x .= " <target_team>$job->target_team</target_team>
+";
+ } elseif ((isset($job->target_user)) && ($job->target_user)) {
+ $x .= " <target_user>$job->target_user</target_user>
+";
+ } elseif ((isset($job->target_team)) && ($job->target_team)) {
+ $x .= " <target_team>$job->target_team</target_team>
+";
+ }
foreach ($job->input_files as $file) {
$x .= " <input_file>\n";
$x .= " <mode>$file->mode</mode>\n";
- $x .= " <source>$file->source</source>\n";
+ if ($file->mode == "remote") {
+ $x .= " <url>$file->url</url>\n";
+ $x .= " <nbytes>$file->nbytes</nbytes>\n";
+ $x .= " <md5>$file->md5</md5>\n";
+ } else {
+ $x .= " <source>$file->source</source>\n";
+ }
$x .= " </input_file>\n";
}
$x .= " </job>
@@ -96,9 +112,12 @@ function do_http_op($req, $xml, $op) {
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$reply = curl_exec($ch);
+ curl_close($ch);
if (!$reply) return array(null, "HTTP error");
- $r = simplexml_load_string($reply);
- if (!$r) return array(null, "Can't parse reply XML: <pre>".htmlentities($reply)."</pre>");
+ $r = @simplexml_load_string($reply);
+ if (!$r) {
+ return array(null, "Can't parse reply XML:\n$reply");
+ }
$e = (string)$r->error_msg;
if ($e) {
return array(null, $e);
@@ -274,10 +293,10 @@ if (0) {
$req->jobs = array();
$job->input_files = array();
- $f->source = "http://isaac.ssl.berkeley.edu/validate_logic.txt";
$f->mode = "remote";
+ $f->url = "http://isaac.ssl.berkeley.edu/validate_logic.txt";
$f->md5 = "eec5a142cea5202c9ab2e4575a8aaaa7";
- $f->size = 4250;
+ $f->nbytes = 4250;
$job->input_files[] = $f;
$f = new StdClass;
$f->mode = "local";
diff --git a/html/inc/submit_db.inc b/html/inc/submit_db.inc
index b91ac84..c890a58 100644
--- a/html/inc/submit_db.inc
+++ b/html/inc/submit_db.inc
@@ -137,6 +137,12 @@ class BoincBatchFileAssoc {
"job_file_id=$this->job_file_id and batch_id=$this->batch_id"
);
}
+ static function delete_batch($batch_id) {
+ $db = BoincDb::get();
+ $db->delete_aux('batch_file_assoc',
+ "batch_id=$batch_id"
+ );
+ }
}
?>
diff --git a/html/inc/submit_util.inc b/html/inc/submit_util.inc
index 20069f7..5baf95e 100644
--- a/html/inc/submit_util.inc
+++ b/html/inc/submit_util.inc
@@ -123,15 +123,25 @@ function abort_batch($batch) {
return 0;
}
+// mark WUs as assimilated; this lets them be purged
+//
function retire_batch($batch) {
$wus = BoincWorkunit::enum("batch=$batch->id");
$now = time();
foreach ($wus as $wu) {
- $wu->update("assimilate_state=2, transition_time=$now");
+ $wu->update(
+ "assimilate_state=".ASSIMILATE_DONE.", transition_time=$now"
+ );
}
$batch->update("state=".BATCH_STATE_RETIRED);
}
+function expire_batch($batch) {
+ abort_batch($batch);
+ retire_batch($batch);
+ $batch->update("state=".BATCH_STATE_EXPIRED);
+}
+
function batch_state_string($state) {
switch ($state) {
case BATCH_STATE_INIT: return "new";
diff --git a/html/inc/team.inc b/html/inc/team.inc
index 857405d..9ffa2df 100644
--- a/html/inc/team.inc
+++ b/html/inc/team.inc
@@ -88,6 +88,10 @@ function display_team_page($team, $user) {
if (strlen($team->description)) {
row2(tra('Description'), sanitize_html($team->description));
}
+ row2("Created", date_str($team->create_time));
+ if (defined("SHOW_NONVALIDATED_TEAMS")) {
+ row2("Founder email validated", $user->email_validated?"Yes":"No (team will not be exported)");
+ }
if (strlen($team->url)) {;
if (strstr($team->url, "http://")) {
$x = $team->url;
@@ -100,6 +104,7 @@ function display_team_page($team, $user) {
if (!no_computing()) {
row2(tra('Total credit'), format_credit_large($team->total_credit));
row2(tra('Recent average credit'), format_credit_large($team->expavg_credit));
+ show_badges(false, $team);
$x = "";
shuffle($team_name_sites);
@@ -417,12 +422,10 @@ function team_edit_form($team, $label, $url) {
echo "<form method=post action=$url>\n";
if ($team) {
echo "<input type=hidden name=teamid value=$team->id>\n";
- }
- if ($team->seti_id) {
- echo "<p><span class=error>".tra("WARNING: this is a BOINC-wide team. If you make changes here, they will soon be overwritten. Edit the %1BOINC-wide team%2 instead.", "<a href=http://boinc.berkeley.edu/teams/>", "</a>")
- ."</span>
- <p>
- ";
+ if ($team->seti_id) {
+ echo "<p><span class=error>".tra("WARNING: this is a BOINC-wide team. If you make changes here, they will soon be overwritten. Edit the %1BOINC-wide team%2 instead.", "<a href=http://boinc.berkeley.edu/teams/>", "</a>")
+ ."</span><p>";
+ }
}
echo '
<p>
@@ -432,34 +435,34 @@ function team_edit_form($team, $label, $url) {
start_table();
row2(tra('Team name, text version').'
<br><span class="note">'.tra('Don\'t use HTML tags.').'</span>',
- "<input name=name type=text size=50 value='$team->name'>"
+ "<input name=name type=text size=50 value='".($team?$team->name:"")."'>"
);
row2(tra('Team name, HTML version').'
<br><span class="note">
'.tra('You may use %1limited HTML tags%2.', '<a href="html.php" target="_new">', '</a>').'
'.tra('If you don\'t know HTML, leave this box blank.').'</span>',
- "<input name=name_html type=text size=50 value=\"".str_replace('"',"'",$team->name_html)."\">"
+ "<input name=name_html type=text size=50 value=\"".str_replace('"',"'",($team?$team->name_html:""))."\">"
);
row2(tra('URL of team web page, if any').':<br><font size=-2>('.tra('without "http://"').')
'.tra('This URL will be linked to from the team\'s page on this site.'),
- "<input type=text name=url size=60 value='$team->url'>"
+ "<input type=text name=url size=60 value='".($team?$team->url:"")."'>"
);
row2(tra('Description of team').':
<br><span class="note">
'.tra('You may use %1limited HTML tags%2.', '<a href="html.php" target="_new">', '</a>').'
</span>',
- "<textarea name=description cols=60 rows=10>$team->description</textarea>"
+ "<textarea name=description cols=60 rows=10>".($team?$team->description:"")."</textarea>"
);
- row2(tra('Type of team').':', team_type_select($team->type));
+ row2(tra('Type of team').':', team_type_select($team?$team->type:null));
row2_init(tra('Country'),
"<select name=country>"
);
- print_country_select($team->country);
+ print_country_select($team?$team->country:null);
echo "</select></td></tr>\n";
- $x = $team->joinable?"checked":"";
+ $x = ($team && $team->joinable)?"checked":"";
row2(tra("Accept new members?"), "<input type=checkbox name=joinable $x>");
row2("",
"<input type=submit name=new value='$label'>"
diff --git a/html/inc/translation.inc b/html/inc/translation.inc
index 6788c43..8e5427f 100644
--- a/html/inc/translation.inc
+++ b/html/inc/translation.inc
@@ -25,7 +25,7 @@ $lang_log_level = 1;
// Get a list of compiled languages by scanning the compiled/ dir
// @returns A list of languages that have been compiled
//
-function getSupportedLanguages(){
+function get_supported_languages() {
global $lang_language_dir, $lang_compiled_dir;
$list = array();
if (!is_dir($lang_language_dir.$lang_compiled_dir)) {
@@ -43,15 +43,21 @@ function getSupportedLanguages(){
return $list;
}
-// Builds the lookup arrays from the
-// language files found in the given directory tree.
+// generate PHP files defining translation arrays.
+// For example, the file "ca.po.inc" would contain entries of the form
+// $language_lookup_array["ca"]["Default"] = "Defecte";
+//
+// Append to these files if they already exist
+// (this may get done for both generic and project-specific translations)
+//
// @param langdir The language base directory
// @param transdir The location of the .po files to compile relative to langdir
// @param compdir The output location relative to langdir
//
-function buildLanguages($langdir, $transdir, $compdir){
+function build_translation_array_files($langdir, $transdir, $compdir) {
// Run through each language and compile their lookup arrays.
+ //
if (!is_dir($langdir.$transdir)) {
//debug("$info_dir not found or is not a directory");
}
@@ -61,7 +67,7 @@ function buildLanguages($langdir, $transdir, $compdir){
if ($file==".." || $file==".") {
continue;
}
- // and only do files ending in .po
+ // only do files ending in .po
if (substr($file,-3) != ".po"){
//debug("File $file with unknown extension found in $info_dir");
continue;
@@ -69,7 +75,7 @@ function buildLanguages($langdir, $transdir, $compdir){
language_log(
"-------------Compiling $transdir$file------------", 0
);
- $language = parseLanguage($langdir.$transdir.$file);
+ $language = parse_po_file($langdir.$transdir.$file);
if (!$language){
language_log(
"WARNING: Could not parse language ".$file
@@ -106,7 +112,7 @@ function buildLanguages($langdir, $transdir, $compdir){
// @param file The file to parse
// checking for inconsistencies if needed.
//
-function parseLanguage($file){
+function parse_po_file($file) {
$translation_file = file($file);
$first_entry = true;
$current_token_text="";
@@ -124,25 +130,26 @@ function parseLanguage($file){
//If this is not the first, save the previous entry
$output[$current_token]=$current_token_text;
}
- $current_token = getPOLineContent($entry, $file);
+ $current_token = get_po_line($entry, $file);
$current_token_text="";
$parsing_token = true;
$parsing_text = false;
$first_entry=false;
} elseif (strpos($entry, "msgstr") !== false) {
- $current_token_text = getPOLineContent($entry, $file);
+ $current_token_text = get_po_line($entry, $file);
$parsing_token = false;
$parsing_text = true;
} elseif ($parsing_token) {
- $current_token .= getPOLineContent($entry, $file);
+ $current_token .= get_po_line($entry, $file);
} elseif ($parsing_text) {
- $current_token_text.=getPOLineContent($entry, $file);
+ $current_token_text .= get_po_line($entry, $file);
}
}
// Get the last token
+ //
if ($current_token && $current_token_text){
- $output[$current_token]=$current_token_text;
+ $output[$current_token] = $current_token_text;
}
return $output;
}
@@ -150,7 +157,7 @@ function parseLanguage($file){
// Returns the contents of a line (ie removes "" from start and end)
//
-function getPOLineContent($line, $file){
+function get_po_line($line, $file) {
$start = strpos($line, '"')+1;
$stop = strrpos($line, '"');
$x = substr($line, $start, $stop-$start);
@@ -162,9 +169,12 @@ function getPOLineContent($line, $file){
return $x;
}
+////////// EVERYTHING BEFORE HERE IS FOR ops/update_translations.php,
+////////// AND SHOULD BE MOVED TO A SEPARATE FILE
+
// Translate string
//
-function tra($text /* ...arglist... */){
+function tra($text /* ...arglist... */) {
global $language_lookup_array, $languages_in_use;
// Find the string in the user's language
@@ -190,7 +200,7 @@ function tra($text /* ...arglist... */){
return $text;
}
-function tr_specific($text, $language){
+function tr_specific($text, $language) {
global $lang_language_dir, $lang_compiled_dir, $language_lookup_array;
$file_name = $lang_language_dir.$lang_compiled_dir.$language.".po.inc";
if (file_exists($file_name)) {
@@ -200,7 +210,7 @@ function tr_specific($text, $language){
return $text;
}
-function language_log($message, $loglevel=0){
+function language_log($message, $loglevel=0) {
global $lang_log_level;
if ($loglevel==0) $msg = "[ Debug ]";
if ($loglevel==1) $msg = "[ Warning ]";
@@ -232,7 +242,7 @@ if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
// [2] => en;q=0.3
// )
-$client_languages=explode(",",$language_string);
+$client_languages = explode(",", $language_string);
// A language is either defined as primary-secondary or primary.
// It can also have a quality attribute set,
@@ -247,21 +257,21 @@ $languages_in_use = array();
//
for ($i=0; $i<sizeof($client_languages); $i++) {
if ((strlen($client_languages[$i])>2)
- && (substr($client_languages[$i],2,1)=="_" || substr($client_languages[$i],2,1)=="-"))
- {
+ && (substr($client_languages[$i], 2, 1) == "_" || substr($client_languages[$i], 2, 1) == "-")
+ ){
// If this is defined as primary-secondary, represent it as xx_YY
//
$language = substr(
- $client_languages[$i],0,2)."_".strtoupper(substr($client_languages[$i],3,2)
+ $client_languages[$i], 0, 2)."_".strtoupper(substr($client_languages[$i], 3, 2)
);
// And also check for the primary language
//
- $language2 = substr($client_languages[$i],0,2);
+ $language2 = substr($client_languages[$i], 0, 2);
} else {
// else just use xx
//
- $language = substr($client_languages[$i],0,2);
+ $language = substr($client_languages[$i], 0, 2);
$language2 = null;
}
@@ -272,6 +282,7 @@ for ($i=0; $i<sizeof($client_languages); $i++) {
}
// If we have a translation for the language, include it
+ //
$file_name = $lang_language_dir.$lang_compiled_dir.$language.".po.inc";
if (file_exists($file_name)) {
if (!in_array($language, $languages_in_use)){
diff --git a/html/inc/uotd.inc b/html/inc/uotd.inc
index cde447d..0ab0ec3 100644
--- a/html/inc/uotd.inc
+++ b/html/inc/uotd.inc
@@ -16,6 +16,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+require_once('../inc/boinc_db.inc');
require_once('../inc/email.inc');
require_once('../inc/profile.inc');
@@ -33,10 +34,12 @@ function uotd_thumbnail($profile, $user) {
// show UOTD in a small box
//
function show_uotd($profile) {
- $user = lookup_user_id($profile->userid);
+ $user = BoincUser::lookup_id($profile->userid);
echo uotd_thumbnail($profile, $user);
echo user_links($user, true)."<br>";
- echo sub_sentence(output_transform(sanitize_tags($profile->response1)), ' ', 150, true);
+ $x = output_transform($profile->response1);
+ $x = sanitize_tags($x);
+ echo sub_sentence($x, ' ', 150, true);
}
// return the last UOTD profile, or null
@@ -58,7 +61,7 @@ function select_uotd() {
$assigned = getdate($current_uotd->uotd_time);
$now = getdate(time());
if ($assigned['mday'] == $now['mday']) {
- $user = lookup_user_id($current_uotd->userid);
+ $user = BoincUser::lookup_id($current_uotd->userid);
echo "Already have UOTD for today\n";
generate_uotd_gadget($current_uotd, $user);
exit();
@@ -104,7 +107,7 @@ function select_uotd() {
exit();
}
$profile = mysql_fetch_object($result);
- $user = lookup_user_id($profile->userid);
+ $user = BoincUser::lookup_id($profile->userid);
// if profile is "orphaned", delete it and try again
//
@@ -171,9 +174,8 @@ function generate_uotd_gadget($profile, $user) {
if($age <= 86400+3600) { // allow for slop
$x .= uotd_thumbnail($profile, $user);
$x .= user_links($user);
- $x .= " ".
- sub_sentence(sanitize_tags(output_transform($profile->response1)), ' ',
- 250, true);
+ $resp = sanitize_tags(output_transform($profile->response1));
+ $x .= " ". sub_sentence($resp, ' ', 250, true);
}
else {
$x .= "<font color='fuscia'>
diff --git a/html/inc/user.inc b/html/inc/user.inc
index 52491ad..1d61901 100644
--- a/html/inc/user.inc
+++ b/html/inc/user.inc
@@ -148,9 +148,6 @@ function show_user_stats_private($user) {
row1(tra("Computing and credit"));
show_credit($user);
$config = get_config();
- if (parse_bool($config, "show_results")) {
- row2(tra("Pending credit"), "<a href=\"pending.php\">".tra("View")."</a>");
- }
row2(tra("Computers on this account"), "<a href=\"hosts_user.php\">".tra("View")."</a>");
row2(tra("Tasks"), "<a href=\"results.php?userid=$user->id\">".tra("View")."</a>");
$cpid = md5($user->cross_project_id . $user->email_addr);
@@ -241,15 +238,20 @@ function show_user_info_private($user) {
function show_community_private($user) {
row1(tra("Community"));
- if ($user->has_profile) {
- $x = "<a href=\"view_profile.php?userid=$user->id\">".tra("View")."</a> · <a href=\"delete_profile.php\">".tra("Delete")."</a>";
- } else {
- $x = "<a href=\"create_profile.php\">".tra("Create")."</a>";
+ show_badges(true, $user);
+ if (!DISABLE_PROFILES) {
+ if ($user->has_profile) {
+ $x = "<a href=\"view_profile.php?userid=$user->id\">".tra("View")."</a> · <a href=\"delete_profile.php\">".tra("Delete")."</a>";
+ } else {
+ $x = "<a href=\"create_profile.php\">".tra("Create")."</a>";
+ }
+ row2(tra("Profile"), $x);
}
- row2(tra("Profile"), $x);
- $tot = total_posts($user);
- if ($tot) {
- row2(tra("Message boards"), "<a href=\"".URL_BASE."forum_user_posts.php?userid=$user->id\">".tra("%1 posts", $tot)."</a>");
+ if (!DISABLE_FORUMS) {
+ $tot = total_posts($user);
+ if ($tot) {
+ row2(tra("Message boards"), "<a href=\"".URL_BASE."forum_user_posts.php?userid=$user->id\">".tra("%1 posts", $tot)."</a>");
+ }
}
row2(tra("Private messages"), pm_notification($user).pm_email_remind($user));
@@ -264,7 +266,7 @@ function show_community_private($user) {
row2(tra("Notifications"), $x);
}
- if (!defined('NO_TEAMS')) {
+ if (!DISABLE_TEAMS) {
if ($user->teamid) {
$team = lookup_team($user->teamid);
$x = "<a href=\"team_display.php?teamid=$team->id\">$team->name</a>
@@ -366,15 +368,17 @@ function community_links($clo, $logged_in_user){
$friends = $clo->friends;
$tot = $clo->post_count;
- if (!defined('NO_TEAMS')) {
+ if (!DISABLE_TEAMS) {
if ($user->teamid && $team) {
row2(tra("Team"), "<a href=\"".URL_BASE."team_display.php?teamid=$team->id\">$team->name</a>");
} else {
row2(tra("Team"), tra("None"));
}
}
- if ($tot) {
- row2(tra("Message boards"), "<a href=\"".URL_BASE."forum_user_posts.php?userid=$user->id\">".tra("%1 posts", $tot)."</a>");
+ if (!DISABLE_FORUMS) {
+ if ($tot) {
+ row2(tra("Message boards"), "<a href=\"".URL_BASE."forum_user_posts.php?userid=$user->id\">".tra("%1 posts", $tot)."</a>");
+ }
}
if ($logged_in_user && $logged_in_user->id != $user->id) {
row2(tra("Contact"), "<a href=\"pm.php?action=new&userid=".$user->id."\">".tra("Send private message")."</a>");
diff --git a/html/inc/util.inc b/html/inc/util.inc
index 42971e5..1920eca 100644
--- a/html/inc/util.inc
+++ b/html/inc/util.inc
@@ -38,10 +38,39 @@ if (defined('TIMEZONE')) {
date_default_timezone_set('UTC');
}
+if (!defined('DISABLE_PROFILES')) {
+ define('DISABLE_PROFILES', false);
+}
+if (!defined('DISABLE_FORUMS')) {
+ define('DISABLE_FORUMS', false);
+}
+if (!defined('DISABLE_TEAMS')) {
+ define('DISABLE_TEAMS', false);
+}
+
$caching = false;
// if set, we're writing to a file rather than to client
$did_page_head = false;
+define('KILO', 1024);
+define('MEGA', 1024*KILO);
+define('GIGA', 1024*MEGA);
+
+// return true if this page is HTTPS
+//
+function is_https() {
+ return isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'];
+}
+
+function secure_url_base() {
+ if (defined('SECURE_URL_BASE')) return SECURE_URL_BASE;
+ return URL_BASE;
+}
+
+function url_base() {
+ return is_https()?secure_url_base():URL_BASE;
+}
+
function send_cookie($name, $value, $permanent, $ops=false) {
// the following allows independent login for projects on the same server
//
@@ -67,11 +96,6 @@ function clear_cookie($name, $ops=false) {
setcookie($name, '', time()-3600, $path);
}
-function get_user_from_id($id) {
- if ($id) return lookup_user_id($id);
- return NULL;
-}
-
$g_logged_in_user = null;
$got_logged_in_user = false;
@@ -137,11 +161,12 @@ function page_head(
global $caching, $cache_control_extra, $did_page_head;
$did_page_head = true;
- $stylesheet = URL_BASE.STYLESHEET;
+ $url_base = url_base();
+ $stylesheet = $url_base.STYLESHEET;
$rssname = PROJECT . " RSS 2.0";
- $rsslink = URL_BASE."rss_main.php";
+ $rsslink = $url_base."rss_main.php";
if (defined('STYLESHEET2')) {
- $stylesheet2 = URL_BASE.STYLESHEET2;
+ $stylesheet2 = $url_base.STYLESHEET2;
} else {
$stylesheet2 = null;
}
@@ -166,7 +191,7 @@ function page_head(
} else {
echo "<title>".sanitize_tags($title_plain)."</title>\n";
}
- echo "<link rel=stylesheet type=\"text/css\" href=\"".URL_BASE."main.css\" media=\"all\">
+ echo "<link rel=stylesheet type=\"text/css\" href=\"".$url_base."main.css\" media=\"all\">
<link rel=stylesheet type=\"text/css\" href=\"$stylesheet\">
";
if ($stylesheet2) {
@@ -311,7 +336,7 @@ function table_header() {
$col = func_get_arg($i);
echo "<th ".$col[1].">".$col[0]."</th>\n";
} else {
- echo "<th>".func_get_arg($i)."</th>\n";
+ echo "<th valign=top>".func_get_arg($i)."</th>\n";
}
}
echo "</tr>\n";
@@ -371,8 +396,12 @@ function rowify($string) {
echo "<tr><td>$string</td></tr>";
}
-function row_array($x) {
- echo "<tr>";
+function row_array($x, $class=null) {
+ if ($class) {
+ echo "<tr class='$class'>";
+ } else {
+ echo "<tr>";
+ }
foreach ($x as $h) {
echo "<td>$h</td>";
}
@@ -799,12 +828,10 @@ function db_init($try_replica=false) {
$retval = db_init_aux($try_replica);
if ($retval == 1) {
echo tra("Unable to connect to database - please try again later");
- echo tra("Error:"), " ", mysql_errno(), mysql_error();
exit();
}
if ($retval == 2) {
echo tra("Unable to select database - please try again later");
- echo mysql_error();
exit();
}
return 0;
@@ -901,11 +928,6 @@ function do_download($path,$name="") {
readfile($path);
}
-function secure_url_base() {
- if (defined('SECURE_URL_BASE')) return SECURE_URL_BASE;
- return URL_BASE;
-}
-
function redirect_to_secure_url($url) {
if (defined('SECURE_URL_BASE')
&& strstr(SECURE_URL_BASE, "https://")
@@ -917,6 +939,38 @@ function redirect_to_secure_url($url) {
}
}
+function show_badges($is_user, $item) {
+ if ($is_user) {
+ $bus = BoincBadgeUser::enum("user_id=$item->id");
+ } else {
+ $bus = BoincBadgeTeam::enum("team_id=$item->id");
+ }
+ if (!$bus) return;
+ $x = "";
+ foreach ($bus as $bu) {
+ $badge = BoincBadge::lookup_id($bu->badge_id);
+ $x .= "<img title=\"$badge->title\" height=48 src=$badge->image_url> ";
+ }
+ row2("Badges", $x);
+}
+
+function dtime() {
+ return microtime(true);
+}
+
+// If this request is from a BOINC client, return its version as MMmmRR.
+// Otherwise return 0.
+// Format of user agent string is "BOINC client (windows_x86_64 7.3.17)"
+//
+function boinc_client_version(){
+ $x = $_SERVER[HTTP_USER_AGENT];
+ $e = "/BOINC client [^ ]* (\d+).(\d+).(\d+)\)/";
+ if (preg_match($e, $x, $matches)) {
+ return $matches[1]*10000 + $matches[2]*100 + $matches[3];
+ }
+ return 0;
+}
+
$cvs_version_tracker[]="\$Id$"; //Generated automatically - do not edit
?>
diff --git a/html/inc/util_basic.inc b/html/inc/util_basic.inc
index f182021..a405e91 100644
--- a/html/inc/util_basic.inc
+++ b/html/inc/util_basic.inc
@@ -43,7 +43,7 @@ function xml_error($num, $msg=null) {
if (!$msg) {
switch($num) {
case -112: $msg = "Invalid XML"; break;
- case -136: $msg = "Invalid ID"; break;
+ case -136: $msg = "Not found"; break;
case -137: $msg = "Name or email address is not unique"; break;
case -138: $msg = "Can't access database"; break;
case -183: $msg = "Project is temporarily offline"; break;
@@ -53,7 +53,7 @@ function xml_error($num, $msg=null) {
case -208: $msg = "Account creation is disabled"; break;
case -209: $msg = "Invalid invitation code"; break;
case -210: $msg = "Invalid request method"; break;
- default: "Unknown error"; break;
+ default: $msg = "Unknown error"; break;
}
}
echo "<error>
@@ -131,4 +131,14 @@ function drand() {
return ((double)rand())/getrandmax();
}
+// kludge
+//
+function is_gpu($plan_class) {
+ if (strstr($plan_class, "ati")) return true;
+ if (strstr($plan_class, "cuda")) return true;
+ if (strstr($plan_class, "nvidia")) return true;
+ if (strstr($plan_class, "intel_gpu")) return true;
+ return false;
+}
+
?>
diff --git a/html/inc/util_ops.inc b/html/inc/util_ops.inc
index fd90aba..adfdaff 100644
--- a/html/inc/util_ops.inc
+++ b/html/inc/util_ops.inc
@@ -16,47 +16,29 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+error_reporting(E_ALL);
+ini_set('display_errors', true);
+ini_set('display_startup_errors', true);
+
require_once("../inc/db_ops.inc");
require_once("../inc/util.inc");
require_once("../project/project.inc");
-// TODO: get rid of the following. use style sheets
-define("TD", "<td bgcolor=\"#708090\">");
-define("TD2", "<td colspan=\"2\" bgcolor=\"#708090\">");
-define("TD3", "<td colspan=\"3\" bgcolor=\"#708090\">");
-define("TABLE", "<table cellpadding=\"8\" border=\"1\" width=\"100%\">");
-define("TABLE2", "<table width=\"580\">");
-
function admin_page_head($title) {
- $stylesheet = URL_BASE.STYLESHEET;
-
+ echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
echo "<html><head><title>$title</title>
- <link rel=stylesheet type=\"text/css\" href=\"".URL_BASE."main.css\" media=\"all\" />";
- if (defined('ADMIN_STYLESHEET')) {
- echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".URL_BASE.ADMIN_STYLESHEET."\" media=\"all\" />";
- }
- echo "
+ <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\" />
+ <link rel=\"stylesheet\" type=\"text/css\" href=main.css>
+ <link rel=\"stylesheet\" type=\"text/css\" href=white.css>
</head>
- <body bgcolor=\"#ffffff\">
+ <body>
<h2>".PROJECT.": $title</h2>
";
+ show_login_info();
}
function admin_page_tail() {
- echo "<br><hr noshade size=1><center>
- <a href=\"index.php\"> Back to Main admin page </a> |
- ";
- $user = get_logged_in_user_ops();
- if ($user) {
- echo "logged in as $user->name. <a href=logout.php>Log out</a>";
- } else {
- echo "<a href=login_form.php>Log in</a>";
- }
-
- echo "
- </center>
- </body></html>
- ";
+ echo "</body></html>\n";
}
// TODO: get rid of all the following
@@ -107,7 +89,7 @@ function db_init_cli() {
$host = "localhost";
}
$in = fopen("php://stdin","r");
- print "Database username (if not current user): ";
+ print "Database username (default: owner of mysqld process): ";
$user = rtrim(fgets($in, 80));
print "Database password (if any): ";
$pass = rtrim(fgets($in, 80));
@@ -233,37 +215,136 @@ function current_versions($avs) {
return $x;
}
-function test_mysql_query($msg) {
- echo "mysql_query($msg)<br/>";
- return 1;
-}
-
-// for purposes of testing and seeing queries,
-// replace the two instances of mysql_query() below with test_mysql_query().
+// cancel WUs with IDs in a given range.
+// This means:
+//
+// - for any results w/ server state UNSENT, set server state to OVER
+// - set the CANCELLED bit in workunit.error_mask
//
-function cancel_wu($wuid1, $wuid2) {
- $command1="update result set server_state=5, outcome=5 where server_state=2 and $wuid1<=workunitid and workunitid<=$wuid2";
- $command2="update workunit set error_mask=error_mask|16 where $wuid1<=id and id<=$wuid2";
-
- if (!mysql_query($command1)) {
- echo "MySQL command $command1 failed:<br/>unable to cancel unsent results.<br/>";
- return 1;
- } else if (!mysql_query($command2)) {
- echo "MySQL command $command2 failed:<br/>unable to cancel workunits.<br/>";
- return 2;
+function cancel_wus($wuid1, $wuid2) {
+ $retval = BoincResult::update_aux("server_state=5, outcome=5 where server_state=2 and $wuid1<=workunitid and workunitid<=$wuid2");
+ if (!$retval) {
+ error_page("Result update failed");
+ }
+ $retval = BoincWorkunit::update_aux("error_mask=error_mask|16 where $wuid1<=id and id<=$wuid2");
+ if (!$retval) {
+ error_page("Workunit update failed");
}
// trigger the transitioner (it will set file_delete_state)
$now = time();
- $query="update workunit set transition_time=$now where $wuid1<=id and id<=$wuid2";
- mysql_query($query);
+ $retval = BoincWorkunit::update_aux("transition_time=$now where $wuid1<=id and id<=$wuid2");
+ return 0;
+}
+// like above, but if a workunit has a result that's already sent,
+// don't cancel the workunit
+//
+function cancel_wus_if_unsent($id1, $id2) {
+ $wus = BoincWorkunit::enum("id >= $id1 and id <= $id2");
+ foreach ($wus as $wu) {
+ $results = BoincResult::enum("workunitid=$wu->id and server_state > 2");
+ if (count($results)) continue;
+ $retval = BoincResult::update_aux("server_state=5, outcome=5 where workunitid=$wu->id");
+ if (!$retval) {
+ error_page("result update failed");
+ }
+ if (!$wu->update("error_mask=error_mask|16")) {
+ error_page("WU update failed");
+ }
+ }
return 0;
}
+function app_version_desc($avid) {
+ switch ($avid) {
+ case ANON_PLATFORM_UNKNOWN:
+ return "Anonymous platform: unknown type";
+ case ANON_PLATFORM_CPU:
+ return "Anonymous platform: CPU";
+ case ANON_PLATFORM_NVIDIA:
+ return "Anonymous platform: NVIDIA GPU";
+ case ANON_PLATFORM_ATI:
+ return "Anonymous platform: AMD GPU";
+ case ANON_PLATFORM_INTEL:
+ return "Anonymous platform: Intel GPU";
+ }
+ if ($avid <= 0) {
+ return "unknown: $avid";
+ }
+ $av = BoincAppVersion::lookup_id($avid);
+ if ($av) {
+ $p = BoincPlatform::lookup_id($av->platformid);
+ if ($p) {
+ return sprintf("%.2f", $av->version_num/100)." $p->name [$av->plan_class]";
+ } else {
+ return sprintf("%.2f", $av->version_num/100)." MISSING PLATFORM $av->platformid [$av->plan_class]";
+ }
+ } else {
+ return "App version missing ($avid)";
+ }
+}
+
+////// badge-related stuff
+
+function get_badge($name, $title, $image_url) {
+ $b = BoincBadge::lookup("name='$name'");
+ if ($b) return $b;
+ $now = time();
+ $id = BoincBadge::insert("(create_time, name, title, image_url) values ($now, '$name', '$title', 'img/$image_url')");
+ $b = BoincBadge::lookup_id($id);
+ if ($b) return $b;
+ die("can't create badge $name\n");
+}
+
+function assign_badge($is_user, $item, $badge) {
+ $now = time();
+ if ($is_user) {
+ $bbu = BoincBadgeUser::lookup("user_id=$item->id and badge_id=$badge->id");
+ if ($bbu) {
+ $bbu->update("reassign_time=$now where user_id=$item->id and badge_id=$badge->id");
+ } else {
+ BoincBadgeUser::insert("(create_time, user_id, badge_id, reassign_time) values ($now, $item->id, $badge->id, $now)");
+ }
+ } else {
+ $bbt = BoincBadgeTeam::lookup("team_id=$item->id and badge_id=$badge->id");
+ if ($bbt) {
+ $bbt->update("reassign_time=$now where team_id=$item->id and badge_id=$badge->id");
+ } else {
+ BoincBadgeTeam::insert("(create_time, team_id, badge_id, reassign_time) values ($now, $item->id, $badge->id, $now)");
+ }
+ }
+}
+
+// unassign all badges except the given one
+//
+function unassign_badges($is_user, $item, $badges, $k) {
+ $list = null;
+ for ($i=0; $i<count($badges); $i++) {
+ if ($i == $k) continue;
+ $badge = $badges[$i];
+ if ($list) {
+ $list .= ",$badge->id";
+ } else {
+ $list = "$badge->id";
+ }
+ }
+ if ($is_user) {
+ BoincBadgeUser::delete("user_id=$item->id and badge_id in ($list)");
+ } else {
+ BoincBadgeTeam::delete("team_id=$item->id and badge_id in ($list)");
+ }
+}
+
+////// end badge-related stuff
+
+function running_from_web_server() {
+ return array_key_exists("SERVER_PORT", $_SERVER);
+}
+
if (isset($cli_only)) {
- if (array_key_exists("SERVER_PORT", $_SERVER)) {
+ if (running_from_web_server()) {
die("This script is intended to be run from the command line,
not from the web server."
);
diff --git a/html/inc/web_rpc_api.inc b/html/inc/web_rpc_api.inc
new file mode 100644
index 0000000..36c2691
--- /dev/null
+++ b/html/inc/web_rpc_api.inc
@@ -0,0 +1,85 @@
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// PHP interfaces to some of BOINC's Web RPCs
+
+function lookup_account(
+ $project_url,
+ $email_addr,
+ $passwd_hash
+) {
+ $url = $project_url."/lookup_account.php?email_addr=".urlencode($email_addr)."&passwd_hash=$passwd_hash";
+ $reply = file_get_contents($url);
+ if (!$reply) return array(null, -1, "HTTP error");
+ $r = @simplexml_load_string($reply);
+ if (!$r) {
+ return array(null, -1, "Can't parse reply XML:\n$reply");
+ }
+ $auth = (string)$r->authenticator;
+ if ($auth) {
+ return array($auth, 0, null);
+ } else {
+ return array(null, (int)$r->error_num, (string)$r->error_msg);
+ }
+}
+
+// return (authenticator, errmsg)
+//
+function create_account(
+ $project_url,
+ $email_addr,
+ $passwd_hash,
+ $user_name
+) {
+ $url = $project_url."/create_account.php?email_addr=".urlencode($email_addr)."&passwd_hash=$passwd_hash&user_name=".urlencode($user_name);
+
+ $reply = file_get_contents($url);
+ if (!$reply) return array(null, -1, "HTTP error");
+ $r = @simplexml_load_string($reply);
+ if (!$r) {
+ return array(null, -1, "Can't parse reply XML:\n$reply");
+ }
+ $auth = (string)$r->authenticator;
+ if ($auth) {
+ return array($auth, 0, null);
+ } else {
+ return array(null, (int)$r->error_num, (string)$r->error_msg);
+ }
+}
+
+function example1() {
+ $x = create_account(
+ "http://isaac.ssl.berkeley.edu/test/",
+ "john at a.b.c",
+ "12345678901234567890123456789012",
+ "John Doe"
+ );
+ print_r($x);
+}
+
+function example2() {
+ $x = lookup_account(
+ "http://isaac.ssl.berkeley.edu/test/",
+ "davea at ssl.berkeley.edu",
+ "xxx"
+ );
+ print_r($x);
+}
+
+//example2();
+?>
diff --git a/html/inc/xml.inc b/html/inc/xml.inc
index 423e6dc..7883f24 100644
--- a/html/inc/xml.inc
+++ b/html/inc/xml.inc
@@ -18,13 +18,14 @@
require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
+require_once("../inc/common_defs.inc");
function db_init_xml() {
if (web_stopped()) {
- return -183;
+ return ERR_PROJECT_DOWN;
}
$db = BoincDb::get();
- if (!$db) return -138;
+ if (!$db) return ERR_DB_CANT_CONNECT;
return 0;
}
diff --git a/html/languages/translations/ca.po b/html/languages/translations/ca.po
index d4acc86..7efbc71 100644
--- a/html/languages/translations/ca.po
+++ b/html/languages/translations/ca.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-09 22:00+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-03 21:30+0000\n"
"Last-Translator: Xavier <xavi.mormur at gmail.com>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: ca\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1384034433.0\n"
+"X-POOTLE-MTIME: 1391463057.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Català"
@@ -193,7 +193,7 @@ msgstr "Cercar en els fòrums"
msgid "Advanced search"
msgstr "Recerca avançada"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Missatges privats"
@@ -203,8 +203,8 @@ msgstr "Missatges privats"
msgid "Questions and Answers"
msgstr "Preguntes i respostes"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -270,7 +270,7 @@ msgstr "No llegit"
msgid "Message %1"
msgstr "Missatge %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "ocult"
@@ -485,7 +485,7 @@ msgstr "No es pot publicar en un fil ocult."
msgid "Thread"
msgstr "Fil"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Correu"
@@ -494,7 +494,7 @@ msgstr "Correu"
msgid "Views"
msgstr "Opinions"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Últim correu"
@@ -532,7 +532,7 @@ msgid "Home"
msgstr "Inici"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Treball"
@@ -598,9 +598,9 @@ msgid "Created"
msgstr "Creat"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -776,7 +776,7 @@ msgstr "Últim contacte"
msgid "Computer info"
msgstr "Informació de l'ordinador"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Categoria"
@@ -785,9 +785,9 @@ msgstr "Categoria"
msgid "Avg. credit"
msgstr "Crèdit promig"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -875,8 +875,8 @@ msgstr "Només els ordinadors actius els darrers 30 dies"
msgid "Computer ID"
msgstr "ID de l'ordinador"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -912,7 +912,7 @@ msgstr "Bústia d'entrada"
msgid "Write"
msgstr "Escriure"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Enviar un missatge privat"
@@ -1685,7 +1685,7 @@ msgstr "Temps informat<br />o termini"
msgid "explain"
msgstr "explicar"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Estatus"
@@ -1777,9 +1777,9 @@ msgstr "Paraules clau"
msgid "Find teams with these words in their names or descriptions"
msgstr "Trobar equips amb aquestes paraules en els seus noms o descripcions"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1787,7 +1787,7 @@ msgstr "Trobar equips amb aquestes paraules en els seus noms o descripcions"
msgid "Country"
msgstr "País"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tipus d'equip"
@@ -1815,8 +1815,8 @@ msgstr "Sol·licitat per vostè"
msgid "founder response deadline is %1"
msgstr "el temps de resposta del fundador es %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Cap"
@@ -1840,27 +1840,27 @@ msgstr "Descripció"
msgid "Web site"
msgstr "Pàgina web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Estadístiques multi-projecte"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipus"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Panell de missatges"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Fils"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Ajuntar-se a aquest equip"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1869,79 +1869,79 @@ msgstr ""
"ajuntant-se a un equip permet als seus fundadors accedir a la vostra adreça "
"de correu"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "No s'accepten nous membres"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Canvi sol·licitat per el fundador"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Resposta per %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Canvi de l'equip fundador"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Membres"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fundador"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administradors"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nous membres en el darrer dia"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Total de membres"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "mirar"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Membres actius"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Membres amb crèdits"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrador"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Anteriors %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Següent %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Equip inexistent."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Aquesta operació requereix ser fundador."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Aquesta operació requereix privilegis d'administrador d'equip"
@@ -1953,7 +1953,7 @@ msgstr ""
"ADVERTÈNCIA: Aquest és un equip de BOINC general. Si vostè fa canvis aquí, "
"aviat seran sobreescrits. Modificar %1l'equip BOINC general%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1962,47 +1962,47 @@ msgstr ""
"projecte (compartició de recursos, preferències gràfiques) seran visibles "
"per a tothom."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nom de l'equip, versió text"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "No utilitzi etiquetes HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nom de l'equip, versió HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Pot utilitzar %1algunes etiquetes HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Si desconeix HTML, no seleccioni aquesta opció."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL de la pàgina web de l'equip, si en té"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sense \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Aquesta URL enllaçarà amb la pàgina de l'equip des d'aquest lloc."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Descripció de l'equip"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Acceptar nous membres?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Perfil d'usuari"
@@ -2035,7 +2035,7 @@ msgid "Computers on this account"
msgstr "Ordinadors d'aquest compte"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Mirar"
@@ -2052,8 +2052,8 @@ msgstr "Estadístiques multi-projecte"
msgid "Account"
msgstr "Compte"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Grup"
@@ -2082,7 +2082,7 @@ msgstr "Informació del compte"
msgid "Email address"
msgstr "Adreça de correu"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2090,7 +2090,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Codi postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 membre des de"
@@ -2110,7 +2110,7 @@ msgstr "contrasenya"
msgid "other account info"
msgstr "altre informació del compte"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID d'usuari"
@@ -2156,96 +2156,96 @@ msgstr "preferències de %1"
msgid "Community"
msgstr "Comunitat"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Esborrar"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Crear"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Perfil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 correus"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notificacions"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Deixar el grup"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrador"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(petició de canvi del fundador pendent)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Membre de l'equip"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "trobar un grup"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fundador però no membre de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Trobar amics"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amics"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Ordinadors"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donant"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contactar"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Aquesta persona és un amic"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Finalitzar amistat"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Petició pendent"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Afegir com amic"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "el nom d'usuari no pot tenir espais en blanc al principi o al final"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "no es pot deixar en blanc el nom d'usuari"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "el nom d'usuari no pot contenir etiquetes HTML"
@@ -2324,7 +2324,7 @@ msgstr "No es pot connectar a la base de dades - si us plau, provi-ho més tard"
msgid "Unable to select database - please try again later"
msgstr "No es pot seleccionar la base de dades - si us plau, provi-ho més tard"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Mantenir-me en aquest ordinador"
@@ -2528,7 +2528,7 @@ msgstr "crear o unir-se a equip"
msgid "User of the day"
msgstr "Usuari del dia"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Estat del servidor"
@@ -3617,6 +3617,8 @@ msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
+"Aquest projecte no ha creat un missatge de correu electrònic - si us plau "
+"notifica-ho als seus administradors"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -5667,135 +5669,135 @@ msgstr "Aturat"
msgid "Disabled"
msgstr "Desactivat"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Estat del projecte"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Versió del programari servidor: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programa"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Ordinador central"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "pàgines web amb dades auto-actualizables"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "carregar/baixar del servidor"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "planificador"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Executant:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "El programa està funcionant amb normalitat"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "No s'està executant:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "El programa a fallat o el projecte està aturat"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Desactivat:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "El programa està desactivat"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Estat del comput"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "El servidor de base de dades no és accessible"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tasques a punt per enviar"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tasques en curs"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Workunits esperant la validació"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Workunits esperant l'assimilació"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Workunits esperant l'eliminació d'arxius"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Tasques esperan l'eliminació d'arxius"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Retard en les transicións (hores)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Usuaris"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "amb crèdit recent"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "amb crèdit"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registrats en les últimes 24 hores"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOPs actuals"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tasques per aplicació"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplicació"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "no enviat"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "en progrés"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "mitjana de temps d'execució dels últims 100 resultats en h (mín-màx)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "usuaris en les últimes 24 hores"
@@ -6072,6 +6074,10 @@ msgstr "Nou fundador?"
msgid "Change founder"
msgstr "Canviar el fundador"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "No hi ha usuaris als que transferir l'equip."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Ha d'escollir un nom d'equip que no sigui en blanc"
diff --git a/html/languages/translations/cs.po b/html/languages/translations/cs.po
index c55e23a..501e83e 100644
--- a/html/languages/translations/cs.po
+++ b/html/languages/translations/cs.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-08-30 20:59+0000\n"
"Last-Translator: Lycan <santdel at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -194,7 +194,7 @@ msgstr "Hledat v diskuzních fórech"
msgid "Advanced search"
msgstr "Pokročilé hledání"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Soukromé zprávy"
@@ -204,8 +204,8 @@ msgstr "Soukromé zprávy"
msgid "Questions and Answers"
msgstr "Otázky a odpovědi"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -271,7 +271,7 @@ msgstr "Nepřečtené"
msgid "Message %1"
msgstr "Zpráva %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "skryté"
@@ -479,7 +479,7 @@ msgstr "Nelze posílat příspěvky do schovaného vlákna."
msgid "Thread"
msgstr "Vlákno"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Příspěvky"
@@ -488,7 +488,7 @@ msgstr "Příspěvky"
msgid "Views"
msgstr "Zobrazení"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Poslední příspěvek"
@@ -526,7 +526,7 @@ msgid "Home"
msgstr "Doma"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "V práci"
@@ -592,9 +592,9 @@ msgid "Created"
msgstr "Vytvořen"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -770,7 +770,7 @@ msgstr "Poslední kontakt"
msgid "Computer info"
msgstr "Informace o počítači"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Pozice"
@@ -779,9 +779,9 @@ msgstr "Pozice"
msgid "Avg. credit"
msgstr "Průměrný kredit"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -869,8 +869,8 @@ msgstr "Jen počítače aktivní za posledních 30 dnů"
msgid "Computer ID"
msgstr "ID počítače"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -906,7 +906,7 @@ msgstr "Schránka"
msgid "Write"
msgstr "Psát zprávu"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Poslat soukromou zprávu"
@@ -1673,7 +1673,7 @@ msgstr "Čas nahlášení<br/>nebo lhůta pro dokončení"
msgid "explain"
msgstr "vysvětlení"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Stav"
@@ -1766,9 +1766,9 @@ msgstr "Klíčová slova"
msgid "Find teams with these words in their names or descriptions"
msgstr "Hledat týmy s těmito slovy v názvu nebo popisu"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1776,7 +1776,7 @@ msgstr "Hledat týmy s těmito slovy v názvu nebo popisu"
msgid "Country"
msgstr "Země"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Typ týmu"
@@ -1804,8 +1804,8 @@ msgstr "Požadováno vámi"
msgid "founder response deadline is %1"
msgstr "lhůta na odpověď vlastníka je %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Žádná"
@@ -1829,27 +1829,27 @@ msgstr "Popis"
msgid "Web site"
msgstr "Webové stránky"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Meziprojektové statistiky"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Typ"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Diskuzní fórum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Vlákna"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Připojit se k tomuto týmu"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1857,79 +1857,79 @@ msgstr ""
"Poznámka: pokud máte v předvolbách projektu 'OK u emailu', připojením k týmu "
"poskytnete jeho vlastníkovi přístup k vaší emailové adrese."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nepřijímá nové členy"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Požádáno o změnu vlastnictví"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Odpověď od %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Změna vlastníka týmu"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Členové"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Vlastník"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administrátoři"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Noví členové za poslední den"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Celkem členů"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "zobrazit"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktivní členové"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Členové s kreditem"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrátor"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Předchozí %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Další %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Takový tým neexistije."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Tuto operaci může provádět jen vlastník."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Tuto operaci může provést jen administrátor týmu"
@@ -1941,7 +1941,7 @@ msgstr ""
"VAROVÁNÍ: toto je globální BOINC tým. Změny zanesené zde budou brzy "
"přepsány. Upravte namísto toho přímo %1globální BOINC tým%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1949,48 +1949,48 @@ msgstr ""
"%1Poznámka k soukromí%2: pokud založíte tým, vaše projektové předvolby "
"(podíl prostředků, nastavení grafiky) budou veřejně viditelné."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Název týmu, textová verze"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nepoužívejte HTML tagy."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Název týmu, HTML verze"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Můžete použít %1tyto HTML tagy%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Pokud neznáte HTML, nevyplňujte tento box."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Webová stránka týmu, pokud je"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "bez \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
"Tato adresa bude použita jako odkaz z hlavní týmové stránky na tomto webu."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Popis týmu"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Povolit nové členy?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil uživatele"
@@ -2023,7 +2023,7 @@ msgid "Computers on this account"
msgstr "Počítače na tomto účtu"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Zobrazit"
@@ -2040,8 +2040,8 @@ msgstr "Meziprojektové statistiky"
msgid "Account"
msgstr "Účet"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Tým"
@@ -2070,7 +2070,7 @@ msgstr "Informace o účtu"
msgid "Email address"
msgstr "Emailová adresa"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL adresa"
@@ -2078,7 +2078,7 @@ msgstr "URL adresa"
msgid "Postal code"
msgstr "Směrovací číslo"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "Členem %1 od"
@@ -2098,7 +2098,7 @@ msgstr "heslo"
msgid "other account info"
msgstr "další informace o účtu"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Uživatelské ID"
@@ -2144,96 +2144,96 @@ msgstr "%1 předvolby"
msgid "Community"
msgstr "Komunita"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Smazat"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Vytvořit"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 příspěvků"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Oznámení"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Opustit tým"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Spravovat"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(nevyřízený požadavek na změnu vlastnictví)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Člen týmu"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "najít tým"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Vlastník, ale ne člen týmu"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Najít přátele"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Přátelé"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Počítače"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Dárce"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Tento člověk je váš přítel"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Zrušit přátelství"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Nevyřízený požadavek"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Přidat mezi přátele"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "uživatelské jméno nemůže začínat nebo končit mezerou"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "uživatelské jméno nemůže být prázdné"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "uživatelské jméno nemůže obsahovat HTML tagy"
@@ -2311,7 +2311,7 @@ msgstr "Nelze se připojit k databázi - zkuste to prosím později."
msgid "Unable to select database - please try again later"
msgstr "Nelze vybrat databázi - zkuste to prosím později."
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Zapamatovat si přihlášení na tomto počítači"
@@ -2514,7 +2514,7 @@ msgstr ""
msgid "User of the day"
msgstr "Uživatel dne"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Stav serveru"
@@ -5605,135 +5605,135 @@ msgstr "Zastavený"
msgid "Disabled"
msgstr "Vypnutý"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Stav projektu"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Verze software na serveru: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Program"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Počítač"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "webové stránky s daty"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "server pro posílání/nahrávání dat"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "plánovač"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Spuštěný:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Program běží normálně"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Zastavený:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Program selhal, nebo je projekt odstavený"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Vypnutý:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Program je vypnutý"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Stav výpočtů"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Databázový server není dostupný"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Úkoly připravené k zaslání"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Probíhající úkoly"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Pracovní jednotky čekající na validaci"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Pracovní jednotky čekající na začlenění"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Pracovní jednotky čekající na smazání"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Úkoly čekající na smazání"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Zpoždění přechodového serveru (hod)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Uživatelé"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "s nedávným kreditem"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "s kreditem"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registrovaní během posledních 24 hod"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "aktuální výkon GigaFLOPů"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Úkoly podle aplikace"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplikační program"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "neodesláno"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "probíhá"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "průměrná doba běhu posledních 100 výsledků v h (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "uživatelé během posledních 24 hodin"
@@ -6001,6 +6001,10 @@ msgstr "Nový vlastník?"
msgid "Change founder"
msgstr "Změnit vlastníka"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Je třeba zvolit neprázdné jméno týmu."
diff --git a/html/languages/translations/de.po b/html/languages/translations/de.po
index 2508691..9aa7cc8 100644
--- a/html/languages/translations/de.po
+++ b/html/languages/translations/de.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Project (Generic) 6.x\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-16 14:35+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-11 09:02+0000\n"
"Last-Translator: Christian <djangofett at gmx.net>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: de\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1384612558.0\n"
+"X-POOTLE-MTIME: 1389430955.0\n"
# The name of this language in this language
msgid "LANG_NAME_NATIVE"
@@ -198,7 +198,7 @@ msgstr "Erweiterte Suche"
# ########################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Private Nachrichten"
@@ -210,8 +210,8 @@ msgstr "Private Nachrichten"
msgid "Questions and Answers"
msgstr "Fragen und Antworten"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -281,7 +281,7 @@ msgstr "ungelesen"
msgid "Message %1"
msgstr "Nachricht %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "verborgen"
@@ -498,7 +498,7 @@ msgstr "Themen"
# ########################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Beiträge"
@@ -507,7 +507,7 @@ msgstr "Beiträge"
msgid "Views"
msgstr "Ansichten"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Letzter Beitrag"
@@ -545,7 +545,7 @@ msgid "Home"
msgstr "zu Hause"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Arbeit"
@@ -611,9 +611,9 @@ msgid "Created"
msgstr "Erstellt"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -791,7 +791,7 @@ msgstr "Letzter Kontakt"
msgid "Computer info"
msgstr "Informationen zum Computer"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -800,9 +800,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Punktedurchschnitt"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -892,8 +892,8 @@ msgstr "Nur aktive Computer der letzten 30 Tage"
msgid "Computer ID"
msgstr "Computer ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -929,7 +929,7 @@ msgstr "Posteingang"
msgid "Write"
msgstr "Schreiben"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Private Nachricht versenden"
@@ -1705,7 +1705,7 @@ msgstr "Meldezeit<br />oder Ablaufdatum"
msgid "explain"
msgstr "Erklärung"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1799,9 +1799,9 @@ msgstr "Schlagwörter"
msgid "Find teams with these words in their names or descriptions"
msgstr "Findet Teams mit diesen Begriffen im Namen oder der Beschreibung."
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1809,7 +1809,7 @@ msgstr "Findet Teams mit diesen Begriffen im Namen oder der Beschreibung."
msgid "Country"
msgstr "Land"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Typ des Teams"
@@ -1837,8 +1837,8 @@ msgstr "Von Ihnen angefordert"
msgid "founder response deadline is %1"
msgstr "Die Rückmeldezeit des Gründers beträgt %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Keines"
@@ -1862,27 +1862,27 @@ msgstr "Beschreibung"
msgid "Web site"
msgstr "Internetseite"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Projektübergreifende Statistiken"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Typ"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Diskussionsforen"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Themen"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Diesem Team beitreten"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1890,79 +1890,79 @@ msgstr ""
"Hinweis: Wenn Sie E-Mails in den Projekteinstellungen erlauben, kann der "
"Gründer des Teams Ihre E-Mail-Adresse einsehen."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Akzeptiert keine neuen Mitglieder"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Wechsel des Gründerstatus beantragt"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Rückmeldung bis %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Teamgründer wechseln"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Mitglieder"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Gründer"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Team-Admins"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Neue Mitglieder (letzte 24h)"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Mitglieder insgesamt"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "Anzeigen"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "aktive Mitglieder"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Mitglieder mit Punkten"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Admin"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Vorherige %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Nächste %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Kein Team gefunden."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Diese Aktion benötigt den Gründerstatus."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Diese Aktion benötigt die Team-Admin Berechtigung."
@@ -1975,7 +1975,7 @@ msgstr ""
"automatisch wieder überschrieben. Bearbeite das %1BOINC-weite Team%2 "
"stattdessen."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1984,47 +1984,47 @@ msgstr ""
"Projekteinstellungen (Ressourcenverteilung, Grafikeinstellungen) für jeden "
"sichtbar."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Teamname (Textversion)"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Keine HTML-Tags möglich."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Teamname (HTML-Version)"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Sie können nur %1bestimmte HTML-Tags%2 verwenden."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Wenn Sie HTML nicht kennen, lassen Sie dieses Feld frei."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL der Team-Internetseite, wenn vorhanden"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "ohne \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Diese URL wird als Link zur Team-Internetseite benutzt."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Beschreibung des Teams"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Neue Mitglieder akzeptieren?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Benutzerprofil"
@@ -2057,7 +2057,7 @@ msgid "Computers on this account"
msgstr "Computer, die zu diesem Konto gehören"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Anzeigen"
@@ -2074,8 +2074,8 @@ msgstr "Projektübergreifende Statistiken"
msgid "Account"
msgstr "Konto"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Team"
@@ -2104,7 +2104,7 @@ msgstr "Kontoinformationen"
msgid "Email address"
msgstr "E-Mail-Adresse"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2112,7 +2112,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postleitzahl"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 Mitglied seit"
@@ -2132,7 +2132,7 @@ msgstr "Passwort"
msgid "other account info"
msgstr "Andere Kontoinformationen"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Benutzer ID"
@@ -2178,96 +2178,96 @@ msgstr "%1 Einstellungen"
msgid "Community"
msgstr "Community"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Löschen"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Erstellen"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 Beiträge"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Benachrichtigungen"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Team verlassen"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Verwalten"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(ausstehender Gründerwechsel)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Mitglied im Team"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "Team finden"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Gründer aber nicht Mitglied von"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Freunde finden"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Freunde"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Computer"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Spender"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Diese Person ist ein Freund"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Freundschaft aufheben"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Anfrage läuft"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "als Freund hinzufügen"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "Der Benutzername kann keine Leerzeichen am Anfang oder Ende beinhalten"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "Der Benutzername darf nicht leer sein."
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "Der Benutzername darf keine HTML-Tags beinhalten."
@@ -2354,7 +2354,7 @@ msgstr ""
"Es ist momentan nicht möglich die Datenbank auszuwählen - Bitte versuchen "
"Sie es später noch einmal"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Auf diesem Computer angemeldet bleiben"
@@ -2570,7 +2570,7 @@ msgstr "ein Team erstellen oder beitreten"
msgid "User of the day"
msgstr "Benutzer des Tages"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Serverstatus"
@@ -3678,6 +3678,8 @@ msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
+"Das Projekt konnte keine E-Mail versenden - bitte informieren Sie die "
+"Administratoren"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -5770,137 +5772,137 @@ msgstr "Nicht gestartet"
msgid "Disabled"
msgstr "Deaktiviert"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Projektstatus"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Softwareversion des Servers: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programm"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Rechner"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "Datenbankbasierte Webseiten"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "Upload/Download Server"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "Scheduler"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Gestartet:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Programm läuft normal"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Nicht gestartet:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programm produzierte Fehler oder das Projekt ist gestoppt"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Deaktiviert:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Programm ist deaktiviert"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Status der Berechnung"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Der Datenbankserver ist nicht verfügbar."
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Aufgaben bereit zum versenden"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Aufgaben in Arbeit"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Arbeitspakete warten auf Überprüfung"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Arbeitspakete warten auf Aufnahme"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Arbeitspakete bereit zum Löschen"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Aufgaben bereit zum Löschen"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Rückstand des Transitioners (Stunden)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Benutzer"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "mit zuletzt verdienten Punkten"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "mit Punkten"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registriert in den letzten 24h"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "aktuelle GigaFLOPs"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Aufgaben pro Anwendung"
# ########################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "Anwendung"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "ungesendet"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "in Bearbeitung"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "Durchschnittliche Laufzeit der letzten 100 Berechnungen in h (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "Benutzer in den letzten 24h"
@@ -6174,6 +6176,10 @@ msgstr "Neuer Gründer?"
msgid "Change founder"
msgstr "Gründer wechseln"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Es gibt keinen Benutzer der das Team übernehmen kann."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Der Name des Teams darf nicht leer sein."
diff --git a/html/languages/translations/es.po b/html/languages/translations/es.po
index 9ffadeb..6fa8d19 100644
--- a/html/languages/translations/es.po
+++ b/html/languages/translations/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-09-22 20:57+0000\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: \n"
@@ -196,7 +196,7 @@ msgstr "Búsqueda avanzada"
# ########################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Mensajes privados"
@@ -208,8 +208,8 @@ msgstr "Mensajes privados"
msgid "Questions and Answers"
msgstr "Preguntas y Respuestas"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -281,7 +281,7 @@ msgstr "No leído"
msgid "Message %1"
msgstr "Mensaje %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "oculto"
@@ -487,7 +487,7 @@ msgstr "Hilo"
# ########################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Mensajes"
@@ -496,7 +496,7 @@ msgstr "Mensajes"
msgid "Views"
msgstr "Visitas"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Último mensaje"
@@ -540,7 +540,7 @@ msgid "Home"
msgstr "Inicio"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Trabajo"
@@ -606,9 +606,9 @@ msgid "Created"
msgstr "Creado"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -789,7 +789,7 @@ msgstr "Último contacto"
msgid "Computer info"
msgstr "Información del ordenador"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Posición"
@@ -798,9 +798,9 @@ msgstr "Posición"
msgid "Avg. credit"
msgstr "Crédito promedio"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -888,8 +888,8 @@ msgstr "Sólo ordenadores activos en los últimos 30 días"
msgid "Computer ID"
msgstr "ID del ordenador"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -927,7 +927,7 @@ msgstr "Escribir"
# ########################################
# Private messages
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Enviar mensaje privado"
@@ -1699,7 +1699,7 @@ msgstr "Límite de tiempo para informar"
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Estado"
@@ -1797,9 +1797,9 @@ msgstr "Palabras clave"
msgid "Find teams with these words in their names or descriptions"
msgstr "Buscar equipos con estas palabras en sus nombres o descripciones"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1807,7 +1807,7 @@ msgstr "Buscar equipos con estas palabras en sus nombres o descripciones"
msgid "Country"
msgstr "País"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tipo de equipo"
@@ -1837,8 +1837,8 @@ msgstr "Solicitado por usted"
msgid "founder response deadline is %1"
msgstr "el tiempo límite para que el fundador responda es %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Ninguno"
@@ -1862,27 +1862,27 @@ msgstr "Descripción"
msgid "Web site"
msgstr "Sitio web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Estadísticas entre proyectos"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipo"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Foro"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Hilos"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Unirse a este equipo"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1891,79 +1891,79 @@ msgstr ""
"preferencias de su proyecto, uniéndose a un equipo le da a su fundador "
"acceso a su dirección de correo electrónico."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "No se aceptan nuevos miembros"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Petición de cambio del fundador"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Respondido por %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Cambio del fundador del equipo"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Miembros"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fundador"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administradores"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Miembros nuevos en el último día"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Total de miembros"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "ver"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Miembros activos"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Miembros con crédito"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrador"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Anteriores %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Siguiente %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "No existe dicho equipo."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Esta operación requiere ser fundador."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Esta operación requiere privilegios de administrador de equipo"
@@ -1973,7 +1973,7 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1982,48 +1982,48 @@ msgstr ""
"proyecto (recursos compartidos, preferencia gráficas) serán visibles para el "
"público."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nombre del equipo, versión en texto"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "No use etiquetas HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nombre del equipo, versión HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Puede usar un %1número limitado de etiquetas HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Si no conoce el HTML, deje este recuadro en blanco."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL de la página web del equipo, si la hay"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sin \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
"Este URL será puesto como vínculo en la página del equipo en este sitio."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Descripción del equipo"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "¿Aceptar nuevos miembros?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Perfil de usuario"
@@ -2058,7 +2058,7 @@ msgid "Computers on this account"
msgstr "Ordenadores en esta cuenta"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Ver"
@@ -2075,8 +2075,8 @@ msgstr "Estadísticas interproyectos"
msgid "Account"
msgstr "Cuenta"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Equipo"
@@ -2105,7 +2105,7 @@ msgstr "Información de la cuenta"
msgid "Email address"
msgstr "Dirección de correo electrónico"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2113,7 +2113,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Código postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "miembro de %1 desde"
@@ -2133,7 +2133,7 @@ msgstr "contraseña"
msgid "other account info"
msgstr "otros datos de la cuenta"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID de usuario"
@@ -2179,100 +2179,100 @@ msgstr "Preferencias de %1"
msgid "Community"
msgstr "Comunidad"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Borrar"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Crear"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Perfil"
# ########################################
# Forum
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 mensajes"
# ########################################
# Apps page (apps.php)
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notificaciones"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Separase del equipo"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrar"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(petición de modificación del fundador pendiente)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Miembro del equipo"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "buscar un equipo"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fundador pero no miembro de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Encontrar amigos"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amigos"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Ordenadores"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donante"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contactar"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Esta persona es un amigo"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Cancelar amistad"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Solicitud pediente"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Añadir como amigo"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2352,7 +2352,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Permanecer conectado en este ordenador"
@@ -2564,7 +2564,7 @@ msgstr ""
msgid "User of the day"
msgstr "Usuario del día"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Estado del servidor"
@@ -5692,140 +5692,140 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tareas en progreso"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# ########################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Programas"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "No enviado"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "En progreso"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -6088,6 +6088,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "El nombre del equipo no puede estar en blanco"
diff --git a/html/languages/translations/fi.po b/html/languages/translations/fi.po
index 844ac6b..7eb8923 100644
--- a/html/languages/translations/fi.po
+++ b/html/languages/translations/fi.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-25 11:56+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-21 20:27+0000\n"
"Last-Translator: Sami Nordlund <sami.nordlund at kolumbus.fi>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fi\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385380598.0\n"
+"X-POOTLE-MTIME: 1393014450.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "English"
@@ -191,7 +191,7 @@ msgstr "Hae foorumeista"
msgid "Advanced search"
msgstr "Tarkennettu haku"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Yksityisviestit"
@@ -201,8 +201,8 @@ msgstr "Yksityisviestit"
msgid "Questions and Answers"
msgstr "Kysymykset ja vastaukset"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "Lukematon"
msgid "Message %1"
msgstr "Viesti %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "piilotettu"
@@ -480,7 +480,7 @@ msgstr "Piilotettuun ketjuun ei voi kirjoittaa."
msgid "Thread"
msgstr "Viestiketju"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Viestit"
@@ -489,7 +489,7 @@ msgstr "Viestit"
msgid "Views"
msgstr "Katsottu"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Viimeisin viesti"
@@ -527,7 +527,7 @@ msgid "Home"
msgstr "Koti"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Työ"
@@ -537,7 +537,7 @@ msgstr "Koulu"
#: ../inc/host.inc:59
msgid "Mobile"
-msgstr ""
+msgstr "Mobiili"
#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
@@ -593,9 +593,9 @@ msgid "Created"
msgstr "Luotu"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -771,7 +771,7 @@ msgstr "Viimeksi yhteydessä"
msgid "Computer info"
msgstr "Tietokoneen tiedot"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Sija"
@@ -780,9 +780,9 @@ msgstr "Sija"
msgid "Avg. credit"
msgstr "Keskim. pisteet"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -871,8 +871,8 @@ msgstr "Vain kuukauden aikana yhteydessä olleet koneet"
msgid "Computer ID"
msgstr "Tietokoneen tunniste"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -908,7 +908,7 @@ msgstr "Saapuneet"
msgid "Write"
msgstr "Kirjoita"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Lähetä yksityisviesti"
@@ -1669,7 +1669,7 @@ msgstr "Raportointiaika<br />tai takaraja"
msgid "explain"
msgstr "selite"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Tila"
@@ -1761,9 +1761,9 @@ msgstr "Hakusanat"
msgid "Find teams with these words in their names or descriptions"
msgstr "Etsi tiimejä, joiden nimessä tai kuvauksessa ovat nämä sanat"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1771,7 +1771,7 @@ msgstr "Etsi tiimejä, joiden nimessä tai kuvauksessa ovat nämä sanat"
msgid "Country"
msgstr "Maa"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tiimin tyyppi"
@@ -1799,8 +1799,8 @@ msgstr "Sinun pyytämäsi"
msgid "founder response deadline is %1"
msgstr "perustajan vastauksen takaraja on %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Ei mikään"
@@ -1824,27 +1824,27 @@ msgstr "Kuvaus"
msgid "Web site"
msgstr "Nettisivu"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Projektikohtaiset tilastot"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tyyppi"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Keskustelupalsta"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Viestiketjut"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Liity tähän tiimiin"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1852,79 +1852,79 @@ msgstr ""
"Huom: jos sallit sähköpostin lähettämisen projektin asetuksissa, tiimiin "
"liittyessä sen perustaja saa sähköpostiosoitteesi."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Ei ota uusia jäseniä"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Pyyntö vaihtaa perustaja"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Vastaus %1 mennessä"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Tiimin perustajan vaihto"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Jäsenet"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Perustaja"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Ylläpitäjät"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Uusia jäseniä viimeisen vrk:n aikana"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Jäseniä kaikkiaan"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "katso"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktiivisia jäseniä"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Jäsenet, joilla pisteitä"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Ylläpitäjä"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Edelliset %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Seuraavat %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Tiimiä ei ole."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Toiminto vaatii perustajan oikeudet."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Toiminto vaatii ylläpitäjän oikeudet"
@@ -1937,7 +1937,7 @@ msgstr ""
"tulevat pian ylikirjoitetuksi. Muokkaa sen sijaan %1BOINC-laajuista tiimiä%"
"2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1945,47 +1945,47 @@ msgstr ""
"%1Yksityisyydestä%2: jos luot tiimin, projektisi asetukset (kuten resurssien "
"jako) näkyvät kaikille."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Tiimin nimi, tekstiversio"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Älä käytä HTML-tageja."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Tiimin nimi, HTML-versio"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Voit käyttää %1HTML-tageja rajoitetusti%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Jätä tämä kohta tyhjäksi, jos et osaa HTML:ää."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Tiimin nettisivun osoite, jos on"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "ilman \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Tämä URL linkitetään tiimin sivulta tälle sivulle."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Tiimin kuvaus"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Sallii uudet jäsenet?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Käyttäjäprofiili"
@@ -2018,7 +2018,7 @@ msgid "Computers on this account"
msgstr "Tämän tilin tietokoneet"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Katso"
@@ -2035,8 +2035,8 @@ msgstr "Projektikohtaiset tilastot"
msgid "Account"
msgstr "Tili"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Tiimi"
@@ -2065,7 +2065,7 @@ msgstr "Tilin tiedot"
msgid "Email address"
msgstr "Sähköpostiosoite"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2073,7 +2073,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postinumero"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 jäsen alkaen"
@@ -2093,7 +2093,7 @@ msgstr "salasana"
msgid "other account info"
msgstr "muu tilitieto"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Käyttäjä-ID"
@@ -2138,96 +2138,96 @@ msgstr "%1 asetukset"
msgid "Community"
msgstr "Yhteisö"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Poista"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Luo"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profiili"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 viestiä"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Ilmoitukset"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Irrottaudu tiimistä"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Ylläpitäjä"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(perustajuuden vaihtopyyntö odottaa)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Tiimin jäsen"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "etsi tiimi"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Perustaja mutta ei jäsen tiimissä"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Etsi ystäviä"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Ystävät"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Tietokoneet"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Lahjoittaja"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Yhteydenotto"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Tämä henkilö on ystävä"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Peruuta ystävyys"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Pyyntö odottaa"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Lisää ystäväksi"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "käyttäjänimen alussa tai lopussa ei saa olla välilyöntiä"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "käyttäjänimi ei saa olla tyhjä"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "käyttäjänimi ei saa sisältää HTML-tageja"
@@ -2305,7 +2305,7 @@ msgstr "Tietokantaan ei saada yhteyttä - yritä myöhemmin uudelleen"
msgid "Unable to select database - please try again later"
msgstr "Tietokannan valinta ei onnistu - yritä myöhemmin uudelleen"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Pysy kirjautuneena tällä tietokoneella"
@@ -2511,7 +2511,7 @@ msgstr "luo tiimi tai liity tiimiin"
msgid "User of the day"
msgstr "Päivän käyttäjä"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Palvelimen tila"
@@ -5594,135 +5594,135 @@ msgstr "Ei käynnissä"
msgid "Disabled"
msgstr "Sammutettu"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Projektin tila"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Palvelimen ohjelmistoversio: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Ohjelma"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Kone"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "tietokantaa käyttävät sivut"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "lähettävä/vast.ottava palvelin"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "aikatauluttaja"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Käynnissä:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Ohjelma toimii normaalisti"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Ei käynnissä:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Ohjelma sammui tai projekti on suljettu"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Sammutettu:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Ohjelma on sammutettu"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Laskennan tila"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Tietokantapalvelimeen ei saada yhteyttä"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tehtäviä lähetettävänä"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Suorituksessa olevat"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Varmennusta odottavat työpaketit"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Yhdistämistä odottavat työpaketit"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Poistoa odottavat työpaketit"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Poistoa odottavat paketit"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Siirtokasautuma (tuntia)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Käyttäjiä"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "joilla pisteitä hiljattain"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "joilla pisteitä"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "viimeisen vrk:n aikana rekisteröityneet"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "tämänhetkiset GigaFLOPSit"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tehtävät sovelluksittain"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "sovellus"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "lähettämättä"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "laskennassa"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "viim. 100 paketin keskim. suoritusaika ed. tunnillta (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "käyttäjiä edellisen 24 tunnin aikana"
@@ -5994,6 +5994,10 @@ msgstr "Uusi perustaja?"
msgid "Change founder"
msgstr "Vaihda perustaja"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Tiimiin siirrettäviä käyttäjiä ei ole."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Tiimille pitää valita jokin nimi"
@@ -6732,7 +6736,7 @@ msgstr "Käyttäjää ei ole."
#: ../user/validate_email_addr.php:49
msgid "Error in URL data - can't validate email address"
-msgstr "Virhe URLissa - sähköpostiosoitetta ei voi vahvistaa"
+msgstr "Virhe URL-osoitteessa - sähköpostiosoitetta ei voi vahvistaa"
#: ../user/validate_email_addr.php:54
msgid "Database update failed - please try again later."
diff --git a/html/languages/translations/fr.po b/html/languages/translations/fr.po
index 06c7236..71fd34d 100644
--- a/html/languages/translations/fr.po
+++ b/html/languages/translations/fr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-10-06 20:40+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-02 22:07+0000\n"
"Last-Translator: Jerome Cadet <jerome.cadet at pobox.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fr\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1381092035.0\n"
+"X-POOTLE-MTIME: 1391378827.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "LANG_NAME_NATIVE"
@@ -191,7 +191,7 @@ msgstr "Chercher dans les forums"
msgid "Advanced search"
msgstr "Recherche avancée"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Messages privés"
@@ -201,8 +201,8 @@ msgstr "Messages privés"
msgid "Questions and Answers"
msgstr "Questions / Réponses"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "Non lu"
msgid "Message %1"
msgstr "Message %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "caché"
@@ -378,22 +378,28 @@ msgid ""
" nationality, gender, class or sexuality.\n"
" "
msgstr ""
-" <ul> <li> "
-"Les messages doivent être «adapté aux enfants»: ils ne peuvent pas contenir "
-" de contenu obscène, incitant à "
-"la haine, sexuellement "
-"explicite ou suggestif. <li> Pas de "
-"publicité commerciale. <li> Pas de liens "
-"vers des sites Web ayant un contenu sexuel, "
-" lié aux jeux d'argent ou à "
-"l'intolérance envers les autres. <li> Aucun "
-"messages destinés à gêner ou contrarier d'autres personnes, "
-" ou à détourner un sujet de "
-"conversation. <li> Pas de messages "
-"délibérément hostiles ou insultants. <li> "
-"Pas de commentaires abusifs impliquant la race, la religion, "
-" la nationalité, le sexe, la "
-"classe ou la sexualité. "
+" <ul>\n"
+" <li> Les messages doivent être «adapté aux "
+"enfants»: ils ne peuvent pas contenir\n"
+" de contenu obscène, incitant à "
+"la haine,\n"
+" sexuellement explicite ou "
+"suggestif.\n"
+" <li> Pas de publicité commerciale.\n"
+" <li> Pas de liens vers des sites Web ayant "
+"un contenu sexuel,\n"
+" lié aux jeux d'argent ou à "
+"l'intolérance envers les autres.\n"
+" <li> Aucun messages destinés à gêner ou "
+"contrarier d'autres personnes,\n"
+" ou à détourner un sujet de "
+"conversation.\n"
+" <li> Pas de messages délibérément hostiles "
+"ou insultants.\n"
+" <li> Pas de commentaires abusifs impliquant "
+"la race, la religion,\n"
+" la nationalité, le sexe, la "
+"classe ou la sexualité.\n"
#: ../inc/forum.inc:780
msgid "Rules:"
@@ -481,7 +487,7 @@ msgstr "Vous ne pouvez pas écrire dans une discussion masquée."
msgid "Thread"
msgstr "Sujet"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Messages"
@@ -490,7 +496,7 @@ msgstr "Messages"
msgid "Views"
msgstr "Vues"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Dernier message"
@@ -528,7 +534,7 @@ msgid "Home"
msgstr "Maison"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Travail"
@@ -538,7 +544,7 @@ msgstr "École"
#: ../inc/host.inc:59
msgid "Mobile"
-msgstr ""
+msgstr "Mobile"
#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
@@ -571,7 +577,7 @@ msgstr "Nom de domaine"
#: ../inc/host.inc:98
msgid "Product name"
-msgstr ""
+msgstr "Nom du produit"
#: ../inc/host.inc:102
msgid "Local Standard Time"
@@ -594,9 +600,9 @@ msgid "Created"
msgstr "Créé"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -774,7 +780,7 @@ msgstr "Dernier contact"
msgid "Computer info"
msgstr "Informations sur l'ordinateur"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -783,9 +789,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Crédit moyen"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -874,8 +880,8 @@ msgstr "Uniquement les ordinateurs actifs durant les 30 derniers jours"
msgid "Computer ID"
msgstr "ID de l'ordinateur"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -892,7 +898,7 @@ msgstr "Fusionner les ordinateurs par le nom"
#: ../inc/language_names.inc:61
msgid "Browser default"
-msgstr ""
+msgstr "Navigateur par défaut"
#: ../inc/news.inc:40
msgid "Comment"
@@ -911,7 +917,7 @@ msgstr "Courrier entrant"
msgid "Write"
msgstr "Écrire"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Envoyer un message privé"
@@ -930,9 +936,8 @@ msgid "no such message"
msgstr "message inexistant"
#: ../inc/pm.inc:82
-#, fuzzy
msgid "To"
-msgstr "Pour"
+msgstr "A"
#: ../inc/pm.inc:82
msgid "User IDs or unique usernames, separated with commas"
@@ -1209,9 +1214,9 @@ msgstr ""
"plus %2"
#: ../inc/prefs.inc:344
-#, fuzzy
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
-msgstr "Utiliser le GPU ATI %1 Applicable depuis la version 6.10 et plus %2"
+msgstr ""
+"Utiliser le GPU Intel %1 Applicable depuis la version 7.2 et suivantes %2"
#: ../inc/prefs.inc:358
msgid ""
@@ -1338,16 +1343,19 @@ msgstr "Modifier les préférences de %1"
#: ../inc/prefs.inc:885
msgid "These apply to all BOINC projects in which you participate."
msgstr ""
+"Ceux-ci s'appliquent sur tous les projets BOINC auxquels vous participez."
#: ../inc/prefs.inc:887
msgid ""
"On computers participating in multiple projects, the most recently modified "
"preferences will be used."
msgstr ""
+"Sur les ordinateurs participants à plusieurs projets, les préférences mises "
+"à jours le plus récemment seront utilisées."
#: ../inc/prefs.inc:889
msgid "These preferences do not apply to Android devices."
-msgstr ""
+msgstr "Ces préférences ne sont pas applicables pour les appareils Android."
#: ../inc/prefs.inc:892
msgid "Preferences last modified:"
@@ -1446,7 +1454,7 @@ msgstr "GPU ATI"
#: ../inc/result.inc:57 ../user/host_app_versions.php:28
msgid "Intel GPU"
-msgstr ""
+msgstr "GPU Intel"
#: ../inc/result.inc:65
msgid "Not in DB"
@@ -1697,7 +1705,7 @@ msgstr "Délai reporté<br/>ou date limite"
msgid "explain"
msgstr "explication"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "État"
@@ -1774,9 +1782,8 @@ msgid "State"
msgstr "État"
#: ../inc/result.inc:747
-#, fuzzy
msgid "Task name:"
-msgstr "Nom de tâche"
+msgstr "Nom de la tâche:"
#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
@@ -1791,9 +1798,9 @@ msgid "Find teams with these words in their names or descriptions"
msgstr ""
"Trouver des équipes dont le nom ou la description contiennent ces mots clefs"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1801,7 +1808,7 @@ msgstr ""
msgid "Country"
msgstr "Pays"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Type d'équipe"
@@ -1830,8 +1837,8 @@ msgstr "Vous l'avez requis"
msgid "founder response deadline is %1"
msgstr "la date limite de réponse du fondateur est %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Aucun(e)"
@@ -1855,28 +1862,28 @@ msgstr "Description"
msgid "Web site"
msgstr "Site web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Statistiques inter-projets"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Type"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Sujets"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Rejoindre cette équipe"
# Verifier si le OK to email est traduisible ou pas
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1885,80 +1892,80 @@ msgstr ""
"de rejoindre une équipe, donnera accès à votre adresse email à son "
"fondateur."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "N'accepte pas de nouveaux membres"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Changement de fondateur demandé"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Répondre par %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Changement de fondateur de l'équipe"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Membres"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fondateur"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administrateurs"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nouveaux membres de la veille"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Membres totaux"
# vue ?
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "voir"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Membres actifs"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Membres avec du crédit"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrateur"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "%1 précédent"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Prochains %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Pas de telle équipe."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Cette opération requiert d'être fondateur."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Cette opération requiert les privilèges d'administrateur de l'équipe"
@@ -1971,7 +1978,7 @@ msgstr ""
"modifications ici, elles seront écrasées rapidement. A la place, éditez %"
"1l'équipe globale BOINC%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1979,47 +1986,47 @@ msgstr ""
"%1Confidentialité%2: si vous créez une équipe, vos préférences (partage de "
"ressources, préférences graphiques) deviendront publiques."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nom de l'équipe, version texte"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ne pas utiliser de balises HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nom de l'équipe, version HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Vous pouvez utiliser %1certaines balises HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Si vous ne connaissez pas HTML, laissez cette zone vide."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL de l'équipe si disponible"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sans \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "La page de l'équipe sur ce site pointera sur cette URL."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Description de l'équipe"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Accepte des nouveaux membres ?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil utilisateur"
@@ -2053,7 +2060,7 @@ msgstr "Ordinateurs de ce compte"
# vue ?
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Voir"
@@ -2070,8 +2077,8 @@ msgstr "Statistiques inter-projets"
msgid "Account"
msgstr "Compte"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Equipe"
@@ -2100,7 +2107,7 @@ msgstr "Informations de compte"
msgid "Email address"
msgstr "Adresse email"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2108,7 +2115,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Code postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 membre depuis"
@@ -2128,7 +2135,7 @@ msgstr "mot de passe"
msgid "other account info"
msgstr "autres informations"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Identifiant utilisateur"
@@ -2173,96 +2180,96 @@ msgstr "Préférences de %1"
msgid "Community"
msgstr "Communauté"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Supprimer"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Créer"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 messages"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notifications"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Quitter l'équipe"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrer"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(demande de changement de fondateur en cours)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Membre de l'équipe"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "trouver une équipe"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fondateur mais non membre de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Trouver des amis"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amis"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Ordinateurs"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donateur"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contacter"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Cette personne est un(e) ami(e)"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Annuler l'amitié"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Requête en cours"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Ajouter en tant qu'ami(e)"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "le nom d'utilisateur ne peut contenir d'espace au début ou à la fin"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "le nom d'utilisateur ne doit pas être vide"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "le nom d'utilisateur ne peut pas contenir de balises HTML"
@@ -2346,7 +2353,7 @@ msgstr ""
"Impossible d'interroger la base de données - veuillez réessayer "
"ultérieurement"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Rester connecté sur cet ordinateur"
@@ -2424,9 +2431,12 @@ msgid ""
"HTML)."
msgstr ""
"Les balises BBCode vous permettent de formater le texte de votre profil et "
-"les messages publiés.C'est similaire à l'HTML, mais plus simple. Les balises "
-"commencent par un [ (là où vous auriez dû utiliser %1 en HTML) et se "
-"terminent par ] (où vous auriez dû utiliser %2 en HTML)."
+"les messages publiés.\n"
+"C'est similaire au HTML, mais en plus simple. Les balises commencent par un "
+"[ (là où vous\n"
+"auriez dû utiliser %1 en HTML) et se terminent par ] (où vous auriez dû "
+"utiliser %2 \n"
+"en HTML)."
#: ../user/bbcode.php:31
msgid "Examples"
@@ -2445,9 +2455,8 @@ msgid "Underline"
msgstr "Souligné"
#: ../user/bbcode.php:35
-#, fuzzy
msgid "Superscript"
-msgstr "Superscript"
+msgstr "Exposant"
#: ../user/bbcode.php:36
msgid "Big text"
@@ -2520,15 +2529,16 @@ msgid ""
"the raw tag itself will display instead of the formatted text."
msgstr ""
"Si vous ne fermez pas une balise ou ne spécifiez pas correctement un "
-"paramètre, le texte même de la balise sera affiché et non le texte formaté."
+"paramètre, \n"
+"le texte même de la balise sera affiché et non le texte formaté."
#: ../user/bs_sample_index.php:44
msgid "Participants"
-msgstr ""
+msgstr "Participants"
#: ../user/bs_sample_index.php:46
msgid "Do work"
-msgstr ""
+msgstr "Faire le travail"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
#: ../user/home.php:49 ../project.sample/project.inc:43
@@ -2537,7 +2547,7 @@ msgstr "Votre compte"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
msgid "view stats, modify preferences"
-msgstr ""
+msgstr "afficher des statistiques, modifier les préférences"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
#: ../user/team.php:25
@@ -2546,13 +2556,13 @@ msgstr "Equipes"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
msgid "create or join a team"
-msgstr ""
+msgstr "créer ou rejoindre une équipe"
#: ../user/bs_sample_index.php:51 ../user/sample_index.php:191
msgid "User of the day"
msgstr "Utilisateur du jour"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "État du serveur"
@@ -2563,11 +2573,11 @@ msgstr "Profils"
#: ../user/bs_sample_index.php:61
msgid "User search"
-msgstr ""
+msgstr "Recherche d'utilisateur"
#: ../user/bs_sample_index.php:64
msgid "Statistics"
-msgstr ""
+msgstr "Statistiques"
#: ../user/bs_sample_index.php:65 ../user/stats.php:30
#: ../user/top_users.php:116
@@ -2588,9 +2598,8 @@ msgid "Top GPU models"
msgstr "Meilleurs modèles GPU"
#: ../user/bs_sample_index.php:70
-#, fuzzy
msgid "Languages"
-msgstr "Langue"
+msgstr "Langues"
#: ../user/bs_sample_index.php:149 ../user/info.php:24
#: ../user/sample_index.php:79
@@ -2911,7 +2920,8 @@ msgid ""
"if you want another profile in the future."
msgstr ""
"Les profils supprimés ne peuvent plus être récupérés --\n"
-"vous devrez tout recommencer si vous voulez un nouveau profil par la suite."
+"vous devrez tout recommencer si vous voulez \n"
+"un nouveau profil par la suite."
#: ../user/delete_profile.php:48
msgid ""
@@ -3219,8 +3229,9 @@ msgid ""
"<br> providing dynamic 'signature images'\n"
"<br> showing your latest credit info, project news, etc."
msgstr ""
-"Essayez divers %1services gratuits%2<br> offrant des images de signature "
-"dynamique<br> montrant vos statistiques, des nouvelles des projets, etc."
+"Essayez divers %1services gratuits%2<br> \n"
+"offrant des images de signature dynamique<br> \n"
+"montrant vos statistiques, des nouvelles des projets, etc."
#: ../user/edit_forum_preferences_form.php:104
msgid "characters remaining"
@@ -3645,6 +3656,8 @@ msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
+"Ce projet n'a pas créé de message email - Veuillez notifier ses "
+"administrateurs"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -4210,8 +4223,9 @@ msgid ""
"has not yet read the thread will quickly be able to identify the issue.%2"
msgstr ""
"Pourquoi trouvez vous ce message insultant : %1Merci d'inclure suffisamment "
-"d'information pour qu'une personne n'ayant pas encore lu le sujet puisse "
-"être capable d'identifier rapidement le problème%2"
+"d'information pour qu'une personne \n"
+"n'ayant pas encore lu le sujet puisse être capable d'identifier rapidement "
+"le problème%2"
#: ../user/forum_report_post.php:90
msgid "Report not registered"
@@ -4697,6 +4711,8 @@ msgid ""
"Go to the BOINC data directory on your computer (its location is written to "
"the Event Log at startup)."
msgstr ""
+"Aller dans le répertoire de données de BOINC de votre ordinateur (son chemin "
+"est inscrit dans le Journal d’événements au démarrage). "
#: ../user/get_passwd.php:51
msgid "Find your account file for this project; it will be named <b>%1</b>."
@@ -5263,11 +5279,15 @@ msgid ""
" <p>"
msgstr ""
"Cette opération fusionne les ordinateurs en fonction de leur nom de domaine. "
-" <p> Pour chaque nom de "
-"domaine, tous les ordinateurs les plus anciens ayant ce nom "
-" seront fusionnés avec les ordinateurs les plus "
-"récents ayant ce nom. Les ordinateurs incompatibles ne "
-"seront pas fusionnés. <p>"
+" \n"
+" <p>\n"
+" Pour chaque nom de domaine, tous les ordinateurs les "
+"plus anciens ayant ce nom\n"
+" seront fusionnés avec les ordinateurs les plus "
+"récents ayant ce nom.\n"
+" Les ordinateurs incompatibles ne seront pas "
+"fusionnés.\n"
+" <p>"
#: ../user/merge_by_name.php:82
msgid "Go ahead and do this"
@@ -5284,9 +5304,9 @@ msgid ""
"our message boards are moderated.\n"
"Message board postings are subject to the following posting rules:\n"
msgstr ""
-"Afin de maximiser la discussion et la circulation de l'information, nos "
-"forums sont modérés.Les messages des forums sont soumis aux règles "
-"suivantes:"
+"Afin de maximiser la discussion et la circulation de l'information, \n"
+"nos forums sont modérés.\n"
+"Les messages des forums sont soumis aux règles suivantes:\n"
#: ../user/moderation.php:30
msgid ""
@@ -5455,8 +5475,11 @@ msgid ""
" by the Akismet anti-spam system.\n"
" Please modify your text and try again."
msgstr ""
-"Votre réponse a été marquée comme spam par le système anti-spam Akismet.\n"
-" Veuillez modifier votre texte et réessayer."
+"Votre réponse a été marquée comme spam \n"
+" par le système anti-"
+"spam Akismet.\n"
+" Veuillez modifier votre "
+"texte et réessayer."
#: ../user/pm.php:205
msgid "Could not find user with id %1"
@@ -5548,9 +5571,10 @@ msgid ""
" will take effect when your computer communicates with %1\n"
" or you issue the %2Update%3 command from the BOINC Manager."
msgstr ""
-"Vos préférences ont été réinitialisées et "
-"prendront effet lorsque votre ordinateur communiquera avec %1 "
-" ou si vous demandez une %2mises à jour%3 "
+"Vos préférences ont été réinitialisées et\n"
+" prendront effet lorsque votre ordinateur "
+"communiquera avec %1\n"
+" ou si vous demandez une %2mises à jour%3 "
"depuis le BOINC Manager."
#: ../user/prefs_edit.php:65 ../user/prefs_edit.php:93
@@ -5721,136 +5745,136 @@ msgstr "Arrêté"
msgid "Disabled"
msgstr "Suspendu"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Statut du projet"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Version du serveur: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programme"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Hôte"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "pages web pilotée par les données"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "serveur d'upload/download"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "ordonnanceur"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "En cours d'exécution:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Le programme fonctionne normalement"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Arrêté:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programme en échec ou projet arrêté"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Suspendu:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Le programme est suspendu"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "État de l'exécution"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Le serveur de base de donnée n'est pas joignable"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tâches prêtes à l'envoi"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tâches en cours"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Unités de travail en attente de validation"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Unités de travail en attente d'assimilation"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Unités de travail en attente de nettoyage de fichiers"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Tâches en attente de nettoyage de fichiers"
# aucune idée de comment traduire ce truc...
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Transitioner backlog (heures)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Utilisateurs"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "avec des crédits récents"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "avec des crédits"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "enregistrés dans les dernières 24 heures"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOPs actuels"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tâches par application"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "applications"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "non envoyé"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "en cours"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "temps d'exécution moyen des 100 derniers résultats en heures (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "utilisateurs dans les dernières 24 heures"
@@ -6132,6 +6156,10 @@ msgstr "Nouveau fondateur ?"
msgid "Change founder"
msgstr "Changer de fondateur"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Il n'y a pas d'utilisateur à qui transférer l'équipe."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Vous devez choisir une nom d'équipe"
@@ -6933,8 +6961,9 @@ msgid ""
" Your account key is:"
msgstr ""
"Vous pouvez accéder à votre compte soit en utilisant votre adresse email et "
-"mot de passe ou en utilisant une 'clé de compte'. "
-"Votre clé de compte est :"
+"mot de passe\n"
+" ou en utilisant une 'clé de compte'.\n"
+" Votre clé de compte est :"
#: ../user/weak_auth.php:57
msgid "This key can be used to:"
@@ -6951,10 +6980,10 @@ msgid ""
" create a file named %1 in the BOINC\n"
" data directory, and set its contents to:"
msgstr ""
-"pour rattacher un ordinateur à votre compte sans utiliser le BOINC Manager "
-" Vous devez installer BOINC, "
-"crée un répertoire nommé %1 dans le répertoire de "
-"données BOINC, et définir son contenu à:"
+"pour rattacher un ordinateur à votre compte sans utiliser le BOINC Manager\n"
+" Vous devez installer BOINC,\n"
+" crée un répertoire nommé %1 dans le répertoire\n"
+" de données BOINC, et définir son contenu à:"
#: ../user/weak_auth.php:73
msgid "Weak account key"
@@ -6970,12 +6999,13 @@ msgid ""
" Your weak account key is:"
msgstr ""
"Votre 'clé de compte non robuste' peut être utilisée pour rattacher des "
-"ordinateurs à votre compte comme décrit ci-dessus, mais ne peut pas "
-"être utilisée pour se connecter à votre compte ou le modifier en aucune "
-"façon. Si vous voulez rattacher des ordinateurs dans lesquels vous "
-"n'avez pas confiance ou qui ne sont pas sûrs à votre compte, faites "
-"le avec votre clé de compte non robuste. Votre clé de compte non "
-"robuste est:"
+"ordinateurs à votre compte\n"
+" comme décrit ci-dessus, mais ne peut pas être utilisée pour se "
+"connecter à votre compte ou le modifier en aucune façon.\n"
+" Si vous voulez rattacher des ordinateurs dans lesquels vous n'avez "
+"pas confiance ou qui ne sont pas sûrs à votre compte,\n"
+" faites le avec votre clé de compte non robuste.\n"
+" Votre clé de compte non robuste est:"
#: ../user/weak_auth.php:81
msgid ""
@@ -7065,9 +7095,11 @@ msgid ""
" <li>Any suggestions?\n"
" </ol>"
msgstr ""
-"Dites nous vos pensées à propos de %1<ol> <li>Pourquoi utilisez vous %1? "
-" <li>Quel est votre point de vue à propos du projet ? <li>Des "
-"suggestions ? </ol>"
+"Dites nous vos pensées à propos de %1<ol>\n"
+" <li>Pourquoi utilisez vous %1?\n"
+" <li>Quel est votre point de vue à propos du projet ?\n"
+" <li>Des suggestions ?\n"
+" </ol>"
#: ../project.sample/project_specific_prefs.inc:47
msgid "Color scheme for graphics"
diff --git a/html/languages/translations/hu.po b/html/languages/translations/hu.po
index fd2779a..28bdd28 100644
--- a/html/languages/translations/hu.po
+++ b/html/languages/translations/hu.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-08 11:52+0000\n"
-"Last-Translator: ZT <vdonksgula at gmail.com>\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-04-05 17:35+0000\n"
+"Last-Translator: Gabor <csega at mailbox.hu>\n"
"Language-Team: \n"
"Language: hu\n"
"MIME-Version: 1.0\n"
@@ -21,7 +21,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1383911572.0\n"
+"X-POOTLE-MTIME: 1396719309.0\n"
# The name of this language in this language
msgid "LANG_NAME_NATIVE"
@@ -199,7 +199,7 @@ msgstr "Részletes keresés"
# #######################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Személyes üzenetek"
@@ -211,8 +211,8 @@ msgstr "Személyes üzenetek"
msgid "Questions and Answers"
msgstr "Kérdések és válaszok"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -280,7 +280,7 @@ msgstr "Olvasatlan"
msgid "Message %1"
msgstr "%1. üzenet"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "rejtett"
@@ -499,7 +499,7 @@ msgstr "Téma"
# #######################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Üzenetek"
@@ -508,7 +508,7 @@ msgstr "Üzenetek"
msgid "Views"
msgstr "Megtekintések"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Utolsó üzenet"
@@ -546,7 +546,7 @@ msgid "Home"
msgstr "Otthon"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Munka"
@@ -612,9 +612,9 @@ msgid "Created"
msgstr "Létrehozva"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -794,7 +794,7 @@ msgstr "Utolsó kapcsolat"
msgid "Computer info"
msgstr "Számítógép infó"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -803,9 +803,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Átl. kredit"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -893,8 +893,8 @@ msgstr "Csak az utóbbi 30 napban aktív számítógépek"
msgid "Computer ID"
msgstr "Számítógép ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -930,7 +930,7 @@ msgstr "Bejövő"
msgid "Write"
msgstr "Levélírás"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Privát üzenet küldése"
@@ -1226,8 +1226,9 @@ msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
msgstr "Használja az NVIDIA GPU-t %1 Erőltetve a 6.10 verzió felett %2"
#: ../inc/prefs.inc:344
+#, fuzzy
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
-msgstr ""
+msgstr "Használja az ATI GPU-t %1 Erőltetve a 6.10 verzió felett %2"
#: ../inc/prefs.inc:358
msgid ""
@@ -1708,7 +1709,7 @@ msgstr "A jelentés ideje<br />vagy határidő"
msgid "explain"
msgstr "megmagyaráz"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Állapot"
@@ -1806,9 +1807,9 @@ msgstr ""
"Keressen csapatokat, amiknek nevében vagy leírásában benne vannak a "
"következő szavak"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1816,7 +1817,7 @@ msgstr ""
msgid "Country"
msgstr "Ország"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Csapat típusa"
@@ -1844,8 +1845,8 @@ msgstr "Ön kérte"
msgid "founder response deadline is %1"
msgstr "alapítói válaszadási határidő: %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Nincs"
@@ -1869,27 +1870,27 @@ msgstr "Leírás"
msgid "Web site"
msgstr "Weboldal"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Projekt-közti statisztikák"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Típus"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Üzenőfal"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Témák"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Csatlakozzon ehhez a csapathoz"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1898,79 +1899,79 @@ msgstr ""
"csapathoz való csatlakozás láthatóvá teszi emailcímét a csapat alapítója "
"számára."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nem fogad új tagokat"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Alapító megváltoztatása kérve"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Válaszoljon %1-el"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Csapat alapítójának megváltoztatása"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Tagok"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Alapító"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Adminok"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Új tagok tegnap"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Összes tag"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "megtekint"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktív tagok"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Kredittel rendelkező tagok"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Admin"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Előző %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Következő %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Nincs ilyen csapat."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Ehhez a művelethez alapítói jogkör szükséges."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Ehhez a művelthez csapat adminisztrátori jogosultság szükséges"
@@ -1982,7 +1983,7 @@ msgstr ""
"FIGYELEM: ez egy BOINC-közi csapat. Ha itt változtatásokat eszközöl, azok "
"hamarosan felül lesznek írva. Szerkessze inkább a %1BOINC-közi csapatot%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1991,48 +1992,48 @@ msgstr ""
"beállításai (erőforrás-megosztás, megjelenítési beállítások) mindenki "
"számára láthatóak lesznek."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Csapatnév, szöveges változat"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ne használjon HTML címkéket."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Csapatnév, HTML változat"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Használhat %1bizonyos HTML címkéket%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Ha nem ismeri a HTML-t, hagyja üresen ezt a négyzetet."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "A csapat honlapja, ha van"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "\"http://\" nélkül"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
#, fuzzy
msgid "This URL will be linked to from the team's page on this site."
msgstr "Erre az URL-re fog hivatkozni a csapat oldala ezen a honlapon."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "A csapat leírása"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Fogad új tagokat?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Felhasználói profil"
@@ -2065,7 +2066,7 @@ msgid "Computers on this account"
msgstr "Ezen fiók számítógépei"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Megtekint"
@@ -2082,8 +2083,8 @@ msgstr "Projekt-közti statisztikák"
msgid "Account"
msgstr "Fiók"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Csapat"
@@ -2112,7 +2113,7 @@ msgstr "Fiókinformáció"
msgid "Email address"
msgstr "Email cím"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2120,7 +2121,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Irányítószám"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 tag ennyi ideje:"
@@ -2140,7 +2141,7 @@ msgstr "jelszó"
msgid "other account info"
msgstr "egyéb fiókinformáció"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Felhasználói azonosító"
@@ -2186,96 +2187,96 @@ msgstr "%1 beállítások"
msgid "Community"
msgstr "Közösség"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Törlés"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Létrehoz"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 üzenet"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Értesítések"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Kilépés a csapatból"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Igazgató"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(alapító változtatási kérelem folyamatban)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Ezen csapat tagja:"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "csapat keresése"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Alapítója, de nem tagja ennek a csapatnak:"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Ismerősök keresése"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Barátok"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Számítógépek"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donor"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kapcsolat"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ez a személy ismerőse Önnek"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Barátság megszüntetése"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Kérés folyamatban"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Barátokhoz ad"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2354,7 +2355,7 @@ msgstr "Az adatbázishoz csatlakozás sikertelen - kérjük, próbálja újra k
msgid "Unable to select database - please try again later"
msgstr "Az adatbázis kiválasztása sikertelen - kérjük, próbálja újra később"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Maradjon bejelentkezve ezen a gépen"
@@ -2563,7 +2564,7 @@ msgstr ""
msgid "User of the day"
msgstr "A nap felhasználója"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Szerver állapot"
@@ -4720,7 +4721,7 @@ msgstr "2) Ha elfelejtette e-mail címét vagy nem tud leveleket fogadni:"
msgid ""
"If you have run BOINC under this account, you can still access it. Here's "
"how:"
-msgstr ""
+msgstr "Ha ebben a fiókban futtatja a BOINC-ot, hozzáférhet az alábbi módon:"
#: ../user/get_passwd.php:50
msgid ""
@@ -4731,18 +4732,24 @@ msgstr ""
#: ../user/get_passwd.php:51
msgid "Find your account file for this project; it will be named <b>%1</b>."
msgstr ""
+"Keresse meg fiókfile-ját a projekthez az alábbi elnevezéssel: <b>%1</b>."
#: ../user/get_passwd.php:52
msgid "Open the file in a text editor like Notepad. You'll see something like"
msgstr ""
+"Szövegszerkesztőben (pl. Jegyzettömb) nyissa meg a fájlt. Valami ilyesmit "
+"fog látni:"
#: ../user/get_passwd.php:62
msgid "Select and Copy the string between %1 and %2 (%3 in the above example)."
msgstr ""
+"Jelölje ki és másolja ki a karakterláncot %1 és %2 között (%3 a fenti "
+"példában)."
#: ../user/get_passwd.php:64
msgid "Paste the string into the field below, and click OK."
msgstr ""
+"Illessze be a karakterláncot az alábbi mezőbe és kattintson az OK gombra."
#: ../user/get_passwd.php:65
msgid ""
@@ -4756,7 +4763,7 @@ msgstr ""
#: ../user/gpu_list.php:126 ../user/gpu_list.php:152
msgid "No GPU tasks reported"
-msgstr ""
+msgstr "GPU feladat nincs jelentve"
#: ../user/gpu_list.php:183
msgid ""
@@ -4780,9 +4787,8 @@ msgid "If you have not already done so, %1download BOINC client software%2."
msgstr "Ha még nem tette, %1töltse le a BOINC kliens szoftvert%2."
#: ../user/host_app_versions.php:37
-#, fuzzy
msgid "Anonymous platform, missing app"
-msgstr "Névtelen platform"
+msgstr "Névtelen platform, hiányzó app"
#: ../user/host_app_versions.php:40
#, fuzzy
@@ -4791,32 +4797,31 @@ msgstr "Névtelen platform"
#: ../user/host_app_versions.php:43
msgid "Missing app version"
-msgstr ""
+msgstr "Hiányzó app verzió"
#: ../user/host_app_versions.php:45
msgid "Missing app"
-msgstr ""
+msgstr "Hiányzó app"
#: ../user/host_app_versions.php:47
msgid "Missing platform"
-msgstr ""
+msgstr "Hiányzó platform"
#: ../user/host_app_versions.php:56
msgid "Number of tasks completed"
-msgstr ""
+msgstr "Elvégzett feladatok száma"
#: ../user/host_app_versions.php:57
msgid "Max tasks per day"
-msgstr ""
+msgstr "Maximális feladat naponta"
#: ../user/host_app_versions.php:58
-#, fuzzy
msgid "Number of tasks today"
-msgstr "processzorok száma"
+msgstr "Mai feladatok száma"
#: ../user/host_app_versions.php:59
msgid "Consecutive valid tasks"
-msgstr ""
+msgstr "Egymást követő érvényes feladatok"
#: ../user/host_app_versions.php:63
#, fuzzy
@@ -4831,9 +4836,8 @@ msgid "Application details for host %1"
msgstr "Alkalmazások"
#: ../user/host_delete.php:31
-#, fuzzy
msgid "We have no record of that computer."
-msgstr "Egyesítse ezen számítógép kettőzött bejegyzéseit"
+msgstr "Nincs adat erről a számítógépről."
#: ../user/host_delete.php:38
msgid ""
@@ -4841,6 +4845,9 @@ msgid ""
"contains work for it. You must wait a few days until the work for this "
"computer has been deleted from the project database."
msgstr ""
+"Nem törölheti a számítógép adatait, mert adatbázisunk még tartogat neki "
+"munkát. Néhány napot várnia kell, míg a számítógéphez rendelt munka törlődik "
+"a projekt adatbázisból."
#: ../user/host_delete.php:40
#, fuzzy
@@ -4848,14 +4855,12 @@ msgid "Delete record of computer"
msgstr "Számítógép törlése"
#: ../user/host_delete.php:41
-#, fuzzy
msgid "Record deleted."
-msgstr "Valóban törli?"
+msgstr "Adatok törölve."
#: ../user/host_delete.php:42 ../user/host_edit_action.php:65
-#, fuzzy
msgid "Return to list of your computers"
-msgstr "A(z) %1 projektet csak jogosult számítógépeken futtassa"
+msgstr "Vissza a számítógépek listájához"
#: ../user/host_edit_action.php:39
#, fuzzy
@@ -4872,15 +4877,16 @@ msgid ""
"Sometimes BOINC assigns separate identities to the same computer by mistake. "
"You can correct this by merging old identities with the newest one."
msgstr ""
+"Időként a BOINC tévedésből elkülöníti az egy számítógéphez tartozó "
+"identitásokat. Ön kijavíthatja ezt a régi identitások összefűzésével."
#: ../user/host_edit_form.php:56
msgid "No hosts are eligible for merging with this one."
-msgstr ""
+msgstr "Nincs megfelelő gép az összefűzéshez."
#: ../user/host_edit_form.php:58 ../user/host_edit_form.php:114
-#, fuzzy
msgid "Show details"
-msgstr "Nevek mutatása"
+msgstr "Részletek mutatása"
#: ../user/host_edit_form.php:66
msgid ""
@@ -4933,6 +4939,7 @@ msgid ""
"This change will take effect the next time the host communicates with this "
"project."
msgstr ""
+"A változtatás a gép projekthez történő következő kapcsolódásakor lép életbe."
#: ../user/host_venue_action.php:50
msgid "Return to host page"
@@ -4951,43 +4958,40 @@ msgstr "Számítógép infó"
#: ../user/hosts_user.php:56
msgid ""
"This user has chosen not to show information about his or her computers."
-msgstr ""
+msgstr "Ez a felhasználó elrejtette számítógépe adatait."
#: ../user/hosts_user.php:64
-#, fuzzy
msgid "Your computers"
-msgstr "Minden számítógép"
+msgstr "Az Ön számítógépei"
#: ../user/html.php:23
-#, fuzzy
msgid "Allowed HTML tags"
-msgstr "Ne használjon HTML címkéket."
+msgstr "Engedélyezett HTML címkék"
#: ../user/html.php:25
msgid "The following HTML tags are allowed in team descriptions:"
-msgstr ""
+msgstr "Az alábbi HTML címkék engedélyezettek a csapatleírásban:"
# 75%
#: ../user/html.php:27
-#, fuzzy
msgid "bold"
-msgstr "Félkövér"
+msgstr "félkövér"
#: ../user/html.php:28
msgid "italics"
-msgstr ""
+msgstr "dőlt"
#: ../user/html.php:29
msgid "hyperlink"
-msgstr ""
+msgstr "hivatkozás"
#: ../user/html.php:30
msgid "paragraph"
-msgstr ""
+msgstr "bekezdés"
#: ../user/html.php:31
msgid "break"
-msgstr ""
+msgstr "sortörés"
#: ../user/html.php:32
msgid "preformatted"
@@ -5553,8 +5557,9 @@ msgid ""
msgstr ""
#: ../user/profile_menu.php:42
+#, fuzzy
msgid "User of the Day"
-msgstr ""
+msgstr "A nap felhasználója"
#: ../user/profile_menu.php:57
msgid "User Profile Explorer"
@@ -5674,140 +5679,140 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# #######################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Alkalmazások"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Nincs elküldve"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "Folyamatban"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5926,6 +5931,8 @@ msgid ""
"Moderate the team forum, if any (admins get email notification of moderation "
"events and red X reports)"
msgstr ""
+"Moderálja a csapatfórumot, ha van (az adminok kapnak email értesítést a "
+"moderálási eseményekről és a piros X jelentésekről)"
#: ../user/team_admins.php:47
msgid "Team Admins cannot:"
@@ -6057,6 +6064,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/html/languages/translations/it.po b/html/languages/translations/it.po
index 0786493..31ccff4 100644
--- a/html/languages/translations/it.po
+++ b/html/languages/translations/it.po
@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
"POT-Creation-Date: 2012-01-16 11:31 PST\n"
-"PO-Revision-Date: 2011-11-17 16:07+0200\n"
-"Last-Translator: Gianfranco <costamagnagianfranco at yahoo.it>\n"
+"PO-Revision-Date: 2012-06-12 14:07+0200\n"
+"Last-Translator: Simone_3dz2 <simonecnt at gmail.com>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
@@ -29,49 +29,53 @@ msgstr "Italian"
#: ../inc/bbcode_html.inc:11
msgid "Bold text: [b]text[/b] (alt+b)"
-msgstr ""
+msgstr "Testo in grassetto: [b]testo[/b] (alt+b)"
#: ../inc/bbcode_html.inc:14
msgid "Italic text: [i]text[/i] (alt+i)"
-msgstr ""
+msgstr "Testo in corsivo: [i]testo[/i] (alt+i)"
#: ../inc/bbcode_html.inc:17
msgid "Underline text: [u]text[/u] (alt+u)"
-msgstr ""
+msgstr "Testo sottolineato: [u]testo[/u] (alt+u)"
#: ../inc/bbcode_html.inc:20
msgid "Quote text: [quote]text[/quote] (alt+q)"
-msgstr ""
+msgstr "Testo citato: [quote]testo[/quote] (alt+q)"
#: ../inc/bbcode_html.inc:23
msgid "Code display: [code]code[/code] (alt+c)"
-msgstr ""
+msgstr "Mostra codice: [code]codice[/code] (alt+c)"
#: ../inc/bbcode_html.inc:26
msgid "List: [list]text[/list] (alt+l)"
-msgstr ""
+msgstr "Lista: [list]testo[/list] (alt+l)"
#: ../inc/bbcode_html.inc:29
msgid "Ordered list: [list=]text[/list] (alt+o)"
-msgstr ""
+msgstr "Lista ordinata: [list=]testo[/list] (alt+o)"
#: ../inc/bbcode_html.inc:32
msgid "Insert image: [img]http://image_url[/img] (alt+p)"
-msgstr ""
+msgstr "Inserisci immagine: [img]http://url_immagine[/img] (alt+p)"
#: ../inc/bbcode_html.inc:35
msgid ""
"Insert URL: [url]http://url[/url] or [url=http://url]URL text[/url] (alt+w)"
msgstr ""
+"Inserisci link: [url]http://link[/url] oppure [url=http://linkl]testo[/url] "
+"(alt+w)"
#: ../inc/bbcode_html.inc:42
msgid "Font color"
-msgstr ""
+msgstr "Colore del carattere"
#: ../inc/bbcode_html.inc:43
msgid ""
"Font color: [color=red]text[/color] Tip: you can also use color=#FF0000"
msgstr ""
+"Colore del carattere: [color=red]testo[/color] Suggerimento: puoi anche "
+"usare color=#FF0000"
#: ../inc/bbcode_html.inc:44 ../inc/bbcode_html.inc:59 ../inc/prefs.inc:625
msgid "Default"
@@ -79,108 +83,107 @@ msgstr "Predefinito"
#: ../inc/bbcode_html.inc:45
msgid "Dark Red"
-msgstr ""
+msgstr "Rosso Scuro"
#: ../inc/bbcode_html.inc:46
msgid "Red"
-msgstr ""
+msgstr "Rosso"
#: ../inc/bbcode_html.inc:47
-#, fuzzy
msgid "Orange"
-msgstr "Cambia"
+msgstr "Arancione"
#: ../inc/bbcode_html.inc:48
msgid "Brown"
-msgstr ""
+msgstr "Marrone"
#: ../inc/bbcode_html.inc:49
msgid "Yellow"
-msgstr ""
+msgstr "Giallo"
#: ../inc/bbcode_html.inc:50
msgid "Green"
-msgstr ""
+msgstr "Verde"
#: ../inc/bbcode_html.inc:51
msgid "Olive"
-msgstr ""
+msgstr "Verde oliva"
#: ../inc/bbcode_html.inc:52
msgid "Cyan"
-msgstr ""
+msgstr "Blu ciano"
#: ../inc/bbcode_html.inc:53
msgid "Blue"
-msgstr ""
+msgstr "Blu"
#: ../inc/bbcode_html.inc:54
msgid "Dark Blue"
-msgstr ""
+msgstr "Blu scuro"
#: ../inc/bbcode_html.inc:55
msgid "Indigo"
-msgstr ""
+msgstr "Indaco"
#: ../inc/bbcode_html.inc:56
msgid "Violet"
-msgstr ""
+msgstr "Viola"
#: ../inc/bbcode_html.inc:57
msgid "Font size"
-msgstr ""
+msgstr "Dimensione del carattere"
#: ../inc/bbcode_html.inc:58
msgid "Font size: [size=x-small]small text[/size]"
-msgstr ""
+msgstr "Dimensione del carattere: [size=x-small]testo piccolo[/size]"
#: ../inc/bbcode_html.inc:60
msgid "Small"
-msgstr ""
+msgstr "Piccolo"
#: ../inc/bbcode_html.inc:61
msgid "Normal"
-msgstr ""
+msgstr "Normale"
#: ../inc/bbcode_html.inc:62
msgid "Large"
-msgstr ""
+msgstr "Grande"
#: ../inc/bbcode_html.inc:65
msgid "Close all open bbCode tags"
-msgstr ""
+msgstr "Chiudi tutti i tag bbCode aperti"
#: ../inc/bbcode_html.inc:65
msgid "Close Tags"
-msgstr ""
+msgstr "Chiudi tutti i tag"
#: ../inc/forum.inc:37
msgid "Oldest first"
-msgstr ""
+msgstr "Prima il più vecchio"
#: ../inc/forum.inc:38 ../inc/forum.inc:44
msgid "Newest first"
-msgstr ""
+msgstr "Prima il più recente"
#: ../inc/forum.inc:39
msgid "Highest rated posts first"
-msgstr ""
+msgstr "Prima i messaggi più votati"
#: ../inc/forum.inc:41
msgid "Newest post first"
-msgstr ""
+msgstr "Prima i messaggi più recenti"
#: ../inc/forum.inc:42
msgid "Most views first"
-msgstr ""
+msgstr "Prima i più visualizzati"
#: ../inc/forum.inc:43
msgid "Most posts first"
-msgstr ""
+msgstr "Prima le discussioni con più messaggi"
#: ../inc/forum.inc:125
msgid "Search for words in forum messages"
-msgstr "Cerca delle parole nei massaggi del forum"
+msgstr "Cerca delle parole nei messaggi del forum"
#: ../inc/forum.inc:125
msgid "Search forums"
@@ -225,52 +228,44 @@ msgid "Next"
msgstr "Successivo"
#: ../inc/forum.inc:535
-#, fuzzy
msgid "Send message"
msgstr "Spedisci il messaggio"
# ########################################
# Private messages
#: ../inc/forum.inc:535
-#, fuzzy
msgid "Send %1 a private message"
-msgstr "Spedisci un messaggio privato"
+msgstr "Spedisci %1 un messaggio privato"
#: ../inc/forum.inc:536
-#, fuzzy
msgid "Joined: %1"
-msgstr "Entra in %1"
+msgstr "Iscritto: %1"
# ########################################
# Forum
#: ../inc/forum.inc:545
-#, fuzzy
msgid "Posts: %1"
-msgstr "Messaggi"
+msgstr "Messaggi: %1"
#: ../inc/forum.inc:551
-#, fuzzy
msgid "Credit: %1"
-msgstr "Crediti"
+msgstr "Crediti: %1"
#: ../inc/forum.inc:552
msgid "RAC: %1"
-msgstr ""
+msgstr "RAC: %1"
#: ../inc/forum.inc:574
-#, fuzzy
msgid "You haven't read this message yet"
-msgstr "Non hai messaggi privati."
+msgstr "Non hai ancora letto questo messaggio"
#: ../inc/forum.inc:574
-#, fuzzy
msgid "Unread"
-msgstr "non letto"
+msgstr "Non letto"
#: ../inc/forum.inc:577 ../inc/forum.inc:582 ../inc/forum.inc:681
-#, fuzzy
msgid "Message %1"
-msgstr "Messaggio"
+msgstr "Messaggio %1"
#: ../inc/forum.inc:578 ../inc/user.inc:324 ../user/forum_forum.php:172
msgid "hidden"
@@ -279,70 +274,65 @@ msgstr "nascosto"
# ########################################
# Forum
#: ../inc/forum.inc:579
-#, fuzzy
msgid "Posted: %1"
-msgstr "Messaggi"
+msgstr "Messaggi: %1"
#: ../inc/forum.inc:582
-#, fuzzy
msgid " - in response to "
-msgstr "Scaduto - nessuna risposta"
+msgstr "- in risposta a"
#: ../inc/forum.inc:585 ../inc/prefs.inc:691 ../inc/prefs.inc:693
msgid "Edit"
msgstr "Modifica"
#: ../inc/forum.inc:585
-#, fuzzy
msgid "Edit this message"
-msgstr "Modifica il tuo profilo"
+msgstr "Modifica questo messaggio"
#: ../inc/forum.inc:591
-#, fuzzy
msgid "Last modified: %1"
-msgstr "Ultima modifica delle preferenze:"
+msgstr "Ultima modifica: %1"
#: ../inc/forum.inc:594
msgid ""
"This post is not shown because the sender is on your 'ignore' list. Click "
"%1here%2 to view this post"
msgstr ""
+"Questo messaggio non è mostrato perchè l'autore è nella tua lista degli "
+"ignorati. Clicca %1qui%2 per vedere questo messaggio"
#: ../inc/forum.inc:622 ../inc/forum.inc:633
msgid "Report this post as offensive"
-msgstr ""
+msgstr "Segnale questo messaggio come offensivo."
#: ../inc/forum.inc:622 ../inc/forum.inc:633
-#, fuzzy
msgid "Report as offensive"
-msgstr "Ultimo messaggio"
+msgstr "Segnala come offensivo"
#: ../inc/forum.inc:626
msgid "Rating: %1"
-msgstr ""
+msgstr "Valutazione: %1"
#: ../inc/forum.inc:626
msgid "rate: "
-msgstr ""
+msgstr "valutazione:"
# 83%
#: ../inc/forum.inc:629
-#, fuzzy
msgid "Click if you like this message"
-msgstr "Non in grado di scrivere il messaggio"
+msgstr "Clicca se ti piace questo messaggio"
#: ../inc/forum.inc:629
msgid "Rate +"
-msgstr ""
+msgstr "Valuta +"
#: ../inc/forum.inc:631
-#, fuzzy
msgid "Click if you don't like this message"
-msgstr "Non in grado di scrivere il messaggio"
+msgstr "Clicca se non ti piace questo messaggio"
#: ../inc/forum.inc:631
msgid "Rate -"
-msgstr ""
+msgstr "Valuta -"
#: ../inc/forum.inc:639 ../user/pm.php:106 ../user/pm.php:146
msgid "Reply"
@@ -350,32 +340,29 @@ msgstr "Rispondi"
#: ../inc/forum.inc:639
msgid "Post a reply to this message"
-msgstr ""
+msgstr "Replica a questo messaggio"
#: ../inc/forum.inc:641
-#, fuzzy
msgid "Quote"
-msgstr "Abbandona il team"
+msgstr "Cita"
#: ../inc/forum.inc:641
msgid "Post a reply by quoting this message"
-msgstr ""
+msgstr "Replica a questo messaggio citandolo"
#: ../inc/forum.inc:662
msgid "Hidden by a moderator"
-msgstr ""
+msgstr "Nascosto da un moderatore"
# ########################################
# Forum
#: ../inc/forum.inc:683
-#, fuzzy
msgid "Posted %1 by %2"
-msgstr "Messaggi"
+msgstr "Inviato %1 da %2"
#: ../inc/forum.inc:701
-#, fuzzy
msgid "You may not post or rate messages until %1"
-msgstr "Non hai messaggi privati."
+msgstr "Non puoi inviare o valutare messaggi fino al %1"
#: ../inc/forum.inc:712
msgid ""
@@ -397,61 +384,55 @@ msgstr ""
#: ../inc/forum.inc:734
msgid "Rules:"
-msgstr ""
+msgstr "Regole:"
#: ../inc/forum.inc:735
-#, fuzzy
msgid "More info"
-msgstr "Informazioni sul team"
+msgstr "Maggiori informazioni"
#: ../inc/forum.inc:1008 ../user/forum_thread.php:185
msgid "Unhide"
msgstr "Rendi visibile"
#: ../inc/forum.inc:1008
-#, fuzzy
msgid "Unhide this post"
-msgstr "Rendi visibile questo argomento"
+msgstr "Rendi visibile questo messaggio"
#: ../inc/forum.inc:1010 ../user/forum_thread.php:191
msgid "Hide"
msgstr "Nascondi"
#: ../inc/forum.inc:1010
-#, fuzzy
msgid "Hide this post"
-msgstr "Nascondi"
+msgstr "Nascondi questo messaggio"
#: ../inc/forum.inc:1015 ../user/forum_thread.php:224
msgid "Move"
msgstr "Sposta"
#: ../inc/forum.inc:1015
-#, fuzzy
msgid "Move post to a different thread"
-msgstr "Sposta questo argomento in un altro forum"
+msgstr "Sposta questo argomento in un'altra discussione"
#: ../inc/forum.inc:1020
-#, fuzzy
msgid "Banish author"
-msgstr "Nessun utente"
+msgstr "Banna l'autore"
#: ../inc/forum.inc:1027
msgid "Vote to banish author"
-msgstr ""
+msgstr "Vota per bannare l'utente"
#: ../inc/forum.inc:1031
msgid "Vote not to banish author"
-msgstr ""
+msgstr "Vota per non bannare l'utente"
#: ../inc/forum.inc:1036
msgid "Start vote to banish author"
-msgstr ""
+msgstr "Inizia la votazione per bannare l'utente"
#: ../inc/forum.inc:1069
-#, fuzzy
msgid "Only team members can post to the team message board"
-msgstr "Crea o gestisci un forum del team"
+msgstr "Solo i membri del team possono inviare messaggi al forum del team"
#: ../inc/forum.inc:1079
msgid ""
@@ -476,10 +457,12 @@ msgid ""
"This thread is locked. Only forum moderators and administrators are allowed "
"to post there."
msgstr ""
+"Questa discussione è bloccata. Solo i moderatori e gli amministratori "
+"possono scrivere qui."
#: ../inc/forum.inc:1098
msgid "Can't post to a hidden thread."
-msgstr ""
+msgstr "Non posso scrivere in un thread nascosto."
#: ../inc/forum.inc:1126
msgid "Thread"
@@ -508,30 +491,24 @@ msgid "Last post"
msgstr "Ultimo messaggio"
#: ../inc/forum.inc:1188
-#, fuzzy
msgid "New posts in the thread %1"
-msgstr "Rispondi a questo argomento"
+msgstr "Nuovi messa nella discussione %1"
#: ../inc/forum.inc:1193
-#, fuzzy
msgid "New posts in subscribed thread"
-msgstr "Iscriviti"
+msgstr "Nuovi messaggi in discussioni alla quali sei iscritto"
#: ../inc/forum.inc:1194
-#, fuzzy
msgid "There are new posts in the thread '%1'"
-msgstr ""
-"Clicca per ricevere una email quando ci sono nuovi messaggi su questo "
-"argomento"
+msgstr "Ci sono nuovi messaggi nella discussione '%1'"
#: ../inc/forum.inc:1204
msgid "Mark all threads as read"
msgstr "Segna tutti gli argomenti come letti"
#: ../inc/forum.inc:1205
-#, fuzzy
msgid "Mark all threads in all message boards as read."
-msgstr "Segna tutti gli argomenti di tutti i temi come 'letti'."
+msgstr "Segna tutte le discussioni nel forum come lette."
#: ../inc/host.inc:24
msgid "No host"
@@ -539,7 +516,7 @@ msgstr "Nessun host"
#: ../inc/host.inc:26
msgid "Unavailable"
-msgstr "Irraggiungibile"
+msgstr "Non disponibile"
#: ../inc/host.inc:55 ../inc/prefs.inc:626 ../inc/prefs.inc:1026
msgid "Home"
@@ -561,7 +538,7 @@ msgstr "Aggiorna"
#: ../inc/host.inc:83
msgid "Computer information"
-msgstr "Informazioni computer"
+msgstr "Informazioni sul computer"
#: ../inc/host.inc:87 ../inc/host.inc:92
msgid "IP address"
@@ -631,7 +608,7 @@ msgstr "Credito medio"
#: ../inc/host.inc:112
msgid "Cross project credit"
-msgstr "Crediti dei progetto incrociato"
+msgstr "Crediti su tutti i progetti"
#: ../inc/host.inc:114
msgid "CPU type"
@@ -675,7 +652,7 @@ msgstr "Spazio di swap"
#: ../inc/host.inc:137
msgid "Total disk space"
-msgstr "Spazio du disco totale"
+msgstr "Spazio totale su disco"
#: ../inc/host.inc:137 ../inc/host.inc:140
msgid "%1 GB"
@@ -687,7 +664,7 @@ msgstr "Spazio Libero su Disco"
#: ../inc/host.inc:144
msgid "Measured floating point speed"
-msgstr "Velocità calcoli floating point"
+msgstr "Velocità misurata in calcoli in virgola mobile"
#: ../inc/host.inc:144 ../inc/host.inc:147
msgid "%1 million ops/sec"
@@ -699,7 +676,7 @@ msgstr "Velocità calcoli interi"
#: ../inc/host.inc:151 ../inc/host.inc:153
msgid "Average upload rate"
-msgstr "Velocità di upload media"
+msgstr "Velocità media di upload"
#: ../inc/host.inc:151 ../inc/host.inc:158
msgid "%1 KB/sec"
@@ -714,10 +691,9 @@ msgstr "Sconosciuto"
#: ../inc/host.inc:158 ../inc/host.inc:160
msgid "Average download rate"
-msgstr "velocità media di download"
+msgstr "Velocità media di download"
#: ../inc/host.inc:163 ../user/host_app_versions.php:65
-#, fuzzy
msgid "Average turnaround time"
msgstr "Tempo medio di completamento"
@@ -741,9 +717,8 @@ msgid "Tasks"
msgstr "Elaborazioni"
#: ../inc/host.inc:179 ../inc/host.inc:200
-#, fuzzy
msgid "Number of times client has contacted server"
-msgstr "Numero di volte per le quali BOINC ha contattato il server"
+msgstr "Numero di volte che BOINC ha contattato il server"
#: ../inc/host.inc:180
msgid "Last time contacted server"
@@ -804,7 +779,7 @@ msgstr "Posizione"
#: ../inc/host.inc:219 ../inc/host.inc:652
msgid "Avg. credit"
-msgstr "credito medio"
+msgstr "Media dei crediti"
#: ../inc/host.inc:224 ../inc/team.inc:95 ../inc/team.inc:208
#: ../inc/team.inc:217 ../inc/team.inc:219 ../inc/team.inc:355
@@ -938,9 +913,8 @@ msgid "Preview"
msgstr "Anteprima"
#: ../inc/pm.inc:48 ../user/pm.php:131
-#, fuzzy
msgid "no such message"
-msgstr "Nessun utente"
+msgstr "nessun messaggio"
#: ../inc/pm.inc:82
msgid "To"
@@ -948,7 +922,7 @@ msgstr "Per"
#: ../inc/pm.inc:82
msgid "User IDs or unique usernames, separated with commas"
-msgstr "User ID o nomi deli utenti, separati da virgole"
+msgstr "ID o nomi degli utenti separati da virgole"
#: ../inc/pm.inc:85 ../user/pm.php:90 ../user/pm.php:139
msgid "Subject"
@@ -971,7 +945,7 @@ msgstr "ti ho mandato un messaggio privato; titolo:"
#: ../inc/pm.inc:127
msgid "Private message%1 from %2, subject:"
-msgstr "Messaggio priba da %1 a %2, titolo:"
+msgstr "Messaggio privato%1 da %2, titolo:"
#: ../inc/pm.inc:135
msgid "Couldn't create message"
@@ -982,8 +956,8 @@ msgid ""
"You are not allowed to send privates messages so often. Please wait some "
"time before sending more messages."
msgstr ""
-"Non sei abilitato ad inviare messaggi privati così spesso. Aspetta qualche "
-"minuto prima di poterne inviare degli altri."
+"Non sei autorizzato ad inviare messaggi privati così spesso. Per favore "
+"aspetta qualche minuto prima di inviarne degli altri."
#: ../inc/pm.inc:176 ../user/forum_forum.php:184
msgid "unread"
@@ -992,12 +966,12 @@ msgstr "non letto"
#: ../inc/pm.inc:186
msgid "For email notification, %1edit community prefs%2"
msgstr ""
-"Per ricevere le notifiche via mail, %1edita le preferenze della comunità%2"
+"Per ricevere le notifiche via mail, %1modifica le preferenze della comunità%"
+"2"
# ########################################
# Private messages
#: ../inc/pm.inc:198
-#, fuzzy
msgid "Private message"
msgstr "Messaggi privati"
@@ -1011,14 +985,14 @@ msgstr ""
#: ../inc/prefs.inc:84
msgid "Suspend work while computer is in use?"
-msgstr "Sospendere l'elaborazione mentre è in uso il computer?"
+msgstr "Sospendere l'elaborazione mentre il computer è in uso?"
#: ../inc/prefs.inc:90
msgid ""
"Suspend GPU work while computer is in use? %1 Enforced by version 6.6.21+ %2"
msgstr ""
-"Sospendere l'elaborazione con GPU mentre è in uso il computer? %1Si applica "
-"dalla versione 6.7+%2"
+"Sospendere l'elaborazione della GPU mentre il computer è in uso? %1Si "
+"applica dalla versione 6.6.21+ %2"
#: ../inc/prefs.inc:98
msgid "'In use' means mouse/keyboard activity in last"
@@ -1033,34 +1007,33 @@ msgid ""
"Suspend work if no mouse/keyboard activity in last %1 Needed to enter low-"
"power mode on some computers %2"
msgstr ""
-"Sospende l'elaborazione se non c'è attività del mouse/tastiera negli ultimi "
-"%1(Necessario per entrare in modalità risparmio energetico in certi "
-"computer)%2"
+"Sospende l'elaborazione se non c'è attività di mouse/tastiera negli ultimi %"
+"1(Necessario per entrare in modalità risparmio energetico in certi computer)"
+"%2"
#: ../inc/prefs.inc:113
-#, fuzzy
msgid ""
"Suspend work when non-BOINC CPU usage is above %1 0 means no "
"restriction<br>Enforced by version 6.10.30+ %2"
msgstr ""
"Sospendi l'elaborazione se l'uso della CPU è superiore a %1 0 significa "
-"assenza di restrizioni<br>Si applica dalla versione 6.10.30+%2"
+"assenza di restrizioni<br>Si applica dalla versione 6.10.30+ %2"
#: ../inc/prefs.inc:121
msgid "Do work only between the hours of %1 No restriction if equal %2"
-msgstr "Elabora solamente tra le ore di %1. Nessuna restrizione se uguale a %2"
+msgstr "Elabora solamente tra le ore %1. Nessuna restrizione se uguale a %2"
#: ../inc/prefs.inc:129
msgid ""
"Leave tasks in memory while suspended? %1 Suspended tasks will consume swap "
"space if 'yes' %2"
msgstr ""
-"Lasciare le applicazioni in memoria mentre sono sospese? %1(in caso "
-"affermativo le applicazioni consumano memoria di swap)%2"
+"Lasciare le attività in memoria mentre sono sospese? %1(se \"sì\" le attività "
+"sospese consumano memoria di swap)%2"
#: ../inc/prefs.inc:138
msgid "Switch between tasks every %1 Recommended: 60 minutes %2"
-msgstr "Cambia applicazione ogni %1(consigliato: 60 minuti%2"
+msgstr "Cambia attività ogni %1 Consigliato: 60 minuti %2"
#: ../inc/prefs.inc:146
msgid "On multiprocessors, use at most"
@@ -1073,8 +1046,8 @@ msgstr "processori"
#: ../inc/prefs.inc:152
msgid "On multiprocessors, use at most %1 Enforced by version 6.1+ %2"
msgstr ""
-"Sospendere l'elaborazione con GPU mentre è in uso il computer? %1Si applica "
-"dalla versione 6.7+%2"
+"Su sistemi multiprocessore usare al massimo %1 Si applica dalla versione "
+"6.1+ %2"
#: ../inc/prefs.inc:157
#, php-format
@@ -1084,7 +1057,7 @@ msgstr "% dei processori"
#: ../inc/prefs.inc:161
msgid "Use at most %1 Can be used to reduce CPU heat %2"
msgstr ""
-"Utilizza al massimo %s. Può essere utlizzato per ridurre il riscaldamento "
+"Utilizza al massimo %1. Può essere utlizzato per ridurre il riscaldamento "
"della CPU %2"
#: ../inc/prefs.inc:166
@@ -1128,17 +1101,17 @@ msgstr "Memoria: quando il computer è in uso, utilizza al massimo"
#: ../inc/prefs.inc:208
msgid "Memory: when computer is not in use, use at most"
-msgstr "Memoria: quando il computer è in uso, utilizza al massimo "
+msgstr "Memoria: quando il computer non è in uso, utilizza al massimo "
#: ../inc/prefs.inc:217
-#, fuzzy
msgid ""
"Computer is connected to the Internet about every %1 Leave blank or 0 if "
"always connected. %2 BOINC will try to maintain at least this much work (max "
"10 days). %3"
msgstr ""
-"Computer connesso a Internet ogni %1(Lascia in bianco o scrivi 0 se è sempre "
-"connesso.%2 BOINC cercherà di scaricare abbastanza lavoro.)%3"
+"Computer connesso a Internet ogni %1 Lascia in bianco o scrivi 0 se è sempre "
+"connesso. %2 BOINC cercherà di mantenere abbastanza lavoro (massimo 10 "
+"giorni). %3"
#: ../inc/prefs.inc:223 ../inc/prefs.inc:228 ../inc/prefs.inc:270
#: ../inc/util.inc:244
@@ -1147,15 +1120,15 @@ msgstr "giorni"
#: ../inc/prefs.inc:226
msgid "Maintain enough work for an additional"
-msgstr "Richiedi abbastanza riserva di lavoro per"
+msgstr "Mantieni abbastanza riserva di lavoro per"
#: ../inc/prefs.inc:232
msgid ""
"Confirm before connecting to Internet? %1 Matters only if you have a modem, "
"ISDN or VPN connection %2"
msgstr ""
-"Confermare prima di connettersi a Internet? % Ha senso solo in caso tu abbia "
-"un modem, ISDN o una connessione VPN %2"
+"Confermare prima di connettersi a Internet? %1 Ha senso solo in caso tu "
+"abbia un modem, ISDN o una connessione VPN %2"
#: ../inc/prefs.inc:241
msgid ""
@@ -1167,7 +1140,7 @@ msgstr ""
#: ../inc/prefs.inc:249
msgid "Maximum download rate:"
-msgstr "Velocità massima download:"
+msgstr "Velocità massima di download:"
#: ../inc/prefs.inc:251 ../inc/prefs.inc:256
msgid "Kbytes/sec"
@@ -1175,7 +1148,7 @@ msgstr "Kbytes/sec"
#: ../inc/prefs.inc:254
msgid "Maximum upload rate:"
-msgstr "Velocità massima upload:"
+msgstr "Velocità massima di upload:"
#: ../inc/prefs.inc:259
msgid "Use network only between the hours of"
@@ -1183,7 +1156,7 @@ msgstr "Utilizza la connessione di rete solamente tra le ore"
#: ../inc/prefs.inc:263
msgid "Transfer at most %1 Enforced by version 6.10.46+ %2"
-msgstr "Trasferisci al massimo %s Introdotta dalla versione 6.10.46 %2"
+msgstr "Trasferire al massimo %1. Si applica dalla versione 6.10.46+ %2"
#: ../inc/prefs.inc:269
msgid "Mbytes every"
@@ -1206,28 +1179,26 @@ msgid ""
"with resource shares of 100 and 200, the first will get 1/3 of your "
"resources and the second will get 2/3. %2"
msgstr ""
-"Divisione delle risorse %s Determina la proporzione delle risorse del "
+"Divisione delle risorse %1 Determina la proporzione delle risorse del "
"computer destinate a questo progetto. Esempio: se partecipi a due progetti "
-"con divisione delle risorse 100 e 200, il primo progetto riceverà 1/3 delle "
-"tue risorse, mentre il secondo riceverà 2/3 %2"
+"con divisione delle risorse di 100 e 200, il primo progetto riceverà 1/3 "
+"delle tue risorse, mentre il secondo riceverà 2/3 %2"
#: ../inc/prefs.inc:298
msgid "Accelerate GPU tasks by dedicating a CPU to each one?"
-msgstr ""
+msgstr "Accelerare le attività GPU dedicando a ciascuna di esse una CPU?"
#: ../inc/prefs.inc:308
msgid "Use CPU %1 Enforced by version 6.10+ %2"
-msgstr "Usa la CPU %1 Si applica dalla versione 6.10+ dei client %2"
+msgstr "Usa la CPU %1 Si applica dalla versione 6.10+ %2"
#: ../inc/prefs.inc:320
msgid "Use ATI GPU %1 Enforced by version 6.10+ %2"
-msgstr "Usa la GPU ATI % Si applica dalla versione 6.10+ dei client %2"
+msgstr "Usa la GPU ATI %1 Si applica dalla versione 6.10+ %2"
#: ../inc/prefs.inc:332
msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
-msgstr ""
-"Usa la GPU NVIDIA se presente %1 Si applica dalla versione 6.10+ dei client "
-"%2"
+msgstr "Usa la GPU NVIDIA %1 Si applica dalla versione 6.10+ %2"
#: ../inc/prefs.inc:346
msgid ""
@@ -1241,12 +1212,13 @@ msgstr ""
msgid ""
"Emails will be sent from %1; make sure your spam filter accepts this address."
msgstr ""
-"Verranno mandate email da %1; accerati che il tuo filtro di spam accetti "
+"Verranno mandate email da %1; accertati che il tuo filtro di spam accetti "
"questo indirizzo. "
#: ../inc/prefs.inc:362
msgid "Is it OK for %1 and your team (if any) to email you?"
-msgstr "Sei d'accordo che %1 mandi un email a te ed al tuo team?"
+msgstr ""
+"Sei d'accordo che %1 ed il tuo team (se ne hai uno) possano inviarti email?"
#: ../inc/prefs.inc:368
msgid "Should %1 show your computers on its web site?"
@@ -1276,20 +1248,20 @@ msgid ""
"range or not numeric."
msgstr ""
"%1Impossibile aggiornare le preferenze.%2 I valori segnati in rosso erano "
-"fuori dal range o non numerici."
+"fuori dall'intervallo consentito o non erano numerici."
#: ../inc/prefs.inc:432
msgid "bad venue: %1"
-msgstr ""
+msgstr "sede non valida: %1"
#: ../inc/prefs.inc:438
msgid "bad subset: %1"
-msgstr ""
+msgstr "sottoclasse non valida: %1"
#: ../inc/prefs.inc:657 ../inc/prefs.inc:660 ../inc/prefs.inc:1003
#: ../inc/prefs_util.inc:93 ../project.sample/project_specific_prefs.inc:75
msgid "yes"
-msgstr "si"
+msgstr "sì"
#: ../inc/prefs.inc:657 ../inc/prefs.inc:660 ../inc/prefs.inc:1005
#: ../inc/prefs_util.inc:93 ../project.sample/project_specific_prefs.inc:77
@@ -1403,7 +1375,6 @@ msgid "Database error"
msgstr "Errore del database"
#: ../inc/profile.inc:192
-#, fuzzy
msgid ""
"To prevent spam, profiles of users with an average credit of less than %1 "
"are displayed only to logged-in users. We apologize for this inconvenience."
@@ -1414,7 +1385,7 @@ msgstr ""
#: ../inc/profile.inc:196
msgid "User is banished"
-msgstr "L'utente è bandito."
+msgstr "L'utente è stato bannato."
#: ../inc/profile.inc:210
msgid "No profile exists for that user ID."
@@ -1430,7 +1401,7 @@ msgstr "Feedback ricevuti dal tuo profilo"
#: ../inc/profile.inc:263
msgid "Recommend this profile for User of the Day:"
-msgstr "Raccomanda questo profilo come User of the Day:"
+msgstr "Raccomanda questo profilo come Utente del Giorno:"
#: ../inc/profile.inc:264
msgid "I %1like%2 this profile"
@@ -1494,7 +1465,7 @@ msgstr "Non attivo"
#: ../inc/result.inc:161 ../inc/result.inc:201 ../user/explain_state.php:37
msgid "Unsent"
-msgstr "Non mandato"
+msgstr "Non inviato"
#: ../inc/result.inc:167
msgid "Completed, waiting for validation"
@@ -1549,9 +1520,8 @@ msgid "Aborted by user"
msgstr "Interrotto dall'utente"
#: ../inc/result.inc:186 ../inc/result.inc:239
-#, fuzzy
msgid "Upload failed"
-msgstr "Aggiornamento fallito"
+msgstr "Invio fallito"
#: ../inc/result.inc:189
msgid "Timed out - no response"
@@ -1587,7 +1557,7 @@ msgstr "Risultato ridondante"
#: ../inc/result.inc:218 ../user/explain_state.php:68
msgid "No reply"
-msgstr "Nessuna ripsosta"
+msgstr "Nessuna risposta"
#: ../inc/result.inc:228 ../user/explain_state.php:85
msgid "New"
@@ -1598,7 +1568,6 @@ msgid "Downloading"
msgstr "Scaricamento in corso"
#: ../inc/result.inc:230
-#, fuzzy
msgid "Processing"
msgstr "In elaborazione"
@@ -1624,12 +1593,11 @@ msgstr "Non necessario"
#: ../inc/result.inc:253
msgid "Workunit error - check skipped"
-msgstr "Errore nellìattività - ignorato il controllo"
+msgstr "Errore nell'attività - il controllo è stato ignorato"
#: ../inc/result.inc:254
-#, fuzzy
msgid "Checked, but no consensus yet"
-msgstr "Controllato, ma ancora nessun consenso"
+msgstr "Controllato, ma ancora non approvato"
#: ../inc/result.inc:255
msgid "Task was reported too late to validate"
@@ -1641,12 +1609,11 @@ msgstr "Non posso mandare il risultato"
#: ../inc/result.inc:285
msgid "Too many errors (may have bug)"
-msgstr "Troppi errori (può avere problemi)"
+msgstr "Troppi errori (potrebbe avere problemi)"
#: ../inc/result.inc:289
-#, fuzzy
msgid "Too many results (may be nondeterministic)"
-msgstr "Troppi risultati (possono essere non determinanti)"
+msgstr "Troppi risultati (può essere non deterministico)"
#: ../inc/result.inc:293
msgid "Too many total results"
@@ -1679,11 +1646,11 @@ msgstr "Visualizza nomi"
#: ../inc/result.inc:336
msgid "Task"
-msgstr "Lavori"
+msgstr "Attività"
#: ../inc/result.inc:339
msgid "Work unit"
-msgstr "Lavoro"
+msgstr "Unità di lavoro"
#: ../inc/result.inc:342
msgid "Computer"
@@ -1691,11 +1658,11 @@ msgstr "Computer"
#: ../inc/result.inc:345 ../inc/result.inc:594
msgid "Sent"
-msgstr "Mandato"
+msgstr "Inviato"
#: ../inc/result.inc:346
msgid "Time reported<br />or deadline"
-msgstr "Tempo riporato<br> o scadenza"
+msgstr "Tempo riportato<br />o scadenza"
#: ../inc/result.inc:347
msgid "explain"
@@ -1707,7 +1674,7 @@ msgstr "Stato"
#: ../inc/result.inc:350
msgid "Run time<br />(sec)"
-msgstr "Tempo di elaborazione<br>(sec)"
+msgstr "Tempo di elaborazione<br />(sec)"
#: ../inc/result.inc:351
msgid "CPU time<br />(sec)"
@@ -1744,14 +1711,12 @@ msgid "Client state"
msgstr "Stato client"
#: ../inc/result.inc:599
-#, fuzzy
msgid "Exit status"
msgstr "Stato di uscita"
#: ../inc/result.inc:601
-#, fuzzy
msgid "Report deadline"
-msgstr "Scadenza del report"
+msgstr "Scadenza"
#: ../inc/result.inc:602
msgid "Run time"
@@ -1767,18 +1732,17 @@ msgstr "Stato di validazione"
#: ../inc/result.inc:606
msgid "Application version"
-msgstr "versione dell'applicazione"
+msgstr "Versione dell'applicazione"
#: ../inc/result.inc:619
msgid "Output files"
-msgstr ""
+msgstr "File di output"
#: ../inc/result.inc:622
msgid "Stderr output"
msgstr "Output su Stderr"
#: ../inc/result.inc:669
-#, fuzzy
msgid "State"
msgstr "Stato"
@@ -1793,8 +1757,7 @@ msgstr "Parole chiave"
#: ../inc/team.inc:34
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-"Trova i team che hanno queste parole chiave nel loro nome o nella loro "
-"descrizione"
+"Trova i team che hanno queste parole nel loro nome o nella loro descrizione"
#: ../inc/team.inc:36 ../inc/team.inc:114 ../inc/team.inc:225
#: ../inc/team.inc:365 ../inc/team.inc:449 ../inc/user.inc:206
@@ -1945,7 +1908,7 @@ msgstr "Amministratore"
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
-msgstr "Precedente 1%"
+msgstr "Precedente %1"
#: ../inc/team.inc:273 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
@@ -2085,7 +2048,7 @@ msgstr "Team"
#: ../inc/user.inc:168
msgid "Cross-project"
-msgstr "ID su tutti i progetti "
+msgstr "Inter-progetto"
#: ../inc/user.inc:169
msgid "Certificate"
@@ -2114,7 +2077,7 @@ msgstr "URL"
#: ../inc/user.inc:207
msgid "Postal code"
-msgstr "CAP"
+msgstr "Codice postale"
#: ../inc/user.inc:208 ../inc/user.inc:313
msgid "%1 member since"
@@ -2270,14 +2233,12 @@ msgid "Add as friend"
msgstr "Aggiungi come amico"
#: ../inc/util.inc:113
-#, fuzzy
msgid "log out"
msgstr "Esci"
#: ../inc/util.inc:115
-#, fuzzy
msgid "log in"
-msgstr "Entra"
+msgstr "accedi"
#: ../inc/util.inc:174 ../user/login_form.php:37 ../user/login_form.php:62
msgid "Log in"
@@ -2290,7 +2251,6 @@ msgid "Create an account"
msgstr "Crea un account"
#: ../inc/util.inc:176
-#, fuzzy
msgid "Server status page"
msgstr "Stato del server"
@@ -2337,18 +2297,15 @@ msgid "Project down for maintenance"
msgstr "Progetto sospeso per manutenzione"
#: ../inc/util.inc:753
-#, fuzzy
msgid "%1 is temporarily shut down for maintenance. Please try again later."
msgstr ""
-"Questa pagina richiede un accesso al database. Il nostro database server è "
-"temporaneamente spento per manutenzione. Per favore riprova più tardi."
+"%1 è temporaneamente fuori servizio per manutenzione. Riprova più tardi."
#: ../inc/util.inc:771
msgid "Unable to connect to database - please try again later"
msgstr "Impossibile connettersi al database - per favore riprova più tardi"
#: ../inc/util.inc:772
-#, fuzzy
msgid "Error:"
msgstr "Errore:"
@@ -2362,7 +2319,7 @@ msgstr "Rimani loggato su questo computer"
#: ../user/account_finish.php:34
msgid "Finish account setup"
-msgstr ""
+msgstr "Completa la configurazione dell'account"
#: ../user/account_finish.php:41 ../user/create_account_form.php:89
msgid "Identifies you on our web site. Use your real name or a nickname."
@@ -2383,14 +2340,12 @@ msgid "Optional"
msgstr "Dati facoltativi"
#: ../user/account_finish_action.php:27 ../user/create_account_action.php:86
-#, fuzzy
msgid "You must supply a name for your account"
-msgstr "Devi dare un nome per il tuo account."
+msgstr "Devi fornire un nome per il tuo account"
#: ../user/account_finish_action.php:30 ../user/create_account_action.php:89
-#, fuzzy
msgid "HTML tags not allowed in name"
-msgstr "I tag HTML non sono permessi nel tuo nome."
+msgstr "I tag HTML non sono ammessi nel nome"
#: ../user/add_venue.php:85
#, fuzzy
@@ -2429,7 +2384,7 @@ msgstr "Tempo d'installazione"
#: ../user/bbcode.php:23
msgid "BBCode tags"
-msgstr ""
+msgstr "Tag BBCode"
#: ../user/bbcode.php:25
msgid ""
@@ -2438,111 +2393,115 @@ msgid ""
"have used %1 in HTML) and end with ] (where you would have used %2 in\n"
"HTML)."
msgstr ""
+"I tag BBCode ti consentono di formattare il testo del tuo profilo e i "
+"messaggi inviati in bacheca.\n"
+" Essi sono simili all'HTML, ma più semplici. I tag iniziano con una [ (in "
+"HTML potresti\n"
+" usare %1) e terminano con ] (in HTML\n"
+" potresti usare %2)."
#: ../user/bbcode.php:31
msgid "Examples"
-msgstr ""
+msgstr "Esempi"
+# 75%
#: ../user/bbcode.php:32
msgid "Bold"
-msgstr ""
+msgstr "Grassetto"
#: ../user/bbcode.php:33
-#, fuzzy
msgid "Italic"
-msgstr "Invalido"
+msgstr "Corsivo"
#: ../user/bbcode.php:34
-#, fuzzy
msgid "Underline"
-msgstr "Rifiuto"
+msgstr "Sottolineato"
#: ../user/bbcode.php:35
-#, fuzzy
msgid "Superscript"
-msgstr "Descrizione"
+msgstr "Apice"
#: ../user/bbcode.php:36
-#, fuzzy
msgid "Big text"
-msgstr "testo"
+msgstr "Testo in grande"
#: ../user/bbcode.php:37
-#, fuzzy
msgid "Red text"
-msgstr "testo"
+msgstr "Testo in rosso"
#: ../user/bbcode.php:38
msgid "link to website"
-msgstr ""
+msgstr "link al sito"
#: ../user/bbcode.php:39
-#, fuzzy
msgid "Quoted text"
-msgstr "Abbandona il team"
+msgstr "Testo citato"
#: ../user/bbcode.php:39
msgid "use for quoted blocks of text"
-msgstr ""
+msgstr "utilizza per le citazioni"
#: ../user/bbcode.php:40
msgid "use to display an image"
-msgstr ""
+msgstr "usa per visualizzare un'immagine"
#: ../user/bbcode.php:41
msgid "Code snippet here"
-msgstr ""
+msgstr "Inserisci qui il frammento di codice"
#: ../user/bbcode.php:41
msgid "use to display some code"
-msgstr ""
+msgstr "usa per visualizzare codici"
#: ../user/bbcode.php:42
msgid "Pre-formatted text"
-msgstr ""
+msgstr "Testo preformattato"
#: ../user/bbcode.php:42
msgid "use to display pre-formatted (usually monospaced) text"
msgstr ""
+"usa per visualizzare un testo preformattato (di solito è un carattere "
+"monospaziato)"
#: ../user/bbcode.php:43
msgid "Item 1"
-msgstr ""
+msgstr "Elemento 1"
#: ../user/bbcode.php:43
msgid "Item2"
-msgstr ""
+msgstr "Elemento 2"
#: ../user/bbcode.php:43
msgid "Item 2"
-msgstr ""
+msgstr "Elemento 2"
#: ../user/bbcode.php:45
msgid "use to link to Trac ticket on BOINC website"
-msgstr ""
+msgstr "usa per inserire un link ad un ticket su Trac sul sito BOINC"
#: ../user/bbcode.php:47
msgid "use to link to Trac Wiki on BOINC website"
-msgstr ""
+msgstr "usa per inserire un link alla Wiki Trac sul sito BOINC"
#: ../user/bbcode.php:49
msgid "use to link to SVN changeset on BOINC website"
-msgstr ""
+msgstr "usa per inserire un link ad un set di modifiche su SVN sul sito BOINC"
#: ../user/bbcode.php:53
msgid ""
"If you don't close a tag or don't specify a parameter correctly,\n"
"the raw tag itself will display instead of the formatted text."
msgstr ""
+"Se non chiudi un tag, o no specifichi un parametro in maniera corretta,\n"
+"il tag sarà visualizzato in chiaro al posto del testo formattato."
#: ../user/create_account_action.php:26
-#, fuzzy
msgid "Can't create account"
-msgstr "Crea un account"
+msgstr "Non è possibile creare l'account"
#: ../user/create_account_action.php:29
msgid "Click your browser's <b>Back</b> button to try again."
-msgstr ""
+msgstr "Fai click sul tasto <b>Indietro</b> del tuo browser per riprovare."
#: ../user/create_account_action.php:38 ../user/create_account_action.php:40
#: ../user/create_account_form.php:43
@@ -2554,6 +2513,8 @@ msgid ""
"Sorry, this project has disabled the creation of new accounts.\n"
"Please try again later."
msgstr ""
+"Spiacente, questo progetto ha disabilitato la creazione di nuovi account.\n"
+"Per favore riprova più tardi."
#: ../user/create_account_action.php:53
msgid "Your reCAPTCHA response was not correct. Please try again."
@@ -2576,25 +2537,24 @@ msgstr ""
#: ../user/create_account_action.php:98
msgid "There's already an account with that email address."
-msgstr ""
+msgstr "Esiste già un account associato a questo indirizzo email."
#: ../user/create_account_action.php:104 ../user/edit_passwd_action.php:33
-#, fuzzy
msgid "New passwords are different"
-msgstr "Ripeti nuova password"
+msgstr "Le nuove password sono diverse"
#: ../user/create_account_action.php:111 ../user/edit_passwd_action.php:41
msgid "Passwords may only include ASCII characters."
-msgstr ""
+msgstr "Le password possono comprendere solo caratteri ASCII."
#: ../user/create_account_action.php:116 ../user/edit_passwd_action.php:45
msgid "New password is too short: minimum password length is %1 characters."
msgstr ""
+"La nuova password è troppo corta: la lunghezza minima è di %1 caratteri."
#: ../user/create_account_action.php:137
-#, fuzzy
msgid "Couldn't create account"
-msgstr "Crea un account"
+msgstr "Non è stato possibile creare l'account"
#: ../user/create_account_form.php:44
msgid "Account creation is currently disabled. Please try again later."
@@ -2603,14 +2563,12 @@ msgstr ""
"tardi."
#: ../user/create_account_form.php:53
-#, fuzzy
msgid ""
"Don't use this form. Just run BOINC, select Add Project, and enter an email "
"address and password."
msgstr ""
-"NOTA: se stai usando il BOINC Manager, non usare questo modulo. Appena "
-"avviato BOINC, seleziona 'Connessione ad un progetto' ed inserisci un "
-"indirizzo email ed una password."
+"Non usare questo modulo. Esegui BOINC, seleziona Aggiungi Progetto e "
+"inserisci un indirizzo mail e una password."
#: ../user/create_account_form.php:71
msgid ""
@@ -2649,9 +2607,8 @@ msgid "Confirm password"
msgstr "Conferma la password"
#: ../user/create_account_form.php:123
-#, fuzzy
msgid "Please enter the words shown in the image"
-msgstr "Per favore inserisci le parole visualizzate nell'immagine."
+msgstr "Per favore inserisci le parole visualizzate nell'immagine"
#: ../user/create_account_form.php:129
msgid "Create account"
@@ -2778,24 +2735,20 @@ msgstr ""
"creare o modificare un profilo. Ci scusiamo per l'inconveniente."
#: ../user/delete_account.php:57
-#, fuzzy
msgid "Couldn't delete account"
-msgstr "Non posso ritirare un vecchio computer"
+msgstr "Non è stato possibile cancellare l'account"
#: ../user/delete_account.php:59
-#, fuzzy
msgid "Account deleted"
-msgstr "Dati dell'account"
+msgstr "Account cancellato"
#: ../user/delete_account.php:60
-#, fuzzy
msgid "Your account has been deleted."
-msgstr "La tua raccomandazione è stata registrata."
+msgstr "Il tuo account è stato cancellato."
#: ../user/delete_account.php:64
-#, fuzzy
msgid "Confirm delete account"
-msgstr "Crea un account"
+msgstr "Conferma cancellazione dell'account"
#: ../user/delete_account.php:67
msgid ""
@@ -2805,17 +2758,23 @@ msgid ""
"No jobs will be issued to any computers attached\n"
"to this account."
msgstr ""
+"La cancellazione del tuo account rimuoverà tutte le tue\n"
+"informazioni personali dai nostri server,\n"
+"incluso il tuo profilo e i messaggi inviati al forum.\n"
+"Non sarà rilasciato nessun lavoro a nessun computer\n"
+"associato a questo account."
#: ../user/delete_account.php:73
msgid ""
"This cannot be undone.\n"
"Once your account has been deleted, you cannot get it back."
msgstr ""
+"Impossibile annullare l'operazione.\n"
+"Una volta che il tuo account è stato cancellato, non potrai riabilitarlo."
#: ../user/delete_account.php:76
-#, fuzzy
msgid "Are you sure you want to delete your account?"
-msgstr "Sei sicuro di voler cancellare le tue preferenze separate %1 per %2?"
+msgstr "Sei sicuro di voler cancellare il tuo account?"
#: ../user/delete_account.php:79 ../user/delete_profile.php:52
#: ../user/donations.php:322 ../user/donations.php:326 ../user/friend.php:238
@@ -2825,9 +2784,8 @@ msgid "Yes"
msgstr "Si"
#: ../user/delete_account.php:79
-#, fuzzy
msgid "Delete this account"
-msgstr "Cancella questo computer"
+msgstr "Cancella questo account"
#: ../user/delete_account.php:80 ../user/delete_profile.php:53
#: ../user/friend.php:239 ../user/user_search.php:128
@@ -2836,32 +2794,28 @@ msgid "No"
msgstr "No"
#: ../user/delete_account.php:80
-#, fuzzy
msgid "Do not delete this account"
-msgstr "Cancella questo computer"
+msgstr "Non cancellare questo account"
#: ../user/delete_profile.php:30
-#, fuzzy
msgid "couldn't delete profile - please try again later"
-msgstr "Non puoi entrare nel team - per favore riprova più tardi."
+msgstr "non è possibile eliminare il profilo - per favore riprova più tardi"
#: ../user/delete_profile.php:33
-#, fuzzy
msgid "Delete Confirmation"
-msgstr "Informazioni computer"
+msgstr "Conferma eliminazione"
#: ../user/delete_profile.php:35
-#, fuzzy
msgid "Your profile has been deleted."
-msgstr "Il tuo messaggio è stato inviato."
+msgstr "Il tuo profilo è stato cancellato."
#: ../user/delete_profile.php:40
msgid "Profile delete confirmation"
-msgstr ""
+msgstr "Conferma eliminazione del profilo"
#: ../user/delete_profile.php:43
msgid "Are you sure?"
-msgstr ""
+msgstr "Sei sicuro?"
#: ../user/delete_profile.php:44
msgid ""
@@ -2869,60 +2823,65 @@ msgid ""
"you will have to start from scratch\n"
"if you want another profile in the future."
msgstr ""
+"I profili cancellati sono perduti per sempre e non possono essere "
+"ripristinati --\n"
+"dovrai ricominciare dall'inizio\n"
+"se vorrai un altro profilo in futuro."
#: ../user/delete_profile.php:48
msgid ""
"If you're sure, click 'Yes'\n"
"to remove your profile from our database."
msgstr ""
+"Se sei sicuro, clicca 'Sì'\n"
+"per rimuovere il tuo profilo dal nostro database."
#: ../user/delete_profile.php:52
-#, fuzzy
msgid "Delete my profile"
-msgstr "Crea un profilo"
+msgstr "Cancella il mio profilo"
#: ../user/delete_profile.php:53
-#, fuzzy
msgid "Do not delete my profile"
-msgstr "Questo profilo %1non mi piace%2"
+msgstr "Non cancellare il mio profilo"
#: ../user/donated.php:25
msgid "PayPal - Transaction Completed"
-msgstr ""
+msgstr "PayPal - Transazione Completata"
#: ../user/donated.php:28
msgid "Thank you for donating!"
-msgstr ""
+msgstr "Grazie per la tua donazione!"
#: ../user/donated.php:29
-#, fuzzy
msgid "Your donation for has been completed."
-msgstr "La tua raccomandazione è stata registrata."
+msgstr "La tua donazione è stata completata."
#: ../user/donated.php:30
msgid ""
"Your donation will be added to the progress bar after confirmation by PayPal."
msgstr ""
+"La tua donazione sarà aggiunta alla barra di avanzamento dopo la conferma da "
+"parte di PayPal."
#: ../user/donated.php:32
msgid "You have canceled your donation."
-msgstr ""
+msgstr "Hai annullato la tua donazione."
#: ../user/donations.php:24
-#, fuzzy
msgid "This project is not accepting donations."
-msgstr "Questa richiesta è ancora in attesa di accettazione."
+msgstr "Questo progetto non accetta donazioni."
#: ../user/donations.php:34
-#, fuzzy
msgid "%1 donations"
-msgstr "%1 giorni"
+msgstr "%1 donazioni"
#: ../user/donations.php:39
msgid ""
"This project is accepting donations via\n"
"%1."
msgstr ""
+"Questo progetto accetta donazioni via\n"
+" %1."
#: ../user/donations.php:42
msgid ""
@@ -2938,38 +2897,55 @@ msgid ""
" (please note that the rates are only estimates\n"
" and the actual amount may differ)."
msgstr ""
+"Per fare una donazione, inserisci l'importo che vuoi donare usando i "
+"seguenti campi.\n"
+"PayPal accetta diverse valute\n"
+"(Dollari Canadesi, Euro, Sterline, Dollari U.S.A.,\n"
+"Yen, Dollari Australiani, Dollari Neozelandesi,\n"
+"Franchi Svizzeri, Dollari di Hong Kong, Dollari di Singapore, Corone "
+"Svedesi,\n"
+"Corone Danesi, Zloty Polacchi, Corone Norvegesi,\n"
+"Fiorini Ungheresi, Corone Ceche).\n"
+"Puoi usare il convertitore di valuta\n"
+"per vedere la somma donata equivalente nelle diverse valute\n"
+"(per favore nota che i tassi di conversione sono solo stimati\n"
+"e la somma reale potrebbe essere differente)."
#: ../user/donations.php:316
msgid "Amount you would like to donate"
-msgstr ""
+msgstr "Somma che vuoi donare"
#: ../user/donations.php:317
msgid "Estimated value in"
-msgstr ""
+msgstr "Valore stimato in"
#: ../user/donations.php:320 ../user/donations.php:324
-#, fuzzy
msgid "Anonymous donation"
-msgstr "Piattaforma anonima"
+msgstr "Donazione anonima"
#: ../user/donations.php:320
msgid ""
"Select this if you dont want your name and account number displayed in\n"
"donator lists.<br>If not checked, you will be recorded as user ID %1"
msgstr ""
+"Seleziona questo se vuoi che il tuo nome e il tuo numero di account non "
+"vengano\n"
+"visualizzati nella lista donatori.<br>Se non selezioni, sarai memorizzato "
+"come un utente con ID %1"
#: ../user/donations.php:324
msgid "To assign the donation with your user ID, please log in."
msgstr ""
+"Per associare la donazione al tuo ID utente devi accedere con il tuo "
+"account."
#: ../user/donations.php:328
-#, fuzzy
msgid "Proceed"
-msgstr "Il profilo è stato salvato"
+msgstr "Procedi"
#: ../user/donations.php:329
msgid "Donations are accepted through"
-msgstr ""
+msgstr "Le donazioni sono accettate tramite"
#: ../user/download_network.php:25
msgid "Download BOINC add-on software"
@@ -2996,7 +2972,7 @@ msgstr ""
"Non forniamo istruzioni per l'installazione di queste applicazioni.\n"
"In ogni caso l'autore potrebbe aver fornito qualche informazione "
"sull'installazione o disinstallazione dell'applicazione. \n"
-"Se non è sufficiente contatta pure l'autore."
+"Se questo non è sufficiente dovrai contattare l'autore."
#: ../user/download_network.php:36
msgid "Instructions for installing and running BOINC are %1here%2."
@@ -3009,58 +2985,56 @@ msgid "This list is managed centrally at %1the BOINC website%2."
msgstr "Questo elenco è amministrato centralmente dal %1sito web di BOINC%2."
#: ../user/edit_email_action.php:31
-#, fuzzy
msgid "Change email address of account"
-msgstr "Cambia gli indirizzi mail del tuo account"
+msgstr "Cambia l'indirizzo email del tuo account"
#: ../user/edit_email_action.php:34 ../user/edit_email_action.php:36
-#, fuzzy
msgid "New email address '%1' is invalid."
-msgstr "Nuovo indirizzo email"
+msgstr "Il nuovo indirizzo email '%1' non è valido."
#: ../user/edit_email_action.php:38
msgid "New email address is same as existing address. Nothing is changed."
msgstr ""
+"Il nuovo indirizzo email è uguale a quello esistente. Nulla è stato "
+"cambiato."
#: ../user/edit_email_action.php:42
msgid "There's already an account with that email address"
-msgstr ""
+msgstr "Esiste già un account associato a questo indirizzo email"
#: ../user/edit_email_action.php:54
-#, fuzzy
msgid "Invalid password."
-msgstr "Conferma la password"
+msgstr "Password non valida."
#: ../user/edit_email_action.php:62
-#, fuzzy
msgid "The email address of your account is now %1."
-msgstr "Cambia gli indirizzi mail del tuo account"
+msgstr "L'indirizzo email del tuo account è ora %1."
#: ../user/edit_email_action.php:64
msgid "Please %1validate this email address%2."
-msgstr ""
+msgstr "Sei pregato di %1validare questo indirizzo email%2."
#: ../user/edit_email_action.php:67
msgid ""
"We can't update your email address due to a database problem. Please try "
"again later."
-msgstr "Impossibile selezionare il database, per favore riprova più tardi"
+msgstr ""
+"Non possiamo aggiornare il tuo indirizzo email a causa di un problema del "
+"database. Per favore riprova più tardi."
#: ../user/edit_email_form.php:28 ../user/edit_email_form.php:52
msgid "Change email address"
-msgstr "Cambia indirizzo mail"
+msgstr "Cambia l'indirizzo email"
#: ../user/edit_email_form.php:37
msgid "Change the email address of your account"
-msgstr "Cambia gli indirizzi mail del tuo account"
+msgstr "Cambia l'indirizzo email del tuo account"
#: ../user/edit_email_form.php:38
-#, fuzzy
msgid "New email address"
msgstr "Nuovo indirizzo email"
#: ../user/edit_email_form.php:39
-#, fuzzy
msgid "Must be a valid address of the form 'name at domain'"
msgstr "Deve essere un indirizzo email valido del tipo 'nome at dominio'"
@@ -3069,54 +3043,55 @@ msgid "No password?"
msgstr "Non hai la password?"
#: ../user/edit_forum_preferences_action.php:35
-#, fuzzy
msgid "Confirm reset"
-msgstr "Conferma la password"
+msgstr "Conferma il reset"
#: ../user/edit_forum_preferences_action.php:36
msgid ""
"This action will erase any changes you have made in your community "
"preferences. To cancel, click your browser's Back button."
msgstr ""
+"Questa azione eliminerà qualsiasi cambiamento apportato alle tue preferenze. "
+"Per annullare clicca sul pulsante Indietro del tuo browser."
#: ../user/edit_forum_preferences_action.php:40
-#, fuzzy
msgid "Reset preferences"
-msgstr "Rimuovi preferenze"
+msgstr "Reimposta le preferenze"
#: ../user/edit_forum_preferences_action.php:90
msgid "Error: Not the right kind of file, only PNG and JPEG are supported."
msgstr ""
+"Errore. Questo non è il tipo di file corretto, soltanto immagini PNG e JPEG "
+"sono consentite."
#: ../user/edit_forum_preferences_action.php:116
msgid "Your signature was too long, please keep it less than 250 characters."
-msgstr ""
+msgstr "La tua firma era troppo lunga, sono consentiti al più 250 caratteri."
#: ../user/edit_forum_preferences_action.php:139
#: ../user/edit_forum_preferences_action.php:153
-#, fuzzy
msgid "No such user: %1"
-msgstr "Nessun utente"
+msgstr "Nessun utente: %1"
#: ../user/edit_forum_preferences_form.php:56
msgid ""
"How should we notify you of new private messages, friend requests, posts in "
"subscribed threads, and other events?"
msgstr ""
+"In che modo possiamo notificarti nuovi messaggi privati, richieste da amici, "
+"avvisi sugli argomenti sottoscritti e altri eventi?"
#: ../user/edit_forum_preferences_form.php:57
-#, fuzzy
msgid "On my Account page (no email)"
-msgstr "Ottieni una chiave account via email"
+msgstr "Sulla mia pagina Account (no email)"
#: ../user/edit_forum_preferences_form.php:58
-#, fuzzy
msgid "Immediately, by email"
-msgstr "Ottieni una chiave account via email"
+msgstr "Immediatamente, per email"
#: ../user/edit_forum_preferences_form.php:59
msgid "In a single daily email"
-msgstr ""
+msgstr "In una singola email giornaliera"
#: ../user/edit_forum_preferences_form.php:75
#, fuzzy
@@ -3125,41 +3100,39 @@ msgstr "Forum"
#: ../user/edit_forum_preferences_form.php:76
msgid "Avatar"
-msgstr ""
+msgstr "Avatar"
#: ../user/edit_forum_preferences_form.php:77
msgid "An image representing you on the message boards."
-msgstr ""
+msgstr "Immagine che ti rappresenta sul forum."
#: ../user/edit_forum_preferences_form.php:78
msgid "Format: JPG or PNG. Size: at most 4 KB, 100x100 pixels"
-msgstr ""
+msgstr "Formato: JPG o PNG. Dimensione: al massimo 4KB, 100x100 pixel."
#: ../user/edit_forum_preferences_form.php:80
-#, fuzzy
msgid "Don't use an avatar"
-msgstr "Non usare i tag HTML."
+msgstr "Non usare un avatar"
#: ../user/edit_forum_preferences_form.php:82
msgid "Use a Globally Recognized Avatar provided by %1"
-msgstr ""
+msgstr "Usa un Globally Recognized Avatar fornito da %1"
#: ../user/edit_forum_preferences_form.php:84
msgid "Use this uploaded avatar:"
-msgstr ""
+msgstr "Usa questa immagine caricata:"
#: ../user/edit_forum_preferences_form.php:87
msgid "Avatar preview"
-msgstr ""
+msgstr "Anteprima dell'avatar"
#: ../user/edit_forum_preferences_form.php:87
msgid "This is how your avatar will look"
-msgstr ""
+msgstr "Così apparirà il tuo avatar"
#: ../user/edit_forum_preferences_form.php:96
-#, fuzzy
msgid "Signature for message board posts"
-msgstr "Crea un forum di messaggi per %1"
+msgstr "Firma per i messaggi nel forum"
#: ../user/edit_forum_preferences_form.php:99
msgid ""
@@ -3170,15 +3143,15 @@ msgstr ""
#: ../user/edit_forum_preferences_form.php:104
msgid "characters remaining"
-msgstr ""
+msgstr "caratteri rimanenti"
#: ../user/edit_forum_preferences_form.php:105
msgid "Attach signature by default"
-msgstr ""
+msgstr "Allega di default la firma"
#: ../user/edit_forum_preferences_form.php:108
msgid "Signature preview"
-msgstr ""
+msgstr "Anteprima della firma"
#: ../user/edit_forum_preferences_form.php:109
msgid "This is how your signature will look in the forums"
@@ -3190,45 +3163,42 @@ msgid "Message display"
msgstr "Indice del forum"
#: ../user/edit_forum_preferences_form.php:129
-#, fuzzy
msgid "What to display"
-msgstr "Nessun lavoro da visualizzare"
+msgstr "Cosa visualizzare"
#: ../user/edit_forum_preferences_form.php:130
msgid "Hide avatar images"
-msgstr ""
+msgstr "Nascondi le immagini degli avatar"
#: ../user/edit_forum_preferences_form.php:131
msgid "Hide signatures"
-msgstr ""
+msgstr "Nascondi le firme"
#: ../user/edit_forum_preferences_form.php:132
msgid "Show images as links"
-msgstr ""
+msgstr "Visualizza le immagini come link"
#: ../user/edit_forum_preferences_form.php:133
msgid "Open links in new window/tab"
-msgstr ""
+msgstr "Apri i collegamenti in una nuova finestra/scheda"
#: ../user/edit_forum_preferences_form.php:134
msgid "Highlight special users"
-msgstr ""
+msgstr "Evidenzia utenti speciali"
#: ../user/edit_forum_preferences_form.php:138
msgid "How to sort"
msgstr ""
#: ../user/edit_forum_preferences_form.php:139
-#, fuzzy
msgid "Threads:"
-msgstr "Argomenti"
+msgstr "Discussioni:"
# ########################################
# Forum
#: ../user/edit_forum_preferences_form.php:139
-#, fuzzy
msgid "Posts:"
-msgstr "Messaggi"
+msgstr "Messaggi:"
#: ../user/edit_forum_preferences_form.php:140
msgid "Jump to first new post in thread automatically"
@@ -3277,7 +3247,7 @@ msgstr "Aggiorna le preferenze"
#: ../user/edit_forum_preferences_form.php:176
#: ../user/edit_forum_preferences_form.php:178
msgid "Reset"
-msgstr ""
+msgstr "Reset"
#: ../user/edit_forum_preferences_form.php:177
msgid "Or click here to reset preferences to the defaults"
@@ -3675,7 +3645,7 @@ msgstr ""
#: ../user/forum_banishment_vote_action.php:57
#: ../user/forum_moderate_post.php:55 ../user/forum_moderate_thread.php:52
msgid "Obscene"
-msgstr ""
+msgstr "Osceno"
#: ../user/forum_banishment_vote.php:65
#: ../user/forum_banishment_vote_action.php:59
@@ -3730,7 +3700,7 @@ msgstr "Tu ora sei amico/a di %1."
#: ../user/forum_edit.php:86 ../user/forum_search.php:72
msgid "Forum"
-msgstr ""
+msgstr "Forum"
#: ../user/forum_edit.php:110
#, fuzzy
@@ -3907,11 +3877,11 @@ msgstr "Nascondi"
#: ../user/forum_moderate_post.php:57 ../user/forum_moderate_thread.php:54
msgid "Commercial spam"
-msgstr ""
+msgstr "Spam commerciale"
#: ../user/forum_moderate_post.php:58
msgid "Doublepost"
-msgstr ""
+msgstr "Post doppio"
#: ../user/forum_moderate_post.php:63
#, fuzzy
@@ -3930,7 +3900,7 @@ msgstr "Nessun utente"
#: ../user/forum_moderate_post.php:80
msgid "Ban duration"
-msgstr ""
+msgstr "Durata del ban"
#: ../user/forum_moderate_post.php:81
#, fuzzy
@@ -3944,11 +3914,11 @@ msgstr "%1 giorni"
#: ../user/forum_moderate_post.php:83
msgid "1 week"
-msgstr ""
+msgstr "1 settimana"
#: ../user/forum_moderate_post.php:84
msgid "2 weeks"
-msgstr ""
+msgstr "2 settimane"
#: ../user/forum_moderate_post.php:85
#, fuzzy
@@ -3957,7 +3927,7 @@ msgstr "%1 minuti"
#: ../user/forum_moderate_post.php:86
msgid "Forever"
-msgstr ""
+msgstr "Per sempre"
#: ../user/forum_moderate_post.php:96
msgid "Optional explanation %1 This is included in email to user.%2"
@@ -3968,7 +3938,7 @@ msgstr ""
#: ../user/forum_rss.php:55 ../user/friend.php:81 ../user/get_passwd.php:41
#: ../user/get_passwd.php:75
msgid "OK"
-msgstr ""
+msgstr "OK"
#: ../user/forum_moderate_post_action.php:57
#, fuzzy
@@ -3977,11 +3947,11 @@ msgstr "Tu ora sei amico/a di %1."
#: ../user/forum_moderate_post_action.php:85
msgid "Can't move to different category type"
-msgstr ""
+msgstr "Non posso muoverlo in una categoria differente"
#: ../user/forum_moderate_post_action.php:89
msgid "Can't move to different category"
-msgstr ""
+msgstr "Non posso muoverlo in una categoria differente"
#: ../user/forum_moderate_post_action.php:110
msgid "Not authorized to banish users"
@@ -4273,7 +4243,7 @@ msgstr ""
#: ../user/forum_search.php:39
msgid "For example: \"43214\""
-msgstr ""
+msgstr "Per esempio:\"43214\""
#: ../user/forum_search.php:41
#, fuzzy
@@ -4296,7 +4266,7 @@ msgstr "%1 minuti"
#: ../user/forum_search.php:52
msgid "1 year"
-msgstr ""
+msgstr "1 anno"
#: ../user/forum_search.php:73
msgid "Only display posts from this forum"
@@ -4873,9 +4843,8 @@ msgid "name"
msgstr "nome"
#: ../user/host_edit_form.php:70 ../user/workunit.php:41
-#, fuzzy
msgid "created"
-msgstr "crea"
+msgstr "creato"
#: ../user/host_edit_form.php:70
#, fuzzy
@@ -4953,11 +4922,11 @@ msgstr ""
#: ../user/html.php:27
msgid "bold"
-msgstr ""
+msgstr "grassetto"
#: ../user/html.php:28
msgid "italics"
-msgstr ""
+msgstr "corsivo"
#: ../user/html.php:29
msgid "hyperlink"
@@ -5337,7 +5306,7 @@ msgstr ""
#: ../user/pending.php:66
msgid "Result ID"
-msgstr ""
+msgstr "ID Risultato"
#: ../user/pending.php:66
#, fuzzy
@@ -5361,7 +5330,7 @@ msgstr "Crediti non ancora assegnati"
#: ../user/pm.php:32
msgid "Block messages from this user"
-msgstr ""
+msgstr "Blocca i messaggi da questo utente"
#: ../user/pm.php:32
#, fuzzy
@@ -5392,11 +5361,11 @@ msgstr "Cancella i messaggi selezionati"
#: ../user/pm.php:112
msgid "Select all"
-msgstr ""
+msgstr "Seleziona tutto"
#: ../user/pm.php:114
msgid "Unselect all"
-msgstr ""
+msgstr "Deseleziona tutto"
#: ../user/pm.php:117
msgid "Delete selected messages"
@@ -5641,7 +5610,7 @@ msgstr "con crediti recenti"
#: ../user/profile_search_action.php:54
msgid "No profiles found containing '%1'"
-msgstr ""
+msgstr "Nessun profilo contenente '%1' trovato"
#: ../user/result.php:30
#, fuzzy
@@ -5711,7 +5680,7 @@ msgstr "Ospite"
#: ../user/server_status.php:257
msgid "data-driven web pages"
-msgstr ""
+msgstr "pagine web generate dal database"
#: ../user/server_status.php:263
#, fuzzy
@@ -5720,7 +5689,7 @@ msgstr "Server di upload/download"
#: ../user/server_status.php:266
msgid "scheduler"
-msgstr ""
+msgstr "schedulatore"
#: ../user/server_status.php:299
msgid "Running:"
@@ -6396,7 +6365,7 @@ msgstr ""
#: ../user/team_founder_transfer_form.php:50
msgid "Assume foundership"
-msgstr ""
+msgstr "Assumi ruolo di fondatore"
#: ../user/team_founder_transfer_form.php:54
msgid ""
diff --git a/html/languages/translations/ja.po b/html/languages/translations/ja.po
index 2202c9d..7378ca2 100644
--- a/html/languages/translations/ja.po
+++ b/html/languages/translations/ja.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-03-16 11:43+0200\n"
"Last-Translator: Kai <www.carrotsoft at gmail.com>\n"
"Language-Team: \n"
@@ -192,7 +192,7 @@ msgstr "高度な検索"
# #######################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "非公開メッセージ"
@@ -204,8 +204,8 @@ msgstr "非公開メッセージ"
msgid "Questions and Answers"
msgstr "質問と答(Q&A)"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -283,7 +283,7 @@ msgstr "未読"
msgid "Message %1"
msgstr "メッセージ"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "非公開"
@@ -501,7 +501,7 @@ msgstr "スレッド"
# #######################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "投稿"
@@ -510,7 +510,7 @@ msgstr "投稿"
msgid "Views"
msgstr "閲覧数"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "最新の投稿"
@@ -553,7 +553,7 @@ msgid "Home"
msgstr "自宅"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "勤務場所"
@@ -619,9 +619,9 @@ msgid "Created"
msgstr "作成日時"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -800,7 +800,7 @@ msgstr "最後の接続日時"
msgid "Computer info"
msgstr "コンピュータの情報"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "順位"
@@ -809,9 +809,9 @@ msgstr "順位"
msgid "Avg. credit"
msgstr "平均功績値"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -899,8 +899,8 @@ msgstr "過去30日の間に活動のあったコンピュータのみ"
msgid "Computer ID"
msgstr "コンピュータ ID "
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -936,7 +936,7 @@ msgstr "受信箱"
msgid "Write"
msgstr "作成"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "非公開メッセージを送信する"
@@ -1680,7 +1680,7 @@ msgstr "報告日時 <br />または期限"
msgid "explain"
msgstr "説明"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "状態"
@@ -1774,9 +1774,9 @@ msgstr "キーワード"
msgid "Find teams with these words in their names or descriptions"
msgstr "指定する語句がその名称または説明に含まれているチームを探します"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1784,7 +1784,7 @@ msgstr "指定する語句がその名称または説明に含まれているチ
msgid "Country"
msgstr "国名"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "チームの種類"
@@ -1812,8 +1812,8 @@ msgstr "あなたが要求中です"
msgid "founder response deadline is %1"
msgstr "創設者の応答期限は、%1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "なし"
@@ -1837,27 +1837,27 @@ msgstr "説明"
msgid "Web site"
msgstr "ウェブサイト"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "プロジェクト横断の統計"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "種類"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "掲示板"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "スレッド"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "このチームに参加する"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1865,79 +1865,79 @@ msgstr ""
"注意:あなたがプロジェクト・プレファレンスの中で 「Eメイルを送っても良い」という意味の項目を選択した状態でチームへ参加すると、 "
"そのチームの創設者はあなたのメイルアドレスを知ることになります。"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "新しいメンバーを受け入れていません"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "創設者権限の移譲が要求されています"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "%1 までに応答してください"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "チーム創設者の変更"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "メンバー"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "創設者"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "管理者"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "チームに昨日参加したメンバー"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "メンバーの総数"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "表示する"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "活動中のメンバー数"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "功績(credit)を獲得済みのメンバーの数"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "管理者"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "前の%1項目"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "次の%1項目"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "該当するチームはありません。"
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "この操作には創設者の権限が必要です。"
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "この操作にはチーム管理者の権限が必要です"
@@ -1949,7 +1949,7 @@ msgstr ""
"<警告>: これは BOINCワイドのチームです。ここで変更を行っても、 そのうち上書きされてしまいます。代わりに %1 BOINC ワイドのチーム %"
"2を編集してください。"
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1957,47 +1957,47 @@ msgstr ""
"%1プライバシに関連する注意%2: チームを作成すると、あなたのプロジェクト・プレファレンス(資源割り当て、 "
"グラフィクスについてのプレファレンス)が、公開されます。"
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "チーム名称、テキスト版"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "HTMLタグを使わないでください。"
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "チーム名称、HTML版"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "%1一部の HTML タグ%2は使えます。"
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "HTML の使い方をご存知でなければ、この欄は空白にしてください。"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "チームのウェブページのURL(もしあれば)"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "\"http://\" は含めないでください。"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "この URLへ は、このサイト内のチームのページからリンクが張られます。"
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "チームの説明"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "新メンバーを受け入れますか?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "参加者の自己紹介"
@@ -2030,7 +2030,7 @@ msgid "Computers on this account"
msgstr "このアカウントのコンピュータ"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "表示"
@@ -2047,8 +2047,8 @@ msgstr "プロジェクト横断の統計"
msgid "Account"
msgstr "アカウント"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "チーム"
@@ -2077,7 +2077,7 @@ msgstr "アカウント情報"
msgid "Email address"
msgstr "Eメイルアドレス"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2085,7 +2085,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "郵便番号"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 登録日"
@@ -2105,7 +2105,7 @@ msgstr "パスワード"
msgid "other account info"
msgstr "その他のアカウント情報"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "参加者のID(User ID)"
@@ -2151,96 +2151,96 @@ msgstr "%1 についての好みの設定(プレファレンス)"
msgid "Community"
msgstr "コミュニティ"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "削除"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "作成"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "自己紹介"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 回投稿"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "通知"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "チームを離脱する"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "管理作業をする"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(創設者を変更する要求は保留中)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "所属チーム"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "チームを探す"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "設立したチーム(メンバーではない)"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "友人を探す"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "友人"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "コンピュータ"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "寄付の実績"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "連絡"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "この人物は友人です"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "友人関係を取り消す"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "要求は保留中"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "友人として追加"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2317,7 +2317,7 @@ msgstr "データベースに接続できません - 後ほど試してくださ
msgid "Unable to select database - please try again later"
msgstr "データベースの選択ができませんでした(mysql_select_dbに失敗) - 時間を置いてからまた試してください。"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "現在のコンピュータからログインしたままにする"
@@ -2526,7 +2526,7 @@ msgstr ""
msgid "User of the day"
msgstr "毎日の参加者紹介"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "サーバー側の状態"
@@ -5499,137 +5499,137 @@ msgstr "停止状態"
msgid "Disabled"
msgstr "指示により停止"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "プロジェクトの状態"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "サーバソフトウェアの版: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "プログラム"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "計算機"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "ウェブページへのデータ自動反映"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "アップロード/ダウンロード用サーバー"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "スケジューラー"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "実行中:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "プログラムは正常に動作しています"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "停止状態:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "プログラムが異常終了したか、あるいは、このプロジェクトが止まっています"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "指示により停止:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "プログラムは停止させられています"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "計算の進捗状況"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "データベース サーバにアクセスできません"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "送信可能なタスク"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "タスク 実行中"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "検証待ち状態のワークユニット"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "取り込み待ち状態のワークユニット"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "削除前のワークユニット"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "削除前のタスク"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "トランジショナーの残務(時間)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "参加者"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "最近、功績値(クレジット)を獲得した人数"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "クレジット得たことのある人数"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "24時間内に参加した人数"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "現時点の GigaFLOPs"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "アプリケーションごとのタスク統計"
# #######################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "アプリケーション"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "未送出"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "計算中"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "最近100リザルトの平均計算所要時間/H、(最小値 - 最大値)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "24時間内に計算結果を返した参加者数"
@@ -5883,6 +5883,10 @@ msgstr "新しい創設者?"
msgid "Change founder"
msgstr "創設者の変更"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "チームの名前を決めます。その名前は空白であってはなりません。"
diff --git a/html/languages/translations/lt.po b/html/languages/translations/lt.po
index ed0d5d9..2257bec 100644
--- a/html/languages/translations/lt.po
+++ b/html/languages/translations/lt.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2012-03-10 18:30+0200\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-04-25 11:11+0000\n"
"Last-Translator: Rytis Slatkevičius <rytis.s at gmail.com>\n"
"Language-Team: \n"
"Language: lt\n"
@@ -16,11 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
"100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.1.6\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
+"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
+"X-POOTLE-MTIME: 1398424289.0\n"
# The name of this language in this language
msgid "LANG_NAME_NATIVE"
@@ -32,19 +33,19 @@ msgstr "Lithuanian"
#: ../inc/bbcode_html.inc:11
msgid "Bold text: [b]text[/b] (alt+b)"
-msgstr ""
+msgstr "Pusjuodis tekstas: [b]tekstas[/b] (alt+b)"
#: ../inc/bbcode_html.inc:14
msgid "Italic text: [i]text[/i] (alt+i)"
-msgstr ""
+msgstr "Tekstas kursyvu: [i]tekstas[/i] (alt+i)"
#: ../inc/bbcode_html.inc:17
msgid "Underline text: [u]text[/u] (alt+u)"
-msgstr ""
+msgstr "Pabrauktas tekstas: [u]tekstas[/u] (alt+u)"
#: ../inc/bbcode_html.inc:20
msgid "Quote text: [quote]text[/quote] (alt+q)"
-msgstr ""
+msgstr "Citata: [quote]tekstas[/quote] (alt+q)"
#: ../inc/bbcode_html.inc:23
msgid "Code display: [code]code[/code] (alt+c)"
@@ -194,7 +195,7 @@ msgstr "Detali paieška"
# ########################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Asmeninės žinutės"
@@ -206,8 +207,8 @@ msgstr "Asmeninės žinutės"
msgid "Questions and Answers"
msgstr "Klausimai ir atsakymai"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -277,7 +278,7 @@ msgstr "Neskaityta"
msgid "Message %1"
msgstr "Žinutė %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "paslėptas"
@@ -475,7 +476,7 @@ msgstr "Tema"
# ########################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Žinutės"
@@ -484,7 +485,7 @@ msgstr "Žinutės"
msgid "Views"
msgstr "Peržiūros"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Paskutinė žinutė"
@@ -522,7 +523,7 @@ msgid "Home"
msgstr "Namai"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Darbas"
@@ -588,9 +589,9 @@ msgid "Created"
msgstr "Sukurtas"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -769,7 +770,7 @@ msgstr ""
msgid "Computer info"
msgstr "Kompiuterio informacija"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Eilė"
@@ -778,9 +779,9 @@ msgstr "Eilė"
msgid "Avg. credit"
msgstr "Vid. kreditai"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -868,8 +869,8 @@ msgstr ""
msgid "Computer ID"
msgstr "Kompiuterio ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -907,7 +908,7 @@ msgstr "Rašyti"
# ########################################
# Private messages
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Siųsti asmeninę žinutę"
@@ -1636,7 +1637,7 @@ msgstr "Atlikimo laikas<br />arba galutinis terminas"
msgid "explain"
msgstr "paaiškinti"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Būsena"
@@ -1717,8 +1718,9 @@ msgid "State"
msgstr "Būsena"
#: ../inc/result.inc:747
+#, fuzzy
msgid "Task name:"
-msgstr ""
+msgstr "Užduoties pavadinimas"
#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
@@ -1732,9 +1734,9 @@ msgstr "Raktiniai žodžiai"
msgid "Find teams with these words in their names or descriptions"
msgstr "Rasti komandas su šiais žodžiais pavadinimuose ar aprašymuose"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1742,7 +1744,7 @@ msgstr "Rasti komandas su šiais žodžiais pavadinimuose ar aprašymuose"
msgid "Country"
msgstr "Valstybė"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Komandos tipas"
@@ -1770,8 +1772,8 @@ msgstr "Prašytas jūsų"
msgid "founder response deadline is %1"
msgstr "laikas, skirtas įkūrėjui atsakyti, yra %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Nėra"
@@ -1795,27 +1797,27 @@ msgstr "Aprašymas"
msgid "Web site"
msgstr "Tinklapis"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Tarpprojektinė statistika"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipas"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forumas"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Temos"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Prisijungti prie komandos"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1824,79 +1826,79 @@ msgstr ""
"prisijungus prie komandos jos įkūrėjas gaus priėjimą prie jūsų el. pašto "
"adreso."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nauji dalyviai nepriimami"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Laukiamas įkūrėjo pakeitimas"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Atsakyti per %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Komandos įkūrėjo pakeitimas"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Dalyviai"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Įkūrėjas"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administratoriai"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nauji nariai per paskutinę dieną"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Iš viso narių"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "peržiūrėti"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktyvūs nariai"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Nariai, turintys kreditų"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administratorius"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Kiti %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Tokios komandos nėra."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Šiam veiksmui atlikti turite būti įkūrėju."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Šiai operacijai atlikti turite būti komandos administratoriumi."
@@ -1906,7 +1908,7 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1914,47 +1916,47 @@ msgstr ""
"%1Pastaba%2: jei įkursite komandą, jūsų nustatymai (resursų padalijimas, "
"vaizdo nustatymai) bus prieinami viešai."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Komandos pavadinimas, tekstinė versija"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nenaudokite HTML žymių."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Komandos pavadinimas, HTML versija"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Galite naudoti %1kai kurias HTML žymes%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Jei nežinote HTML, palikite šį lauką tuščią."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Komandos tinklapio adresas"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "be \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Ši nuoroda bus rodoma komandos puslapyje šiame tinklapyje."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Komandos aprašymas"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1989,7 +1991,7 @@ msgid "Computers on this account"
msgstr "Abonementui priskirti kompiuteriai"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Peržiūrėti"
@@ -2006,8 +2008,8 @@ msgstr "Tarpprojektinė statistika"
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Komanda"
@@ -2036,7 +2038,7 @@ msgstr "Abonemento informacija"
msgid "Email address"
msgstr "El. pašto adresas"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "Tinklapis"
@@ -2044,7 +2046,7 @@ msgstr "Tinklapis"
msgid "Postal code"
msgstr "Pašto kodas"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 narys nuo"
@@ -2066,7 +2068,7 @@ msgstr "slaptažodį"
msgid "other account info"
msgstr "kitą abonemento informaciją"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Vartotojo ID"
@@ -2075,8 +2077,9 @@ msgid "Used in community functions"
msgstr "Naudojama bendruomenės funkcijose"
#: ../inc/user.inc:216 ../user/weak_auth.php:25
+#, fuzzy
msgid "Account keys"
-msgstr ""
+msgstr "Abonemento raktas"
#: ../inc/user.inc:221
msgid "Preferences"
@@ -2111,100 +2114,100 @@ msgstr "%1 nustatymai"
msgid "Community"
msgstr "Bendruomenė"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Ištrinti"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Sukurti"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Aprašymas"
# ########################################
# Forum
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 žinučių"
# ########################################
# Apps page (apps.php)
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Pranešimai"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Palikti komandą"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administruoti"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(laukiamas įkūrėjo pakeitimas)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Komandos narys"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "raskite komandą"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Įkūrėjas, tačiau ne narys"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Rasti draugus"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Draugai"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Kompiuteriai"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Suteikęs paramą"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Susisiekti"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Šis asmuo yra draugas"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Nutraukti draugystę"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Laukiama patvirtinimo"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Pridėti draugą"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2213,12 +2216,13 @@ msgid "log out"
msgstr "atsijungti"
#: ../inc/util.inc:133
+#, fuzzy
msgid "log in"
-msgstr ""
+msgstr "Prisijungti"
#: ../inc/util.inc:204 ../user/login_form.php:30 ../user/login_form.php:66
msgid "Log in"
-msgstr ""
+msgstr "Prisijungti"
# ########################################
# "Your account" page (home.php)
@@ -2280,9 +2284,9 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
-msgstr ""
+msgstr "Likite prisijungęs šiame kompiuteryje"
#: ../user/account_finish.php:34
msgid "Finish account setup"
@@ -2485,7 +2489,7 @@ msgstr ""
msgid "User of the day"
msgstr "Dienos dalyvis"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Būsena serveryje"
@@ -4552,9 +4556,8 @@ msgstr ""
# ########################################
# "Your account" page (home.php)
#: ../user/get_passwd.php:25
-#, fuzzy
msgid "Forgot your account info?"
-msgstr "kitą abonemento informaciją"
+msgstr "Pamiršote prisijungimo informaciją?"
#: ../user/get_passwd.php:28
msgid ""
@@ -4572,6 +4575,8 @@ msgid ""
"2) If you forgot your account's email address, or you can't receive email "
"there:"
msgstr ""
+"2) Jei pamiršote elektroninio pašto adresą arba į jį nebegalite gauti "
+"elektroninių laiškų:"
#: ../user/get_passwd.php:47
msgid ""
@@ -5075,7 +5080,7 @@ msgstr "El. pašto adresas:"
#: ../user/login_form.php:45
msgid "forgot email address?"
-msgstr ""
+msgstr "pamiršote elektroninio pašto adresą?"
#: ../user/login_form.php:48
msgid "Password:"
@@ -5083,7 +5088,7 @@ msgstr "Slaptažodis:"
#: ../user/login_form.php:48
msgid "forgot password?"
-msgstr ""
+msgstr "pamiršote slaptažodį?"
#: ../user/login_form.php:51
msgid "Stay logged in"
@@ -5091,7 +5096,7 @@ msgstr ""
#: ../user/login_form.php:62
msgid "or %1create an account%2."
-msgstr ""
+msgstr "arba %1užsiregistruokite%2."
#: ../user/merge_by_name.php:31
msgid "Processing %1"
@@ -5511,137 +5516,137 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Projekto būsena"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Užduočių rinkiniai, laukiantys patikrinimo"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Užduočių rinkiniai, laukiantys apdorojimo"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Užduočių rinkiniai, laukiantys failų trynimo"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Užduotys, laukiančios failų trynimo"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# ########################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "programa"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "neišsiųsta"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "vykdoma"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5890,6 +5895,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/html/languages/translations/nl.po b/html/languages/translations/nl.po
index 5c56b71..5dff162 100644
--- a/html/languages/translations/nl.po
+++ b/html/languages/translations/nl.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-12-18 19:29+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-17 18:18+0000\n"
"Last-Translator: Rene <oskamjr at ziggo.nl>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: nl\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1387394972.0\n"
+"X-POOTLE-MTIME: 1389982727.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Nederlands"
@@ -194,7 +194,7 @@ msgstr "Zoek in het forum"
msgid "Advanced search"
msgstr "Uitgebreid zoeken"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Privé berichten"
@@ -204,8 +204,8 @@ msgstr "Privé berichten"
msgid "Questions and Answers"
msgstr "Vraag en Antwoord"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -271,7 +271,7 @@ msgstr "Ongelezen"
msgid "Message %1"
msgstr "Bericht %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "verborgen"
@@ -482,7 +482,7 @@ msgstr "Berichten plaatsen in verborgen onderwerp niet mogelijk."
msgid "Thread"
msgstr "Onderwerp"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Reacties"
@@ -491,7 +491,7 @@ msgstr "Reacties"
msgid "Views"
msgstr "Bekeken"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Laatste reactie"
@@ -529,7 +529,7 @@ msgid "Home"
msgstr "Thuis pagina"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Werk"
@@ -595,9 +595,9 @@ msgid "Created"
msgstr "Aangemaakt"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -775,7 +775,7 @@ msgstr "Laatste contact"
msgid "Computer info"
msgstr "Computer informatie"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -784,9 +784,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Punten gemiddelde"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -874,8 +874,8 @@ msgstr "Alleen actieve computers in de laatste 30 dagen"
msgid "Computer ID"
msgstr "Computer ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -911,7 +911,7 @@ msgstr "Postvak In"
msgid "Write"
msgstr "Schrijven"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Verstuur privé bericht"
@@ -1678,7 +1678,7 @@ msgstr "Rapportage tijd<br />of deadline"
msgid "explain"
msgstr "verklaring"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1770,9 +1770,9 @@ msgstr "Steekwoorden"
msgid "Find teams with these words in their names or descriptions"
msgstr "Zoek teams met deze woorden in hun naam of beschrijving"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1780,7 +1780,7 @@ msgstr "Zoek teams met deze woorden in hun naam of beschrijving"
msgid "Country"
msgstr "Land"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Soort team"
@@ -1809,8 +1809,8 @@ msgstr "Op eigen verzoek"
msgid "founder response deadline is %1"
msgstr "Deadline voor oprichter verloopt op %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Geen"
@@ -1834,27 +1834,27 @@ msgstr "Beschrijving"
msgid "Web site"
msgstr "Website"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Cross-project statistieken"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Soort"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Onderwerpen"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Sluit je aan bij dit team"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1863,79 +1863,79 @@ msgstr ""
"email adres bekend worden bij de team oprichter, indien je jezelf bij een "
"team opgeeft."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Er is op dit moment een ledenstop"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Oprichters wissel aangevraagd"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Reageren voor %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Team oprichter wisselen"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Leden"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Oprichter"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administrator"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nieuwe leden"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Totaal aantal leden"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "bekijk"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Actieve leden"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Leden met punten"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrator"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Vorige %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Volgende %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Team niet gevonden."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Deze actie vereist oprichters rechten."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Deze actie vereist administrator rechten"
@@ -1948,7 +1948,7 @@ msgstr ""
"aanbrengt, worden ze snel overschreven. Pas daarom het %1BOINC-wide team%2 "
"zelf aan."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1956,47 +1956,47 @@ msgstr ""
"%1Let op%2: Als je een team opricht worden je project voorkeuren (gedeelde "
"bronnen, grafische voorkeuren) zichtbaar voor iedereen."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Naam van team, tekst versie"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Gebruik geen HTML codes."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Naam van team, HTML versie"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "%1HTML codes beperkt%2 toegestaan."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Indien je geen HTML kennis hebt, a.u.b. leeg laten."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL van team webpagina, indien aanwezig"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "zonder \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Dit URL zal geplaatst worden op de team pagina hier op de site."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Beschrijving van team"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Accepteer nieuwe leden?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Gebruikers profiel"
@@ -2029,7 +2029,7 @@ msgid "Computers on this account"
msgstr "Computers op dit account"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Bekijk"
@@ -2046,8 +2046,8 @@ msgstr "Cross-project statistieken"
msgid "Account"
msgstr "Account"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Team"
@@ -2076,7 +2076,7 @@ msgstr "Account informatie"
msgid "Email address"
msgstr "Email adres"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2084,7 +2084,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postcode"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 lid sinds"
@@ -2104,7 +2104,7 @@ msgstr "wachtwoord"
msgid "other account info"
msgstr "ander account informatie"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Gebruikers ID"
@@ -2149,96 +2149,96 @@ msgstr "%1 voorkeuren"
msgid "Community"
msgstr "Gemeenschap"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Verwijder"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Aanmaken"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profiel"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 berichten"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Aankondiging"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Verlaat team"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrator"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(oprichters wissel in aanvraag)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Lid van team"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "vind een team"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Oprichter maar geen lid van"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Vind vrienden"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Vrienden"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Computers"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donateur"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contact"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Dit persoon is een vriend"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Beëindig vriendschap"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "In aanvraag"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Voeg toe als vriend"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "gebruikersnaam mag niet starten of eindigen met een spatie"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "gebruikersnaam mag niet leeg zijn"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "gebruikersnaam mag geen HTML tags bevatten"
@@ -2317,7 +2317,7 @@ msgstr "Verbinden met database mislukt - probeer het later a.u.b. opnieuw"
msgid "Unable to select database - please try again later"
msgstr "Selecteren van database mislukt - probeer het later a.u.b. opnieuw"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Blijf ingelogd op deze computer"
@@ -2522,7 +2522,7 @@ msgstr "vorm of neem deel aan een team"
msgid "User of the day"
msgstr "Gebruiker van de dag"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Server status"
@@ -5662,135 +5662,135 @@ msgstr "Niet actief"
msgid "Disabled"
msgstr "Uitgezet"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Project status"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Server software versie: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programma"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Host computer"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "data-afhankelijke web pagina's"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "upload/download server"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "taakverdeler"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Actief:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Programma functioneert normaal"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Niet actief:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programma of project functioneert niet goed"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Uitgezet:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Programma is stopgezet"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Berekenings status"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "De database server is tijdelijk onbereikbaar"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Taken gereed om te verzenden"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Taken in uitvoering"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Werkeenheden in afwachting van validatie"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Werkeenheden in aanmaak"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Werkeenheden in afwachting van verwijdering"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Taken in afwachting van verwijdering"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Achterstand bestandsoverdracht (uren)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Gebruikers"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "met recentelijke punten"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "met punten"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "geregistreerd in de afgelopen 24 uur"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "huidig aantal GigaFLOPs"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Taken per applicatie"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "applicatie"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "niet verzonden"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "in uitvoering"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "gem. looptijd van de laatste 100 resultaten in u (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "gebruikers in laatste 24u"
@@ -6068,6 +6068,10 @@ msgstr "Nieuwe oprichter?"
msgid "Change founder"
msgstr "Oprichter wijzigen"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Er zijn geen gebruikers om het team naar te verplaatsen."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Je moet een naam invullen voor je team"
diff --git a/html/languages/translations/pl.po b/html/languages/translations/pl.po
index 2d99dde..c546307 100644
--- a/html/languages/translations/pl.po
+++ b/html/languages/translations/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-01-20 16:11+0200\n"
"Last-Translator: Pawel <pawel.pbm at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -197,7 +197,7 @@ msgstr "Zaawansowane wyszukiwanie"
# #######################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Prywatne wiadomości"
@@ -207,8 +207,8 @@ msgstr "Prywatne wiadomości"
msgid "Questions and Answers"
msgstr "Pytania i odpowiedzi"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -278,7 +278,7 @@ msgstr "Nieprzeczytana"
msgid "Message %1"
msgstr "Wiadomość %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "ukryte"
@@ -494,7 +494,7 @@ msgstr "Wątek"
# #######################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Posty"
@@ -503,7 +503,7 @@ msgstr "Posty"
msgid "Views"
msgstr "Wyświetleń"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Ostatni post"
@@ -541,7 +541,7 @@ msgid "Home"
msgstr "Dom"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Praca"
@@ -607,9 +607,9 @@ msgid "Created"
msgstr "Stworzony"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -789,7 +789,7 @@ msgstr "Ostatni kontakt"
msgid "Computer info"
msgstr "Informacje o komputerze"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Pozycja"
@@ -798,9 +798,9 @@ msgstr "Pozycja"
msgid "Avg. credit"
msgstr "Śr. punktów"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -888,8 +888,8 @@ msgstr "Tylko komputery aktywne w ciągu ostatnich 30 dni"
msgid "Computer ID"
msgstr "ID komputera"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -925,7 +925,7 @@ msgstr "Odebrane"
msgid "Write"
msgstr "Napisz"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Wyślij prywatną wiadomość"
@@ -1702,7 +1702,7 @@ msgstr "Czas zgłoszenia<br />lub termin"
msgid "explain"
msgstr "wyjaśnij"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1798,9 +1798,9 @@ msgstr "Słowa kluczowe"
msgid "Find teams with these words in their names or descriptions"
msgstr "Znajdź zespoły z tymi słowami w nazwie lub opisie"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1808,7 +1808,7 @@ msgstr "Znajdź zespoły z tymi słowami w nazwie lub opisie"
msgid "Country"
msgstr "Kraj"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Typ zespołu"
@@ -1836,8 +1836,8 @@ msgstr "Zażądane przez Ciebie"
msgid "founder response deadline is %1"
msgstr "czas na odpowiedź założyciela to %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Żadna"
@@ -1861,27 +1861,27 @@ msgstr "Opis"
msgid "Web site"
msgstr "Strona internetowa"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Statystyki międzyprojektowe"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Typ"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forum dyskusyjne"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Tematy"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Dołącz do tego zespołu"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1890,79 +1890,79 @@ msgstr ""
"projektu, gdy dołączysz do zespołu jego założyciel otrzyma także dostęp do "
"twojego adresu e-mail."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nie przyjmuje nowych członków"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Zażądano zmiany założyciela"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Odpowiedź od %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Zmiana założyciela zespołu"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Członkowie"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Założyciel"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administratorzy"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nowi członkowie w ostatnim dniu"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "W sumie członków"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "zobacz"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktywni członkowie"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Członkowie z punktami"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrator"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Poprzedni %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Następny %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Nie ma takiego zespołu."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Operacja wymaga przywilejów założyciela zespołu."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Operacja wymaga przywilejów administratora zespołu."
@@ -1974,7 +1974,7 @@ msgstr ""
"Uwaga: to jest zespół międzyprojektowy. Jeśli dokonasz zmian tutaj, zostaną "
"one nadpisane. Dokonaj zmian w %1ustawieniach międzyprojektowych%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1983,47 +1983,47 @@ msgstr ""
"ustawienia projektu (ustawienia przydziału zasobów i grafiki) będą widoczne "
"publicznie."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nazwa zespołu, wersja tekstowa"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nie używaj znaczników HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nazwa zespołu, wersja HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Możesz używać jedynie %1wybranych znaczników HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Jeżeli nie znasz języka HTML zostaw to pole puste."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Adres URL strony zespołu, jeśli jakąś posiada"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "bez \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Ten adres będzie podany na stronie zespołu."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Opis zespołu"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Akceptuj nowych członków?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil użytkownika"
@@ -2056,7 +2056,7 @@ msgid "Computers on this account"
msgstr "Komputery na tym koncie"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Zobacz"
@@ -2073,8 +2073,8 @@ msgstr "Statystyki międzyprojektowe"
msgid "Account"
msgstr "Konto"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Zespół"
@@ -2103,7 +2103,7 @@ msgstr "Dane konta"
msgid "Email address"
msgstr "Adres email"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "Strona internetowa"
@@ -2111,7 +2111,7 @@ msgstr "Strona internetowa"
msgid "Postal code"
msgstr "Kod pocztowy"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "Uczestnik %1 od"
@@ -2131,7 +2131,7 @@ msgstr "hasło"
msgid "other account info"
msgstr "pozostałe dane konta"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Identyfikator uczestnika"
@@ -2178,96 +2178,96 @@ msgstr "Ustawienia %1"
msgid "Community"
msgstr "Społeczność"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Usuń"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Stwórz"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 postów"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Powiadomienia"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Opuść zespół"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administruj"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(zażądano zmiany założyciela)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Członek zespołu"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "znajdź zespół"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Założyciel, ale nie członek"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Znajdź przyjaciół"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Przyjaciele"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Komputery"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Ofiarodawca"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ta osoba jest przyjacielem"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Anuluj przyjaźń"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Oczekujące zaproszenie"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Dodaj jako przyjaciela"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2348,7 +2348,7 @@ msgstr "Nie można połączyć się z bazą danych - spróbuj ponownie później
msgid "Unable to select database - please try again later"
msgstr "Nie udało się wybrać bazy danych - spróbuj ponownie później"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Pozostań zalogowany z tego komputera"
@@ -2561,7 +2561,7 @@ msgid "User of the day"
msgstr "Uczestnik dnia"
# 92%
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Statusy serwera"
@@ -5631,142 +5631,142 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# #######################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Aplikacje"
# 83%
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Niewysłany"
# 90%
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "W trakcie"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -6017,6 +6017,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/html/languages/translations/sl.po b/html/languages/translations/sl.po
index ac42a4e..1017ed9 100644
--- a/html/languages/translations/sl.po
+++ b/html/languages/translations/sl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-06-05 20:02+0200\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -188,7 +188,7 @@ msgstr "Išči po forumih"
msgid "Advanced search"
msgstr "Napredno iskanje"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Zasebna sporočila"
@@ -198,8 +198,8 @@ msgstr "Zasebna sporočila"
msgid "Questions and Answers"
msgstr "Vprašanja in odgovori"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -273,7 +273,7 @@ msgstr "neprebrano"
msgid "Message %1"
msgstr "Sporočilo"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "skrito"
@@ -481,7 +481,7 @@ msgstr ""
msgid "Thread"
msgstr "Tema"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Objave"
@@ -490,7 +490,7 @@ msgstr "Objave"
msgid "Views"
msgstr "Pogledi"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Zadnja objava"
@@ -533,7 +533,7 @@ msgid "Home"
msgstr "Doma"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "V službi"
@@ -599,9 +599,9 @@ msgid "Created"
msgstr "Ustvarjeno"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -778,7 +778,7 @@ msgstr "Zadnji kontakt"
msgid "Computer info"
msgstr "Informacije o računalniku"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Uvrstitev"
@@ -787,9 +787,9 @@ msgstr "Uvrstitev"
msgid "Avg. credit"
msgstr "Povprečno točk"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -877,8 +877,8 @@ msgstr "Samo računalnike, aktivne v zadnjih 30 dneh"
msgid "Computer ID"
msgstr "ID računalnika"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -914,7 +914,7 @@ msgstr "Nabiralnik"
msgid "Write"
msgstr "Napiši"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Pošlji zasebno sporočilo"
@@ -1684,7 +1684,7 @@ msgstr "Čas objave<br /> ali rok"
msgid "explain"
msgstr "pojasni"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1777,9 +1777,9 @@ msgstr "Ključne besede"
msgid "Find teams with these words in their names or descriptions"
msgstr "Poišči ekipe s temi besedami v njihovem imenu ali opisu"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1787,7 +1787,7 @@ msgstr "Poišči ekipe s temi besedami v njihovem imenu ali opisu"
msgid "Country"
msgstr "Država"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tip ekipe"
@@ -1815,8 +1815,8 @@ msgstr "Zahtevali ste vi"
msgid "founder response deadline is %1"
msgstr "rok za ustanoviteljev odgovor je %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "brez"
@@ -1840,27 +1840,27 @@ msgstr "Opis"
msgid "Web site"
msgstr "Spletna stran"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Medprojektna statistika"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tip"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Razpravljalnica"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Teme"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Pridruži se tej ekipi"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1869,79 +1869,79 @@ msgstr ""
"projekta, ob pridružitvi ekipi daje njenemu ustanovitelju dostop do naslova "
"vaše elektronske pošte."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Ne sprejema novih članov"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Zahtevana sprememba ustanoviteljstva"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Odgovori z %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Sprememba ustanoviteljstva ekipe"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Člani"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Ustanovitelj"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Skrbniki"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Novi člani v zadnjem dnevu"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Skupaj članov"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "poglej"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktivni člani"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Člani s točkami"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Skrbnik"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Predhodnih %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Naslednjih %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Ekipa ne obstaja."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Ta operacija zahteva ustanoviteljstvo."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Ta operacija zahteva skrbniške pravice za ekipo"
@@ -1953,7 +1953,7 @@ msgstr ""
"OPOZORILO: to je ekipa vsega BOINC. Če tu napravite spreembe, bodo hitro "
"prepisane. Namesto tega uredite %1ekipo vsega BOINC%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1961,47 +1961,47 @@ msgstr ""
"%1Opomba o zasebnosti%2: če ustvarite ekipo, bodo vaše nastavitve projekta "
"(delitev virov, grafične nastavitve) vidne javnosti."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Ime ekipe, tekstovna različica"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ne uporabljajte HTML oznak."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Ime ekipe, HTML različica"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Lahko uporabljajte %1omejen nabor HTML oznak%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Če ne znate HTML, pustite ta okvir prazen."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL spletne strani ekipe, če obstaja"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "brez \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Na spletni strani ekipe bo povezava s tem URL."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Opis ekipe"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Sprejeti nove člane?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil uporabnika"
@@ -2034,7 +2034,7 @@ msgid "Computers on this account"
msgstr "Računalniki tega računa"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Pogled"
@@ -2051,8 +2051,8 @@ msgstr "Medprojektna statistika"
msgid "Account"
msgstr "Račun"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Ekipa"
@@ -2081,7 +2081,7 @@ msgstr "Informacije o računu"
msgid "Email address"
msgstr "Naslov elektronske pošte"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2089,7 +2089,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Poštna številka"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 član od"
@@ -2109,7 +2109,7 @@ msgstr "geslo"
msgid "other account info"
msgstr "druge informacije o računu"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID uporabnika"
@@ -2154,96 +2154,96 @@ msgstr "%1 nastavitve"
msgid "Community"
msgstr "Skupnost"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Briši"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Ustvari"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "Objave %1"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Obvestila"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Zapusti ekipo"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administriraj"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(čakajoča zahteva po spremembi ustanoviteljstva)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Član ekipe"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "poišči ekipo"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Ustanovitelj, vendar ne član"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Poišči prijatelje"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Prijatelji"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Računalniki"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donator"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ta oseba je prijatelj"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Prekliči prijateljstvo"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Čakajoča prošnja"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Dodaj kot prijatelja"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2321,7 +2321,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Ostanite prijavljeni na tem računalniku"
@@ -2529,7 +2529,7 @@ msgstr ""
msgid "User of the day"
msgstr "Uporabnik dneva"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Stanje strežnika"
@@ -5641,138 +5641,138 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Opravila v izvajanju"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
#, fuzzy
msgid "Users"
msgstr "Uporabnik"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplikacija"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Neposlano"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "V teku"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -6045,6 +6045,10 @@ msgstr "Nov ustanovitelj?"
msgid "Change founder"
msgstr "Spremeni ustanovitelja"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Izbrati morate ime ekipe, ki ni prazno"
diff --git a/html/languages/translations/tr.po b/html/languages/translations/tr.po
index 14f4b4a..a2250be 100644
--- a/html/languages/translations/tr.po
+++ b/html/languages/translations/tr.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Project Generic\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-24 20:31+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-17 20:25+0000\n"
"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: Donanım Haber\n"
"Language: tr\n"
@@ -16,7 +16,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385325085.0\n"
+"X-POOTLE-MTIME: 1389990335.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Türkçe"
@@ -190,7 +190,7 @@ msgstr "Forumlarda ara"
msgid "Advanced search"
msgstr "Gelişmiş arama"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Özel mesajlar"
@@ -200,8 +200,8 @@ msgstr "Özel mesajlar"
msgid "Questions and Answers"
msgstr "Soru ve Yanıtlar"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -267,7 +267,7 @@ msgstr "Okunmamış"
msgid "Message %1"
msgstr "Mesaj %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "gizli"
@@ -481,7 +481,7 @@ msgstr "Gizli bir konu başlığına gönderi yapılamaz."
msgid "Thread"
msgstr "Yeni konu"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Yanıtlar"
@@ -490,7 +490,7 @@ msgstr "Yanıtlar"
msgid "Views"
msgstr "Okunma"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Son mesaj"
@@ -529,7 +529,7 @@ msgid "Home"
msgstr "Ev"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "İş"
@@ -595,9 +595,9 @@ msgid "Created"
msgstr "Oluşturulma"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -775,7 +775,7 @@ msgstr "Son bağlantı"
msgid "Computer info"
msgstr "Bilgisayar bilgisi"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Sıra"
@@ -784,9 +784,9 @@ msgstr "Sıra"
msgid "Avg. credit"
msgstr "Ort. kredi"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -874,8 +874,8 @@ msgstr "Yalnızca son 30 gün içerisinde aktif olan bilgisayarlar"
msgid "Computer ID"
msgstr "Bilgisayar NO"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -911,7 +911,7 @@ msgstr "Gelen kutusu"
msgid "Write"
msgstr "Yaz"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Özel mesaj gönder"
@@ -1690,7 +1690,7 @@ msgstr "Raporlanma ya da<br />son teslim tarihi"
msgid "explain"
msgstr "açıklama"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Durum"
@@ -1782,9 +1782,9 @@ msgstr "Anahtar kelimeler"
msgid "Find teams with these words in their names or descriptions"
msgstr "Takımları, isimleri ya da tanıtımlarındaki bu kelimelere göre bul"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1792,7 +1792,7 @@ msgstr "Takımları, isimleri ya da tanıtımlarındaki bu kelimelere göre bul"
msgid "Country"
msgstr "Ülke"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Takımın tipi"
@@ -1820,8 +1820,8 @@ msgstr "Değişim talep ettiniz"
msgid "founder response deadline is %1"
msgstr "kurucunun son yanıt tarihi %1."
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Yok"
@@ -1845,27 +1845,27 @@ msgstr "Tanıtım"
msgid "Web site"
msgstr "İnternet sitesi"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Çapraz-proje istatistikleri"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tip"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Mesaj panosu"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Konu başlıkları"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Bu takıma katıl"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1873,79 +1873,79 @@ msgstr ""
"Not: Topluluk tercihlerinizde 'e-postayla uyarı' aktifse, katıldığınızda "
"takım kurucusu e-posta adresinizi görebilecek."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Yeni üyeler kabul edilmiyor"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Kurucu değişimi talep edildi"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "%1 tarihine kadar yanıtlanmalı"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Takım kurucusu değişimi"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Üyeler"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Kurucu"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Yöneticiler"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Son günlerdeki yeni üyeler"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Toplam üye"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "bak"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktif üye"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Kredisi bulunan üye"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Yönetici"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Önceki %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Sonraki %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Eşleşen takım yok."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Bu işlem kurucu olmayı gerektirir."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Bu işlem takım yöneticisi hakları gerektirir."
@@ -1958,7 +1958,7 @@ msgstr ""
"yaparsanız, bir süre sonra üzerine yazılabilir. Bunun yerine, %1BOINC "
"genişletilmiş-takım%2ı düzenleyin."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1966,47 +1966,47 @@ msgstr ""
"%1Gizlilik notu%2: Bir takım kurarsanız, proje tercihleriniz (kaynak "
"paylaşımı, grafik tercihleri) herkese görünür olacaktır."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Takım adı, salt metin sürümü"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "HTML etiketleri kullanmayın."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Takım adı, HTML sürümü"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "%1Sınırlı HTML etiketleri%2 kullanabilirsiniz."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "HTML bilmiyorsanız, bu bölümü boş bırakın."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Varsa, takımın İnternet sitesi adresi"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "\"http://\" olmadan"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Belirttiğiniz URL, takımın bu sitedeki sayfasında gösterilecek."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Takımın tanıtımı"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Yeni üyeler kabul edilsin mi?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Kullanıcı profili"
@@ -2039,7 +2039,7 @@ msgid "Computers on this account"
msgstr "Bu hesaptaki bilgisayarlar"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Bak"
@@ -2056,8 +2056,8 @@ msgstr "Çapraz-proje istatistikleri"
msgid "Account"
msgstr "Hesap"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Takım"
@@ -2086,7 +2086,7 @@ msgstr "Hesap bilgisi"
msgid "Email address"
msgstr "E-posta adresi"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "Site"
@@ -2094,7 +2094,7 @@ msgstr "Site"
msgid "Postal code"
msgstr "Posta kodu"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 üyelik tarihi"
@@ -2114,7 +2114,7 @@ msgstr "parola"
msgid "other account info"
msgstr "diğer hesap bilgisi"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Kullanıcı NO"
@@ -2159,96 +2159,96 @@ msgstr "%1 tercihleri"
msgid "Community"
msgstr "Topluluk"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Sil"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Oluştur"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 gönderi"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Uyarılar"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Takımdan ayrıl"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Yönet"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(kurucu değişim isteği beklemede)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Takım üyeliği"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "bir takım bul"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Kurucusu fakat üyesi değil"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Arkadaş bul"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Arkadaşlar"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Bilgisayarlar"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Bağışçı"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "İrtibat"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Bu kişi arkadaşınız"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Arkadaşlığı bitir"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "İstek beklemede"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Arkadaş olarak ekle"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "kullanıcı adı başında veya sonda boşluk karakteri olamaz"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "kullanıcı adı boş olamaz"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "kullanıcı adı HTML etiketleri içeremez"
@@ -2328,7 +2328,7 @@ msgstr "Veritabanına erişilemedi - lütfen daha sonra tekrar deneyin"
msgid "Unable to select database - please try again later"
msgstr "Veritabanı seçilemedi - lütfen daha sonra tekrar deneyin"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Bu bilgisayarda oturumumu açık tut"
@@ -2536,7 +2536,7 @@ msgstr "takım oluştur ya da katıl"
msgid "User of the day"
msgstr "Günün kullanıcısı"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Sunucu durumu"
@@ -5639,135 +5639,135 @@ msgstr "Çalışmıyor"
msgid "Disabled"
msgstr "Devre dışı"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Proje durumu"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Sunucu yazılımı sürümü: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Program"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Sunucu"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "veri-yürüten internet sayfaları"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "gönderme/indirme sunucusu"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "zamanlayıcı"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Çalışıyor:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Program normal olarak çalışıyor"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Çalışmıyor:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programda hata var ya da proje kapalı"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Devre dışı:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Program devre dışı"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Hesaplama durumu"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Veritabanı sunucusu erişilebilir değil"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Gönderilmeye hazır işler"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Süren işler"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Doğrulama için bekleyen iş birimleri"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Benzetme için bekleyen iş birimleri"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Silinmek için bekleyen iş birimleri"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Dosya silinmesi için bekleyen işler"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Dönüştürücüde biriken iş (saat)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Kullanıcılar"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "güncel krediye sahip"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "krediye sahip"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "son 24 saatte kaydolan"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "şuanki GigaFLOP"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Uygulamaya göre işler"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "uygulama"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "gönderilmemiş"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "sürmekte"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "son 100 sonucun ortalama çalışma saati (en az-çok)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "son 24 saatteki yeni üyeler"
@@ -6040,6 +6040,10 @@ msgstr "Yeni kurucu olsun"
msgid "Change founder"
msgstr "Kurucuyu değiştir"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Takımın aktarılacağı hiçbir kullanıcı yok."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Boş olmayan bir takım adı seçmelisiniz."
diff --git a/html/languages/translations/zh_CN.po b/html/languages/translations/zh_CN.po
index 4b275bc..ae56820 100644
--- a/html/languages/translations/zh_CN.po
+++ b/html/languages/translations/zh_CN.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-12-29 06:17+0000\n"
-"Last-Translator: Anonymous Pootle User\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-23 02:23+0000\n"
+"Last-Translator: Gang <zenith.yin at gmail.com>\n"
"Language-Team: Team China <zenith.yin at gmail.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
@@ -21,7 +21,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: D:\\Work\\boinc_src\\html\\user\n"
-"X-POOTLE-MTIME: 1388297877.0\n"
+"X-POOTLE-MTIME: 1393122217.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "简体中文"
@@ -191,7 +191,7 @@ msgstr "搜索论坛"
msgid "Advanced search"
msgstr "高级搜索"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "私人消息"
@@ -201,8 +201,8 @@ msgstr "私人消息"
msgid "Questions and Answers"
msgstr "疑难解答"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "未读"
msgid "Message %1"
msgstr "消息 %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "隐藏"
@@ -464,7 +464,7 @@ msgstr "不能回复隐藏主题。"
msgid "Thread"
msgstr "主题"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "贴数"
@@ -473,7 +473,7 @@ msgstr "贴数"
msgid "Views"
msgstr "查看次数"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "最近发贴"
@@ -511,7 +511,7 @@ msgid "Home"
msgstr "家庭"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "工作"
@@ -521,7 +521,7 @@ msgstr "学习"
#: ../inc/host.inc:59
msgid "Mobile"
-msgstr ""
+msgstr "手机"
#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
@@ -554,7 +554,7 @@ msgstr "域名"
#: ../inc/host.inc:98
msgid "Product name"
-msgstr ""
+msgstr "产品名称"
#: ../inc/host.inc:102
msgid "Local Standard Time"
@@ -577,9 +577,9 @@ msgid "Created"
msgstr "创建时间"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -755,7 +755,7 @@ msgstr "最近一次通讯"
msgid "Computer info"
msgstr "计算机信息"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "名次"
@@ -764,9 +764,9 @@ msgstr "名次"
msgid "Avg. credit"
msgstr "平均积分"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -854,8 +854,8 @@ msgstr "仅显示最近 30 天内活跃的计算机"
msgid "Computer ID"
msgstr "计算机 ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -872,7 +872,7 @@ msgstr "通过名称合并计算机"
#: ../inc/language_names.inc:61
msgid "Browser default"
-msgstr ""
+msgstr "浏览器缺省"
#: ../inc/news.inc:40
msgid "Comment"
@@ -891,7 +891,7 @@ msgstr "收件箱"
msgid "Write"
msgstr "写信"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "发送私人消息"
@@ -1152,9 +1152,8 @@ msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
msgstr "使用 NVIDIA GPU%16.10 之后的版本实现了该设置%2"
#: ../inc/prefs.inc:344
-#, fuzzy
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
-msgstr "使用 ATI GPU%16.10 之后的版本实现了该设置%2"
+msgstr "使用 %17.2 及后续版本%2支持的 Intel GPU"
#: ../inc/prefs.inc:358
msgid ""
@@ -1269,17 +1268,17 @@ msgstr "编辑 %1 的参数设置"
#: ../inc/prefs.inc:885
msgid "These apply to all BOINC projects in which you participate."
-msgstr ""
+msgstr "这些参数设置对你参加的所有 BOINC 项目均有效。"
#: ../inc/prefs.inc:887
msgid ""
"On computers participating in multiple projects, the most recently modified "
"preferences will be used."
-msgstr ""
+msgstr "在参与到多个项目的计算机上,使用的是最近修改的参数设置。"
#: ../inc/prefs.inc:889
msgid "These preferences do not apply to Android devices."
-msgstr ""
+msgstr "这些参数设置不适用于安卓设备。"
#: ../inc/prefs.inc:892
msgid "Preferences last modified:"
@@ -1369,7 +1368,7 @@ msgstr "ATI GPU"
#: ../inc/result.inc:57 ../user/host_app_versions.php:28
msgid "Intel GPU"
-msgstr ""
+msgstr "Intel GPU"
#: ../inc/result.inc:65
msgid "Not in DB"
@@ -1620,7 +1619,7 @@ msgstr "结果上报时间<br />或者上报期限"
msgid "explain"
msgstr "解释"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "状态"
@@ -1697,9 +1696,8 @@ msgid "State"
msgstr "状态"
#: ../inc/result.inc:747
-#, fuzzy
msgid "Task name:"
-msgstr "任务名称"
+msgstr "任务名称:"
#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
@@ -1713,9 +1711,9 @@ msgstr "关键字"
msgid "Find teams with these words in their names or descriptions"
msgstr "寻找名称或描述中包含这些关键字的团队"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1723,7 +1721,7 @@ msgstr "寻找名称或描述中包含这些关键字的团队"
msgid "Country"
msgstr "国家或地区"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "团队类型"
@@ -1751,8 +1749,8 @@ msgstr "请求已由你发起过"
msgid "founder response deadline is %1"
msgstr "原创建人的回复期限是 %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "未加入团队"
@@ -1776,105 +1774,105 @@ msgstr "描述"
msgid "Web site"
msgstr "网站"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "跨项目的统计网站"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "类型"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "留言板"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "主题"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "加入该团队"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr "如果你在项目参数中设置了允许接收电子邮件,加入团队后该团队的创建人将可以访问到你的电子邮件地址。"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "不接受新成员加入"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "创建人改变请求待处理"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "回复期限 %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "团队创建人改变"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "成员"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "创建人"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "管理员"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "昨天新加入的成员"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "所有成员"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "查看"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "活跃的成员"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "有积分的成员"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "管理员"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "前 %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "后面 %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "没有这个团队。"
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "本操作需要创建人权限。"
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "本操作需要团队创建人的权限"
@@ -1884,53 +1882,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr "警告:这是一个 BOINC 自动创建的团队,你在此处做出的修改将很快被覆盖掉,请直接在 %1这里%2 进行编辑。"
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr "%1隐私事项%2:如果你要创建一个团队,则你的项目参数(资源分享率,图形参数设置等)将会对团队成员公开。"
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "团队名称,文字版本"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "请不要使用 HTML 标记。"
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "团队名称,HTML 版本"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "你可以使用 %1有限的 HTML 标记%2。"
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "如果你不了解 HTML,请保持本编辑框为空。"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "团队的网址(如果有的话):"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "不包括 \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "本网站该团队的页面上将链接到这个网址。"
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "团队描述"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "是否接受新的团队成员?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "用户档案"
@@ -1963,7 +1961,7 @@ msgid "Computers on this account"
msgstr "本帐户所属的计算机"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "查看"
@@ -1980,8 +1978,8 @@ msgstr "跨项目的统计网站"
msgid "Account"
msgstr "帐户"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "团队"
@@ -2010,7 +2008,7 @@ msgstr "帐户信息"
msgid "Email address"
msgstr "电子邮件地址"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "网址"
@@ -2018,7 +2016,7 @@ msgstr "网址"
msgid "Postal code"
msgstr "邮编"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "加入 %1 的日期"
@@ -2038,7 +2036,7 @@ msgstr "用户口令"
msgid "other account info"
msgstr "其它帐户信息"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "用户 ID"
@@ -2084,96 +2082,96 @@ msgstr "%1参数设置"
msgid "Community"
msgstr "社区"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "删除"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "创建"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "用户档案"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 个帖子"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "通知"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "退出团队"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "管理"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(创建人转换请求待处理)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "团队成员"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "寻找团队"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "创建人(已退出团队)"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "寻找好友"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "好友"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "计算机"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "捐助者"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "联系"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "这是一位好友"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "删除该好友"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "请求待处理"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "添加为好友"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "用户名前后不能有空格"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "用户名不得为空"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "用户名不得含有 HTML 标签"
@@ -2247,7 +2245,7 @@ msgstr "无法连接数据库 - 请稍后重试"
msgid "Unable to select database - please try again later"
msgstr "无法选择数据库 - 请稍后重试"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "保持这台计算机上的登录状态"
@@ -2419,11 +2417,11 @@ msgstr ""
#: ../user/bs_sample_index.php:44
msgid "Participants"
-msgstr ""
+msgstr "参与者"
#: ../user/bs_sample_index.php:46
msgid "Do work"
-msgstr ""
+msgstr "执行任务"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
#: ../user/home.php:49 ../project.sample/project.inc:43
@@ -2432,7 +2430,7 @@ msgstr "你的帐户"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
msgid "view stats, modify preferences"
-msgstr ""
+msgstr "查看统计信息,修改参数设置"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
#: ../user/team.php:25
@@ -2441,13 +2439,13 @@ msgstr "团队"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
msgid "create or join a team"
-msgstr ""
+msgstr "创建或加入一个团队"
#: ../user/bs_sample_index.php:51 ../user/sample_index.php:191
msgid "User of the day"
msgstr "今日用户"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "服务器状态"
@@ -2458,11 +2456,11 @@ msgstr "用户档案"
#: ../user/bs_sample_index.php:61
msgid "User search"
-msgstr ""
+msgstr "用户搜索"
#: ../user/bs_sample_index.php:64
msgid "Statistics"
-msgstr ""
+msgstr "统计"
#: ../user/bs_sample_index.php:65 ../user/stats.php:30
#: ../user/top_users.php:116
@@ -2483,7 +2481,6 @@ msgid "Top GPU models"
msgstr "GPU 型号排名"
#: ../user/bs_sample_index.php:70
-#, fuzzy
msgid "Languages"
msgstr "语言"
@@ -3460,7 +3457,7 @@ msgstr "你没有输入好友的名称和/或电子邮箱地址,请%1回退到
msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
-msgstr ""
+msgstr "该项目还没有创建电子邮件消息 - 请通知其管理员"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -4439,7 +4436,7 @@ msgstr "如果你仍有 BOINC 客户端运行在该账户下,请按如下操
msgid ""
"Go to the BOINC data directory on your computer (its location is written to "
"the Event Log at startup)."
-msgstr ""
+msgstr "打开你计算机上的 BOINC 数据路径(其具体位置会写入到启动时的事件日志)。 "
#: ../user/get_passwd.php:51
msgid "Find your account file for this project; it will be named <b>%1</b>."
@@ -5333,135 +5330,135 @@ msgstr "未运行"
msgid "Disabled"
msgstr "已禁用"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "项目状态"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "服务端软件版本:%1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "程序"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "主机"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "数据驱动的网页"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "上传/下载服务器"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "调度程序"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "运行中:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "程序当前运行正常"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "未运行:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "程序出错或者项目已停机"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "已禁用:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "程序已禁用"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "计算状态"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "数据库服务器当前无法访问"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "准备分发的任务"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "任务处理中"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "等待验证的任务"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "等待回收的任务"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "等待删除的任务"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "等待删除的任务"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "服务端事务积压(小时)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "用户"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "近期得到过积分的"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "得到过积分的"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "过去 24 小时内注册的"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "当前处理能力(GFLOPs)"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "按计算程序分类的任务"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "计算程序"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "未发送的"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "计算中"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "最近 100 个计算结果的平均处理时间(单位:小时)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "最近 24 小时的用户"
@@ -5709,6 +5706,10 @@ msgstr "新的团队创建人?"
msgid "Change founder"
msgstr "更改团队创建人"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "目前没有用户更换了团队。"
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "你必须选择一个非空的团队名称"
diff --git a/html/ops/app_select_edit.php b/html/ops/app_select_edit.php
new file mode 100755
index 0000000..f4a3623
--- /dev/null
+++ b/html/ops/app_select_edit.php
@@ -0,0 +1,148 @@
+#!/usr/bin/env php
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// If you have user app selection enabled
+// (APP_SELECT_PREFS in html/project/project_specific_prefs.inc)
+// and you add a new app, then initially it will be excluded
+// for all users who have selected apps.
+// This is probably not what you want.
+//
+// This script adds an app to all users' app-selection project preferences.
+// usage: app_select_edit.php app_id
+//
+// TEST THIS (SEE BOTTOM OF FILE) BEFORE YOU RUN IT
+
+// Implementation notes: structure of prefs is
+//
+// <project_preferences>
+// <project_specific>
+// <apps_selected>
+// <app_id>N</app_id>
+// </apps_selected>
+// </project_specific>
+// <venue>
+// <project_specific>
+// <apps_selected>
+// <app_id>N</app_id>
+// </apps_selected>
+// </project_specific>
+// </venue>
+// </project_preferences>
+//
+// - we need to add the app to both main prefs and venues
+// - the enclosing <apps_selected> may be missing (old server code)
+
+require_once("../inc/boinc_db.inc");
+
+define("VERBOSE", true);
+
+// process a <project_specific> element;
+// add the app to the simpleXML object
+//
+function do_pref_set(&$psp, $app_id) {
+ if (!$psp) {
+ if (VERBOSE) echo "no prefs\n";
+ return;
+ }
+ if (empty($psp->apps_selected)) {
+ $x = $psp;
+ } else {
+ $x = $psp->apps_selected;
+ }
+ $appids = $x->app_id;
+ if (count($appids) == 0) {
+ if (VERBOSE) echo "list empty\n";
+ return;
+ }
+ foreach ($appids as $i) {
+ if ((int)$i == $app_id) {
+ if (VERBOSE) echo "already in list\n";
+ return;
+ }
+ }
+ $x->addChild("app_id", $app_id);
+}
+
+// return updated project prefs, or null if error
+//
+function get_new_prefs($user, $app_id) {
+ if (!$user->project_prefs) {
+ if (VERBOSE) echo "no project prefs\n";
+ return null;
+ }
+ $prefs = @simplexml_load_string($user->project_prefs);
+ if (!$prefs) {
+ if (VERBOSE) echo "parse error\n";
+ if (VERBOSE) echo $user->project_prefs;
+ return null;
+ }
+ do_pref_set($prefs->project_specific, $app_id);
+ foreach ($prefs->venue as $v) {
+ do_pref_set($v->project_specific, $app_id);
+ }
+ $dom = new DOMDocument('1.0');
+ $dom->preserveWhiteSpace = false;
+ $dom->formatOutput = true;
+ $dom->loadXML($prefs->asXML());
+ return $dom->saveXML($dom->documentElement) . "\n";
+}
+
+function update_user($user, $app_id) {
+ if (VERBOSE) echo "processing user $user->id\n";
+ $p = get_new_prefs($user, $app_id);
+ if ($p) {
+ $p = BoincDb::escape_string($p);
+ $user->update("project_prefs='$p'");
+ if (VERBOSE) echo "updated user $user->id\n";
+ }
+}
+
+function update_users($app_id) {
+ $n = 0;
+ $maxid = BoincUser::max("id");
+ while ($n <= $maxid) {
+ $m = $n + 1000;
+ $users = BoincUser::enum("id>=$n and id<$m");
+ foreach ($users as $user) {
+ update_user($user, $app_id);
+ }
+ $n = $m;
+ }
+}
+
+if ($argc != 2) {
+ die("usage: app_select_edit.php app_id\n");
+}
+$app_id = $argv[1];
+if (!BoincApp::lookup_id($app_id)) {
+ die("No such app: $app_id\n");
+}
+
+// change comments below for testing
+
+//echo get_new_prefs(BoincUser::lookup_id(1), $app_id);
+ // show the new project prefs for a user, but don't update DB
+
+//update_user(BoincUser::lookup_id(1), $app_id);
+ // update DB for a particular user
+
+update_users($app_id);
+ // update DB for all users
+
+?>
diff --git a/html/ops/assign.php b/html/ops/assign.php
index eb30a95..e714b5b 100644
--- a/html/ops/assign.php
+++ b/html/ops/assign.php
@@ -33,7 +33,7 @@ function show_assign($asgn) {
} else {
$y = "One host belonging to ";
}
- $x = "$y<a href=db_action.php?table=user&id=$asgn->target_id>Host $asgn->target_id</a>";
+ $x = "$y<a href=db_action.php?table=user&id=$asgn->target_id>User $asgn->target_id</a>";
break;
case 3:
if ($asgn->multi) {
diff --git a/html/ops/badge_admin.php b/html/ops/badge_admin.php
new file mode 100644
index 0000000..a66087b
--- /dev/null
+++ b/html/ops/badge_admin.php
@@ -0,0 +1,143 @@
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// web interface for administering badges
+
+require_once('../inc/util_ops.inc');
+
+function show_form() {
+ start_table();
+ table_header(
+ "ID",
+ "name",
+ "type<br><span class=note>0=user<br>1=team</span>",
+ "title",
+ "description",
+ "image URL",
+ "level",
+ "tags",
+ "SQL rule",
+ "", ""
+ );
+
+ $badges = BoincBadge::enum("");
+ $i = 0;
+ foreach ($badges as $badge) {
+ echo "<tr class=row$i valign=top><form action=badge_admin.php method=POST>";
+ $i = 1-$i;
+ echo "<td>$badge->id</td>\n";
+ echo "<input type=hidden name=id value=$badge->id>";
+ $nu = BoincBadgeUser::count("badge_id=$badge->id");
+ $nt = BoincBadgeTeam::count("badge_id=$badge->id");
+ $x = "<br><span class=note>Assigned to $nu users<br>Assigned to $nt teams</span>";
+ echo "<td><input name=\"name\" value=\"$badge->name\">$x</td>\n";
+ echo "<td><input name=\"type\" size=4 value=\"$badge->type\"></td>\n";
+ echo "<td><input name=\"title\" value=\"$badge->title\"></td>\n";
+ echo "<td><input name=\"description\" value=\"$badge->description\"></td>\n";
+ $x = "";
+ if ($badge->image_url) {
+ if (strstr($badge->image_url, "http") == $badge->image_url) {
+ $y = $badge->image_url;
+ } else {
+ $y = URL_BASE.$badge->image_url;
+ }
+ $x = " <img align=right height=64 src=\"$y\">";
+ }
+ echo "<td><input name=\"image_url\" value=\"$badge->image_url\">$x</td>\n";
+ echo "<td><input name=\"level\" value=\"$badge->level\"></td>\n";
+ echo "<td><input name=\"tags\" value=\"$badge->tags\"></td>\n";
+ echo "<td><input name=\"sql_rule\" value=\"$badge->sql_rule\"></td>\n";
+ echo "<td><input type=submit name=\"update\" value=Update>\n";
+ echo "<td><input type=submit name=\"delete\" value=Delete>\n";
+ echo "</form></tr>\n";
+ }
+
+ echo "<tr><form action=badge_admin.php method=POST>";
+ echo "<td><br></td>\n";
+ echo "<td><input name=\"name\"></td>\n";
+ echo "<td><input name=\"type\" size=4></td>\n";
+ echo "<td><input name=\"title\"></td>\n";
+ echo "<td><input name=\"description\"></td>\n";
+ echo "<td><input name=\"image_url\"></td>\n";
+ echo "<td><input name=\"level\"></td>\n";
+ echo "<td><input name=\"tags\"></td>\n";
+ echo "<td><input name=\"sql_rule\"></td>\n";
+ echo "<td colspan=2><input type=submit name=\"add_badge\" value=\"Create badge\"></td>\n";
+ echo "</form></tr>\n";
+
+ end_table();
+}
+
+function add_badge() {
+ $name = BoincDb::escape_string(post_str("name"));
+ $type = post_int("type");
+ $title = BoincDb::escape_string(post_str("title"));
+ $description = BoincDb::escape_string(post_str("description"));
+ $image_url = BoincDb::escape_string(post_str("image_url"));
+ $level = BoincDb::escape_string(post_str("level"));
+ $tags = BoincDb::escape_string(post_str("tags"));
+ $sql_rule = BoincDb::escape_string(post_str("sql_rule"));
+ $now = time();
+ $id = BoincBadge::insert("(create_time, name, type, title, description, image_url, level, tags, sql_rule) values ($now, '$name', $type, '$title', '$description', '$image_url', '$level', '$tags', '$sql_rule')");
+ if (!$id) {
+ admin_error_page("Insert failed");
+ }
+}
+
+function update_badge() {
+ $id = post_int("id");
+ $badge = BoincBadge::lookup_id($id);
+ if (!$badge) {
+ admin_error_page("no such badge");
+ }
+ $name = BoincDb::escape_string(post_str("name"));
+ $type = post_int("type");
+ $title = BoincDb::escape_string(post_str("title"));
+ $description = BoincDb::escape_string(post_str("description"));
+ $image_url = BoincDb::escape_string(post_str("image_url"));
+ $level = BoincDb::escape_string(post_str("level"));
+ $tags = BoincDb::escape_string(post_str("tags"));
+ $sql_rule = BoincDb::escape_string(post_str("sql_rule"));
+ $retval = $badge->update("name='$name', type=$type, title='$title', description='$description', image_url='$image_url', level='$level', tags='$tags', sql_rule='$sql_rule'");
+ if (!$retval) {
+ admin_error_page("update failed");
+ }
+}
+
+function delete_badge() {
+ $id = post_int("id");
+ $badge = BoincBadge::lookup_id($id);
+ if (!$badge) {
+ admin_error_page("no such badge");
+ }
+ BoincBadgeUser::delete("badge_id=$id");
+ BoincBadgeTeam::delete("badge_id=$id");
+ $badge->delete();
+}
+
+if (post_str('add_badge', true)) {
+ add_badge();
+} else if (post_str('update', true)) {
+ update_badge();
+} else if (post_str('delete', true)) {
+ delete_badge();
+}
+admin_page_head("Manage badges");
+show_form();
+admin_page_tail();
+?>
diff --git a/html/ops/badge_assign.php b/html/ops/badge_assign.php
new file mode 100755
index 0000000..94f2d32
--- /dev/null
+++ b/html/ops/badge_assign.php
@@ -0,0 +1,101 @@
+#!/usr/bin/env php
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// Assign badges based on RAC percentile.
+// Customize this to grant other types of badges
+
+require_once("../inc/util_ops.inc");
+
+// thresholds for the various badges
+// (i.e. gold badge is for top 1% of active users/teams)
+//
+$badge_pctiles = array(1, 5, 25);
+$badge_images = array("pct_1.png", "pct_5.png", "pct_25.png");
+
+// get the records for percentile badges; create them if needed
+//
+function get_pct_badges($badge_name_prefix, $badge_pctiles, $badge_images) {
+ $badges = array();
+ for ($i=0; $i<3; $i++) {
+ $badges[$i] = get_badge($badge_name_prefix."_".$i, "Top ".$badge_pctiles[$i]."% in average credit", $badge_images[$i]);
+ }
+ return $badges;
+}
+
+// get the RAC percentiles from the database
+//
+function get_percentiles($is_user, $badge_pctiles) {
+ $percentiles = array();
+ for ($i=0; $i<3; $i++) {
+ if ($is_user) {
+ $percentiles[$i] = BoincUser::percentile("expavg_credit", "expavg_credit>1", 100-$badge_pctiles[$i]);
+ } else {
+ $percentiles[$i] = BoincTeam::percentile("expavg_credit", "expavg_credit>1", 100-$badge_pctiles[$i]);
+ }
+ if ($percentiles[$i] === false) {
+ die("Can't get percentiles\n");
+ }
+ }
+ return $percentiles;
+}
+
+// decide which badge to assign, if any.
+// Unassign other badges.
+//
+function assign_pct_badge($is_user, $item, $percentiles, $badges) {
+ for ($i=0; $i<3; $i++) {
+ if ($item->expavg_credit >= $percentiles[$i]) {
+ assign_badge($is_user, $item, $badges[$i]);
+ unassign_badges($is_user, $item, $badges, $i);
+ return;
+ }
+ }
+ unassign_badges($is_user, $item, $badges, -1);
+}
+
+// Scan through all the users/teams, 1000 at a time,
+// and assign/unassign RAC badges
+//
+function assign_badges($is_user, $badge_pctiles, $badge_images) {
+ $kind = $is_user?"user":"team";
+ $badges = get_pct_badges($kind."_pct", $badge_pctiles, $badge_images);
+ $pctiles = get_percentiles($is_user, $badge_pctiles);
+ echo "thresholds for $kind badges: $pctiles[0] $pctiles[1] $pctiles[2]\n";
+
+ $n = 0;
+ $maxid = $is_user?BoincUser::max("id"):BoincTeam::max("id");
+ while ($n <= $maxid) {
+ $m = $n + 1000;
+ if ($is_user) {
+ $items = BoincUser::enum_fields("id, expavg_credit", "id>=$n and id<$m and total_credit>0");
+ } else {
+ $items = BoincTeam::enum_fields("id, expavg_credit", "id>=$n and id<$m and total_credit>0");
+ }
+ foreach ($items as $item) {
+ assign_pct_badge($is_user, $item, $pctiles, $badges);
+ // ... assign other types of badges
+ }
+ $n = $m;
+ }
+}
+
+assign_badges(true, $badge_pctiles, $badge_images);
+assign_badges(false, $badge_pctiles, $badge_images);
+
+?>
diff --git a/html/ops/build_po_boinc.php b/html/ops/build_po_boinc.php
index e9ad2c8..25da5b5 100755
--- a/html/ops/build_po_boinc.php
+++ b/html/ops/build_po_boinc.php
@@ -38,7 +38,7 @@ msgstr ""
HDR;
-$out = fopen("en.po", "w");
+$out = fopen("BOINC-Project-Generic.pot", "w");
fwrite($out, $header);
@@ -51,8 +51,6 @@ stream_copy_to_stream($pipe, $out);
fclose($pipe);
fclose($out);
-system("mv en.po ../../locale/templates/BOINC-Project-Generic.pot\n");
-
echo "Done\n";
?>
diff --git a/html/ops/cancel_wu_action.php b/html/ops/cancel_wu_action.php
index 56ee8a1..e926463 100644
--- a/html/ops/cancel_wu_action.php
+++ b/html/ops/cancel_wu_action.php
@@ -24,31 +24,27 @@
require_once("../inc/db.inc");
require_once("../inc/util_ops.inc");
-admin_page_head("Cancel WU");
-
db_init();
$wuid1 = get_int('wuid1');
$wuid2 = get_int('wuid2');
+$unsent_only = get_str('unsent_only', true);
if ($wuid1<1 || $wuid2<$wuid1) {
- echo "<h2>Workunit IDs fail to satisfy the conditions:<br/>
- 1 <= WU1 ($wuid1) <= WU2 ($wuid2)<br/>
- Unable to process request to cancel workunits.
- </h2>
- ";
- exit();
+ error_page(
+ "<h2>Workunit IDs fail to satisfy the conditions:<p> 0 < ID1 <= ID2"
+ );
}
-echo "CANCELLING workunits $wuid1 to $wuid2 inclusive....<br/>";
-
-if (cancel_wu($wuid1, $wuid2)) {
- echo "<h2>Failed in";
+if ($unsent_only) {
+ cancel_wus_if_unsent($wuid1, $wuid2);
} else {
- echo "<h2>Success in";
+ cancel_wus($wuid1, $wuid2);
}
-echo " cancelling workunits $wuid1 <= WUID <= $wuid2</h2>";
+admin_page_head("Cancel jobs");
+echo " canceled jobs with $wuid1 <= workunit ID <= $wuid2</h2>";
admin_page_tail();
+
$cvs_version_tracker[]="\$Id$"; //Generated automatically - do not edit
?>
diff --git a/html/ops/cancel_wu_form.php b/html/ops/cancel_wu_form.php
index cb8e20f..72b00ae 100644
--- a/html/ops/cancel_wu_form.php
+++ b/html/ops/cancel_wu_form.php
@@ -20,20 +20,16 @@
require_once("../inc/util_ops.inc");
-admin_page_head("Cancel workunit(s)");
+admin_page_head("Cancel jobs");
echo "<form action=\"cancel_wu_action.php\">
";
echo "<p>
- This form may be used to cancel unnecessary or unwanted workunits.
- We recommend that you stop the project before doing this.
- Note that the workunits and their corresponding
- results (if any) are NOT removed from the database.
+ We recommend that you stop the project before canceling jobs.
+ <p>
+ Canceled jobs are not removed from the database.
Instead, they are marked as 'no longer needed'.
- In most cases you should probably only remove workunits whose results
- are all unsent,
- since otherwise a user will not get credit
- for a result that they might return.
+ <p>
<p>
";
// TODO: David, a query that shows all workunits that do not have all results unsent is:
@@ -42,9 +38,18 @@ echo "<p>
// be useful to incorporate into this page.
start_table();
-row2("First Workunit (ID) to cancel", "<input size=\"32\" name=\"wuid1\"");
-row2("Last Workunit (ID) to cancel", "<input size=\"32\" name=\"wuid2\"");
-row2("", "<input type=\"submit\" value=\"CANCEL WORKUNITS\">");
+row2("Workunit ID of first job to cancel", "<input size=\"32\" name=\"wuid1\"");
+row2("Workunit ID of last job to cancel", "<input size=\"32\" name=\"wuid2\"");
+row2(
+ "Cancel only jobs with no instance in progress
+ <br><span class=note>
+ You can cancel jobs with instances that are in progress,
+ but if you do so, users will not get credit for these instances.
+ </span>
+ ",
+ "<input type=checkbox name=unsent_only>"
+);
+row2("", "<input type=\"submit\" value=\"Cancel jobs\">");
end_table();
echo "
</form>
diff --git a/html/ops/cancel_wus.php b/html/ops/cancel_wus.php
index b1a4223..821255f 100644
--- a/html/ops/cancel_wus.php
+++ b/html/ops/cancel_wus.php
@@ -7,5 +7,5 @@ require_once("../inc/util_ops.inc");
db_init();
-//cancel_wu(0, 636);
+//cancel_wus(0, 636);
?>
diff --git a/html/ops/create_forums.php b/html/ops/create_forums.php
index de56a59..13e64fc 100644
--- a/html/ops/create_forums.php
+++ b/html/ops/create_forums.php
@@ -28,29 +28,31 @@ require_once("../inc/forum_db.inc");
require_once("../inc/util_ops.inc");
function create_category($orderID, $name, $is_helpdesk) {
- $q = "insert into category (orderID, lang, name, is_helpdesk) values ($orderID, 1, '$name', $is_helpdesk)";
- $result = mysql_query($q);
+ $q = "(orderID, lang, name, is_helpdesk) values ($orderID, 1, '$name', $is_helpdesk)";
+ $db = BoincDB::get();
+ $result = $db->insert("category", $q);
if (!$result) {
$cat = BoincCategory::lookup("name='$name' and is_helpdesk=$is_helpdesk");
if ($cat) return $cat->id;
echo "can't create category\n";
- echo mysql_error();
+ echo $db->base_error();
exit();
}
- return mysql_insert_id();
+ return $db->insert_id();
}
function create_forum($category, $orderID, $title, $description, $is_dev_blog=0) {
- $q = "insert into forum (category, orderID, title, description, is_dev_blog) values ($category, $orderID, '$title', '$description', $is_dev_blog)";
- $result = mysql_query($q);
+ $q = "(category, orderID, title, description, is_dev_blog) values ($category, $orderID, '$title', '$description', $is_dev_blog)";
+ $db = BoincDB::get();
+ $result = $db->insert("forum",$q);
if (!$result) {
$forum = BoincForum::lookup("category=$category and title='$title'");
if ($forum) return $forum->id;
echo "can't create forum\n";
- echo mysql_error();
+ echo $db->base_error();
exit();
}
- return mysql_insert_id();
+ return $db->insert_id();
}
db_init();
diff --git a/html/ops/credit_study.php b/html/ops/credit_study.php
index 1103dec..20441ca 100644
--- a/html/ops/credit_study.php
+++ b/html/ops/credit_study.php
@@ -97,7 +97,7 @@ function get_data() {
$found_zero = false;
while ($result = mysql_fetch_object($r2)) {
if ($result->granted_credit==0) continue; // skip invalid
- $host = lookup_host($result->hostid);
+ $host = BoincHost::lookup_id($result->hostid);
$r = new StdClass;
$r->cpu_time = $result->cpu_time;
$r->p_fpops = $host->p_fpops;
diff --git a/html/ops/db_update.php b/html/ops/db_update.php
index 8bd9730..a4719f0 100644
--- a/html/ops/db_update.php
+++ b/html/ops/db_update.php
@@ -853,6 +853,86 @@ function update_5_23_2013() {
do_query("alter table host add product_name varchar(254) not null");
}
+function update_9_10_2013() {
+ do_query("alter table workunit change mod_time mod_time timestamp default current_timestamp on update current_timestamp");
+ do_query("alter table result change mod_time mod_time timestamp default current_timestamp on update current_timestamp");
+}
+
+function update_9_17_2013() {
+ do_query("alter table batch add expire_time double not null");
+}
+
+function update_12_22_2013() {
+ do_query("
+ create table badge (
+ id serial primary key,
+ create_time double not null,
+ type tinyint not null,
+ name varchar(255) not null,
+ title varchar(255) not null,
+ description varchar(255) not null,
+ image_url varchar(255) not null,
+ level varchar(255) not null,
+ tags varchar(255) not null,
+ sql_rule varchar(255) not null
+ )
+ ");
+ do_query("
+ create table badge_user (
+ badge_id integer not null,
+ user_id integer not null,
+ create_time double not null,
+ reassign_time double not null
+ )
+ ");
+ do_query("
+ create table badge_team (
+ badge_id integer not null,
+ team_id integer not null,
+ create_time double not null,
+ reassign_time double not null
+ )
+ ");
+ do_query("
+ alter table badge_user
+ add unique (user_id, badge_id)
+ ");
+ do_query("
+ alter table badge_team
+ add unique (team_id, badge_id)
+ ");
+}
+
+function update_1_13_2014() {
+ do_query(
+ "alter table user_submit add max_jobs_in_progress integer not null"
+ );
+}
+
+function update_3_6_2014() {
+ do_query(
+ "alter table host add gpu_active_frac double not null"
+ );
+}
+
+function update_4_2_2014() {
+ do_query(
+ "alter table result
+ add peak_working_set_size double not null,
+ add peak_swap_size double not null,
+ add peak_disk_usage double not null
+ "
+ );
+}
+
+function update_5_3_2014() {
+ do_query(
+ "alter table app
+ add fraction_done_exact tinyint not null
+ "
+ );
+}
+
// Updates are done automatically if you use "upgrade".
//
// If you need to do updates manually,
@@ -887,6 +967,13 @@ $db_updates = array (
array(27000, "update_11_25_2012"),
array(27001, "update_4_26_2013"),
array(27002, "update_5_23_2013"),
+ array(27003, "update_9_10_2013"),
+ array(27004, "update_9_17_2013"),
+ array(27005, "update_12_22_2013"),
+ array(27006, "update_1_13_2014"),
+ array(27007, "update_3_6_2014"),
+ array(27008, "update_4_2_2014"),
+ array(27009, "update_5_3_2014"),
);
?>
diff --git a/html/ops/delete_job_files b/html/ops/delete_job_files
old mode 100644
new mode 100755
diff --git a/html/ops/delete_spammers.php b/html/ops/delete_spammers.php
new file mode 100755
index 0000000..8e185e2
--- /dev/null
+++ b/html/ops/delete_spammers.php
@@ -0,0 +1,116 @@
+#!/usr/bin/env php
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// script to delete spammer accounts and profiles.
+//
+// delete_spammers.php --list filename
+// "filename" contains a list of user IDs, one per line.
+//
+// delete_spammers.php --auto
+// delete accounts that
+// - have no hosts
+// - have no message-board posts
+// - have a profile containing a link.
+// NOTE: use this with caution. See delete_auto() below.
+// Run it in test mode first.
+
+require_once("../inc/db.inc");
+require_once("../inc/profile.inc");
+require_once("../inc/forum.inc");
+db_init();
+
+// delete a spammer account, and everything associated with it
+//
+function delete_user($id) {
+ $user = new StdClass;
+ $user->id = $id;
+ echo "deleting user $id\n";
+ delete_profile($user);
+ forum_delete_user($user);
+ $q = "delete from user where id=$id";
+ mysql_query($q);
+}
+
+function delete_list($fname) {
+ $f = fopen($fname, "r");
+ if (!$f) die("no such file $fname\n");
+ while ($s = fgets($f)) {
+ $s = trim($s);
+ if (!is_numeric($s)) die("bad ID $s\n");
+ delete_user($s);
+ }
+}
+
+function has_link($x) {
+ if (strstr($x, "[url")) return true;
+ if (strstr($x, "http://")) return true;
+ if (strstr($x, "https://")) return true;
+ return false;
+}
+
+function delete_auto() {
+ $profiles = BoincProfile::enum("");
+ foreach ($profiles as $p) {
+ if (has_link($p->response1) || has_link($p->response2)) {
+ $user = BoincUser::lookup_id($p->userid);
+ if (!$user) {
+ echo "profile has missing user: %p->userid\n";
+ continue;
+ }
+
+ // uncomment the following to delete only recent accounts
+ //
+ //if ($user->create_time < time() - 60*86400) continue;
+
+ $n = BoincHost::count("userid=$p->userid");
+ if ($n) continue;
+ $n = BoincPost::count("user=$p->userid");
+ if ($n) continue;
+
+ // By default, show profile but don't delete anything
+ // Change 0 to 1 if you want to actually delete
+ //
+ if (0) {
+ delete_user($user->id);
+ } else {
+ echo "------------\n$p->userid\n$p->response1\n$p->response2\n";
+ }
+ }
+ }
+}
+
+for ($i=1; $i<$argc; $i++) {
+ if ($argv[$i] == "--list") {
+ delete_list($argv[++$i]);
+ } else if ($argv[$i] == "--auto") {
+ delete_auto();
+ } else if ($argv[$i] == "--id_range") {
+ $id1 = $argv[++$i];
+ $id2 = $argv[++$i];
+ if (!is_numeric($id1) || !is_numeric($id2)) {
+ die ("bad args\n");
+ }
+ for ($i=$id1; $i <= $id2; $i++) {
+ echo "deleting $i\n";
+ delete_user($i);
+ }
+ }
+}
+
+?>
diff --git a/html/ops/expire_batches b/html/ops/expire_batches
index 960ab09..03e34cd 100755
--- a/html/ops/expire_batches
+++ b/html/ops/expire_batches
@@ -23,7 +23,7 @@
require_once("../inc/submit_db.inc");
$now = time();
-$batches = BoincBatch:enum("expire_time>0 and expire_time<$now");
+$batches = BoincBatch::enum("expire_time>0 and expire_time<$now");
foreach ($batches as $batch) {
expire_batch($batch);
}
diff --git a/html/ops/failure_result_summary_by_host.php b/html/ops/failure_result_summary_by_host.php
index 33f5a94..15cff96 100644
--- a/html/ops/failure_result_summary_by_host.php
+++ b/html/ops/failure_result_summary_by_host.php
@@ -70,11 +70,9 @@ table_header(
);
while ($res = mysql_fetch_object($result)) {
- $av = BoincAppVersion::lookup_id($res->app_version_id);
- $p = BoincPlatform::lookup_id($av->platformid);
table_row(
- sprintf("%.2f", $res->app_version_num/100)." $p->name [$av->plan_class]",
- $res->Host_ID,
+ app_version_desc($res->app_version_id),
+ "<a href=".URL_BASE."show_host_detail.php?hostid=$res->Host_ID>$res->Host_ID</a>",
$res->OS_Version, $res->Results_Today,
"<a href=db_action.php?table=result&detail=low&hostid=$res->Host_ID&app_version_id=$res->app_version_id&server_state=5&outcome=3>$res->error_count</a>"
);
diff --git a/html/ops/failure_result_summary_by_platform.php b/html/ops/failure_result_summary_by_platform.php
index ff502f6..64e423a 100644
--- a/html/ops/failure_result_summary_by_platform.php
+++ b/html/ops/failure_result_summary_by_platform.php
@@ -66,12 +66,13 @@ table_header(
while ($res = mysql_fetch_object($result)) {
$exit_status_condition = "exit_status=$res->exit_status";
- $av = BoincAppVersion::lookup_id($res->app_version_id);
- $p = BoincPlatform::lookup_id($av->platformid);
table_row(
- sprintf("%.2f", $av->version_num/100)." $p->name [$av->plan_class]",
+ app_version_desc($res->app_version_id),
link_results(
- exit_status_string($res), $urlquery, "$exit_status_condition", ""
+ exit_status_string($res->exit_status),
+ $urlquery,
+ "$exit_status_condition",
+ ""
),
$res->error_count
);
diff --git a/html/ops/forum_repair.php b/html/ops/forum_repair.php
index 67cd2a9..6f63c90 100644
--- a/html/ops/forum_repair.php
+++ b/html/ops/forum_repair.php
@@ -26,6 +26,8 @@ $cli_only = true;
require_once("../inc/forum_db.inc");
require_once("../inc/util_ops.inc");
+db_init();
+
function update_thread_timestamps() {
$threads = BoincThread::enum();
foreach ($threads as $thread) {
@@ -43,7 +45,7 @@ function update_thread_timestamps() {
}
function update_user_posts() {
- $users = BoincUser::enum();
+ $users = BoincUser::enum("");
foreach ($users as $user) {
BoincForumPrefs::lookup($user);
$num = BoincPost::count("user=$user->id");
@@ -66,7 +68,8 @@ function update_thread_replies() {
}
}
-//update_thread_replies(); exit();
+update_thread_timestamps();
+update_user_posts();
+update_thread_replies();
-echo "You must uncomment a function call in the script\n";
?>
diff --git a/html/ops/index.php b/html/ops/index.php
index 3d2cb93..2dd6aeb 100644
--- a/html/ops/index.php
+++ b/html/ops/index.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -33,24 +33,33 @@ admin_page_head($title);
echo "<ul>\n";
if (!file_exists(".htaccess")) {
- echo "<li><span style=\"color: #ff0000\">The Project Management directory is not
- protected from public access by a .htaccess file.</span></li>\n";
+ echo "<li><span style=\"color: #ff0000\">
+ The Project Management directory is not
+ protected from public access by a .htaccess file.
+ </span></li>
+ ";
}
if (!defined("SYS_ADMIN_EMAIL")) {
- echo "<li><span style=\"color: #ff0000\">The defined constant SYS_ADMIN_EMAIL
+ echo "<li><span style=\"color: #ff0000\">
+ The defined constant SYS_ADMIN_EMAIL
has not been set. Please edit <tt>project/project.inc</tt> and set this
to an address which can be used to contact the project administrators.
- </span></li>\n";
+ </span></li>
+ ";
}
if (parse_bool($config, "disable_account_creation")) {
- echo "<li><span style=\"color: #ff9900\">Account creation is disabled.</span></li>\n";
+ echo "<li><span style=\"color: #ff9900\">
+ Account creation is disabled.</span></li>
+ ";
}
if (defined("INVITE_CODES")) {
- echo "<li><span style=\"color: #ff9900\">Account creation is restricted by the use of
- invitation codes.</span></li>\n";
+ echo "<li><span style=\"color: #ff9900\">
+ Account creation is restricted by the use of
+ invitation codes.</span></li>
+ ";
}
$uotd_candidates = count_uotd_candidates();
@@ -62,8 +71,10 @@ if ($uotd_candidates >= 0) {
} else {
$color = "#ff9900";
}
- echo "<li><span style=\"color: ".$color."\">There are ".$uotd_candidates." remaining
- candidates for User of the Day.</span></li>\n";
+ echo "<li><span style=\"color: ".$color."\">
+ There are ".$uotd_candidates." remaining candidates for User of the Day.
+ </span></li>
+ ";
}
echo "</ul>\n";
@@ -113,17 +124,17 @@ echo "
</td>
<td><b>User management</b>
<ul>
+ <li><a href=".URL_BASE."/forum_index.php>Post news item</a></li>
<li><a href=\"profile_screen_form.php\">Screen user profiles </a></li>
+ <li><a href=\"badge_admin.php\">Badges</a></li>
<li><a href=\"manage_special_users.php\">User privileges</a></li>
<li><a href=".URL_BASE."/manage_project.php>User job submission privileges</a></li>
<li><a href=\"mass_email.php\">Send mass email to a selected set of users</a></li>
- <li><a href=\"problem_host.php\">Email user with misconfigured host</a></li>
<li><form action=\"manage_user.php\">
<input type=\"submit\" value=\"Manage user\">
ID: <input name=\"userid\">
</form>
</li>
- </li>
</ul>
</td>
</tr>
@@ -134,8 +145,8 @@ echo "
$show_deprecated = get_str("show_deprecated", true);
$show_only = array("all"); // Add all appids you want to display, or "all"
-$result = mysql_query("select id, name, deprecated from app");
-while ($app = mysql_fetch_object($result)) {
+$apps = BoincApp::enum("");
+foreach ($apps as $app) {
if (in_array($app->id, $show_only)
|| ( in_array("all", $show_only)
&& (!$app->deprecated || $show_deprecated)
@@ -172,7 +183,6 @@ while ($app = mysql_fetch_object($result)) {
echo " </ul> ";
}
}
-mysql_free_result($result);
if ($show_deprecated) {
echo "<a href=\"index.php?show_deprecated=0\">Hide deprecated applications</a>";
@@ -180,19 +190,26 @@ if ($show_deprecated) {
echo "<a href=\"index.php?show_deprecated=1\">Show deprecated applications</a>";
}
-// Periodic tasks
-
-echo "<h3>Periodic or special tasks</h3>
+echo "<h3>Periodic tasks</h3>
+The following scripts should be run as periodic tasks, not via this web page
+(see <a href=\"http://boinc.berkeley.edu/trac/wiki/ProjectTasks\">http://boinc.berkeley.edu/trac/wiki/ProjectTasks</a>):
+<pre>
+ update_forum_activities.php, update_profile_pages.php, update_uotd.php
+</pre>
+
+<h3>Repair tasks</h3>
+The following scripts do one-time repair operations.
+Run them manually on the command line as needed
+(i.e. <tt>php scriptname.php</tt>):
+<pre>forum_repair.php, team_repair.php, repair_validator_problem.php</pre>
+
+<h3>Cleanup tasks</h3>
+You can run the following as a periodic task, on the command line,
+or by clicking here:
<ul>
- <li> The following scripts should be run as periodic tasks,
- not via this web page
- (see <a href=\"http://boinc.berkeley.edu/trac/wiki/ProjectTasks\">http://boinc.berkeley.edu/trac/wiki/ProjectTasks</a>):
- <pre> update_forum_activities.php, update_profile_pages.php, update_uotd.php</pre>
- <li> The following scripts can be run manually on the command line
- as needed (i.e. <tt>php scriptname.php</tt>):
- <pre>forum_repair.php, team_repair.php, repair_validator_problem.php</pre>
- </ul>
- ";
+ <li> <a href=remove_zombie_hosts.php>remove_zombie_hosts.php</a> Remove zombie host records
+ </ul>
+";
admin_page_tail();
diff --git a/html/ops/list_new_users.php b/html/ops/list_new_users.php
index c00a168..d6836d5 100644
--- a/html/ops/list_new_users.php
+++ b/html/ops/list_new_users.php
@@ -110,7 +110,7 @@ while ($row = mysql_fetch_object($result)) {
$email = "<span style=\"color: #ff0000\">".$email."</span>\n";
}
- table_row($id, "<a href=\"manage_user.php?userid=".$id."\" target=\"_user\">".$name."</a> ".$roles, $email,
+ table_row($id, "<a href=\"manage_user.php?userid=".$id."\">".$name."</a> ".$roles, $email,
$team_name, $country, $joined);
}
end_table();
diff --git a/html/ops/login_action.php b/html/ops/login_action.php
index 813edd8..2aa4e75 100644
--- a/html/ops/login_action.php
+++ b/html/ops/login_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -29,7 +29,7 @@ $email_addr = strtolower(post_str("email_addr", true));
$passwd = stripslashes(post_str("passwd", true));
if ($email_addr && $passwd) {
- $user = lookup_user_email_addr($email_addr);
+ $user = BoincUser::lookup_email_addr($email_addr);
if (!$user) {
error_page("No account found with email address $email_addr");
}
diff --git a/html/ops/logout.php b/html/ops/logout.php
index b60367f..6b4e3e5 100644
--- a/html/ops/logout.php
+++ b/html/ops/logout.php
@@ -5,7 +5,9 @@ require_once("../inc/util_ops.inc");
$user = get_logged_in_user_ops();
if ($user) {
clear_cookie('auth', true);
+ header("Location: index.php");
admin_page_head("Logged out");
+ echo "You are now logged out";
admin_page_tail();
} else {
admin_error_page("not logged in");
diff --git a/html/ops/main.css b/html/ops/main.css
new file mode 100644
index 0000000..d2324b5
--- /dev/null
+++ b/html/ops/main.css
@@ -0,0 +1,435 @@
+/*
+main.css - general stylesheet for BOINC web pages
+
+No colors are defined here.
+Put colors in a separate stylesheet (e.g., white.css, style2.css)
+
+Use classes, not IDs.
+
+We use the following classes:
+
+table.bordered
+ a table with a border around it
+td.bordered
+ bordered table cell (admin pages only)
+td.heading
+ table cell acting as heading
+td.fieldname
+td.fieldvalue
+ table cells with name/value pairs
+td.fieldname_error
+td.fieldvalue_error
+ same, but colored to show error
+td.row0, row1
+ rows with alternating colors
+td.highlighted_row0, highlighted_row1
+ same, but highlighted
+
+... a bunch for message boards; see below
+
+In the home page:
+
+td.news
+td.uotd
+h2.headline
+div.mainnav
+
+*/
+
+a, a:link, a:visited, a:active {
+ text-decoration: none;
+}
+
+a:hover { text-decoration: underline; }
+
+body {
+ font-family: Verdana, Arial, Sans Serif;
+ font-size: 13px;
+ margin: 5px 10px;
+}
+
+h1 {
+ font-weight: normal;
+ margin: 10px;
+}
+
+h2 {
+ font-weight: normal;
+ font-size: 20px;
+}
+
+h3, h4 { font-weight: bold; }
+
+hr {
+ size: 0;
+ margin: 8px 2px;
+}
+
+img {
+ border: none;
+}
+
+table {
+ padding: 4px 6px;
+ margin: 2px;
+}
+
+table.bordered {
+ border-width: 2px;
+ border-style: solid;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ -khtml-border-radius: 6px;
+ border-radius: 6px;
+}
+
+th {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+td {
+ vertical-align: top;
+ padding: 4px;
+}
+
+td.bordered {
+ border-width: 1px;
+ border-style: solid;
+}
+
+td.heading {
+ font-weight: bold;
+ margin: 4px 0;
+ padding: 8px;
+}
+
+td.fieldname {
+ text-align: right;
+ padding-right: 10px;
+ font-size: 14px;
+ margin: 2px 0;
+}
+
+td.fieldvalue {
+ margin: 2px 0;
+ vertical-align: top;
+}
+
+td.fieldname_error {
+ text-align: right;
+}
+
+td.fieldvalue_error {
+ font-weight: bold;
+}
+
+td.friend {
+ text-align: center;
+}
+
+.row0,
+.row1 ,
+.highlighted_row0,
+.highlighted_row1 {
+ text-align: left;
+}
+
+/* Buttons etc. */
+
+input[type="button"],
+input[type="submit"],
+.btn {
+ padding: 4px 4px;
+ margin: 2px;
+ border-width: 1px;
+ border-style: solid;
+ font-size: 13px;
+ font-weight: normal;
+ cursor: pointer;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ border-radius: 5px;
+}
+
+ /* IE6 doesn't understand [type=XXXX] so we use class "button" */
+
+a.button {
+ line-height: 2.4em;
+ padding: 4px 4px;
+ margin: 0px 0px;
+ border-width: 1px;
+ border-style: solid;
+ font-size: 13px;
+ font-weight: normal;
+ white-space: nowrap;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ border-radius: 5px;
+}
+
+input[type="button"]:hover,
+input[type="submit"]:hover,
+input.btn:hover,
+.button:hover ,
+.forum_toplinks a:hover {
+ text-decoration: none;
+}
+
+input[type="text"], input[type="password"], select, textarea {
+ border-width: 1px;
+ border-style: solid;
+ margin: 2px 4px;
+ padding: 3px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ border-radius: 5px;
+}
+
+/* Main Page */
+
+td.news {
+ border-width: 2px;
+ border-style: solid;
+ padding: 10px;
+ margin: 4px;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ -khtml-border-radius: 10px;
+ border-radius: 10px;
+}
+
+h2.headline {
+ margin-top: 0;
+}
+
+td.uotd {
+ border-width: 2px;
+ border-style: solid;
+ padding: 10px;
+ margin: 4px;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ -khtml-border-radius: 10px;
+ border-radius: 10px;
+}
+
+/* Forum */
+
+#thread {
+ table-layout: fixed;
+ overflow: visible;
+}
+
+td.category , tr.subtitle{
+ border: none;
+ font-weight: bold;
+ margin: 6px 0;
+}
+
+th {
+ font-weight: bold;
+ margin: 4px 2px;
+ padding: 4px;
+}
+
+td.postheader {
+ font-size: 12px;
+ margin-left: 4px;
+ padding-left: 8px;
+ height: 28px;
+ -moz-border-radius: 0 10px 0 0;
+ -webkit-border-radius-topright: 10px;
+ -khtml-border-radius-topright: 10px;
+ border-radius-topright: 10px;
+}
+
+td.postheader form {
+ padding: 4px;
+}
+
+td.postbody {
+ line-height: 140%;
+ padding: 4px 12px;
+}
+
+td.postfooter {
+ font-size: 12px;
+ height: 26px;
+ margin-left: 4px;
+ padding-left: 8px;
+ -moz-border-radius: 0 0 10px 0;
+ -khtml-border-radius-bottomright: 10px;
+ -webkit-border-radius-bottomright: 10px;
+ border-radius-bottomright: 10px;
+}
+
+td.postheader .button,
+td.postfooter .button {
+ font-size: 12px;
+}
+
+tr.helpdeskseparator {
+ height: 10pt;
+}
+
+tr.postseparator {
+ margin: 4px 0;
+}
+
+td.threadline {
+ text-align: left;
+ vertical-align: middle;
+}
+
+td.numbers {
+ vertical-align: middle;
+ text-align: center;
+}
+
+td.lastpost, td.threadicon {
+ vertical-align: middle;
+}
+
+.title {
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.description {
+ font-size: 80%;
+ font-weight: normal;
+}
+
+td.leftcol {
+ -moz-border-radius: 10px 0 0 10px;
+ -khtml-border-radius-topleft: 10px;
+ -khtml-border-radius-bottomleft: 10px;
+ -webkit-border-radius-topleft: 10px;
+ -webkit-border-radius-bottomleft: 10px;
+ border-radius-topleft: 10px;
+ border-radius-bottomleft: 10px;
+}
+
+.authorcol {
+ width: 136px;
+}
+
+div.authorcol {
+ border-width: 1px;
+ border-style: solid;
+ padding: 8px 5px;
+ width: 120px;
+ margin: 2px 0 2px 2px;
+ overflow: hidden;
+ word-wrap: break-word;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ -khtml-border-radius: 10px;
+ border-radius: 10px;
+}
+
+.authorinfo {
+ font-size: 11px;
+}
+
+img.authorinfo {
+ border-width: 1px;
+ border-style: solid;
+ margin: 3px 9px;
+}
+
+img.flag {
+ margin: 2px 1px;
+}
+
+.authorcol .button {
+ font-size: 12px;
+ margin: 0 4px;
+ line-height: 2.6em;
+}
+
+blockquote.postbody {
+ border-left-width: 2px;
+ border-left-style: solid;
+ padding: 2px 6px;
+ margin: 0 6px 0 10px;
+ font-style: italic;
+}
+
+.forum_toplinks td {
+ vertical-align: middle;
+}
+
+.page_title {
+ font-size: 24px;
+ margin: 20px;
+}
+
+span.note {
+ font-weight: normal;
+ font-style: italic;
+ font-size: 0.9em;
+}
+
+span.news_date {
+ font-size: 0.8em;
+}
+
+span.news_title,
+span.inboxunread {
+ font-weight: bold;
+}
+
+.nobr{
+ white-space: nowrap;
+}
+
+.pre {
+ font-family: "Courier New", courier, monospace;
+ display: block;
+ white-space: pre;
+ overflow: auto;
+}
+
+.code {
+ font-family: "Courier New", courier, monospace;
+ display: block;
+ margin-left: 5em;
+ border-left-width: 3px;
+ border-left-style: solid;
+ padding-left: 1em;
+ white-space: nowrap;
+ overflow: auto;
+}
+
+.smalltext {
+ font-size: 0.8em;
+}
+
+.error,
+.notice {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+div.pm_preview {
+ border-width: 2px;
+ border-style: solid;
+ margin: 1em;
+ padding: 0.2em;
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+
+ line-height: 140%;
+ padding: 4px 12px;
+}
+
+/* IE hack */
+
+* html body .code {
+ white-space: normal;
+}
diff --git a/html/ops/manage_app_versions.php b/html/ops/manage_app_versions.php
index 2f1bf55..1babf6d 100644
--- a/html/ops/manage_app_versions.php
+++ b/html/ops/manage_app_versions.php
@@ -63,6 +63,7 @@ function show_form() {
$avs = BoincAppVersion::enum(
"true order by appid, platformid, plan_class, version_num"
);
+ $i = 0;
foreach ($avs as $av) {
// grey out deprecated versions
//
@@ -72,7 +73,8 @@ function show_form() {
$f2="</font>";
}
- echo "<tr><form action=manage_app_versions.php method=POST>\n";
+ echo "<tr class=row$i><form action=manage_app_versions.php method=POST>\n";
+ $i = 1-$i;
echo "<input type=hidden name=id value=$av->id>";
echo " <TD>$f1 $av->id $f2</TD>\n";
diff --git a/html/ops/manage_apps.php b/html/ops/manage_apps.php
index 843944f..1cbeb6f 100644
--- a/html/ops/manage_apps.php
+++ b/html/ops/manage_apps.php
@@ -37,12 +37,15 @@ function do_updates() {
$n = post_str("homogeneous_app_version", true)?1:0;
$app->update("homogeneous_app_version=$n");
- $n = post_str("cpu_intensive", true)?1:0;
+ $n = post_str("non_cpu_intensive", true)?1:0;
$app->update("non_cpu_intensive=$n");
$n = post_str("beta", true)?1:0;
$app->update("beta=$n");
+ $n = post_str("fraction_done_exact", true)?1:0;
+ $app->update("fraction_done_exact=$n");
+
echo "Application $id updated.
<p>
You must restart the project for this to take effect.
@@ -82,11 +85,13 @@ function show_form() {
"Created",
"weight<br><a href=http://boinc.berkeley.edu/trac/wiki/BackendPrograms#feeder><span class=note>details</span></a>",
"shmem items",
- "homogeneous redundancy type<br><a href=http://boinc.berkeley.edu/trac/wiki/HomogeneousRedundancy><span class=note>details</span></a>",
+ "HR type<br><a href=http://boinc.berkeley.edu/trac/wiki/HomogeneousRedundancy><span class=note>details</span></a>",
"homogeneous app version?<br><a href=http://boinc.berkeley.edu/trac/wiki/HomogeneousAppVersion><span class=note>details</span></a>",
"deprecated?",
"Non-CPU-intensive?",
- "Beta?"
+ "Beta?",
+ "Exact fraction done?",
+ ""
);
$total_weight = BoincApp::sum("weight");
@@ -96,6 +101,7 @@ function show_form() {
}
$apps = BoincApp::enum("");
+ $i = 0;
foreach ($apps as $app) {
// grey-out deprecated versions
$f1=$f2='';
@@ -103,7 +109,8 @@ function show_form() {
$f1 = "<font color='GREY'>";
$f2 = "</font>";
}
- echo "<tr><form action=manage_apps.php method=POST>";
+ echo "<tr class=row$i><form action=manage_apps.php method=POST>";
+ $i = 1-$i;
echo "<input type=hidden name=id value=$app->id>";
echo " <TD align='center'>$f1 $app->id $f2</TD>\n";
@@ -150,6 +157,12 @@ function show_form() {
<input name='beta' type='checkbox' $v></TD>
";
+ $v = '';
+ if ($app->fraction_done_exact) $v = ' CHECKED ';
+ echo " <TD align='center'>
+ <input name='fraction_done_exact' type='checkbox' $v></TD>
+ ";
+
echo "<td><input type=submit name=submit value=Update>";
echo "</tr></form>";
}
diff --git a/html/ops/manage_special_users.php b/html/ops/manage_special_users.php
index cb12448..914bc35 100644
--- a/html/ops/manage_special_users.php
+++ b/html/ops/manage_special_users.php
@@ -21,7 +21,7 @@ require_once('../inc/util_ops.inc');
db_init();
-admin_page_head('Manage special users');
+admin_page_head('Manage user privileges');
start_table("align=\"center\"");
row1("Current special users", '9');
diff --git a/html/ops/manage_user.php b/html/ops/manage_user.php
index a5f0e07..f3951c3 100644
--- a/html/ops/manage_user.php
+++ b/html/ops/manage_user.php
@@ -33,30 +33,24 @@ require_once("../inc/util_ops.inc");
require_once("../inc/profile.inc");
require_once("../project/project.inc");
-db_init();
-
-$is_admin = true;
-$Nbf = sizeof($special_user_bitfield);
-$q = null;
+error_reporting(E_ALL);
+ini_set('display_errors', true);
+ini_set('display_startup_errors', true);
// Delete a user (or at least try to)
//
function delete_user($user){
- global $delete_problem;
-
if (!empty($user->teamid)){
user_quit_team($user);
- #$delete_problem .= "Removed user from team.<br/>";
}
if ($user->has_profile){
mysql_query("DELETE FROM profile WHERE userid = $user->id");
delete_user_pictures($user->id);
mysql_query("UPDATE user SET has_profile=0 WHERE id=$user->id");
- #$delete_problem .= "Deleted profile.<br/>";
}
if ($user->total_credit > 0.0){
- $delete_problem .= "Cannot delete user: User has credit.<br/>";
+ error_page("Cannot delete user: User has credit.");
return false;
}
@@ -67,8 +61,7 @@ function delete_user($user){
$c = mysql_fetch_object($result);
mysql_free_result($result);
if ($c->count) {
- $delete_problem .= "Cannot delete user: User has ". $c->count.
- " Results in the database.<br/>";
+ error_page("Cannot delete user: User has $c->count results in the database.");
}
// Don't delete user if they have posted to the forums
@@ -78,74 +71,18 @@ function delete_user($user){
$c = mysql_fetch_object($result);
mysql_free_result($result);
if ($c->count) {
- $delete_problem .= "Cannot delete user: User has ". $c->count.
- " forum posts.<br/>";
+ error_page("Cannot delete user: User has $c->count forum posts.");
}
- if ($delete_problem) return false;
$q = "DELETE FROM user WHERE id=".$user->id;
$result = mysql_query($q);
- $delete_problem .= "User ".$user->id." deleted.";
- unset($user);
-
-}
-
-$delete_problem="";
-
-// Process user search form
-
-$matches="";
-
-if (isset($_POST['search_submit'])){
- $search_name = post_str('search_text');
- $search_name = BoincDb::escape_string(sanitize_tags($search_name));
-
- if (!empty($search_name)){
- $result = mysql_query("SELECT * FROM user WHERE name='$search_name'");
-
- if (mysql_num_rows($result)==1) {
- $user = mysql_fetch_object($result);
- mysql_free_result($result);
- } else {
- $q = "SELECT * FROM user WHERE name LIKE '%".$search_name."%'";
- $result = mysql_query($q);
- if (mysql_num_rows($result)==1) {
- $user = mysql_fetch_object($result);
- mysql_free_result($result);
- }
- if (mysql_num_rows($result)>1) {
- while ($row = mysql_fetch_object($result)){
- if (!empty($matches)) {
- $matches .= ", ";
- }
- $matches .= $row->name;
- }
- mysql_free_result($result);
- }
- }
- }
-}
-
-
-// Look up the user
-
-$id = get_int("userid", true);
-if (!$id) {
- $id = post_int("userid", true);
-}
-if (!$id) error_page("No ID given");
-$user = lookup_user_id($id);
-if (!$user) error_page("No such user: $id");
-
-// but clear if page was reset (forcing search form)
-
-if (isset($_POST['reset_page'])){
- unset($user);
}
// Process special user settings
-
-if (isset($_POST['special_user']) && $user && $is_admin){
+//
+function handle_special_user($user) {
+ global $special_user_bitfield;
+ $Nbf = sizeof($special_user_bitfield);
$bits="";
for ($i=0; $i<$Nbf; $i++) {
$key = "special_user_$i";
@@ -155,247 +92,230 @@ if (isset($_POST['special_user']) && $user && $is_admin){
$bits .= "0";
}
}
- $q = "UPDATE forum_preferences SET special_user=\"$bits\" WHERE userid=$id";
+ $q = "UPDATE forum_preferences SET special_user=\"$bits\" WHERE userid=$user->id";
mysql_query($q);
}
// Process a suspension:
+//
+function handle_suspend($user) {
+ global $g_logged_in_user;
+ $dt = post_int('suspend_for', true);
+
+ $reason = $_POST['suspend_reason'];
+ if ($dt > 0 && empty($reason)) {
+ error_page("You must supply a reason for a suspension.
+ <p><a href=manage_user.php?userid=$user->id>Try again</a>"
+ );
+ } else {
+ if (is_numeric($dt)) {
+ $t = $dt>0 ? time()+$dt : 0;
+ $q = "UPDATE forum_preferences SET banished_until=$t WHERE userid=$user->id";
+ mysql_query($q);
-if (isset($_POST['suspend_submit']) && !empty($user) && $is_admin) {
- $dt = post_int('suspend_for',true);
-
- if ($is_admin || ($is_mod && $dt < 86400)) {
- $reason = $_POST['suspend_reason'];
- if ($dt > 0 && empty($reason)) {
- error_page("You must supply a reason for a suspension.
- <p><a href=manage_user.php?userid=$user->id>Try again</a>"
- );
- } else {
- if (is_numeric($dt)) {
- $t = time()+$dt;
- $q = "UPDATE forum_preferences SET banished_until=$t WHERE userid=$id";
- mysql_query($q);
-
- // put a timestamp in wiki to trigger re-validation of credentials
+ // put a timestamp in wiki to trigger re-validation of credentials
- if (function_exists('touch_wiki_user')){
- touch_wiki_user($user);
- }
+ if (function_exists('touch_wiki_user')){
+ touch_wiki_user($user);
+ }
- // Send suspension e-mail to user and administrators
+ // Send suspension e-mail to user and administrators
- if ($dt>0) {
- $subject = PROJECT." posting privileges suspended for ". $user->name;
- $body = "
+ if ($dt>0) {
+ $subject = PROJECT." posting privileges suspended for ". $user->name;
+ $body = "
Forum posting privileges for the " .PROJECT. " user \"".$user->name."\"
have been suspended for " .time_diff($dt). " by ".$g_logged_in_user->name.".
The reason given was:
-
- $reason
-
+
+$reason
+
The suspension will end at " .time_str($t)."\n";
- } else {
- $subject = PROJECT." user ". $user->name. " unsuspended";
- $body = "
+ } else {
+ $subject = PROJECT." user ". $user->name. " unsuspended";
+ $body = "
Forum posting privileges for the " .PROJECT. " user \"".$user->name."\"
have been restored by ".$g_logged_in_user->name."\n";
- if ($reason) {
- $body.="The reason given was:\n\n $reason\n";
- }
+ if ($reason) {
+ $body.="The reason given was:\n\n $reason\n";
}
+ }
- send_email($user, $subject, $body);
+ send_email($user, $subject, $body);
- $emails = explode(",", POST_REPORT_EMAILS);
- foreach ($emails as $email) {
- $admin->email_addr = $email;
- send_email($admin, $subject, $body);
- }
+ $emails = explode(",", POST_REPORT_EMAILS);
+ foreach ($emails as $email) {
+ $admin->email_addr = $email;
+ send_email($admin, $subject, $body);
}
}
}
}
+function show_manage_user_form($user) {
+ global $special_user_bitfield;
+ $Nbf = sizeof($special_user_bitfield);
-// Process a delete request. Empty user will trigger search form.
-//
-if (isset($_POST['delete_user']) && !empty($user)) {
- delete_user($user);
-}
-
-
-// Now update from whatever might have been set above
-
-if (!empty($user)) {
- BoincForumPrefs::lookup($user);
-}
-
-// Output:
+ admin_page_head("Management $user->name");
-admin_page_head("User Management: $user->name");
+ if (!defined("POST_REPORT_EMAILS")) {
+ echo "<p><font color='RED'>
+ There is no administrative email address defined for reporting problems
+ or abuse in the forums. Please define POST_REPORT_EMAILS in project.inc
+ </font></p>\n";
+ }
-echo "<h2>User Management</h2>\n";
+ echo "<form name='manage_user' action=manage_user.php method='POST'>
+ <input type='hidden' name='userid' value='". $user->id."'>
+ ";
-if (!defined("POST_REPORT_EMAILS")) {
- echo "<p><font color='RED'>
- There is no addministrative e-mail address defined for reporting problems
-or abuse in the forums. Please define POST_REPORT_EMAILS in project.inc
- </font></p>\n";
-}
+ start_table();
-echo "<form name='manage_user' action=manage_user.php method='POST'>
- <input type='hidden' name='userid' value='". $user->id."'>
-";
-start_table();
+ row1("<b>User: </b> $user->name <div align='right'>
+ <input name=\"delete_user\" type=\"submit\" value=\"Delete user\">
+ </div>"
+ );
-if (empty($user->id)) {
- if (!empty($search_name)) {
- echo "No match found. ";
- if (!empty($matches)) {
- echo " Partial matches are: <blockquote> $matches </blockquote>\n";
- }
- }
- echo " Enter user name:
- <blockquote>
- <input type='text' name='search_text' >
- <input type='submit' name='search_submit' value='Search'>
- </form>
- ";
- admin_page_tail();
- exit();
-}
-
-row1("<b>User: </b> ".$user->name. "<br/>
- Id# ". $user->id
- . "<div align='right'>
- <input name='reset_page' type='submit' value='Reset'>
- <input name='manage_user' type='submit' value='Update'><br>
- <input name=\"delete_user\" type=\"submit\" value=\"Delete user\">
- </div>"
-);
-
-if ($delete_problem) {
- echo "<font color='RED'>$delete_problem</font><br/>\n";
-}
+ show_user_summary_public($user);
+ show_profile_link_ops($user);
+ row2("Email:", "$user->email_addr");
+ project_user_summary($user);
+ end_table();
+ project_user_page_private($user);
-show_user_summary_public($user);
-show_profile_link_ops($user);
-if ($is_admin) {
- row2("E-mail:", "$user->email_addr");
-}
-project_user_summary($user);
-end_table();
-project_user_page_private($user);
-
-echo "</form>\n";
+ echo "</form>\n";
-// Special User status:
+ // Special User status:
-echo "\n\n<P>
- <table width='100%'><tr>
- <td width='50%' valign='TOP'> \n";
+ echo "\n\n<P>
+ <table width='100%'><tr>
+ <td width='50%' valign='TOP'> \n";
-echo "<form name='special_user' action=manage_user.php method=\"POST\">
- <input type='hidden' name='userid' value='".$user->id."'>
-";
+ echo "<form name='special_user' action=manage_user.php method=\"POST\">
+ <input type='hidden' name='userid' value='".$user->id."'>
+ ";
-start_table();
-row1("Special User Status: $user->name", $Nbf );
+ start_table();
+ row1("Special User Status");
-echo "<tr>\n";
-for ($i=0; $i<$Nbf; $i++) {
- $bit = substr($user->prefs->special_user, $i, 1);
- echo "<tr><td><input type='checkbox'' name='special_user_".$i."' value='1'";
- if ($bit == 1) {
- echo " checked='checked'";
+ echo "<tr>\n";
+ for ($i=0; $i<$Nbf; $i++) {
+ $bit = substr($user->prefs->special_user, $i, 1);
+ echo "<tr><td><input type='checkbox'' name='special_user_".$i."' value='1'";
+ if ($bit == 1) {
+ echo " checked='checked'";
+ }
+ echo ">". $special_user_bitfield[$i] ."</td></tr>\n";
}
- echo ">". $special_user_bitfield[$i] ."</td></tr>\n";
-}
-echo "</tr>";
+ echo "</tr>";
-if ($is_admin) {
echo "</tr><td colspan=$Nbf align='RIGHT'>
- <input name='special_user' type='SUBMIT' value='Apply'>
+ <input name='special_user' type='SUBMIT' value='Update'>
</td></tr>
";
-}
-end_table();
-echo "</form>\n";
-
-echo "\n\n</td><td valign='TOP'>\n\n";
+ end_table();
+ echo "</form>\n";
+ echo "\n\n</td><td valign='TOP'>\n\n";
-// Suspended posting privileges
-echo "<form name='banishment' action=manage_user.php method=\"POST\">
- <input type='hidden' name='userid' value='".$user->id."'>
-";
-start_table();
-row1("Suspension: $user->name");
+ // Suspended posting privileges
-if ($user->prefs->banished_until) {
- $dt = $user->prefs->banished_until - time();
- if ($dt > 0) {
- $x = " Suspended until " . time_str($user->prefs->banished_until)
- ."<br/> (Expires in " . time_diff($dt) .")" ;
+ echo "<form name='banishment' action=manage_user.php method=\"POST\">
+ <input type='hidden' name='userid' value='".$user->id."'>
+ ";
+ start_table();
+ row1("Suspension");
+
+ if ($user->prefs->banished_until) {
+ $dt = $user->prefs->banished_until - time();
+ if ($dt > 0) {
+ $x = " Suspended until " . time_str($user->prefs->banished_until)
+ ."<br/> (Expires in " . time_diff($dt) .")" ;
+ } else {
+ $x = " last suspended " . time_str($user->prefs->banished_until);
+ }
+ row1($x);
} else {
- $x = " last suspended " . time_str($user->prefs->banished_until);
+ $dt = 0;
}
- row1($x);
-} else {
- $dt = 0;
-}
-echo "<tr><td>
-Suspend user for:
- <blockquote>
- <input type='radio' name='suspend_for' value='3600'> 1 hour <br/>
- <input type='radio' name='suspend_for' value='7200'> 2 hours <br/>
- <input type='radio' name='suspend_for' value='18000'> 6 hours <br/>
- <input type='radio' name='suspend_for' value='36000'> 12 hours <br/>
- <input type='radio' name='suspend_for' value='86400'> 24 hours <br/>
-";
-if ($is_admin) { // in case we are only a moderator
+ echo "<tr><td>
+ Suspend user for:
+ <blockquote>
+ <input type='radio' name='suspend_for' value='3600'> 1 hour <br/>
+ <input type='radio' name='suspend_for' value='7200'> 2 hours <br/>
+ <input type='radio' name='suspend_for' value='18000'> 6 hours <br/>
+ <input type='radio' name='suspend_for' value='36000'> 12 hours <br/>
+ <input type='radio' name='suspend_for' value='86400'> 24 hours <br/>
+ ";
echo "
<input type='radio' name='suspend_for' value='172800'> 48 hours <br/>
<input type='radio' name='suspend_for' value='",86400*7,"'> 1 week <br/>
<input type='radio' name='suspend_for' value='",86400*14,"'> 2 weeks <br/>
-";
-}
-
+ ";
-if ($dt>0) {
+ if ($dt>0) {
+ echo "
+ <input type='radio' name='suspend_for' value='-1'> <b>unsuspend</b> <br/>";
+ }
echo "
- <input type='radio' name='suspend_for' value='-1'> <b>unsuspend</b> <br/>";
-}
-echo "
- </blockquote>
+ </blockquote>
+
+ ";
+
+ echo "<P>Reason (required):\n";
+ echo "<textarea name='suspend_reason' cols='40' rows='4'></textarea>";
+ echo "<br><font size='-2' >The reason will be sent to both the user
+ and to the project administrators.</font>\n";
-";
-echo "<P>Reason (required):\n";
-echo "<textarea name='suspend_reason' cols='40' rows='4'></textarea>";
-echo "<br><font size='-2' >The reason will be sent to both the user
- and to the project administrators.</font>\n";
+ echo "<p align='RIGHT'><input name='suspend_submit' type='SUBMIT' value='Update'></P>\n";
+ echo " </td></tr>\n";
+ end_table();
+ echo "</form>\n";
+
+ echo "</td></tr> </table>\n";
+
+ admin_page_tail();
+}
+
+get_logged_in_user();
+db_init();
-echo "<p align='RIGHT'><input name='suspend_submit' type='SUBMIT' value='Apply'></P>\n";
-echo " </td></tr>\n";
+$q = null;
-end_table();
-echo "</form>\n";
+$id = get_int("userid", true);
+if (!$id) {
+ $id = post_int("userid", true);
+}
+if (!$id) error_page("No ID given");
+$user = BoincUser::lookup_id($id);
+if (!$user) error_page("No such user: $id");
-echo "</td></tr> </table>\n";
+BoincForumPrefs::lookup($user);
+if (isset($_POST['delete_user'])) {
+ delete_user($user);
+ admin_page_head();
+ echo "User $user->name ($user->id) deleted";
+ admin_page_tail();
+}
-if ($q) {
- echo "<P><font color='grey'>Query: $q </font>";
- }
+if (isset($_POST['special_user'])) {
+ handle_special_user($user);
+ Header("Location: manage_user.php?userid=$user->id");
+}
+if (isset($_POST['suspend_submit'])) {
+ handle_suspend($user);
+ Header("Location: manage_user.php?userid=$user->id");
+}
-admin_page_tail();
+show_manage_user_form($user);
$cvs_version_tracker[]= //Generated automatically - do not edit
"\$Id$";
diff --git a/html/ops/mass_email.php b/html/ops/mass_email.php
index d1a604d..5d50eed 100644
--- a/html/ops/mass_email.php
+++ b/html/ops/mass_email.php
@@ -71,6 +71,10 @@ if ($receiver > 0) {
// lapsed users
$query = "select user.id,user.name,user.email_addr from user left join result on user.id=result.userid where send_email>0 and total_credit>0 and isnull(result.id)";
break;
+ case 6:
+ $userids = post_str('userids');
+ $query = "select * from user where id in ($userids)";
+ break;
default:
// should never happen!
exit_error("Got impossible value of receiver from selection!");
@@ -102,14 +106,12 @@ echo "<p>\n";
start_table();
echo "<tr><td align=right>Send email to: </td><td> ";
echo "
- <select name=\"receiver\">
- <option value='0' selected> PLEASE CHOOSE DESIRED SET OF USERS TO EMAIL
- <option value='1' > All users
- <option value='2' > Unsuccessful users: total_credit = 0, create time > 1 week ago, NO results in DB
- <option value='3' > Successful users: total_credit > 0
- <option value='4' > Currently contributing users: total_credit > 0 and at least one result in DB
- <option value='5' > Lapsed users: total_credit > 0 but NO results in DB
- </select>
+ <input type=radio name=receiver value='1' > All users
+ <br><input type=radio name=receiver value='2' > Unsuccessful users: total_credit = 0, create time > 1 week ago, no jobs in DB
+ <br><input type=radio name=receiver value='3' > Successful users: total_credit > 0
+ <br><input type=radio name=receiver value='4' > Currently contributing users: total_credit > 0 and at least one job in DB
+ <br><input type=radio name=receiver value='5' > Lapsed users: total_credit > 0 but no jobs in DB
+ <br><input type=radio name=receiver value='6' checked> User IDs, comma-separated: <input name=userids>
</td></tr>
<tr>
<td align=\"right\">Email subject</td>
diff --git a/html/ops/mass_email_script.php b/html/ops/mass_email_script.php
index 441e14b..4872c69 100755
--- a/html/ops/mass_email_script.php
+++ b/html/ops/mass_email_script.php
@@ -311,7 +311,7 @@ if (!$USE_PHPMAILER) {
$email_files = read_email_files();
if ($globals->userid) {
- $user = lookup_user_id($globals->userid);
+ $user = BoincUser::lookup_id($globals->userid);
if (!$user) {
echo "no such user\n";
} else {
diff --git a/html/ops/problem_host.php b/html/ops/problem_host.php
index d54bd85..8e48008 100644
--- a/html/ops/problem_host.php
+++ b/html/ops/problem_host.php
@@ -16,23 +16,15 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+// DEPRECATED - the email by this script doesn't tell the
+// volunteer anything specific or useful.
+
require_once("../inc/db.inc");
require_once("../inc/util_ops.inc");
require_once("../inc/email.inc");
-// activate/deactivate script
-if (0) {
- echo "
-This script needs to be activated before it can be run.
-Once you understand what the script does you can change the
-if (1) to if (0) at the top of the file to activate it.
-Be sure to deactivate the script after using it to make sure
-it is not accidentally run.
-";
- exit;
-}
+exit();
-db_init();
function send_problem_email($user, $host) {
global $master_url;
@@ -110,7 +102,7 @@ For further information and assistance with ".PROJECT." go to $master_url";
}
-$hostid = $_GET["hostid"];
+$hostid = get_int("hostid", true);
if (!$hostid) {
admin_page_head("Misconfigured Host");
@@ -122,14 +114,12 @@ if (!$hostid) {
</form>
";
} else {
- $res = mysql_query("select * from host where id='$hostid'");
- $host = mysql_fetch_object($res);
+ $host = BoincHost::lookup_id($hostid);
if (!$host) {
echo "<h2>No host with that ID</h2>
<center>Please <a href=\"problem_host.php\">try again</a></center>";
} else {
- $res = mysql_query("select * from user where id='$host->userid'");
- $user = mysql_fetch_object($res);
+ $user = BoincUser::lookup_id($host->userid);
echo "<a href=\"problem_host.php\">Do another?</a><br><br>";
send_problem_email($user, $host);
echo "Email to ".$user->email_addr." has been sent.<br>";
diff --git a/html/ops/remind.php b/html/ops/remind.php
index e14bf75..2313ede 100755
--- a/html/ops/remind.php
+++ b/html/ops/remind.php
@@ -320,7 +320,7 @@ if (!$USE_PHPMAILER) {
$email_files = read_email_files();
if ($globals->userid) {
- $user = lookup_user_id($globals->userid);
+ $user = BoincUser::lookup_id($globals->userid);
if (!$user) {
echo "No such user: $globals->userid\n";
exit();
diff --git a/html/ops/remove_zombie_hosts.php b/html/ops/remove_zombie_hosts.php
new file mode 100644
index 0000000..b41f627
--- /dev/null
+++ b/html/ops/remove_zombie_hosts.php
@@ -0,0 +1,42 @@
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// delete zombied host records left over after merging computers
+
+require_once("../inc/boinc_db.inc");
+require_once("../inc/util_ops.inc");
+
+$db = BoincDb::get();
+
+if (running_from_web_server()) {
+ admin_page_head("Remove Zombie Hosts");
+}
+
+$retval = $db->do_query("delete h1 from ".$db->db_name.".host as h1 left outer join ".$db->db_name.".result r1 on r1.hostid=h1.id where h1.userid=0 and r1.id is null");
+
+if ($retval) {
+ $n = $db->affected_rows();
+ echo "$n zombied host records were removed.\n";
+} else {
+ echo "database error: ".$db->base_error();
+}
+
+if (running_from_web_server()) {
+ admin_page_tail();
+}
+?>
diff --git a/html/ops/size_census.php b/html/ops/size_census.php
index b3ec3b9..b6c1e16 100755
--- a/html/ops/size_census.php
+++ b/html/ops/size_census.php
@@ -17,11 +17,14 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-// size_census
+// size_census [--all_apps]
// for each multi-size app,
// find the N quantiles of its effective speed,
// and write them to a file.
// See http://boinc.berkeley.edu/trac/wiki/JobSizeMatching
+//
+// --all_apps: compute quantiles for all apps;
+// use this during setup and testing.
error_reporting(E_ALL);
ini_set('display_errors', true);
@@ -34,17 +37,26 @@ function do_app($app) {
// joined to the host
$db = BoincDb::get();
- $dbn = $db->db_name;
- $query = "select et_avg, host.on_frac, host.active_frac " .
- " from $dbn.host_app_version, $dbn.host, $dbn.app_version " .
+ $query = "select et_avg, host.on_frac, host.active_frac, host.gpu_active_frac, app_version.plan_class " .
+ " from DBNAME.host_app_version, DBNAME.host, DBNAME.app_version " .
" where host_app_version.app_version_id = app_version.id " .
- " and app_version.appid = 1 " .
+ " and app_version.appid = $app->id " .
" and et_n > 0 " .
" and host.id = host_app_version.host_id";
$result = $db->do_query($query);
$a = array();
while ($x = mysql_fetch_object($result)) {
- $a[] = (1/$x->et_avg) * $x->on_frac * $x->active_frac;
+ if (is_gpu($x->plan_class)) {
+ $av = $x->on_frac;
+ if ($x->gpu_active_frac) {
+ $av *= $x->gpu_active_frac;
+ } else {
+ $av *= $x->active_frac;
+ }
+ } else {
+ $av = $x->on_frac * $x->active_frac;
+ }
+ $a[] = (1/$x->et_avg) * $av;
}
mysql_free_result($result);
sort($a);
@@ -57,7 +69,12 @@ function do_app($app) {
fclose($f);
}
-$apps = BoincApp::enum("deprecated=0 and n_size_classes>1");
+if ($argc == 2 && $argv[1]=="--all_apps") {
+ $apps = BoincApp::enum("deprecated=0");
+} else {
+ $apps = BoincApp::enum("deprecated=0 and n_size_classes>1");
+}
+
foreach ($apps as $app) {
do_app($app);
}
diff --git a/html/ops/team_export.php b/html/ops/team_export.php
index 2510b8d..8b79af2 100755
--- a/html/ops/team_export.php
+++ b/html/ops/team_export.php
@@ -45,10 +45,21 @@ function escape2($strin) {
}
function escape($strin) {
- return htmlspecialchars($strin);
+ $dom = new DOMDocument('1.0');
+ $element = $dom->createElement('Element');
+ $element->appendChild(
+ $dom->createTextNode($strin)
+ );
+
+ $dom->appendChild($element);
+ $x = $dom->saveXml();
+ $x = substr($x, 31);
+ $x = substr($x, 0, -11);
+ return $x;
}
function handle_team($team, $f) {
+ echo "Team: $team->name\n";
$user = BoincUser::lookup_id($team->userid);
if (!$user) {
echo "no user for team $team->id\n";
diff --git a/html/ops/team_import.php b/html/ops/team_import.php
index e96accd..b3e3863 100755
--- a/html/ops/team_import.php
+++ b/html/ops/team_import.php
@@ -52,17 +52,21 @@ function lookup_team_seti_id($id) {
return null;
}
+function decode($x) {
+ return html_entity_decode($x, ENT_COMPAT, 'UTF-8');
+}
+
function parse_team($f) {
while ($s = fgets($f)) {
if (strstr($s, '</team>')) {
- $t->name = htmlspecialchars_decode($t->name);
- $t->url = htmlspecialchars_decode($t->url);
- $t->name_html = htmlspecialchars_decode($t->name_html);
- $t->description = htmlspecialchars_decode($t->description);
- $t->user_name = htmlspecialchars_decode($t->user_name);
- $t->user_country = htmlspecialchars_decode($t->user_country);
- $t->user_postal_code = htmlspecialchars_decode($t->user_postal_code);
- $t->user_url = htmlspecialchars_decode($t->user_url);
+ $t->name = decode($t->name);
+ $t->url = decode($t->url);
+ $t->name_html = decode($t->name_html);
+ $t->description = decode($t->description);
+ $t->user_name = decode($t->user_name);
+ $t->user_country = decode($t->user_country);
+ $t->user_postal_code = decode($t->user_postal_code);
+ $t->user_url = decode($t->user_url);
return $t;
}
else if (strstr($s, '<name>')) $t->name = parse_element($s, '<name>');
diff --git a/html/ops/update_translations.php b/html/ops/update_translations.php
index 47bc304..1760cb1 100755
--- a/html/ops/update_translations.php
+++ b/html/ops/update_translations.php
@@ -34,11 +34,15 @@ if ($argc >= 3 && $argv[1] == '-d') {
// process the generic BOINC web site strings
//
-buildLanguages($lang_language_dir, $lang_translations_dir, $lang_compiled_dir);
+build_translation_array_files(
+ $lang_language_dir, $lang_translations_dir, $lang_compiled_dir
+);
// process the project-specific strings
//
-buildLanguages($lang_language_dir, $lang_prj_translations_dir, $lang_compiled_dir);
+build_translation_array_files(
+ $lang_language_dir, $lang_prj_translations_dir, $lang_compiled_dir
+);
echo "update_translations finished\n";
diff --git a/html/project.sample/project.inc b/html/project.sample/project.inc
index a578662..badf82f 100644
--- a/html/project.sample/project.inc
+++ b/html/project.sample/project.inc
@@ -29,6 +29,33 @@ define("UOTD_ADMIN_EMAIL", "admin@$master_url");
// offensive forum posts.
define("POST_REPORT_EMAILS", "moderator1@$master_url|moderator2@$master_url");
+// If you use PHPMailer, uncomment the following
+// and complete the function definition based on your SMTP server
+// (not all fields may be needed)
+//
+if (0) {
+function make_php_mailer() {
+ $mail = new PHPMailer();
+ $mail->IsSMTP();
+ //$mail->Mailer = 'smtp';
+ $mail->SMTPAuth = true;
+ $mail->SMTPSecure = "tls";
+ $mail->Host = "smtp.gmail.com";
+ $mail->Port = 587;
+ $mail->Username = "john.doe at gmail.com";
+ $mail->Password = "xxx";
+ // Google's application-specific password,
+ // if you are using the 2-Step Verification: 16 characters, no spaces.
+ // OR: Put here the regular Gmail password if you are not using the
+ // 2-Step Verification with your Gmail account.
+ // See https://support.google.com/accounts/answer/185833?hl=en";
+ $mail->SetFrom('admin at boincproject.com', 'John Doe');
+ $mail->AddReplyTo("admin at boincproject.com", "John Doe");
+ $mail->From = "admin at boincproject.com";
+ return $mail;
+}
+}
+
function project_banner($title, $prefix) {
// Put your project title and logo here
// If you include any links, prepend URL with $prefix
diff --git a/html/user/account_finish.php b/html/user/account_finish.php
index 12c6b4f..3a0acd3 100644
--- a/html/user/account_finish.php
+++ b/html/user/account_finish.php
@@ -27,7 +27,7 @@ require_once('../inc/countries.inc');
check_get_args(array("auth"));
$auth = get_str("auth");
-$user = lookup_user_auth($auth);
+$user = BoincUser::lookup_auth($auth);
if (!$user) {
error_page("no such account");
}
diff --git a/html/user/add_venue.php b/html/user/add_venue.php
index 9a9bdcd..2783c72 100644
--- a/html/user/add_venue.php
+++ b/html/user/add_venue.php
@@ -16,13 +16,9 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/prefs.inc");
-db_init();
-
$user = get_logged_in_user();
check_tokens($user->authenticator);
diff --git a/html/user/am_get_info.php b/html/user/am_get_info.php
index a73c83b..54f5b30 100644
--- a/html/user/am_get_info.php
+++ b/html/user/am_get_info.php
@@ -16,7 +16,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
+require_once("../inc/boinc_db.inc");
require_once("../inc/xml.inc");
xml_header();
@@ -27,9 +27,9 @@ if ($retval) xml_error($retval);
check_get_args(array("account_key"));
$auth = get_str("account_key");
-$user = lookup_user_auth($auth);
+$user = BoincUser::lookup_auth($auth);
if (!$user) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
$name = urlencode($user->name);
@@ -60,7 +60,7 @@ $user->project_prefs
<venue>$user->venue</venue>";
if ($user->teamid) {
- $team = lookup_team($user->teamid);
+ $team = BoincTeam::lookup_id_nocache($user->teamid);
if ($team->userid == $user->id) {
$ret = $ret . "<teamfounder/>\n";
}
diff --git a/html/user/am_set_host_info.php b/html/user/am_set_host_info.php
index 0a224af..b05d4a6 100644
--- a/html/user/am_set_host_info.php
+++ b/html/user/am_set_host_info.php
@@ -29,14 +29,14 @@ if (!$db) xml_error($retval);
$auth = BoincDb::escape_string(get_str("account_key"));
$user = BoincUser::lookup("authenticator='$auth'");
if (!$user) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
$hostid = get_int("hostid");
$host = BoincHost::lookup_id($hostid);
if (!$host || $host->userid != $user->id) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
$venue = BoincDb::escape_string(get_str("venue"));
diff --git a/html/user/am_set_info.php b/html/user/am_set_info.php
index d38c99d..87d1b9f 100644
--- a/html/user/am_set_info.php
+++ b/html/user/am_set_info.php
@@ -82,9 +82,9 @@ if ($auth) {
$password_hash = get_str("password_hash", true);
}
-$user = lookup_user_auth($auth);
+$user = BoincUser::lookup_auth($auth);
if (!$user) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
$name = BoincDb::escape_string($name);
@@ -112,10 +112,10 @@ $show_hosts = BoincDb::escape_string($show_hosts);
$venue = BoincDb::escape_string($venue);
if ($email_addr) {
if (!is_valid_email_addr($email_addr)) {
- xml_error(-205, "Invalid email address");
+ xml_error(ERR_BAD_EMAIL_ADDR, "Invalid email address");
}
if (is_banned_email_addr($email_addr)) {
- xml_error(-205, "Invalid email address");
+ xml_error(ERR_BAD_EMAIL_ADDR, "Invalid email address");
}
$email_addr = strtolower(BoincDb::escape_string($email_addr));
}
@@ -143,7 +143,7 @@ if ($project_prefs) {
$project_prefs = str_replace("\\r\\n", "\n", $project_prefs);
$x = bad_xml($project_prefs, "<project_preferences>", "</project_preferences>");
if ($x) {
- xml_error(-112, "Invalid project preferences: $x");
+ xml_error(ERR_XML_PARSE, "Invalid project preferences: $x");
}
$query .= " project_prefs='$project_prefs', ";
}
@@ -161,7 +161,7 @@ if (!is_null($teamid)) {
if ($teamid==0) {
user_quit_team($user);
} else {
- $team = lookup_team($teamid);
+ $team = BoincTeam::lookup_id_nocache($teamid);
if ($team && $team->joinable) {
user_join_team($team, $user);
}
diff --git a/html/user/apps.php b/html/user/apps.php
index 868d4fc..02ab0ba 100644
--- a/html/user/apps.php
+++ b/html/user/apps.php
@@ -30,13 +30,14 @@ if ($xml) {
echo "<app_versions>\n";
} else {
page_head(tra("Applications"));
- echo tra("%1 currently has the following applications. When you participate in %1, work for one or more of these applications will be assigned to your computer. The current version of the application will be downloaded to your computer. This happens automatically; you don't have to do anything.", PROJECT)."<br><br>
+ echo tra("%1 currently has the following applications. When you participate in %1, tasks for one or more of these applications will be assigned to your computer. The current version of the application will be downloaded to your computer. This happens automatically; you don't have to do anything.", PROJECT)."<br><br>
";
start_table();
}
$apps = BoincApp::enum("deprecated=0");
+$total_gf = 0;
foreach ($apps as $app) {
if ($xml) {
echo "<application>\n";
@@ -49,7 +50,8 @@ foreach ($apps as $app) {
<tr>
<th>".tra("Platform")."</th>
<th>".tra("Version")."</th>
- <th>".tra("Installation time")."</th>
+ <th>".tra("Created")."</th>
+ <th>".tra("Average computing")."</th>
</tr>
";
}
@@ -71,10 +73,14 @@ foreach ($apps as $app) {
if ($av->plan_class) {
$version_num_f .= " ($av->plan_class)";
}
+ $gf = $av->expavg_credit/200;
+ $total_gf += $gf;
+ $gf = number_format($gf, 0);
echo "<tr>
<td>$platform->user_friendly_name</td>
<td>$version_num_f</td>
<td>$create_time_f</td>
+ <td align=right>$gf GigaFLOPS</td>
</tr>
";
}
@@ -89,6 +95,8 @@ if ($xml) {
echo "</app_versions>\n";
} else {
end_table();
+ $x = number_format($total_gf, 0);
+ echo "<p>Total average computing: $x GigaFLOPS";
page_tail();
}
?>
diff --git a/html/user/cert_team.php b/html/user/cert_team.php
index 1dab87c..e5fea44 100644
--- a/html/user/cert_team.php
+++ b/html/user/cert_team.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -19,6 +19,8 @@
require_once("../inc/util.inc");
require_once("../inc/cert.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("border"));
$user = get_logged_in_user();
diff --git a/html/user/cpu_list.php b/html/user/cpu_list.php
new file mode 100644
index 0000000..3a0c229
--- /dev/null
+++ b/html/user/cpu_list.php
@@ -0,0 +1,122 @@
+<?php
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+ini_set("memory_limit", "2048M");
+
+require_once("../inc/boinc_db.inc");
+require_once("../inc/util.inc");
+require_once("../inc/cache.inc");
+
+define("MIN_CREDIT", 100);
+define("MIN_COUNT", 10);
+
+function compare($a, $b) {
+ if ($a->p_fpops < $b->p_fpops) return 1;
+ if ($a->p_fpops > $b->p_fpops) return -1;
+ return 0;
+}
+
+function get_cpu_list() {
+ $models = array();
+ $hosts = BoincHost::enum("expavg_credit >= ".MIN_CREDIT);
+ foreach($hosts as $host) {
+ $x = new StdClass;
+ $x->p_ncpus = $host->p_ncpus;
+ $x->p_fpops = $host->p_fpops;
+ if (!array_key_exists($host->p_model, $models)) {
+ $models[$host->p_model] = array();
+ }
+ $models[$host->p_model][] = $x;
+ }
+
+ // for each model, find the median FLOPS
+
+ $m2 = array();
+ foreach ($models as $model=>$list) {
+ $n = sizeof($list);
+ if ($n < MIN_COUNT) continue;
+ uasort($list, 'compare');
+ $m = (int)($n/2);
+ $total_cores = 0;
+ foreach ($list as $l) {
+ $total_cores += $l->p_ncpus;
+ }
+ $x = $list[$m]->p_fpops;
+ $y = new StdClass;
+ $y->model = $model;
+ $y->p_fpops = $x;
+ $y->mean_ncores = $total_cores/$n;
+ $y->nhosts = $n;
+ $m2[] = $y;
+ //echo "$model: $x GFLOPS ($n samples)\n";
+ }
+
+ uasort($m2, 'compare');
+ return $m2;
+ foreach ($m2 as $x) {
+ $g = $x->p_fpops/1e9;
+ echo "$x->model: $g gflops $x->mean_ncores cores $x->nhosts hosts \n";
+ }
+}
+
+function show_cpu_list($data) {
+ page_head("CPU performance");
+ echo "
+ This table shows peak CPU speed
+ (based on Whetstone benchmarks)
+ of computers participating in this project.
+ <p>
+ ";
+ start_table();
+ row_heading_array(array("CPU model", "Number of computers", "Avg. cores/computer", "GFLOPS/core", "GFLOPs/computer"));
+ $i = 0;
+ $total_nhosts = 0;
+ $total_gflops = 0;
+ foreach ($data as $d) {
+ row_array(
+ array(
+ $d->model, $d->nhosts,
+ number_format($d->mean_ncores, 2),
+ number_format($d->p_fpops/1e9, 2),
+ number_format($d->mean_ncores*$d->p_fpops/1e9, 2)
+ ),
+ "row$i"
+ );
+ $total_nhosts += $d->nhosts;
+ $total_gflops += $d->nhosts*$d->mean_ncores*$d->p_fpops/1e9;
+ $i = 1-$i;
+ }
+ row_array(
+ array("Total", number_format($total_nhosts, 0). " computers", "", "", number_format($total_gflops/1e3, 2)." TeraFLOPS"),
+ "row$i"
+ );
+ end_table();
+ page_tail();
+}
+
+$d = get_cached_data(86400);
+if ($d) {
+ $data = unserialize($d);
+} else {
+ $data = get_cpu_list();
+ set_cached_data(86400, serialize($data));
+}
+
+show_cpu_list($data);
+
+?>
diff --git a/html/user/create_account.php b/html/user/create_account.php
index 20fb690..cab335f 100644
--- a/html/user/create_account.php
+++ b/html/user/create_account.php
@@ -18,7 +18,7 @@
// RPC handler for account creation
-require_once("../inc/db.inc");
+require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/email.inc");
require_once("../inc/xml.inc");
@@ -32,13 +32,16 @@ if ($retval) xml_error($retval);
$config = get_config();
if (parse_bool($config, "disable_account_creation")) {
- xml_error(-208);
+ xml_error(ERR_ACCT_CREATION_DISABLED);
+}
+if (parse_bool($config, "disable_account_creation_rpc")) {
+ xml_error(ERR_ACCT_CREATION_DISABLED);
}
if(defined('INVITE_CODES')) {
$invite_code = get_str("invite_code");
if (!preg_match(INVITE_CODES, $invite_code)) {
- xml_error(-209);
+ xml_error(ERR_ATTACH_FAIL_INIT);
}
}
@@ -49,32 +52,32 @@ $user_name = get_str("user_name");
$team_name = get_str("team_name", true);
if (!is_valid_user_name($user_name, $reason)) {
- xml_error(-188, $reason);
+ xml_error(ERR_BAD_USER_NAME, $reason);
}
if (!is_valid_email_addr($email_addr)) {
- xml_error(-205);
+ xml_error(ERR_BAD_EMAIL_ADDR);
}
if (is_banned_email_addr($email_addr)) {
- xml_error(-205);
+ xml_error(ERR_BAD_EMAIL_ADDR);
}
if (strlen($passwd_hash) != 32) {
xml_error(-1, "password hash length not 32");
}
-$user = lookup_user_email_addr($email_addr);
+$user = BoincUser::lookup_email_addr($email_addr);
if ($user) {
if ($user->passwd_hash != $passwd_hash) {
- xml_error(-137);
+ xml_error(ERR_DB_NOT_UNIQUE);
} else {
$authenticator = $user->authenticator;
}
} else {
$user = make_user($email_addr, $user_name, $passwd_hash, 'International');
if (!$user) {
- xml_error(-137);
+ xml_error(ERR_DB_NOT_UNIQUE);
}
if(defined('INVITE_CODES')) {
diff --git a/html/user/create_account_action.php b/html/user/create_account_action.php
index b1bc7f2..86a75f2 100644
--- a/html/user/create_account_action.php
+++ b/html/user/create_account_action.php
@@ -35,33 +35,26 @@ $config = get_config();
if (parse_bool($config, "disable_account_creation")
|| parse_bool($config, "no_web_account_creation")
) {
- page_head(tra("Account creation is disabled"));
- echo "
- <h3>".tra("Account creation is disabled")."</h3>
- ".tra("Sorry, this project has disabled the creation of new accounts.
-Please try again later.")."
- ";
- exit();
+ error_page("Account creation is disabled");
}
$privatekey = parse_config($config, "<recaptcha_private_key>");
- if ($privatekey) {
- $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"],
- $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]
- );
- if (!$resp->is_valid) {
- echo tra("Your reCAPTCHA response was not correct. Please try again.");
- return;
- }
- }
+if ($privatekey) {
+ $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"],
+ $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]
+ );
+ if (!$resp->is_valid) {
+ show_error(tra("Your reCAPTCHA response was not correct. Please try again."));
+ }
+}
// see whether the new account should be pre-enrolled in a team,
// and initialized with its founder's project prefs
//
$teamid = post_int("teamid", true);
if ($teamid) {
- $team = lookup_team($teamid);
- $clone_user = lookup_user_id($team->userid);
+ $team = BoincTeam::lookup_id($teamid);
+ $clone_user = BoincUser::lookup_id($team->userid);
if (!$clone_user) {
error_page("User $userid not found");
}
@@ -90,7 +83,7 @@ $new_email_addr = strtolower(post_str("new_email_addr"));
if (!is_valid_email_addr($new_email_addr)) {
show_error(tra("Invalid email address: you must enter a valid address of the form name at domain"));
}
-$user = lookup_user_email_addr($new_email_addr);
+$user = BoincUser::lookup_email_addr($new_email_addr);
if ($user) {
show_error(tra("There's already an account with that email address."));
}
diff --git a/html/user/create_account_form.php b/html/user/create_account_form.php
index c610703..c4d0b8c 100644
--- a/html/user/create_account_form.php
+++ b/html/user/create_account_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,7 +16,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once('../inc/db.inc');
+require_once('../inc/boinc_db.inc');
require_once('../inc/util.inc');
require_once('../inc/countries.inc');
require_once('../inc/translation.inc');
@@ -28,20 +28,18 @@ $next_url = sanitize_local_url(get_str('next_url', true));
redirect_to_secure_url("create_account_form.php?next_url=$next_url");
-page_head(tra("Create an account"), null, null, null, IE_COMPAT_MODE);
-
$config = get_config();
if (parse_bool($config, "disable_account_creation")) {
- echo "
- <h1>".tra("Account creation is disabled")."</h1>
- <p>".tra("Account creation is currently disabled. Please try again later.")."</p>
- ";
- page_tail();
- exit();
+ error_page("This project is not accepting new accounts");
+}
+
+if (parse_bool($config, "no_web_account_creation")) {
+ error_page("This project has disabled Web account creation");
}
-$nwac = parse_bool($config, "no_web_account_creation");
-if (!$nwac && !no_computing()) {
+page_head(tra("Create an account"), null, null, null, IE_COMPAT_MODE);
+
+if (!no_computing()) {
echo "<p>
<b>".tra("NOTE: If you use the BOINC Manager, don't use this form. Just run BOINC, select Add Project, and enter an email address and password.")."</b></p>
";
@@ -52,10 +50,11 @@ echo "
<form action=\"create_account_action.php\" method=\"post\">
<input type=hidden name=next_url value=\"$next_url\">
";
+
$teamid = get_int("teamid", true);
if ($teamid) {
- $team = lookup_team($teamid);
- $user = lookup_user_id($team->userid);
+ $team = BoincTeam::lookup_id($teamid);
+ $user = BoincUser::lookup_id($team->userid);
if (!$user) {
echo "No such user";
} else {
@@ -106,13 +105,13 @@ row2(
"<input type=\"text\" name=\"postal_code\" size=\"20\">"
);
-// Check if we need reCaptcha for making more safe the creation of accounts
+// Check if we're reCaptcha to prevent spam accounts
+//
$publickey = parse_config($config, "<recaptcha_public_key>");
-
if ($publickey) {
row2(
tra("Please enter the words shown in the image"),
- recaptcha_get_html($publickey)
+ recaptcha_get_html($publickey, null, true)
);
}
diff --git a/html/user/create_profile.php b/html/user/create_profile.php
index 8f8d37e..85a569b 100644
--- a/html/user/create_profile.php
+++ b/html/user/create_profile.php
@@ -21,6 +21,8 @@
require_once("../inc/profile.inc");
require_once("../inc/akismet.inc");
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
+
check_get_args(array());
// output a select form item with the given name,
diff --git a/html/user/create_team.php b/html/user/create_team.php
index fee560f..99856f3 100644
--- a/html/user/create_team.php
+++ b/html/user/create_team.php
@@ -21,14 +21,16 @@ require_once("../inc/xml.inc");
require_once("../inc/team.inc");
require_once("../inc/team_types.inc");
+if (DISABLE_TEAMS) xml_error(-1, "Teams are disabled");
+
xml_header();
$retval = db_init_xml();
if ($retval) xml_error($retval);
$auth = get_str("account_key");
-$user = lookup_user_auth($auth);
+$user = BoincUser::lookup_auth($auth);
if (!$user) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
$name = $_GET["name"];
@@ -60,7 +62,7 @@ if ($new_team) {
</create_team_reply>
";
} else {
- xml_error(-137, "could not create team");
+ xml_error(ERR_DB_NOT_UNIQUE, "could not create team");
}
?>
diff --git a/html/user/delete_profile.php b/html/user/delete_profile.php
index 233a6a4..59a69d2 100644
--- a/html/user/delete_profile.php
+++ b/html/user/delete_profile.php
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/profile.inc");
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
+
$user = get_logged_in_user();
$cmd = get_str("cmd", true);
diff --git a/html/user/edit_email_action.php b/html/user/edit_email_action.php
index 784951b..26304ba 100644
--- a/html/user/edit_email_action.php
+++ b/html/user/edit_email_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -37,7 +37,7 @@ if (!is_valid_email_addr($email_addr)) {
} else if ($email_addr == $user->email_addr) {
echo tra("New email address is same as existing address. Nothing is changed.");
} else {
- $existing = lookup_user_email_addr($email_addr);
+ $existing = BoincUser::lookup_email_addr($email_addr);
if ($existing) {
echo tra("There's already an account with that email address");
} else {
diff --git a/html/user/edit_email_form.php b/html/user/edit_email_form.php
index 140f1b3..6ac70ed 100644
--- a/html/user/edit_email_form.php
+++ b/html/user/edit_email_form.php
@@ -16,14 +16,12 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/email.inc");
check_get_args(array());
redirect_to_secure_url("edit_email_form.php");
-db_init();
$user = get_logged_in_user();
page_head(tra("Change email address"));
diff --git a/html/user/edit_forum_preferences_action.php b/html/user/edit_forum_preferences_action.php
index 9e6c394..7b5647b 100644
--- a/html/user/edit_forum_preferences_action.php
+++ b/html/user/edit_forum_preferences_action.php
@@ -21,7 +21,7 @@ require_once("../inc/forum.inc");
require_once("../inc/image.inc"); // Avatar scaling
if (post_str("account_key", true) != null) {
- $user = lookup_user_auth(post_str("account_key"));
+ $user = BoincUser::lookup_auth(post_str("account_key"));
$rpc = true;
} else {
$user = get_logged_in_user();
@@ -59,6 +59,13 @@ if (post_str("action", true)=="reset"){
exit;
}
+$pmn = post_int("pm_notification");
+if ($pmn != $user->prefs->pm_notification) {
+ $user->prefs->update("pm_notification=$pmn");
+}
+
+if (!DISABLE_FORUMS) {
+
$avatar_type = post_int("avatar_select");
$newfile=IMAGE_PATH.$user->id."_avatar.jpg";
@@ -108,7 +115,6 @@ $highlight_special = ($_POST["forum_highlight_special"]!="")?1:0;
$jump_to_unread = ($_POST["forum_jump_to_unread"]!="")?1:0;
$ignore_sticky_posts = ($_POST["forum_ignore_sticky_posts"]!="")?1:0;
$no_signature_by_default = ($_POST["signature_by_default"]!="")?0:1;
-$pm_notification = post_int("pm_notification");
$signature = post_str("signature", true);
if (strlen($signature)>250) {
error_page(tra("Your signature was too long, please keep it less than 250 characters."));
@@ -120,8 +126,9 @@ if ($display_wrap_postcount<1) $display_wrap_postcount=1;
$signature = BoincDb::escape_string($signature);
-$user->prefs->update("images_as_links=$images_as_links, link_popup=$link_popup, hide_avatars=$hide_avatars, hide_signatures=$hide_signatures, highlight_special=$highlight_special, jump_to_unread=$jump_to_unread, ignore_sticky_posts=$ignore_sticky_posts, no_signature_by_default=$no_signature_by_default, pm_notification=$pm_notification, avatar='$avatar_url', signature='$signature', forum_sorting=$forum_sort, thread_sorting=$thread_sort, display_wrap_postcount=$display_wrap_postcount");
+$user->prefs->update("images_as_links=$images_as_links, link_popup=$link_popup, hide_avatars=$hide_avatars, hide_signatures=$hide_signatures, highlight_special=$highlight_special, jump_to_unread=$jump_to_unread, ignore_sticky_posts=$ignore_sticky_posts, no_signature_by_default=$no_signature_by_default, avatar='$avatar_url', signature='$signature', forum_sorting=$forum_sort, thread_sorting=$thread_sort, display_wrap_postcount=$display_wrap_postcount");
+} // DISABLE_FORUMS
$add_user_to_filter = ($_POST["add_user_to_filter"]!="");
if ($add_user_to_filter){
diff --git a/html/user/edit_forum_preferences_form.php b/html/user/edit_forum_preferences_form.php
index ce07917..4936eef 100644
--- a/html/user/edit_forum_preferences_form.php
+++ b/html/user/edit_forum_preferences_form.php
@@ -60,6 +60,7 @@ row2(
"
);
+if (!DISABLE_FORUMS) {
// ------------ Forum identity -----------
$select_0 = $select_1 = $select_2 = "";
@@ -142,6 +143,7 @@ row2(tra("How to sort"),
<input type=\"checkbox\" name=\"forum_ignore_sticky_posts\" ".$forum_ignore_sticky_posts.">".tra("Don't move sticky posts to top")."<br>
"
);
+} // DISABLE_FORUMS
// ------------ Message filtering -----------
diff --git a/html/user/edit_passwd_action.php b/html/user/edit_passwd_action.php
index 51ec764..79a24a4 100644
--- a/html/user/edit_passwd_action.php
+++ b/html/user/edit_passwd_action.php
@@ -45,12 +45,12 @@ if (strlen($passwd)<$min_passwd_length) {
error_page(tra("New password is too short: minimum password length is %1 characters.", $min_passwd_length));
}
if ($auth) {
- $user = lookup_user_auth($auth);
+ $user = BoincUser::lookup_auth($auth);
if (!$user) {
error_page(tra("Invalid account key"));
}
} else {
- $user = lookup_user_email_addr($email_addr);
+ $user = BoincUser::lookup_email_addr($email_addr);
if (!$user) {
error_page(tra("No account with that email address was found"));
}
diff --git a/html/user/edit_passwd_form.php b/html/user/edit_passwd_form.php
index f576bb3..bf56e62 100644
--- a/html/user/edit_passwd_form.php
+++ b/html/user/edit_passwd_form.php
@@ -16,13 +16,10 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
check_get_args(array());
-db_init();
-
$user = get_logged_in_user(false);
page_head(tra("Change password"));
diff --git a/html/user/edit_user_info_form.php b/html/user/edit_user_info_form.php
index 63f10ee..81aaf89 100644
--- a/html/user/edit_user_info_form.php
+++ b/html/user/edit_user_info_form.php
@@ -16,13 +16,11 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/countries.inc");
check_get_args(array("tnow", "ttok"));
-db_init();
$user = get_logged_in_user();
check_tokens($user->authenticator);
diff --git a/html/user/ffmail_form.php b/html/user/ffmail_form.php
index 191f53f..0bf79e8 100644
--- a/html/user/ffmail_form.php
+++ b/html/user/ffmail_form.php
@@ -24,11 +24,10 @@ require_once("../inc/util.inc");
check_get_args(array());
-db_init();
$user = get_logged_in_user();
if (!@file_get_contents('../ops/ffmail/subject')) {
- error_page(tra("This project hasn\'t created an email message - please notify its administrators"));
+ error_page(tra("This project hasn't created an email message - please notify its administrators"));
}
page_head(tra("Tell your friends about %1", PROJECT));
diff --git a/html/user/forum_banishment_vote.php b/html/user/forum_banishment_vote.php
index 2ef252f..d28b439 100644
--- a/html/user/forum_banishment_vote.php
+++ b/html/user/forum_banishment_vote.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once('../inc/util.inc');
require_once('../inc/forum_db.inc');
require_once('../inc/forum_banishment_vote.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("action", "userid"));
$config = get_config();
diff --git a/html/user/forum_banishment_vote_action.php b/html/user/forum_banishment_vote_action.php
index e4eedee..ec6d51e 100644
--- a/html/user/forum_banishment_vote_action.php
+++ b/html/user/forum_banishment_vote_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@ require_once("../inc/util.inc");
require_once("../inc/forum_db.inc");
require_once("../inc/forum_banishment_vote.inc");
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("action", "userid", "tnow", "ttok"));
$config = get_config();
diff --git a/html/user/forum_forum.php b/html/user/forum_forum.php
index 8de5c86..e6519d6 100644
--- a/html/user/forum_forum.php
+++ b/html/user/forum_forum.php
@@ -33,6 +33,11 @@ if (!$start) $start = 0;
$forum = BoincForum::lookup_id($id);
if (!$forum) error_page("forum ID not found");
$user = get_logged_in_user(false);
+BoincForumPrefs::lookup($user);
+
+if (DISABLE_FORUMS && !is_admin($user)) {
+ error_page("Forums are disabled");
+}
if (!is_forum_visible_to_user($forum, $user)) {
if ($user) {
@@ -41,8 +46,6 @@ if (!is_forum_visible_to_user($forum, $user)) {
error_page(tra("Not visible to you"));
}
-BoincForumPrefs::lookup($user);
-
if (!$sort_style) {
// get the sort style either from the logged in user or a cookie
if ($user){
diff --git a/html/user/forum_get_data.php b/html/user/forum_get_data.php
index c4b57ac..36e9b72 100644
--- a/html/user/forum_get_data.php
+++ b/html/user/forum_get_data.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -22,18 +22,22 @@ require_once("../inc/xml.inc");
xml_header();
+if (DISABLE_FORUMS) {
+ xml_error(-1, "Forums are disabled");
+}
+
$retval = db_init_xml();
if ($retval) xml_error($retval);
$method = get_str("method", true);
if ($method != "user_posts" && $method != "user_threads") {
- xml_error(-210);
+ xml_error(-1);
}
$userid = get_int("userid", true);
-$user = lookup_user_id($userid);
+$user = BoincUser::lookup_id($userid);
if (!$user) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
if ($method == "user_posts") {
diff --git a/html/user/forum_help_desk.php b/html/user/forum_help_desk.php
index 5264065..4a652b8 100644
--- a/html/user/forum_help_desk.php
+++ b/html/user/forum_help_desk.php
@@ -20,6 +20,8 @@ require_once('../inc/forum.inc');
require_once('../inc/util.inc');
require_once('../inc/time.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array());
$user = get_logged_in_user(false);
diff --git a/html/user/forum_index.php b/html/user/forum_index.php
index b139270..3fd0f74 100644
--- a/html/user/forum_index.php
+++ b/html/user/forum_index.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -26,6 +26,11 @@ require_once('../inc/time.inc');
check_get_args(array("read", "return", "tnow", "ttok"));
$user = get_logged_in_user(false);
+BoincForumPrefs::lookup($user);
+
+if (DISABLE_FORUMS && !is_admin($user)) {
+ error_page("Forums are disabled");
+}
// Process request to mark all posts as read
//
diff --git a/html/user/forum_moderate_post.php b/html/user/forum_moderate_post.php
index e868533..ab55c20 100644
--- a/html/user/forum_moderate_post.php
+++ b/html/user/forum_moderate_post.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -18,11 +18,14 @@
// The form where a moderator decides what he is going to do to a post.
-// Submits informaiton to forum_moderate_post_action.php for actual action
+// Submits information to forum_moderate_post_action.php for actual action
// to be done.
+require_once('../inc/util.inc');
require_once('../inc/forum.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("id", "action", "userid", "tnow", "ttok"));
$logged_in_user = get_logged_in_user();
@@ -46,6 +49,7 @@ echo "<form action=\"forum_moderate_post_action.php?id=".$post->id."\" method=\"
echo form_tokens($logged_in_user->authenticator);
start_table();
+$get_reason = true;
if (get_str('action')=="hide") {
//display input that selects reason
echo "<input type=hidden name=action value=hide>";
@@ -89,17 +93,26 @@ if (get_str('action')=="hide") {
echo "<input type=\"hidden\" name=\"id\" value=\"".$postid."\">\n";
echo "<input type=\"hidden\" name=\"userid\" value=\"".$userid."\">\n";
echo "<input type=\"hidden\" name=\"confirmed\" value=\"yes\">\n";
+} elseif (get_str('action')=="delete") {
+ echo "<input type=hidden name=action value=delete>";
+ row2(
+ "Are you sure want to delete this post? This cannot be undone.",
+ "<input type=\"submit\" name=\"submit\" value=\"".tra("OK")."\">"
+ );
+ $get_reason = false;
} else {
error_page("Unknown action");
}
-row2(tra("Optional explanation %1 This is included in email to user.%2", "<br><span class=note>", "</span>"),
- "<textarea name=\"reason\" rows=\"10\" cols=\"80\"></textarea>");
-
-row2(
- "",
- "<input type=\"submit\" name=\"submit\" value=\"".tra("OK")."\">"
-);
+if ($get_reason) {
+ row2(tra("Optional explanation %1 This is included in email to user.%2", "<br><span class=note>", "</span>"),
+ "<textarea name=\"reason\" rows=\"10\" cols=\"80\"></textarea>"
+ );
+ row2(
+ "",
+ "<input type=\"submit\" name=\"submit\" value=\"".tra("OK")."\">"
+ );
+}
end_table();
diff --git a/html/user/forum_moderate_post_action.php b/html/user/forum_moderate_post_action.php
index 4d71074..a93950d 100644
--- a/html/user/forum_moderate_post_action.php
+++ b/html/user/forum_moderate_post_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,9 +16,12 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+require_once("../inc/util.inc");
require_once("../inc/forum.inc");
require_once("../inc/forum_email.inc");
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("id", "action", "tnow", "ttok"));
function mod_comment() {
@@ -76,6 +79,23 @@ if ($action=="hide"){
} elseif ($action=="unhide"){
$result = unhide_post($post, $thread, $forum);
$action_name = "unhidden";
+} elseif ($action=="delete"){
+ $result = delete_post($post, $thread, $forum);
+ if (!$result) error_page("Can't delete post");
+ page_head("Post deleted");
+ if (BoincThread::lookup_id($thread->id)) {
+ echo "Post successfully deleted.
+ <p>
+ <a href=forum_thread.php?id=$thread->id>Return to thread</a>
+ ";
+ } else {
+ echo "Post and thread successfully deleted.
+ <p>
+ <a href=forum_forum.php?id=$forum->id>Return to forum</a>
+ ";
+ }
+ page_tail();
+ exit;
} elseif ($action=="move"){
$destid = post_int('threadid');
$new_thread = BoincThread::lookup_id($destid);
diff --git a/html/user/forum_moderate_thread.php b/html/user/forum_moderate_thread.php
index ec9f933..6fac18f 100644
--- a/html/user/forum_moderate_thread.php
+++ b/html/user/forum_moderate_thread.php
@@ -16,6 +16,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+require_once('../inc/util.inc');
require_once('../inc/forum.inc');
check_get_args(array("action", "thread", "ttok", "tnow"));
@@ -23,6 +24,10 @@ check_get_args(array("action", "thread", "ttok", "tnow"));
$logged_in_user = get_logged_in_user();
BoincForumPrefs::lookup($logged_in_user);
+if (DISABLE_FORUMS && !is_admin($logged_in_user)) {
+ error_page("Forums are disabled");
+}
+
if (!get_str('action')) {
error_page("unknown action");
}
@@ -40,6 +45,7 @@ echo form_tokens($logged_in_user->authenticator);
start_table();
$action = get_str('action');
+$get_reason = true;
switch ($action) {
case 'hide':
case 'lock':
@@ -78,18 +84,28 @@ case 'title':
"<input size=80 name=\"newtitle\" value=\"".htmlspecialchars($thread->title)."\">"
);
break;
+case 'delete':
+ echo "<input type=hidden name=action value=delete>";
+ echo "Are you sure you want to delete this thread and all its posts?
+ This action cannot be undone.
+ <input type=submit value=Yes>
+ ";
+ $get_reason = false;
+ break;
default:
error_page("Unknown action");
}
-row2(tra("Reason")."<br><span class=note>".tra("Mailed if nonempty")."</span>",
- "<textarea rows=10 cols=80 name=\"reason\"></textarea>"
-);
+if ($get_reason) {
+ row2(tra("Reason")."<br><span class=note>".tra("Mailed if nonempty")."</span>",
+ "<textarea rows=10 cols=80 name=\"reason\"></textarea>"
+ );
-row2(
- "",
- "<input type=\"submit\" name=\"submit\" value=\"".tra("OK")."\">"
-);
+ row2(
+ "",
+ "<input type=\"submit\" name=\"submit\" value=\"".tra("OK")."\">"
+ );
+}
end_table();
diff --git a/html/user/forum_moderate_thread_action.php b/html/user/forum_moderate_thread_action.php
index bc6f503..32adf0a 100644
--- a/html/user/forum_moderate_thread_action.php
+++ b/html/user/forum_moderate_thread_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,6 +16,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+require_once("../inc/util.inc");
require_once("../inc/forum.inc");
require_once("../inc/forum_email.inc");
@@ -24,6 +25,10 @@ check_get_args(array("action", "thread", "tnow", "ttok"));
$logged_in_user = get_logged_in_user();
check_tokens($logged_in_user->authenticator);
BoincForumPrefs::lookup($logged_in_user);
+if (DISABLE_FORUMS && !is_admin($logged_in_user)) {
+ error_page("Forums are disabled");
+}
+
$action = post_str('action', true);
if (!$action) {
$action = get_str('action');
@@ -94,6 +99,15 @@ case "title":
$result = $thread->update("title='$title'");
$action_name = "renamed from '$thread->title' to '$new_title'";
break;
+case "delete":
+ delete_thread($thread, $forum);
+ page_head("Thread deleted");
+ echo "Thread successfully deleted.
+ <p>
+ <a href=forum_forum.php?id=$forum->id>Return to forum</a>
+ ";
+ page_tail();
+ exit;
default:
error_page("Unknown action");
}
diff --git a/html/user/forum_post.php b/html/user/forum_post.php
index a001027..be7060a 100644
--- a/html/user/forum_post.php
+++ b/html/user/forum_post.php
@@ -36,6 +36,10 @@ check_banished($logged_in_user);
$forumid = get_int("id");
$forum = BoincForum::lookup_id($forumid);
+if (DISABLE_FORUMS && !is_admin($logged_in_user)) {
+ error_page("Forums are disabled");
+}
+
if (!user_can_create_thread($logged_in_user, $forum)) {
error_page(tra("Only project admins may create a thread here. However, you may reply to existing threads."));
}
diff --git a/html/user/forum_rate.php b/html/user/forum_rate.php
index ed9e866..771cef2 100644
--- a/html/user/forum_rate.php
+++ b/html/user/forum_rate.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@
require_once('../inc/forum.inc');
require_once('../inc/util.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
$config = get_config();
if (parse_bool($config, "no_forum_rating")) {
page_head(tra("Rating offline"));
diff --git a/html/user/forum_reply.php b/html/user/forum_reply.php
index d6fbfdb..fa1d49e 100644
--- a/html/user/forum_reply.php
+++ b/html/user/forum_reply.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -19,11 +19,14 @@
// Post a reply to a thread.
// Both input (form) and action take place here.
+require_once('../inc/util.inc');
require_once('../inc/forum_email.inc');
require_once('../inc/forum.inc');
require_once('../inc/bbcode_html.inc');
require_once('../inc/akismet.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
$logged_in_user = get_logged_in_user(true);
BoincForumPrefs::lookup($logged_in_user);
check_banished($logged_in_user);
diff --git a/html/user/forum_report_post.php b/html/user/forum_report_post.php
index 04d7ea7..2319bfc 100644
--- a/html/user/forum_report_post.php
+++ b/html/user/forum_report_post.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,9 +21,12 @@
// For this file to work the project must have defined who
// should receive such reports (in the configuration file)
+require_once('../inc/util.inc');
require_once('../inc/forum.inc');
require_once('../inc/forum_email.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("post", "submit", "reason", "tnow", "ttok"));
$postId = get_int('post');
diff --git a/html/user/forum_rss.php b/html/user/forum_rss.php
index d67ba2f..57e3c22 100644
--- a/html/user/forum_rss.php
+++ b/html/user/forum_rss.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -23,15 +23,12 @@
// by decreasing create time
// Else enumerate threads by decreasing timestamp,
// and show the post with latest timestamp for each
-// truncate
-// If true, truncate posts to 256 chars and show BBcode
-// else show whole post and convert to HTML
-require_once("../project/project.inc");
+require_once("../inc/util.inc");
require_once("../inc/boinc_db.inc");
require_once("../inc/forum_rss.inc");
-check_get_args(array("forumid", "setup", "userid", "ndays", "truncate", "threads_only"));
+if (DISABLE_FORUMS) error_page("Forums are disabled");
$forumid = get_int('forumid');
$forum = BoincForum::lookup_id($forumid);
@@ -40,6 +37,7 @@ if (!$forum) error_page("no such forum");
if (get_int('setup', true)) {
page_head(tra("%1 RSS feed", $forum->title));
echo tra("This message board is available as an RSS feed.")
+ ." "
.tra("Options:")."
<form action=\"forum_rss.php\" method=\"get\">
<input type=\"hidden\" name=\"forumid\" value=\"$forumid\">
@@ -48,8 +46,6 @@ if (get_int('setup', true)) {
<p>
".tra("Include only posts from the last %1 days (default: 30).", "<input name=\"ndays\">")."
<p>
- ".tra("Truncate posts: %1 (Include only first 265 characters of each post)", "<input type=\"checkbox\" name=\"truncate\" checked>")."
- <p>
".tra("Threads only: %1 (Include only the first post of every thread)", "<input type=\"checkbox\" name=\"threads_only\">")."
<p>
<input type=\"submit\" value=\"".tra("OK")."\">
@@ -60,13 +56,12 @@ if (get_int('setup', true)) {
$userid = get_int('userid', true);
$ndays = get_int('ndays', true);
-$truncate = get_str('truncate', true);
$threads_only = get_str('threads_only', true);
-if(!$ndays || $ndays < "1") {
- $ndays = "30";
+if(!$ndays || $ndays < 1) {
+ $ndays = 30;
}
-forum_rss($forumid, $userid, $truncate, $threads_only, $ndays);
+forum_rss($forumid, $userid, $threads_only, $ndays);
?>
diff --git a/html/user/forum_search.php b/html/user/forum_search.php
index 8d3405f..28c0cad 100644
--- a/html/user/forum_search.php
+++ b/html/user/forum_search.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -22,6 +22,8 @@
require_once('../inc/forum.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("forumid"));
page_head(tra("Forum search"));
diff --git a/html/user/forum_search_action.php b/html/user/forum_search_action.php
index fe594b4..f210693 100644
--- a/html/user/forum_search_action.php
+++ b/html/user/forum_search_action.php
@@ -23,6 +23,8 @@ require_once('../inc/time.inc');
require_once('../inc/text_transform.inc');
require_once('../inc/forum.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array());
// Searches for the keywords in the $keyword_list array in thread titles.
@@ -34,7 +36,7 @@ function search_thread_titles(
){
$search_string="%";
foreach ($keyword_list as $key => $word) {
- $search_string.=mysql_escape_string($word)."%";
+ $search_string .= BoincDb::escape_string($word)."%";
}
$query = "title like '".$search_string."'";
if ($forum && $forum != "all") {
diff --git a/html/user/forum_subscribe.php b/html/user/forum_subscribe.php
index ac4d36c..f21cf31 100644
--- a/html/user/forum_subscribe.php
+++ b/html/user/forum_subscribe.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -22,6 +22,8 @@
require_once('../inc/forum.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("action", "thread", "tnow", "ttok"));
$action = get_str('action');
diff --git a/html/user/forum_thread.php b/html/user/forum_thread.php
index c2f2e8a..088ec9b 100644
--- a/html/user/forum_thread.php
+++ b/html/user/forum_thread.php
@@ -37,12 +37,17 @@ if ($filter != "false"){
}
$logged_in_user = get_logged_in_user(false);
+
$tokens = "";
if ($logged_in_user) {
BoincForumPrefs::lookup($logged_in_user);
$tokens = url_tokens($logged_in_user->authenticator);
}
+if (DISABLE_FORUMS && !is_admin($logged_in_user)) {
+ error_page("Forums are disabled");
+}
+
if ($threadid < 1) {
error_page("Invalid thread ID!");
}
@@ -206,20 +211,20 @@ if (is_moderator($logged_in_user, $forum)) {
show_button(
"forum_moderate_thread_action.php?action=sticky&thread=".$thread->id."$tokens",
tra("Make sticky"),
- tra("Make this thread sticky")
+ tra("Make this thread always appear at top of forum")
);
}
if ($thread->locked) {
show_button(
"forum_moderate_thread_action.php?action=unlock&thread=".$thread->id."$tokens",
tra("Unlock"),
- tra("Unlock this thread")
+ tra("Allow new posts in this thread")
);
} else {
show_button(
"forum_moderate_thread.php?action=lock&thread=".$thread->id."$tokens",
tra("Lock"),
- tra("Lock this thread")
+ tra("Don't allow new posts in this thread")
);
}
if ($forum->parent_type == 0) {
@@ -236,6 +241,14 @@ if (is_moderator($logged_in_user, $forum)) {
);
}
+if (is_admin($logged_in_user)) {
+ show_button(
+ "forum_moderate_thread.php?action=delete&thread=".$thread->id."$tokens",
+ tra("Delete"),
+ tra("Delete thread permanently")
+ );
+}
+
// let admins decide whether a news item should be exported as notice
//
if (is_news_forum($forum) && $logged_in_user && ($logged_in_user->id == $thread->owner)) {
diff --git a/html/user/forum_thread_status.php b/html/user/forum_thread_status.php
index 84f1824..d0ba6dc 100644
--- a/html/user/forum_thread_status.php
+++ b/html/user/forum_thread_status.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -28,6 +28,11 @@ $thread = BoincThread::lookup_id($threadid);
if (!$thread) error_page("no such thread");
$logged_in_user = get_logged_in_user();
+BoincForumPrefs::lookup($logged_in_user);
+
+if (DISABLE_FORUMS && !is_admin($logged_in_user)) {
+ error_page("Forums are disabled");
+}
$owner = BoincUser::lookup_id($thread->owner);
if ($logged_in_user->id == $owner->id){
diff --git a/html/user/forum_thread_vote.php b/html/user/forum_thread_vote.php
index e03611f..66950df 100644
--- a/html/user/forum_thread_vote.php
+++ b/html/user/forum_thread_vote.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@
require_once('../inc/forum.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("id"));
$threadid = get_int('id');
diff --git a/html/user/forum_user_posts.php b/html/user/forum_user_posts.php
index 83b1859..eb8e989 100644
--- a/html/user/forum_user_posts.php
+++ b/html/user/forum_user_posts.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@ require_once('../inc/time.inc');
require_once('../inc/forum.inc');
require_once('../inc/user.inc');
+if (DISABLE_FORUMS) error_page("Forums are disabled");
+
check_get_args(array("userid", "offset"));
$userid = get_int("userid");
@@ -28,7 +30,7 @@ $offset = get_int("offset", true);
if (!$offset) $offset=0;
$items_per_page = 20;
-$user = lookup_user_id($userid);
+$user = BoincUser::lookup_id($userid);
$logged_in_user = get_logged_in_user(false);
// Policy for what to show:
diff --git a/html/user/get_output.php b/html/user/get_output.php
index 04a2c3b..0ce12d0 100644
--- a/html/user/get_output.php
+++ b/html/user/get_output.php
@@ -100,7 +100,7 @@ function get_wu_output_file($wu_name, $file_num, $auth_str) {
$wu = BoincWorkunit::lookup("name='$wu_name'");
if (!$wu) die("no workunit $wu_name");
$batch = BoincBatch::lookup_id($wu->batch);
- if (!batch) die("no batch $wu->batch");
+ if (!$batch) die("no batch $wu->batch");
$user = BoincUser::lookup_id($batch->user_id);
if (!$user) die("no user $batch->user_id");
if ($user->authenticator != $auth_str) die("bad auth str: x=$x, auth_str=$auth_str");
@@ -123,7 +123,7 @@ function get_wu_output_files($wu_id, $auth_str) {
$wu = BoincWorkunit::lookup_id($wu_id);
if (!$wu) die("no workunit $wu_id");
$batch = BoincBatch::lookup_id($wu->batch);
- if (!batch) die("no batch $wu->batch");
+ if (!$batch) die("no batch $wu->batch");
$user = BoincUser::lookup_id($batch->user_id);
if (!$user) die("no user $batch->user_id");
$x = md5($user->authenticator.$wu_id);
diff --git a/html/user/get_project_config.php b/html/user/get_project_config.php
index 69b5b2a..793bf58 100644
--- a/html/user/get_project_config.php
+++ b/html/user/get_project_config.php
@@ -26,34 +26,24 @@ xml_header();
// and update it every hour if possible.
//
function show_platforms() {
- $path = "../cache/platform_list.xml";
- $mtime = @filemtime($path);
- if ($mtime && (time() - $mtime) < 3600) {
- @readfile($path);
- } else {
- require_once("../inc/db.inc");
- $retval = db_init_aux(true);
- if (!$retval) {
- $query = 'select name, user_friendly_name, plan_class from platform, app_version where app_version.platformid = platform.id and app_version.deprecated=0 group by name, plan_class';
- $result = mysql_query($query);
- $f = fopen($path, "w");
- fwrite($f, "<platforms>\n");
- while ($p = mysql_fetch_object($result)) {
- if ($p->plan_class) {
- $pc = " <plan_class>$p->plan_class</plan_class>\n";
- } else {
- $pc = "";
- }
- fwrite($f,
- " <platform>\n <platform_name>$p->name</platform_name>\n <user_friendly_name>$p->user_friendly_name</user_friendly_name>\n$pc </platform>\n"
- );
- }
- mysql_free_result($result);
- fwrite($f, "</platforms>\n");
- fclose($f);
- @readfile($path);
+ $xmlFragment = unserialize(get_cached_data(3600, "project_config_platform_xml"));
+ if ($xmlFragment==false){
+ $platforms = BoincDB::get()->enum_fields("platform, DBNAME.app_version, DBNAME.app", "BoincPlatform", "platform.name, platform.user_friendly_name, plan_class", "app_version.platformid = platform.id and app_version.appid = app.id and app_version.deprecated=0 and app.deprecated=0 group by platform.name, plan_class", "");
+ $xmlFragment = " <platforms>";
+ foreach ($platforms as $platform){
+ $xmlFragment .= "
+ <platform>
+ <platform_name>$platform->name</platform_name>
+ <user_friendly_name>$platform->user_friendly_name</user_friendly_name>";
+ if ($platform->plan_class) $xmlFragment .= "
+ <plan_class>$platform->plan_class</plan_class>\n";
+ $xmlFragment .= "
+ </platform>";
}
+ $xmlFragment .= "\n </platforms>\n";
+ set_cached_data(3600, serialize($xmlFragment), "project_config_platform_xml");
}
+ echo $xmlFragment;
}
$config = get_config();
@@ -69,20 +59,21 @@ $master_url = parse_config($config, "<master_url>");
echo "<project_config>
<name>$long_name</name>
<master_url>$master_url</master_url>
+ <web_rpc_url_base>".secure_url_base()."</web_rpc_url_base>
";
-$local_revision = trim(file_get_contents("../../local.revision"));
+$local_revision = @trim(file_get_contents("../../local.revision"));
if ($local_revision) {
echo "<local_revision>$local_revision</local_revision>\n";
}
if (web_stopped()) {
echo "
- <error_num>-183</error_num>
+ <error_num>".ERR_PROJECT_DOWN."</error_num>
<web_stopped>1</web_stopped>
";
} else {
- echo "<web_stopped>0</web_stopped>\n";
+ echo " <web_stopped>0</web_stopped>\n";
}
if ($disable_account_creation || defined('INVITE_CODES')) {
@@ -93,14 +84,12 @@ if (defined('INVITE_CODES')) {
echo " <invite_code_required/>\n";
}
-echo "
- <min_passwd_length>$min_passwd_length</min_passwd_length>
-";
+echo " <min_passwd_length>$min_passwd_length</min_passwd_length>\n";
if (sched_stopped()) {
- echo "<sched_stopped>1</sched_stopped>\n";
+ echo " <sched_stopped>1</sched_stopped>\n";
} else {
- echo "<sched_stopped>0</sched_stopped>\n";
+ echo " <sched_stopped>0</sched_stopped>\n";
}
$min_core_client_version = parse_config($config, "<min_core_client_version>");
@@ -114,12 +103,10 @@ $tou_file = "../../terms_of_use.txt";
if (file_exists($tou_file)) {
$terms_of_use = trim(file_get_contents($tou_file));
if ($terms_of_use) {
- echo "<terms_of_use>\n$terms_of_use\n</terms_of_use>\n";
+ echo " <terms_of_use>\n$terms_of_use\n</terms_of_use>\n";
}
}
-echo "
-</project_config>
-";
+echo "</project_config>";
?>
diff --git a/html/user/gpu_list.php b/html/user/gpu_list.php
index 0b28453..06f1656 100644
--- a/html/user/gpu_list.php
+++ b/html/user/gpu_list.php
@@ -26,6 +26,9 @@
require_once("../inc/util.inc");
+// take a host.serialnum field (which may encode several GPUs)
+// and extract the model name for the given vendor
+//
function get_gpu_model($x, $vendor) {
$descs = explode("]", $x);
array_pop($descs);
@@ -86,7 +89,14 @@ function get_gpu_list($vendor, $alt_vendor=null) {
if (!$h) continue;
$wu = BoincWorkunit::lookup_id($r->workunitid);
if (!$wu) continue;
- $v = $vendor=="cuda"?"CUDA":"CAL";
+ $v = "";
+ if ($vendor == "cuda") {
+ $v = "CUDA";
+ } else if ($vendor == "intel_gpu") {
+ $v = "INTEL";
+ } else {
+ $v = "CAL";
+ }
$model = get_gpu_model($h->serialnum, $v);
if (!$model) continue;
add_model($model, $r, $wu, $total);
@@ -113,6 +123,7 @@ function get_gpu_lists() {
$x = new StdClass;
$x->cuda = get_gpu_list("cuda", "nvidia");
$x->ati = get_gpu_list("ati");
+ $x->intel_gpu = get_gpu_list("intel_gpu");
return $x;
}
@@ -183,6 +194,7 @@ page_head(tra("Top GPU models"));
echo tra("The following lists show the most productive GPU models on different platforms. Relative speeds are shown in parentheses.");
show_vendor("NVIDIA", $data->cuda);
show_vendor("ATI/AMD", $data->ati);
+show_vendor("Intel", $data->intel_gpu);
page_tail();
?>
diff --git a/html/user/gpu_ratios.php b/html/user/gpu_ratios.php
index 2ad1b7c..db3f154 100644
--- a/html/user/gpu_ratios.php
+++ b/html/user/gpu_ratios.php
@@ -30,6 +30,8 @@ $ati_scale_sum = 0;
$ati_credit_sum = 0;
$nvidia_scale_sum = 0;
$nvidia_credit_sum = 0;
+$intel_gpu_scale_sum = 0;
+$intel_gpu_credit_sum = 0;
$total_credit_sum= 0;
$apps = BoincApp::enum("deprecated=0");
@@ -42,6 +44,9 @@ foreach ($apps as $app) {
} else if (strstr($av->plan_class, "nvidia") || strstr($av->plan_class, "cuda")) {
$nvidia_scale_sum += $av->pfc_scale * $av->expavg_credit;
$nvidia_credit_sum += $av->expavg_credit;
+ } else if (strstr($av->plan_class, "intel_gpu")) {
+ $intel_gpu_scale_sum += $av->pfc_scale * $av->expavg_credit;
+ $intel_gpu_credit_sum += $av->expavg_credit;
} else {
$cpu_scale_sum += $av->pfc_scale * $av->expavg_credit;
$cpu_credit_sum += $av->expavg_credit;
@@ -63,5 +68,8 @@ if ($ati_credit_sum) {
if ($nvidia_credit_sum) {
echo " <nvidia>", $nvidia_scale_sum/$nvidia_credit_sum, "</nvidia>\n";
}
+if ($intel_gpu_credit_sum) {
+ echo " <intel_gpu>", $intel_gpu_scale_sum/$intel_gpu_credit_sum, "</intel_gpu>\n";
+}
echo "</scale_factors>\n";
?>
diff --git a/html/user/host_app_versions.php b/html/user/host_app_versions.php
index ddc39f1..ad6e8fa 100644
--- a/html/user/host_app_versions.php
+++ b/html/user/host_app_versions.php
@@ -23,8 +23,9 @@ check_get_args(array("hostid"));
function rsc_name($t) {
switch ($t) {
case 2: return tra("CPU");
- case 3: return tra("nvidia GPU");
+ case 3: return tra("NVIDIA GPU");
case 4: return tra("ATI GPU");
+ case 5: return tra("Intel GPU");
}
return tra("Unknown");
}
@@ -58,8 +59,8 @@ function show_hav($hav) {
row2(tra("Consecutive valid tasks"), $hav->consecutive_valid);
$x = number_format($hav->turnaround_avg/86400, 2);
if ($hav->et_avg) {
- $gflops = 1e-9/$hav->et_avg;
- row2(tra("Average processing rate"), $gflops);
+ $gflops = number_format(1e-9/$hav->et_avg, 2);
+ row2(tra("Average processing rate"), $gflops." GFLOPS");
}
row2(tra("Average turnaround time"), "$x days");
}
diff --git a/html/user/host_update_credit.php b/html/user/host_update_credit.php
index 58d799a..4edb2a6 100644
--- a/html/user/host_update_credit.php
+++ b/html/user/host_update_credit.php
@@ -16,20 +16,19 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
+require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/host.inc");
check_get_args(array("hostid"));
-db_init();
$user = get_logged_in_user();
page_head(tra("Updating computer credit"));
$hostid = get_int("hostid");
-$host = lookup_host($hostid);
+$host = BoincHost::lookup_id($hostid);
if (!$host || $host->userid != $user->id) {
error_page(We have no record of that computer");
}
diff --git a/html/user/hosts_user.php b/html/user/hosts_user.php
index c4c4f70..ecb36e7 100644
--- a/html/user/hosts_user.php
+++ b/html/user/hosts_user.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -44,7 +44,7 @@ if ($user && $user->id == $userid) {
$userid = 0;
}
if ($userid) {
- $user = lookup_user_id($userid);
+ $user = BoincUser::lookup_id($userid);
if (!$user) {
error_page("No such user");
}
diff --git a/html/user/img/bronze.jpg b/html/user/img/bronze.jpg
new file mode 100644
index 0000000..fc7525f
Binary files /dev/null and b/html/user/img/bronze.jpg differ
diff --git a/html/user/img/bronze.png b/html/user/img/bronze.png
new file mode 100644
index 0000000..1b5c14b
Binary files /dev/null and b/html/user/img/bronze.png differ
diff --git a/html/user/img/gold.png b/html/user/img/gold.png
new file mode 100644
index 0000000..f1521de
Binary files /dev/null and b/html/user/img/gold.png differ
diff --git a/html/user/img/pct_1.png b/html/user/img/pct_1.png
new file mode 100644
index 0000000..1d10115
Binary files /dev/null and b/html/user/img/pct_1.png differ
diff --git a/html/user/img/pct_25.png b/html/user/img/pct_25.png
new file mode 100644
index 0000000..dfbedb2
Binary files /dev/null and b/html/user/img/pct_25.png differ
diff --git a/html/user/img/pct_5.png b/html/user/img/pct_5.png
new file mode 100644
index 0000000..8c742ad
Binary files /dev/null and b/html/user/img/pct_5.png differ
diff --git a/html/user/img/silver.png b/html/user/img/silver.png
new file mode 100644
index 0000000..4fa0649
Binary files /dev/null and b/html/user/img/silver.png differ
diff --git a/html/user/job_file.php b/html/user/job_file.php
index 233dda1..c0302eb 100644
--- a/html/user/job_file.php
+++ b/html/user/job_file.php
@@ -86,9 +86,13 @@ function query_files($r) {
$batch_id = (int)$r->batch_id;
$fanout = parse_config(get_config(), "<uldl_dir_fanout>");
$i = 0;
+ $md5s= array();
foreach($r->md5 as $f) {
$md5 = (string)$f;
- echo "processing $md5\n";
+ $md5s[] = $md5;
+ }
+ $md5s = array_unique($md5s);
+ foreach($md5s as $md5) {
$fname = job_file_name($md5);
$path = dir_hier_path($fname, "../../download", $fanout);
@@ -98,9 +102,9 @@ function query_files($r) {
//
$job_file = BoincJobFile::lookup_md5($md5);
if ($job_file && $job_file->delete_time < $delete_time) {
- $retval = $job_file::update("delete_time=$delete_time");
+ $retval = $job_file->update("delete_time=$delete_time");
if ($retval) {
- xml_error(-1, "job_file::update() failed: "+mysql_error());
+ xml_error(-1, "job_file->update() failed: ".BoincDb::error());
}
}
if (file_exists($path)) {
@@ -121,7 +125,7 @@ function query_files($r) {
);
if (!$ret) {
xml_error(-1,
- "BoincBatchFileAssoc::insert() failed: "+mysql_error()
+ "BoincBatchFileAssoc::insert() failed: ".BoincDb::error()
);
}
}
@@ -162,7 +166,7 @@ function upload_files($r) {
"(md5, create_time, delete_time) values ('$md5', $now, $delete_time)"
);
if (!$jf_id) {
- xml_error(-1, "BoincJobFile::insert($md5) failed: "+mysql_error());
+ xml_error(-1, "BoincJobFile::insert($md5) failed: ".BoincDb::error());
}
if ($batch_id) {
BoincBatchFileAssoc::insert(
diff --git a/html/user/language_select.php b/html/user/language_select.php
index 5e5c1b1..ef96d78 100644
--- a/html/user/language_select.php
+++ b/html/user/language_select.php
@@ -22,7 +22,7 @@ require_once("../inc/translation.inc");
check_get_args(array("set_lang"));
-$languages = getSupportedLanguages();
+$languages = get_supported_languages();
if (!is_array($languages)) {
error_page("Language selection not enabled. Project admins must run the update_translations.php script.");
}
diff --git a/html/user/login_action.php b/html/user/login_action.php
index ee82dd6..b1d0709 100644
--- a/html/user/login_action.php
+++ b/html/user/login_action.php
@@ -33,7 +33,7 @@ $email_addr = strtolower(sanitize_tags(post_str("email_addr", true)));
$passwd = post_str("passwd", true);
if ($email_addr && $passwd) {
- $user = lookup_user_email_addr($email_addr);
+ $user = BoincUser::lookup_email_addr($email_addr);
if (!$user) {
page_head("No such account");
echo "No account with email address <b>$email_addr</b> exists.
@@ -111,7 +111,7 @@ if (substr($user->authenticator, 0, 1) == 'x'){
//User has been bad so we are going to take away ability to post for awhile.
error_page("This account has been administratively disabled.");
}
-$user = lookup_user_auth($authenticator);
+$user = BoincUser::lookup_auth($authenticator);
if (!$user) {
page_head("Login failed");
echo "There is no account with that authenticator.
diff --git a/html/user/login_form.php b/html/user/login_form.php
index 5b3c5e9..6d8f342 100644
--- a/html/user/login_form.php
+++ b/html/user/login_form.php
@@ -23,7 +23,8 @@ check_get_args(array("next_url"));
$next_url = sanitize_local_url(get_str('next_url', true));
-redirect_to_secure_url("login_form.php?next_url=$next_url");
+$u = "login_form.php?next_url=".urlencode($next_url);
+redirect_to_secure_url($u);
$user = get_logged_in_user(false);
@@ -43,7 +44,8 @@ echo "
";
start_table();
row2(tra("Email address:") . '<br><span class="note"><a href="get_passwd.php">'.tra("forgot email address?")."</a></span>",
- "<input name=email_addr type=\"text\" size=40 tabindex=1>");
+ "<input name=email_addr type=\"text\" size=40 tabindex=1>"
+);
row2(tra("Password:") . '<br><span class="note"><a href="get_passwd.php">' . tra("forgot password?") . "</a></span>",
'<input type="password" name="passwd" size="40" tabindex="2">'
);
@@ -51,9 +53,18 @@ row2(tra("Stay logged in"),
'<input type="checkbox" name="stay_logged_in" checked>'
);
$x = urlencode($next_url);
+
+$config = get_config();
+if (parse_bool($config, "disable_account_creation")
+ || parse_bool($config, "no_web_account_creation")
+) {
+ $create_acct = "";
+} else {
+ $create_acct = tra("or %1create an account%2.", "<a href=\"create_account_form.php?next_url=$x\">","</a>");
+}
+
row2("",
- "<input type=\"submit\" name=\"mode\" value=\"".tra("Log in")."\" tabindex=\"3\"><br><br>".
- tra("or %1create an account%2.", "<a href=\"create_account_form.php?next_url=$x\">","</a>")
+ "<input type=\"submit\" name=\"mode\" value=\"".tra("Log in")."\" tabindex=\"3\"><br><br>". $create_acct
);
if ($user) {
row1("Log out");
diff --git a/html/user/lookup_account.php b/html/user/lookup_account.php
index 0136395..f86a83a 100644
--- a/html/user/lookup_account.php
+++ b/html/user/lookup_account.php
@@ -33,7 +33,7 @@ $passwd_hash = get_str("passwd_hash", true);
$email_addr = BoincDb::escape_string($email_addr);
$user = BoincUser::lookup("email_addr='$email_addr'");
if (!$user) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
if (!$passwd_hash) {
@@ -60,8 +60,7 @@ if ($user->passwd_hash == $passwd_hash || $auth_hash == $passwd_hash) {
echo "<authenticator>$user->authenticator</authenticator>\n";
echo "</account_out>\n";
} else {
- xml_error(-206);
+ xml_error(ERR_BAD_PASSWD);
}
?>
-
diff --git a/html/user/mail_passwd.php b/html/user/mail_passwd.php
index b57b273..8ddbf8a 100644
--- a/html/user/mail_passwd.php
+++ b/html/user/mail_passwd.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -46,7 +46,7 @@ $email_addr = sanitize_email($email_addr);
if (!strlen($email_addr)) {
error_page("no address given");
}
-$user = lookup_user_email_addr($email_addr);
+$user = BoincUser::lookup_email_addr($email_addr);
if (!$user) {
page_head("No such user");
diff --git a/html/user/manage_project.php b/html/user/manage_project.php
index e9a271c..d33f3c9 100644
--- a/html/user/manage_project.php
+++ b/html/user/manage_project.php
@@ -48,6 +48,7 @@ function user_row($u) {
}
echo "</td>\n";
echo "<td>$u->quota</td>\n";
+ echo "<td>$u->max_jobs_in_progress</td>\n";
echo "<td>";
if ($u->logical_start_time > time()) {
echo local_time_str($u->logical_start_time);
@@ -72,6 +73,7 @@ function handle_list() {
"User<br><span class=note>Click to change permissions or quota</span>",
"Can submit jobs for",
"Quota",
+ "Max jobs in progress<br><span class=note>0 means no limit</span>",
"Current priority<br><span class=note>Later time = lower priority</span>"
);
foreach ($us as $u) {
@@ -88,9 +90,9 @@ function handle_edit_form() {
$user_id = get_int('user_id');
$user = BoincUser::lookup_id($user_id);
$usub = BoincUserSubmit::lookup_userid($user_id);
- page_head("Permissions for $user->name");
+ page_head("Job submission permissions for $user->name");
echo "
- $user->name is allowed to submit jobs for:
+ $user->name can submit jobs for:
<p>
<form action=manage_project.php>
<input type=hidden name=action value=edit_action>
@@ -114,6 +116,7 @@ function handle_edit_form() {
echo "<br> <input type=checkbox name=app_$app->id $checked> $app->name\n";
}
$q = (string) $usub->quota;
+ $mj = $usub->max_jobs_in_progress;
$sav = $usub->create_app_versions?"checked":"";
$sa = $usub->create_apps?"checked":"";
echo "
@@ -121,6 +124,9 @@ function handle_edit_form() {
Quota: <input name=quota value=$q>
This determines how much computing capacity is allocated to $user->name.
<p>
+ Max jobs in progress:
+ <input name=max_jobs_in_progress value=$mj>
+ <p>
<input type=submit value=OK>
</form>
<p>
@@ -151,6 +157,10 @@ function handle_edit_action() {
if ($quota != $us->quota) {
$us->update("quota=$quota");
}
+ $mj = (int) get_str('max_jobs_in_progress');
+ if ($mj != $us->max_jobs_in_progress) {
+ $us->update("max_jobs_in_progress=$mj");
+ }
header('Location: manage_project.php');
}
diff --git a/html/user/merge_by_name.php b/html/user/merge_by_name.php
index 178a6f0..9cae190 100644
--- a/html/user/merge_by_name.php
+++ b/html/user/merge_by_name.php
@@ -24,8 +24,6 @@ check_get_args(array("confirmed", "tnow", "ttok"));
$confirmed = get_str("confirmed", true);
-db_init();
-
function merge_name($list) {
// find the newest one
//
diff --git a/html/user/notices.php b/html/user/notices.php
index 6996559..9ba828d 100644
--- a/html/user/notices.php
+++ b/html/user/notices.php
@@ -97,6 +97,9 @@ foreach ($threads as $t) {
usort($items, 'notice_cmp');
+$client_version = boinc_client_version();
+$no_images = ($client_version < 73000);
+
notices_rss_start();
foreach ($items as $item) {
switch ($item->type) {
@@ -104,7 +107,7 @@ foreach ($items as $item) {
show_notify_rss_item($item->val);
break;
case 1:
- show_forum_rss_item($item->val, 0, 1, 0);
+ show_forum_rss_item($item->val, 0, 1, $no_images);
break;
}
}
diff --git a/html/user/openid_login.php b/html/user/openid_login.php
index d981e62..821cbc0 100644
--- a/html/user/openid_login.php
+++ b/html/user/openid_login.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California, 2011 Daniel Lombraña González
+// Copyright (C) 2014 University of California, 2011 Daniel Lombraña González
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -61,23 +61,20 @@ try {
$config = get_config();
- if (parse_bool($config, "disable_account_creation")) {
- page_head("Account creation is disabled");
- echo "
- <h3>Account creation is disabled</h3>
- Sorry, this project has disabled the creation of new accounts.
- Please try again later.
- ";
- exit();
+ if (parse_bool($config, "disable_account_creation")
+ || parse_bool($config, "no_web_account_creation")
+ ) {
+ error_page("Account creation is disabled");
}
+
// see whether the new account should be pre-enrolled in a team,
// and initialized with its founder's project prefs
//
//$teamid = post_int("teamid", true);
//if ($teamid) {
- // $team = lookup_team($teamid);
- // $clone_user = lookup_user_id($team->userid);
+ // $team = BoincTeam::lookup_id($teamid);
+ // $clone_user = BoincUser::lookup_id($team->userid);
// if (!$clone_user) {
// echo "User $userid not found";
// exit();
@@ -113,7 +110,7 @@ try {
name at domain"
);
}
- $user = lookup_user_email_addr($new_email_addr);
+ $user = BoincUser::lookup_email_addr($new_email_addr);
if (!$user) {
$passwd_hash = random_string();
diff --git a/html/user/opt_out.php b/html/user/opt_out.php
index 94a8398..a60f2e4 100644
--- a/html/user/opt_out.php
+++ b/html/user/opt_out.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -24,7 +24,7 @@ check_get_args(array("code", "userid"));
$code = get_str("code");
$userid = get_int('userid');
-$user = lookup_user_id($userid);
+$user = BoincUser::lookup_id($userid);
if (!$user) {
error_page("no such user");
}
diff --git a/html/user/pending.php b/html/user/pending.php
index d3ceb36..47cd5ba 100644
--- a/html/user/pending.php
+++ b/html/user/pending.php
@@ -18,6 +18,8 @@
// Show results with pending credit for a user
+// DEPRECATED - result.claimed_credit not used anymore
+
require_once("../inc/util.inc");
require_once("../inc/boinc_db.inc");
require_once("../inc/xml.inc");
@@ -39,7 +41,7 @@ if ($format == "xml") {
$auth = BoincDb::escape_string(get_str('authenticator'));
$user = BoincUser::lookup("authenticator='$auth'");
if (!$user) {
- echo "<error>".xml_error(-136)."</error>\n";
+ echo "<error>".xml_error(ERR_DB_NOT_FOUND)."</error>\n";
exit();
}
$sum = 0;
diff --git a/html/user/pm.php b/html/user/pm.php
index 3118021..092c91e 100644
--- a/html/user/pm.php
+++ b/html/user/pm.php
@@ -98,7 +98,7 @@ function do_inbox($logged_in_user) {
$msg->update("opened=1");
}
echo "<td valign=top> $checkbox $msg->subject </td>\n";
- echo "<td valign=top>".user_links(get_user_from_id($msg->senderid));
+ echo "<td valign=top>".user_links(BoincUser::lookup_id($msg->senderid));
show_block_link($msg->senderid);
echo "<br>".time_str($msg->date)."</td>\n";
echo "<td valign=top>".output_transform($msg->content, $options)."<p>";
@@ -200,12 +200,12 @@ function do_send($logged_in_user) {
$user = explode(" ", $username);
if (is_numeric($user[0])) { // user ID is gived
$userid = $user[0];
- $user = lookup_user_id($userid);
+ $user = BoincUser::lookup_id($userid);
if ($user == null) {
pm_form($replyto, $userid, tra("Could not find user with id %1", $userid));
}
} else {
- $user = lookup_user_name($username);
+ $user = BoincUser::lookup_name($username);
if ($user == null) {
pm_form($replyto, $userid, tra("Could not find user with username %1", $username));
} elseif ($user == -1) { // Non-unique username
diff --git a/html/user/prefs.php b/html/user/prefs.php
index f94017d..64cddca 100644
--- a/html/user/prefs.php
+++ b/html/user/prefs.php
@@ -16,12 +16,9 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/prefs.inc");
-db_init();
-
$user = get_logged_in_user();
$subset = get_str("subset");
diff --git a/html/user/prefs_edit.php b/html/user/prefs_edit.php
index 6f24707..305deaf 100644
--- a/html/user/prefs_edit.php
+++ b/html/user/prefs_edit.php
@@ -83,7 +83,7 @@ if ($action) {
if (!$venue) {
venue_parse_form($user);
- venue_update($user);
+ $user->update("venue='$user->venue'");
}
Header("Location: prefs.php?subset=$subset&updated=1$c");
}
diff --git a/html/user/prefs_remove.php b/html/user/prefs_remove.php
index 27a2728..0e53eb0 100644
--- a/html/user/prefs_remove.php
+++ b/html/user/prefs_remove.php
@@ -16,14 +16,11 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-include_once("../inc/db.inc");
include_once("../inc/util.inc");
include_once("../inc/prefs.inc");
check_get_args(array("subset", "venue", "confirmed", "cols", "tnow", "ttok"));
-db_init();
-
$user = get_logged_in_user();
check_tokens($user->authenticator);
diff --git a/html/user/profile_menu.php b/html/user/profile_menu.php
index c1e5bfb..48c930a 100644
--- a/html/user/profile_menu.php
+++ b/html/user/profile_menu.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -17,14 +17,13 @@
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/profile.inc");
require_once("../inc/uotd.inc");
-check_get_args(array("cmd", "pic"));
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
-db_init();
+check_get_args(array("cmd", "pic"));
$option = get_str('cmd', true);
if ($option) {
@@ -47,10 +46,12 @@ row1($UOTD_heading);
echo "<tr><td>";
$profile = get_current_uotd();
if ($profile) {
- $user = lookup_user_id($profile->userid);
+ $user = BoincUser::lookup_id($profile->userid);
echo uotd_thumbnail($profile, $user);
echo user_links($user)."<br>";
- echo sub_sentence(output_transform(sanitize_tags($profile->response1)), ' ', 150, true);
+ $resp = output_transform($profile->response1);
+ $resp = sanitize_tags($resp);
+ echo sub_sentence($resp, ' ', 150, true);
}
echo "</td></tr>";
diff --git a/html/user/profile_rate.php b/html/user/profile_rate.php
index a04746e..0d092c0 100644
--- a/html/user/profile_rate.php
+++ b/html/user/profile_rate.php
@@ -19,6 +19,8 @@
require_once("../inc/util.inc");
require_once("../inc/boinc_db.inc");
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
+
check_get_args(array("userid", "vote"));
$userid = get_int('userid');
diff --git a/html/user/profile_search_action.php b/html/user/profile_search_action.php
index 6ddf714..76c446d 100644
--- a/html/user/profile_search_action.php
+++ b/html/user/profile_search_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -19,10 +19,12 @@
require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
+
check_get_args(array("search_string", "offset"));
function show_profile_link2($profile, $n) {
- $user = lookup_user_id($profile->userid);
+ $user = BoincUser::lookup_id($profile->userid);
echo "<tr><td>".user_links($user)."</td><td>".date_str($user->create_time)."</td><td>$user->country</td><td>".(int)$user->total_credit."</td><td>".(int)$user->expavg_credit."</td></tr>\n";
}
diff --git a/html/user/result.php b/html/user/result.php
index 02fa691..ffd4818 100644
--- a/html/user/result.php
+++ b/html/user/result.php
@@ -18,18 +18,21 @@
// show a result
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/result.inc");
-check_get_args(array("resultid"));
+$x = get_int("resultid", true);
+if ($x) {
+ $result = BoincResult::lookup_id($x);
+} else {
+ $x = get_str("result_name");
+ $result = BoincResult::lookup_name($x);
+}
-$resultid = get_int("resultid");
-$result = lookup_result($resultid);
if (!$result) {
- error_page(tra("No such task"));
+ error_page(tra("No such task: $x"));
}
-page_head(tra("Task %1", $resultid));
+page_head(tra("Task %1", $x));
show_result($result);
page_tail();
diff --git a/html/user/results.php b/html/user/results.php
index fcd1876..96995f4 100644
--- a/html/user/results.php
+++ b/html/user/results.php
@@ -74,7 +74,12 @@ if ($appid) {
$clause2 .= ' AND appid='.$appid;
}
-$query = "$clause2 order by id desc limit $offset,".($results_per_page+1);
+if ($show_names) {
+ $order_clause = "order by name";
+} else {
+ $order_clause = "order by sent_time desc";
+}
+$query = "$clause2 $order_clause limit $offset,".($results_per_page+1);
$results = BoincResult::enum($query);
$info = new StdClass;
diff --git a/html/user/sample_index.php b/html/user/sample_index.php
index eda2969..1823428 100644
--- a/html/user/sample_index.php
+++ b/html/user/sample_index.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -38,6 +38,7 @@ function show_nav() {
$master_url = parse_config($config, "<master_url>");
$no_computing = parse_config($config, "<no_computing>");
$no_web_account_creation = parse_bool($config, "no_web_account_creation");
+ $disable_acct = parse_bool($config, "disable_account_creation");
echo "<div class=\"mainnav\">
<h2 class=headline>About ".PROJECT."</h2>
";
@@ -66,22 +67,32 @@ function show_nav() {
<ul>
";
if ($no_computing) {
- echo "
- <li> <a href=\"create_account_form.php\">Create an account</a>
- ";
+ if (!$no_web_account_creation && !$disable_acct) {
+ echo "
+ <li> <a href=\"create_account_form.php\">Create an account</a>
+ ";
+ } else {
+ echo "<li> This project is not currently accepting new accounts.";
+ }
} else {
echo "
<li><a href=\"info.php\">".tra("Read our rules and policies")."</a>
- <li> This project uses BOINC.
- If you're already running BOINC, select Add Project.
- If not, <a target=\"_new\" href=\"http://boinc.berkeley.edu/download.php\">download BOINC</a>.
- <li> When prompted, enter <br><b>".$master_url."</b>
";
- if (!$no_web_account_creation) {
+ if (!$disable_acct) {
echo "
- <li> If you're running a command-line version of BOINC,
- <a href=\"create_account_form.php\">create an account</a> first.
+ <li> This project uses BOINC.
+ If you're already running BOINC, select Add Project.
+ If not, <a target=\"_new\" href=\"http://boinc.berkeley.edu/download.php\">download BOINC</a>.
+ <li> When prompted, enter <br><b>".$master_url."</b>
";
+ if (!$no_web_account_creation) {
+ echo "
+ <li> If you're running a command-line version of BOINC,
+ <a href=\"create_account_form.php\">create an account</a> first.
+ ";
+ }
+ } else {
+ echo "<li> This project is not currently accepting new accounts.";
}
echo "
<li> If you have any problems,
@@ -93,30 +104,40 @@ function show_nav() {
<h2 class=headline>Returning participants</h2>
<ul>
+ <li><a href=\"home.php\">Your account</a> - view stats, modify preferences
";
- if ($no_computing) {
+ if (!$no_computing) {
echo "
- <li><a href=\"bossa_apps.php\">Do work</a>
- <li><a href=\"home.php\">Your account</a> - view stats, modify preferences
- <li><a href=\"team.php\">Teams</a> - create or join a team
- ";
- } else {
- echo "
- <li><a href=\"home.php\">Your account</a> - view stats, modify preferences
<li><a href=server_status.php>Server status</a>
- <li><a href=\"team.php\">Teams</a> - create or join a team
<li><a href=\"cert1.php\">Certificate</a>
<li><a href=\"apps.php\">".tra("Applications")."</a>
";
}
+ if (!DISABLE_TEAMS) {
+ echo "
+ <li><a href=\"team.php\">Teams</a> - create or join a team
+ ";
+ }
echo "
</ul>
<h2 class=headline>".tra("Community")."</h2>
<ul>
- <li><a href=\"profile_menu.php\">".tra("Profiles")."</a>
+ ";
+ if (!DISABLE_PROFILES) {
+ echo "
+ <li><a href=\"profile_menu.php\">".tra("Profiles")."</a>
+ ";
+ }
+ echo "
<li><a href=\"user_search.php\">User search</a>
- <li><a href=\"forum_index.php\">".tra("Message boards")."</a>
- <li><a href=\"forum_help_desk.php\">".tra("Questions and Answers")."</a>
+ ";
+ if (!DISABLE_FORUMS) {
+ echo "
+ <li><a href=\"forum_index.php\">".tra("Message boards")."</a>
+ <li><a href=\"forum_help_desk.php\">".tra("Questions and Answers")."</a>
+ ";
+ }
+ echo "
<li><a href=\"stats.php\">Statistics</a>
<li><a href=language_select.php>Languages</a>
</ul>
@@ -172,7 +193,7 @@ echo "
</td>
";
-if (!$stopped) {
+if (!$stopped && !DISABLE_PROFILES) {
$profile = get_current_uotd();
if ($profile) {
echo "
diff --git a/html/user/sandbox.php b/html/user/sandbox.php
index 90b9ce6..ab77d98 100644
--- a/html/user/sandbox.php
+++ b/html/user/sandbox.php
@@ -42,12 +42,12 @@ function list_files($user, $err_msg) {
$dir = sandbox_dir($user);
$d = opendir($dir);
if (!$d) error_page("Can't open sandbox directory");
- page_head("file sandbox for $user->name");
+ page_head("File sandbox for $user->name");
echo "
<form action=sandbox.php method=post ENCTYPE=\"multipart/form-data\">
<input type=hidden name=action value=upload_file>
Upload a file to your sandbox:
- <p><input size=80 type=file name=new_file>
+ <p><input size=80 type=file name=\"new_file[]\" multiple=\"multiple\">
<p> <input type=submit value=Upload>
</form>
<hr>
@@ -101,36 +101,40 @@ function list_files($user, $err_msg) {
}
function upload_file($user) {
- $tmp_name = $_FILES['new_file']['tmp_name'];
- if (!is_uploaded_file($tmp_name)) {
- error_page("$tmp_name is not uploaded file");
- }
- $name = $_FILES['new_file']['name'];
- if (strstr($name, "/")) {
- error_page("no / allowed");
- }
- $md5 = md5_file($tmp_name);
- $s = stat($tmp_name);
- $size = $s['size'];
- list($exist, $elf) = sandbox_lf_exist($user, $md5);
- if ($exist){
- $notice = "<strong>Notice:</strong> Invalid Upload<br/>";
- $notice .= "You are trying to upload file <strong>$name</strong><br/>";
- $notice .= "Another file <strong>$elf</strong> with the same content(md5: $md5) already exist!<br/>";
- } else {
- // move file to download dir
- //
- $phys_path = sandbox_physical_path($user, $md5);
- rename($tmp_name, $phys_path);
+ $notice = "";
+ $count = count($_FILES['new_file']['tmp_name']);
+ for ($i = 0; $i < $count; $i++) {
+ $tmp_name = $_FILES['new_file']['tmp_name'][$i];
+ if (!is_uploaded_file($tmp_name)) {
+ error_page("$tmp_name is not uploaded file");
+ }
+ $name = $_FILES['new_file']['name'][$i];
+ if (strstr($name, "/")) {
+ error_page("no / allowed");
+ }
+ $md5 = md5_file($tmp_name);
+ $s = stat($tmp_name);
+ $size = $s['size'];
+ list($exist, $elf) = sandbox_lf_exist($user, $md5);
+ if ($exist){
+ $notice .= "<strong>Notice:</strong> Invalid Upload<br/>";
+ $notice .= "You are trying to upload file <strong>$name</strong><br/>";
+ $notice .= "Another file <strong>$elf</strong> with the same content (md5: $md5) already exists!<br/>";
+ } else {
+ // move file to download dir
+ //
+ $phys_path = sandbox_physical_path($user, $md5);
+ rename($tmp_name, $phys_path);
- // write link file
- //
- $dir = sandbox_dir($user);
- $link_path = "$dir/$name";
- sandbox_write_link_file($link_path, $size, $md5);
- $notice = "Successfully uploaded file <strong>$name</strong>!<br/>";
+ // write link file
+ //
+ $dir = sandbox_dir($user);
+ $link_path = "$dir/$name";
+ sandbox_write_link_file($link_path, $size, $md5);
+ $notice .= "Successfully uploaded file <strong>$name</strong>!<br/>";
+ }
}
- list_files($user, $notice);
+ list_files($user, $notice);
}
function delete_file($user) {
diff --git a/html/user/server_status.php b/html/user/server_status.php
index a435495..762a808 100644
--- a/html/user/server_status.php
+++ b/html/user/server_status.php
@@ -129,66 +129,51 @@ function show_counts($key, $xmlkey, $value) {
return 0;
}
-function get_mysql_count($query) {
- $count = unserialize(get_cached_data(3600, "get_mysql_count".$query));
+function get_mysql_count($table, $query) {
+ $count = unserialize(get_cached_data(3600, "get_mysql_count".$table.$query));
if ($count == false) {
- $result = mysql_query("select count(*) as count from " . $query);
- $count = mysql_fetch_object($result);
- mysql_free_result($result);
- $count = $count->count;
- set_cached_data(3600, serialize($count), "get_mysql_count".$query);
+ $count = BoincDB::get()->count($table,$query);
+ set_cached_data(3600, serialize($count), "get_mysql_count".$table.$query);
}
return $count;
}
-function get_mysql_value($query) {
- $value = unserialize(get_cached_data(3600, "get_mysql_value".$query));
+function get_mysql_sum($table, $field) {
+ $value = unserialize(get_cached_data(3600, "get_mysql_sum".$table.$field));
if ($value == false) {
- $result = mysql_query($query);
- $row = mysql_fetch_object($result);
- mysql_free_result($result);
- $value = $row->value;
- set_cached_data(3600, serialize($value), "get_mysql_value".$query);
+ $value = BoincDB::get()->sum($table, $field);
+ set_cached_data(3600, serialize($value), "get_mysql_sum".$table.$field);
}
return $value;
}
-function get_mysql_assoc($query) {
- $assoc = unserialize(get_cached_data(3600, "get_mysql_assoc".$query));
- if ($assoc == false) {
- $sql = "SELECT * FROM app WHERE deprecated != 1";
- $result = mysql_query($sql);
- while($row = mysql_fetch_assoc($result)) {
- $assoc[] = $row;
- }
- mysql_free_result($result);
- set_cached_data(3600, serialize($assoc), "get_mysql_assoc".$query);
- }
- return $assoc;
-}
-
-function get_mysql_user($clause) {
- $count = unserialize(get_cached_data(3600, "get_mysql_user".$clause));
- if ($count == false) {
- $result = mysql_query("select count(userid) as userid from (SELECT distinct userid FROM result where validate_state=1 and received_time > (unix_timestamp()-(3600*24*1)) " . $clause . ") t");
- $count = mysql_fetch_object($result);
- mysql_free_result($result);
- $count = $count->userid;
- set_cached_data(3600, serialize($count), "get_mysql_user".$clause);
+function get_cached_apps() {
+ $apps = unserialize(get_cached_data(3600, "get_cached_apps"));
+ if ($apps == false) {
+ $apps = BoincApp::enum("deprecated=0");
+ set_cached_data(3600, serialize($apps), "get_cached_apps");
}
- return $count;
+ return $apps;
}
function get_runtime_info($appid) {
$info = unserialize(get_cached_data(3600, "get_runtime_info".$appid));
if ($info == false) {
- $result = mysql_query("
- Select ceil(avg(elapsed_time)/3600*100)/100 as avg,
- ceil(min(elapsed_time)/3600*100)/100 as min,
- ceil(max(elapsed_time)/3600*100)/100 as max
- from (SELECT elapsed_time FROM `result` WHERE appid = $appid and validate_state =1 and received_time > (unix_timestamp()-(3600*24)) ORDER BY `received_time` DESC limit 100) t");
- $info = mysql_fetch_object($result);
- mysql_free_result($result);
+ $info = BoincDB::get()->lookup_fields("result", "stdClass",
+ "ceil(avg(elapsed_time)/3600*100)/100 as avg,
+ ceil(min(elapsed_time)/3600*100)/100 as min,
+ ceil(max(elapsed_time)/3600*100)/100 as max,
+ count(distinct userid) as users",
+ "appid = $appid
+ AND validate_state=1
+ AND received_time > (unix_timestamp()-(3600*24))
+ "
+ );
+ if (!$info){
+ // No recent jobs sound
+ $info = new stdClass;
+ $info->avg = $info->min = $info->max = $info->users = 0;
+ }
set_cached_data(3600, serialize($info), "get_runtime_info".$appid);
}
return $info;
@@ -340,39 +325,38 @@ if ($retval) {
show_counts(
tra("Tasks ready to send"),
"results_ready_to_send",
- get_mysql_count("result where server_state = 2")
+ get_mysql_count("result", "server_state = 2")
);
show_counts(
tra("Tasks in progress"),
"results_in_progress",
- get_mysql_count("result where server_state = 4")
+ get_mysql_count("result", "server_state = 4")
);
show_counts(
tra("Workunits waiting for validation"),
"workunits_waiting_for_validation",
- get_mysql_count("workunit where need_validate=1")
+ get_mysql_count("workunit", "need_validate=1")
);
show_counts(
tra("Workunits waiting for assimilation"),
"workunits_waiting_for_assimilation",
- get_mysql_count("workunit where assimilate_state=1")
+ get_mysql_count("workunit", "assimilate_state=1")
);
show_counts(
tra("Workunits waiting for file deletion"),
"workunits_waiting_for_deletion",
- get_mysql_count("workunit where file_delete_state=1")
+ get_mysql_count("workunit", "file_delete_state=1")
);
show_counts(
tra("Tasks waiting for file deletion"),
"results_waiting_for_deletion",
- get_mysql_count("result where file_delete_state=1")
+ get_mysql_count("result", "file_delete_state=1")
);
$gap = unserialize(get_cached_data(3600, "transitioner_backlog"));
if ($gap === false) {
- $result = mysql_query("select MIN(transition_time) as min from workunit");
- $min = mysql_fetch_object($result);
- mysql_free_result($result);
+ $min = BoincDB::get()->lookup_fields("workunit", "stdClass", "MIN(transition_time) as min", "TRUE");
+ //$gap = BoincDB::get()->min("workunit", "transition_time"); $gap = time()-$gap/3600;
$gap = (time() - $min->min)/3600;
if (($gap < 0) || ($min->min == 0)) {
$gap = 0;
@@ -386,78 +370,98 @@ if ($retval) {
);
if (!$xml) {
echo "</table></td><td>";
- echo "<table>";
- echo "<tr><th>".tra("Users")."</th><th>#</th></tr>";
+ echo "<table>";
+ echo "<tr><th>".tra("Users")."</th><th>#</th></tr>";
+ }
show_counts(
tra("with recent credit"),
"users_with_recent_credit",
- get_mysql_count("user where expavg_credit>1")
+ get_mysql_count("user", "expavg_credit>1")
);
show_counts(
tra("with credit"),
"users_with_credit",
- get_mysql_count("user where total_credit>0")
+ get_mysql_count("user", "total_credit>0")
);
show_counts(
tra("registered in past 24 hours"),
"users_registered_in_past_24_hours",
- get_mysql_count("user where create_time > (unix_timestamp() - (24*3600))")
+ get_mysql_count("user", "create_time > (unix_timestamp() - (24*3600))")
);
- echo "<tr><th>".tra("Computers")."</th><th>#</th></tr>";
+ if (!$xml) {
+ echo "<tr><th>".tra("Computers")."</th><th>#</th></tr>";
+ }
show_counts(
tra("with recent credit"),
"hosts_with_recent_credit",
- get_mysql_count("host where expavg_credit>1")
+ get_mysql_count("host", "expavg_credit>1")
);
show_counts(
tra("with credit"),
"hosts_with_credit",
- get_mysql_count("host where total_credit>0")
+ get_mysql_count("host", "total_credit>0")
);
show_counts(
tra("registered in past 24 hours"),
"hosts_registered_in_past_24_hours",
- get_mysql_count("host where create_time > (unix_timestamp() - (24*3600))")
+ get_mysql_count("host", "create_time > (unix_timestamp() - (24*3600))")
);
// 200 cobblestones = 1 GigaFLOPS
show_counts(
tra("current GigaFLOPs"),
"current_floating_point_speed",
- get_mysql_value("SELECT sum(expavg_credit)/200 as value FROM user")
+ get_mysql_sum("user", "expavg_credit/200")
);
+ if (!$xml) {
+ end_table();
+ echo "</td></tr></table>";
- end_table();
- echo "</td></tr></table>";
-
- start_table();
- echo "<tr><th colspan=5>".tra("Tasks by application")."</th></tr>";
- row_heading_array(
- array(
- tra("application"),
- tra("unsent"),
- tra("in progress"),
- tra("avg runtime of last 100 results in h (min-max)"),
- tra("users in last 24h")
- )
- );
- $apps = get_mysql_assoc("SELECT * FROM app WHERE deprecated != 1");
+ start_table();
+ echo "<tr><th colspan=5>".tra("Tasks by application")."</th></tr>";
+ row_heading_array(
+ array(
+ tra("application"),
+ tra("unsent"),
+ tra("in progress"),
+ tra("avg runtime of last 100 results in h (min-max)"),
+ tra("users in last 24h")
+ )
+ );
+ }
+ $apps = get_cached_apps();
+ if ($xml) {
+ echo " <tasks_by_app>\n";
+ }
foreach($apps as $app) {
- $appid = $app["id"];
- $uf_name = $app["user_friendly_name"];
- echo "<tr><td>$uf_name</td>
- <td>" . number_format(get_mysql_count("result where server_state = 2 and appid = $appid")) . "</td>
- <td>" . number_format(get_mysql_count("result where server_state = 4 and appid = $appid")) . "</td>
- <td>"
- ;
- $info = get_runtime_info($appid);
- echo number_format($info->avg,2) . " (" . number_format($info->min,2) . " - " . number_format($info->max,2) . ")";
- echo "</td>
- <td>" . number_format(get_mysql_user("and appid = $appid")) . "</td>
- </tr>"
- ;
+ $info = get_runtime_info($app->id);
+ if ($xml) {
+ echo " <app>\n";
+ echo " <id>".$app->id."</id>\n";
+ echo " <name>".$app->name."</name>\n";
+ echo " <unsent>".get_mysql_count("result", "server_state = 2 and appid = ".$app->id)."</unsent>\n";
+ echo " <in_progress>".get_mysql_count("result", "server_state = 4 and appid = ".$app->id)."</in_progress>\n";
+ echo " <avg_runtime>".round($info->avg, 2)."</avg_runtime>\n";
+ echo " <min_runtime>".round($info->min, 2)."</min_runtime>\n";
+ echo " <max_runtime>".round($info->max, 2)."</max_runtime>\n";
+ echo " <users_24h>".$info->users."</users_24h>\n";
+ echo " </app>\n";
+ } else {
+ echo "<tr><td>".$app->user_friendly_name."</td>
+ <td>" . number_format(get_mysql_count("result", "server_state = 2 and appid = ".$app->id)) . "</td>
+ <td>" . number_format(get_mysql_count("result", "server_state = 4 and appid = ".$app->id)) . "</td>
+ <td>"
+ ;
+ echo number_format($info->avg,2) . " (" . number_format($info->min,2) . " - " . number_format($info->max,2) . ")";
+ echo "</td>
+ <td>" . number_format($info->users) . "</td>
+ </tr>"
+ ;
+ }
}
- end_table();
-
+ if ($xml) {
+ echo " </tasks_by_app>\n";
+ } else {
+ end_table();
}
}
diff --git a/html/user/show_user.php b/html/user/show_user.php
index c7d9fa1..494f425 100644
--- a/html/user/show_user.php
+++ b/html/user/show_user.php
@@ -45,13 +45,13 @@ if ($format=="xml"){
$retval = db_init_xml();
if ($retval) xml_error($retval);
if ($auth){
- $user = lookup_user_auth($auth);
+ $user = BoincUser::lookup_auth($auth);
$show_hosts = true;
} else {
- $user = lookup_user_id($id);
+ $user = BoincUser::lookup_id($id);
$show_hosts = false;
}
- if (!$user) xml_error(-136);
+ if (!$user) xml_error(ERR_DB_NOT_FOUND);
show_user_xml($user, $show_hosts);
} else {
@@ -70,7 +70,10 @@ if ($format=="xml"){
$community_links = $data->clo;
} else {
// No data was found, generate new data for the cache and store it
- $user = lookup_user_id($id);
+ $user = BoincUser::lookup_id($id);
+ if (!$user) {
+ error_page("No such user $id");
+ }
BoincForumPrefs::lookup($user);
$user = @get_other_projects($user);
$community_links = get_community_links_object($user);
@@ -96,7 +99,10 @@ if ($format=="xml"){
show_other_projects($user, false);
echo "</td><td valign=top>";
start_table();
- show_profile_link($user);
+ show_badges(true, $user);
+ if (!DISABLE_PROFILES) {
+ show_profile_link($user);
+ }
community_links($community_links, $logged_in_user);
end_table();
echo "</td></tr></table>";
diff --git a/html/user/stats.php b/html/user/stats.php
index 18e48f1..5177966 100644
--- a/html/user/stats.php
+++ b/html/user/stats.php
@@ -24,13 +24,20 @@ check_get_args(array());
start_table();
echo "
-<tr><td>"
-. tra("Statistics for %1",PROJECT).":
-<ul>
-<li><a href=\"top_users.php\">" . tra("Top participants")."</a>
-<li><a href=\"top_hosts.php\">" . tra("Top computers")."</a>
-<li><a href=\"top_teams.php\">" . tra("Top teams"). "</a>
-<li><a href=\"gpu_list.php\">" . tra("Top GPU models"). "</a>
+ <tr><td>"
+ . tra("Statistics for %1",PROJECT).":
+ <ul>
+ <li><a href=\"top_users.php\">" . tra("Top participants")."</a>
+ <li><a href=\"top_hosts.php\">" . tra("Top computers")."</a>
+";
+if (!DISABLE_TEAMS) {
+ echo "
+ <li><a href=\"top_teams.php\">" . tra("Top teams"). "</a>
+ ";
+}
+echo "
+<li><a href=\"gpu_list.php\">" . tra("GPU models"). "</a>
+<li><a href=\"cpu_list.php\">" . tra("CPU models"). "</a>
</ul>
<p>".
diff --git a/html/user/submit.php b/html/user/submit.php
index 92f9160..7db0b37 100644
--- a/html/user/submit.php
+++ b/html/user/submit.php
@@ -203,21 +203,23 @@ function handle_main($user) {
page_head("Job submission and control");
- // show links to per-app job submission pages
- //
- echo "<h2>Submit jobs</h2>
- <ul>
- ";
- foreach ($submit_urls as $appname=>$submit_url) {
- $appname = BoincDb::escape_string($appname);
- $app = BoincApp::lookup("name='$appname'");
- if (!$app) error_page("bad submit_url name: $appname");
- $usa = BoincUserSubmitApp::lookup("user_id=$user->id and app_id=$app->id");
- if ($usa || $user_submit->submit_all) {
- echo "<li> <a href=$submit_url> $app->user_friendly_name </a>";
+ if (isset($submit_urls)) {
+ // show links to per-app job submission pages
+ //
+ echo "<h2>Submit jobs</h2>
+ <ul>
+ ";
+ foreach ($submit_urls as $appname=>$submit_url) {
+ $appname = BoincDb::escape_string($appname);
+ $app = BoincApp::lookup("name='$appname'");
+ if (!$app) error_page("bad submit_url name: $appname");
+ $usa = BoincUserSubmitApp::lookup("user_id=$user->id and app_id=$app->id");
+ if ($usa || $user_submit->submit_all) {
+ echo "<li> <a href=$submit_url> $app->user_friendly_name </a>";
+ }
}
+ echo "</ul>\n";
}
- echo "</ul>\n";
// show links to admin pages if relevant
//
@@ -250,9 +252,12 @@ function handle_main($user) {
$app = BoincApp::lookup_id($usa->app_id);
echo "<li>$app->user_friendly_name<br>
<a href=submit.php?action=admin&app_id=$app->id>Batches</a>
- ·
- <a href=manage_app.php?app_id=$app->id&action=app_version_form>Versions</a>
";
+ if ($usa->manage) {
+ echo "·
+ <a href=manage_app.php?app_id=$app->id&action=app_version_form>Versions</a>
+ ";
+ }
}
}
echo "</ul>\n";
@@ -310,7 +315,8 @@ function handle_query_batch($user) {
row2("state", batch_state_string($batch->state));
row2("# jobs", $batch->njobs);
row2("# error jobs", $batch->nerror_jobs);
- row2("logical end time", time_str($batch->logical_end_time));
+ //row2("logical end time", time_str($batch->logical_end_time));
+ row2("expiration time", time_str($batch->expire_time));
row2("progress", sprintf("%.0f%%", $batch->fraction_done*100));
if ($batch->completion_time) {
row2("completed", local_time_str($batch->completion_time));
@@ -403,20 +409,19 @@ function handle_query_job($user) {
table_header("Logical name<br><span class=note>(click to view)</span>",
"Size (bytes)", "MD5"
);
- $fanout = parse_config(get_config(), "<uldl_dir_fanout>");
foreach ($x->workunit->file_ref as $fr) {
$pname = (string)$fr->file_name;
$lname = (string)$fr->open_name;
- $dir = filename_hash($pname, $fanout);
- $path = "../../download/$dir/$pname";
- $md5 = md5_file($path);
- $s = stat($path);
- $size = $s['size'];
- table_row(
- "<a href=download/$dir/$pname>$lname</a>",
- $size,
- $md5
- );
+ foreach ($x->file_info as $fi) {
+ if ((string)$fi->name == $pname) {
+ table_row(
+ "<a href=$fi->url>$lname</a>",
+ $fi->nbytes,
+ $fi->md5_cksum
+ );
+ break;
+ }
+ }
}
end_table();
@@ -427,6 +432,8 @@ function handle_query_job($user) {
"State", "Output files<br><span class=note>click to view the file</span>"
);
$results = BoincResult::enum("workunitid=$wuid");
+ $upload_dir = parse_config(get_config(), "<upload_dir>");
+ $fanout = parse_config(get_config(), "<uldl_dir_fanout>");
foreach($results as $result) {
echo "<tr>
<td><a href=result.php?resultid=$result->id>$result->id · $result->name </a></td>
@@ -436,11 +443,9 @@ function handle_query_job($user) {
$i = 0;
if ($result->server_state == 5) {
$names = get_outfile_names($result);
- $fanout = parse_config(get_config(), "<uldl_dir_fanout>");
$i = 0;
foreach ($names as $name) {
$url = boinc_get_output_file_url($user, $result, $i++);
- $upload_dir = parse_config(get_config(), "<upload_dir>");
$path = dir_hier_path($name, $upload_dir, $fanout);
$s = stat($path);
$size = $s['size'];
diff --git a/html/user/submit_example.php b/html/user/submit_example.php
index 390a465..15d7947 100644
--- a/html/user/submit_example.php
+++ b/html/user/submit_example.php
@@ -33,6 +33,7 @@
require_once("../inc/submit.inc");
require_once("../inc/common_defs.inc");
require_once("../inc/submit_db.inc");
+require_once("../inc/submit_util.inc");
// needed for access control stuff
require_once("../inc/util.inc");
require_once("../project/project.inc");
@@ -54,10 +55,11 @@ $auth = $user->authenticator;
//
function handle_main() {
global $project, $auth;
+ $req = new StdClass;
$req->project = $project;
$req->authenticator = $auth;
list($batches, $errmsg) = boinc_query_batches($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Job submission and control");
@@ -241,14 +243,16 @@ function form_to_request() {
$param_inc = (double)get_str('param_inc');
if ($param_inc < 1) error_page("param inc must be >= 1");
+ $req = new StdClass;
$req->project = $project;
$req->authenticator = $auth;
$req->app_name = APP_NAME;
$req->batch_name = get_str('batch_name');
- $req->jobs = Array();
-
+ $req->jobs = array();
+
+ $f = new StdClass;
$f->source = $input_url;
- $f->mode = "semilocal";
+ $f->mode = 'semilocal';
for ($x=$param_lo; $x<$param_hi; $x += $param_inc) {
$job = new StdClass;
@@ -270,7 +274,7 @@ function handle_create_action() {
if ($get_estimate) {
$req = form_to_request($project, $auth);
list($e, $errmsg) = boinc_estimate_batch($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Batch estimate");
echo sprintf("Estimate: %.0f seconds", $e);
echo "<p><a href=submit_example.php>Return to job control page</a>\n";
@@ -278,7 +282,7 @@ function handle_create_action() {
} else {
$req = form_to_request($project, $auth);
list($id, $errmsg) = boinc_submit_batch($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Batch submitted");
echo "Batch created, ID: $id\n";
echo "<p><a href=submit_example.php>Return to job control page</a>\n";
@@ -290,11 +294,13 @@ function handle_create_action() {
//
function handle_query_batch() {
global $project, $auth;
- $req->project = $project;
- $req->authenticator = $auth;
- $req->batch_id = get_int('batch_id');
+ $req = (object)array(
+ 'project' => $project,
+ 'authenticator' => $auth,
+ 'batch_id' => get_int('batch_id'),
+ );
list($batch, $errmsg) = boinc_query_batch($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Batch $req->batch_id");
start_table();
@@ -364,11 +370,13 @@ function handle_query_batch() {
//
function handle_query_job() {
global $project, $auth;
+ $req = new StdClass;
$req->project = $project;
$req->authenticator = $auth;
$req->job_id = get_int('job_id');
+
list($reply, $errmsg) = boinc_query_job($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Job $req->job_id");
echo "<a href=$project/workunit.php?wuid=$req->job_id>View workunit page on BOINC server</a>\n";
@@ -421,7 +429,7 @@ function handle_abort_batch() {
$req->authenticator = $auth;
$req->batch_id = get_int('batch_id');
$errmsg = boinc_abort_batch($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Batch aborted");
echo "<p><a href=submit_example.php>Return to job control page</a>\n";
page_tail();
@@ -449,7 +457,7 @@ function handle_retire_batch() {
$req->authenticator = $auth;
$req->batch_id = get_int('batch_id');
$errmsg = boinc_retire_batch($req);
- if ($errmsg) error_page($errmsg);
+ if ($errmsg) error_page(htmlentities($errmsg));
page_head("Batch retired");
echo "<p><a href=submit_example.php>Return to job control page</a>\n";
page_tail();
diff --git a/html/user/submit_rpc_handler.php b/html/user/submit_rpc_handler.php
index fa55d1a..042f2ce 100644
--- a/html/user/submit_rpc_handler.php
+++ b/html/user/submit_rpc_handler.php
@@ -44,10 +44,20 @@ function get_app($name) {
return $app;
}
-function batch_flop_count($r) {
+// estimate FLOP count for a batch.
+// If estimates aren't included in the job descriptions,
+// use what's in the input template
+//
+function batch_flop_count($r, $template) {
$x = 0;
+ $t = (double)$template->workunit->rsc_fpops_est;
foreach($r->batch->job as $job) {
- $x += (double)$job->rsc_fpops_est;
+ $y = (double)$job->rsc_fpops_est;
+ if ($y) {
+ $x += $y;
+ } else {
+ $x += $t;
+ }
}
return $x;
}
@@ -61,25 +71,37 @@ function project_flops() {
return $y;
}
-function est_elapsed_time($r) {
+function est_elapsed_time($r, $template) {
// crude estimate: batch FLOPs / project FLOPS
//
- return batch_flop_count($r) / project_flops();
+ return batch_flop_count($r, $template) / project_flops();
+}
+
+function read_input_template($app) {
+ $path = "../../templates/$app->name"."_in";
+ return simplexml_load_file($path);
+}
+
+function check_max_jobs_in_progress($r, $user_submit) {
+ if (!$user_submit->max_jobs_in_progress) return;
+ $query = "select count(*) as total from DBNAME.result, DBNAME.batch where batch.user_id=$userid and result.batch = batch.id and result.server_state<".RESULT_SERVER_STATE_OVER;
+ $db = BoincDb::get();
+ $n = $db->get_int($query);
+ if ($n === false) return;
+ if ($n + count($r->batch->job) > $user_submit->max_jobs_in_progress) {
+ xml_error(-1, "BOINC server: limit on jobs in progress exceeded");
+ }
}
function estimate_batch($r) {
$app = get_app((string)($r->batch->app_name));
list($user, $user_submit) = authenticate_user($r, $app);
- $e = est_elapsed_time($r);
+ $template = read_input_template($app);
+ $e = est_elapsed_time($r, $template);
echo "<estimate>\n<seconds>$e</seconds>\n</estimate>\n";
}
-function read_input_template($app) {
- $path = "../../templates/$app->name"."_in";
- return simplexml_load_file($path);
-}
-
function validate_batch($jobs, $template) {
$i = 0;
$n = count($template->file_info);
@@ -98,16 +120,20 @@ $fanout = parse_config(get_config(), "<uldl_dir_fanout>");
//
function stage_file($file) {
global $fanout;
+ $download_dir = parse_config(get_config(), "<download_dir>");
switch ($file->mode) {
case "semilocal":
case "local":
+ // read the file (from disk or network) to get MD5.
+ // Copy to download hier, using a physical name based on MD5
+ //
$md5 = md5_file($file->source);
if (!$md5) {
xml_error(-1, "BOINC server: Can't get MD5 of file $file->source");
}
$name = "jf_$md5";
- $path = dir_hier_path($name, "../../download", $fanout);
+ $path = dir_hier_path($name, $download_dir, $fanout);
if (file_exists($path)) return $name;
if (!copy($file->source, $path)) {
xml_error(-1, "BOINC server: can't copy file from $file->source to $path");
@@ -121,7 +147,7 @@ function stage_file($file) {
xml_error(-1, "BOINC server: Can't get MD5 of inline data");
}
$name = "jf_$md5";
- $path = dir_hier_path($name, "../../download", $fanout);
+ $path = dir_hier_path($name, $download_dir, $fanout);
if (file_exists($path)) return $name;
if (!file_put_contents($path, $file->source)) {
xml_error(-1, "BOINC server: can't write to file $path");
@@ -136,23 +162,48 @@ function stage_file($file) {
function stage_files(&$jobs, $template) {
foreach($jobs as $job) {
foreach ($job->input_files as $file) {
- $file->name = stage_file($file);
+ if ($file->mode != "remote") {
+ $file->name = stage_file($file);
+ }
}
}
}
-function submit_job($job, $template, $app, $batch_id, $i, $priority) {
- $cmd = "cd ../..; ./bin/create_work --appname $app->name --batch $batch_id --rsc_fpops_est $job->rsc_fpops_est --priority $priority";
- if ($job->command_line) {
- $cmd .= " --command_line \"$job->command_line\"";
+function submit_jobs($jobs, $template, $app, $batch_id, $priority) {
+ $x = "";
+ foreach($jobs as $job) {
+ if ($job->name) {
+ $x .= " --wu_name $job->name";
+ }
+ if ($job->command_line) {
+ $x .= " --command_line \"$job->command_line\"";
+ }
+ if ($job->target_team) {
+ $x .= " --target_team $job->target_team";
+ } elseif ($job->target_user) {
+ $x .= " --target_user $job->target_user";
+ } elseif ($job->target_host) {
+ $x .= " --target_host $job->target_host";
+ }
+ foreach ($job->input_files as $file) {
+ if ($file->mode == "remote") {
+ $x .= " --remote_file $file->url $file->nbytes $file->md5";
+ } else {
+ $x .= " $file->name";
+ }
+ }
+ $x .= "\n";
}
- $cmd .= " --wu_name $job->name";
- foreach ($job->input_files as $file) {
- $cmd .= " $file->name";
+
+ $cmd = "cd ../..; ./bin/create_work --appname $app->name --batch $batch_id --rsc_fpops_est $job->rsc_fpops_est --priority $priority --stdin";
+ $h = popen($cmd, "w");
+ if ($h === false) {
+ xml_error(-1, "BOINC server: can't run create_work");
}
- $ret = system($cmd);
- if ($ret === FALSE) {
- xml_error(-1, "BOINC server: can't create job");
+ fwrite($h, $x);
+ $ret = pclose($h);
+ if ($ret) {
+ xml_error(-1, "BOINC server: create_work failed");
}
}
@@ -162,12 +213,21 @@ function xml_get_jobs($r) {
$job = new StdClass;
$job->input_files = array();
$job->command_line = (string)$j->command_line;
+ $job->target_team = (int)$j->target_team;
+ $job->target_user = (int)$j->target_user;
+ $job->target_host = (int)$j->target_host;
$job->name = (string)$j->name;
$job->rsc_fpops_est = (double)$j->rsc_fpops_est;
foreach ($j->input_file as $f) {
$file = new StdClass;
$file->mode = (string)$f->mode;
- $file->source = (string)$f->source;
+ if ($file->mode == "remote") {
+ $file->url = (string)$f->url;
+ $file->nbytes = (double)$f->nbytes;
+ $file->md5 = (string)$f->md5;
+ } else {
+ $file->source = (string)$f->source;
+ }
$job->input_files[] = $file;
}
$jobs[] = $job;
@@ -229,17 +289,15 @@ function submit_batch($r) {
} else {
$batch_name = (string)($r->batch->batch_name);
$batch_id = BoincBatch::insert(
- "(user_id, create_time, njobs, name, app_id, logical_end_time, state) values ($user->id, $now, $njobs, '$batch_name', $app->id, $let, ".BATCH_STATE_IN_INIT.")"
+ "(user_id, create_time, njobs, name, app_id, logical_end_time, state) values ($user->id, $now, $njobs, '$batch_name', $app->id, $let, ".BATCH_STATE_INIT.")"
);
if (!$batch_id) {
- xml_error(-1, "BOINC server: Can't create batch: ".mysql_error());
+ xml_error(-1, "BOINC server: Can't create batch: ".BoincDb::error());
}
$batch = BoincBatch::lookup_id($batch_id);
}
- $i = 0;
- foreach($jobs as $job) {
- submit_job($job, $template, $app, $batch_id, $i++, $let);
- }
+
+ submit_jobs($jobs, $template, $app, $batch_id, $let);
// set state to IN_PROGRESS only after creating jobs;
// otherwise we might flag batch as COMPLETED
@@ -255,11 +313,12 @@ function create_batch($r) {
list($user, $user_submit) = authenticate_user($r, $app);
$now = time();
$batch_name = (string)($r->batch->batch_name);
+ $expire_time = (double)($r->expire_time);
$batch_id = BoincBatch::insert(
- "(user_id, create_time, name, app_id, state) values ($user->id, $now, '$batch_name', $app->id, ".BATCH_STATE_INIT.")"
+ "(user_id, create_time, name, app_id, state, expire_time) values ($user->id, $now, '$batch_name', $app->id, ".BATCH_STATE_INIT.", $expire_time)"
);
if (!$batch_id) {
- xml_error(-1, "BOINC server: Can't create batch: ".mysql_error());
+ xml_error(-1, "BOINC server: Can't create batch: ".BoincDb::error());
}
echo "<batch_id>$batch_id</batch_id>\n";
}
@@ -270,6 +329,7 @@ function print_batch_params($batch) {
echo "
<id>$batch->id</id>
<create_time>$batch->create_time</create_time>
+ <expire_time>$batch->expire_time</expire_time>
<est_completion_time>$batch->est_completion_time</est_completion_time>
<njobs>$batch->njobs</njobs>
<fraction_done>$batch->fraction_done</fraction_done>
@@ -337,6 +397,7 @@ function query_batch($r) {
foreach ($wus as $wu) {
echo " <job>
<id>$wu->id</id>
+ <name>$wu->name</name>
<canonical_instance_id>$wu->canonical_resultid</canonical_instance_id>
<n_outfiles>$n_outfiles</n_outfiles>
</job>
@@ -365,9 +426,18 @@ function query_batch2($r) {
$batches[] = $batch;
}
+ $min_mod_time = (double)$r->min_mod_time;
+ if ($min_mod_time) {
+ $mod_time_clause = "and mod_time > FROM_UNIXTIME($min_mod_time)";
+ } else {
+ $mod_time_clause = "";
+ }
+
+ $t = dtime();
+ echo "<server_time>$t</server_time>\n";
echo "<jobs>\n";
foreach ($batches as $batch) {
- $wus = BoincWorkunit::enum("batch = $batch->id");
+ $wus = BoincWorkunit::enum("batch = $batch->id $mod_time_clause");
echo " <batch_size>".count($wus)."</batch_size>\n";
foreach ($wus as $wu) {
if ($wu->canonical_resultid) {
@@ -515,6 +585,20 @@ function handle_retire_batch($r) {
echo "<success>1</success>";
}
+function handle_set_expire_time($r) {
+ list($user, $user_submit) = authenticate_user($r, null);
+ $batch = get_batch($r);
+ if ($batch->user_id != $user->id) {
+ xml_error(-1, "not owner");
+ }
+ $expire_time = (double)($r->expire_time);
+ if ($batch->update("expire_time=$expire_time")) {
+ echo "<success>1</success>";
+ } else {
+ xml_error(-1, "update failed");
+ }
+}
+
function get_templates($r) {
$app_name = (string)($r->app_name);
if ($app_name) {
@@ -563,7 +647,7 @@ exit;
if (0) {
$r = simplexml_load_string("
-<submit_batch>
+<estimate_batch>
<authenticator>x</authenticator>
<batch>
<app_name>remote_test</app_name>
@@ -577,12 +661,16 @@ $r = simplexml_load_string("
</input_file>
</job>
</batch>
-</submit_batch>
+</estimate_batch>
");
-submit_batch($r);
+estimate_batch($r);
exit;
}
+if (0) {
+ require_once("submit_test.inc");
+}
+
xml_header();
$r = simplexml_load_string($_POST['request']);
@@ -603,6 +691,7 @@ switch ($r->getName()) {
case 'query_job': query_job($r); break;
case 'query_completed_job': query_completed_job($r); break;
case 'retire_batch': handle_retire_batch($r); break;
+ case 'set_expire_time': handle_set_expire_time($r); break;
case 'submit_batch': submit_batch($r); break;
default: xml_error(-1, "bad command: ".$r->getName());
}
diff --git a/html/user/team.php b/html/user/team.php
index 41cad21..445a776 100644
--- a/html/user/team.php
+++ b/html/user/team.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ include_once("../inc/db.inc");
include_once("../inc/util.inc");
include_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
page_head(tra("Teams"));
diff --git a/html/user/team_admins.php b/html/user/team_admins.php
index 96f2c25..fbc2d6a 100644
--- a/html/user/team_admins.php
+++ b/html/user/team_admins.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("tnow", "ttok", "userid", "email_addr", "teamid", "action"));
function show_admin($user, $admin) {
diff --git a/html/user/team_change_founder_action.php b/html/user/team_change_founder_action.php
index 5a2a384..f113ed9 100644
--- a/html/user/team_change_founder_action.php
+++ b/html/user/team_change_founder_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/util.inc");
require_once("../inc/team.inc");
require_once("../inc/boinc_db.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("tnow", "ttok"));
$user = get_logged_in_user();
diff --git a/html/user/team_change_founder_form.php b/html/user/team_change_founder_form.php
index 3a0c64d..2e37433 100644
--- a/html/user/team_change_founder_form.php
+++ b/html/user/team_change_founder_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -23,6 +23,8 @@ require_once("../inc/util.inc");
require_once("../inc/team.inc");
require_once("../inc/boinc_db.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("teamid"));
$user = get_logged_in_user();
@@ -104,10 +106,10 @@ if ($navailable_users > 0) {
end_table();
echo "<input type=submit value=\"".tra("Change founder")."\">";
} else {
- echo '<tr>
- <td colspan="4">".tra("There are no users to transfer team to.")."</td>
+ echo "<tr>
+ <td colspan='4'>".tra("There are no users to transfer team to.")."</td>
</tr>
- ';
+ ";
end_table();
}
echo "</form>";
diff --git a/html/user/team_create_action.php b/html/user/team_create_action.php
index ece61e3..b2e8e5a 100644
--- a/html/user/team_create_action.php
+++ b/html/user/team_create_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
$user = get_logged_in_user();
diff --git a/html/user/team_create_form.php b/html/user/team_create_form.php
index d68f461..bee7444 100644
--- a/html/user/team_create_form.php
+++ b/html/user/team_create_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
$user = get_logged_in_user();
diff --git a/html/user/team_delta.php b/html/user/team_delta.php
index 8de4695..9d28836 100644
--- a/html/user/team_delta.php
+++ b/html/user/team_delta.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,11 +16,12 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-
require_once("../inc/boinc_db.inc");
require_once("../inc/user.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("xml", "teamid"));
$xml = get_int('xml', true);
diff --git a/html/user/team_display.php b/html/user/team_display.php
index 8289b5a..2ea89ed 100644
--- a/html/user/team_display.php
+++ b/html/user/team_display.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@ require_once("../inc/util.inc");
require_once("../inc/boinc_db.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("teamid"));
$teamid = get_int("teamid");
diff --git a/html/user/team_edit_action.php b/html/user/team_edit_action.php
index 8a2a6bd..0fb16e7 100644
--- a/html/user/team_edit_action.php
+++ b/html/user/team_edit_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@ require_once("../inc/team.inc");
require_once("../inc/sanitize_html.inc");
require_once("../inc/boinc_db.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
$user = get_logged_in_user();
diff --git a/html/user/team_edit_form.php b/html/user/team_edit_form.php
index cfc36b6..75793bd 100644
--- a/html/user/team_edit_form.php
+++ b/html/user/team_edit_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("teamid"));
$user = get_logged_in_user();
diff --git a/html/user/team_email_list.php b/html/user/team_email_list.php
index daa8749..ef5be1e 100644
--- a/html/user/team_email_list.php
+++ b/html/user/team_email_list.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,22 +21,31 @@ require_once("../inc/util.inc");
require_once("../inc/email.inc");
require_once("../inc/team.inc");
-check_get_args(array("xml", "creditonly", "teamid", "account_key", "plain"));
-
$xml = get_int('xml', true);
if ($xml) {
- $creditonly = get_int('creditonly', true);
require_once("../inc/xml.inc");
+}
+
+if (DISABLE_TEAMS) {
+ if ($xml) {
+ xml_error(-1, "Teams are disabled");
+ } else {
+ error_page("Teams are disabled");
+ }
+}
+
+if ($xml) {
+ $creditonly = get_int('creditonly', true);
xml_header();
$retval = db_init_xml();
if ($retval) xml_error($retval);
$teamid = get_int("teamid");
$team = BoincTeam::lookup_id($teamid);
if (!$team) {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
$account_key = get_str('account_key', true);
- $user = lookup_user_auth($account_key);
+ $user = BoincUser::lookup_auth($account_key);
$show_email = ($user && is_team_founder($user, $team));
echo "<users>\n";
$users = BoincUser::enum_fields("id, email_addr, send_email, name, total_credit, expavg_credit, expavg_time, has_profile, donated, country, cross_project_id, create_time, url", "teamid=$team->id");
diff --git a/html/user/team_forum.php b/html/user/team_forum.php
index c0a9819..ccea250 100644
--- a/html/user/team_forum.php
+++ b/html/user/team_forum.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -22,6 +22,8 @@ require_once("../inc/util.inc");
require_once("../inc/team.inc");
require_once("../inc/forum_db.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("tnow", "ttok", "teamid", "cmd"));
function create_confirm($user, $team) {
diff --git a/html/user/team_founder_transfer_action.php b/html/user/team_founder_transfer_action.php
index 4feb56c..4f80c86 100644
--- a/html/user/team_founder_transfer_action.php
+++ b/html/user/team_founder_transfer_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -29,6 +29,8 @@ require_once("../inc/team.inc");
require_once("../inc/email.inc");
require_once("../inc/pm.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
$user = get_logged_in_user();
@@ -37,7 +39,7 @@ if (!$user->teamid) {
}
function send_founder_transfer_email($team, $user) {
- $founder = lookup_user_id($team->userid);
+ $founder = BoincUser::lookup_id($team->userid);
// send founder a private message for good measure
diff --git a/html/user/team_founder_transfer_form.php b/html/user/team_founder_transfer_form.php
index 8d874ff..2450625 100644
--- a/html/user/team_founder_transfer_form.php
+++ b/html/user/team_founder_transfer_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
$user = get_logged_in_user();
diff --git a/html/user/team_join.php b/html/user/team_join.php
index fa0d1b5..34af812 100644
--- a/html/user/team_join.php
+++ b/html/user/team_join.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("teamid", "tnow", "ttok"));
$user = get_logged_in_user(true);
diff --git a/html/user/team_join_action.php b/html/user/team_join_action.php
index 040f508..9071bd2 100644
--- a/html/user/team_join_action.php
+++ b/html/user/team_join_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("tnow", "ttok"));
$user = get_logged_in_user(true);
diff --git a/html/user/team_join_form.php b/html/user/team_join_form.php
index 766d9f9..23312ec 100644
--- a/html/user/team_join_form.php
+++ b/html/user/team_join_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,13 +16,13 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("id"));
-db_init();
$user = get_logged_in_user();
$teamid = get_int("id");
diff --git a/html/user/team_lookup.php b/html/user/team_lookup.php
index c75b8d4..34abc9e 100644
--- a/html/user/team_lookup.php
+++ b/html/user/team_lookup.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("format", "team_id", "team_ids", "team_name"));
$format = get_str("format", true);
@@ -38,7 +40,7 @@ if ($team_id) {
if ($team) {
show_team_xml($team);
} else {
- xml_error(-136);
+ xml_error(ERR_DB_NOT_FOUND);
}
exit();
}
diff --git a/html/user/team_manage.php b/html/user/team_manage.php
index 0a09504..c9b3763 100644
--- a/html/user/team_manage.php
+++ b/html/user/team_manage.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("teamid", "action", "tnow", "ttok"));
function show_admin_page($user, $team) {
diff --git a/html/user/team_members.php b/html/user/team_members.php
index 07ffd58..81f3fa8 100644
--- a/html/user/team_members.php
+++ b/html/user/team_members.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,10 +20,13 @@ require_once("../inc/util.inc");
require_once("../inc/team.inc");
require_once("../inc/cache.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("sort_by", "offset", "teamid"));
if (isset($_GET["sort_by"])) {
$sort_by = $_GET["sort_by"];
+ $sort_by = strip_tags($sort_by); // remove XSS nonsense
} else {
$sort_by = "expavg_credit";
}
@@ -41,6 +44,7 @@ $cache_args = "teamid=$teamid";
$team = unserialize(get_cached_data(TEAM_PAGE_TTL, $cache_args));
if (!$team) {
$team = BoincTeam::lookup_id($teamid);
+ if (!$team) error_page("no such team");
set_cached_data(TEAM_PAGE_TTL, serialize($team), $cache_args);
}
diff --git a/html/user/team_quit_action.php b/html/user/team_quit_action.php
index 985a1cc..67a2ea8 100644
--- a/html/user/team_quit_action.php
+++ b/html/user/team_quit_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,13 +16,13 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("tnow", "ttok"));
-db_init();
$user = get_logged_in_user(true);
check_tokens($user->authenticator);
$teamid = post_int("id");
diff --git a/html/user/team_quit_form.php b/html/user/team_quit_form.php
index de2f6ad..a8cec4a 100644
--- a/html/user/team_quit_form.php
+++ b/html/user/team_quit_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -16,13 +16,13 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-require_once("../inc/db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
-db_init();
$user = get_logged_in_user(true);
$team = lookup_team($user->teamid);
diff --git a/html/user/team_remove_inactive_action.php b/html/user/team_remove_inactive_action.php
index ef1ccaa..9cbfeb1 100644
--- a/html/user/team_remove_inactive_action.php
+++ b/html/user/team_remove_inactive_action.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array());
$user = get_logged_in_user();
diff --git a/html/user/team_remove_inactive_form.php b/html/user/team_remove_inactive_form.php
index 9db9186..a590592 100644
--- a/html/user/team_remove_inactive_form.php
+++ b/html/user/team_remove_inactive_form.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/boinc_db.inc");
require_once("../inc/util.inc");
require_once("../inc/team.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("teamid"));
ini_set("memory_limit", "1024M");
diff --git a/html/user/team_search.php b/html/user/team_search.php
index 91aa5b0..6a2cecf 100644
--- a/html/user/team_search.php
+++ b/html/user/team_search.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -22,6 +22,8 @@ include_once("../inc/team.inc");
include_once("../inc/team_types.inc");
include_once("../inc/xml.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("keywords", "active", "country", "type", "submit", "xml"));
// Merge list1 into list2.
@@ -66,6 +68,11 @@ function show_list($list) {
echo "
<tr>
<th>".tra("Team name")."</th>
+ ";
+ if (defined("SHOW_NONVALIDATED_TEAMS")) {
+ echo "<th>Validated?</th>\n";
+ }
+ echo "
<th>".tra("Description")."</th>
<th>".tra("Average credit")."</th>
<th>".tra("Type")."</th>
@@ -78,6 +85,14 @@ function show_list($list) {
$j = $i++ % 2;
echo "<tr class=row$j>
<td><a href=team_display.php?teamid=$team->id>$team->name</a></td>
+ ";
+ if (defined("SHOW_NONVALIDATED_TEAMS")) {
+ $user = BoincUser::lookup_id($team->userid);
+ echo "<td>";
+ echo $user->email_validated?"Yes":"No";
+ echo "</td>\n";
+ }
+ echo "
<td><span class=note>".sanitize_html($team->description)."</span></td>
<td>".format_credit($team->expavg_credit)."</td>
<td>$type</td>
diff --git a/html/user/top_teams.php b/html/user/top_teams.php
index e5f9fa2..4e72c04 100644
--- a/html/user/top_teams.php
+++ b/html/user/top_teams.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -21,6 +21,8 @@ require_once("../inc/util.inc");
require_once("../inc/team.inc");
require_once("../inc/db.inc");
+if (DISABLE_TEAMS) error_page("Teams are disabled");
+
check_get_args(array("sort_by", "type", "offset"));
$config = get_config();
diff --git a/html/user/uotd.php b/html/user/uotd.php
index 33cb11c..c793194 100644
--- a/html/user/uotd.php
+++ b/html/user/uotd.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,6 +20,8 @@ require_once("../inc/util.inc");
require_once("../inc/uotd.inc");
require_once("../inc/profile.inc");
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
+
check_get_args(array());
db_init();
@@ -29,7 +31,7 @@ if (!$profile) {
echo tra("No user of the day has been chosen.");
} else {
$d = gmdate("d F Y", time());
- $user = lookup_user_id($profile->userid);
+ $user = BoincUser::lookup_id($profile->userid);
page_head(tra("User of the Day for %1: %2", $d, $user->name));
start_table();
show_profile($user, get_logged_in_user(false));
diff --git a/html/user/validate_email_addr.php b/html/user/validate_email_addr.php
index 8195ac2..0b80dc9 100644
--- a/html/user/validate_email_addr.php
+++ b/html/user/validate_email_addr.php
@@ -1,7 +1,7 @@
<?php
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -39,7 +39,7 @@ function send_validate_email() {
function validate() {
$x = get_str("x");
$u = get_int("u");
- $user = lookup_user_id($u);
+ $user = BoincUser::lookup_id($u);
if (!$user) {
error_page(tra("No such user."));
}
diff --git a/html/user/view_profile.php b/html/user/view_profile.php
index 4e4fbc9..63cf820 100644
--- a/html/user/view_profile.php
+++ b/html/user/view_profile.php
@@ -18,6 +18,8 @@
require_once("../inc/profile.inc");
+if (DISABLE_PROFILES) error_page("Profiles are disabled");
+
check_get_args(array("userid"));
$userid = get_int('userid');
diff --git a/html/user/white.css b/html/user/white.css
index 35031c6..f8fdaa0 100644
--- a/html/user/white.css
+++ b/html/user/white.css
@@ -25,9 +25,6 @@ table.bordered {
border-color: #e8e8e8;
border-width: 2px;
border-style: solid;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
- -khtml-border-radius: 6px;
border-radius: 6px;
}
@@ -206,6 +203,5 @@ div.pm_preview {
td.running { background-color: #9aff4f; }
-td.notrunning { background-color: #feff6f; }
-
-td.disabled { background-color: #ff4f4f; }
+td.notrunning { background-color: #ff4f4f; }
+td.disabled { background-color: #bbb; }
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 45c3279..28ec1c7 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -24,9 +24,10 @@ libfcgi_sources = \
hostinfo.cpp \
md5.c \
md5_file.cpp \
+ mfile.cpp \
miofile.cpp \
msg_log.cpp \
- opencl_boinc.cpp \
+ opencl_boinc.cpp \
parse.cpp \
shmem.cpp \
str_util.cpp \
@@ -54,7 +55,7 @@ generic_sources = \
msg_log.cpp \
network.cpp \
notice.cpp \
- opencl_boinc.cpp \
+ opencl_boinc.cpp \
parse.cpp \
prefs.cpp \
procinfo.cpp \
@@ -62,11 +63,26 @@ generic_sources = \
proxy_info.cpp \
shmem.cpp \
str_util.cpp \
- synch.cpp \
- unix_util.cpp \
url.cpp \
util.cpp
+if OS_WIN32
+win_sources = \
+ boinc_win.cpp \
+ daemonmgt_win.cpp \
+ diagnostics_win.cpp \
+ idlemon_win.cpp \
+ procinfo_win.cpp \
+ run_app_windows.cpp \
+ stackwalker_win.cpp \
+ win_util.cpp
+win_headers= \
+ boinc_win.h \
+ diagnostics_win.h \
+ run_app_windows.h \
+ stackwalker_win.h \
+ win_util.h
+else # !OS_WIN32
if OS_DARWIN
mac_sources = \
procinfo_mac.cpp \
@@ -86,11 +102,20 @@ mac_headers = \
mac/QMachOImageList.h \
mac/QSymbols.h \
mac/QTaskMemory.h
-else
- generic_sources += procinfo_unix.cpp
+win_sources=
+win_headers=
+else # !(OS_WIN32 || OS_MAC)
+
+generic_sources += \
+ procinfo_unix.cpp \
+ synch.cpp \
+ unix_util.cpp
+win_sources=
+win_headers=
+mac_sources=
+mac_headers=
-mac_sources =
-mac_headers =
+endif
endif
@@ -109,7 +134,6 @@ pkginclude_HEADERS = \
coproc.h \
crypt.h \
diagnostics.h \
- diagnostics_win.h \
error_numbers.h \
filesys.h \
gui_rpc_client.h \
@@ -122,7 +146,7 @@ pkginclude_HEADERS = \
msg_log.h \
network.h \
notice.h \
- opencl_boinc.h \
+ opencl_boinc.h \
parse.h \
prefs.h \
procinfo.h \
@@ -133,7 +157,8 @@ pkginclude_HEADERS = \
url.h \
util.h \
win_util.h \
- $(mac_headers)
+ $(mac_headers) \
+ $(win_headers)
endif
# These are used internally and are not meant to be installed
@@ -147,7 +172,7 @@ noinst_HEADERS = \
unix_util.h
lib_LTLIBRARIES = libboinc.la libboinc_crypt.la
-libboinc_la_SOURCES = $(generic_sources) $(mac_sources)
+libboinc_la_SOURCES = $(generic_sources) $(mac_sources) $(win_sources)
libboinc_la_CFLAGS = $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
libboinc_la_CXXFLAGS = $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
libboinc_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -static -version-number $(LIBBOINC_VERSION)
@@ -162,7 +187,7 @@ libboinc_crypt_la_LIBADD =
if ENABLE_FCGI
lib_LTLIBRARIES += libboinc_fcgi.la
-libboinc_fcgi_la_SOURCES = $(libfcgi_sources) $(mac_sources)
+libboinc_fcgi_la_SOURCES = $(libfcgi_sources) $(mac_sources) $(win_sources)
libboinc_fcgi_la_CFLAGS = -D_USING_FCGI_ $(AM_CFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
libboinc_fcgi_la_CXXFLAGS = -D_USING_FCGI_ $(AM_CXXFLAGS) $(PICFLAGS) $(PTHREAD_CFLAGS)
libboinc_fcgi_la_LDFLAGS = -L$(libdir) -rpath $(libdir) -version-number $(LIBBOINC_VERSION)
diff --git a/lib/Makefile.mingw b/lib/Makefile.mingw
index 8a0302b..6ddf11a 100644
--- a/lib/Makefile.mingw
+++ b/lib/Makefile.mingw
@@ -30,6 +30,7 @@ HEADERS = $(BOINC_SRC)/version.h \
$(BOINC_SRC)/lib/coproc.h \
$(BOINC_SRC)/lib/cal_boinc.h \
$(BOINC_SRC)/lib/cl_boinc.h \
+ $(BOINC_SRC)/lib/opencl_boinc.h \
$(BOINC_SRC)/svn_version.h \
$(BOINC_SRC)/win_build/config.h \
$(BOINC_SRC)/lib/str_util.h
@@ -59,6 +60,7 @@ LIB_OBJ = app_ipc.o \
mem_usage.o \
mfile.o \
miofile.o \
+ opencl_boinc.o \
procinfo_win.o \
procinfo.o \
proc_control.o \
diff --git a/lib/boinc_win.h b/lib/boinc_win.h
index 077a00b..ed01c17 100644
--- a/lib/boinc_win.h
+++ b/lib/boinc_win.h
@@ -22,9 +22,12 @@
#ifndef _BOINC_WIN_
#define _BOINC_WIN_
-#ifndef __CYGWIN32__
+#ifndef HAVE_CONFIG_H
// Windows C Runtime Library
+// These are version dependent. If you aren't using MSC, you'll probably need
+// to edit this file or create a config.h
+// For MINGW32 and MINGW64, it's best to run autoconf if possible.
#ifndef HAVE_STD_MAX
#define HAVE_STD_MAX 1
@@ -38,6 +41,7 @@
#define HAVE_STD_TRANSFORM 1
#endif
+
#ifndef HAVE_ALLOCA
#define HAVE_ALLOCA 1
#endif
@@ -46,9 +50,29 @@
#define HAVE_STRCASECMP 1
#endif
+/*
+ * WINSOCK vs WINSOCK2 could be an issue in compiles because we include multiple
+ * packages that have the same choice. The wx currently packed with BOINC
+ * uses WINSOCK, so we have to not include WINSOCK2 by undefining
+ * HAVE_WINSOCK2_H. That limits what CURL in its header file as well. We might
+ * need something more complicated if CURL and wxWidgets decide to go in
+ * opposite directions.
+ */
+#define USE_WINSOCK 1
+#undef HAVE_WINSOCK2_H
+#define HAVE_WINSOCK_H 1
+#define HAVE_WINDOWS_H 1
+#define HAVE_WS2TCPIP_H 1
+#define HAVE_WINHTTP_H 1
+#define HAVE_WINTERNL_H 1
+#define HAVE_DELAYIMP_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_CRTDBG_H 1
+#define HAVE_DECL_FPRESET 1
+#define HAVE_DECL__FPRESET 1
#else
-// Under CYGWIN we need to include config.h first.
+// Under any system that can run configure we need to include config.h first.
#include "config.h"
#endif
@@ -73,15 +97,15 @@
#endif
-// Target Windows 2000 or better with Internet Explorer 5.01 or better
+// Target Windows XP or better with Internet Explorer 5.01 or better
#ifndef WINVER
-#define WINVER 0x0500
+#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0500
+#define _WIN32_WINNT 0x0501
#endif
#ifndef _WIN32_WINDOWS
-#define _WIN32_WINDOWS 0x0500
+#define _WIN32_WINDOWS 0x0501
#endif
#ifndef _WIN32_IE
#define _WIN32_IE 0x0501
@@ -90,24 +114,24 @@
#define SECURITY_WIN32
#endif
-#include <windows.h>
-#include <share.h>
-#include <shlobj.h>
-#include <userenv.h>
-#include <aclapi.h>
-#include <psapi.h>
-#include <iphlpapi.h>
-#include <security.h>
#if !defined(__CYGWIN32__) || defined(USE_WINSOCK)
/* If we're not running under CYGWIN use windows networking */
#undef USE_WINSOCK
#define USE_WINSOCK 1
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#elif defined(HAVE_WINSOCK_H)
#include <winsock.h>
-#include <wininet.h>
+#endif
+#ifdef HAVE_WINHTTP_H
+#include <winhttp.h>
+#endif
+#ifndef HAVE_SOCKLEN_T
typedef size_t socklen_t;
+#endif
#else
@@ -127,6 +151,18 @@ typedef size_t socklen_t;
#endif
+#include <windows.h>
+#ifdef HAVE_WINTERNL_H
+#include <winternl.h>
+#endif
+#include <share.h>
+#include <shlobj.h>
+#include <userenv.h>
+#include <aclapi.h>
+#include <psapi.h>
+#include <iphlpapi.h>
+#include <wtsapi32.h>
+
#include <process.h>
#if defined(__MINGW32__) || defined(__CYGWIN32__)
#include <pbt.h>
@@ -136,12 +172,20 @@ typedef size_t socklen_t;
#include <raserror.h>
#if defined(__MINGW32__)
#include <stdint.h>
+#ifdef HAVE_SECURITY_H
+#include <security.h>
+#endif
+#ifdef HAVE_DBGHELP_H
+#include <dbghelp.h>
+#endif
#include <imagehlp.h>
#else
+#include <security.h>
#include <dbghelp.h>
#endif
#include <tlhelp32.h>
+
#include <io.h>
#if !defined(__CYGWIN32__)
#include <direct.h>
@@ -172,16 +216,29 @@ typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
// C headers
#include <sys/stat.h>
#include <sys/types.h>
-#if !defined(__MINGW32__)
+#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#include <malloc.h>
-#if !defined(__MINGW32__) && !defined(__CYGWIN32__)
+#ifdef HAVE_CRTDBG_H
#include <crtdbg.h>
+#endif
+
+#if defined(HAVE_DELAYIMP_H)
#include <delayimp.h>
#endif
+#if defined(__MINGW32__) && !defined(HAVE_WINTERNL_H)
+#ifdef HAVE_NTAPI_H
+#include <ntapi.h>
+#elif defined(HAVE_DDK_NTAPI_H)
+#include <ddk/ntapi.h>
+#endif
+#endif
+
+
+
#ifdef __cplusplus
#include <algorithm>
#include <cassert>
@@ -256,8 +313,15 @@ typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
#ifdef __cplusplus
extern "C" {
#endif
-void __cdecl _fpreset (void);
-void __cdecl fpreset (void);
+#ifndef __MINGW_NOTHROW
+#define __MINGW_NOTHROW
+#endif
+#if !HAVE_DECL__FPRESET
+void __cdecl __MINGW_NOTHROW _fpreset (void);
+#endif
+#if !HAVE_DECL_FPRESET
+void __cdecl __MINGW_NOTHROW fpreset (void);
+#endif
#ifdef __cplusplus
}
#endif //cplusplus
diff --git a/lib/cc_config.cpp b/lib/cc_config.cpp
index 09a53c5..e9d5e40 100644
--- a/lib/cc_config.cpp
+++ b/lib/cc_config.cpp
@@ -191,12 +191,12 @@ int LOG_FLAGS::write(MIOFILE& out) {
return 0;
}
-CONFIG::CONFIG() {
+CC_CONFIG::CC_CONFIG() {
}
// this is called first thing by client
//
-void CONFIG::defaults() {
+void CC_CONFIG::defaults() {
abort_jobs_on_exit = false;
allow_multiple_clients = false;
allow_remote_gui_rpc = false;
@@ -282,9 +282,9 @@ int EXCLUDE_GPU::parse(XML_PARSER& xp) {
}
// This is used by GUI RPC clients, NOT by the BOINC client
-// KEEP IN SYNCH WITH CONFIG::parse_options_client()!!
+// KEEP IN SYNCH WITH CC_CONFIG::parse_options_client()!!
//
-int CONFIG::parse_options(XML_PARSER& xp) {
+int CC_CONFIG::parse_options(XML_PARSER& xp) {
string s;
int n, retval;
@@ -430,12 +430,12 @@ int CONFIG::parse_options(XML_PARSER& xp) {
if (xp.parse_bool("use_certs_only", use_certs_only)) continue;
if (xp.parse_bool("vbox_window", vbox_window)) continue;
- xp.skip_unexpected(true, "CONFIG::parse_options");
+ xp.skip_unexpected(true, "CC_CONFIG::parse_options");
}
return ERR_XML_PARSE;
}
-int CONFIG::parse(XML_PARSER& xp, LOG_FLAGS& log_flags) {
+int CC_CONFIG::parse(XML_PARSER& xp, LOG_FLAGS& log_flags) {
while (!xp.get_tag()) {
if (!xp.is_tag) {
continue;
@@ -455,7 +455,32 @@ int CONFIG::parse(XML_PARSER& xp, LOG_FLAGS& log_flags) {
return ERR_XML_PARSE;
}
-int CONFIG::write(MIOFILE& out, LOG_FLAGS& log_flags) {
+void EXCLUDE_GPU::write(MIOFILE& out) {
+ out.printf(
+ " <exclude_gpu>\n"
+ " <url>%s</url>\n"
+ " <device_num>%d</device_num>\n",
+ url.c_str(),
+ device_num
+ );
+ if (type.length()) {
+ out.printf(
+ " <type>%s</type>\n",
+ type.c_str()
+ );
+ }
+ if (appname.length()) {
+ out.printf(
+ " <app>%s</app>\n",
+ appname.c_str()
+ );
+ }
+ out.printf(
+ " </exclude_gpu>\n"
+ );
+}
+
+int CC_CONFIG::write(MIOFILE& out, LOG_FLAGS& log_flags) {
int j;
unsigned int i;
@@ -515,6 +540,7 @@ int CONFIG::write(MIOFILE& out, LOG_FLAGS& log_flags) {
}
// Older versions of BOINC choke on empty data_dir string
+ //
if (strlen(data_dir)) {
out.printf(" <data_dir>%s</data_dir>\n", data_dir);
}
@@ -528,6 +554,10 @@ int CONFIG::write(MIOFILE& out, LOG_FLAGS& log_flags) {
dont_contact_ref_site
);
+ for (i=0; i<exclude_gpus.size(); i++) {
+ exclude_gpus[i].write(out);
+ }
+
for (i=0; i<exclusive_apps.size(); ++i) {
out.printf(
" <exclusive_app>%s</exclusive_app>\n",
@@ -541,7 +571,7 @@ int CONFIG::write(MIOFILE& out, LOG_FLAGS& log_flags) {
exclusive_gpu_apps[i].c_str()
);
}
-
+
out.printf(
" <exit_after_finish>%d</exit_after_finish>\n"
" <exit_before_start>%d</exit_before_start>\n"
diff --git a/lib/cc_config.h b/lib/cc_config.h
index 9866912..5b1eb50 100644
--- a/lib/cc_config.h
+++ b/lib/cc_config.h
@@ -131,12 +131,13 @@ struct EXCLUDE_GPU {
int device_num; // -1 means all instances
int parse(XML_PARSER&);
+ void write(MIOFILE&);
};
// if you add anything, you must add it to
// defaults(), parse_options(), and write()
//
-struct CONFIG {
+struct CC_CONFIG {
bool abort_jobs_on_exit;
bool allow_multiple_clients;
bool allow_remote_gui_rpc;
@@ -192,7 +193,7 @@ struct CONFIG {
// overrides use_certs
bool vbox_window;
- CONFIG();
+ CC_CONFIG();
void defaults();
int parse(FILE*);
int parse(XML_PARSER&, LOG_FLAGS&);
diff --git a/lib/cl_boinc.h b/lib/cl_boinc.h
index 79d5baa..55fc75d 100644
--- a/lib/cl_boinc.h
+++ b/lib/cl_boinc.h
@@ -3,6 +3,8 @@
#ifndef __CL_BOINC_H
#define __CL_BOINC_H
+#include <cstddef>
+
#if defined(_WIN32)
#define CL_API_ENTRY
#define CL_API_CALL __stdcall
diff --git a/lib/common_defs.h b/lib/common_defs.h
index 2c52c7c..01142c6 100644
--- a/lib/common_defs.h
+++ b/lib/common_defs.h
@@ -24,7 +24,10 @@
// #defines or enums that are shared by more than one BOINC component
// (e.g. client, server, Manager, etc.)
-#define GUI_RPC_PORT 31416
+#define GUI_RPC_PORT 31416
+ // for TCP connection
+#define GUI_RPC_FILE "boinc_socket"
+ // for Unix-domain connection
#define COBBLESTONE_SCALE 200/86400e9
// multiply normalized PFC by this to get Cobblestones
@@ -197,6 +200,19 @@ enum BATTERY_STATE {
#define RPC_REASON_INIT 6
#define RPC_REASON_PROJECT_REQ 7
+// values of batch.state
+// see html/inc/common_defs.inc
+//
+#define BATCH_STATE_INIT 0
+#define BATCH_STATE_IN_PROGRESS 1
+#define BATCH_STATE_COMPLETE 2
+ // "complete" means all workunits have either
+ // a canonical result or an error
+#define BATCH_STATE_ABORTED 3
+#define BATCH_STATE_RETIRED 4
+ // input/output files can be deleted,
+ // result and workunit records can be purged.
+
struct TIME_STATS {
// we maintain an exponentially weighted average of these quantities:
double now;
diff --git a/lib/coproc.cpp b/lib/coproc.cpp
index 42e4906..42bfd8e 100644
--- a/lib/coproc.cpp
+++ b/lib/coproc.cpp
@@ -483,10 +483,14 @@ void COPROC_NVIDIA::set_peak_flops() {
}
break;
case 3:
- default:
flops_per_clock = 2;
cores_per_proc = 192;
break;
+ case 5:
+ default:
+ flops_per_clock = 2;
+ cores_per_proc = 128;
+ break;
}
// clock rate is scaled down by 1000
//
@@ -905,4 +909,10 @@ const char* proc_type_name(int pt) {
return "unknown";
}
-
+int coproc_type_name_to_num(const char* name) {
+ if (!strcmp(name, "CUDA")) return PROC_TYPE_NVIDIA_GPU;
+ if (!strcmp(name, "NVIDIA")) return PROC_TYPE_NVIDIA_GPU;
+ if (!strcmp(name, "ATI")) return PROC_TYPE_AMD_GPU;
+ if (!strcmp(name, "intel_gpu")) return PROC_TYPE_INTEL_GPU;
+ return 0;
+}
diff --git a/lib/coproc.h b/lib/coproc.h
index 331aa16..8157cdf 100644
--- a/lib/coproc.h
+++ b/lib/coproc.h
@@ -98,6 +98,7 @@ extern const char* proc_type_name(int);
// user-readable name
extern const char* proc_type_name_xml(int);
// name used in XML and COPROC::type
+extern int coproc_type_name_to_num(const char* name);
// deprecated, but keep for simplicity
#define GPU_TYPE_NVIDIA proc_type_name_xml(PROC_TYPE_NVIDIA_GPU)
@@ -164,6 +165,7 @@ struct COPROC {
//
int device_nums[MAX_COPROC_INSTANCES];
int device_num; // temp used in scan process
+ bool have_opencls[MAX_COPROC_INSTANCES];
cl_device_id opencl_device_ids[MAX_COPROC_INSTANCES];
int opencl_device_count;
int opencl_device_indexes[MAX_COPROC_INSTANCES];
@@ -204,6 +206,7 @@ struct COPROC {
available_ram = 0;
for (int i=0; i<MAX_COPROC_INSTANCES; i++) {
device_nums[i] = 0;
+ have_opencls[i] = false;
opencl_device_ids[i] = 0;
opencl_device_indexes[i] = 0;
running_graphics_app[i] = true;
diff --git a/lib/diagnostics.cpp b/lib/diagnostics.cpp
index f64bbab..5eed0ed 100644
--- a/lib/diagnostics.cpp
+++ b/lib/diagnostics.cpp
@@ -41,6 +41,7 @@
#include <cstdarg>
#include <cstdlib>
#include <unistd.h>
+#include <time.h>
#endif
#ifdef _USING_FCGI_
@@ -205,24 +206,28 @@ int diagnostics_init(
int _flags, const char* stdout_prefix, const char* stderr_prefix
) {
// Check to see if we have already been called
+ //
if (diagnostics_initialized) {
return ERR_INVALID_PARAM;
}
diagnostics_initialized = true;
// Setup initial values
+ //
flags = _flags;
- snprintf(stdout_log, sizeof(stdout_log), "%s.txt", stdout_prefix);
- snprintf(stdout_archive, sizeof(stdout_archive), "%s.old", stdout_prefix);
- snprintf(stderr_log, sizeof(stderr_log), "%s.txt", stderr_prefix);
- snprintf(stderr_archive, sizeof(stderr_archive), "%s.old", stderr_prefix);
+ strcpy(stdout_log, "");
+ strcpy(stdout_archive, "");
+ strcpy(stderr_log, "");
+ strcpy(stderr_archive, "");
strcpy(boinc_dir, "");
strcpy(boinc_install_dir, "");
boinc_proxy_enabled = 0;
strcpy(boinc_proxy, "");
strcpy(symstore, "");
+
// Check for invalid parameter combinations
+ //
if ((flags & BOINC_DIAG_REDIRECTSTDERR) && (flags & BOINC_DIAG_REDIRECTSTDERROVERWRITE)) {
return ERR_INVALID_PARAM;
}
@@ -232,7 +237,43 @@ int diagnostics_init(
}
+ // Determine where the log files are to be stored
+ //
+ if (flags & BOINC_DIAG_PERUSERLOGFILES) {
+ char user_dir[MAXPATHLEN];
+
+#if defined(_WIN32)
+ snprintf(user_dir, sizeof(user_dir), "%s", getenv("APPDATA"));
+ strncat(user_dir, "/BOINC", sizeof(user_dir) - strlen(user_dir)-1);
+#elif defined(__APPLE__)
+ snprintf(user_dir, sizeof(user_dir), "%s", getenv("HOME"));
+ strncat(user_dir, "/Library/Application Support/BOINC", sizeof(user_dir) - strlen(user_dir)-1);
+#else
+ snprintf(user_dir, sizeof(user_dir), "%s", getenv("HOME"));
+ strncat(user_dir, "/.BOINC", sizeof(user_dir) - strlen(user_dir)-1);
+#endif
+
+ // Check to see if the directory exists
+ if (!is_dir(user_dir)) {
+ boinc_mkdir(user_dir);
+ }
+
+ snprintf(stdout_log, sizeof(stdout_log), "%s/%s.txt", user_dir, stdout_prefix);
+ snprintf(stdout_archive, sizeof(stdout_archive), "%s/%s.old", user_dir, stdout_prefix);
+ snprintf(stderr_log, sizeof(stderr_log), "%s/%s.txt", user_dir, stderr_prefix);
+ snprintf(stderr_archive, sizeof(stderr_archive), "%s/%s.old", user_dir, stderr_prefix);
+
+ } else {
+
+ snprintf(stdout_log, sizeof(stdout_log), "%s.txt", stdout_prefix);
+ snprintf(stdout_archive, sizeof(stdout_archive), "%s.old", stdout_prefix);
+ snprintf(stderr_log, sizeof(stderr_log), "%s.txt", stderr_prefix);
+ snprintf(stderr_archive, sizeof(stderr_archive), "%s.old", stderr_prefix);
+
+ }
+
// Archive any old stderr.txt and stdout.txt files, if requested
+ //
if (flags & BOINC_DIAG_ARCHIVESTDERR) {
boinc_copy(stderr_log, stderr_archive);
}
@@ -419,7 +460,7 @@ int diagnostics_init(
return BOINC_SUCCESS;
}
-int diagnostics_thread_init( int _flags ) {
+int diagnostics_thread_init() {
// Install unhandled exception filters and signal traps.
if (BOINC_SUCCESS != boinc_install_signal_handlers()) {
return ERR_SIGNAL_OP;
@@ -589,7 +630,7 @@ int diagnostics_cycle_logs() {
// Diagnostics for POSIX Compatible systems.
//
-#if HAVE_SIGNAL_H
+#if defined(HAVE_SIGNAL_H) && !defined(_WIN32)
// Set a signal handler only if it is not currently ignored
//
@@ -879,3 +920,10 @@ void diagnostics_set_max_file_sizes(int stdout_size, int stderr_size) {
if (stderr_size) max_stderr_file_size = stderr_size;
}
+// Dump string to whatever the platform debuggers
+//
+#ifndef _WIN32
+int diagnostics_trace_to_debugger(const char*) {
+ return 0;
+}
+#endif
diff --git a/lib/diagnostics.h b/lib/diagnostics.h
index 679199f..6ab71d1 100644
--- a/lib/diagnostics.h
+++ b/lib/diagnostics.h
@@ -50,6 +50,7 @@
#define BOINC_DIAG_TRACETOSTDOUT 0x00000400L
#define BOINC_DIAG_HEAPCHECKEVERYALLOC 0x00000800L
#define BOINC_DIAG_BOINCAPPLICATION 0x00001000L
+#define BOINC_DIAG_PERUSERLOGFILES 0x00002000L
#define BOINC_DIAG_DEFAULTS \
BOINC_DIAG_DUMPCALLSTACKENABLED | \
BOINC_DIAG_HEAPCHECKENABLED | \
@@ -80,7 +81,7 @@ extern int boinc_finish_diag();
extern int diagnostics_init(
int flags, const char* stdout_prefix, const char* stderr_prefix
);
-extern int diagnostics_thread_init( int flags );
+extern int diagnostics_thread_init();
extern int diagnostics_finish();
extern int diagnostics_is_initialized();
extern int diagnostics_is_flag_set(int flags);
@@ -107,12 +108,13 @@ extern int diagnostics_update_thread_list();
extern int diagnostics_set_thread_exempt_suspend();
extern int diagnostics_is_thread_exempt_suspend(long thread_id);
-// Message Monitoring
+// Message Monitoring (debugger viewport)
extern int diagnostics_init_message_monitor();
extern int diagnostics_finish_message_monitor();
#ifdef _WIN32
extern UINT WINAPI diagnostics_message_monitor(LPVOID lpParameter);
#endif
+extern int diagnostics_trace_to_debugger(const char* msg);
// Unhandled exception monitor
extern int diagnostics_init_unhandled_exception_monitor();
diff --git a/lib/diagnostics_win.cpp b/lib/diagnostics_win.cpp
index 112ecae..de0e494 100644
--- a/lib/diagnostics_win.cpp
+++ b/lib/diagnostics_win.cpp
@@ -43,6 +43,13 @@
#include "util.h"
#include "version.h"
+#if _MSC_VER > 1600
+ //required for compiling with v110_xp to create XP compatible executables
+ #ifndef FACILITY_VISUALCPP
+ #define FACILITY_VISUALCPP ((LONG)0x6d) //now defined in winerror.h
+ #endif
+#endif
+
#include "diagnostics_win.h"
// NtQuerySystemInformation
@@ -53,18 +60,6 @@ typedef NTSTATUS (WINAPI *tNTQSI)(
PULONG ReturnLength
);
-// IsDebuggerPresent
-typedef BOOL (WINAPI *tIDP)();
-
-// CreateToolhelp32Snapshot
-typedef HANDLE (WINAPI *tCT32S)(DWORD dwFlags, DWORD dwProcessID);
-// Thread32First
-typedef BOOL (WINAPI *tT32F)(HANDLE hSnapshot, LPTHREADENTRY32 lpte);
-// Thread32Next
-typedef BOOL (WINAPI *tT32N)(HANDLE hSnapshot, LPTHREADENTRY32 lpte);
-// OpenThread
-typedef HANDLE (WINAPI *tOT)(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId);
-
// Look in the registry for the specified value user the BOINC diagnostics
// hive.
@@ -238,83 +233,6 @@ PBOINC_THREADLISTENTRY diagnostics_find_thread_entry(DWORD dwThreadId) {
}
-// Enumerate the running threads in the process space and add them to
-// the list. This is the most compatible implementation.
-int diagnostics_update_thread_list_9X() {
- HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
- HANDLE hThread = NULL;
- HMODULE hKernel32Lib = NULL;
- PBOINC_THREADLISTENTRY pThreadEntry = NULL;
- tCT32S pCT32S = NULL;
- tT32F pT32F = NULL;
- tT32N pT32N = NULL;
- tOT pOT = NULL;
- THREADENTRY32 te32;
-
- // Which version of the data structure are we using.
- te32.dwSize = sizeof(te32);
-
- // Dynamically link to the proper function pointers.
- hKernel32Lib = GetModuleHandleA("kernel32.dll");
-
- pCT32S = (tCT32S) GetProcAddress( hKernel32Lib, "CreateToolhelp32Snapshot" );
- pT32F = (tT32F) GetProcAddress( hKernel32Lib, "Thread32First" );
- pT32N = (tT32N) GetProcAddress( hKernel32Lib, "Thread32Next" );
- pOT = (tOT) GetProcAddress( hKernel32Lib, "OpenThread" );
-
- if (!pCT32S || !pT32F || !pT32N) {
- return ERROR_NOT_SUPPORTED;
- }
-
- // Take a snapshot of all running threads
- hThreadSnap = pCT32S(TH32CS_SNAPTHREAD, 0);
- if( hThreadSnap == INVALID_HANDLE_VALUE ) {
- return GetLastError();
- }
-
- // Retrieve information about the first thread,
- // and exit if unsuccessful
- if( !pT32F( hThreadSnap, &te32 ) ) {
- CloseHandle( hThreadSnap );
- return GetLastError();
- }
-
- // Wait for the ThreadListSync mutex before writing updates
- WaitForSingleObject(hThreadListSync, INFINITE);
-
- // Now walk the thread list of the system,
- // and display information about each thread
- // associated with the specified process
- do {
- if( te32.th32OwnerProcessID == GetCurrentProcessId() ) {
- pThreadEntry = diagnostics_find_thread_entry(te32.th32ThreadID);
- if (!pThreadEntry) {
- pThreadEntry = new BOINC_THREADLISTENTRY;
- diagnostics_init_thread_entry(pThreadEntry);
- pThreadEntry->thread_id = te32.th32ThreadID;
- if (pOT) {
- hThread = pOT(
- THREAD_ALL_ACCESS,
- FALSE,
- te32.th32ThreadID
- );
- pThreadEntry->thread_handle = hThread;
- }
- diagnostics_threads.push_back(pThreadEntry);
- }
- }
- }
- while( pT32N(hThreadSnap, &te32 ) );
-
- // Release the Mutex
- ReleaseMutex(hThreadListSync);
-
- CloseHandle(hThreadSnap);
-
- return 0;
-}
-
-
// Use the native NT API to get all the process and thread information
// about the current process. This isn't a fully documented API but
// enough information exists that we can rely on it for the known
@@ -338,7 +256,7 @@ int diagnostics_get_process_information(PVOID* ppBuffer, PULONG pcbBuffer) {
}
Status = pNTQSI(
- SystemProcessAndThreadInformation,
+ SystemProcessInformation,
*ppBuffer,
*pcbBuffer,
pcbBuffer
@@ -358,101 +276,10 @@ int diagnostics_get_process_information(PVOID* ppBuffer, PULONG pcbBuffer) {
// Enumerate the running threads in the process space and add them to
-// the list. This only works on NT 4.0 based machines. This also
-// includes additional information which can be logged during a crash
-// event.
-int diagnostics_update_thread_list_NT() {
- DWORD dwCurrentProcessId = GetCurrentProcessId();
- HANDLE hThread = NULL;
- PBOINC_THREADLISTENTRY pThreadEntry = NULL;
- ULONG cbBuffer = 32*1024; // 32k initial buffer
- PVOID pBuffer = NULL;
- PSYSTEM_PROCESSES_NT4 pProcesses = NULL;
- PSYSTEM_THREADS pThread = NULL;
- UINT uiSystemIndex = 0;
- HMODULE hKernel32Lib;
- tOT pOT = NULL;
-
-
- // Dynamically link to the proper function pointers.
- hKernel32Lib = GetModuleHandleA("kernel32.dll");
- pOT = (tOT) GetProcAddress( hKernel32Lib, "OpenThread" );
-
- // Get a snapshot of the process and thread information.
- diagnostics_get_process_information(&pBuffer, &cbBuffer);
-
- // Wait for the ThreadListSync mutex before writing updates
- WaitForSingleObject(hThreadListSync, INFINITE);
-
- // Lets start walking the structures to find the good stuff.
- pProcesses = (PSYSTEM_PROCESSES_NT4)pBuffer;
- do {
- // Okay, found the current procceses entry now we just need to
- // update the thread data.
- if (pProcesses->ProcessId == dwCurrentProcessId) {
-
- // Store the process information we now know about.
- diagnostics_process.process_id = pProcesses->ProcessId;
- diagnostics_process.vm_counters = pProcesses->VmCounters;
-
- // Enumerate the threads
- for(uiSystemIndex = 0; uiSystemIndex < pProcesses->ThreadCount; uiSystemIndex++) {
- pThread = &pProcesses->Threads[uiSystemIndex];
- pThreadEntry = diagnostics_find_thread_entry(pThread->ClientId.UniqueThread);
-
- if (pThreadEntry) {
- pThreadEntry->crash_kernel_time = (FLOAT)pThread->KernelTime.QuadPart;
- pThreadEntry->crash_user_time = (FLOAT)pThread->UserTime.QuadPart;
- pThreadEntry->crash_wait_time = (FLOAT)pThread->WaitTime;
- pThreadEntry->crash_priority = pThread->Priority;
- pThreadEntry->crash_base_priority = pThread->BasePriority;
- pThreadEntry->crash_state = pThread->State;
- pThreadEntry->crash_wait_reason = pThread->WaitReason;
- } else {
- if (pOT) {
- hThread = pOT(
- THREAD_ALL_ACCESS,
- FALSE,
- pThread->ClientId.UniqueThread
- );
- }
-
- pThreadEntry = new BOINC_THREADLISTENTRY;
- diagnostics_init_thread_entry(pThreadEntry);
- pThreadEntry->thread_id = pThread->ClientId.UniqueThread;
- pThreadEntry->thread_handle = hThread;
- pThreadEntry->crash_kernel_time = (FLOAT)pThread->KernelTime.QuadPart;
- pThreadEntry->crash_user_time = (FLOAT)pThread->UserTime.QuadPart;
- pThreadEntry->crash_wait_time = (FLOAT)pThread->WaitTime;
- pThreadEntry->crash_priority = pThread->Priority;
- pThreadEntry->crash_base_priority = pThread->BasePriority;
- pThreadEntry->crash_state = pThread->State;
- pThreadEntry->crash_wait_reason = pThread->WaitReason;
- diagnostics_threads.push_back(pThreadEntry);
- }
- }
- }
-
- // Move to the next structure if one exists
- if (!pProcesses->NextEntryDelta) {
- break;
- }
- pProcesses = (PSYSTEM_PROCESSES_NT4)(((LPBYTE)pProcesses) + pProcesses->NextEntryDelta);
- } while (pProcesses);
-
- // Release resources
- if (hThreadListSync) ReleaseMutex(hThreadListSync);
- if (pBuffer) HeapFree(GetProcessHeap(), (DWORD)NULL, pBuffer);
-
- return 0;
-}
-
-
-// Enumerate the running threads in the process space and add them to
// the list. This only works on XP or better based machines. This also
// includes additional information which can be logged during a crash
// event.
-int diagnostics_update_thread_list_XP() {
+int diagnostics_update_thread_list() {
DWORD dwCurrentProcessId = GetCurrentProcessId();
HANDLE hThread = NULL;
PBOINC_THREADLISTENTRY pThreadEntry = NULL;
@@ -461,13 +288,7 @@ int diagnostics_update_thread_list_XP() {
PSYSTEM_PROCESSES pProcesses = NULL;
PSYSTEM_THREADS pThread = NULL;
UINT uiSystemIndex = 0;
- HMODULE hKernel32Lib;
- tOT pOT = NULL;
-
- // Dynamically link to the proper function pointers.
- hKernel32Lib = GetModuleHandleA("kernel32.dll");
- pOT = (tOT) GetProcAddress( hKernel32Lib, "OpenThread" );
// Get a snapshot of the process and thread information.
diagnostics_get_process_information(&pBuffer, &cbBuffer);
@@ -490,7 +311,7 @@ int diagnostics_update_thread_list_XP() {
// Enumerate the threads
for(uiSystemIndex = 0; uiSystemIndex < pProcesses->ThreadCount; uiSystemIndex++) {
pThread = &pProcesses->Threads[uiSystemIndex];
- pThreadEntry = diagnostics_find_thread_entry(pThread->ClientId.UniqueThread);
+ pThreadEntry = diagnostics_find_thread_entry((DWORD)pThread->ClientId.UniqueThread);
if (pThreadEntry) {
pThreadEntry->crash_kernel_time = (FLOAT)pThread->KernelTime.QuadPart;
@@ -501,17 +322,15 @@ int diagnostics_update_thread_list_XP() {
pThreadEntry->crash_state = pThread->State;
pThreadEntry->crash_wait_reason = pThread->WaitReason;
} else {
- if (pOT) {
- hThread = pOT(
- THREAD_ALL_ACCESS,
- FALSE,
- pThread->ClientId.UniqueThread
- );
- }
+ hThread = OpenThread(
+ THREAD_ALL_ACCESS,
+ FALSE,
+ (DWORD)(pThread->ClientId.UniqueThread)
+ );
pThreadEntry = new BOINC_THREADLISTENTRY;
diagnostics_init_thread_entry(pThreadEntry);
- pThreadEntry->thread_id = pThread->ClientId.UniqueThread;
+ pThreadEntry->thread_id = (DWORD)(pThread->ClientId.UniqueThread);
pThreadEntry->thread_handle = hThread;
pThreadEntry->crash_kernel_time = (FLOAT)pThread->KernelTime.QuadPart;
pThreadEntry->crash_user_time = (FLOAT)pThread->UserTime.QuadPart;
@@ -540,56 +359,6 @@ int diagnostics_update_thread_list_XP() {
}
-// Determine which update thread list function to call based on OS
-// version.
-int diagnostics_update_thread_list() {
- int retval = 0;
-
- // Detect platform information
- OSVERSIONINFO osvi;
- osvi.dwOSVersionInfoSize = sizeof(osvi);
- GetVersionEx(&osvi);
-
- switch(osvi.dwPlatformId) {
- case VER_PLATFORM_WIN32_WINDOWS:
- // Win95, Win98, WinME
- retval = diagnostics_update_thread_list_9X();
- break;
- case VER_PLATFORM_WIN32_NT:
- switch(osvi.dwMajorVersion) {
- case 4:
- // WinNT 4.0
- retval = diagnostics_update_thread_list_NT();
- break;
- case 5:
- // Win2k, WinXP, Win2k3
- retval = diagnostics_update_thread_list_XP();
- break;
- case 6:
- if (osvi.dwMinorVersion == 0) {
- // WinVista
- retval = diagnostics_update_thread_list_XP();
- } else {
- // In cases where we do not know if the interfaces have
- // changed from the ones we know about, just default to
- // the most compatible implementation.
- retval = diagnostics_update_thread_list_9X();
- }
- break;
- default:
- // In cases where we do not know if the interfaces have
- // changed from the ones we know about, just default to
- // the most compatible implementation.
- retval = diagnostics_update_thread_list_9X();
- break;
- }
- break;
- }
-
- return retval;
-}
-
-
// Set the cached exception record for the current thread, let the exception monitor
// thread dump the human readable exception information.
int diagnostics_set_thread_exception_record(PEXCEPTION_POINTERS pExPtrs) {
@@ -748,13 +517,13 @@ int diagnostics_set_thread_crash_message(char* message) {
//
char* diagnostics_format_thread_state(int thread_state) {
switch(thread_state) {
- case ThreadStateInitialized: return "Initialized";
- case ThreadStateReady: return "Ready";
- case ThreadStateRunning: return "Running";
- case ThreadStateStandby: return "Standby";
- case ThreadStateTerminated: return "Terminated";
- case ThreadStateWaiting: return "Waiting";
- case ThreadStateTransition: return "Transition";
+ case StateInitialized: return "Initialized";
+ case StateReady: return "Ready";
+ case StateRunning: return "Running";
+ case StateStandby: return "Standby";
+ case StateTerminated: return "Terminated";
+ case StateWait: return "Waiting";
+ case StateTransition: return "Transition";
default: return "Unknown";
}
return "";
@@ -868,8 +637,6 @@ int diagnostics_init_message_monitor() {
DWORD dwType;
DWORD dwSize;
DWORD dwCaptureMessages;
- HMODULE hKernel32Lib;
- tIDP pIDP = NULL;
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
@@ -897,7 +664,7 @@ int diagnostics_init_message_monitor() {
}
diagnostics_monitor_messages.clear();
- // Check the registry to see if we are aloud to capture debugger messages.
+ // Check the registry to see if we are allowed to capture debugger messages.
// Apparently many audio and visual payback programs dump serious
// amounts of data to the debugger viewport even on a release build.
// When this feature is enabled it slows down the replay of DVDs and CDs
@@ -916,85 +683,78 @@ int diagnostics_init_message_monitor() {
(LPBYTE)&dwCaptureMessages
);
-
// If a debugger is present then let it capture the debugger messages
- hKernel32Lib = GetModuleHandleA("kernel32.dll");
- pIDP = (tIDP) GetProcAddress(hKernel32Lib, "IsDebuggerPresent");
-
- if (pIDP) {
- if (!pIDP() && hMessageMonitorSync && dwCaptureMessages) {
-
- hMessageAckEvent = CreateEventA(&sa, FALSE, FALSE, "DBWIN_BUFFER_READY");
- if (!hMessageAckEvent) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): Creating hMessageAckEvent failed, GLE %d\n", GetLastError()
- );
- }
+ if (!IsDebuggerPresent() && hMessageMonitorSync && dwCaptureMessages) {
+ hMessageAckEvent = CreateEventA(&sa, FALSE, FALSE, "DBWIN_BUFFER_READY");
+ if (!hMessageAckEvent) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): Creating hMessageAckEvent failed, GLE %d\n", GetLastError()
+ );
+ }
- hMessageReadyEvent = CreateEventA(&sa, FALSE, FALSE, "DBWIN_DATA_READY");
- if (!hMessageReadyEvent) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): Creating hMessageReadyEvent failed, GLE %d\n", GetLastError()
- );
- }
+ hMessageReadyEvent = CreateEventA(&sa, FALSE, FALSE, "DBWIN_DATA_READY");
+ if (!hMessageReadyEvent) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): Creating hMessageReadyEvent failed, GLE %d\n", GetLastError()
+ );
+ }
- hMessageQuitEvent = CreateEventA(NULL, FALSE, FALSE, NULL);
- if (!hMessageQuitEvent) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): Creating hMessageQuitEvent failed, GLE %d\n", GetLastError()
- );
- }
+ hMessageQuitEvent = CreateEventA(NULL, FALSE, FALSE, NULL);
+ if (!hMessageQuitEvent) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): Creating hMessageQuitEvent failed, GLE %d\n", GetLastError()
+ );
+ }
- hMessageQuitFinishedEvent = CreateEventA(NULL, FALSE, FALSE, NULL);
- if (!hMessageQuitFinishedEvent) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): Creating hMessageQuitFinishedEvent failed, GLE %d\n", GetLastError()
- );
- }
+ hMessageQuitFinishedEvent = CreateEventA(NULL, FALSE, FALSE, NULL);
+ if (!hMessageQuitFinishedEvent) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): Creating hMessageQuitFinishedEvent failed, GLE %d\n", GetLastError()
+ );
+ }
- hMessageSharedMap = CreateFileMappingA(
- INVALID_HANDLE_VALUE, // use paging file
- &sa, // default security
- PAGE_READWRITE, // read/write access
- 0, // max. object size
- sizeof(DEBUGGERMESSAGE), // buffer size
- "DBWIN_BUFFER" // name of mapping object
+ hMessageSharedMap = CreateFileMappingA(
+ INVALID_HANDLE_VALUE, // use paging file
+ &sa, // default security
+ PAGE_READWRITE, // read/write access
+ 0, // max. object size
+ sizeof(DEBUGGERMESSAGE), // buffer size
+ "DBWIN_BUFFER" // name of mapping object
+ );
+ if (!hMessageSharedMap) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): CreateFileMapping hMessageSharedMap failed, GLE %d\n", GetLastError()
);
- if (!hMessageSharedMap) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): CreateFileMapping hMessageSharedMap failed, GLE %d\n", GetLastError()
- );
- }
+ }
- pMessageBuffer = (PDEBUGGERMESSAGE)MapViewOfFile(
- hMessageSharedMap,
- FILE_MAP_READ | FILE_MAP_WRITE,
- 0, // file offset high
- 0, // file offset low
- sizeof(DEBUGGERMESSAGE) // # of bytes to map (entire file)
+ pMessageBuffer = (PDEBUGGERMESSAGE)MapViewOfFile(
+ hMessageSharedMap,
+ FILE_MAP_READ | FILE_MAP_WRITE,
+ 0, // file offset high
+ 0, // file offset low
+ sizeof(DEBUGGERMESSAGE) // # of bytes to map (entire file)
+ );
+ if (!pMessageBuffer) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): MapViewOfFile pMessageBuffer failed, GLE %d\n", GetLastError()
);
- if (!pMessageBuffer) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): MapViewOfFile pMessageBuffer failed, GLE %d\n", GetLastError()
- );
- }
+ }
- hMessageMonitorThread = (HANDLE)_beginthreadex(
- NULL,
- 0,
- diagnostics_message_monitor,
- 0,
- 0,
- &uiMessageMonitorThreadId
+ hMessageMonitorThread = (HANDLE)_beginthreadex(
+ NULL,
+ 0,
+ diagnostics_message_monitor,
+ 0,
+ 0,
+ &uiMessageMonitorThreadId
+ );
+ if (!hMessageMonitorThread) {
+ fprintf(
+ stderr, "diagnostics_init_message_monitor(): _beginthreadex, errno %d\n", errno
);
- if (!hMessageMonitorThread) {
- fprintf(
- stderr, "diagnostics_init_message_monitor(): _beginthreadex, errno %d\n", errno
- );
- }
- } else {
- retval = ERROR_NOT_SUPPORTED;
}
+ } else {
+ retval = ERROR_NOT_SUPPORTED;
}
// Release the Mutex
@@ -1208,6 +968,38 @@ UINT WINAPI diagnostics_message_monitor(LPVOID /* lpParameter */) {
}
+// Dump a message to the debuggers viewport if we are allowed to.
+//
+int diagnostics_trace_to_debugger(const char* msg) {
+ DWORD dwType;
+ DWORD dwSize;
+ DWORD dwTraceToViewport;
+
+ // Check the registry to see if we are allowed to dump debugger messages.
+ //
+ // We'll turn it off by default, but keep it around just in case we need
+ // it or want to use it.
+ //
+ dwTraceToViewport = 0;
+ dwType = REG_DWORD;
+ dwSize = sizeof(dwTraceToViewport);
+ diagnostics_get_registry_value(
+ "TraceToViewport",
+ &dwType,
+ &dwSize,
+ (LPBYTE)&dwTraceToViewport
+ );
+
+ if (dwTraceToViewport) {
+ OutputDebugStringA(msg);
+ }
+
+ return 0;
+}
+
+
+
+
// Structured Exceptions are Windows primary mechanism for dealing with
// badly behaved applications or applications where something bad has
// happened underneath them and they need to clean up after themselves.
@@ -1545,7 +1337,7 @@ int diagnostics_dump_process_information() {
int diagnostics_dump_thread_information(PBOINC_THREADLISTENTRY pThreadEntry) {
std::string strStatusExtra;
- if (pThreadEntry->crash_state == ThreadStateWaiting) {
+ if (pThreadEntry->crash_state == StateWait) {
strStatusExtra += "Wait Reason: ";
strStatusExtra += diagnostics_format_thread_wait_reason(pThreadEntry->crash_wait_reason);
strStatusExtra += ", ";
@@ -1600,12 +1392,15 @@ int diagnostics_dump_exception_record(PEXCEPTION_POINTERS pExPtrs) {
char message[1024];
PVOID exception_address = pExPtrs->ExceptionRecord->ExceptionAddress;
DWORD exception_code = pExPtrs->ExceptionRecord->ExceptionCode;
+#ifdef HAVE_DELAYIMP_H
PDelayLoadInfo delay_load_info = NULL;
+#endif
// Print unhandled exception banner
fprintf(stderr, "- Unhandled Exception Record -\n");
switch (exception_code) {
+#ifdef HAVE_DELAYIMP_H
case VcppException(ERROR_SEVERITY_ERROR, ERROR_MOD_NOT_FOUND):
delay_load_info = (PDelayLoadInfo)pExPtrs->ExceptionRecord->ExceptionInformation[0];
fprintf(
@@ -1623,6 +1418,7 @@ int diagnostics_dump_exception_record(PEXCEPTION_POINTERS pExPtrs) {
delay_load_info->szDll
);
break;
+#endif
case 0xC0000135: // STATUS_DLL_NOT_FOUND
case 0xC0000139: // STATUS_ENTRYPOINT_NOT_FOUND
case 0xC0000142: // STATUS_DLL_INIT_FAILED
diff --git a/lib/diagnostics_win.h b/lib/diagnostics_win.h
index b0ae2c9..82af90d 100644
--- a/lib/diagnostics_win.h
+++ b/lib/diagnostics_win.h
@@ -20,25 +20,22 @@
#include "boinc_win.h"
-#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
-#define SystemProcessAndThreadInformation 5
typedef LONG NTSTATUS;
typedef LONG KPRIORITY;
+//MinGW-W64 defines this struct in its own header
+#ifndef HAVE_CLIENT_ID
typedef struct _CLIENT_ID {
DWORD UniqueProcess;
DWORD UniqueThread;
} CLIENT_ID;
+#endif
-typedef struct _UNICODE_STRING {
- USHORT Length;
- USHORT MaximumLength;
- PWSTR Buffer;
-} UNICODE_STRING;
-
+//MinGW-W64 defines this struct in its own header
+#ifndef HAVE_VM_COUNTERS
typedef struct _VM_COUNTERS {
#ifdef _WIN64
// the following was inferred by painful reverse engineering
@@ -67,7 +64,10 @@ typedef struct _VM_COUNTERS {
SIZE_T PeakPagefileUsage;
#endif
} VM_COUNTERS;
+#endif
+//MinGW-W64 defines this struct in its own header
+#ifndef HAVE_SYSTEM_THREADS
typedef struct _SYSTEM_THREADS {
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
@@ -81,24 +81,9 @@ typedef struct _SYSTEM_THREADS {
LONG State;
LONG WaitReason;
} SYSTEM_THREADS, * PSYSTEM_THREADS;
+#endif
-typedef struct _SYSTEM_PROCESSES_NT4 {
- ULONG NextEntryDelta;
- ULONG ThreadCount;
- ULONG Reserved1[6];
- LARGE_INTEGER CreateTime;
- LARGE_INTEGER UserTime;
- LARGE_INTEGER KernelTime;
- UNICODE_STRING ProcessName;
- KPRIORITY BasePriority;
- ULONG ProcessId;
- ULONG InheritedFromProcessId;
- ULONG HandleCount;
- ULONG Reserved2[2];
- VM_COUNTERS VmCounters;
- SYSTEM_THREADS Threads[1];
-} SYSTEM_PROCESSES_NT4, *PSYSTEM_PROCESSES_NT4;
-
+#ifndef HAVE_SYSTEM_PROCESSES
typedef struct _SYSTEM_PROCESSES {
ULONG NextEntryDelta;
ULONG ThreadCount;
@@ -124,17 +109,22 @@ typedef struct _SYSTEM_PROCESSES {
IO_COUNTERS IoCounters;
SYSTEM_THREADS Threads[1];
} SYSTEM_PROCESSES, * PSYSTEM_PROCESSES;
+#endif
+//MinGW-W64 defines this struct in its own header
+#ifndef HAVE_THREAD_STATE
typedef enum _THREAD_STATE {
- ThreadStateInitialized,
- ThreadStateReady,
- ThreadStateRunning,
- ThreadStateStandby,
- ThreadStateTerminated,
- ThreadStateWaiting,
- ThreadStateTransition
+ StateInitialized,
+ StateReady,
+ StateRunning,
+ StateStandby,
+ StateTerminated,
+ StateWait,
+ StateTransition
} THREAD_STATE, *PTHREAD_STATE;
+#endif
+#ifndef HAVE_THREAD_WAIT_REASON
typedef enum _THREAD_WAIT_REASON {
ThreadWaitReasonExecutive,
ThreadWaitReasonFreePage,
@@ -158,49 +148,6 @@ typedef enum _THREAD_WAIT_REASON {
ThreadWaitReasonWrPageOut,
ThreadWaitReasonMaximumWaitReason
} THREAD_WAIT_REASON;
-
-
-// Delay Load Error Handling stuff
-#ifndef _DELAY_IMP_VER
-
-#define FACILITY_VISUALCPP ((LONG)0x6d)
-#define VcppException(sev,err) ((sev) | (FACILITY_VISUALCPP<<16) | err)
-
-typedef DWORD RVA;
-
-typedef struct ImgDelayDescr {
- DWORD grAttrs; // attributes
- RVA rvaDLLName; // RVA to dll name
- RVA rvaHmod; // RVA of module handle
- RVA rvaIAT; // RVA of the IAT
- RVA rvaINT; // RVA of the INT
- RVA rvaBoundIAT; // RVA of the optional bound IAT
- RVA rvaUnloadIAT; // RVA of optional copy of original IAT
- DWORD dwTimeStamp; // 0 if not bound,
- // O.W. date/time stamp of DLL bound to (Old BIND)
-} ImgDelayDescr, *PImgDelayDescr;
-
-typedef const ImgDelayDescr *PCImgDelayDescr;
-
-typedef struct DelayLoadProc {
- BOOL fImportByName;
- union {
- LPCSTR szProcName;
- DWORD dwOrdinal;
- };
-} DelayLoadProc;
-
-typedef struct DelayLoadInfo {
- DWORD cb; // size of structure
- PCImgDelayDescr pidd; // raw form of data (everything is there)
- FARPROC * ppfn; // points to address of function to load
- LPCSTR szDll; // name of dll
- DelayLoadProc dlp; // name or ordinal of procedure
- HMODULE hmodCur; // the hInstance of the library we have loaded
- FARPROC pfnCur; // the actual function that will be called
- DWORD dwLastError;// error received (if an error notification)
-} DelayLoadInfo, * PDelayLoadInfo;
-
#endif
#endif
diff --git a/lib/error_numbers.h b/lib/error_numbers.h
index a8041cb..2de17d1 100644
--- a/lib/error_numbers.h
+++ b/lib/error_numbers.h
@@ -38,6 +38,7 @@
#define EXIT_ABORTED_BY_PROJECT 202
#define EXIT_ABORTED_VIA_GUI 203
#define EXIT_UNKNOWN 204
+#define EXIT_OUT_OF_MEMORY 205
// Function return values.
// NOTE: add new errors to the end of the list and don't change
@@ -81,6 +82,7 @@
#define ERR_THREAD -124
// Error creating a thread
#define ERR_SIGNAL_CATCH -125
+#define ERR_BAD_FORMAT -126
#define ERR_UPLOAD_TRANSIENT -127
#define ERR_UPLOAD_PERMANENT -128
#define ERR_IDLE_PERIOD -129
diff --git a/lib/gui_rpc_client.cpp b/lib/gui_rpc_client.cpp
index 69fa901..bedb3dd 100644
--- a/lib/gui_rpc_client.cpp
+++ b/lib/gui_rpc_client.cpp
@@ -40,6 +40,7 @@
#include <unistd.h>
#include <cstdlib>
#include <cstring>
+#include <cstddef>
#endif
#include "diagnostics.h"
@@ -125,7 +126,7 @@ int RPC_CLIENT::get_ip_addr(const char* host, int port) {
int RPC_CLIENT::init(const char* host, int port) {
int retval = get_ip_addr(host, port);
if (retval) return retval;
- boinc_socket(sock);
+ boinc_socket(sock, AF_INET);
// set up receive timeout; avoid hang if client doesn't respond
//
@@ -166,7 +167,7 @@ int RPC_CLIENT::init_asynch(
retval = get_ip_addr(host, port);
if (retval) return retval;
- retval = boinc_socket(sock);
+ retval = boinc_socket(sock, AF_INET);
BOINCTRACE("init_asynch() boinc_socket: %d\n", sock);
if (retval) return retval;
@@ -224,7 +225,7 @@ int RPC_CLIENT::init_poll() {
if (retval) {
if (retry) {
boinc_close_socket(sock);
- retval = boinc_socket(sock);
+ retval = boinc_socket(sock, AF_INET);
retval = boinc_socket_asynch(sock, true);
retval = connect(sock, (const sockaddr*)(&addr), addr_len(addr));
BOINCTRACE("init_poll(): retrying connect: %d\n", retval);
@@ -236,6 +237,28 @@ int RPC_CLIENT::init_poll() {
return ERR_RETRY;
}
+int RPC_CLIENT::init_unix_domain() {
+#if defined(_WIN32)
+ fprintf(stderr, "Unix domain not implemented in Windows\n");
+ return -1;
+#else
+ struct sockaddr_un addr_un;
+ int retval = boinc_socket(sock, AF_UNIX);
+ if (retval) return retval;
+ addr_un.sun_family = AF_UNIX;
+#ifdef __APPLE__
+ addr_un.sun_len = sizeof(addr_un);
+#endif
+ strcpy(addr_un.sun_path, GUI_RPC_FILE);
+ socklen_t len = offsetof(sockaddr_un, sun_path) + strlen(GUI_RPC_FILE);
+ if (connect(sock, (struct sockaddr*)&addr_un, len) < 0) {
+ boinc_close_socket(sock);
+ return ERR_CONNECT;
+ }
+ return 0;
+#endif
+}
+
int RPC_CLIENT::authorize(const char* passwd) {
bool found=false, authorized;
int retval, n;
diff --git a/lib/gui_rpc_client.h b/lib/gui_rpc_client.h
index b33c7e5..be0650f 100644
--- a/lib/gui_rpc_client.h
+++ b/lib/gui_rpc_client.h
@@ -279,6 +279,8 @@ struct RESULT {
double working_set_size_smoothed;
double estimated_cpu_time_remaining;
// actually, estimated elapsed time remaining
+ double bytes_sent;
+ double bytes_received;
bool too_large;
bool needs_shmem;
bool edf_scheduled;
@@ -421,6 +423,7 @@ struct PROJECTS {
~PROJECTS();
void print();
+ void print_urls();
void clear();
};
@@ -534,6 +537,9 @@ struct PROJECT_CONFIG {
int error_num;
std::string name;
std::string master_url;
+ std::string web_rpc_url_base;
+ // prefix for create_account, lookup_account web RPCs
+ // If absent, use the master URL
int local_revision; // SVN changeset# of server software
int min_passwd_length;
bool account_manager;
@@ -560,6 +566,7 @@ struct PROJECT_CONFIG {
struct ACCOUNT_IN {
std::string url;
+ // URL prefix for web RPCs
std::string email_addr;
// the account identifier (email address or user name)
std::string user_name;
@@ -675,6 +682,7 @@ struct RPC_CLIENT {
// retry: if true, keep retrying until succeed or timeout.
// Use this if just launched the core client.
int init_poll();
+ int init_unix_domain();
void close();
int authorize(const char* passwd);
int exchange_versions(VERSION_INFO&);
@@ -746,8 +754,8 @@ struct RPC_CLIENT {
int set_global_prefs_override(std::string&);
int get_global_prefs_override_struct(GLOBAL_PREFS&, GLOBAL_PREFS_MASK&);
int set_global_prefs_override_struct(GLOBAL_PREFS&, GLOBAL_PREFS_MASK&);
- int get_cc_config(CONFIG& config, LOG_FLAGS& log_flags);
- int set_cc_config(CONFIG& config, LOG_FLAGS& log_flags);
+ int get_cc_config(CC_CONFIG& config, LOG_FLAGS& log_flags);
+ int set_cc_config(CC_CONFIG& config, LOG_FLAGS& log_flags);
int get_daily_xfer_history(DAILY_XFER_HISTORY&);
int set_language(const char*);
};
diff --git a/lib/gui_rpc_client_ops.cpp b/lib/gui_rpc_client_ops.cpp
index 6cb97d3..6bf58ad 100644
--- a/lib/gui_rpc_client_ops.cpp
+++ b/lib/gui_rpc_client_ops.cpp
@@ -671,6 +671,8 @@ int RESULT::parse(XML_PARSER& xp) {
if (xp.parse_double("working_set_size_smoothed", working_set_size_smoothed)) continue;
if (xp.parse_double("fraction_done", fraction_done)) continue;
if (xp.parse_double("estimated_cpu_time_remaining", estimated_cpu_time_remaining)) continue;
+ if (xp.parse_double("bytes_sent", bytes_sent)) continue;
+ if (xp.parse_double("bytes_received", bytes_received)) continue;
if (xp.parse_bool("too_large", too_large)) continue;
if (xp.parse_bool("needs_shmem", needs_shmem)) continue;
if (xp.parse_bool("edf_scheduled", edf_scheduled)) continue;
@@ -724,6 +726,8 @@ void RESULT::clear() {
swap_size = 0;
working_set_size_smoothed = 0;
estimated_cpu_time_remaining = 0;
+ bytes_sent = 0;
+ bytes_received = 0;
too_large = false;
needs_shmem = false;
edf_scheduled = false;
@@ -1307,6 +1311,7 @@ int PROJECT_CONFIG::parse(XML_PARSER& xp) {
if (xp.parse_int("error_num", error_num)) continue;
if (xp.parse_string("name", name)) continue;
if (xp.parse_string("master_url", master_url)) continue;
+ if (xp.parse_string("web_rpc_url_base", web_rpc_url_base)) continue;
if (xp.parse_int("local_revision", local_revision)) continue;
if (xp.parse_int("min_passwd_length", min_passwd_length)) continue;
if (xp.parse_bool("account_manager", account_manager)) continue;
@@ -1335,6 +1340,7 @@ void PROJECT_CONFIG::clear() {
error_num = 0;
name.clear();
master_url.clear();
+ web_rpc_url_base.clear();
error_msg.clear();
terms_of_use.clear();
min_passwd_length = 6;
@@ -1953,7 +1959,7 @@ int RPC_CLIENT::run_benchmarks() {
return rpc.parse_reply();
}
-int RPC_CLIENT::set_proxy_settings(GR_PROXY_INFO& pi) {
+int RPC_CLIENT::set_proxy_settings(GR_PROXY_INFO& procinfo) {
int retval;
SET_LOCALE sl;
char buf[1792];
@@ -1974,18 +1980,18 @@ int RPC_CLIENT::set_proxy_settings(GR_PROXY_INFO& pi) {
" <no_proxy>%s</no_proxy>\n"
" </proxy_info>\n"
"</set_proxy_settings>\n",
- pi.use_http_proxy?" <use_http_proxy/>\n":"",
- pi.use_socks_proxy?" <use_socks_proxy/>\n":"",
- pi.use_http_authentication?" <use_http_auth/>\n":"",
- pi.http_server_name.c_str(),
- pi.http_server_port,
- pi.http_user_name.c_str(),
- pi.http_user_passwd.c_str(),
- pi.socks_server_name.c_str(),
- pi.socks_server_port,
- pi.socks5_user_name.c_str(),
- pi.socks5_user_passwd.c_str(),
- pi.noproxy_hosts.c_str()
+ procinfo.use_http_proxy?" <use_http_proxy/>\n":"",
+ procinfo.use_socks_proxy?" <use_socks_proxy/>\n":"",
+ procinfo.use_http_authentication?" <use_http_auth/>\n":"",
+ procinfo.http_server_name.c_str(),
+ procinfo.http_server_port,
+ procinfo.http_user_name.c_str(),
+ procinfo.http_user_passwd.c_str(),
+ procinfo.socks_server_name.c_str(),
+ procinfo.socks_server_port,
+ procinfo.socks5_user_name.c_str(),
+ procinfo.socks5_user_passwd.c_str(),
+ procinfo.noproxy_hosts.c_str()
);
buf[sizeof(buf)-1] = 0;
retval = rpc.do_rpc(buf);
@@ -2547,7 +2553,7 @@ int RPC_CLIENT::read_cc_config() {
return rpc.parse_reply();
}
-int RPC_CLIENT::get_cc_config(CONFIG& config, LOG_FLAGS& log_flags) {
+int RPC_CLIENT::get_cc_config(CC_CONFIG& config, LOG_FLAGS& log_flags) {
int retval;
SET_LOCALE sl;
RPC rpc(this);
@@ -2558,7 +2564,7 @@ int RPC_CLIENT::get_cc_config(CONFIG& config, LOG_FLAGS& log_flags) {
return config.parse(rpc.xp, log_flags);
}
-int RPC_CLIENT::set_cc_config(CONFIG& config, LOG_FLAGS& log_flags) {
+int RPC_CLIENT::set_cc_config(CC_CONFIG& config, LOG_FLAGS& log_flags) {
SET_LOCALE sl;
char buf[64000];
MIOFILE mf;
diff --git a/lib/gui_rpc_client_print.cpp b/lib/gui_rpc_client_print.cpp
index b66b0c6..f1bd8e2 100644
--- a/lib/gui_rpc_client_print.cpp
+++ b/lib/gui_rpc_client_print.cpp
@@ -31,6 +31,7 @@
#include <sys/un.h>
#include <cstdio>
#include <unistd.h>
+#include <time.h>
#include <cstdlib>
#include <cstring>
#endif
@@ -145,9 +146,14 @@ void RESULT::print() {
printf(" checkpoint CPU time: %f\n", checkpoint_cpu_time);
printf(" current CPU time: %f\n", current_cpu_time);
printf(" fraction done: %f\n", fraction_done);
- printf(" swap size: %f\n", swap_size);
- printf(" working set size: %f\n", working_set_size_smoothed);
+ printf(" swap size: %.0f MB\n", swap_size/MEGA);
+ printf(" working set size: %.0f MB\n", working_set_size_smoothed/MEGA);
printf(" estimated CPU time remaining: %f\n", estimated_cpu_time_remaining);
+ if (bytes_sent || bytes_received) {
+ printf(" bytes sent: %.0f received: %.0f\n",
+ bytes_sent, bytes_received
+ );
+ }
}
void FILE_TRANSFER::print() {
@@ -305,6 +311,13 @@ void PROJECTS::print() {
}
}
+void PROJECTS::print_urls() {
+ unsigned int i;
+ for (i=0; i<projects.size(); i++) {
+ printf("%s\n", projects[i]->master_url);
+ }
+}
+
void DISK_USAGE::print() {
unsigned int i;
printf("======== Disk usage ========\n");
diff --git a/lib/hostinfo.cpp b/lib/hostinfo.cpp
index 49eac47..4c1f7f4 100644
--- a/lib/hostinfo.cpp
+++ b/lib/hostinfo.cpp
@@ -72,7 +72,7 @@ void HOST_INFO::clear_host_info() {
strcpy(mac_address, "");
strcpy(virtualbox_version, "");
- num_cpu_opencl_platforms = 0;
+ num_opencl_cpu_platforms = 0;
}
int HOST_INFO::parse(XML_PARSER& xp, bool static_items_only) {
@@ -128,11 +128,12 @@ int HOST_INFO::parse(XML_PARSER& xp, bool static_items_only) {
this->coprocs.parse(xp);
}
- // The same CPU can have a different cpu_opencl_prop
+ // The same CPU can have a different opencl_cpu_prop
// for each of multiple OpenCL platforms
- if (xp.match_tag("cpu_opencl_prop")) {
- int retval = cpu_opencl_prop[num_cpu_opencl_platforms].parse(xp);
- if (!retval) num_cpu_opencl_platforms++;
+ //
+ if (xp.match_tag("opencl_cpu_prop")) {
+ int retval = opencl_cpu_prop[num_opencl_cpu_platforms].parse(xp);
+ if (!retval) num_opencl_cpu_platforms++;
}
}
return ERR_XML_PARSE;
@@ -230,7 +231,7 @@ int HOST_INFO::write(
this->coprocs.write_xml(out, false);
}
- // The same CPU can have a different cpu_opencl_prop
+ // The same CPU can have a different opencl_cpu_prop
// for each of multiple OpenCL platforms.
// We send them all to the project server because:
// - Different OpenCL platforms report different values
@@ -238,8 +239,8 @@ int HOST_INFO::write(
// - Some OpenCL CPU apps may work better with certain
// OpenCL platforms
//
- for (int i=0; i<num_cpu_opencl_platforms; i++) {
- cpu_opencl_prop[i].write_xml(out);
+ for (int i=0; i<num_opencl_cpu_platforms; i++) {
+ opencl_cpu_prop[i].write_xml(out);
}
out.printf(
"</host_info>\n"
@@ -285,4 +286,3 @@ int HOST_INFO::write_cpu_benchmarks(FILE* out) {
);
return 0;
}
-
diff --git a/lib/hostinfo.h b/lib/hostinfo.h
index 15eae53..38d8df5 100644
--- a/lib/hostinfo.h
+++ b/lib/hostinfo.h
@@ -72,8 +72,8 @@ public:
COPROCS coprocs;
- int num_cpu_opencl_platforms;
- OPENCL_CPU_PROP cpu_opencl_prop[MAX_OPENCL_CPU_PLATFORMS];
+ int num_opencl_cpu_platforms;
+ OPENCL_CPU_PROP opencl_cpu_prop[MAX_OPENCL_CPU_PLATFORMS];
HOST_INFO();
int parse(XML_PARSER&, bool static_items_only = false);
diff --git a/lib/md5_file.cpp b/lib/md5_file.cpp
index 6067188..a3f2b05 100644
--- a/lib/md5_file.cpp
+++ b/lib/md5_file.cpp
@@ -41,7 +41,7 @@
#include "md5_file.h"
-int md5_file(const char* path, char* output, double& nbytes) {
+int md5_file(const char* path, char* output, double& nbytes, bool is_gzip) {
unsigned char buf[4096];
unsigned char binout[16];
md5_state_t state;
@@ -64,6 +64,20 @@ int md5_file(const char* path, char* output, double& nbytes) {
return ERR_FOPEN;
}
md5_init(&state);
+
+ // check and skip gzip header if needed
+ //
+ if (is_gzip) {
+ n = (int)fread(buf, 1, 10, f);
+ if (n != 10) {
+ return ERR_BAD_FORMAT;
+ }
+ if (buf[0] != 0x1f || buf[1] != 0x8b || buf[2] != 0x08) {
+ return ERR_BAD_FORMAT;
+ }
+ nbytes = 10;
+ }
+
while (1) {
n = (int)fread(buf, 1, 4096, f);
if (n<=0) break;
diff --git a/lib/md5_file.h b/lib/md5_file.h
index c9ba17b..a283f46 100644
--- a/lib/md5_file.h
+++ b/lib/md5_file.h
@@ -27,7 +27,10 @@
//
#define MD5_LEN 64
-extern int md5_file(const char* path, char* output, double& nbytes);
+extern int md5_file(
+ const char* path, char* output, double& nbytes, bool is_gzip=false
+);
+
extern int md5_block(const unsigned char* data, int nbytes, char* output);
extern std::string md5_string(const unsigned char* data, int nbytes);
diff --git a/lib/miofile.cpp b/lib/miofile.cpp
index a3603d6..a74e394 100644
--- a/lib/miofile.cpp
+++ b/lib/miofile.cpp
@@ -68,7 +68,6 @@ bool MIOFILE::eof() {
return true;
}
-#ifndef _USING_FCGI_
int MIOFILE::printf(const char* format, ...) {
int retval;
@@ -88,8 +87,6 @@ int MIOFILE::printf(const char* format, ...) {
return retval;
}
-#endif
-
char* MIOFILE::fgets(char* dst, int dst_len) {
if (f) {
#ifndef _USING_FCGI_
diff --git a/lib/network.cpp b/lib/network.cpp
index 5989828..cb7444a 100644
--- a/lib/network.cpp
+++ b/lib/network.cpp
@@ -202,8 +202,8 @@ int resolve_hostname_or_ip_addr(
return resolve_hostname(hostname, ip_addr);
}
-int boinc_socket(int& fd) {
- fd = (int)socket(AF_INET, SOCK_STREAM, 0);
+int boinc_socket(int& fd, int protocol) {
+ fd = (int)socket(protocol, SOCK_STREAM, 0);
if (fd < 0) {
perror("socket");
return ERR_SOCKET;
@@ -290,4 +290,4 @@ void reset_dns() {
// Windows doesn't have this, and it crashes Macs
res_init();
#endif
-}
\ No newline at end of file
+}
diff --git a/lib/network.h b/lib/network.h
index 4618674..a35b2a3 100644
--- a/lib/network.h
+++ b/lib/network.h
@@ -48,8 +48,10 @@ extern bool is_localhost(sockaddr_storage& s);
extern bool same_ip_addr(sockaddr_storage& s1, sockaddr_storage& s2);
extern int resolve_hostname(const char* hostname, sockaddr_storage& ip_addr);
extern int resolve_hostname_or_ip_addr(const char* hostname, sockaddr_storage& ip_addr);
-extern int boinc_socket(int& sock);
+extern int boinc_socket(int& sock, int protocol=AF_INET);
+ // create a stream-mode socket of the given family
extern int boinc_socket_asynch(int sock, bool asynch);
+ // make an existing socket asynchronous or synchronous
extern void boinc_close_socket(int sock);
extern int get_socket_error(int fd);
extern const char* socket_error_str();
@@ -65,4 +67,4 @@ typedef socklen_t BOINC_SOCKLEN_T;
extern int WinsockInitialize();
extern int WinsockCleanup();
#endif
-#endif
\ No newline at end of file
+#endif
diff --git a/lib/proc_control.cpp b/lib/proc_control.cpp
index 08715f1..8ef8775 100644
--- a/lib/proc_control.cpp
+++ b/lib/proc_control.cpp
@@ -94,6 +94,8 @@ int suspend_or_resume_threads(
) {
HANDLE threads, thread;
THREADENTRY32 te = {0};
+ int retval = 0;
+ DWORD n;
#ifdef DEBUG
fprintf(stderr, "start: check_exempt %d %s\n", check_exempt, precision_time_to_string(dtime()));
@@ -129,16 +131,17 @@ int suspend_or_resume_threads(
if (!in_vector(te.th32OwnerProcessID, pids)) continue;
thread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te.th32ThreadID);
if (resume) {
- DWORD n = ResumeThread(thread);
+ n = ResumeThread(thread);
#ifdef DEBUG
fprintf(stderr, "ResumeThread returns %d\n", n);
#endif
} else {
- DWORD n = SuspendThread(thread);
+ n = SuspendThread(thread);
#ifdef DEBUG
fprintf(stderr, "SuspendThread returns %d\n", n);
#endif
}
+ if (n == -1) retval = -1;
CloseHandle(thread);
} while (Thread32Next(threads, &te));
@@ -146,7 +149,7 @@ int suspend_or_resume_threads(
#ifdef DEBUG
fprintf(stderr, "end: %s\n", precision_time_to_string(dtime()));
#endif
- return 0;
+ return retval;
}
#else
diff --git a/lib/procinfo.cpp b/lib/procinfo.cpp
index 3da3cc8..cbee3a1 100644
--- a/lib/procinfo.cpp
+++ b/lib/procinfo.cpp
@@ -39,7 +39,7 @@ using std::vector;
// Scan the process table adding in CPU time and mem usage.
//
-void add_child_totals(PROCINFO& pi, PROC_MAP& pm, PROC_MAP::iterator i) {
+void add_child_totals(PROCINFO& procinfo, PROC_MAP& pm, PROC_MAP::iterator i) {
PROCINFO parent = i->second;
for (unsigned int j=0; j<parent.children.size(); j++) {
int child_pid = parent.children[j];
@@ -49,20 +49,20 @@ void add_child_totals(PROCINFO& pi, PROC_MAP& pm, PROC_MAP::iterator i) {
if (p.scanned) {
return; // cycle in graph - shouldn't happen
}
- pi.kernel_time += p.kernel_time;
- pi.user_time += p.user_time;
+ procinfo.kernel_time += p.kernel_time;
+ procinfo.user_time += p.user_time;
p.scanned = true;
// only count process with most swap and memory
- if (p.swap_size > pi.swap_size) {
- pi.swap_size = p.swap_size;
+ if (p.swap_size > procinfo.swap_size) {
+ procinfo.swap_size = p.swap_size;
}
- if (p.working_set_size > pi.working_set_size) {
- pi.working_set_size = p.working_set_size;
+ if (p.working_set_size > procinfo.working_set_size) {
+ procinfo.working_set_size = p.working_set_size;
}
p.is_boinc_app = true;
- add_child_totals(pi, pm, i2); // recursion - woo hoo!
+ add_child_totals(procinfo, pm, i2); // recursion - woo hoo!
}
}
@@ -71,24 +71,24 @@ void add_child_totals(PROCINFO& pi, PROC_MAP& pm, PROC_MAP::iterator i) {
// Set PROCINFO.is_boinc_app for all of them.
//
void procinfo_app(
- PROCINFO& pi, vector<int>* other_pids, PROC_MAP& pm, char* graphics_exec_file
+ PROCINFO& procinfo, vector<int>* other_pids, PROC_MAP& pm, char* graphics_exec_file
) {
PROC_MAP::iterator i;
for (i=pm.begin(); i!=pm.end(); i++) {
PROCINFO& p = i->second;
- if (p.id == pi.id
+ if (p.id == procinfo.id
|| (other_pids && in_vector(p.id, *other_pids))
) {
- pi.kernel_time += p.kernel_time;
- pi.user_time += p.user_time;
- pi.swap_size += p.swap_size;
- pi.working_set_size += p.working_set_size;
+ procinfo.kernel_time += p.kernel_time;
+ procinfo.user_time += p.user_time;
+ procinfo.swap_size += p.swap_size;
+ procinfo.working_set_size += p.working_set_size;
p.is_boinc_app = true;
p.scanned = true;
// look for child processes
//
- add_child_totals(pi, pm, i);
+ add_child_totals(procinfo, pm, i);
}
if (graphics_exec_file && !strcmp(p.command, graphics_exec_file)) {
p.is_boinc_app = true;
@@ -108,8 +108,8 @@ void find_children(PROC_MAP& pm) {
// get resource usage of non-BOINC apps
//
-void procinfo_non_boinc(PROCINFO& pi, PROC_MAP& pm) {
- pi.clear();
+void procinfo_non_boinc(PROCINFO& procinfo, PROC_MAP& pm) {
+ procinfo.clear();
PROC_MAP::iterator i;
for (i=pm.begin(); i!=pm.end(); i++) {
PROCINFO& p = i->second;
@@ -131,26 +131,26 @@ void procinfo_non_boinc(PROCINFO& pi, PROC_MAP& pm) {
fprintf(stderr, "non-boinc: %s (%d) %f %f\n", p.command, p.id, p.user_time, p.kernel_time);
}
#endif
- pi.kernel_time += p.kernel_time;
- pi.user_time += p.user_time;
- pi.swap_size += p.swap_size;
- pi.working_set_size += p.working_set_size;
+ procinfo.kernel_time += p.kernel_time;
+ procinfo.user_time += p.user_time;
+ procinfo.swap_size += p.swap_size;
+ procinfo.working_set_size += p.working_set_size;
}
#if 0
- fprintf(stderr, "total non-boinc: %f %f\n", pi.user_time, pi.kernel_time);
+ fprintf(stderr, "total non-boinc: %f %f\n", procinfo.user_time, procinfo.kernel_time);
#endif
}
double process_tree_cpu_time(int pid) {
PROC_MAP pm;
- PROCINFO pi;
+ PROCINFO procinfo;
int retval;
retval = procinfo_setup(pm);
if (retval) return 0;
- pi.clear();
- pi.id = pid;
- procinfo_app(pi, NULL, pm, NULL);
- return pi.user_time + pi.kernel_time;
+ procinfo.clear();
+ procinfo.id = pid;
+ procinfo_app(procinfo, NULL, pm, NULL);
+ return procinfo.user_time + procinfo.kernel_time;
}
diff --git a/lib/procinfo_mac.cpp b/lib/procinfo_mac.cpp
index 9e3d5d7..705c534 100644
--- a/lib/procinfo_mac.cpp
+++ b/lib/procinfo_mac.cpp
@@ -116,7 +116,7 @@ int procinfo_setup(PROC_MAP& pm) {
while (1) {
p.clear();
- c = fscanf(fd, "%d%d%d%d%ld%d%d:%lf ",
+ c = fscanf(fd, "%d%d%d%d%lu%d%d:%lf ",
&p.id,
&p.parentid,
&real_mem,
diff --git a/lib/procinfo_unix.cpp b/lib/procinfo_unix.cpp
index 6c338d8..de9a13f 100644
--- a/lib/procinfo_unix.cpp
+++ b/lib/procinfo_unix.cpp
@@ -59,6 +59,12 @@ using std::vector;
// see:
// man 5 proc
// /usr/src/linux/fs/proc/array.C
+//
+// Interesting note: the command part of /proc/PID/stat is the first
+// 15 characters of the executable filename.
+// If you want the entire filename, or the rest of the cmdline,
+// you need to parse /proc/PID/cmdline,
+// which is the cmdline with NULL separators
struct PROC_STAT {
int pid;
@@ -246,8 +252,9 @@ int procinfo_setup(PROC_MAP& pm) {
strlcpy(p.command, ps.comm, sizeof(p.command));
p.is_boinc_app = (p.id == pid || strcasestr(p.command, "boinc"));
p.is_low_priority = (ps.priority == 39);
- // Linux seems to add 20 here,
- // but this isn't documented anywhere
+ // Internally Linux stores the process priority as nice + 20
+ // as -ve values are error codes. Thus this generally gives
+ // a process priority range of 39..0
pm.insert(std::pair<int, PROCINFO>(p.id, p));
#endif
}
diff --git a/lib/procinfo_win.cpp b/lib/procinfo_win.cpp
index 5878ae0..0724b41 100644
--- a/lib/procinfo_win.cpp
+++ b/lib/procinfo_win.cpp
@@ -36,7 +36,7 @@ static int get_process_information(PVOID* ppBuffer, PULONG pcbBuffer) {
}
Status = pNTQSI(
- SystemProcessAndThreadInformation,
+ SystemProcessInformation,
*ppBuffer,
*pcbBuffer,
pcbBuffer
diff --git a/lib/remote_submit.cpp b/lib/remote_submit.cpp
index c4418f4..efb0508 100644
--- a/lib/remote_submit.cpp
+++ b/lib/remote_submit.cpp
@@ -28,6 +28,8 @@
#include <string.h>
#include "parse.h"
+#include "str_util.h"
+#include "url.h"
#include "remote_submit.h"
@@ -121,7 +123,6 @@ static int do_http_post(
int query_files(
const char* project_url,
const char* authenticator,
- vector<string> &paths,
vector<string> &md5s,
int batch_id,
vector<int> &absent_files,
@@ -144,7 +145,8 @@ int query_files(
FILE* reply = tmpfile();
char url[256];
sprintf(url, "%sjob_file.php", project_url);
- int retval = do_http_post(url, req_msg.c_str(), reply, paths);
+ vector<string> xx;
+ int retval = do_http_post(url, req_msg.c_str(), reply, xx);
if (retval) {
fclose(reply);
return retval;
@@ -202,7 +204,6 @@ int upload_files (
return retval;
}
fseek(reply, 0, SEEK_SET);
- bool success = false;
retval = -1;
error_msg = "";
while (fgets(buf, 256, reply)) {
@@ -225,6 +226,7 @@ int create_batch(
const char* authenticator,
const char* batch_name,
const char* app_name,
+ double expire_time,
int& batch_id,
string& error_msg
) {
@@ -236,11 +238,13 @@ int create_batch(
" <batch>\n"
" <batch_name>%s</batch_name>\n"
" <app_name>%s</app_name>\n"
+ " <expire_time>%f</expire_time>\n"
" </batch>\n"
"</create_batch>\n",
authenticator,
batch_name,
- app_name
+ app_name,
+ expire_time
);
sprintf(url, "%ssubmit_rpc_handler.php", project_url);
FILE* reply = tmpfile();
@@ -268,10 +272,65 @@ int create_batch(
return error_num;
}
+int estimate_batch(
+ const char* project_url,
+ const char* authenticator,
+ char app_name[256],
+ vector<JOB> jobs,
+ double& est_makespan,
+ string& error_msg
+) {
+ char buf[1024], url[1024];
+ sprintf(buf,
+ "<estimate_batch>\n"
+ "<authenticator>%s</authenticator>\n"
+ "<batch>\n"
+ " <app_name>%s</app_name>\n",
+ authenticator,
+ app_name
+ );
+ string request = buf;
+ for (unsigned int i=0; i<jobs.size(); i++) {
+ JOB job = jobs[i];
+ request += "<job>\n";
+ if (!job.cmdline_args.empty()) {
+ request += "<command_line>" + job.cmdline_args + "</command_line>\n";
+ }
+ request += "</job>\n";
+ }
+ request += "</batch>\n</estimate_batch>\n";
+ sprintf(url, "%ssubmit_rpc_handler.php", project_url);
+ FILE* reply = tmpfile();
+ vector<string> x;
+ int retval = do_http_post(url, request.c_str(), reply, x);
+ if (retval) {
+ fclose(reply);
+ return retval;
+ }
+ fseek(reply, 0, SEEK_SET);
+ retval = -1;
+ error_msg = "";
+ while (fgets(buf, 256, reply)) {
+#ifdef SHOW_REPLY
+ printf("submit_batch reply: %s", buf);
+#endif
+ if (parse_double(buf, "<seconds>", est_makespan)) {
+ retval = 0;
+ continue;
+ }
+ if (parse_int(buf, "<error_num>", retval)) continue;
+ if (parse_str(buf, "<error_msg>", error_msg)) continue;
+ }
+ fclose(reply);
+ return retval;
+}
+
int submit_jobs(
const char* project_url,
const char* authenticator,
- SUBMIT_REQ &req,
+ char app_name[256],
+ int batch_id,
+ vector<JOB> jobs,
string& error_msg
) {
char buf[1024], url[1024];
@@ -282,12 +341,12 @@ int submit_jobs(
" <batch_id>%d</batch_id>\n"
" <app_name>%s</app_name>\n",
authenticator,
- req.batch_id,
- req.app_name
+ batch_id,
+ app_name
);
string request = buf;
- for (unsigned int i=0; i<req.jobs.size(); i++) {
- JOB job = req.jobs[i];
+ for (unsigned int i=0; i<jobs.size(); i++) {
+ JOB job = jobs[i];
request += "<job>\n";
sprintf(buf, " <name>%s</name>\n", job.job_name);
request += buf;
@@ -296,18 +355,12 @@ int submit_jobs(
}
for (unsigned int j=0; j<job.infiles.size(); j++) {
INFILE infile = job.infiles[j];
- map<string, LOCAL_FILE>::iterator iter = req.local_files.find(infile.src_path);
- if (iter == req.local_files.end()) {
- fprintf(stderr, "file %s not in map\n", infile.src_path);
- exit(1);
- }
- LOCAL_FILE& lf = iter->second;
sprintf(buf,
"<input_file>\n"
"<mode>local_staged</mode>\n"
- "<source>jf_%s</source>\n"
+ "<source>%s</source>\n"
"</input_file>\n",
- lf.md5
+ infile.physical_name
);
request += buf;
}
@@ -341,11 +394,12 @@ int submit_jobs(
return retval;
}
-int query_batches(
+int query_batch_set(
const char* project_url,
const char* authenticator,
+ double min_mod_time,
vector<string> &batch_names,
- QUERY_BATCH_REPLY& qb_reply,
+ QUERY_BATCH_SET_REPLY& qb_reply,
string& error_msg
) {
string request;
@@ -355,6 +409,8 @@ int query_batches(
request = "<query_batch2>\n";
sprintf(buf, "<authenticator>%s</authenticator>\n", authenticator);
request += string(buf);
+ sprintf(buf, "<min_mod_time>%f</min_mod_time>\n", min_mod_time);
+ request += string(buf);
for (unsigned int i=0; i<batch_names.size(); i++) {
sprintf(buf, "<batch_name>%s</batch_name>\n", batch_names[i].c_str());
request += string(buf);
@@ -370,6 +426,7 @@ int query_batches(
}
fseek(reply, 0, SEEK_SET);
retval = -1;
+ qb_reply.server_time = 0;
error_msg = "";
while (fgets(buf, 256, reply)) {
#ifdef SHOW_REPLY
@@ -381,22 +438,23 @@ int query_batches(
}
if (parse_int(buf, "<error_num>", retval)) continue;
if (parse_str(buf, "<error_msg>", error_msg)) continue;
+ if (parse_double(buf, "<server_time>", qb_reply.server_time)) continue;
if (parse_int(buf, "<batch_size>", batch_size)) {
qb_reply.batch_sizes.push_back(batch_size);
continue;
}
if (strstr(buf, "<job>")) {
- QUERY_BATCH_JOB qbj;
+ JOB_STATUS js;
while (fgets(buf, 256, reply)) {
#ifdef SHOW_REPLY
printf("query_batches reply: %s", buf);
#endif
if (strstr(buf, "</job>")) {
- qb_reply.jobs.push_back(qbj);
+ qb_reply.jobs.push_back(js);
break;
}
- if (parse_str(buf, "job_name", qbj.job_name)) continue;
- if (parse_str(buf, "status", qbj.status)) continue;
+ if (parse_str(buf, "job_name", js.job_name)) continue;
+ if (parse_str(buf, "status", js.status)) continue;
}
continue;
}
@@ -405,6 +463,187 @@ int query_batches(
return retval;
}
+int BATCH_STATUS::parse(XML_PARSER& xp) {
+ memset(this, 0, sizeof(BATCH_STATUS));
+ while (!xp.get_tag()) {
+ if (xp.match_tag("/batch")) {
+ return 0;
+ }
+ if (xp.parse_int("id", id)) continue;
+ if (xp.parse_str("name", name, sizeof(name))) continue;
+ if (xp.parse_int("state", state)) continue;
+ if (xp.parse_int("njobs", njobs)) continue;
+ if (xp.parse_int("nerror_jobs", nerror_jobs)) continue;
+ if (xp.parse_double("fraction_done", fraction_done)) continue;
+ if (xp.parse_double("create_time", create_time)) continue;
+ if (xp.parse_double("expire_time", expire_time)) continue;
+ if (xp.parse_double("est_completion_time", est_completion_time)) continue;
+ if (xp.parse_double("completion_time", completion_time)) continue;
+ if (xp.parse_double("credit_estimate", credit_estimate)) continue;
+ if (xp.parse_double("credit_canonical", credit_canonical)) continue;
+ }
+ return ERR_XML_PARSE;
+}
+
+void BATCH_STATUS::print() {
+ printf("Batch %d (%s)\n"
+ " state: %s\n"
+ " njobs: %d\n"
+ " nerror_jobs: %d\n"
+ " fraction_done: %f\n",
+ id, name,
+ batch_state_string(state),
+ njobs,
+ nerror_jobs,
+ fraction_done
+ );
+ printf(
+ " create_time: %s\n",
+ time_to_string(create_time)
+ );
+ printf(
+ " expire_time: %s\n",
+ time_to_string(expire_time)
+ );
+ printf(
+ " est_completion_time: %s\n",
+ time_to_string(est_completion_time)
+ );
+ printf(
+ " completion_time: %s\n",
+ time_to_string(completion_time)
+ );
+ printf(
+ " credit_estimate: %f\n"
+ " credit_canonical: %f\n",
+ credit_estimate,
+ credit_canonical
+ );
+}
+
+int query_batches(
+ const char* project_url,
+ const char* authenticator,
+ vector<BATCH_STATUS>& batches,
+ string &error_msg
+) {
+ string request;
+ char url[1024], buf[256];
+ request = "<query_batches>\n";
+ sprintf(buf, "<authenticator>%s</authenticator>\n", authenticator);
+ request += string(buf);
+ request += "</query_batches>\n";
+ sprintf(url, "%ssubmit_rpc_handler.php", project_url);
+ FILE* reply = tmpfile();
+ vector<string> x;
+ int retval = do_http_post(url, request.c_str(), reply, x);
+ if (retval) {
+ fclose(reply);
+ return retval;
+ }
+ fseek(reply, 0, SEEK_SET);
+ retval = -1;
+ error_msg = "failed to parse Web RPC reply";
+ MIOFILE mf;
+ XML_PARSER xp(&mf);
+ mf.init_file(reply);
+ while (!xp.get_tag()) {
+ if (xp.match_tag("/batches")) {
+ retval = 0;
+ error_msg = "";
+ break;
+ }
+ if (xp.match_tag("batch")) {
+ BATCH_STATUS bs;
+ if (!bs.parse(xp)) {
+ batches.push_back(bs);
+ }
+ continue;
+ }
+ if (xp.parse_string("error_msg", error_msg)) continue;
+ if (xp.parse_int("error_num", retval)) continue;
+ }
+ fclose(reply);
+ return retval;
+}
+
+int JOB_STATE::parse(XML_PARSER& xp) {
+ memset(this, 0, sizeof(JOB_STATE));
+ while (!xp.get_tag()) {
+ if (xp.match_tag("/job")) {
+ return 0;
+ }
+ if (xp.parse_int("id", id)) continue;
+ if (xp.parse_str("name", name, sizeof(name))) continue;
+ if (xp.parse_int("canonical_instance_id", canonical_instance_id)) continue;
+ if (xp.parse_int("n_outfiles", n_outfiles)) continue;
+ }
+ return ERR_XML_PARSE;
+}
+
+void JOB_STATE::print() {
+ printf(
+ "job %d (%s)\n"
+ " canonical_instance_id %d\n"
+ " n_outfiles %d\n",
+ id, name,
+ canonical_instance_id,
+ n_outfiles
+ );
+}
+
+int query_batch(
+ const char* project_url,
+ const char* authenticator,
+ int batch_id,
+ const char* batch_name,
+ vector<JOB_STATE>& jobs,
+ string &error_msg
+) {
+ string request;
+ char url[1024], buf[256];
+ request = "<query_batch>\n";
+ sprintf(buf, "<authenticator>%s</authenticator>\n", authenticator);
+ request += string(buf);
+ if (batch_id) {
+ sprintf(buf, "<batch_id>%d</batch_id>\n", batch_id);
+ } else {
+ sprintf(buf, "<batch_name>%s</batch_name>\n", batch_name);
+ }
+ request += string(buf);
+ request += "</query_batch>\n";
+ sprintf(url, "%ssubmit_rpc_handler.php", project_url);
+ FILE* reply = tmpfile();
+ vector<string> x;
+ int retval = do_http_post(url, request.c_str(), reply, x);
+ if (retval) {
+ fclose(reply);
+ return retval;
+ }
+ fseek(reply, 0, SEEK_SET);
+ retval = -1;
+ error_msg = "";
+ MIOFILE mf;
+ XML_PARSER xp(&mf);
+ mf.init_file(reply);
+ while (!xp.get_tag()) {
+ if (xp.match_tag("/jobs")) {
+ retval = 0;
+ break;
+ }
+ if (xp.match_tag("job")) {
+ JOB_STATE js;
+ if (!js.parse(xp)) {
+ jobs.push_back(js);
+ }
+ continue;
+ }
+
+ }
+ fclose(reply);
+ return retval;
+}
+
int abort_jobs(
const char* project_url,
const char* authenticator,
@@ -497,7 +736,6 @@ int get_templates(
}
int TEMPLATE_DESC::parse(XML_PARSER& xp) {
- int retval;
string s;
while (!xp.get_tag()) {
if (xp.match_tag("input_template")) {
@@ -551,9 +789,10 @@ int get_output_file(
const char* dst_path,
string &error_msg
) {
- char url[1024];
+ char url[1024], job_name_esc[1024];
+ escape_url(job_name, job_name_esc, sizeof(job_name_esc));
sprintf(url, "%sget_output.php?cmd=workunit_file&auth_str=%s&wu_name=%s&file_num=%d",
- project_url, authenticator, job_name, file_num
+ project_url, authenticator, job_name_esc, file_num
);
//printf("fetching %s to %s\n", url, dst_path);
int retval = do_http_get(url, dst_path);
@@ -649,6 +888,49 @@ int retire_batch(
return retval;
}
+int set_expire_time(
+ const char* project_url,
+ const char* authenticator,
+ const char* batch_name,
+ double expire_time,
+ string &error_msg
+) {
+ string request;
+ char url[1024], buf[256];
+ request = "<set_expire_time>\n";
+ sprintf(buf, "<authenticator>%s</authenticator>\n", authenticator);
+ request += string(buf);
+ sprintf(buf, "<batch_name>%s</batch_name>\n", batch_name);
+ request += string(buf);
+ sprintf(buf, "<expire_time>%f</expire_time>\n", expire_time);
+ request += string(buf);
+ request += "</set_expire_time>\n";
+ sprintf(url, "%ssubmit_rpc_handler.php", project_url);
+ FILE* reply = tmpfile();
+ vector<string> x;
+ int retval = do_http_post(url, request.c_str(), reply, x);
+ if (retval) {
+ fclose(reply);
+ return retval;
+ }
+ retval = -1;
+ error_msg = "";
+ fseek(reply, 0, SEEK_SET);
+ while (fgets(buf, 256, reply)) {
+#ifdef SHOW_REPLY
+ printf("set_expire_time reply: %s", buf);
+#endif
+ if (parse_int(buf, "<error_num>", retval)) continue;
+ if (parse_str(buf, "<error_msg>", error_msg)) continue;
+ if (strstr(buf, "success")) {
+ retval = 0;
+ continue;
+ }
+ }
+ fclose(reply);
+ return retval;
+}
+
int ping_server(
const char* project_url,
string &error_msg
diff --git a/lib/remote_submit.h b/lib/remote_submit.h
index c2365b1..7990552 100644
--- a/lib/remote_submit.h
+++ b/lib/remote_submit.h
@@ -15,22 +15,29 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-// C++ interfaces to remote job submissions and file management RPCs
+// C++ interfaces to remote job submission and file management RPCs
+// See http://boinc.berkeley.edu/trac/wiki/RemoteJobs#Cinterface
+
+#ifndef REMOTE_SUBMIT_H
+#define REMOTE_SUBMIT_H
#include <stdio.h>
#include <string>
#include <vector>
#include <map>
+#include "parse.h"
+
using std::string;
using std::vector;
using std::map;
struct INFILE {
+ char physical_name[256]; // BOINC physical name
char src_path[256]; // path on submit machine
- char dst_filename[256];
+ char logical_name[256];
// filename on execution machine.
- // must agree with the app's input template
+ // not used; could be used to check consistency w/ input template
};
struct JOB {
@@ -44,24 +51,16 @@ struct LOCAL_FILE {
double nbytes;
};
-struct SUBMIT_REQ {
- char batch_name[256];
- char app_name[256];
- vector<JOB> jobs;
- map<string, LOCAL_FILE> local_files;
- // maps local path to info about file
- int batch_id;
-};
-
-struct QUERY_BATCH_JOB {
+struct JOB_STATUS {
string job_name;
string status;
- QUERY_BATCH_JOB(){}
+ JOB_STATUS(){}
};
-struct QUERY_BATCH_REPLY {
+struct QUERY_BATCH_SET_REPLY {
+ double server_time; // server time at start of query
vector<int> batch_sizes; // how many jobs in each of the queried batches
- vector<QUERY_BATCH_JOB> jobs; // the jobs, sequentially
+ vector<JOB_STATUS> jobs; // the jobs, sequentially
};
struct OUTFILE {
@@ -106,7 +105,6 @@ struct COMPLETED_JOB_DESC {
extern int query_files(
const char* project_url,
const char* authenticator,
- vector<string> &paths,
vector<string> &md5s,
int batch_id,
vector<int> &absent_files,
@@ -127,6 +125,7 @@ extern int create_batch(
const char* authenticator,
const char* batch_name,
const char* app_name,
+ double expire_time,
int &batch_id,
string& error_msg
);
@@ -134,15 +133,81 @@ extern int create_batch(
extern int submit_jobs(
const char* project_url,
const char* authenticator,
- SUBMIT_REQ &req,
+ char app_name[256],
+ int batch_id,
+ vector<JOB> jobs,
string& error_msg
);
-extern int query_batches(
+extern int estimate_batch(
+ const char* project_url,
+ const char* authenticator,
+ char app_name[256],
+ vector<JOB> jobs,
+ double& est_makespan,
+ string& error_msg
+);
+
+// Return the short status of the jobs in a given set of batches
+// Used by the Condor interface
+//
+extern int query_batch_set(
const char* project_url,
const char* authenticator,
+ double min_mod_time,
vector<string> &batch_names,
- QUERY_BATCH_REPLY& reply,
+ QUERY_BATCH_SET_REPLY& reply,
+ string& error_msg
+);
+
+struct BATCH_STATUS {
+ int id;
+ char name[256]; // name of batch
+ char app_name[256];
+ int state; // see lib/common_defs.h
+ int njobs; // how many jobs in batch
+ int nerror_jobs; // how many jobs errored out
+ double fraction_done; // how much of batch is done (0..1)
+ double create_time; // when batch was created
+ double expire_time; // when it will expire
+ double est_completion_time; // estimated completion time
+ double completion_time; // if completed, actual completion time
+ double credit_estimate; // original estimate for credit
+ double credit_canonical; // if completed, granted credit
+
+ int parse(XML_PARSER&);
+ void print();
+};
+
+// Return a list of this user's batches
+//
+extern int query_batches(
+ const char* project_url,
+ const char* authenticator,
+ vector<BATCH_STATUS>& batches,
+ string& error_msg
+);
+
+struct JOB_STATE {
+ int id;
+ char name[256];
+ int canonical_instance_id; // it job completed successfully,
+ // the ID of the canonical instance
+ int n_outfiles; // number of output files
+
+ int parse(XML_PARSER&);
+ void print();
+};
+
+// Return the state of jobs in a given batch
+// (can specify by either ID or name)
+//
+extern int query_batch(
+ const char* project_url,
+ const char* authenticator,
+ int batch_id,
+ const char batch_name[256],
+ vector<JOB_STATE>& jobs,
string& error_msg
);
@@ -186,7 +251,17 @@ extern int retire_batch(
string& error_msg
);
+extern int set_expire_time(
+ const char* project_url,
+ const char* authenticator,
+ const char* batch_name,
+ double expire_time,
+ string& error_msg
+);
+
extern int ping_server(
const char* project_url,
string& error_msg
);
+
+#endif
diff --git a/lib/run_app_windows.cpp b/lib/run_app_windows.cpp
index 4956d5b..0e4541f 100644
--- a/lib/run_app_windows.cpp
+++ b/lib/run_app_windows.cpp
@@ -538,12 +538,6 @@ void get_sandbox_account_service_token() {
// argv is set up Unix-style, i.e. argv[0] is the program name
//
-// CreateEnvironmentBlock
-typedef BOOL (WINAPI *tCEB)(LPVOID *lpEnvironment, HANDLE hToken, BOOL bInherit);
-// DestroyEnvironmentBlock
-typedef BOOL (WINAPI *tDEB)(LPVOID lpEnvironment);
-
-
int run_app_windows(
const char* dir, const char* file, int argc, char *const argv[], HANDLE& id
) {
@@ -569,20 +563,9 @@ int run_app_windows(
get_sandbox_account_interactive_token();
if (sandbox_account_interactive_token != NULL) {
- // Find CreateEnvironmentBlock/DestroyEnvironmentBlock pointers
- tCEB pCEB = NULL;
- tDEB pDEB = NULL;
- HMODULE hUserEnvLib = NULL;
-
- hUserEnvLib = LoadLibraryA("userenv.dll");
- if (hUserEnvLib) {
- pCEB = (tCEB) GetProcAddress(hUserEnvLib, "CreateEnvironmentBlock");
- pDEB = (tDEB) GetProcAddress(hUserEnvLib, "DestroyEnvironmentBlock");
- }
-
// Construct an environment block that contains environment variables that don't
// describe the current user.
- if (!pCEB(&environment_block, sandbox_account_interactive_token, FALSE)) {
+ if (!CreateEnvironmentBlock(&environment_block, sandbox_account_interactive_token, FALSE)) {
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg));
fprintf(stderr, "CreateEnvironmentBlock failed: %s\n", error_msg);
}
@@ -601,16 +584,11 @@ int run_app_windows(
&process_info
);
- if (!pDEB(environment_block)) {
+ if (!DestroyEnvironmentBlock(environment_block)) {
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg));
fprintf(stderr, "DestroyEnvironmentBlock failed: %s\n", error_msg);
}
- if (hUserEnvLib) {
- pCEB = NULL;
- pDEB = NULL;
- FreeLibrary(hUserEnvLib);
- }
} else {
retval = CreateProcessA(
file,
diff --git a/lib/stackwalker_win.cpp b/lib/stackwalker_win.cpp
index f8d64c8..e01c5bc 100644
--- a/lib/stackwalker_win.cpp
+++ b/lib/stackwalker_win.cpp
@@ -391,39 +391,6 @@ int DebuggerInitialize( LPCSTR pszBOINCLocation, LPCSTR pszSymbolStore, BOOL bPr
DUPLICATE_SAME_ACCESS
);
- // Detect which version of Windows we are running on.
- OSVERSIONINFO osvi;
- ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- GetVersionEx((OSVERSIONINFO*)&osvi);
-
- // For the most part the dbghelp.dll does the right stuff, but there are
- // conditions where things go off into never never land. Most of the
- // time the error comes back ERROR_MOD_NOT_FOUND. Most of the info
- // out on the net describes conditions in which dbghelp.dll is trying
- // to dynamically load another module such as symsrv.dll and fails to
- // find it. Preloading the module only seems to work on some machines.
- // On Windows XP or better a new API has been introduced called
- // SetDllDirectory which will inject a path into the search order
- // that is before the System and Windows directories which is what we
- // want.
- if ((VER_PLATFORM_WIN32_NT == osvi.dwPlatformId) &&
- ((6 >= osvi.dwMajorVersion) || // == Vista, Win2008, +
- (5 == osvi.dwMajorVersion) && (0 != osvi.dwMinorVersion))) // == Win XP, Win2003
- {
- HMODULE hKernel32 = LoadLibraryA("kernel32.dll");
- if (hKernel32) {
- pSDD = (tSDD)GetProcAddress( hKernel32, "SetDllDirectoryA" );
- if (!pSDD(pszBOINCLocation)) {
- fprintf(stderr, "SetDllDirectory(): GetLastError = %lu\n", gle);
- }
- FreeLibrary(hKernel32);
- hKernel32 = NULL;
- pSDD = NULL;
- }
- }
-
-
if (!DebuggerLoadLibrary(&g_hDbgHelpDll, pszBOINCLocation, "dbghelp.dll")) {
g_bInitialized = FALSE;
return 1;
@@ -692,7 +659,7 @@ int DebuggerDisplayDiagnostics()
// #################################################################################
// Here the Stackwalk-Part begins.
// Some of the code is from an example from a book
-// But I couldn�t find the reference anymore... sorry...
+// But I couldn´t find the reference anymore... sorry...
// If someone knowns, please let me know...
// #################################################################################
// #################################################################################
diff --git a/lib/str_util.cpp b/lib/str_util.cpp
index 3fa25c1..df2bad3 100644
--- a/lib/str_util.cpp
+++ b/lib/str_util.cpp
@@ -29,6 +29,7 @@
#include <string>
#include <cmath>
#include <string.h>
+#include <time.h>
#include <stdlib.h>
#include <ctype.h>
#endif
@@ -431,6 +432,7 @@ const char* boincerror(int which_error) {
case ERR_NO_SIGNATURE: return "no signature";
case ERR_THREAD: return "thread failure";
case ERR_SIGNAL_CATCH: return "caught signal";
+ case ERR_BAD_FORMAT: return "bad file format";
case ERR_UPLOAD_TRANSIENT: return "transient upload error";
case ERR_UPLOAD_PERMANENT: return "permanent upload error";
case ERR_IDLE_PERIOD: return "user preferences say can't start work";
@@ -643,6 +645,17 @@ const char* active_task_state_string(int state) {
return "Unknown";
}
+const char* batch_state_string(int state) {
+ switch (state) {
+ case BATCH_STATE_INIT: return "uninitialized";
+ case BATCH_STATE_IN_PROGRESS: return "in progress";
+ case BATCH_STATE_COMPLETE: return "completed";
+ case BATCH_STATE_ABORTED: return "aborted";
+ case BATCH_STATE_RETIRED: return "retired";
+ }
+ return "unknown";
+}
+
// string substitution:
// haystack is the input string
// out is the output buffer
@@ -691,3 +704,14 @@ void strip_translation(char* p) {
remove_str(p, "_(\"");
remove_str(p, "\")");
}
+
+char* lf_terminate(char* p) {
+ int n = (int)strlen(p);
+ if (p[n-1] == '\n') {
+ return p;
+ }
+ p = (char*)realloc(p, n+2);
+ p[n] = '\n';
+ p[n+1] = 0;
+ return p;
+}
diff --git a/lib/str_util.h b/lib/str_util.h
index 295a888..a1adaf9 100644
--- a/lib/str_util.h
+++ b/lib/str_util.h
@@ -75,6 +75,11 @@ extern int string_substitute(
//
extern void mysql_timestamp(double, char*);
+// take a malloced string.
+// if \n is not last char, add it.
+//
+extern char* lf_terminate(char*);
+
extern const char* network_status_string(int);
extern const char* rpc_reason_string(int);
extern const char* suspend_reason_string(int reason);
@@ -83,6 +88,7 @@ extern const char* battery_state_string(int state);
extern const char* result_client_state_string(int state);
extern const char* result_scheduler_state_string(int state);
extern const char* active_task_state_string(int state);
+extern const char* batch_state_string(int state);
extern void strip_translation(char* p);
diff --git a/lib/util.cpp b/lib/util.cpp
index a1981a1..d44fea5 100644
--- a/lib/util.cpp
+++ b/lib/util.cpp
@@ -425,6 +425,7 @@ int run_program(
}
}
}
+ if (process_info.hThread) CloseHandle(process_info.hThread);
id = process_info.hProcess;
return 0;
}
@@ -472,15 +473,8 @@ void kill_program(int pid) {
#ifdef _WIN32
int get_exit_status(HANDLE pid_handle) {
unsigned long status=1;
- while (1) {
- if (GetExitCodeProcess(pid_handle, &status)) {
- if (status == STILL_ACTIVE) {
- boinc_sleep(1);
- } else {
- break;
- }
- }
- }
+ WaitForSingleObject(pid_handle, INFINITE);
+ GetExitCodeProcess(pid_handle, &status);
return (int) status;
}
bool process_exists(HANDLE h) {
@@ -490,7 +484,6 @@ bool process_exists(HANDLE h) {
}
return false;
}
-
#else
int get_exit_status(int pid) {
int status;
@@ -498,9 +491,8 @@ int get_exit_status(int pid) {
return status;
}
bool process_exists(int pid) {
- int p = waitpid(pid, 0, WNOHANG);
- if (p == pid) return false; // process has exited
- if (p == -1) return false; // PID doesn't exist
+ int retval = kill(pid, 0);
+ if (retval == -1 && errno == ESRCH) return false;
return true;
}
#endif
@@ -511,9 +503,7 @@ static int get_client_mutex(const char*) {
// Global mutex on Win2k and later
//
- if (IsWindows2000Compatible()) {
- strcpy(buf, "Global\\");
- }
+ strcpy(buf, "Global\\");
strcat(buf, RUN_MUTEX);
HANDLE h = CreateMutexA(NULL, true, buf);
@@ -551,7 +541,6 @@ int wait_client_mutex(const char* dir, double timeout) {
bool boinc_is_finite(double x) {
#if defined (HPUX_SOURCE)
return _Isfinite(x);
- return false;
#else
return finite(x) != 0;
#endif
diff --git a/lib/util.h b/lib/util.h
index fbafc0d..3b89817 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -30,9 +30,10 @@ extern void push_unique(std::string, std::vector<std::string>&);
// NOTE: use #include <functional> to get max,min
#define SECONDS_PER_DAY 86400
-#define KILO (1024.0)
-#define MEGA (1048576.0)
-#define GIGA (1024.*1048576.0)
+#define KILO (1024.)
+#define MEGA (1024.*KILO)
+#define GIGA (1024.*MEGA)
+#define TERA (1024.*GIGA)
static inline double drand() {
return (double)rand()/(double)RAND_MAX;
@@ -40,7 +41,7 @@ static inline double drand() {
extern double rand_normal();
#ifdef _WIN32
-#include <windows.h>
+#include "boinc_win.h"
extern int boinc_thread_cpu_time(HANDLE thread_handle, double& cpu);
extern int boinc_process_cpu_time(HANDLE process_handle, double& cpu);
#else
@@ -49,6 +50,7 @@ extern int boinc_process_cpu_time(HANDLE process_handle, double& cpu);
//
static const int PROCESS_IDLE_PRIORITY = 19;
static const int PROCESS_MEDIUM_PRIORITY = 10;
+static const int PROCESS_NORMAL_PRIORITY = 0;
extern double linux_cpu_time(int pid);
#endif
@@ -80,7 +82,12 @@ extern int read_file_string(
#ifdef _WIN32
extern int run_program(
- const char* dir, const char* file, int argc, char *const argv[], double, HANDLE&
+ const char* dir, // directory to run program in; NULL if current dir
+ const char* file, // path of executable
+ int argc, char *const argv[], // cmdline args, UNIX-style
+ double, // if nonzero, wait for X seconds, then check
+ // whether process is still running, return error if not
+ HANDLE& // process handle
);
extern void kill_program(HANDLE);
@@ -88,6 +95,7 @@ extern int get_exit_status(HANDLE);
extern bool process_exists(HANDLE);
#else
+// like Win version, but returns PID
extern int run_program(
const char* dir, const char* file, int argc, char *const argv[], double, int&
);
diff --git a/lib/win_util.cpp b/lib/win_util.cpp
index 041f582..1916ce5 100644
--- a/lib/win_util.cpp
+++ b/lib/win_util.cpp
@@ -30,161 +30,6 @@
#include "filesys.h"
#include "win_util.h"
-/**
- * Find out if we are on a Windows 2000 compatible system
- **/
-BOOL IsWindows2000Compatible() {
- OSVERSIONINFO osvi;
- ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-
- if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) {
- return FALSE;
- }
-
- return (osvi.dwMajorVersion >= 5);
-}
-
-/**
- * Define these if they aren't defined. They are normally found in
- * winnt.h, but some compilers don't have them.
- **/
-#ifndef VER_AND
-#define VER_AND 6
-#endif
-
-#ifndef VER_SUITENAME
-#define VER_SUITENAME 0x0000040
-#endif
-
-#ifndef VER_SUITE_SINGLEUSERTS
-#define VER_SUITE_SINGLEUSERTS 0x00000100
-#endif
-
-/**
- * This function performs the basic check to see if
- * the platform on which it is running is Terminal
- * services enabled. Note, this code is compatible on
- * all Win32 platforms. For the Windows 2000 platform
- * we perform a "lazy" bind to the new product suite
- * APIs that were first introduced on that platform.
- **/
-BOOL IsTerminalServicesEnabled() {
- BOOL bResult = FALSE; // assume Terminal Services is not enabled
-
- DWORD dwVersion;
- OSVERSIONINFOEXA osVersionInfo;
- DWORDLONG dwlConditionMask = 0;
- HMODULE hmodK32 = NULL;
- HMODULE hmodNtDll = NULL;
- typedef ULONGLONG (WINAPI *PFnVerSetConditionMask)(ULONGLONG,ULONG,UCHAR);
- typedef BOOL (WINAPI *PFnVerifyVersionInfoA)(POSVERSIONINFOEXA, DWORD, DWORDLONG);
- PFnVerSetConditionMask pfnVerSetConditionMask;
- PFnVerifyVersionInfoA pfnVerifyVersionInfoA;
-
- dwVersion = GetVersion();
-
- // are we running NT ?
- if (!(dwVersion & 0x80000000))
- {
- // Is it Windows 2000 (NT 5.0) or greater ?
- if (LOBYTE(LOWORD(dwVersion)) > 4)
- {
- // In Windows 2000 we need to use the Product Suite APIs
- // Don't static link because it won't load on non-Win2000 systems
- hmodNtDll = GetModuleHandleA( "NTDLL.DLL" );
- if (hmodNtDll != NULL)
- {
- pfnVerSetConditionMask = (PFnVerSetConditionMask )GetProcAddress( hmodNtDll, "VerSetConditionMask");
- if (pfnVerSetConditionMask != NULL)
- {
- dwlConditionMask = (*pfnVerSetConditionMask)( dwlConditionMask, VER_SUITENAME, VER_AND );
- hmodK32 = GetModuleHandleA( "KERNEL32.DLL" );
- if (hmodK32 != NULL)
- {
- pfnVerifyVersionInfoA = (PFnVerifyVersionInfoA)GetProcAddress( hmodK32, "VerifyVersionInfoA") ;
- if (pfnVerifyVersionInfoA != NULL)
- {
- ZeroMemory(&osVersionInfo, sizeof(osVersionInfo));
- osVersionInfo.dwOSVersionInfoSize = sizeof(osVersionInfo);
- osVersionInfo.wSuiteMask = VER_SUITE_TERMINAL | VER_SUITE_SINGLEUSERTS;
- bResult = (*pfnVerifyVersionInfoA)(
- &osVersionInfo,
- VER_SUITENAME,
- dwlConditionMask);
- }
- }
- }
- }
- }
- else
- {
- // This is NT 4.0 or older
- bResult = ValidateProductSuite( "Terminal Server" );
- }
- }
-
- return bResult;
-}
-
-
-/**
- * This function compares the passed in "suite name" string
- * to the product suite information stored in the registry.
- * This only works on the Terminal Server 4.0 platform.
- **/
-BOOL ValidateProductSuite (LPSTR SuiteName) {
- BOOL rVal = FALSE;
- LONG Rslt;
- HKEY hKey = NULL;
- DWORD Type = 0;
- DWORD Size = 0;
- LPSTR ProductSuite = NULL;
- LPSTR p;
-
- Rslt = RegOpenKeyA(
- HKEY_LOCAL_MACHINE,
- "System\\CurrentControlSet\\Control\\ProductOptions",
- &hKey
- );
-
- if (Rslt != ERROR_SUCCESS)
- goto exit;
-
- Rslt = RegQueryValueExA( hKey, "ProductSuite", NULL, &Type, NULL, &Size );
- if (Rslt != ERROR_SUCCESS || !Size)
- goto exit;
-
- ProductSuite = (LPSTR) LocalAlloc( LPTR, Size );
- if (!ProductSuite)
- goto exit;
-
- Rslt = RegQueryValueExA( hKey, "ProductSuite", NULL, &Type,
- (LPBYTE) ProductSuite, &Size );
- if (Rslt != ERROR_SUCCESS || Type != REG_MULTI_SZ)
- goto exit;
-
- p = ProductSuite;
- while (*p)
- {
- if (lstrcmpA( p, SuiteName ) == 0)
- {
- rVal = TRUE;
- break;
- }
- p += (lstrlenA( p ) + 1);
- }
-
-exit:
- if (ProductSuite)
- LocalFree( ProductSuite );
-
- if (hKey)
- RegCloseKey( hKey );
-
- return rVal;
-}
-
/**
* This function terminates a process by process id instead of a handle.
@@ -204,61 +49,13 @@ BOOL TerminateProcessById( DWORD dwProcessID ) {
return bRetVal;
}
-
-void chdir_to_install_dir() {
- LONG lReturnValue;
- HKEY hkSetupHive;
- LPSTR lpszRegistryValue = NULL;
- char szPath[MAX_PATH];
- DWORD dwSize = 0;
-
- // change the current directory to the boinc data directory if it exists
- lReturnValue = RegOpenKeyExA(
- HKEY_LOCAL_MACHINE,
- "SOFTWARE\\Space Sciences Laboratory, U.C. Berkeley\\BOINC Setup",
- 0,
- KEY_READ,
- &hkSetupHive
- );
- if (lReturnValue == ERROR_SUCCESS) {
- // How large does our buffer need to be?
- lReturnValue = RegQueryValueExA(
- hkSetupHive,
- "INSTALLDIR",
- NULL,
- NULL,
- NULL,
- &dwSize
- );
- if (lReturnValue != ERROR_FILE_NOT_FOUND) {
- // Allocate the buffer space.
- lpszRegistryValue = (LPSTR) malloc(dwSize);
- (*lpszRegistryValue) = NULL;
-
- // Now get the data
- lReturnValue = RegQueryValueExA(
- hkSetupHive,
- "INSTALLDIR",
- NULL,
- NULL,
- (LPBYTE)lpszRegistryValue,
- &dwSize
- );
-
- SetCurrentDirectoryA(lpszRegistryValue);
- }
- }
-
- if (hkSetupHive) RegCloseKey(hkSetupHive);
- if (lpszRegistryValue) free(lpszRegistryValue);
-}
-
-
void chdir_to_data_dir() {
LONG lReturnValue;
HKEY hkSetupHive;
- LPSTR lpszRegistryValue = NULL;
char szPath[MAX_PATH];
+ LPSTR lpszValue = NULL;
+ LPSTR lpszExpandedValue = NULL;
+ DWORD dwValueType = REG_EXPAND_SZ;
DWORD dwSize = 0;
// change the current directory to the boinc data directory if it exists
@@ -275,26 +72,40 @@ void chdir_to_data_dir() {
hkSetupHive,
"DATADIR",
NULL,
- NULL,
+ &dwValueType,
NULL,
&dwSize
);
if (lReturnValue != ERROR_FILE_NOT_FOUND) {
// Allocate the buffer space.
- lpszRegistryValue = (LPSTR) malloc(dwSize);
- (*lpszRegistryValue) = NULL;
+ lpszValue = (LPSTR) malloc(dwSize);
+ (*lpszValue) = NULL;
// Now get the data
lReturnValue = RegQueryValueExA(
hkSetupHive,
"DATADIR",
NULL,
- NULL,
- (LPBYTE)lpszRegistryValue,
+ &dwValueType,
+ (LPBYTE)lpszValue,
&dwSize
);
- SetCurrentDirectoryA(lpszRegistryValue);
+ // Expand the Strings
+ // We need to get the size of the buffer needed
+ dwSize = 0;
+ lReturnValue = ExpandEnvironmentStringsA(lpszValue, NULL, dwSize);
+
+ if (lReturnValue) {
+ // Make the buffer big enough for the expanded string
+ lpszExpandedValue = (LPSTR) malloc(lReturnValue);
+ (*lpszExpandedValue) = NULL;
+ dwSize = lReturnValue;
+
+ ExpandEnvironmentStringsA(lpszValue, lpszExpandedValue, dwSize);
+
+ SetCurrentDirectoryA(lpszExpandedValue);
+ }
}
} else {
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_COMMON_APPDATA|CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, szPath))) {
@@ -306,80 +117,8 @@ void chdir_to_data_dir() {
}
if (hkSetupHive) RegCloseKey(hkSetupHive);
- if (lpszRegistryValue) free(lpszRegistryValue);
-}
-
-
-// return true if running under remote desktop
-// (in which case CUDA and Stream apps don't work)
-//
-typedef BOOL (__stdcall *tWTSQSI)( IN HANDLE, IN DWORD, IN DWORD, OUT LPTSTR*, OUT DWORD* );
-typedef VOID (__stdcall *tWTSFM)( IN PVOID );
-
-bool is_remote_desktop() {
- static HMODULE wtsapi32lib = NULL;
- static tWTSQSI pWTSQSI = NULL;
- static tWTSFM pWTSFM = NULL;
- LPTSTR pBuf = NULL;
- DWORD dwLength;
- USHORT usProtocol=0, usConnectionState=0;
-
- if (!wtsapi32lib) {
- wtsapi32lib = LoadLibrary(_T("wtsapi32.dll"));
- if (wtsapi32lib) {
- pWTSQSI = (tWTSQSI)GetProcAddress(wtsapi32lib, "WTSQuerySessionInformationA");
- pWTSFM = (tWTSFM)GetProcAddress(wtsapi32lib, "WTSFreeMemory");
- }
- }
-
- if (pWTSQSI) {
-
- // WTSQuerySessionInformation(
- // WTS_CURRENT_SERVER_HANDLE,
- // WTS_CURRENT_SESSION,
- // WTSClientProtocolType,
- // &pBuf,
- // &dwLength
- // );
- if (pWTSQSI(
- (HANDLE)NULL,
- (DWORD)-1,
- (DWORD)16,
- &pBuf,
- &dwLength
- )) {
- usProtocol = *(USHORT*)pBuf;
- pWTSFM(pBuf);
- }
-
- // WTSQuerySessionInformation(
- // WTS_CURRENT_SERVER_HANDLE,
- // WTS_CURRENT_SESSION,
- // WTSConnectState,
- // &pBuf,
- // &dwLength
- // );
- if (pWTSQSI(
- (HANDLE)NULL,
- (DWORD)-1,
- (DWORD)8,
- &pBuf,
- &dwLength
- )) {
- usConnectionState = *(USHORT*)pBuf;
- pWTSFM(pBuf);
- }
-
- // RDP Session implies Remote Desktop
- if (usProtocol == 2) return true;
-
- // Fast User Switching keeps the protocol set to the console but changes
- // the connected state to disconnected.
- if ((usProtocol == 0) && (usConnectionState == 4)) return true;
-
- }
-
- return false;
+ if (lpszValue) free(lpszValue);
+ if (lpszExpandedValue) free(lpszExpandedValue);
}
std::wstring A2W(const std::string& str) {
diff --git a/lib/win_util.h b/lib/win_util.h
index e7cf4e0..5c58f2f 100644
--- a/lib/win_util.h
+++ b/lib/win_util.h
@@ -18,12 +18,8 @@
#ifndef _WIN_UTIL_
#define _WIN_UTIL_
-extern BOOL IsWindows2000Compatible();extern BOOL IsTerminalServicesEnabled();
-extern BOOL ValidateProductSuite(LPSTR SuiteName);
extern BOOL TerminateProcessById(DWORD dwProcessId);
-extern void chdir_to_install_dir();
extern void chdir_to_data_dir();
-extern bool is_remote_desktop();
extern std::wstring A2W(const std::string& str);
extern std::string W2A(const std::wstring& str);
diff --git a/locale/Makefile.am b/locale/Makefile.am
index a8850cf..0affdb2 100644
--- a/locale/Makefile.am
+++ b/locale/Makefile.am
@@ -21,7 +21,7 @@ locale_dirs = \
gl \
hr \
hu \
- it \
+ it_IT \
ja \
ko \
lt \
diff --git a/locale/bg/BOINC-Manager.mo b/locale/bg/BOINC-Manager.mo
index 0ef7ac1..70f94c8 100644
Binary files a/locale/bg/BOINC-Manager.mo and b/locale/bg/BOINC-Manager.mo differ
diff --git a/locale/bg/BOINC-Manager.po b/locale/bg/BOINC-Manager.po
index e696398..6ef45e9 100644
--- a/locale/bg/BOINC-Manager.po
+++ b/locale/bg/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-09-10 11:32+0000\n"
"Last-Translator: Dimitar <mexicoman at abv.bg>\n"
"Language-Team: AMD Powered @ Home Team <timeros at gmail.com>\n"
@@ -212,341 +212,341 @@ msgstr "Свързан"
msgid "Disconnected"
msgstr "Прекъснат"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Затворете прозореца на %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Затворете Прозореца"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Изход от %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Известия\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Покажи известия"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Проекти\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Покажи проекти"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Задачи\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Покажи задачи"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Транс&фери\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Покажи трансфери"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Статистика\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Покажи статистика"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Употреба на диска\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Покажи употреба на диска"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Прост &Изглед...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Покажи простия графически интерфейс."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Добави проект или акаунт мениджър..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Стани доброволец за някои или за всички 30+ проекта в много области на "
"науката"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Синхронизирай с %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Вземи текущи настройки от %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Добави проект..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Добави проект"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "С&при да използваш %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Премахни този компютър от контрола на акаунт мениджъра."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Опции..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Конфигурирай опциите на дисплея и настройките на проксито"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Изчислителни &предпочитания..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Настройте изчислителните предпочитания"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Работи винаги"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Позволи работа независимо от предпочитанията"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Работи на база на &предпочитанията"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Позволи работа според предпочитанията"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Временно прекрати"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Спри работа независимо от предпочитанията"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Използвай GPU винаги"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Позволи GPU работа независимо от предпочитанията"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Използвай GPU на база на предпочитанията"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Позволи GPU работа според предпочитанията"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Временно прекрати GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Спри GPU работа независимо от предпочитанията"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Мрежовата дейност е винаги възможна"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Позволи връзка по мрежата независимо от предпочитанията"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Мрежова дейност на база на предпочитанията"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Позволи мрежова дейност според предпочитанията"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Мрежовата дейност е временно прекратена"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Спри мрежовата дейност на BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Свържи се с друг компютър, който има стартиран %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Избери компютър..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Изключи свързания клиент..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Изключи свързаният в момента клиент"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Стартирай референтните CPU &показатели"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Стартира BOINC референтни CPU показатели"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Извърши комуникация по мрежата"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Извърши всички изчакващи връзки по мрежата"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Прочети конфигуриращите файлове"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Прочети конфигуриращата информация от файловете cc_config.xml и "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Прочети файла с локални предпочитания"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Прочети предпочитанията от global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Стартирай още един брой от %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Стартирай още един %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Регистър на събитията...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Покажи диагностични съобщения."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &помощ"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Покажи информация за %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s помощ"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Покажи информация за %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Покажи информация за BOINC и %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Относно %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Информация за лицензи и авторски права."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Файл"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Изглед"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "И&нструменти"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Дейност"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "За &напреднали"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Помощ"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Спри да използваш %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -561,12 +561,12 @@ msgstr ""
"\n"
"Искате ли да спрете да използвате %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Изключи текущия клиент..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -575,27 +575,27 @@ msgstr ""
"%s ще изключи текущия клиент\n"
"и ще Ви предложи да се свържете към друг хост."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s успешно добави %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Свързване към %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Свързан към %s (%s)"
@@ -632,26 +632,26 @@ msgstr ""
"\n"
"Моля посетете уеб сайта на проекта и следвайте инструкциите там."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Комуникация с BOINC клиент. Моля изчакайте ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Напусни %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "И&зход от %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Предаване на информация"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Отказ"
@@ -810,7 +810,7 @@ msgstr "%s успя да прекъсне връзката с Интернет."
msgid "%s failed to disconnected from the Internet."
msgstr "%s не успя да прекъсне връзката с Интернет."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -831,7 +831,7 @@ msgstr ""
"- свържете се с вашия администратор за да Ви добави към\n"
"'boinc_master' потребителска група."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -841,16 +841,16 @@ msgstr ""
"%s.\n"
"(Код за грешка %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " @ "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -858,69 +858,69 @@ msgstr ""
"За да работи правилно BOINC се нуждае от рестартиране.\n"
"Моля рестартирайте Вашия компютър и опитайте отново."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Мениджър"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Мениджър бе стартиран от операционната система автоматично"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Стартирай BOINC така че само иконата в системната лента да е видима"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Папка съдържаща изпълнимия BOINC Клиент файл"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Папка с BOINC данни"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Име на хоста или IP адрес"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC номер на порт"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Парола"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Стартирай BOINC с тези аргументи по избор"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "изключи BOINC защитени потребители и разрешения"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"задайте режим на отстраняване на грешки за да позволите съобщения за грешки "
"от мениджърa"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "позволени множество прозорци на BOINC Мениджъра"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Не се използва: заобиколно решение за бъг в XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Автоматично Разпознаване)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Непознат)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Дефиниран от Потребителя)"
@@ -947,7 +947,7 @@ msgid "E&xit"
msgstr "И&зход"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Възобнови работа"
@@ -1103,64 +1103,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Отворена Инфраструктура на Бъркли за Изчисления в Мрежа"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "невалидно число"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "невалиден час, формата е ЧЧ:ММ"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "невалиден часови интервал, формата е ЧЧ:ММ-ЧЧ:ММ"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "засечена невалидна въведена стойност"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Грешка при Проверка"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Приложения за добавяне"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' не е изпълнимо приложение."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Добави Ексклузивно Приложение"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Име на приложение за добавяне?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Добави ексклузивно приложение"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Имената на приложенията трябва да завършват с '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' е вече в списъка."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1168,11 +1168,11 @@ msgstr ""
"Наистина ли искате да изтриете всички локални предпочитания?\n"
"(Това няма да засегне ексклузивните приложения.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Потвърждение"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Предпочитания"
@@ -1188,11 +1188,11 @@ msgstr ""
"Натиснете Изчисти за да възстановите уеб-базираните настройки (с изключение "
"на ексклузивните приложения)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Изчисти"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "изчиства всички локални предпочитания и затваря диалога"
@@ -1212,7 +1212,7 @@ msgstr "използване на диска и паметта"
msgid "exclusive applications"
msgstr "ексклузивни приложения"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1225,7 +1225,7 @@ msgid "close the dialog without saving"
msgstr "затваря диалоговия прозорец без да запази"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Помощ"
@@ -1282,7 +1282,7 @@ msgstr ""
"минути"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "минути"
@@ -1298,7 +1298,7 @@ msgstr "временно прекратява работа ако използв
msgid "percent (0 means no restriction)"
msgstr "процента (0 означава, че няма ограничение)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Всеки ден в часовия диапазон от"
@@ -1306,8 +1306,8 @@ msgstr "Всеки ден в часовия диапазон от"
msgid "start work at this time"
msgstr "започни работа в този час"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "и"
@@ -1315,43 +1315,43 @@ msgstr "и"
msgid "stop work at this time"
msgstr "спри работа в този час"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(няма ограничение ако са равни)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Ден от седмицата за незачитане:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "поставете отметка за да уточните часове за този ден от седмицата"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Понеделник"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Вторник"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Сряда"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Четвъртък"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Петък"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Събота"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Неделя"
@@ -1372,9 +1372,9 @@ msgstr "При мултипроцесорни системи, използвай
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Използвай максимум"
@@ -1383,73 +1383,73 @@ msgstr "Използвай максимум"
msgid "% CPU time"
msgstr "% CPU време"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Основни опции"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Максимална скорост на даунлоуд"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "Кбайта/сек."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Максимална скорост на ъплоуд"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Прехвърляй максимум"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Мбайта"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "всеки"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "дни"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Минимален буфер за работа"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "Опитай да поддържаш достатъчно задачи за да си зает за този брой дни"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Максимален допълнителен буфер за работа"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Допълнително, поддържай достатъчно задачи за максимум този брой дни"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Пропусни проверка с файл с изображение"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"отметнете това ако вашия Интернет доставчик променя файлове с изображение"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Опции при свързване"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Потвърди преди свързване с интернет"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1457,11 +1457,11 @@ msgstr ""
"ако е отметнато, ще се появи прозорец за потвърждение преди да се опита да "
"се свърже с Интернет"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Прекъсни връзката когато си готов"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1470,153 +1470,153 @@ msgstr ""
"мрежата\n"
"(приложимо само при свързване през телефонна линия)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Позволено е използване на мрежата"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "начален час за използване на мрежата"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "краен час за използване на мрежата"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Употреба на диска"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr ""
"максимумът използвано пространство на твърдия диск от BOINC (в Гигабайти)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Гигабайти дисково пространство"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Остави поне"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"BOINC оставя поне това количество дисково пространство свободно (в "
"Гигабайти)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Гигабайти свободно дисково пространство"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC използва максимум този процент от общото дисково пространство"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% от общото дисково пространство"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Задачите се запазват на диска на всеки максимум"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "секунди"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% от виртуална памет (суап пространство)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Употреба на паметта"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% когато компютъра се използва"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% когато компютъра не се използва"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Остави приложенията в паметта докато са временно прекратени"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "ако е отметнато, временно прекратените задачи остават в паметта"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Временно прекрати употребата на процесора и мрежата когато следните "
"приложения работят:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Добави..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Добавете приложение към този списък"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Премахни"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Премахнете приложение от този списък"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "За допълнителни опции се обърнете към "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Регистър на Събитията"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Проект"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Време"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Съобщение"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Покажи само този проект"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Копирай &Всичко"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Копира всички съобщения в клип-борда."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Копирай &Избраното"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1625,7 +1625,7 @@ msgstr ""
"като задържите клавиша Shift или командния клавиш, докато кликвате на "
"съобщенията."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1634,24 +1634,24 @@ msgstr ""
"съобщения като задържите клавиша Shift или Ctrl, докато кликвате на "
"съобщенията."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Затвори"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Вземи помощ с %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Покажи всички &съобщения"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Показва съобщения за всички проекти"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Покажи само съобщенията за избрания проект"
@@ -1704,7 +1704,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Запомни това решение и не показвай повече този диалог."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Откажи"
@@ -1712,223 +1712,223 @@ msgstr "&Откажи"
msgid "Don't show this dialog again."
msgstr "Не показвай този диалог повече."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Не взимай задачи за "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Предпочитание на проекта"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Предпочитание на акаунт мениджъра"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Проекта няма приложения за "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Конфигурацията на клиента изключва "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " вземането на работа е отсрочено за"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " вземането на работа е отсрочено за интервала"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Свойства на проект "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Основни"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Главен URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Потребителско име"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Име на отбор"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Подялба на ресурс"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Scheduler RPC е отсрочен за"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Сваляне на файловете е отсрочено за"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Качване на файловете е отсрочено за"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Идентификатор на компютъра"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Не натоварващи CPU"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "да"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Временно прекратен чрез GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "не"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Не искай повече работа"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "В ход е повикване на Планировчика"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "В ход е съобщения към сървъра"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Местоположение на хоста"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "по подразбиране"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Добавен чрез акаунт мениджър"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Премахни когато задачите приключат"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Приключен"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Кредит"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Потребител"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Хост"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Планиране"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Приоритет при планиране"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Коригиращ коефициент за продължителност"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Свойства на задача "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Приложение"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Име на работна единица"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Име"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Състояние"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Получени"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Срок за докладване"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Ресурси"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Очакван изчислителен размер"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "CPU време при последната проверка"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU време"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Изминало време"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Очаквано оставащо време"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Готова част"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Размер на виртуалната памет"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Размер на работния комплект"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Папка"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Идентификатор на процес"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Локален: "
@@ -2016,7 +2016,7 @@ msgstr "Остави тези полета празни ако не са нуж
msgid "User Name:"
msgstr "Потребителско Име:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Парола:"
@@ -2076,12 +2076,12 @@ msgstr ""
"Езикът на %s беше променен. За да влезе в сила тази промяна, трябва да "
"рестартирате %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Избери Компютър"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2090,7 +2090,7 @@ msgstr ""
"Още един %s е вече стартиран на този \n"
"компютър. Моля изберете клиент който да наблюдавате."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Име на хоста:"
@@ -2285,23 +2285,23 @@ msgstr "Проучване"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Научи за проектите включени в World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Стартиране на клиент"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Свързване към клиент"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Получаване на информация за състоянието на системата; моля изчакайте..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Липсващо приложение"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2309,184 +2309,184 @@ msgstr ""
"Моля изтеглете и инсталирайте приложението CoRD от "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "на батерии"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "компютъра се използва"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "заявка от потребителя"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "ограничителни часове"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU изчисляване на референтни показатели е в прогрес"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "нуждае се от дисково пространство - проверете предпочитанията"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "компютъра не се използва"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "стартиране"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "стартирано е ексклузивно приложение"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU е зает"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "лимита за мрежов трафик е надхвърлен"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "поискано от операционната система"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "неизвестна причина"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU липсва, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Нов"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Свалянето е неуспешно"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Сваляне"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (временно прекратен - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Проектът е временно прекратен от потребителя"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Задачата е временно прекратена от потребителя"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Временно прекратен - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU временно прекратено - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Изчакване на паметта"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Изчакване на споделената памет"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Работи, висок приоритет"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Работи"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (не-CPU-интензивен)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Изчаква да работи"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Готова да започне"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Изчакване от Планировчика: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Изчакване от Планировчика)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Изчакване за достъп до мрежата)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Изчислителна грешка"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Изпращането неуспешно"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Изпращане"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Прекратена от потребителя"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Прекратена от проекта"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Прекратена: не е стартирана преди крайния срок"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Прекратена: надхвърлен лимит на диска"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Прекратена: надхвърлен работен лимит от време"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Прекратена: надхвърлен лимит памет"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Прекратена"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Придобита"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Готова за докладване"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Грешка: невалидно състояние '%d'"
@@ -2541,57 +2541,57 @@ msgstr "Проверете потребителското име и парола
msgid "Check the email address and password, and try again."
msgstr "Проверете имейл адреса и паролата, и опитайте отново."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "още..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Всички"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Изберете проект"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"За да изберете проект, натиснете на неговото име или напишете URL-то му "
"отдолу."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Категории:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Проекти:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Подробности за проекта"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Сфера на проучване:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Организация:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Интернет страница:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Поддържани системи:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL на Проекта:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2599,7 +2599,7 @@ msgstr ""
"Този проект може да няма работа за вашия тип компютър. Искате ли да го "
"добавите все пак?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Вече сте добавили този проект. Моля изберете различен проект."
@@ -2607,11 +2607,11 @@ msgstr "Вече сте добавили този проект. Моля изб
msgid "Communicating with project."
msgstr "Комуникация с проект."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Необходимите файлове не са намерени на сървъра."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Възникна вътрешна грешка на сървъра."
@@ -2720,8 +2720,8 @@ msgid "I agree to the terms of use."
msgstr "Съгласен съм с условията на ползване."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "Не съм съгласен с условията на ползване."
+msgid "I do not agree to the terms of use."
+msgstr ""
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2810,7 +2810,7 @@ msgstr "'%s' не съдържа валидно име на хост."
msgid "'%s' does not contain a valid path."
msgstr "'%s' не съдържа валидна пътека."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Команди"
@@ -2863,7 +2863,7 @@ msgstr "Търсене на известия; моля изчакайте..."
msgid "There are no notices at this time."
msgstr "Няма известия в този момент."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Известия"
@@ -2880,7 +2880,7 @@ msgstr ""
"най-новите предпочитания и е възможно да вземе още задачи."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3117,135 +3117,135 @@ msgstr "свободно: "
msgid "used by other programs: "
msgstr "използвано от други програми: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Общ кредит на потребителя"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Среден кредит на потребителя"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Общ кредит на хоста"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Среден кредит на хоста"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Последно обновяване: преди %.0f дни"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Покажи общия кредит на потребителя"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Покажи общия кредит на потребителя"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Покажи среден кредит на потребителя"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Покажи среден кредит на потребителя"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Покажи общ кредит на хоста"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Покажи общия кредит на хоста"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Покажи среден кредит на хоста"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Покажи среден кредит на хоста"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Предходен проект"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Покажи диаграма за предходния проект"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Следващ проект >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Покажи диаграма за следващия проект"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Скрий списъка с проекти"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Използвай цялата област за графики"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Режим изглед"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Един проект"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Покажи една диаграма с избрания проект"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Всички проекти (по отделно)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Покажи всички проекти, с по една диаграма за всеки проект"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Всички проекти (заедно)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Покажи една диаграма с всички проекти"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Всички проекти (сума)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Покажи една диаграма със сумата от проектите"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Статистики"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Обновяване на диаграмите..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Покажи списъка с проекти"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Използва по-малка област за графики"
@@ -3413,10 +3413,6 @@ msgstr "Оставащо (предполагаема стойност)"
msgid "Deadline"
msgstr "Краен срок"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Име"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Задачи"
@@ -3573,40 +3569,40 @@ msgstr "Сигурни ли сте че искате да се откажете?
msgid "Question"
msgstr "Въпрос"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Разширен Изглед...\t Ctrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Показване на разширения графичен интерфейс."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Скин"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Изберете изгледа на потребителския интерфейс."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "По подразбиране"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Временно прекратете Изчисленията"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Подновете Изчисленията"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Отворете прозорец за да прегледате известията от проектите или от BOINC"
@@ -3628,117 +3624,119 @@ msgid "Click OK to set preferences."
msgstr "Натиснете ОК за да зададете предпочитания."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Натиснете Изчисти за да възстановите уеб-базираните настройки."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "За допълнителни настройки, изберете Изчислителни Предпочитания в "
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "Разширеният Изглед."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Извършвай работа само между:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Свързвай се с интернет само между:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Не използвай повече от:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "дисково пространство"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "от процесора"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Да извършва ли работа докато е на батерии?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Извършвай работа след като си бил неактивен за:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "По всяко време"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Работи Винаги)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Наистина ли искате да изчистите всички локални предпочитания?\n"
@@ -3799,119 +3797,119 @@ msgstr ""
"Сугурни ли сте, че искате да прекратите тази задача '%s'?\n"
"(Прогрес: %.1lf%%, Статус: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Нямате добавени проекти. Моля Добавете Проект."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Няма на разположение"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Задачи:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Изберете задача, до която да получите достъп"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "От:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Прогреса на тази задача"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Команди за Задача"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Появява се меню с команди, които да прилагате върху тази задача"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, c-format, c-format
msgid "Application: %s"
msgstr "Приложение: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Приложение: Няма на разположение"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Няма на Разположение"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Изминало време: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Оставащо време (пресметнато): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Статус: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Изтегляне на текущия статус."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Изтегляне на работа от сървъра."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Процесите са Временно Прекратени: Работи се На Батерии."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Процесите са Временно Прекратени: Потребителя е Активен."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr ""
"Процесите са Временно Прекратени: Потребителят спря на пауза процесите."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Процесите са Временно Прекратени: Ограничителни Часове."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr ""
"Процесите са Временно Прекратени: Изчисляват се Референтните Показатели."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Процесите са Временно Прекратени."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Изчаква за свързване със сървърите на проекта."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Извличане на текущ статус"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Няма налична работа за обработване"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Не може да се свърже с централния клиент"
@@ -3953,6 +3951,24 @@ msgstr "Покажи Всички"
msgid "Quit %s"
msgstr "Напусни %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Не съм съгласен с условията на ползване."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Натиснете Изчисти за да възстановите уеб-базираните настройки."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "За допълнителни настройки, изберете Изчислителни Предпочитания в "
+
+#~ msgid "the Advanced View."
+#~ msgstr "Разширеният Изглед."
+
+#~ msgid "Workunit name"
+#~ msgstr "Име на работна единица"
+
+#~ msgid "invalid float"
+#~ msgstr "невалидно число"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Покажи разширения (достъпен) графичен интерфейс."
diff --git a/locale/bg/BOINC-Project-Generic.po b/locale/bg/BOINC-Project-Generic.po
index 362a012..d447815 100644
--- a/locale/bg/BOINC-Project-Generic.po
+++ b/locale/bg/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-09-18 13:54+0000\n"
"Last-Translator: Dimitar <mexicoman at abv.bg>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -191,7 +191,7 @@ msgstr "Претърси форуми"
msgid "Advanced search"
msgstr "Разширено търсене"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Лични съобщения"
@@ -201,8 +201,8 @@ msgstr "Лични съобщения"
msgid "Questions and Answers"
msgstr "Въпроси и Отговори"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -269,7 +269,7 @@ msgstr "Непрочетен"
msgid "Message %1"
msgstr "Съобщение %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "скрит"
@@ -475,7 +475,7 @@ msgstr ""
msgid "Thread"
msgstr ""
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr ""
@@ -484,7 +484,7 @@ msgstr ""
msgid "Views"
msgstr ""
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr ""
@@ -522,7 +522,7 @@ msgid "Home"
msgstr ""
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr ""
@@ -588,9 +588,9 @@ msgid "Created"
msgstr ""
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -766,7 +766,7 @@ msgstr ""
msgid "Computer info"
msgstr ""
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr ""
@@ -775,9 +775,9 @@ msgstr ""
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -865,8 +865,8 @@ msgstr ""
msgid "Computer ID"
msgstr ""
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -903,7 +903,7 @@ msgid "Write"
msgstr ""
# 80%
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Изпрати лично съобщение"
@@ -1630,7 +1630,7 @@ msgstr ""
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
@@ -1722,9 +1722,9 @@ msgstr ""
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1732,7 +1732,7 @@ msgstr ""
msgid "Country"
msgstr ""
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr ""
@@ -1760,8 +1760,8 @@ msgstr ""
msgid "founder response deadline is %1"
msgstr ""
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr ""
@@ -1785,106 +1785,106 @@ msgstr ""
msgid "Web site"
msgstr ""
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr ""
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr ""
# 92%
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Форум"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr ""
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr ""
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr ""
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr ""
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr ""
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr ""
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr ""
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr ""
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr ""
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr ""
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr ""
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr ""
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr ""
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Предходен %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr ""
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr ""
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr ""
@@ -1894,53 +1894,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr ""
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr ""
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr ""
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr ""
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr ""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr ""
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1973,7 +1973,7 @@ msgid "Computers on this account"
msgstr ""
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr ""
@@ -1990,8 +1990,8 @@ msgstr ""
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr ""
@@ -2020,7 +2020,7 @@ msgstr ""
msgid "Email address"
msgstr ""
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr ""
@@ -2028,7 +2028,7 @@ msgstr ""
msgid "Postal code"
msgstr ""
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr ""
@@ -2048,7 +2048,7 @@ msgstr ""
msgid "other account info"
msgstr ""
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr ""
@@ -2093,96 +2093,96 @@ msgstr ""
msgid "Community"
msgstr ""
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr ""
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr ""
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr ""
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr ""
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr ""
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr ""
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr ""
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr ""
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr ""
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr ""
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr ""
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr ""
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr ""
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr ""
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr ""
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr ""
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr ""
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr ""
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr ""
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr ""
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2256,7 +2256,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2449,7 +2449,7 @@ msgstr ""
msgid "User of the day"
msgstr ""
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr ""
@@ -5263,135 +5263,135 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr ""
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr ""
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr ""
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5637,6 +5637,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/bg/BOINC-Setup.mo b/locale/bg/BOINC-Setup.mo
index 88310c6..40938aa 100644
Binary files a/locale/bg/BOINC-Setup.mo and b/locale/bg/BOINC-Setup.mo differ
diff --git a/locale/bg/BOINC-Setup.po b/locale/bg/BOINC-Setup.po
index c584f42..d075c5a 100644
--- a/locale/bg/BOINC-Setup.po
+++ b/locale/bg/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: 2013-09-11 15:08+0000\n"
"Last-Translator: Dimitar <mexicoman at abv.bg>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -27,11 +27,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Да"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Не"
@@ -61,15 +61,15 @@ msgstr ""
"Искате ли да зададете %s като скрийн-сейвър за всички %s потребители на този "
"Mac?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Грешка при разрешенията след рестартиране"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -77,7 +77,7 @@ msgstr ""
"Премахването може да отнеме няколко минути.\n"
"Моля имайте търпение."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -89,21 +89,27 @@ msgstr ""
"Това ще премахне изпълнимите файлове, но няма да закача файловете с данни на "
"%s."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Отказано: %s остана недокоснат."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Възникна грешка: код за грешка %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "име на потребител"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -123,7 +129,7 @@ msgstr ""
"за всеки потребител, файла\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -134,11 +140,11 @@ msgstr ""
"компютър.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Отказ"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Продължение..."
diff --git a/locale/bg/BOINC-Web.mo b/locale/bg/BOINC-Web.mo
index 989904e..bf1b99f 100644
Binary files a/locale/bg/BOINC-Web.mo and b/locale/bg/BOINC-Web.mo differ
diff --git a/locale/bg/BOINC-Web.po b/locale/bg/BOINC-Web.po
index c142d4d..993daf4 100644
--- a/locale/bg/BOINC-Web.po
+++ b/locale/bg/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Web 6.x\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-09-12 11:36+0000\n"
"Last-Translator: Dimitar <mexicoman at abv.bg>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
@@ -449,16 +449,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Когнитивна наука и изкуствен интелект"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Частен"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Изкуствен интелект"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -470,19 +470,19 @@ msgstr ""
"думи, бази от данни с думи като части на речта и програми за морфологичен "
"анализ с цел да се имитира човешко държание в разговори."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Биология и Медицина"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Университетски Колеж в Дъблин"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Търсене на лекарство против малария"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -497,15 +497,15 @@ msgstr ""
"паразита. Проектът FightMalaria at Home се цели в откриването на тези нови "
"мишени."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Университет Карлсруе (Германия)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Предсказване структурата на протеини"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -519,15 +519,15 @@ msgstr ""
"функциониране или агрегацията на белтъците и да разработи нови лекарства на "
"база на три-измерни структури от биологически ценни белтъци."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Университет Делауеър"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -535,15 +535,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Биомедицински Проучвателен Парк Барселона (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Молекулярни симулации на протеини"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -556,15 +556,15 @@ msgstr ""
"станаха възможни, даващи нова роля на изчислителната биология за "
"био-медицински проучвания."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Технион, Израел"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Анализ на генетичните връзки"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -574,16 +574,16 @@ msgstr ""
"предразполагащи към болести гени, които причиняват някои типове диабети, "
"хипертония (високо кръвно налягане), рак, шизофрения и много други."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Университет Мериленд Център за Биоинформатика и Изчислителна Биология"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Проучване на науките за живота"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -595,15 +595,15 @@ msgstr ""
"последователности; бактериални, плазмидни и вирусови протеинови "
"последователности; и биологическото разнообразие в природните резерви. "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Швейцарски Тропически Институт"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Епидемиология"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -622,15 +622,15 @@ msgstr ""
"параметри свързани с биологически и социални фактори които влияят на "
"разпространението на болестта. "
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Университет Вашингтон"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Биология"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -646,11 +646,11 @@ msgstr ""
"помагате на нашите опити за създаване на нови протеини за борба срещу "
"болести като СПИН, Малария, Рак и Болестта на Алцхаймер"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Университет Виена"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -660,19 +660,19 @@ msgstr ""
"от произлезлите данни, която играе ключова роля в много проекти за проучване "
"в биоинформатиката."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Науки за Земята"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Университет Оксфорд"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Изучаване на климата"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -693,16 +693,25 @@ msgstr ""
"климата може да се промени през следващото столетие при голям обхват от "
"сценарии."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Астрономия, Физика и Химия"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Астрономия"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -720,15 +729,15 @@ msgstr ""
"пиксел основа като използваме напасващи техники за спектрално енергийно "
"разпределение (SED) в режим на разпределени компютърни изчисления."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Университет Тексас в Остин"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Химия"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -752,11 +761,11 @@ msgstr ""
"период."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Университет Илинойс в Урбана-Шампейн"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -766,11 +775,11 @@ msgstr ""
"Вселена и да намери обхват от модели които съвпадат с наличните данни за "
"физиката на астрономическите елементарни частици."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Политехнически Институт Ренселеър"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -780,11 +789,11 @@ msgstr ""
"галактиката Млечен Път използвайки данни събрани от Слоун Цифрово Наблюдение "
"на Небето."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Университет Лейден, Холандия"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -800,15 +809,15 @@ msgstr ""
"използвали мрежата за да симулират течен аргон, или да тестват валидността "
"на закона за идеален газ като реално правят симулациите през мрежата."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Университет Уисконсин - Милуоки, Институт Макс Планк"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Астрофизика"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -822,15 +831,15 @@ msgstr ""
"Година за Физика 2005г. и е поддържан от Американското Физическо Общество "
"(APS) и определен брой международни организации."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN - ЦЕРН (Европейска Организация за Ядрени Изследвания)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Физика"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -845,7 +854,7 @@ msgstr ""
"частици. LHC at home прави симулации за да подобри дизайна на LHC и неговите "
"детектори."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -856,15 +865,15 @@ msgstr ""
"събития за изчисляване на компютри на доброволци. Изисква инсталация на "
"ВиртуалнаКутия на вашия компютър"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Калифорнийски Университет, Бъркли"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Астрофизика, астробиология"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -879,15 +888,15 @@ msgstr ""
"естествен начин, за това тяхното засичане би доказало наличието на "
"извънземна технология."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Университет Билефелд за Приложни Науки"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Химично инженерство и нанотехнологии"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -899,19 +908,19 @@ msgstr ""
"магнетични превключватели, с приложения в медицината (като например за "
"локална химиотерапия на тумори) и био-технологиите."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Множество приложения"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Китайска Академия на Науките"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Физика, биохимия и други"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -921,11 +930,11 @@ msgstr ""
"технологиите на споделеното изчисляване и споделеното мислене за своите "
"проучвания."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Математика, физика, еволюция"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -933,15 +942,15 @@ msgstr ""
"Yoyo at home е посредник между BOINC и няколко съществуващи проекта за "
"споделени изчисления: ECM, Muon, Evolution at home и distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI Лаборатория за Паралелни и Разпределени Системи (Унгария)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Европейски изследователски проекти"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -953,27 +962,27 @@ msgstr ""
"обработване от доброволци участващи в този проект. Научните проекти включени "
"в този проект включват математика, физика, биология и др."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Испански университети и центрове за проучвания"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Различни испански изследователски проекти"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Изследвания във физиката, материалознанието и био-медицината"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Корпоративно Гражданство"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Медицинско, насочено към околната среда и друго хуманитарно изследване"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -986,27 +995,27 @@ msgstr ""
"други пренебрегвани болести, слънчевата енергия, питейната вода и много "
"други."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Математика, изчисления и игри"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Компютърна Наука"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Математика, Физика, Изкуствен Интелект"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Симулация на квантови изчисления; Предположение на Goldbach."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Криптография"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1015,24 +1024,24 @@ msgstr ""
"засечени в Северния Атлантик през 1942г. и се смята, че не могат да бъдат "
"разбити."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Математика"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "Изучаване на Collatz Conjecture, нерешено предположение в математиката"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Калифорнийски Щатски Университет Филертон"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Разлагане на големи цели числа"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1048,7 +1057,7 @@ msgstr ""
"като например 15 = 3 * 5 или 35 = 5 * 7. NFS at Home е продължение на този "
"опит, обаче с цели числа които са със стотици цифри дължина."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1056,11 +1065,11 @@ msgstr ""
"Технически Университет Вилнюс Гедиминас и Университет по Технология Каунас "
"(Литва)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Тестване на софтуер"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1072,11 +1081,11 @@ msgstr ""
"на други Литовски академични институции. Текущите приложения включват "
"изучаване и тестване на софтуер базиран на метода на Монте Карло."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Математически Институт в Университет Лейден / Кенислинк"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1094,7 +1103,7 @@ msgstr ""
"най-големите проблеми в математиката. Ако се докаже, че е вярно, много други "
"отворени проблеми могат да бъдат решени директно от него."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1103,11 +1112,11 @@ msgstr ""
"числа под различни форми, включително и търсенето на най-голямото известно "
"просто число."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Колеж РейнМейн Университет по Приложни Науки"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1115,7 +1124,7 @@ msgstr ""
"Търсене на опровержения за две предположения свързани с идентифицирането на "
"прости числа"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1132,6 +1141,10 @@ msgstr "Коментар"
msgid "News is available as an %sRSS feed%s"
msgstr "Новини са налични и под формата на %sRSS feed%s"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Астрономия, Физика и Химия"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s за %s (%s MB)"
diff --git a/locale/ca/BOINC-Android.po b/locale/ca/BOINC-Android.po
index fb3947d..1b55fc8 100644
--- a/locale/ca/BOINC-Android.po
+++ b/locale/ca/BOINC-Android.po
@@ -7,16 +7,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-11-07 00:36+0000\n"
+"PO-Revision-Date: 2014-02-01 21:47+0000\n"
"Last-Translator: Xavier <xavi.mormur at gmail.com>\n"
"Language-Team: ca <LL at li.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1391291270.0\n"
#. app global
msgctxt "app_name"
@@ -342,7 +343,7 @@ msgstr "Sincronitzar"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Tabula aquí per escollir un projecte."
msgctxt "main_error"
msgid "Whooops"
diff --git a/locale/ca/BOINC-Manager.mo b/locale/ca/BOINC-Manager.mo
index fe18e5a..b7910ac 100644
Binary files a/locale/ca/BOINC-Manager.mo and b/locale/ca/BOINC-Manager.mo differ
diff --git a/locale/ca/BOINC-Manager.po b/locale/ca/BOINC-Manager.po
index a06c891..421feed 100644
--- a/locale/ca/BOINC-Manager.po
+++ b/locale/ca/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-07 00:41+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-03 21:27+0000\n"
"Last-Translator: Xavier <xavi.mormur at gmail.com>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: ca\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1383784881.0\n"
+"X-POOTLE-MTIME: 1391462848.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -125,7 +125,7 @@ msgstr ""
#: AccountInfoPage.cpp:532
msgid "Account manager web site"
-msgstr ""
+msgstr "Pàgina web de l'administrador de comptes"
#: AccountInfoPage.cpp:574 WelcomePage.cpp:348
msgid "Add project"
@@ -172,19 +172,19 @@ msgstr ""
#: AccountManagerInfoPage.cpp:279
msgid "Account manager details:"
-msgstr ""
+msgstr "Informació de l'administrador de comptes"
#: AccountManagerInfoPage.cpp:283
msgid "Account manager &URL:"
-msgstr ""
+msgstr "&URL del Administrador de Comptes:"
#: AccountManagerInfoPage.cpp:287
msgid "Open web page"
-msgstr ""
+msgstr "Pàgina web oberta"
#: AccountManagerInfoPage.cpp:290
msgid "Visit this account manager's web site"
-msgstr ""
+msgstr "Visita la pàgina web d'aquest administrador de comptes"
#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
@@ -211,341 +211,341 @@ msgstr "Connectat"
msgid "Disconnected"
msgstr "Desconnectat"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Tancar la finestra %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "Tan&car la Finestra"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Tancar %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Notícies\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Mostra anuncis"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projectes\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Mostrar els projectes"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Tasques\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Mostrar les tasques"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "&Lliuraments\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Mostrar els lliuraments"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Estadístiques\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Mostrar les estadístiques"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Utilització de &Disc\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Mostrar la utilització de disc"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Vista Senzilla...\t Ctrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Mostrar la interfície gràfica senzilla."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Afegir un projecte o un administrador de comptes..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Voluntariat per a tots o algun dels més de 30 projectes en moltes àrees de "
"la ciència"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sincronitzar amb %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Obtenir la configuració actual des de %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Afegir el projecte..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Afegir un projecte"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "A&turar la utilització de %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Eliminar aquest ordinador del administrador de comptes."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opcions..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Configureu les opcions de visualització i la configuració de proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Preferències de computació..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configurar les preferències de computació"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "Executar &sempre"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Permetre treballs tot i les preferències"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Executar segons les &preferències"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Permetre treballs d'acord a les preferències"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Suspendre"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Aturar les tasques tot i les preferències"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Utilitzeu sempre la GPU"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Permetre treballar la GPU tot i les preferències"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Utilitzar la GPU basant-se en les preferències"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Permetre treballar la GPU d'acord a les preferències"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Suspendre la GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Aturar les tasques de la GPU tot i les preferències"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Accés a la xarxa sempre disponible"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Permetre l'accés al xarxa tot i les preferències"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Accés a la xarxa basat en les preferències"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Permetre l'accés a la xarxa d'acord a les preferències"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Suspès l'accés a la xarxa"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Aturar l'accés de BOINC a la xarxa"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Connectar a un altre ordinador executant %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Seleccioni un ordinador..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Aturar el client connectat..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Aturar el client actualment connectat"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Executar les proves de la CPU"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Executa les proves de la CPU de BOINC"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Establir comunicació per xarxa"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Executar les comunicacions pendents per xarxa"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Llegiu els fitxers de configuració"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Llegiu la informació de configuració a cc_config.xml i qualsevol arxiu "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Llegir el fitxer de preferències locals"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Llegir les preferències des de global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Inicieu una altra instància de %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Iniciar un altre %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Registre d'Esdeveniments...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Mostrar els missatges de diagnòstic."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "&ajuda de %s"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Mostrar la informació de %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "ajuda de &%s"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Mostrar la informació de %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
-msgstr ""
+msgstr "pàgina &web de %s"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Mostrar la informació de BOINC i %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&A propòsit de %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informació de la llicència i copyright."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Fitxer"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Veure"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Utilitats"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Activitat"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Avançat"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Ajuda"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Deixi d'utilitzar %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -560,12 +560,12 @@ msgstr ""
"\n"
"Desitja finalitzar la utilització de %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Aturar el client actual..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -574,27 +574,27 @@ msgstr ""
"%s aturarà el client connectat actiu\n"
"i demanarà per connectar-vos a un altre servidor."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s ha adjuntat satisfactòriament %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Connectant a %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Connectat a %s (%s)"
@@ -631,26 +631,26 @@ msgstr ""
"\n"
"Si us plau, visiti la pàgina web del projecte i segueixi les instruccions."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Establint comunicació amb el client BOINC. Esperi si us plau ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Sortir de %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "&Tancar %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Comunicació"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Cancel·lar"
@@ -812,7 +812,7 @@ msgstr "%s s'ha desconnectat d'Internet."
msgid "%s failed to disconnected from the Internet."
msgstr "%s no ha pogut desconnectar-se d'Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -833,7 +833,7 @@ msgstr ""
" - contacti amb el seu administrador per afegir-lo al grup\n"
" d'usuaris 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -843,16 +843,16 @@ msgstr ""
"reinstal·li %s.\n"
"(Codi d'error %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " a "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -861,71 +861,71 @@ msgstr ""
"correctament.\n"
"Si us plau reiniciï l'ordinador i provi-ho de nou."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Administrador BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "El sistema ha iniciat automàticament l'Administrador BOINC"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Iniciar BOINC de manera que només la icona de la barra de tasques sigui "
"visible"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Directori que conté l'executable del Client BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Directori de les dades de BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Nom de host o adreça IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC nombre de port"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Contrasenya"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Iniciar BOINC amb aquests arguments opcionals"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "desactivar la seguretat d'usuaris i permisos BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"seleccioni el mode de depuració per activar els missatges d'error de "
"l'administrador"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "estan permeses diverses instàncies de BOINC Manager"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "No s'utilitza: solució per l'informe d'error al XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Detecció Automàtica)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Desconegut)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Definit per l'Usuari)"
@@ -952,7 +952,7 @@ msgid "E&xit"
msgstr "&Sortir"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Continuar"
@@ -1111,64 +1111,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Infraestructura Oberta de Berkeley per la Computació en xarxa"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "número decimal incorrecte"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "número incorrecte"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "hora incorrecte, el format es HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "període de temps incorrecte, el format es HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "detectat valor d'entrada incorrecte"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Error de validació"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Aplicacions per afegir"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' no és una aplicació executable."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Afegeix l'aplicació exclusiva"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Nom de l'aplicació per afegir?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Afegir aplicació exclusiva"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Els noms d'aplicació han d'acabar amb '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' ja està a la llista."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1176,11 +1176,11 @@ msgstr ""
"Do you really want to clear all local preferences?\n"
"(Això no afectarà a les aplicacions exclusives.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Confirmació"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferències"
@@ -1196,11 +1196,11 @@ msgstr ""
"Premi Netejar per restaurar les preferències basades en la web (excepte les "
"aplicacions exclusives)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Netejar"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "netejar totes les preferències locals i tancar la finestra"
@@ -1220,7 +1220,7 @@ msgstr "utilització de disc i memòria"
msgid "exclusive applications"
msgstr "aplicacions exclusives"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1233,7 +1233,7 @@ msgid "close the dialog without saving"
msgstr "tancar la finestra sense guardar"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Ajuda"
@@ -1291,7 +1291,7 @@ msgstr ""
"nombre de minuts"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minuts"
@@ -1307,7 +1307,7 @@ msgstr "suspendre el treball si el processador excedeix aquest nivell"
msgid "percent (0 means no restriction)"
msgstr "perntatge (0 significa sense restriccions)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Cada dia entre les hores"
@@ -1315,8 +1315,8 @@ msgstr "Cada dia entre les hores"
msgid "start work at this time"
msgstr "començar a fer feina a aquesta hora"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "i"
@@ -1324,46 +1324,46 @@ msgstr "i"
msgid "stop work at this time"
msgstr "aturar de fer feina a aquesta hora"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(cap restricció si és igual)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr ""
"Horari preferit dels dies de la setmana. Aquesta selecció és la que "
"s'aplicarà:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"marcar la casella per especificar les hores per aquest dia de la setmana"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Dilluns"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Dimarts"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Dimecres"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Dijous"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Divendres"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Dissabte"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Diumenge"
@@ -1384,9 +1384,9 @@ msgstr "En equips multi-processador, utilitzar com a màxim"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% dels processadors (0 significa ignorar aquesta opció)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Utilitzar com a màxim"
@@ -1395,73 +1395,73 @@ msgstr "Utilitzar com a màxim"
msgid "% CPU time"
msgstr "% temps de CPU"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Opcions generals"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Màxima taxa de descàrrega"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBytes/seg."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Màxima taxa de càrrega"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Transferir com a molt"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "cada"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dies"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Buffer mínim de treball"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Intenti mantenir suficients tasques per mantenir-lo ocupat durant molts dies"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Màxim buffer addicional de treball"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "A més, mantenir les tasques suficients per tenir-lo actiu molts dies"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Ometre la verificació del fitxer"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "seleccioni-ho si el seu proveïdor d'Internet modifica els fitxers"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Opcions de connexió"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Confirmar abans de connectar a internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1469,11 +1469,11 @@ msgstr ""
"si està seleccionat, una finestra de confirmació es mostrarà abans "
"d'intentar connectar a Internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Desconnectar en finalitzar"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1481,150 +1481,150 @@ msgstr ""
"si està seleccionat, BOINC penja quan finalitza l'activitat de xarxa\n"
"(només es vàlid per connexions telefòniques)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Es permet la utilització de la xarxa"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "hora d'inici d'utilització de la xarxa"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "hora de fi d'utilització de la xarxa"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Utilització de disc"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "màxim espai en disc utilitzat per BOINC (en Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes de espai en disc"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Deixar al menys"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC deixa lliure al menys aquest espai en disc (en Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes d'espai en disc lliure"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC utilitza com a mínim aquest percentatge del total d'espai en disc"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% del total d'espai en disc"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Actualitzar els punts de control de les tasques cada"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "segons"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% del fitxer d'intercanvi (espai d'intercanvi)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Utilització de memòria"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% quan l'ordinador està en ús"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% quan l'ordinador està en repòs"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Deixar les aplicacions en memòria mentre estan en suspens"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "si està seleccionat, els treballs aturats es deixen en memòria"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Suspendre l'ús del processador i de la xarxa quan aquestes aplicacions "
"s'estan executant:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Afegir..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Afegir una aplicació a la llista"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Eliminar"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Eliminar una aplicació d'aquesta llista"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Per a les opcions avançades, vegeu "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Registre d'esdeveniments"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projecte"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Hora"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Missatge"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Mostrar només aquest projecte"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "&Copiar-ho Tot"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Copiar tots els missatges al porta papers."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Copiar els &seleccionats"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1632,7 +1632,7 @@ msgstr ""
"Copiar els missatges seleccionats al porta papers. Pot seleccionar diversos "
"missatges prement les tecles shift o control mentre prem en els missatges."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1640,24 +1640,24 @@ msgstr ""
"Copiar els missatges seleccionats al porta papers. Pot seleccionar diversos "
"missatges prement les tecles shift o control mentre prem en els missatges."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Tancar"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Obtenir ajuda amb %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Mostrar &tots els missatges"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Mostrar els missatges de tots els projectes"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Mostrar només el missatges del projecte seleccionat"
@@ -1710,7 +1710,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Recordar aquesta opció i no mostrar aquesta finestra."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Cancel·lar"
@@ -1718,223 +1718,223 @@ msgstr "&Cancel·lar"
msgid "Don't show this dialog again."
msgstr "No tornar a mostrar aquesta finestra."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "No obtenir tasques per "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Projecte preferent"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Preferències de l'administrador de comptes"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "El projecte no té aplicacions per "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "La configuració del client exclou "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " feina ajornada durant"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " interval d'ajornament de la feina"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Propietats del projecte "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "General"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL principal"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nom del usuari"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nom de l'equip"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Compartició de recursos"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "La programació RPC s'ha ajornat durant"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Descàrrega de fitxers posposada durant"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Lliurament de fitxers posposada durant"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID de l'ordinador"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Us no intensiu de la CPU"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "si"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Aturat via GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "no"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "No demanar més feina"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Petició programada en execució"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Informació pendent"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Ubicació dl'ordinador central"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "per defecte"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Afegit via l'administrador de comptes"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Eliminar quan les tasques hagin finalitzat"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Finalitzat"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Crèdit"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Usuari"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Ordinador central"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Planificant"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Planificació prioritària"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Durada del factor de correcció"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Propietats de la tasca "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplicació"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nom de la feina"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nom"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Estat"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Rebut"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Data límit per informar"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Recursos"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Càlcul estimat de computació"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Temps de CPU en el darrer punt de control"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Temps de CPU"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Temps transcorregut"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Temps estimat que resta"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Fracció realitzada"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Grandària de la memòria virtual"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Grandària del bloc de treball"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Directori"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID del procés"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local: "
@@ -2022,7 +2022,7 @@ msgstr "Deixar en blanc si no es necessita"
msgid "User Name:"
msgstr "Nom d'usuari:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Contrasenya:"
@@ -2082,12 +2082,12 @@ msgstr ""
"L'idioma de %s ha estat canviat. Per tal de que el canvi tingui efecte, heu "
"de tornar a iniciar %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Seleccionar un Ordinador"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2096,7 +2096,7 @@ msgstr ""
"Una altra instància de %s ja s'està executant \n"
"en aquest equip. Si us plau, seleccioneu un client per controlar-la."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nom ordinador:"
@@ -2297,23 +2297,23 @@ msgstr "Recerca"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Aprendre respecte del projectes controlats per la World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Iniciant client"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Connectant amb el client"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Recuperant l'estat del sistema; esperi si us plau..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Manca l'aplicació"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2321,184 +2321,184 @@ msgstr ""
"Si us plau, descarregueu i instal l'aplicació CoRD des de "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "en bateries"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "l'ordinador està en us"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "sol.licitud de l'usuari"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "hora del dia"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Test de la CPU en progrés"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "necessitat d'espai en disc - comprovar les preferències"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "l'ordinador no està en us"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "iniciant"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "s'està executant una aplicació amb exclusivitat"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "La CPU està ocupada"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "s'ha superat el límit d'ample de banda"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "sol·licitat pel sistema operatiu"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "raó desconeguda"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU inexistent, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nou"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "La descàrrega ha fallat"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Descarregant"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (suspès - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projecte suspès per l'usuari"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Tasca suspesa per l'usuari"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Suspès - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU suspesa - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Esperant memòria"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Esperant memòria compartida"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Executant, alta prioritat"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Executant"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (no-CPU-intensiva)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Esperant per executar"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "A punt per començar"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Espera del programador: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Espera del programador)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Esperant accés a la xarxa)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Error de computació"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "La càrrega ha fallat"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Carregant"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Avortat per l'usuari"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Avortat per el projecte"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Avortat: no s'ha iniciat per haver superat el de temps de finalització"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Avortat: s'ha superat el límit d'espai en disc"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Avortat: s'ha superat el temps límit d'execució"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Avortat: s'ha superat el límit de memòria"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Avortat"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Reconegut"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "A punt per informar"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Error: estat incorrecte '%d'"
@@ -2554,57 +2554,57 @@ msgid "Check the email address and password, and try again."
msgstr ""
"Verifiqui l'adreça de correu electrònic i contrasenya, i provi-ho de nou."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "més..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Tot"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Esculli un projecte"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Per escollir un projecte, premi el seu nom o introdueixi la seva URL a "
"continuació."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Catagories:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projectes:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Detalls del projecte"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Àrea de recerca:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organització:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Pàgina web:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Sistemes compatibles:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "&URL del projecte:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2612,7 +2612,7 @@ msgstr ""
"Aquest projecte poder no te feina per al seu ordinador. Vol afegir-lo de "
"totes maneres?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Ja va afegir aquest projecte. Si us plau esculli un projecte diferent."
@@ -2620,11 +2620,11 @@ msgstr "Ja va afegir aquest projecte. Si us plau esculli un projecte diferent."
msgid "Communicating with project."
msgstr "Establint comunicació amb el servidor."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Els fitxers sol·licitats no s'han trobat en el servidor."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Ha ocorregut un error intern del servidor."
@@ -2734,7 +2734,7 @@ msgid "I agree to the terms of use."
msgstr "Accepto les condicions d'ús."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "No accepto les condicions d'ús."
#: UnavailablePage.cpp:183
@@ -2826,7 +2826,7 @@ msgstr "'%s' no conté un nom vàlid de d'ordinador."
msgid "'%s' does not contain a valid path."
msgstr "'%s' no conté una ruta vàlida."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Ordres"
@@ -2879,7 +2879,7 @@ msgstr "Obtenint noticies, si us plau esperi..."
msgid "There are no notices at this time."
msgstr "No hi han notícies en aquest moment."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Notícies"
@@ -2896,7 +2896,7 @@ msgstr ""
"possiblement obtenir noves tasques."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3132,135 +3132,135 @@ msgstr "lliure: "
msgid "used by other programs: "
msgstr "utilitzat per altres programes: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Total de l'Usuari"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Mitjana de l'Usuari"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Total de l'Ordinador"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Mitjana de l'Ordinador"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Darrera actualització: fa %.0f dies"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Mostrar el total de l'usuari"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Mostrar els crèdits totals de l'usuari"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Mostrar la mitjana de l'usuari"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Mostrar el crèdit mitjà de l'usuari"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Mostrar el total de l'ordinador"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Mostrar el crèdit total de l'ordinador"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Mostrar la mitjana de l'ordinador"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Mostrar el crèdit mitjà de l'ordinador"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< Projecte &anterior"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Mostrar gràfica del projecte anterior"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "Projecte &següent >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Mostrar la gràfica del projecte següent"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Amaga la llista de projectes"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Utilitzeu tota l'espai per els gràfics"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Mode visual"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Un projecte"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Mostrar la gràfica del projecte seleccionat"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Tots els projectes (per separat)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Mostrar tots els projectes, una gràfica per projecte"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Tots els projectes (junts)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Mostrar una gràfica amb tots els projectes"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Tots els projectes (suma)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Mostrar una gràfica amb tots els projectes sumats"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Estadístiques"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Actualitzant les gràfiques..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Mostrar la llista de projectes"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Utilitza un àrea més petita per als gràfics"
@@ -3427,10 +3427,6 @@ msgstr "Pendent (estimat)"
msgid "Deadline"
msgstr "Temps límit"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nom"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Tasques"
@@ -3586,40 +3582,40 @@ msgstr "Realment vol cancel·lar?"
msgid "Question"
msgstr "Pregunta"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Vista Avançada...\tCTRL+SHIFT+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Mostrar la interfície gràfica avançada."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Aspecte"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Seleccionar l'aparença de la interfície d'usuari."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Per defecte"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Suspendre la computació"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Restaurar la computació"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Obrir una finestra per veure les notícies del's projectes o BOINC"
@@ -3641,117 +3637,124 @@ msgid "Click OK to set preferences."
msgstr "Prem OK per confirmar preferències."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Prem Netejar per restaurar la configuració basada en web."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Prem Restaura per restaurar la configuració bassada en el web que es mostren "
+"a continuació."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Per altres paràmetres, selecciona Preferències de Computació a "
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "Vista Avançada."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"Per altres paràmetres, selecciona Preferències de Computació a la Vista "
+"Avançada."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Fer feina només entre:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Connectar a internet només entre:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "No utilitzar més de:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "de l'espai en disc"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "del processador"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Fer feina mentre funcioni en bateries?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Fer feina després d'estar inactiu durant:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+"Netejar totes les preferències locals que es mostren i tancar la finestra"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "En qualsevol moment"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Executar Sempre)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Està segur d'eliminar totes les preferències locals?\n"
@@ -3786,7 +3789,7 @@ msgstr "Comandaments del Projecte"
#: sg_ProjectPanel.cpp:267
#, c-format
msgid "Pop up a menu of web sites for project %s"
-msgstr ""
+msgstr "Obre un menú dels llocs web del projecte %s"
#: sg_ProjectPanel.cpp:269
#, c-format
@@ -3810,116 +3813,116 @@ msgstr ""
"Està segur de voler avortar aquesta tasca '%s'?\n"
"(Progrés: %.1lf%%, Estat: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "No te cap projecte. Si us plau, afegeixi un projecte."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "No disponible"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Tasques:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Seleccioneu una tasca per accedir-hi"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "De:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Progrés d'aquesta tasca"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Ordres de la tasca"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Obre un menú d'ordres per aplicar a aquesta tasca"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Aplicació: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Aplicació: No disponible"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "No Disponible"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Transcorregut: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Pendent (estimat): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Estat: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Recuperant estat actual."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Descarregant feina des del servidor."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Procés en suspens: Execució En Bateries."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Procés en suspens: Usuari Actiu."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Procés en suspens: L'usuari ha aturat l'execució."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Procés en suspens: Canviar Hora."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Procés en suspens: Executant Test de Rendiment."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Procés en suspens."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Esperant contactar amb els servidors del projecte."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Recuperant l'estat actual"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "No hi ha feina disponible a processar"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Impossible connectar amb el client"
@@ -3961,6 +3964,24 @@ msgstr "Mostra Tot"
msgid "Quit %s"
msgstr "Sortir de %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "No accepto les condicions d'ús."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Prem Netejar per restaurar la configuració basada en web."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Per altres paràmetres, selecciona Preferències de Computació a "
+
+#~ msgid "the Advanced View."
+#~ msgstr "Vista Avançada."
+
+#~ msgid "Workunit name"
+#~ msgstr "Nom de la feina"
+
+#~ msgid "invalid float"
+#~ msgstr "número decimal incorrecte"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Mostrar la interfície gràfica avançada (accessible)."
diff --git a/locale/ca/BOINC-Project-Generic.po b/locale/ca/BOINC-Project-Generic.po
index d4acc86..7efbc71 100644
--- a/locale/ca/BOINC-Project-Generic.po
+++ b/locale/ca/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-09 22:00+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-03 21:30+0000\n"
"Last-Translator: Xavier <xavi.mormur at gmail.com>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: ca\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1384034433.0\n"
+"X-POOTLE-MTIME: 1391463057.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Català"
@@ -193,7 +193,7 @@ msgstr "Cercar en els fòrums"
msgid "Advanced search"
msgstr "Recerca avançada"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Missatges privats"
@@ -203,8 +203,8 @@ msgstr "Missatges privats"
msgid "Questions and Answers"
msgstr "Preguntes i respostes"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -270,7 +270,7 @@ msgstr "No llegit"
msgid "Message %1"
msgstr "Missatge %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "ocult"
@@ -485,7 +485,7 @@ msgstr "No es pot publicar en un fil ocult."
msgid "Thread"
msgstr "Fil"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Correu"
@@ -494,7 +494,7 @@ msgstr "Correu"
msgid "Views"
msgstr "Opinions"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Últim correu"
@@ -532,7 +532,7 @@ msgid "Home"
msgstr "Inici"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Treball"
@@ -598,9 +598,9 @@ msgid "Created"
msgstr "Creat"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -776,7 +776,7 @@ msgstr "Últim contacte"
msgid "Computer info"
msgstr "Informació de l'ordinador"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Categoria"
@@ -785,9 +785,9 @@ msgstr "Categoria"
msgid "Avg. credit"
msgstr "Crèdit promig"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -875,8 +875,8 @@ msgstr "Només els ordinadors actius els darrers 30 dies"
msgid "Computer ID"
msgstr "ID de l'ordinador"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -912,7 +912,7 @@ msgstr "Bústia d'entrada"
msgid "Write"
msgstr "Escriure"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Enviar un missatge privat"
@@ -1685,7 +1685,7 @@ msgstr "Temps informat<br />o termini"
msgid "explain"
msgstr "explicar"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Estatus"
@@ -1777,9 +1777,9 @@ msgstr "Paraules clau"
msgid "Find teams with these words in their names or descriptions"
msgstr "Trobar equips amb aquestes paraules en els seus noms o descripcions"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1787,7 +1787,7 @@ msgstr "Trobar equips amb aquestes paraules en els seus noms o descripcions"
msgid "Country"
msgstr "País"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tipus d'equip"
@@ -1815,8 +1815,8 @@ msgstr "Sol·licitat per vostè"
msgid "founder response deadline is %1"
msgstr "el temps de resposta del fundador es %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Cap"
@@ -1840,27 +1840,27 @@ msgstr "Descripció"
msgid "Web site"
msgstr "Pàgina web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Estadístiques multi-projecte"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipus"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Panell de missatges"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Fils"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Ajuntar-se a aquest equip"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1869,79 +1869,79 @@ msgstr ""
"ajuntant-se a un equip permet als seus fundadors accedir a la vostra adreça "
"de correu"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "No s'accepten nous membres"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Canvi sol·licitat per el fundador"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Resposta per %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Canvi de l'equip fundador"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Membres"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fundador"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administradors"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nous membres en el darrer dia"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Total de membres"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "mirar"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Membres actius"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Membres amb crèdits"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrador"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Anteriors %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Següent %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Equip inexistent."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Aquesta operació requereix ser fundador."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Aquesta operació requereix privilegis d'administrador d'equip"
@@ -1953,7 +1953,7 @@ msgstr ""
"ADVERTÈNCIA: Aquest és un equip de BOINC general. Si vostè fa canvis aquí, "
"aviat seran sobreescrits. Modificar %1l'equip BOINC general%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1962,47 +1962,47 @@ msgstr ""
"projecte (compartició de recursos, preferències gràfiques) seran visibles "
"per a tothom."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nom de l'equip, versió text"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "No utilitzi etiquetes HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nom de l'equip, versió HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Pot utilitzar %1algunes etiquetes HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Si desconeix HTML, no seleccioni aquesta opció."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL de la pàgina web de l'equip, si en té"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sense \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Aquesta URL enllaçarà amb la pàgina de l'equip des d'aquest lloc."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Descripció de l'equip"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Acceptar nous membres?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Perfil d'usuari"
@@ -2035,7 +2035,7 @@ msgid "Computers on this account"
msgstr "Ordinadors d'aquest compte"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Mirar"
@@ -2052,8 +2052,8 @@ msgstr "Estadístiques multi-projecte"
msgid "Account"
msgstr "Compte"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Grup"
@@ -2082,7 +2082,7 @@ msgstr "Informació del compte"
msgid "Email address"
msgstr "Adreça de correu"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2090,7 +2090,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Codi postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 membre des de"
@@ -2110,7 +2110,7 @@ msgstr "contrasenya"
msgid "other account info"
msgstr "altre informació del compte"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID d'usuari"
@@ -2156,96 +2156,96 @@ msgstr "preferències de %1"
msgid "Community"
msgstr "Comunitat"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Esborrar"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Crear"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Perfil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 correus"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notificacions"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Deixar el grup"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrador"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(petició de canvi del fundador pendent)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Membre de l'equip"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "trobar un grup"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fundador però no membre de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Trobar amics"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amics"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Ordinadors"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donant"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contactar"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Aquesta persona és un amic"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Finalitzar amistat"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Petició pendent"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Afegir com amic"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "el nom d'usuari no pot tenir espais en blanc al principi o al final"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "no es pot deixar en blanc el nom d'usuari"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "el nom d'usuari no pot contenir etiquetes HTML"
@@ -2324,7 +2324,7 @@ msgstr "No es pot connectar a la base de dades - si us plau, provi-ho més tard"
msgid "Unable to select database - please try again later"
msgstr "No es pot seleccionar la base de dades - si us plau, provi-ho més tard"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Mantenir-me en aquest ordinador"
@@ -2528,7 +2528,7 @@ msgstr "crear o unir-se a equip"
msgid "User of the day"
msgstr "Usuari del dia"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Estat del servidor"
@@ -3617,6 +3617,8 @@ msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
+"Aquest projecte no ha creat un missatge de correu electrònic - si us plau "
+"notifica-ho als seus administradors"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -5667,135 +5669,135 @@ msgstr "Aturat"
msgid "Disabled"
msgstr "Desactivat"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Estat del projecte"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Versió del programari servidor: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programa"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Ordinador central"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "pàgines web amb dades auto-actualizables"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "carregar/baixar del servidor"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "planificador"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Executant:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "El programa està funcionant amb normalitat"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "No s'està executant:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "El programa a fallat o el projecte està aturat"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Desactivat:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "El programa està desactivat"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Estat del comput"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "El servidor de base de dades no és accessible"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tasques a punt per enviar"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tasques en curs"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Workunits esperant la validació"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Workunits esperant l'assimilació"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Workunits esperant l'eliminació d'arxius"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Tasques esperan l'eliminació d'arxius"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Retard en les transicións (hores)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Usuaris"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "amb crèdit recent"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "amb crèdit"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registrats en les últimes 24 hores"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOPs actuals"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tasques per aplicació"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplicació"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "no enviat"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "en progrés"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "mitjana de temps d'execució dels últims 100 resultats en h (mín-màx)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "usuaris en les últimes 24 hores"
@@ -6072,6 +6074,10 @@ msgstr "Nou fundador?"
msgid "Change founder"
msgstr "Canviar el fundador"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "No hi ha usuaris als que transferir l'equip."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Ha d'escollir un nom d'equip que no sigui en blanc"
diff --git a/locale/ca/BOINC-Setup.mo b/locale/ca/BOINC-Setup.mo
index 8639d44..85cde98 100644
Binary files a/locale/ca/BOINC-Setup.mo and b/locale/ca/BOINC-Setup.mo differ
diff --git a/locale/ca/BOINC-Setup.po b/locale/ca/BOINC-Setup.po
index bc703b0..ed25342 100644
--- a/locale/ca/BOINC-Setup.po
+++ b/locale/ca/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-08-08 23:24+0200\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-03 21:34+0000\n"
"Last-Translator: Xavier <xavi.mormur at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: ca\n"
@@ -15,22 +15,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.5.5\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
"X-Poedit-KeywordsList: _\n"
+"X-POOTLE-MTIME: 1391463278.0\n"
#: Installer.cpp:124
#, c-format
msgid "Sorry, this version of %s requires system 10.5 or higher."
-msgstr ""
+msgstr "Ho sentim, aquesta versió de %s requereix el sistema 10.5 o superior."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Si"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "No"
@@ -61,15 +62,15 @@ msgstr ""
"Vols configurar %s com el protector de pantalla per a tots els %s usuaris de "
"en aquesta Mac?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "CORRECTE"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Error de permisos després del re inici"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -77,7 +78,7 @@ msgstr ""
"La eliminació pot trigar uns minuts.\n"
"Si us plau, sigues pacient."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -88,21 +89,29 @@ msgstr ""
"\n"
"Això eliminarà els executables, però no tocarà els arxius de dades %s."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Cancel·lat: %s no s'ha tocat."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "S'ha produït un error: codi d'error %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "nom de l'usuari"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"També vols eliminar VirtualBox de l'ordinador?\n"
+"(VirtualBox es va instal·lar juntament amb BOINC.)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -121,7 +130,7 @@ msgstr ""
"per a cada usuari, el fitxer\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -132,11 +141,11 @@ msgstr ""
"de l'ordinador.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Cancel·lar"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Continuar..."
diff --git a/locale/ca/BOINC-Web.mo b/locale/ca/BOINC-Web.mo
index 867c398..334621e 100644
Binary files a/locale/ca/BOINC-Web.mo and b/locale/ca/BOINC-Web.mo differ
diff --git a/locale/ca/BOINC-Web.po b/locale/ca/BOINC-Web.po
index 6e41122..76c3963 100644
--- a/locale/ca/BOINC-Web.po
+++ b/locale/ca/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-11-07 01:02+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-03 22:05+0000\n"
"Last-Translator: Xavier <xavi.mormur at gmail.com>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: ca\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: doc\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1383786161.0\n"
+"X-POOTLE-MTIME: 1391465133.0\n"
"X-Poedit-KeywordsList: tra\n"
#: docutil.php:21
@@ -41,29 +41,31 @@ msgid ""
"We recommend that you also install VirtualBox, so your computer can work on "
"science projects that require it."
msgstr ""
+"Et recomanem d'instal·lar també VirtualBox, de manera que l'equip pot "
+"treballar en projectes de ciència que ho requereixin."
#: download.php:41
msgid "Learn more about VirtualBox."
-msgstr ""
+msgstr "Apren més sobre VirtualBox."
#: download.php:51
msgid "Download BOINC + VirtualBox"
-msgstr ""
+msgstr "Baixa BOINC + Virtualbox"
#: download.php:54 download.php:69
#, php-format
msgid "for %s"
-msgstr ""
+msgstr "per %s"
#: download.php:57 download.php:72
#, php-format
msgid "BOINC version %s"
-msgstr ""
+msgstr "versió BOINC %s"
#: download.php:59
#, php-format
msgid "VirtualBox version %s"
-msgstr ""
+msgstr "versió VirtualBox %s"
# ######################################
# download.php
@@ -82,12 +84,17 @@ msgid ""
"projects like SETI at home, Climateprediction.net, Rosetta at home, World "
"Community Grid, and many others."
msgstr ""
+"BOINC és un programa que et permet donar el temps d'inactivitat de "
+"l'ordinador per a projectes científics com SETI at home, Climateprediction.net, "
+"Rosetta at home, World Community Grid, i molts d'altres."
#: download.php:125
msgid ""
"After installing BOINC on your computer, you can connect it to as many of "
"these projects as you like."
msgstr ""
+"Després d'instal·lar BOINC a l'ordinador, pots connectar-lo a tants "
+"projectes com vulguis."
#: download.php:127
msgid ""
@@ -102,6 +109,8 @@ msgid ""
"We recommend that you download BOINC from the Google Play Store or Amazon "
"Appstore, not from here."
msgstr ""
+"Et recomanem que descarreguis BOINC des de Google Play Store o Amazon "
+"Appstore, no des de aquí."
#: download.php:167
msgid "System requirements"
@@ -467,16 +476,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "La ciència cognitiva i la intel ligència artificial"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Privat"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Intel.ligència artificial"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -488,19 +497,19 @@ msgstr ""
"part de bases de dades de parla, i part de referències en la parla per tal "
"d'imitar el comportament humà en les converses."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologia i Medicina"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Col·legi Universitari de Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Descobriment de fàrmacs contra la malària"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -514,15 +523,15 @@ msgstr ""
"medicaments han d'apuntar a NOVES proteïnes en el paràsit. El projecte "
"FightMalaria at Home està dirigit a la recerca d'aquests nous objectius."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Universitat de Karlsruhe (Alemanya)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Predicció d'estructura de proteïnes"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -537,15 +546,15 @@ msgstr ""
"l'agregació, i desenvolupar nous fàrmacs sobre la base de l'estructura "
"tridimensional de les proteïnes biològicament importants."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Universitat de Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Estudi d'interaccions proteïna - lligams"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -557,15 +566,15 @@ msgstr ""
"de les interaccions dels lligams de les proteïnes i, en fer-ho, cercarà per "
"a descubrir nous productes farmacèutics."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Parc de Recerca Biomèdica de Barcelona (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Simulacions moleculars de les proteïnes"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -577,15 +586,15 @@ msgstr ""
"les GPU de NVIDIA. Les noves aplicacions biomèdiques podran donar un nou "
"paper a la biologia computacional per a la recerca biomèdica."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Anàlisi de lligament genètic"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -595,17 +604,17 @@ msgstr ""
"causen alguns tipus de diabetis, hipertensió (pressió arterial alta), el "
"càncer, l'esquizofrènia i molts altres."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
"Universitat de Maryland Center de Bioinformàtica i Biologia Computacional"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Recerca en ciència de la vida"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -617,15 +626,15 @@ msgstr ""
"de dades de seqüències d'ADN, les seqüències de proteïnes bacterianes, "
"plasmidis i virus, i la diversitat biològica en les reserves naturals. "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "L'Institut Tropical Suís"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologia"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -644,15 +653,15 @@ msgstr ""
"gran diversitat de paràmetres relacionats amb factors biològics i socials "
"que influeixen en la distribució de la malaltia. "
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Universitat de Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologia"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -669,11 +678,11 @@ msgstr ""
"disseny de noves proteïnes per lluitar contra malalties com el VIH, la "
"malària, el càncer i l'Alzheimer"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Universitat de Viena"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -683,19 +692,19 @@ msgstr ""
"dades pública de les dades resultants, que exerceix un paper clau en molts "
"projectes de recerca en bioinformàtica."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Ciències de la Terra"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Universitat d'Oxford"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Estudi del clima"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -716,16 +725,25 @@ msgstr ""
"estudiar com pot canviar el clima en el pròxim segle amb una àmplia gamma "
"d'escenaris diferents."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomia, Física i Química"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Ciències Físiques"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Enginyeria mecànica"
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomia"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -743,15 +761,15 @@ msgstr ""
"d'una distribució espectral d'energia (SED) en un entorn de computació "
"distribuïda."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Universitat de Texas a Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Química"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -775,11 +793,11 @@ msgstr ""
"períodes llargs de temps."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Universitat d'Illinois at Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -789,11 +807,11 @@ msgstr ""
"univers i trobar la els models que concorden amb les dades disponibles de "
"física de partícules astronòmica."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Institut Politècnic Rensselaer"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -803,11 +821,11 @@ msgstr ""
"tridimensional de la Via Làctia utilitzant dades recollides pel Sloan "
"Digital Sky Survey."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Universitat de Leiden, Països Baixos"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -823,15 +841,15 @@ msgstr ""
"estudiants han utilitzat la xarxa per simular argó líquid, o per provar la "
"validesa de la llei del gas ideal fent les simulacions a través de la xarxa."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Univ. de Wisconsin - Milwaukee, Institut Max Planck"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofísica"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -845,15 +863,15 @@ msgstr ""
"Física 2005 recolzat per l'American Physical Society (APS) i per una sèrie "
"d'organitzacions internacionals."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Organització Europea per a la Recerca Nuclear)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Física"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -867,7 +885,7 @@ msgstr ""
"investigar les propietats de les partícules. LHC at home executa simulacions "
"per millorar el disseny de l'LHC i els seus detectors."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -877,15 +895,15 @@ msgstr ""
"simulació física de l'LHC en els equips de voluntaris. Requereix la "
"instal·lació de VirtualBox en el teu ordinador"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Universitat de Califòrnia, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofísica, astrobiologia"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -900,15 +918,15 @@ msgstr ""
"succeeixen de forma natural, pel que la seva detecció pot proporcionar "
"evidències de la tecnologia extraterrestre."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Universitat de Bielefeld de Ciències Aplicades"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Enginyeria química i nanotecnologia"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -920,19 +938,19 @@ msgstr ""
"petits interruptors magnètics, amb aplicacions en medicina com la "
"quimioteràpia localitzada de tumor) i la biotecnologia."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Múltiples aplicacions"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Acadèmia Xinesa de Ciències"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Física, bioquímica, i altres"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -942,11 +960,11 @@ msgstr ""
"adoptar les tecnologies de la informàtica de voluntaris i voluntàris que "
"pensin en la seva investigació."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matemàtiques, física, evolució"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -954,15 +972,15 @@ msgstr ""
"Yoyo at home és un adaptador entre BOINC i diversos projectes en curs de "
"computació voluntària: ECM, Muon, Evolution at home, i distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "Laboratori MTA-SZTAKI de sistemes paral.lels i distribuïts (Hongria)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Projectes de recerca europeus"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -974,27 +992,27 @@ msgstr ""
"ser processades pels voluntaris d'aquest projecte. Els projectes de caràcter "
"científic coberts pel projecte inclouen matemàtiques, física, biologia, etc"
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Universitats espanyoles i centres de recerca"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Diversos projectes de recerca espanyols"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Investigació en física, ciència dels materials i biomedicina"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Corporate Citizenship"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Recerca mèdica, ambiental i d'altres tipus de recerca humanitària"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -1007,27 +1025,27 @@ msgstr ""
"SIDA, el càncer, les malalties tropicals i oblidades, l'energia solar, "
"l'aigua potable i moltes més."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matemàtiques, computació i jocs"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Ciències de la Computació"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Matemàtiques, Física, Intel·ligència Artificial"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Simulació de la computació quàntica, conjectura de Goldbach."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Criptografia"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1036,26 +1054,26 @@ msgstr ""
"interceptats a l'Atlàntic Nord el 1942 i es creu que no han estat "
"desxifrats."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matemàtiques"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
"Estudiar la Conjectura Collatz, una conjectura sense resoldre en "
"matemàtiques"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Califòrnia State University Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Factorització de nombres grans"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1072,7 +1090,7 @@ msgstr ""
"d'aquesta experiència, només amb nombres enters que tenen centenars de "
"dígits."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1080,11 +1098,11 @@ msgstr ""
"Universitat Tecnica Vilnius Gediminas i Universitat Tecnològica de Kaunas "
"(Lituània)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Proves de programari"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1097,11 +1115,11 @@ msgstr ""
"Les aplicacions actuals impliquen l'estudi de les proves de Monte-Carlo "
"basats en programari de testatge."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Institut de Matemàtiques de la Universitat de Leiden / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1120,7 +1138,7 @@ msgstr ""
"que és veritat, un munt d'altres problemes oberts poden ser respostes "
"directament d'ella."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1128,11 +1146,11 @@ msgstr ""
"PrimeGrid té diversos projectes que busquen nombres primers molt grans de "
"diferents formes, incloent la recerca del nombre primer més gran conegut."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Universitat de Ciències Aplicades Hochschule RheinMain"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1140,7 +1158,7 @@ msgstr ""
"Cerca de contraexemples a dues conjectures relacionades amb la identificació "
"dels nombres primers"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1158,6 +1176,10 @@ msgstr "Comentari"
msgid "News is available as an %sRSS feed%s"
msgstr "Les notícies estan disponiles en format %sRSS%s"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomia, Física i Química"
+
#~ msgid "Download BOINC + Virtualbox"
#~ msgstr "Baixa BOINC + Virtualbox"
diff --git a/locale/cs/BOINC-Android.po b/locale/cs/BOINC-Android.po
index 78c986c..65c6f40 100644
--- a/locale/cs/BOINC-Android.po
+++ b/locale/cs/BOINC-Android.po
@@ -2,54 +2,54 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2013-08-30 20:59+0000\n"
+"Last-Translator: Lycan <santdel at gmail.com>\n"
"Language-Team: cs <LL at li.org>\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"
+"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1377896370.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Carregant! Si us plau, espera..."
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Selecciona un projecte:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Afegir projecte mitjançant URL"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Introdueix la URL del projecte:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Afegeix el projecte"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Si us plau introdueix la URL del projecte"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
@@ -57,143 +57,145 @@ msgstr ""
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "No hi ha connexió a Internet"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Contactant el servidor del projecte..."
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Logo del projecte."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Zona general:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Zona específica:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Descripció:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Inici:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Pàgina web:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
+msgid "This project supports Android devices"
msgstr ""
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
+msgid "This project does not support Android devices"
msgstr ""
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Condicions d'ús de"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Creant un compte en aquest projecte, acceptes els termes d'ús, que es "
+"mostren a dalt."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Registre't amb un compte existent"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "Correu electrònic:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Nom:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Contrasenya:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Nou a"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Registra un compte per participar:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Visita la pàgina web del projecte per crear un compte:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Actualment el projecte permet la creació de nous comptes!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "Registre't"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "Registre't"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "He oblidat la contrasenya"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Ha fallat la connexió amb el projecte!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Adjuntat"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Compte de registre per"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Projecte:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "Correu electrònic:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Nom:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Equip:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Contrasenya:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "... Torna a entrar-ho:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Crear"
#. account manager
msgctxt "attachproject_acctmgr_header"
@@ -210,11 +212,11 @@ msgstr ""
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Contrasenya:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "... Torna a entrar-ho:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
@@ -223,19 +225,19 @@ msgstr ""
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "No s'ha trobat aquest usuari"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "La contrasenya és massa curta"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Ha fallat la connexió"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Les contrasenyes no coincideixen"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
@@ -243,43 +245,43 @@ msgstr ""
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Si us plau introdueix l'adreça de correu electrònic"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Si us plau introdueix una contrasenya"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Si us plau, introdueïx el nom d'usuari"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "ha fallat"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Nom d'usuari rebutjat"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "L'adreça de correu electrònic ja està en ús"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "El projecte està desconnectat"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "Adreça de correu electrònic rebutjada"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Contrasenya rebutjada"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "La creació de comptes està desactivada en aquest projecte"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
@@ -288,47 +290,47 @@ msgstr ""
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Enrere"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Finalitza"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Reeixit"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Ha fallat"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "…"
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Connecta"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Revisa el compte"
msgctxt "attachproject_working_register"
msgid "Register account"
-msgstr ""
+msgstr "Registra el compte"
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Registret"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
@@ -340,43 +342,45 @@ msgstr ""
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
+msgid "Tab here to choose a project."
msgstr ""
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Uppps"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"...això no ha de succeir!\n"
+" Feu clic a la icona per intentar-ho de nou."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "Icona de BOINC"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Estatus"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projectes"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Tasques"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Transferències"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Preferències"
msgctxt "tab_notices"
msgid "Notices"
@@ -384,307 +388,297 @@ msgstr ""
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navegació"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Treballant"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Gràcies per participar."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "Suspès"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Res a fer"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Esperant feines..."
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "Suspès"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "Premeu play per reprendre la connexió per xarxa i la computació."
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "S'està iniciant..."
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Tria un projecte per participar-hi."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Tancant..."
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Executamt proves..."
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "imatge del projecte"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Llegint preferències..."
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Desa"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Introdueix el nou valor:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "Selecciona:"
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "General"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Xarxa"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Potència"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Emmagatzematge"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Memòria"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Depura"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
-
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
+msgstr "Mostra les preferències i controls avançats..."
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
-
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
msgstr ""
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Nivell mínim de la bateria"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC atura la computació si el nivell de càrrega de la bateria per sota del "
+"definit."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Temperatura màxima de la bateria"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC atura la computació si la temperatura de la bateria està per sobre del "
+"valor definit. No es recomanable canviar aquest valor."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "Màxim espai d'emmagatzematge utilitzat"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
msgstr ""
+"Quin percentatge d'espai d'emmagatzematge del seu dispositiu pot utilitzar "
+"BOINC?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "Espai mínim d'emmagatzematge"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
msgstr ""
+"Quina quantitat d'espai d'emmagatzematge del dispositiu s'ha de mantenir "
+"lliure?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Límit de transferència diària"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Limita el tràfic diàri de dades degut a BOINC"
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Transferir tasques només amb WiFi"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Inici automàtic"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Mostra una notificació quan estigui suspés"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Nuclis de CPU usats"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Limita el nombre de nuclis de CPU que BOINC utilitza per la computació."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Pausa en l'ús de la CPU per sobre de"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
msgstr ""
+"Determina quan BOINC pausa el còmput degut a la utilització de la CPU per un "
+"altra aplicació."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "Límit de CPU"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Limita el temps de CPU que BOINC utilitza per la computació."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "RAM límit"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Limita la quantitat de RAM que les tasques poden utilitzar."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "Marques de registre del client de BOINC"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "Nivell de registre GUI"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Especifica el nivell de detall dels missatges de registre GUI."
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "S'estan carregant els projectes..."
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Afegeix el projecte"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Icona delprojecte"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Crèdit:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(en aquest dispositiu)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(total)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Suspès per l'usuari"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "No descarregar tasques noves"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Projecte finalitzat - CORRECTE per eliminar-lo"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "S'eliminarà quan finalitzi la tasca"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Petició al gestor pendent"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Petició al gestor en curs"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Missatge de degoteig en espera"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Comunicació del gestor a:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Ordres del projecte:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
@@ -692,31 +686,31 @@ msgstr ""
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Actualitza"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Elimina"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Suspèn"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Reprèn"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "No hi han tasques noves"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Permetre noves tasques"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Reinicia"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
@@ -733,31 +727,31 @@ msgstr ""
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Eliminar el projecte?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Estàs segur que voleu eliminar"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "de BOINC?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Elimina"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Reinicia el projecte"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Estàs segur que vols reiniciar"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Reinicia"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
@@ -774,145 +768,145 @@ msgstr ""
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Nom de la tasca:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Temps transcorregut:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(suspès)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Data límit:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "nou"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "esperant per descarregar"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "Descàrrega completa"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "error de computació"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "s'està lliurant"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "lliurament finalitzat"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "avortat"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "ha fallat el lliurament"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "preparat"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "executant"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "suspès"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "s'està suspenent"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "s'està suspenent"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "suspès"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "projecte suspès"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "a punt per informar"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Avortar la tasca?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Avortar la tasca:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Avorta"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Cancel·la"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Diàleg de confirmació"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Llegint transferències..."
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Puja"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Descarrega"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "re intentar en"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "ha fallat"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "suspès"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "activa"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "pendent"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "desentendre's del projecte"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Fitxer:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
@@ -920,15 +914,15 @@ msgstr ""
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Avortar la transferència?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "Avortar arxiu:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Avorta"
#. notices tab strings
msgctxt "notices_loading"
@@ -938,199 +932,200 @@ msgstr ""
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Carregant missatges de registre..."
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Missatges del client"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "Missatges GUI"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Registre copiat al porta-retalls"
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Registre d'esdeveniments de BOINC en Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Computació suspesa."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "Connecta el dispositiu a un carregador per continuar el còmput."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "L'usuari està actiu."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Fora del termini especificat per el còmput."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC està avaluant el teu dispositiu..."
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "S'ha exhaurit l'espai lliure del disc"
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Programada acceleració CPU."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "No hi ha hagut activitat recent de l'usuari."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Temps d'espera per reiniciar."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "S'està executant una aplicació amb ús exclusiu."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "El teu dispositiu està ocupat per altres aplicacions."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC ha assolit el límit de transferència per xarxa."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Suspès per Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "No hi ha connexió Wifi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
+msgstr "La bateria necessita carregar-se abans de continuar la computació."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "La computació continuarà quan la bateria tingui una carregada del"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "actual"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Esperant que es refredi la bateria"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Continuant la computació..."
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "manualment."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Sol·licitat per l'usuari"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Per obtenir feina"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Per informar tasques finalitzades"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Per lliurar un missatge de degoteig"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Sol·licitat per l'administrador de comptes"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Inicialització del projecte"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Sol·licitat per el projecte"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Motiu desconegut"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Actualitza"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Envia per correu electrònic"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Copia al porta-retalls"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Registre d'esdeveniments"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "Surt de BOINC"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Suspèn"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Reprèn"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "Sobre"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Ajuda"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Retorna"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "Sobre"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Versió"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "Berkeley Open Infrastructure for Network Computing"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-
+"© 2003–2013 Universitat de Califòrnia, Berkeley.\n"
+"Tots els Drets Reservats."
diff --git a/locale/cs/BOINC-Manager.mo b/locale/cs/BOINC-Manager.mo
index eb2e135..0874da3 100644
Binary files a/locale/cs/BOINC-Manager.mo and b/locale/cs/BOINC-Manager.mo differ
diff --git a/locale/cs/BOINC-Manager.po b/locale/cs/BOINC-Manager.po
index 8315c1c..507f67f 100644
--- a/locale/cs/BOINC-Manager.po
+++ b/locale/cs/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-08-30 20:59+0000\n"
"Last-Translator: Lycan <santdel at gmail.com>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
@@ -213,340 +213,340 @@ msgstr "Připojen"
msgid "Disconnected"
msgstr "Odpojen"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Zavřít %s okno"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "Zavřít okno"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Ukončit %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "Zprávy\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Zobrazit zprávy"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projekty\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Zobrazit projekty"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "Úkoly\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Zobrazit úkoly"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Přenos\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Zobrazit přenosy"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistiky\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Zobrazit statistiky"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Využití &disku\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Zobrazit využití disku"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Jednoduché zobrazení...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Přepnout do Jednoduchého zobrazení"
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "Přid&at projekt nebo nastavit Správce účtu..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Staňte se dobrovolníkem v kterémkoliv z více než 30 projektů v mnoha "
"vědeckých oblastech"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Synchronizovat s %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Použít aktuální nastavení z %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "Přid&at projekt..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Přid&at projekt"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "Ukončit %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Odebrat počítač ze správy Správce účtu."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "M&ožnosti..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Nastavit vzhled a způsob připojení k Internetu (proxy server)"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Výpočetní &předvolby..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Nastavit výpočetní předvolby"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "Počítat stále"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Povolit práci bez ohledu na předvolby"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Počítat podle &předvoleb"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Povolit práci podle předvoleb"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "Poza&stavit"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Pozastavit práci bez ohledu na předvolby"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Vždy používat GPU"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Povolit práci na GPU bez ohledu na předvolby"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Používat GPU podle předvoleb"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Povolit práci na GPU podle předvoleb"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Pozastavit GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Pozastavit práci na GPU bez ohledu na předvolby"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Trvale povolit přístup k Internetu"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Povolit přístup k Internetu bez ohledu na předvolby"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Připojovat k Internetu podle předvoleb"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Využívat připojení k Internetu podle předvoleb"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Zakázat přístup k Internetu"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Zakázat Správci BOINC přistupovat k Internetu"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Připojit se k jinému počítači se spuštěným klientem %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Zvolit počítač..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Vypnout připojeného klien&ta..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Vypnout aktuálně připojeného klienta"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Spustit testy procesoru"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Spustit BOINC testy procesoru"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Obnovit všechny přenosy"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Obnovit veškerou čekající síťovou komunikaci"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Načíst konfigurační soubory"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr "Načíst konfiguraci ze souborů cc_config.xml a app_config.xml."
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Načíst předvolby z lokálního souboru"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Načíst předvolby z 'global_prefs_override.xml'"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Spustit další instanci %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Spustit další %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Záznam událostí...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Zobrazit diagnostické zprávy."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "Nápověda k platformě %s"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Zobrazit webovou stránku s nápovědou k platformě %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "Nápověda k programu %s"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Zobrazit webovou stránku s nápovědou k programu %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, fuzzy
msgid "%s &web site"
msgstr "&Webové stránky %s"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Zobrazit webovou stránku s informacemi o projektu BOINC a o programu %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "Inform&ace o %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Zobrazit informace o aktuální verzi BOINC (licence a autorská práva)."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "Soubor"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "Zobrazení"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "Nás&troje"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Aktivity"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "Pokročilé"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "Nápověda"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Přestat používat %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -561,12 +561,12 @@ msgstr ""
"\n"
"Chcete přestanete používat %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Vypnout aktuálního klienta..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -575,27 +575,27 @@ msgstr ""
"%s vypne aktuálně připojeného klienta\n"
"a vyzve vás k připojení k jinému počítači."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s úspěšně přidal %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Připojuji se k %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Připojeno k %s (%s)"
@@ -632,26 +632,26 @@ msgstr ""
"\n"
"Navštivte prosím stránky projektu a tam pokračujte podle instrukcí."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Komunikuji s BOINC klientem. Prosím čekejte ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "Opustit %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "Ukončit %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Komunikace"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Zrušit"
@@ -809,7 +809,7 @@ msgstr "%s se úspěšně odpojil od Internetu."
msgid "%s failed to disconnected from the Internet."
msgstr "%s se nezvládl odpojit od Internetu."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -830,7 +830,7 @@ msgstr ""
"- kontaktujte vašeho administrátora, aby vás přidal\n"
"do uživatelské skupiny 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -840,16 +840,16 @@ msgstr ""
"prosím %s.\n"
"(Chybový kód %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " v "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -857,69 +857,69 @@ msgstr ""
"Pro správné fungování BOINC je vyžadován restart.\n"
"Prosím restartujte počítač a zkuste to znova."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Správce BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Správce BOINC byl automaticky spuštěn operačním systémem"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Spustit BOINC pouze s ikonou v systémové liště"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Složka obsahující spustitelného BOINC klienta"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Složka pro BOINC data"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Jméno počítače nebo IP adresa"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Číslo portu pro GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Heslo"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Spouštět BOINC s těmito volitelnými parametry"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "zrušit bezpečnostní uživatele a práva BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"Nastavit ladící režim správce vzhledů pro zobrazení chybových zpráv správce "
"vzhledů"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "povoleno více instancí Správce BOINC"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Nepoužito: oprava pro chybu v XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Zjištěno automaticky)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Neznámé)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Definováno uživatelem)"
@@ -946,7 +946,7 @@ msgid "E&xit"
msgstr "Ukončit"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Obnovit"
@@ -1106,64 +1106,64 @@ msgstr ""
"(Berkeleyská Otevřená Infrastruktura pro Síťové Výpočty)"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "neplatné číslo"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "neplatný čas, formát je HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "neplatný časový interval, formát je HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "zadaná neplatná vstupní hodnota"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Chyba při validaci"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Aplikace, které lze přidat"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' není exkluzivní aplikace."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Přidat exkluzivní aplikaci"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Jména aplikací pro přidání?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Přidat exkluzivní aplikaci"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Jména aplikací musí končit na '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' již je v seznamu."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1171,11 +1171,11 @@ msgstr ""
"Opravdu chcete vymazat všechny lokální předvolby?\n"
"(netýká se exkluzivních aplikací)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Potvrzení"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Předvolby"
@@ -1191,11 +1191,11 @@ msgstr ""
"Klikněte Vymazat pro obnovení předvoleb z webu (netýká se exkluzivních "
"aplikací)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Vymazat"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "Smazat všechny místní předvolby a zavřít nabídku"
@@ -1215,7 +1215,7 @@ msgstr "Využití disku a paměti"
msgid "exclusive applications"
msgstr "Exkluzivní aplikace"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1228,7 +1228,7 @@ msgid "close the dialog without saving"
msgstr "zavřít nabídku bez uložení nových hodnot"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Nápověda"
@@ -1286,7 +1286,7 @@ msgstr ""
"(minuty)"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minut"
@@ -1302,7 +1302,7 @@ msgstr "pozastavit práci, pokud vytížení procesoru překročí tuto úroveň
msgid "percent (0 means no restriction)"
msgstr "procent (0 znamená bez omezení)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Každý den v těchto hodinách"
@@ -1310,8 +1310,8 @@ msgstr "Každý den v těchto hodinách"
msgid "start work at this time"
msgstr "Začít práci v tuto dobu"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "a"
@@ -1319,44 +1319,44 @@ msgstr "a"
msgid "stop work at this time"
msgstr "Ukončit práci v tuto dobu"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(bez omezení, pokud jsou časy shodné)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Nastavení pro dny v týdnu:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"Po zaškrtnutí budete moci nastavit hodiny individuálně pro daný den v týdnu"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Pondělí"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Úterý"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Středa"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Čtvrtek"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Pátek"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sobota"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Neděle"
@@ -1377,9 +1377,9 @@ msgstr "Na víceprocesorových systémech použít nejvýše"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Použít nejvýše"
@@ -1388,74 +1388,74 @@ msgstr "Použít nejvýše"
msgid "% CPU time"
msgstr "% procesorového času"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Obecné nastavení"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Max. rychlost stahování"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KB/s"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Max. rychlost odesílání"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Přenést nejvýše"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MB"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "každých"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dní"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Minimální zásoba práce"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "Pokusit se udržet dostatečnou zásobu práce aspoň na tolik dní"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Maximální dodatečná zásoba práce"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Udržet navíc zásobu práce aspoň na tolik dní"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Přeskočit ověřování souborů s obrázky"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"zaškrtněte, pokud váš poskytovatel připojení k Internetu modifikuje soubory "
"s obrázky"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Nastavení připojení"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Zobrazit dotaz před připojením k Internetu"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1463,11 +1463,11 @@ msgstr ""
"Je-li zaškrtnuto, bude před každým pokusem o připojení k Internetu zobrazeno "
"okno vyžadující potvrzení"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Odpojit po ukončení komunikace"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1476,150 +1476,150 @@ msgstr ""
"přenosů\n"
"(má význam jen pro vytáčená/dial-up připojení)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Povolené využití přístupu k Internetu"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "Povolit přístup v tuto dobu"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "Ukončit přístup v tuto dobu"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Využití disku"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "Povolené místo na disku pro BOINC (v GB)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "GB na disku"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Ponechat aspoň"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC ponechá nejméně tolik GB na disku volných"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "GB na disku volných"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC využije nejvýše tolik procent z celkové kapacity disku"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% celkového místa na disku"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Ukládat kontrolní bod na disk nejvýše každých"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "vteřin"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% stránkovacího souboru"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Využití paměti"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% je-li počítač používán"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% není-li počítač používán"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Při pozastavení výpočtů ponechat aplikaci v paměti"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
"Je-li zaškrtnuto, budou pozastavené úkoly, které byly zpracovávány, "
"ponechány v paměti"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr "Přerušit výpočty a přistup na Internet, pokud běží tyto aplikace:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Přidat..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Přidat aplikaci do tohoto seznamu"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Odebrat"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Odebrat aplikci z tohoto seznamu"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Pro pokročilé možnosti přejděte na"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Záznam událostí"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Čas"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Zpráva"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "Zobrazit jen tento projekt"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Kopírov&at vše"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Zkopíruje všechny zprávy do schránky."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Kopírovat vybrané"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1627,7 +1627,7 @@ msgstr ""
"Zkopíruje označené zprávy do schránky. Označit více zpráv je možno klikáním "
"na zprávy se současně stisknutou klávesou Shift nebo Command."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1635,24 +1635,24 @@ msgstr ""
"Zkopíruje označené zprávy do schránky. Označit více zpráv je možno klikáním "
"na zprávy se současně stisknutou klávesou Shift nebo Ctrl."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "Zavřít"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Zobrazit nápovědu pro %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Zobrazit všechny zprávy"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Zobrazit zprávy všech projektů."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Zobrazit pouze zprávy vybraného projektu"
@@ -1705,7 +1705,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Zapamatovat si toto rozhodnutí a tuto nabídku již nezobrazovat."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "Zrušit"
@@ -1713,223 +1713,223 @@ msgstr "Zrušit"
msgid "Don't show this dialog again."
msgstr "Toto okno již nezobrazovat."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Nepřijímat úkoly pro "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Předvolby projektu"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Předvolby správce účtu"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Projekt nemá žádné aplikace pro "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Konfigurace klienta nezahrnuje "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " vyzvedávání práce odloženo pro"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " interval odkládání vyzvedávání práce pro"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Vlastnosti projektu "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Obecné"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Hlavní URL adresa"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Uživatelské jméno"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Název týmu"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Rozdělení práce"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "RPC plánovače odloženo o"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Stahování souborů odloženo o"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Odesílání souborů odloženo o"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID počítače"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Nenáročné na procesor"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "ano"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Pozastaveno přes GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "ne"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Nepřijímat další práci"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Zpracovávám požadavek plánovače"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Vyčkávající zpráva o průběhu"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Umístění počítače"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "výchozí"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Připojeno přes Správce účtu"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Odebrat po dokončení úkolů"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Ukončeno"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Kredit"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Uživatel"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Počítač"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Plánování"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Priorita plánovávní"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Korekční faktor pro dobu trvání "
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Vlastnosti úkolu "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplikace"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Jméno pracovní jednotky"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Jméno"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Stav"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Přijato"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Odevzdat do "
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Prostředky"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Odhadovaná doba výpočtu"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Procesorový čas při posledním uložení "
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Procesorový čas"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Čas"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Odhadovaný zbývající čas "
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Hotová část"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Velikost virtuální paměti"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Velikost pracovní sady"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Adresář"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID procesu"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Místní:"
@@ -2017,7 +2017,7 @@ msgstr "Ponechte prázdné, pokud není vyžadováno"
msgid "User Name:"
msgstr "Uživatelské jméno:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Heslo:"
@@ -2075,12 +2075,12 @@ msgid ""
"effect, you must restart the %s."
msgstr "Jazyk %s byl změněn. Aby se změna projevila, je nutné restartovat %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Zvolit počítač "
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2089,7 +2089,7 @@ msgstr ""
"Na tomto počítači již běží jiná instance %s.\n"
"Vyberte prosím klienta pro monitorování."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Jméno počítače:"
@@ -2286,23 +2286,23 @@ msgstr "Výzkum"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Dozvědět se víc o projektech umístěných na World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Startuji klienta"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Připojuji se ke klientovi"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Zjišťuji stav systému, prosím čekejte..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Chybějící aplikace"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2310,184 +2310,184 @@ msgstr ""
"Stáhněte si prosím a naistalujte aplikaci CoRD z adresy "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "na bateriích"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "počítač je používán"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "požadavek uživatele"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "čas"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "probíhají testy procesoru"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "nedostatek místa na disku - zkontrolujte prosím předvolby"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "počítač není používán"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "startuji"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "běží důležitější aplikace"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "procesor je vytížen"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "překročen limit přenosu dat po síti"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "vyžádáno operačním systémem"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "neznámý důvod"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU nenalezena, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nový"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Chyba při stahování"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Stahuji"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (pozastaveno - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projekt pozastaven uživatelem"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Úkol pozastaven uživatelem"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Pozastaveno - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU pozastaveno - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Čekám na uvolnění paměti"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Čekám na uvolnění sdílené paměti"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Počítám s vysokou prioritou"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Počítám"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (nenáročný na procesor)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Čekám na zpracování"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Připraven"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Vyčkávání plánovače: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(vyčkávání plánovače)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr "(Čekám na připojení k Internetu)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Chyba při výpočtu"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Chyba při odesílání"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Odesílám"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Zrušeno uživatelem"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Zrušeno projektem"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Zrušeno: vypršela lhůta před započetím"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Zrušeno: překročeno povolené místo na disku"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Zrušeno: překročena maximální délka výpočtu"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Zrušeno: překročen povolený limit paměti"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Zrušeno"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Potvrzeno"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Odeslán. Připraven k ohlášení"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Chyba: Neplatný stav '%d'"
@@ -2541,64 +2541,64 @@ msgstr "Zkontrolujte uživatelské jméno a heslo a zkuste to znova."
msgid "Check the email address and password, and try again."
msgstr "Zkontrolujte zadanou emailovou adresu a heslo a zkuste to znova."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "více..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Vše"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Výběr projektu"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Vyberte si projekt kliknutím na jeho jméno\n"
"nebo napište jeho URL adresu do textového pole níže."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategorie:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projekty:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Detaily projektu"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Oblast výzkumu:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organizace:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Webové stránky:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Podporované systémy:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL adresa projektu:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr ""
"Tento projekt nemusí mít práci pro váš typ počítače. Chcete ho i tak přidat?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Tento projekt již máte přidaný. Zvolte prosím jiný projekt."
@@ -2606,11 +2606,11 @@ msgstr "Tento projekt již máte přidaný. Zvolte prosím jiný projekt."
msgid "Communicating with project."
msgstr "Komunikuji se projektem."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Potřebné soubory nenalezeny na serveru."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Na serveru se vyskytla vnitřní chyba."
@@ -2721,8 +2721,8 @@ msgid "I agree to the terms of use."
msgstr "Souhlasím s podmínkami použití."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "Nesouhlasím s podmínkami použití."
+msgid "I do not agree to the terms of use."
+msgstr ""
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2811,7 +2811,7 @@ msgstr "'%s' neobsahuje platné jméno počítače."
msgid "'%s' does not contain a valid path."
msgstr "'%s' neobsahuje platnou cestu."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Příkazy"
@@ -2864,7 +2864,7 @@ msgstr "Načítám zprávy, prosím čekejte..."
msgid "There are no notices at this time."
msgstr "Nejsou dostupné žádné zprávy."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Zprávy"
@@ -2881,7 +2881,7 @@ msgstr ""
"nastavení a je-li možno, přijmout další práci."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3118,135 +3118,135 @@ msgstr "volné místo: "
msgid "used by other programs: "
msgstr "využité ostatními programy: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Celkový kredit uživatele"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Průměrný kredit uživatele"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Celkový kredit počítače"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Průměrný kredit počítače"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Poslední akualizace - před %.0f dny"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Celkový kredit uživatele"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Zobrazit celkový kredit uživatele"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Průměrný kredit uživatele"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Zobrazit průměrný kredit uživatele"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Celkový kredit počítače"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Zobrazit celkový kredit počítače"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Průměrný kredit počítače"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Zobrazit průměrný kredit počítače"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Předchozí projekt"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Zobrazit graf předchozího projektu"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "Další projekt >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Zobrazit graf následujícího projektu"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Schovat seznam projektů"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Použít celou oblast pro grafy"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Zobrazení"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Jeden projekt"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Zobrazit jeden graf se zvoleným projektem"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Všechny projekty (zvlášť)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Zobrazit všechny projekty, každý ve svém grafu"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Všechny projekty (dohromady)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Zobrazit jeden graf se všemi projekty"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Všechny projekty (součet)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Zobrazit jeden graf se součtem všech projektů"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistiky"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Aktualizuji grafy..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Zobrazit seznam projektů"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Používá menší oblast pro grafy"
@@ -3413,10 +3413,6 @@ msgstr "Zbývá (odhad)"
msgid "Deadline"
msgstr "Odevzdat do"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Jméno"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Úkoly"
@@ -3568,40 +3564,40 @@ msgstr "Opravdu chcete operaci zrušit?"
msgid "Question"
msgstr "Dotaz"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Pokročilé zobrazení...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Zobrazit rozšířené grafické rozhraní."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Vzhled"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Vyberte si vzhled aplikace."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Výchozí"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Pozastavit výpočty"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Pokračovat ve výpočtech"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Otevřít okno s informačními zprávami projektů nebo BOINC"
@@ -3623,117 +3619,119 @@ msgid "Click OK to set preferences."
msgstr "Klikněte na OK pro uložení předvoleb."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Klikněte na Smazat pro obnovení nastavení z webu."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Pro pokročilé nastavení klikněte na Výpočetní předvolby v"
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "rozšířeném zobrazení."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Počítej pouze mezi: "
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Připojuj se k Internetu pouze mezi: "
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Použij nejvýše "
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "místa na disku"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "výkonu procesoru"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Počítat při běhu na baterie?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Počítat po nečinnosti: "
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Kdykoliv"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Počítat trvale)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Opravdu chcete vymazat všechny lokální předvolby?\n"
@@ -3793,116 +3791,116 @@ msgstr ""
"Opravdu chcete zrušit tento úkol '%s'?\n"
"(Průběh: %.1lf%%, Stav: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Nemáte žádný projekt. Přidejte si prosím nějaký projekt."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Nedostupné"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Úkoly:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Zvolit úkol"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Od:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Průběh tohoto úkolu"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Příkazy úkolu"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Otevřít menu s příkazy pro tento úkol"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Aplikace: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Aplikace: Nedostupná"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Nedostupný"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Uplynulo: &s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Zbývá (odhad): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Stav: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Zjišťuji aktuální stav."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Stahuji práci ze serveru."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Výpočty pozastaveny: Provoz na baterie."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Výpočty pozastaveny: Uživatel je aktivní."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Výpočty pozastaveny: Pozastaveno uživatelem."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Výpočty pozastaveny: Denní doba."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Výpočty pozastaveny: Probíhají testy procesoru."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Výpočty pozastaveny."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Čekám na kontakt se servery projektu."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Zjišťuji aktuální stav"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Není k dispozici žádná práce"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Selhalo spojení s klientem"
@@ -3944,6 +3942,24 @@ msgstr "Zobrazit vše"
msgid "Quit %s"
msgstr "Opustit %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Nesouhlasím s podmínkami použití."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Klikněte na Smazat pro obnovení nastavení z webu."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Pro pokročilé nastavení klikněte na Výpočetní předvolby v"
+
+#~ msgid "the Advanced View."
+#~ msgstr "rozšířeném zobrazení."
+
+#~ msgid "Workunit name"
+#~ msgstr "Jméno pracovní jednotky"
+
+#~ msgid "invalid float"
+#~ msgstr "neplatné číslo"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Zobrazit rozšířené grafické rozhraní."
diff --git a/locale/cs/BOINC-Project-Generic.po b/locale/cs/BOINC-Project-Generic.po
index c55e23a..501e83e 100644
--- a/locale/cs/BOINC-Project-Generic.po
+++ b/locale/cs/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-08-30 20:59+0000\n"
"Last-Translator: Lycan <santdel at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -194,7 +194,7 @@ msgstr "Hledat v diskuzních fórech"
msgid "Advanced search"
msgstr "Pokročilé hledání"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Soukromé zprávy"
@@ -204,8 +204,8 @@ msgstr "Soukromé zprávy"
msgid "Questions and Answers"
msgstr "Otázky a odpovědi"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -271,7 +271,7 @@ msgstr "Nepřečtené"
msgid "Message %1"
msgstr "Zpráva %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "skryté"
@@ -479,7 +479,7 @@ msgstr "Nelze posílat příspěvky do schovaného vlákna."
msgid "Thread"
msgstr "Vlákno"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Příspěvky"
@@ -488,7 +488,7 @@ msgstr "Příspěvky"
msgid "Views"
msgstr "Zobrazení"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Poslední příspěvek"
@@ -526,7 +526,7 @@ msgid "Home"
msgstr "Doma"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "V práci"
@@ -592,9 +592,9 @@ msgid "Created"
msgstr "Vytvořen"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -770,7 +770,7 @@ msgstr "Poslední kontakt"
msgid "Computer info"
msgstr "Informace o počítači"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Pozice"
@@ -779,9 +779,9 @@ msgstr "Pozice"
msgid "Avg. credit"
msgstr "Průměrný kredit"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -869,8 +869,8 @@ msgstr "Jen počítače aktivní za posledních 30 dnů"
msgid "Computer ID"
msgstr "ID počítače"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -906,7 +906,7 @@ msgstr "Schránka"
msgid "Write"
msgstr "Psát zprávu"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Poslat soukromou zprávu"
@@ -1673,7 +1673,7 @@ msgstr "Čas nahlášení<br/>nebo lhůta pro dokončení"
msgid "explain"
msgstr "vysvětlení"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Stav"
@@ -1766,9 +1766,9 @@ msgstr "Klíčová slova"
msgid "Find teams with these words in their names or descriptions"
msgstr "Hledat týmy s těmito slovy v názvu nebo popisu"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1776,7 +1776,7 @@ msgstr "Hledat týmy s těmito slovy v názvu nebo popisu"
msgid "Country"
msgstr "Země"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Typ týmu"
@@ -1804,8 +1804,8 @@ msgstr "Požadováno vámi"
msgid "founder response deadline is %1"
msgstr "lhůta na odpověď vlastníka je %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Žádná"
@@ -1829,27 +1829,27 @@ msgstr "Popis"
msgid "Web site"
msgstr "Webové stránky"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Meziprojektové statistiky"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Typ"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Diskuzní fórum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Vlákna"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Připojit se k tomuto týmu"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1857,79 +1857,79 @@ msgstr ""
"Poznámka: pokud máte v předvolbách projektu 'OK u emailu', připojením k týmu "
"poskytnete jeho vlastníkovi přístup k vaší emailové adrese."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nepřijímá nové členy"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Požádáno o změnu vlastnictví"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Odpověď od %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Změna vlastníka týmu"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Členové"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Vlastník"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administrátoři"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Noví členové za poslední den"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Celkem členů"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "zobrazit"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktivní členové"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Členové s kreditem"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrátor"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Předchozí %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Další %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Takový tým neexistije."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Tuto operaci může provádět jen vlastník."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Tuto operaci může provést jen administrátor týmu"
@@ -1941,7 +1941,7 @@ msgstr ""
"VAROVÁNÍ: toto je globální BOINC tým. Změny zanesené zde budou brzy "
"přepsány. Upravte namísto toho přímo %1globální BOINC tým%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1949,48 +1949,48 @@ msgstr ""
"%1Poznámka k soukromí%2: pokud založíte tým, vaše projektové předvolby "
"(podíl prostředků, nastavení grafiky) budou veřejně viditelné."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Název týmu, textová verze"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nepoužívejte HTML tagy."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Název týmu, HTML verze"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Můžete použít %1tyto HTML tagy%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Pokud neznáte HTML, nevyplňujte tento box."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Webová stránka týmu, pokud je"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "bez \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
"Tato adresa bude použita jako odkaz z hlavní týmové stránky na tomto webu."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Popis týmu"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Povolit nové členy?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil uživatele"
@@ -2023,7 +2023,7 @@ msgid "Computers on this account"
msgstr "Počítače na tomto účtu"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Zobrazit"
@@ -2040,8 +2040,8 @@ msgstr "Meziprojektové statistiky"
msgid "Account"
msgstr "Účet"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Tým"
@@ -2070,7 +2070,7 @@ msgstr "Informace o účtu"
msgid "Email address"
msgstr "Emailová adresa"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL adresa"
@@ -2078,7 +2078,7 @@ msgstr "URL adresa"
msgid "Postal code"
msgstr "Směrovací číslo"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "Členem %1 od"
@@ -2098,7 +2098,7 @@ msgstr "heslo"
msgid "other account info"
msgstr "další informace o účtu"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Uživatelské ID"
@@ -2144,96 +2144,96 @@ msgstr "%1 předvolby"
msgid "Community"
msgstr "Komunita"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Smazat"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Vytvořit"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 příspěvků"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Oznámení"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Opustit tým"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Spravovat"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(nevyřízený požadavek na změnu vlastnictví)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Člen týmu"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "najít tým"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Vlastník, ale ne člen týmu"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Najít přátele"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Přátelé"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Počítače"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Dárce"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Tento člověk je váš přítel"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Zrušit přátelství"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Nevyřízený požadavek"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Přidat mezi přátele"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "uživatelské jméno nemůže začínat nebo končit mezerou"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "uživatelské jméno nemůže být prázdné"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "uživatelské jméno nemůže obsahovat HTML tagy"
@@ -2311,7 +2311,7 @@ msgstr "Nelze se připojit k databázi - zkuste to prosím později."
msgid "Unable to select database - please try again later"
msgstr "Nelze vybrat databázi - zkuste to prosím později."
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Zapamatovat si přihlášení na tomto počítači"
@@ -2514,7 +2514,7 @@ msgstr ""
msgid "User of the day"
msgstr "Uživatel dne"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Stav serveru"
@@ -5605,135 +5605,135 @@ msgstr "Zastavený"
msgid "Disabled"
msgstr "Vypnutý"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Stav projektu"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Verze software na serveru: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Program"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Počítač"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "webové stránky s daty"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "server pro posílání/nahrávání dat"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "plánovač"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Spuštěný:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Program běží normálně"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Zastavený:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Program selhal, nebo je projekt odstavený"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Vypnutý:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Program je vypnutý"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Stav výpočtů"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Databázový server není dostupný"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Úkoly připravené k zaslání"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Probíhající úkoly"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Pracovní jednotky čekající na validaci"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Pracovní jednotky čekající na začlenění"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Pracovní jednotky čekající na smazání"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Úkoly čekající na smazání"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Zpoždění přechodového serveru (hod)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Uživatelé"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "s nedávným kreditem"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "s kreditem"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registrovaní během posledních 24 hod"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "aktuální výkon GigaFLOPů"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Úkoly podle aplikace"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplikační program"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "neodesláno"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "probíhá"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "průměrná doba běhu posledních 100 výsledků v h (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "uživatelé během posledních 24 hodin"
@@ -6001,6 +6001,10 @@ msgstr "Nový vlastník?"
msgid "Change founder"
msgstr "Změnit vlastníka"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Je třeba zvolit neprázdné jméno týmu."
diff --git a/locale/cs/BOINC-Setup.mo b/locale/cs/BOINC-Setup.mo
index 0376c97..06d4d76 100644
Binary files a/locale/cs/BOINC-Setup.mo and b/locale/cs/BOINC-Setup.mo differ
diff --git a/locale/cs/BOINC-Setup.po b/locale/cs/BOINC-Setup.po
index b840d71..17ec812 100644
--- a/locale/cs/BOINC-Setup.po
+++ b/locale/cs/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: 2013-08-30 20:59+0000\n"
"Last-Translator: Lycan <santdel at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -28,11 +28,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr "Promiňte, tato verze %s vyžaduje systém verze 10.4 a novější."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Ano"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Ne"
@@ -62,15 +62,15 @@ msgstr ""
"Přejete si nastavit %s jako spořič obrazovky pro všechny %s uživatele na "
"tomto Macu?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Chyba v přístupových právech po novém spuštění"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -78,7 +78,7 @@ msgstr ""
"Odebírání může trvat několik minut.\n"
"Strpení prosím."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -89,21 +89,27 @@ msgstr ""
"\n"
"Tímto se odstraní aplikace, ale zachovají se %s uživatelské soubory."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Zrušeno: %s nebylo změněno."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Nastala chyba: kód chyby %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "jméno uživatele"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -122,7 +128,7 @@ msgstr ""
"pro každého uživatele, soubor\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -132,11 +138,11 @@ msgstr ""
"Zadejte vaše administrátorské heslo pro úplné odebrání %s z vašeho počítače.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Zrušit"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Pokračovat..."
diff --git a/locale/cs/BOINC-Web.mo b/locale/cs/BOINC-Web.mo
index 56e9b15..a9a258f 100644
Binary files a/locale/cs/BOINC-Web.mo and b/locale/cs/BOINC-Web.mo differ
diff --git a/locale/cs/BOINC-Web.po b/locale/cs/BOINC-Web.po
index 657abf6..079866a 100644
--- a/locale/cs/BOINC-Web.po
+++ b/locale/cs/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-08-26 22:06+0200\n"
"Last-Translator: Martin <martin.suchan at email.cz>\n"
"Language-Team: \n"
@@ -445,16 +445,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Kognitivní vědy a umělá inteligence"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Soukromý"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Umělá inteligence"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -465,19 +465,19 @@ msgstr ""
"inteligenci využívající sémantické sítě, čističe, části hlasových databází a "
"hlasových označovačů s cílem napodobit lidské chování při konverzaci."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologie a medicína"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Univerzita v Dublinu"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Výzkum léků proti malárii"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -491,15 +491,15 @@ msgstr ""
"zejména na nové proteiny v těle parazita. Projekt FightMalaria at Home si dává "
"za cíl najít tyto nové léky proti malárii."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Univerzita v Karlsruhe (Německo)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Predikce struktury proteinů"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -513,15 +513,15 @@ msgstr ""
"poruchám proteinů, nebo jejich agregaci a k vývoji nových léků na bázi "
"třírozměrných struktur biologicky významných proteinů."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Univerzita v Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Studie proteinů - interakce ligandů"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -532,15 +532,15 @@ msgstr ""
"Cílem projektu je lepší porozumnění, jak fungují vztahy atomů u proteinových "
"ligandů, čímž může tento projekt pomoci k objevení nových druhů léků."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Biomedicínský výzkumný park v Barceloně (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Molekulární simulace proteinů"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -552,15 +552,15 @@ msgstr ""
"pro provoz na NVIDIA GPU. Tímto se otevírají nové možnosti v oblasti "
"biomedicíny a výpočetní biologie pro výzkum biomedicíny."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion - Izraelský technologický institut"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Analýza genetických vazeb"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -569,16 +569,16 @@ msgstr ""
"Superlink at Technion pomáhá genetikům na celém světě nalézt geny vyvolávající "
"cukrovku, vysoký krevní tlak, rakovinu, schizofrenii a mnoho dalších."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Univerzita v Marylandu, centrum bioinformatiky a výpočetní biologie"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Výzkum životních věd"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -590,15 +590,15 @@ msgstr ""
"bakterií, plasmidů a virů, a biologickou rozmanitost v národních "
"rezervacích."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Švýcarský institut tropů"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologie"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -617,15 +617,15 @@ msgstr ""
"parametrů, které souvisí s biologickými a sociálními faktory ovlivňujícími "
"rozložení nemoci."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Washingtonská univerzita"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologie"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -641,11 +641,11 @@ msgstr ""
"úsilí navrhnout nové proteiny pro boj s nemocemi jako HIV, malarie, rakovina "
"nebo Alzheimerova choroba."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Vídeňská univerzita"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -655,19 +655,19 @@ msgstr ""
"výsledných dat, které hrají klíčovou roli v mnoha bioinformatikckých "
"výzkumných projektech."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Vědy o Zemi"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Oxfordská univerzita"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Studie klimatu"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -686,16 +686,25 @@ msgstr ""
"siřičitého cyklu, a také jak se klima může změnit v příštím století v "
"širokém spektru různých scénářů."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomie, Fyzika a Chemie"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomie"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -711,15 +720,15 @@ msgstr ""
"prvního řádu formování hvězd) na podkladech v řádu pixelů pomocí technik "
"\"speciální distribuce energie - SED\" a pomocí distribuovaných výpočtů."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Texaská univerzita v Austinu"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Chemie"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -741,11 +750,11 @@ msgstr ""
"věnuje výpočtu dlouhodobé dynamiky systémů."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Illinoiská univerzita v Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -755,11 +764,11 @@ msgstr ""
"hledání modelů, které odpovídají dostupným astroniomicým částicovým "
"fyzikálním datům."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Polytechnický institut Rensselaer"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -769,11 +778,11 @@ msgstr ""
"třídimenzionálního modelu Mléčné dráhy pomocí dat získanch projektem Sloan "
"Digital Sky Survey."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Univerzita Leiden, Nizozemí"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -789,15 +798,15 @@ msgstr ""
"pro simulaci kapalného argonu, nebo k testování platnosti zákonu o ideálním "
"plynu pomocí simulací na gridu."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Univerzita ve Wisconsinu - Milwaukee, Institut Maxe Plancka"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofyzika"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -811,15 +820,15 @@ msgstr ""
"podporuje Americká fyzikální společnost (APS) a řada mezinárodních "
"organizací."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Evropská organizace pro jaderný výzkum)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fyzika"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -833,7 +842,7 @@ msgstr ""
"pro zkoumání vlastností částic. LHC at home provádí simulace pro zlepšení "
"návrhu LHC a jeho detektorů."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -843,15 +852,15 @@ msgstr ""
"simulace událostí v LHC na počítačích dobrovolníků. Tento projekt vyžaduje "
"instalaci VirtualBoxu na vašem počítači."
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Kalifornská univerzita v Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofyzika, astrobiologie"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -866,15 +875,15 @@ msgstr ""
"vesmíru. Je známo, že tyto signály nevznikají přírodní cestou, jejich "
"zachycení by tedy dokazovalo existenci mimozemské technologie."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Univerzita aplikovaných věd Bielefeld"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Chemické inženýrství a nanotechnologie"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -886,19 +895,19 @@ msgstr ""
"magnetických spínačů, které by šlo použít v medicíně, např. pro lokální "
"chemoterapii nádorů, či v oblasti biotechnologie."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Více různých aplikací"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Čínská akademie věd"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Fyzika, biochemie a jiné"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -907,11 +916,11 @@ msgstr ""
"Cílem projektu CAS at home je podpora a pomoc vědcům v Číně při adopci "
"technologií pro dobrovolné výpočty a skupinové přemýšlení u jejich výzkumu."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matematika, fyzika, evoluce"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -919,15 +928,15 @@ msgstr ""
"Yoyo at home je prostředníkem mezi platformou BOINC a dalšími dobrovolnými "
"výpočetními projekty: ECM, Muon, Evolution at home a distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI - laboratoř paralelních a distribuovaných výpočtů, Maďarsko"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Výzkumné projekty z Evropy"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -939,27 +948,27 @@ msgstr ""
"zpracování dobrovolníky tohoto projektu. Zahrnuté vědecké projekty se "
"zabývají problémy v matematice, fyzice, biologii a dalších odvětvích."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Univerzity a výkumná centra ve Španělsku"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Výzkumné projekty ze Španělska"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Fyzikální výzkum, materiálové vědy a biomedicína"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Corporate Citizenship"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Medicína, životní prostředí a jiný humanitární výzkum"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -971,27 +980,27 @@ msgstr ""
"rakovinu. tropické a zanedbané nemoci, solární energii, čistou voda a mnohé "
"další."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matematika, výpočty a hry"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Počítačová věda"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Matematika, fyzika a umělá inteligence"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Simulace kvantových výpočtů, Goldbachovy hypotézy."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Kryptografie"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -999,24 +1008,24 @@ msgstr ""
"Pokus o dešifrování tří originálních zpráv Enigma. Signály byly zachyceny v "
"severním Atlantiku v roce 1942 a jsou považovány za nerozluštěné."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matematika"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "Studium Collatzovy domněnky, nevyřešeného problému v matematice"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Kalifornská státní univerzita Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Faktorizace velkých čísel"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1032,7 +1041,7 @@ msgstr ""
"5 * 7. Projekt NFS at Home je pokračováním této zkušnosti; akorát s tím "
"rozdílem, že pracuje s čísly, které mají i stovky číslic."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1040,11 +1049,11 @@ msgstr ""
"Vilnius Gediminas Technical University a University of Technology v Kaunasu "
"(Litva)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Testování softwaru"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1056,11 +1065,11 @@ msgstr ""
"instituce. Aktuálně se tato platforma používa pro testování aplikací na "
"principu Monte-Carlo."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Matematický institut univerzity Leiden / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1078,7 +1087,7 @@ msgstr ""
"problémů v matematice. Prokáže-li se, že je pravdivá, bude díky ní možné "
"snadno zodpovědět mnoho dalších otevřených problému."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1086,18 +1095,18 @@ msgstr ""
"Primegrid zkoumá v několika projektech různé fruhy velmi velkých prvočísel, "
"včetně hledání nových největších známých prvočísel."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Univerzita aplikovaných věd RheinMein"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
"Hledání protipříkladů ke dvěma domněnkám souvisejícími s hledáním prvočísel"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1114,6 +1123,10 @@ msgstr "Komentáře"
msgid "News is available as an %sRSS feed%s"
msgstr "Novinky jsou dostupné jako %szprávy RSS%s"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomie, Fyzika a Chemie"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s pro %s (%s MB)"
diff --git a/locale/da/BOINC-Android.po b/locale/da/BOINC-Android.po
index 5f0c691..83555ec 100644
--- a/locale/da/BOINC-Android.po
+++ b/locale/da/BOINC-Android.po
@@ -7,16 +7,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-10-26 22:27+0000\n"
+"PO-Revision-Date: 2014-03-02 19:04+0000\n"
"Last-Translator: pryds <thomas at pryds.eu>\n"
"Language-Team: da <LL at li.org>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1393787074.0\n"
#. app global
msgctxt "app_name"
@@ -215,7 +216,7 @@ msgstr "Kodeord:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr "… Tast igen:"
+msgstr "… Indtast igen:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
@@ -342,7 +343,7 @@ msgstr "Synkronisér"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Rør her for at vælge et projekt."
msgctxt "main_error"
msgid "Whooops"
diff --git a/locale/de/BOINC-Android.po b/locale/de/BOINC-Android.po
index c5e4cb6..398d281 100644
--- a/locale/de/BOINC-Android.po
+++ b/locale/de/BOINC-Android.po
@@ -7,16 +7,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-11-13 20:16+0000\n"
+"PO-Revision-Date: 2014-02-02 19:40+0000\n"
"Last-Translator: Christian <djangofett at gmx.net>\n"
"Language-Team: de <LL at li.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1391370054.0\n"
#. app global
msgctxt "app_name"
@@ -56,7 +57,7 @@ msgstr "Kontoverwaltung hinzufügen"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr "Keine Internetverbindung"
+msgstr "Keine Internetverbindung gefunden"
#. project login
msgctxt "attachproject_login_loading"
@@ -137,7 +138,7 @@ msgstr "Ein Konto erstellen um teilzunehmen:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr "Die Projektwebseite besuchen um ein Konto zu erstellen:"
+msgstr "Besuchen Sie die Projektwebseite um ein Konto zu erstellen:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
@@ -266,7 +267,6 @@ msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
msgstr "E-Mail-Adresse ist bereits registriert"
-#, fuzzy
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
msgstr "Projekt ist offline"
@@ -343,7 +343,7 @@ msgstr "Synchronisieren"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Hier klicken um ein Projekt auszuwählen."
msgctxt "main_error"
msgid "Whooops"
diff --git a/locale/de/BOINC-Manager.mo b/locale/de/BOINC-Manager.mo
index 23edb26..5e98899 100644
Binary files a/locale/de/BOINC-Manager.mo and b/locale/de/BOINC-Manager.mo differ
diff --git a/locale/de/BOINC-Manager.po b/locale/de/BOINC-Manager.po
index 50dbd89..a3791a3 100644
--- a/locale/de/BOINC-Manager.po
+++ b/locale/de/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.4x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-23 08:23+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-04-06 14:05+0000\n"
"Last-Translator: Christian <djangofett at gmx.net>\n"
"Language-Team: BOINC.DE Team <webmaster at boinc.de>\n"
"Language: de\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1385195000.0\n"
+"X-POOTLE-MTIME: 1396793150.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -215,347 +215,347 @@ msgstr "Verbunden"
msgid "Disconnected"
msgstr "Verbindung getrennt"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Das %s Fenster schließen."
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "Fenster &Schließen"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Beende %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Nachrichten\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Nachrichten anzeigen"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projekte\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Projekte anzeigen"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Aufgaben\tCtrl+Shift+A"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Aufgaben anzeigen"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Ü&bertragungen\tCtrl+Shift+B"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Übertragungen anzeigen"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistiken\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Statistiken anzeigen"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Festplatte\tCtrl+Shift+F"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Festplattennutzung anzeigen"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Einfache Ansicht...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Schaltet auf die vereinfachte BOINC-Grafikoberfläche um."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "Ein &Projekt oder eine Kontoverwaltung hinzufügen..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Nimm an einigen oder allen der über 30 Projekte aus verschiedenen Bereichen "
"teil."
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Synchronisiere mit %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Hole die aktuellen Einstellungen von %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "Projekt &hinzufügen..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Ein Projekt hinzufügen"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&Stoppe die Nutzung von %s ..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Trennt diesen Client von der Kontoverwaltung."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Optionen..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr ""
"Das Aussehen des BOINC Managers und die Proxy Einstellungen konfigurieren."
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Einstellungen..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Die lokalen Einstellungen konfigurieren."
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Immer ausführen"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr ""
"BOINC arbeitet permanent. Andere Einstellungen, ausgenommen zum "
"Netzwerkzugriff, werden übersteuert."
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Ausführen nach &Voreinstellung"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "BOINC arbeitet entsprechend der Einstellungen."
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Anhalten"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr ""
"BOINC unterbricht alle Arbeiten. Andere Einstellungen werden übersteuert."
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "GPU immer nutzen"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Erlaubt GPU-Arbeit ungeachtet der Voreinstellungen"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "GPU-Nutzung nach &Voreinstellung"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "BOINC nutzt die GPU entsprechend der Einstellungen."
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "GPU anhalten"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Stoppt GPU-Arbeit ungeachtet der Voreinstellungen."
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Netzwerkzugriff immer &erlaubt"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Erlaubt BOINC immer auf das Internet zuzugreifen."
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Netzwerkaktivität nach V&oreinstellung"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Erlaubt BOINC den Internetzugriff entsprechend den Einstellungen."
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Netzwerkzugriff a&bgeschaltet"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Verhindert dass BOINC auf das Internet zugreift."
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Verbindet mit einem anderen Computer auf dem %s läuft."
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "&Computer auswählen..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Beenden des aktuell verbundenen Client..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Beendet den aktuell verbundenen Client."
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Bench&marks ausführen"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Startet die BOINC CPU Benchmarks."
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Netzwerk-&Kommunikation ausführen"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Ausstehende Netzwerk-Kommunikation ausführen."
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Konfigurationsdateien einlesen"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Die Einstellungen der cc_config.xml Datei und etwaiger app_config.xml "
"Dateien einlesen."
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Lokale Einstellungsdatei lesen"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Einstellungen aus global_prefs_override.xml lesen."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Eine neue Instanz von %s starten..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Weiteren %s starten"
# Das Eventlog in 6.12 ist das Meldungstab aus 6.10 hier sollte der Name konsistent bleiben.
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Meldungen... \t Ctrl+Shift+M"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Zeige Diagnosenachrichten."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &Hilfe"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Zeige Informationen über %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s Hilfe"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Zeige Informationen über %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, c-format
msgid "%s &web site"
msgstr "%s &Webseite"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Zeige Informationen über BOINC und %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Über %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Lizenz- und Urheberrechts-Informationen."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Datei"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Ansicht"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "Ass&istenten"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Steuerung"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Extras"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Hilfe"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Nutzung von %s beenden"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -570,12 +570,12 @@ msgstr ""
"\n"
"Wollen Sie mit der Abmeldung von %s fortfahren?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Beende den aktuellen Client..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -584,28 +584,28 @@ msgstr ""
"%s - beendet den aktuell verbundenen Client,\n"
"und fragt nach einem anderen Rechner zum Verbinden."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
#, c-format,
msgid "%s has successfully added %s"
msgstr "%s hat erfolgreich %s hinzugefügt."
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Verbinden mit %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Verbunden mit %s (%s)"
@@ -642,26 +642,26 @@ msgstr ""
"\n"
"Bitte besuchen Sie die Projektwebseite und folgen Sie dort den Anweisungen."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Kommuniziere mit dem BOINC Client. Bitte warten ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Schließe %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "B&eende %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Kommunikation"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "&Abbrechen"
@@ -827,7 +827,7 @@ msgstr "%s hat die Internetverbindung erfolgreich beendet."
msgid "%s failed to disconnected from the Internet."
msgstr "%s konnte die Internetverbindung nicht beenden."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
#, c-format, c-format
msgid ""
@@ -849,7 +849,7 @@ msgstr ""
" - Ihren Administrator kontaktieren damit Sie in die\n"
" Benutzergruppe 'boinc_master' aufgenommen werden."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -859,16 +859,16 @@ msgstr ""
"installieren Sie %s neu.\n"
"(Fehlercode %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " bei "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -877,69 +877,69 @@ msgstr ""
"funktioniert. Bitte starten sie den Computer neu und\n"
"versuchen es erneut."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC-Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Der BOINC-Manager wurde automatisch vom Betriebssystem gestartet."
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Starte BOINC so, dass nur das Symbol im Infobereich der Taskleiste sichtbar "
"ist."
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Verzeichnis der BOINC-Client Programmdateien"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Datenverzeichnis des BOINC-Client"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Rechnername oder IP-Adresse"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC Portnummer"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Passwort"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Starte BOINC mit diesen optionalen Argumenten"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "BOINC Sicherheit Benutzer und Rechte abschalten"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "Skin-Debugmodus einschalten um Skin-Manager Fehlermeldungen zu sehen"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "mehrere Instanzen des BOINC Managers erlauben"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Nicht verwendet: Workaround für den Fehler in XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automatische Erkennung)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Unbekannt)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Benutzerauswahl)"
@@ -966,7 +966,7 @@ msgid "E&xit"
msgstr "&Beenden"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Fortsetzen"
@@ -1125,64 +1125,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "Ungültige Fließkommazahl"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "ungültige Zahl"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "Ungültige Zeitangabe, Format ist HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "Ungültige Zeitangabe, Format ist HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "Ungültiger Eingabewert entdeckt"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Gültigkeitsproblem"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Anwendungen hinzufügen"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' ist keine ausführbare Anwendung."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Exklusive Anwendung hinzufügen"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Name der Anwendung die hinzugefügt werden soll?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Exklusive Anwendung hinzufügen"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Der Name der Anwendung muss mit '%s' enden"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' ist bereits in der Liste."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1190,11 +1190,11 @@ msgstr ""
"Wollen Sie wirklich alle lokalen Einstellungen löschen?\n"
"(Exklusive Anwendungen bleiben erhalten.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Bestätigung"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Einstellungen"
@@ -1210,11 +1210,11 @@ msgstr ""
"Klicken Sie auf Löschen zum Wiederherstellen der webbasierten\n"
"Einstellungen (ausgenommen der exklusiven Anwendungen)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Löschen"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "alle lokalen Einstellungen löschen und den Dialog schließen"
@@ -1234,7 +1234,7 @@ msgstr "Nutzung von Festplatte und Speicher"
msgid "exclusive applications"
msgstr "Exklusive Anwendungn"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1247,7 +1247,7 @@ msgid "close the dialog without saving"
msgstr "schließt den Dialog ohne die Änderungen zu speichern"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Hilfe"
@@ -1304,7 +1304,7 @@ msgstr ""
"Benutzung war"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "Minuten"
@@ -1321,7 +1321,7 @@ msgstr ""
msgid "percent (0 means no restriction)"
msgstr "% (0 = keine Einschränkung)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Jeden Tag in der Zeit zwischen"
@@ -1329,8 +1329,8 @@ msgstr "Jeden Tag in der Zeit zwischen"
msgid "start work at this time"
msgstr "beginne Arbeit zu dieser Zeit"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "und"
@@ -1338,44 +1338,44 @@ msgstr "und"
msgid "stop work at this time"
msgstr "beende Arbeit zu dieser Zeit"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(keine Einschränkungen, wenn gleich)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Ausnahmen für Wochentage:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"markiere Kontrollkästchen, um die Stunden für diesen Wochentag festzulegen"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Montag"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Dienstag"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Mittwoch"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Donnerstag"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Freitag"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Samstag"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Sonntag"
@@ -1396,9 +1396,9 @@ msgstr "Nutze auf Multiprozessorsystemen höchstens"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% der Prozessoren (0 für keine Einschränkung)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Nutze höchstens"
@@ -1407,79 +1407,79 @@ msgstr "Nutze höchstens"
msgid "% CPU time"
msgstr "% Prozessor-Zeit"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Allgemeine Einstellungen"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Maximale Download-Rate"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KByte/Sek."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Maximale Upload-Rate"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Übertrage höchstens"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MB"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "pro"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "Tage"
# Vielleicht könnte man hier auch irgendwie Zwischenspeicher einbauen? Das ist aber auch nicht der eigentliche Sinn.
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Mindest Arbeitspuffer"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Versuche genug Arbeitspakete zu erhalten um für diese Anzahl Tage "
"beschäftigt zu sein."
# 80%
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Max. zusätzlicher Arbeitspuffer"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
"Versuche zusätzlich genug Arbeitspakete für diese Anzahl Tage zu erhalten."
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Bild-Dateien nicht überprüfen"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"aktiviere diese Option, wenn die Image-Dateien durch den Internetprovider "
"verändert werden"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Verbindungseinstellungen"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Bestätigen, bevor mit dem Internet verbunden wird."
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1487,11 +1487,11 @@ msgstr ""
"wenn aktiviert, wird ein Abfragedialog eingeblendet, bevor eine "
"Internetverbindung versucht wird"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Verbindung trennen, wenn fertig"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1500,150 +1500,150 @@ msgstr ""
"benötigt wird\n"
"(nur von Bedeutung bei Nutzung von Einwählverbindungen)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Nutzung des Netzwerks erlaubt"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "Anfang der Netzwerknutzung"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "Ende der Netzwerknutzung"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Nutzung der Festplatte"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "der maximal von BOINC benutzte Festplattenplatz (in GByte)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "GByte Festplattenplatz"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Lasse mindestens"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC läßt dieses Minimum an Festplattenplatz frei (in GByte)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "GByte Festplattenplatz frei"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC nutzt höchstens diesen Anteil in % vom gesamten Festplattenplatz"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% des gesamten Festplattenplatzes"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Schreibe auf Festplatte höchstens alle"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "Sekunden"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% der Auslagerungsdatei (des Swap-Speichers)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Nutzung des Speichers"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "%, wenn der Rechner benutzt wird"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "%, wenn der Rechner nicht beschäftigt ist"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Lasse Anwendung im Speicher, wenn sie pausiert"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "wenn aktiviert, verbleiben unterbrochene Arbeitseinheiten im Speicher"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Die Nutzung von Prozessor und Netzwerk anhalten, wenn diese Anwendungen "
"aktiv sind:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Hinzufügen..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Füge eine Anwendung zur dieser Liste hinzu"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Entfernen"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Entferne eine Anwendung aus dieser Liste"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Für weitere Einstellungen, bitte hier schauen "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Ereignisanzeige"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Zeit"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Meldung"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "Zeige nur dieses &Projekt"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "&Alles kopieren"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopiert alle Meldungen in die Zwischenablage."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "au&sgewählte Meldungen kopieren"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1652,7 +1652,7 @@ msgstr ""
"Durch Drücken und Halten der Umschalt- oder Strg-Taste können Sie mehrere "
"Meldungen gleichzeitig markieren."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1661,24 +1661,24 @@ msgstr ""
"Durch Drücken und Halten der Umschalt- oder Strg-Taste können Sie \n"
"mehrere Meldungen gleichzeitig markieren."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "Schli&eßen"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Hilfe für %s bekommen"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Zeige alle &Meldungen"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Zeige Meldungen für alle Projekte."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Zeigt nur die Meldungen für das gewählte Projekt."
@@ -1732,7 +1732,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Diese Einstellung merken und den Dialog nicht wieder anzeigen."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Abbrechen"
@@ -1740,223 +1740,223 @@ msgstr "&Abbrechen"
msgid "Don't show this dialog again."
msgstr "Diesen Dialog nicht wieder anzeigen."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Keine Aufgaben mehr für "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Projekteinstellungen"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Kontomanager-Einstellungen"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Projekt hat keine Anwendungen für "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Die Konfiguration des Clients schließt aus, dass"
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " CPU Arbeitsabruf verzögert für"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " Verzögerungsintervall für CPU Arbeitsabruf"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Projekteigenschaften "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Allgemein"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Master URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Benutzername"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Teamname"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Ressourcenaufteilung"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Scheduleranfrage verzögert für"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Dateidownloads verzögert für"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Dateiuploads verzögert für"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Computer ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Nicht CPU intensiv"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "Ja"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Über das Menü angehalten"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "Nein"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Keine weiteren Aufgaben anfordern"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Laufende Scheduleranfrage"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Trickle-Up Meldung ausstehend"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Rechnerstandort"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "Standard"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Von der Kontoverwaltung hinzugefügt"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Abmelden wenn alle Arbeit erledigt ist"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Beendet"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Punkte"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Benutzer"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Rechner"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Planung"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Planungspriorität"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "Prozessor"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Duration correction factor"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Eigenschaften der Aufgabe "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Anwendung"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Paketname"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Name"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Status"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "erhalten"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Ablaufdatum"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Ressourcen"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Geschätzter Berechnungsaufwand"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Prozessor-Zeit beim letzten Checkpoint"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Prozessorzeit"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "bisherige Laufzeit"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Geschätzte verbleibende Zeit"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Fortschritt"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "benötigter Arbeitsspeicher"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Größe des Arbeitspakets"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Verzeichnis"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Prozess-Nr."
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Lokal: "
@@ -2046,7 +2046,7 @@ msgstr "Bitte leer lassen, falls nicht benötigt."
msgid "User Name:"
msgstr "Benutzername:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Passwort:"
@@ -2105,12 +2105,12 @@ msgstr ""
"Die %s Sprache wurde gewechselt. Bitte starten Sie %s erneut um die Änderung "
"anzuwenden."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - wähle Rechner"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2120,7 +2120,7 @@ msgstr ""
"Computer gestartet.\n"
"Bitte einen Client zum überwachen auswählen."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Rechnername:"
@@ -2323,208 +2323,208 @@ msgstr "Forschung"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Erfahren Sie mehr über die auf World Community Grid gehosteten Projekte"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Starte Client"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Verbindung zum Client wird hergestellt."
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Ermittlung des BOINC-Systemstatus. Bitte etwas Geduld..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "fehlende Anwendung"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
"Bitte installieren Sie die CoRD Anwendung von http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "Batteriebetrieb"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "Computer wird benutzt"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "Benutzergefordert"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "Tageszeit"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU Benchmarks laufen"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "Festplattenplatz benötigt - Einstellungen überprüfen"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "Computer wird nicht benutzt"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "starte"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "eine Anwendung läuft exklusiv"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU ist beschäftigt"
# Gemeint ist eigentlich keine Geschwindigkeit sondern eine Trafficbegrenzung.
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "Maximales Datenübertragungsvolumen überschritten"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "vom Betriebssystem angefordert"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "Ursache unbekannt"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU nicht gefunden, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Neu"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Herunterladen fehlgeschlagen"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Am herunterladen"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (angehalten - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projekt angehalten durch Benutzer"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Angehalten durch Benutzer"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Angehalten- "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU angehalten - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Warten auf Speicher"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Warten auf geteilten Speicher"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Aktiv, hohe Priorität"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Aktiv"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (nicht CPU-intensiv)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Verdrängt"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Zur Ausführung bereit"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Planungspause: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Planungspause)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Warte auf Netzwerkzugriff)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Berechnungsfehler"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Hochladen fehlgeschlagen"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Lädt hoch"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Abgebrochen durch Benutzer"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Abgebrochen durch das Projekt"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Abgebrochen: kein Start vor Stichtag möglich."
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Abgebrochen: Festplattenlimit überschritten"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Abgebrochen: Laufzeitlimit überschritten"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Abgebrochen: Arbeitsspeicherlimit überschritten"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Abgebrochen"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Bestätigt"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Hochgeladen, meldebereit"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Fehler: Ungültiger Status '%d'"
@@ -2581,57 +2581,57 @@ msgstr ""
"Bitte überprüfen Sie die E-Mail-Adresse und das Passwort und versuchen es "
"dann erneut."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "weiterlesen..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Alle"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Wähle ein Projekt"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Um ein Projekt zu wählen, klicke auf dessen Namen oder gib die "
"Projektadresse ein."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategorien:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projekte:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Projektdetails"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Forschungsgebiet:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organisation:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Webseite:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Unterstützte Systeme:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Projektadresse:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2639,7 +2639,7 @@ msgstr ""
"Dieses Projekt scheint keine Aufgaben für Ihren Computertyp zu haben. "
"Wirklich fortsetzen?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Projekt schon vorhanden. Bitte wählen Sie ein anderes Projekt."
@@ -2647,11 +2647,11 @@ msgstr "Projekt schon vorhanden. Bitte wählen Sie ein anderes Projekt."
msgid "Communicating with project."
msgstr "Kommunikation mit dem Server."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Benötigte Dateien wurden auf Server nicht gefunden."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Ein interner Server-Fehler ist aufgetreten."
@@ -2763,7 +2763,7 @@ msgid "I agree to the terms of use."
msgstr "Ich stimme den Nutzungsbedingungen zu."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "Ich stimme den Nutzungsbedingungen nicht zu."
#: UnavailablePage.cpp:183
@@ -2856,7 +2856,7 @@ msgstr "'%s' Enthält keinen zulässigen Rechnernamen."
msgid "'%s' does not contain a valid path."
msgstr "'%s' enhält keine zulässige Pfadangabe."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Befehle"
@@ -2909,7 +2909,7 @@ msgstr "Nachrichten werden abgerufen. Bitte warten..."
msgid "There are no notices at this time."
msgstr "Es sind zur Zeit keine Nachrichten verfügbar."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Nachrichten"
@@ -2927,7 +2927,7 @@ msgstr ""
"eventuell mehr Aufgaben."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3172,135 +3172,135 @@ msgstr "Frei: "
msgid "used by other programs: "
msgstr "Anderweitig belegt: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Benutzer Gesamt"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Benutzer Durchschnitt"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Rechner Gesamt"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Rechner Durchschnitt"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Letztes Update: Vor %.0f Tagen."
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Benutzer Gesamt"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Gesamtpunktzahl des Benutzers anzeigen"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Benutzer Durchschnitt"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Durchschnittliche Punktzahl des Benutzers anzeigen"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Rechner Gesamt"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Gesamtpunktzahl für den Computer anzeigen"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Rechner Durchschnitt"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Durchschnittliche Punktzahl für den Computer anzeigen"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Vorheriges Projekt"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Zeige Grafik für das vorherige Projekt"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Nächstes Projekt >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Grafik für das nächste Projekt anzeigen"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Projektliste ausblenden"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Den ganzen Bereich für Grafiken nutzen"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Ansicht"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Ein Projekt"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Eine Grafik mit dem ausgewählten Projekt anzeigen"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Alle Projekte (separat)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Alle Projekte anzeigen, eine Grafik je Projekt"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Alle Projekte (zusammen)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Eine Grafik mit allen Projekten anzeigen"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Alle Projekte (Summe)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Eine Grafik mit allen Projekten (summiert) anzeigen"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistiken"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Grafiken werden aktualisiert..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Projektliste anzeigen"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Kleineren Bereich für Grafiken nutzen"
@@ -3474,10 +3474,6 @@ msgstr "Verbleibend (geschätzt)"
msgid "Deadline"
msgstr "Ablaufdatum"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Name"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Aufgaben"
@@ -3634,40 +3630,40 @@ msgstr "Wollen Sie wirklich abbrechen?"
msgid "Question"
msgstr "Frage"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Erweiterte &Ansicht...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Die fortgeschrittene Grafikoberfläche anzeigen."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Skin"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Wählen Sie das Aussehen der Benutzeroberfläche."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Standard"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Berechnungen anhalten"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Berechnung fortsetzen"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Öffne ein Fenster um Projekt oder BOINC Nachrichten anzuzeigen"
@@ -3689,118 +3685,123 @@ msgid "Click OK to set preferences."
msgstr "Mit OK die Einstellungen bestätigen."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Mit 'Löschen' die Web-basierten Einstellungen wiederherstellen."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Klicken Sie auf \"Löschen\", um alle unten aufgeführten Web-Einstellungen auf "
+"die Standards zurückzustellen."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
"Weitere Einstellungen stehen unter 'Assistenten' -> 'Einstellungen...' in "
+"der Erweiterten Ansicht."
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "der erweiterten Ansicht zur Verfügung."
-
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Arbeite nur zwischen:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Verbinde mit dem Internet nur zwischen:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Nutze nicht mehr als:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "Festplattenplatz"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "Prozessorleistung"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Arbeiten im Batteriebetrieb?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Arbeiten beginnen nach Leerlauf von:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Alle lokalen Einstellungen löschen und den Dialog schließen."
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Jederzeit"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Immer ausführen)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Wollen Sie wirklich alle lokalen Einstellungen löschen?\n"
@@ -3862,117 +3863,117 @@ msgstr ""
"Sind Sie sicher dass Sie die Aufgabe abbrechen wollen '%s'?\n"
"(Fortscshritt: %.1lf%%, Status: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Sie haben kein Projekt eingetragen. Bitte fügen Sie ein Projekt hinzu."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Nicht Verfügbar"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Aufgaben:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Wähle eine Aufgabe"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Von:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Fortschritt dieser Aufgabe"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Aufgabenbefehle"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Blende ein Menü ein für anwendbare Befehle für diese Aufgabe"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, c-format,
msgid "Application: %s"
msgstr "Anwendung: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Anwendung: Nicht Verfügbar"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Nicht Verfügbar"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Vergangen: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Verbleibend (geschätzt): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Status: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Aktueller Status wird ermittelt."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Lade neue Aufgaben vom Server."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Berechnungen angehalten: Batteriebetrieb."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Berechnungen angehalten: Benutzer ist aktiv."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Berechnungen angehalten: Angehalten durch Benutzer."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Berechnungen angehalten: Zeitbegrenzung."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Berechnungen angehalten: Benchmarks laufen."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Berechnungen angehalten."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Warte auf Kontakt zum Projektserver."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Ermittle den aktuellen Status."
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Keine Aufgaben zu bearbeiten."
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Verbindung mit dem Basisclient nicht möglich."
@@ -4015,6 +4016,25 @@ msgstr "Alle einblenden"
msgid "Quit %s"
msgstr "Beende %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Ich stimme den Nutzungsbedingungen nicht zu."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Mit 'Löschen' die Web-basierten Einstellungen wiederherstellen."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr ""
+#~ "Weitere Einstellungen stehen unter 'Assistenten' -> 'Einstellungen...' in "
+
+#~ msgid "the Advanced View."
+#~ msgstr "der erweiterten Ansicht zur Verfügung."
+
+#~ msgid "Workunit name"
+#~ msgstr "Paketname"
+
+#~ msgid "invalid float"
+#~ msgstr "Ungültige Fließkommazahl"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Zeigt die erweiterte (accessible) grafische Benutzeroberfläche an."
diff --git a/locale/de/BOINC-Project-Generic.po b/locale/de/BOINC-Project-Generic.po
index 2508691..9aa7cc8 100644
--- a/locale/de/BOINC-Project-Generic.po
+++ b/locale/de/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Project (Generic) 6.x\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-16 14:35+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-11 09:02+0000\n"
"Last-Translator: Christian <djangofett at gmx.net>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: de\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1384612558.0\n"
+"X-POOTLE-MTIME: 1389430955.0\n"
# The name of this language in this language
msgid "LANG_NAME_NATIVE"
@@ -198,7 +198,7 @@ msgstr "Erweiterte Suche"
# ########################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Private Nachrichten"
@@ -210,8 +210,8 @@ msgstr "Private Nachrichten"
msgid "Questions and Answers"
msgstr "Fragen und Antworten"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -281,7 +281,7 @@ msgstr "ungelesen"
msgid "Message %1"
msgstr "Nachricht %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "verborgen"
@@ -498,7 +498,7 @@ msgstr "Themen"
# ########################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Beiträge"
@@ -507,7 +507,7 @@ msgstr "Beiträge"
msgid "Views"
msgstr "Ansichten"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Letzter Beitrag"
@@ -545,7 +545,7 @@ msgid "Home"
msgstr "zu Hause"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Arbeit"
@@ -611,9 +611,9 @@ msgid "Created"
msgstr "Erstellt"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -791,7 +791,7 @@ msgstr "Letzter Kontakt"
msgid "Computer info"
msgstr "Informationen zum Computer"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -800,9 +800,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Punktedurchschnitt"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -892,8 +892,8 @@ msgstr "Nur aktive Computer der letzten 30 Tage"
msgid "Computer ID"
msgstr "Computer ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -929,7 +929,7 @@ msgstr "Posteingang"
msgid "Write"
msgstr "Schreiben"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Private Nachricht versenden"
@@ -1705,7 +1705,7 @@ msgstr "Meldezeit<br />oder Ablaufdatum"
msgid "explain"
msgstr "Erklärung"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1799,9 +1799,9 @@ msgstr "Schlagwörter"
msgid "Find teams with these words in their names or descriptions"
msgstr "Findet Teams mit diesen Begriffen im Namen oder der Beschreibung."
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1809,7 +1809,7 @@ msgstr "Findet Teams mit diesen Begriffen im Namen oder der Beschreibung."
msgid "Country"
msgstr "Land"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Typ des Teams"
@@ -1837,8 +1837,8 @@ msgstr "Von Ihnen angefordert"
msgid "founder response deadline is %1"
msgstr "Die Rückmeldezeit des Gründers beträgt %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Keines"
@@ -1862,27 +1862,27 @@ msgstr "Beschreibung"
msgid "Web site"
msgstr "Internetseite"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Projektübergreifende Statistiken"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Typ"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Diskussionsforen"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Themen"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Diesem Team beitreten"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1890,79 +1890,79 @@ msgstr ""
"Hinweis: Wenn Sie E-Mails in den Projekteinstellungen erlauben, kann der "
"Gründer des Teams Ihre E-Mail-Adresse einsehen."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Akzeptiert keine neuen Mitglieder"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Wechsel des Gründerstatus beantragt"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Rückmeldung bis %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Teamgründer wechseln"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Mitglieder"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Gründer"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Team-Admins"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Neue Mitglieder (letzte 24h)"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Mitglieder insgesamt"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "Anzeigen"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "aktive Mitglieder"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Mitglieder mit Punkten"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Admin"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Vorherige %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Nächste %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Kein Team gefunden."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Diese Aktion benötigt den Gründerstatus."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Diese Aktion benötigt die Team-Admin Berechtigung."
@@ -1975,7 +1975,7 @@ msgstr ""
"automatisch wieder überschrieben. Bearbeite das %1BOINC-weite Team%2 "
"stattdessen."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1984,47 +1984,47 @@ msgstr ""
"Projekteinstellungen (Ressourcenverteilung, Grafikeinstellungen) für jeden "
"sichtbar."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Teamname (Textversion)"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Keine HTML-Tags möglich."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Teamname (HTML-Version)"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Sie können nur %1bestimmte HTML-Tags%2 verwenden."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Wenn Sie HTML nicht kennen, lassen Sie dieses Feld frei."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL der Team-Internetseite, wenn vorhanden"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "ohne \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Diese URL wird als Link zur Team-Internetseite benutzt."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Beschreibung des Teams"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Neue Mitglieder akzeptieren?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Benutzerprofil"
@@ -2057,7 +2057,7 @@ msgid "Computers on this account"
msgstr "Computer, die zu diesem Konto gehören"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Anzeigen"
@@ -2074,8 +2074,8 @@ msgstr "Projektübergreifende Statistiken"
msgid "Account"
msgstr "Konto"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Team"
@@ -2104,7 +2104,7 @@ msgstr "Kontoinformationen"
msgid "Email address"
msgstr "E-Mail-Adresse"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2112,7 +2112,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postleitzahl"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 Mitglied seit"
@@ -2132,7 +2132,7 @@ msgstr "Passwort"
msgid "other account info"
msgstr "Andere Kontoinformationen"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Benutzer ID"
@@ -2178,96 +2178,96 @@ msgstr "%1 Einstellungen"
msgid "Community"
msgstr "Community"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Löschen"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Erstellen"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 Beiträge"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Benachrichtigungen"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Team verlassen"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Verwalten"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(ausstehender Gründerwechsel)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Mitglied im Team"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "Team finden"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Gründer aber nicht Mitglied von"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Freunde finden"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Freunde"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Computer"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Spender"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Diese Person ist ein Freund"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Freundschaft aufheben"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Anfrage läuft"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "als Freund hinzufügen"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "Der Benutzername kann keine Leerzeichen am Anfang oder Ende beinhalten"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "Der Benutzername darf nicht leer sein."
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "Der Benutzername darf keine HTML-Tags beinhalten."
@@ -2354,7 +2354,7 @@ msgstr ""
"Es ist momentan nicht möglich die Datenbank auszuwählen - Bitte versuchen "
"Sie es später noch einmal"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Auf diesem Computer angemeldet bleiben"
@@ -2570,7 +2570,7 @@ msgstr "ein Team erstellen oder beitreten"
msgid "User of the day"
msgstr "Benutzer des Tages"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Serverstatus"
@@ -3678,6 +3678,8 @@ msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
+"Das Projekt konnte keine E-Mail versenden - bitte informieren Sie die "
+"Administratoren"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -5770,137 +5772,137 @@ msgstr "Nicht gestartet"
msgid "Disabled"
msgstr "Deaktiviert"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Projektstatus"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Softwareversion des Servers: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programm"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Rechner"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "Datenbankbasierte Webseiten"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "Upload/Download Server"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "Scheduler"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Gestartet:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Programm läuft normal"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Nicht gestartet:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programm produzierte Fehler oder das Projekt ist gestoppt"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Deaktiviert:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Programm ist deaktiviert"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Status der Berechnung"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Der Datenbankserver ist nicht verfügbar."
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Aufgaben bereit zum versenden"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Aufgaben in Arbeit"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Arbeitspakete warten auf Überprüfung"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Arbeitspakete warten auf Aufnahme"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Arbeitspakete bereit zum Löschen"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Aufgaben bereit zum Löschen"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Rückstand des Transitioners (Stunden)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Benutzer"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "mit zuletzt verdienten Punkten"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "mit Punkten"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registriert in den letzten 24h"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "aktuelle GigaFLOPs"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Aufgaben pro Anwendung"
# ########################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "Anwendung"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "ungesendet"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "in Bearbeitung"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "Durchschnittliche Laufzeit der letzten 100 Berechnungen in h (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "Benutzer in den letzten 24h"
@@ -6174,6 +6176,10 @@ msgstr "Neuer Gründer?"
msgid "Change founder"
msgstr "Gründer wechseln"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Es gibt keinen Benutzer der das Team übernehmen kann."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Der Name des Teams darf nicht leer sein."
diff --git a/locale/de/BOINC-Setup.mo b/locale/de/BOINC-Setup.mo
index fb9c1fa..26f300e 100644
Binary files a/locale/de/BOINC-Setup.mo and b/locale/de/BOINC-Setup.mo differ
diff --git a/locale/de/BOINC-Setup.po b/locale/de/BOINC-Setup.po
index 4497925..301ec47 100644
--- a/locale/de/BOINC-Setup.po
+++ b/locale/de/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-11-23 08:23+0000\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-02 19:39+0000\n"
"Last-Translator: Christian <djangofett at gmx.net>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: de\n"
@@ -19,7 +19,7 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1385195000.0\n"
+"X-POOTLE-MTIME: 1391369982.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
@@ -29,11 +29,11 @@ msgstr ""
"Entschuldigung, diese Version von %s benötigt die Systemversion 10.5 oder "
"höher."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Ja"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Nein"
@@ -64,15 +64,15 @@ msgstr ""
"Möchten Sie %s als Bildschirmschoner für alle %s Benutzer dieses Mac "
"festlegen?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "Bestätigen"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Berechtigungsfehler nach Neustart"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -80,7 +80,7 @@ msgstr ""
"Das Entfernen dauert eventuell ein paar Minuten.\n"
"Bitte warten Sie."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -92,21 +92,29 @@ msgstr ""
"Diese Aktion wird alle ausführbaren Dateien aber keine Datendateien von %s "
"entfernen."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Abgebrochen: %s wurde nicht verändert."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Ein Fehler ist aufgetreten: Fehlercode %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "Benutzername"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"Möchten Sie VirtualBox ebenfalls von Ihrem Computer entfernen?\n"
+"(VirtualBox wurde mit BOINC installiert)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -125,7 +133,7 @@ msgstr ""
"und für jeden Benutzer die Datei\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -136,11 +144,11 @@ msgstr ""
"zu entfernen.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Abbrechen"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Weiter..."
diff --git a/locale/de/BOINC-Web.mo b/locale/de/BOINC-Web.mo
index 3141703..7854813 100644
Binary files a/locale/de/BOINC-Web.mo and b/locale/de/BOINC-Web.mo differ
diff --git a/locale/de/BOINC-Web.po b/locale/de/BOINC-Web.po
index 9f31a6c..d3193e9 100644
--- a/locale/de/BOINC-Web.po
+++ b/locale/de/BOINC-Web.po
@@ -3,8 +3,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-11-13 20:24+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-04-06 14:05+0000\n"
"Last-Translator: Christian <djangofett at gmx.net>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: de\n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1384374259.0\n"
+"X-POOTLE-MTIME: 1396793112.0\n"
#: docutil.php:21
msgid "Search"
@@ -34,7 +34,7 @@ msgid ""
"We recommend that you also install VirtualBox, so your computer can work on "
"science projects that require it."
msgstr ""
-"Wir empfehlen die Installation von VirtualBox, damit kann Ihr Rechner auch "
+"Wir empfehlen die Installation von VirtualBox. Damit kann Ihr Rechner auch "
"an Projekten teilnehmen die dies erfordern."
#: download.php:41
@@ -82,8 +82,8 @@ msgid ""
"After installing BOINC on your computer, you can connect it to as many of "
"these projects as you like."
msgstr ""
-"Nachdem Sie BOINC auf Ihrem Computer installiert haben, können Sie es zu so "
-"vielen Projekten hinzufügen wie Sie wünschen."
+"Nachdem Sie BOINC auf Ihrem Computer installiert haben, können Sie so viele "
+"Projekte hinzufügen wie Sie wünschen."
#: download.php:127
msgid ""
@@ -98,7 +98,7 @@ msgid ""
"We recommend that you download BOINC from the Google Play Store or Amazon "
"Appstore, not from here."
msgstr ""
-"Wir empfehlen BOINC über den Google Play Store oder Amazon Appstore zu "
+"Wir empfehlen, BOINC über den Google Play Store oder Amazon Appstore zu "
"installieren und nicht von hier."
#: download.php:167
@@ -462,16 +462,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "kognitive Wissenschaft und künstliche Intelligenz"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Privat"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Künstliche Intelligenz"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -483,19 +483,19 @@ msgstr ""
"Verfahren, Wortklassen-Datenbanken und Wortklassen-Tagging verwendet, um "
"menschliches Konversationsverhaltenzu emulieren."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologie und Medizin"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Universität Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Antimalaria Medikamentenentwicklung"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -509,15 +509,15 @@ msgstr ""
"Angriffspunkte identifiziert werden. Ziel des FightMalaria at Home Projekts ist "
"es, diese neuen Angriffspunkte zu identifizieren."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Universität Karlsruhe (Deutschland)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Vorhersage von Proteinstrukturen"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -532,15 +532,15 @@ msgstr ""
"-Agglomeration sowie um neue Medikamente auf Basis der dreidimensionalen "
"Struktur biologisch bedeutsamer Proteinen zu entwickeln."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Universität von Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Untersuchen der Protein-Ligand-Interaktionen"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -552,15 +552,15 @@ msgstr ""
"von Protein-Ligand-Interaktionen und strebt in diesem Zuge Einblicke an, "
"die der Entwicklung neuer Arzneimittel dienen können."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Barcelona Biomedical Research Park (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Molekularsimulationen von Proteinen"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -573,15 +573,15 @@ msgstr ""
"Rolle in der Bioinformatik und der biomedizinischen Forschung spielen "
"werden."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Genetische Bindungsanalyse"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -591,17 +591,17 @@ msgstr ""
"provozierende Gene zu finden, die manche Arten von Diabetes, hohen "
"Blutdruck, Krebs, Schizophrenie und viele andere Krankheiten, auslösen."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
"University of Maryland, Zentrum für Bioinformatik und Rechenbetonte Biologie"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Biowissenschaftliche Forschung"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -613,15 +613,15 @@ msgstr ""
"Bakterien-, Plasmid-, und Viren Protein Sequenzen und Biologische Vielfalt "
"in Naturschutzgebieten, studieren."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Schweizer Tropeninstitut"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologie"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -641,15 +641,15 @@ msgstr ""
"zu den biologischen und sozialen Faktoren welche die Verteilung der "
"Krankheit beeinflussen."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Universität von Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologie"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -666,11 +666,11 @@ msgstr ""
"helfen, unsere Anstrengungen bei der Entwicklung neuer Proteine, um "
"Krankheiten wie HIV, Malaria, Krebs und Alzheimer zu bekämpfen"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Universität Wien"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -680,19 +680,19 @@ msgstr ""
"Datenbank der Ergebnisdaten, welche eine wichtige Rolle in vielen "
"Forschungsprojekten der Bioinformatik spielen, zur Verfügung."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Geowissenschaften"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Universität Oxford"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Klimastudien"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -713,16 +713,25 @@ msgstr ""
"Klima vielleicht im nächsten Jahrhundert unter einer weiten Bandbreite von "
"verschiedenen Szenarien verändern wird."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomie, Physik und Chemie"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Naturwissenschaft"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Maschinenbau"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr "Im Moment berrechnen wir das optimale Design der 52 bar Bindung."
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomie"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -739,15 +748,15 @@ msgstr ""
"Energieverteilung (SED) über einen verteilten Computer Basierendes Netzwerk "
"messen."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Universität von Texas in Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Chemie"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -771,11 +780,11 @@ msgstr ""
"Langzeit-Dynamik von atomaren Systemen."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Universität von Illinois in Urbana (bei Champaign)"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -786,11 +795,11 @@ msgstr ""
"welche mit den verfügbaren astronomischen partikelphysischen Daten "
"übereinstimmt."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "politechnisches Institut von Rensselaer"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -800,11 +809,11 @@ msgstr ""
"der Milchstraße mit Hilfe von Daten, die man vom Sloan Digital Sky Survey "
"erhalten hat, herzustellen."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Leiden Universität, Niederlande"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -821,15 +830,15 @@ msgstr ""
"Gesetz des idealen Gases durch Simulationen mit Hilfe des Rechennetzes zu "
"beweisen."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Universität von Wisconsin in Milwaukee, Max-Planck-Institut"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrophysik"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -843,15 +852,15 @@ msgstr ""
"2005\" Projekt, welches von der American Physical Society (APS) und von "
"verschiedenen internationalen Organisationen unterstützt wird."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Europäische Organisation für Nuklearforschung)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Physik"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -865,7 +874,7 @@ msgstr ""
"um das Partikelverhalten zu untersuchen. LHC at home führt Simulationen aus, um "
"die Bauform des LHC und seine Detektoren zu verbessern."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -876,15 +885,15 @@ msgstr ""
"freiwilligen Unterstützern. Sie müssen VirtualBox auf Ihrem Computer "
"installiert haben um teilzunehmen."
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Universität von Kalifornien in Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrophysik, Astrobiologie"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -899,15 +908,15 @@ msgstr ""
"für solche Strahlung bekannt, daher wäre sie der Beweis für außerirdische "
"Technologie."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Fachhochschule Bielefeld"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Chemietechnik und Nanotechnologie"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -919,19 +928,19 @@ msgstr ""
"entwickeln, die Anwendung in der Medizin( z.B. in der lokalen Therapierung "
"von Tumoren durch Chemotherapie) und Biotechnologie."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Mehrere Anwendungen"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Chinesische Akademie der Wissenschaften"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Physik, Biochemie und weitere"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -941,11 +950,11 @@ msgstr ""
"Wissenschaftler in China sich die Technologie der freiwilligen Mithilfe und "
"Datenverarbeitung für Ihre Forschung anzueignen."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Mathematik, Physik, Evolution"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -953,15 +962,15 @@ msgstr ""
"Yoyo at home ist ein Adapter zwischen BOINC und einigen existierenden "
"verteiltes Rechnen Projekten: ECM, Muon, Evolution at home und distributed.net."
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI - Labor für Parallele und Verteilte Systeme (Ungarn)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Europäische Forschungsprojekte"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -974,27 +983,27 @@ msgstr ""
"wissenschaftlichen Projekte, die von dem Projekt abgedeckt werden beinhalten "
"Mathematik, Physik, Biologie, u.a.."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Spanische Universitäten und Forschungszentren"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Verschiedene spanische Forschungsprojekte"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Forschung im Bereich der Physik, Materialforschung und Biomedizin"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Öffentlichkeitsarbeit"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Medizin, Ökologie und andere Philanthropische Forschungen"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -1007,27 +1016,27 @@ msgstr ""
"tropische und vernachlässigte Krankheiten, Solarenergie, sauberes Wasser und "
"vieles mehr."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Mathematik, Berechnungen und Spiele"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Informatik"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Mathematik, Physik, künstliche Intelligenz"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Simulation von Quanteneffekten, Goldbach's Vermutung"
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Kryptographie"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1036,25 +1045,25 @@ msgstr ""
"wurden 1942 im Nordatlantik abgefangen und es wird angenommen, dass sie noch "
"nicht geknackt wurden."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Mathematik"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
"Untersuchung des Collatz Problems, ein ungelöstes Mathematisches Problem"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Universität von California in Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Faktorisierung großer natürlicher Zahlen"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1070,7 +1079,7 @@ msgstr ""
"oder 35= 5*7. NFS at Home setzt diese Erfahrung fort, lediglich mit ganzen "
"Zahlen welche hunderte von Stellen lang sind."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1078,11 +1087,11 @@ msgstr ""
"Technische Gediminas-Universität Vilnius und der Technischen Universität "
"Kaunas in Litauen"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Software tests"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1095,11 +1104,11 @@ msgstr ""
"Derzeitige Anwendungen beinhalten die Erforschung von Monte-Carlo-basierten "
"Softwaretests. "
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Mathematisches Institut der Universität Leiden / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1118,7 +1127,7 @@ msgstr ""
"Sollte sie bewiesen werden, können viele andere Probleme dadurch gelöst "
"werden."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1126,11 +1135,11 @@ msgstr ""
"Primegrid bietet mehrere Projekte für die unterschiedlichen Formen von sehr "
"großen Primzahlen, inklusive der Suche nach der größten bekannten Primzahl."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Hochschule RheinMain Universität der Angewandten Wissenschaften"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1138,7 +1147,7 @@ msgstr ""
"Suche nach Gegenbeispielen für zwei Vermutungen die sich auf die "
"Identifizierung von Primzahlen beziehen"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1155,6 +1164,10 @@ msgstr "Kommentieren"
msgid "News is available as an %sRSS feed%s"
msgstr "Nachrichten auch als %sRSS feed%s erhältlich"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomie, Physik und Chemie"
+
#~ msgid "Download BOINC + Virtualbox"
#~ msgstr "BOINC und VirtualBox herunterladen"
diff --git a/locale/el/BOINC-Android.po b/locale/el/BOINC-Android.po
index 6c7bc16..4059701 100644
--- a/locale/el/BOINC-Android.po
+++ b/locale/el/BOINC-Android.po
@@ -2,53 +2,54 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2013-10-21 15:32+0000\n"
+"Last-Translator: chris g <chr1407 at hotmail.com>\n"
"Language-Team: el <LL at li.org>\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1382369576.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Es wird geladen. Bitte warten…"
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Projekt auswählen:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Projekt mittels URL hinzufügen"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Projekt-URL eingeben:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Projekt hinzufügen"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Bitte die Projekt-URL eingeben"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
@@ -56,90 +57,92 @@ msgstr ""
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "Keine Internetverbindung"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "kontaktiere Projektserver…"
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Projektlogo."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Bereich:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Fachbereich:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Beschreibung:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Betreiber:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Webseite:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
+msgid "This project supports Android devices"
msgstr ""
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
+msgid "This project does not support Android devices"
msgstr ""
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Nutzungsbedingungen für"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Wenn Sie bei diesem Projekt ein Konto anlegen, akzeptieren Sie die oben "
+"gezeigten Nutzungsbedingungen."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Mit bestehendem Konto anmelden"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "E-Mail:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Name:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Passwort:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Neu bei"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Ein Konto erstellen um teilzunehmen:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Die Projektwebseite besuchen um ein Konto zu erstellen:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Das Projekt erlaubt zur Zeit keine neuen Konten!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
@@ -151,48 +154,48 @@ msgstr ""
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Passwort vergessen"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Verbindung zum Projekt fehlgeschlagen!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Verbunden"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Konto-Registrierung für"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Projekt:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "E-Mail:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Name:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Team:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Passwort:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Bestätigung:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Erstellen"
#. account manager
msgctxt "attachproject_acctmgr_header"
@@ -209,11 +212,11 @@ msgstr ""
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Passwort:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Bestätigung:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
@@ -222,19 +225,19 @@ msgstr ""
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "Benutzer nicht gefunden"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Passwort ist zu kurz"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Verbindungsfehler"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Passwörter stimmen nicht überein"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
@@ -242,27 +245,27 @@ msgstr ""
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Bitte geben Sie Ihre E-Mail-Adresse ein"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Bitte Passwort eingeben"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Bitte einen Benutzernamen eingeben"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "fehlgeschlagen"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Benutzername nicht erlaubt"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "E-Mail-Adresse ist bereits registriert"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
@@ -270,15 +273,15 @@ msgstr ""
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "E-Mail nicht akzeptiert"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Passwort zu kurz"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "Die Kontoerstellung ist bei diesem Projekt deaktiviert"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
@@ -287,23 +290,23 @@ msgstr ""
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Zurück"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Beenden"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Erfolgreich"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Fehlgeschlagen"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "…"
msgctxt "attachproject_working_finished"
msgid "."
@@ -311,15 +314,15 @@ msgstr ""
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Verbinden"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Konto überprüfen"
msgctxt "attachproject_working_register"
msgid "Register account"
@@ -327,7 +330,7 @@ msgstr ""
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Anmelden"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
@@ -339,43 +342,45 @@ msgstr ""
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
+msgid "Tab here to choose a project."
msgstr ""
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Whooops"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"…das sollte eigentlich nicht passieren!\n"
+"Auf das Symbol klicken um es erneut zu probieren."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "BOINC Logo"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Status"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projekte"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Aufgaben"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Übertragungen"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Einstellungen"
msgctxt "tab_notices"
msgid "Notices"
@@ -383,32 +388,32 @@ msgstr ""
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigation"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Berechnung läuft"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Vielen Dank für Ihre Beteiligung."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Nichts zu tun"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Warten auf Aufgaben…"
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
@@ -416,36 +421,36 @@ msgstr ""
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "Startet…"
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Wählen Sie ein Projekt zur Teilnahme aus."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Beenden…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Leistungsüberprüfung…"
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "Projektbild"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "lese Einstellungen…"
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Speichern"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Neuen Wert eingeben:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
@@ -453,77 +458,61 @@ msgstr ""
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Allgemeines"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Netzwerk"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Energie"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "Prozessor"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Speicherplatz"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Fehlerdiagnose"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Fehlerdiagnose"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
-
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
-
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
+msgstr "Zeige erweiterte Einstellungen und Steuerungen…"
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
msgstr ""
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Min. Akku-Ladestand"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC hält die Berechnung an, wenn der Akkuladestand unter den gewählten "
+"Wert sinkt."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Max. Akkutemperatur"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC hält die Berechnung an, sobald diese Temperatur überschritten wird. Es "
+"wird nicht empfohlen diesen Wert zu ändern."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
@@ -531,11 +520,11 @@ msgstr ""
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr ""
+msgstr "Wie viel Prozent Ihres Speichers darf BOINC maximal verwenden?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "min. freizuhaltender Speicher"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
@@ -543,35 +532,35 @@ msgstr ""
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "tägliche Transferbegrenzung"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Begrenzt die Datenmenge welche täglich durch BOINC übertragen wird."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Übertrage Aufgaben nur per WLAN"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Automatisch starten"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Zeige Nachrichten wenn angehalten"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Benutzte Prozessoren"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Limitiert die Anzahl der Prozessoren welche BOINC nutzen darf."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Anhalten wenn Prozessornutzung über"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
@@ -579,7 +568,7 @@ msgstr ""
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "Prozessorbegrenzung"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
@@ -587,15 +576,15 @@ msgstr ""
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "Arbeitsspeicherlimit"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Limitiert den Arbeitsspeicher welcher für Aufgaben zur Verfügung steht."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC Client Protokolleinstellungen"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
@@ -607,20 +596,20 @@ msgstr ""
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
@@ -629,61 +618,61 @@ msgstr ""
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Projekt hinzufügen"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Projektsymbol"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Punkte:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(auf diesem Gerät)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(gesamt)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Angehalten durch Benutzer"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Keine neuen Arbeitspakete"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Projekt wurde beendet - kann jetzt entfernt werden"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "wird entfernt wenn Aufgaben erledigt"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Serveranfrage ausstehend"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Serveranfrage läuft"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Trickle-Up Nachricht ausstehend"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "nächste Kommunikation in:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Projektbefehle:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
@@ -691,31 +680,31 @@ msgstr ""
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Aktualisieren"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Anhalten"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Fortsetzen"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Keine neuen Aufgaben"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Neue Aufgaben zulassen"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Zurücksetzen"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
@@ -732,23 +721,23 @@ msgstr ""
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Projekt entfernen?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Wollen Sie wirklich zurücksetzen"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "von BOINC?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Projekt zurücksetzen"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
@@ -756,7 +745,7 @@ msgstr ""
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Zurücksetzen"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
@@ -773,88 +762,88 @@ msgstr ""
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Aufgabenname:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Abgelaufene Zeit:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(angehalten)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Ablaufdatum:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "neu"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "herunterladen läuft"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "herunterladen abgeschlossen"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "Berechnungsfehler"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "hochladen"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "hochladen abgeschlossen"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "abgebrochen"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "hochladen fehlgeschlagen"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "bereit"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "wird ausgeführt"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "wird angehalten"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "wird angehalten"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "Projekt angehalten"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "meldebereit"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Aufgabe abbrechen?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
@@ -862,48 +851,48 @@ msgstr ""
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Bestätigungsdialog"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Lade Übertragungen…"
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Hochladen"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Herunterladen"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "erneut versuchen in"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "fehlgeschlagen"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "aktiv"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "ausstehend"
msgctxt "trans_projectbackoff"
msgid "project backoff"
@@ -911,7 +900,7 @@ msgstr ""
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Datei:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
@@ -919,7 +908,7 @@ msgstr ""
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Übertragung abbrechen?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
@@ -927,7 +916,7 @@ msgstr ""
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
#. notices tab strings
msgctxt "notices_loading"
@@ -937,36 +926,36 @@ msgstr ""
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Lade Protokollnachrichten…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Client Meldungen"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "GUI Meldungen"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Protokoll in die Zwischenablage kopiert."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Ereignisprotokoll für BOINC auf Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Berechnung angehalten."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "Schließen Sie Ihr Gerät an eine Stromquelle an um weiterzurechnen."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "Benutzer ist aktiv."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
@@ -974,11 +963,11 @@ msgstr ""
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC ermittelt die Leistungsfähigkeit ihres Gerätes…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Kein Speicherplatz mehr verfügbar."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
@@ -986,150 +975,152 @@ msgstr ""
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Keine Benutzeraktivität."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Startverzögerung"
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Eine exklusive Anwendung läuft."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Ihr Gerät ist mit anderen Apps ausgelastet."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "Netzwerkübertragungslimit erreicht."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Gestoppt von Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Nicht per WLAN verbunden."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
msgstr ""
+"Der Akku muss geladen werden bevor die Berechnung fortgesetzt werden kann."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Berechnung wird fortgesetzt wenn der Ladezustand erreicht"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "aktuell"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Warten bis der Akku abgekühlt ist"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Berechnung wird fortgesetzt…"
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "manuell."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Vom Nutzer gefordert"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Um Arbeit zu holen"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Um Aufgaben abzuliefern"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Um Trickle-Up Nachricht zu senden"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Angefordert vom Kontomanager"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Projektinitialisierung"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Vom Projekt angefordert"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Unbekannter Grund"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Neu laden"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Als E-Mail versenden"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "In Zwischenablage kopieren"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Statusprotokoll"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "BOINC beenden"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Anhalten"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Fortsetzen"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "Über"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Hilfe"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Zurück"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "Über"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Version"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "Berkeley Open Infrastructure for Network Computing"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-
+"© 2003–2013 Universität von Kalifornien, Berkeley.\n"
+"Alle Rechte vorbehalten."
diff --git a/locale/el/BOINC-Manager.mo b/locale/el/BOINC-Manager.mo
index c5ef3ab..65a62bc 100644
Binary files a/locale/el/BOINC-Manager.mo and b/locale/el/BOINC-Manager.mo differ
diff --git a/locale/el/BOINC-Manager.po b/locale/el/BOINC-Manager.po
index cb7e3b5..aa24eba 100644
--- a/locale/el/BOINC-Manager.po
+++ b/locale/el/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 4.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-10-21 15:23+0000\n"
"Last-Translator: chris g <chr1407 at hotmail.com>\n"
"Language-Team: BOINC Development Team <rwalton at ssl.berkeley.edu>\n"
@@ -217,347 +217,347 @@ msgstr "Συνδεδεμένος"
msgid "Disconnected"
msgstr "Αποσυνδεδεμένος"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Κλείσιμο του παραθύρου %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Κλείσιμο Παράθυρου"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Έξοδος %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Ανακοινώσεις\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Εμφάνιση ανακοινώσεων"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Προγράμματα\tCtrl+Shift+Π"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Εμφάνιση έργων"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Εργασίες\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Εμφάνιση εργασιών"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Μετα&φορές\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Εμφάνιση μεταφορών"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Στατιστικά\tCtrl+Shift+Σ"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Εμφάνιση στατιστικών"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Χρήση &δίσκου\tCtrl+Shift+Δ"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Εμφάνιση χρήσης δίσκου"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Απλή &Εμφάνιση...\tCtrl+Shift+Ε"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Εμφάνιση απλού γραφικού περιβάλλοντος. "
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Προσθήκη έργου ή διαχειριστή λογαριασμού..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Προσφέρετε εθελοντικό έργο για οποιοδήποτε απο τα 30+ ή και για όλα τα έργα "
"σε πολλούς επιστημονικούς τομείς "
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Συγχρονισμός με %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Παραλαβή τρεχόντων ρυθμίσεων από το %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Προσθήκη έργου..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Προσθήκη ενός έργου"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "Π&αύση χρήσης του %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr ""
"Αφαίρεση αυτού του υπολογιστή απο τον έλεγχο του διαχειριστή λογαριασμών."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Επιλογές..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Διαμόρφωση επιλογών προβολής και ρυθμίσεων proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Προτιμήσεις επεξεργασίας..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Διαμόρφωση προτιμήσεων επεξεργασίας"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Διαρκής εκτέλεση"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Εκτέλεση &ανεξαρτήτως των προτιμήσεων"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Εκτέλεση βάσει &προτιμήσεων"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Εκτέλεση σύμφωνα με τις προτιμήσεις σας"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "Προσωρινή παύση"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Παύση ανεξαρτήτως των προτιμήσεων"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Συνεχής χρήση της μονάδας επεξεργασίας γραφικών"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr ""
"Εκτέλεση εργασιών για τη μονάδα επεξεργασίας γραφικών ανεξαρτήτως των "
"προτιμήσεων"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Χρήση της μονάδα επεξεργασίας γραφικών βάση των προτιμήσεων"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr ""
"Χρήση εργασιών για τη μονάδα επεξεργασίας γραφικών σύμφωνα με τις "
"προτιμήσεις σας"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Παύση της μονάδας επεξεργασίας γραφικών"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Παύση της μονάδας επεξεργασίας γραφικών ανεξαρτήτως των προτιμήσεων"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Συνεχής πρόβαση στο δίκτυο"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Σύνδεση στο δίκτυο &ανεξαρτήτως των προτιμήσεων"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Πρόσβαση στο δίκτυο βάση προτιμήσεων"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Σύνδεση στο δίκτυο σύμφωνα με τις προτιμήσεις"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Παύση πρόσβασης στο δίκτυο"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Να σταματήσει η χρήση του δικτύου απο το BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Σύνδεση σε κάποιον άλλον υπολογιστή εκτελόντας %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Επιλογή Υπολογιστή..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Κλείσιμο συνδεδεμένου προογράμματος..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Κλείσιμο του τρέχοντος συνδεδεμένου προγράμματος"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Εκτέλεση &μετρήσεων κεντρικής μονάδας επεξεργασίας"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Εκτέλεση μετρήσεων υπολογιστικής ισχύως επεξεργαστή για το BOINC"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Επικοινωνία με το δίκτυο"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Εκτέλεση επικοινωνιών με το δίκτυο που εκκρεμούν"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "Άνοιγμα αρχείων διαμόρφωσης"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Άνοιγμα πληροφοριών διαμόρφωσης απο τα αρχεία cc_config.xml και "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Διαβάστε το αρχείο προτιμήσεων"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Άνοιγμα των προτιμήσεων από το αρχείο global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Εκτέλεση ενός αντίτυπου του %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Εκτέλεση ενός %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Ημερολόγιο γεγονότων...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Εμφάνιση διαγνωστικών μηνυμάτων."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s& βοήθεια"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Έμφάνιση πληροφοριών για%s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&Βοήθεια για το %s "
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Προβολή πληροφοριών σχετικά με το %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Προβολή πληροφοριών για το BOINC και το %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Σχετικά με το %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Πληροφορίες άδειας χρήσης και copyright."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Αρχείο"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Προβολή"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Εργαλεία"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Δραστηριότητα"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Για προχωρημένους"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Βοήθεια"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Παύση χρήσης του %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -572,12 +572,12 @@ msgstr ""
"\n"
"Θέλετε όντως να σταματήσετε να χρησιμοποιείτε το %s;"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Κλείσιμο του τρέχοντος προγράμματος..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -586,27 +586,27 @@ msgstr ""
"%s θα κλείσει το τρέχον πρόγραμμα\n"
"και θα σας παρακινήσει για να συνδεθείτε σε άλλο πάροχο."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s προσέθεσε επιτυχώς το %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Σύνδεση στο %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Συνδέθηκε στο %s (%s)"
@@ -645,26 +645,26 @@ msgstr ""
"Παρακαλούμε επισκεφθείτε την ιστοσελίδα του προγράμματος και ακολουθήστε τις "
"οδηγίες εκεί."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Γίνεται επικοινωνία με το πρόγραμμα του BOINC. Παρακαλώ περιμένετε..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Έξοδος %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "Έ&ξοδος %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Επικοινωνία"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Ακύρωση"
@@ -828,7 +828,7 @@ msgstr "%s αποσυνδέθηκε επιτυχώς από το διαδίκτ
msgid "%s failed to disconnected from the Internet."
msgstr "%s απέτυχε να αποσυνδεθεί από το διαδίκτυο."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
#, fuzzy, c-format
msgid ""
@@ -851,7 +851,7 @@ msgstr ""
"boinc\"\n"
"λίστα χρηστών."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -861,16 +861,16 @@ msgstr ""
"παρακαλώ επαναγκαταστείστε το %s.\n"
"(Κωδικός σφάλματος %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr "στο"
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -878,68 +878,68 @@ msgstr ""
"Χρειάζεται να γίνει επανεκκίνηση ώστε το BOINC να τρέξει σωστά.\n"
"Παρακαλώ επανακκινείστε τον υπολογιστή σας και δοκιμάστε ξανά."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Διαχειριστής του BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Ο διαχειριστής του BOINC ξεκίνησε αυτόματα με το λειτουργικό σύστημα"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Εκίννηση του BOINC ούτως ώστε μόνο το εικονίδιο στη μπάρα να είναι ορατό"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Διεύθυνση που περιέχει το εκτελέσιμο πρόγραμμα του BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "διεύθυνση δεδομένων του BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Όνομα παρόχου ή διεύθυνση IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Αριθμός θύρας GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Κωδικός"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Εκκίνηση του Boinc με αυτές τις προαιρετικές ρυθμίσεις"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "Απενεργοποιήστε τις ασφάλειες και τα δικαιώματα του χρήστη"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr ""
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Αυτόματη Αναγνώριση)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Άγνωστο)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Καθορισμός από το Χρήστη)"
@@ -966,7 +966,7 @@ msgid "E&xit"
msgstr "Έ%ξοδος"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Συνέχεια"
@@ -1126,64 +1126,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "Εντάξει"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "Εσφαλμένος χρόνος, η μορφή είναι ΩΩ:ΛΛ"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "εσφαλμένο χρονικό διάστημα, η μορφή είναι ΩΩ:ΛΛ-ΩΩ:ΛΛ"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "εντοπίστηκε εσφαλμένη εισαγμένη τιμή"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Σφάλμα επικύρωσης"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Εφαρμογές για να προσθέσετε"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' δεν είναι μια εκτελέσιμη εφαρμογή."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Προσθήκη Αποκλειστικής εφαρμογής"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Όνομα εφαρμογής που προσθέτετε;"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Προσθήκη αποκλειστικής εφαρμογής"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Τα ονόματα εφαρμογών πρέπει να τελειώνουν σε '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' υπάρχει ήδη στη λίστα."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1191,11 +1191,11 @@ msgstr ""
"Θέλετε πραγματικά να σβήσετε όλες τις τοπικές προτιμήσεις;\n"
"(Αυτό δε θα επηρεάσει τις αποκλειστικές εφαρμογές.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Επιβεβαίωση"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Προτιμήσεις"
@@ -1212,11 +1212,11 @@ msgstr ""
"Πατήστε Εκκαθάριση για να επαναφέρετε τις προεπιλεγμένες ρυθμίσεις "
"(εξαιρούνται οι αποκλειστικές εφαρμογές)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Εκκαθάριση"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "εκκαθάριση όλων των τοπικών προτιμήσεων και κλείσιμο διαλόγου"
@@ -1236,7 +1236,7 @@ msgstr "χρήση δίσκου και μνήμης"
msgid "exclusive applications"
msgstr "αποκλειστικές εφαρμογές"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "ΕΝΤΑΞΕΙ"
@@ -1249,7 +1249,7 @@ msgid "close the dialog without saving"
msgstr "κλείσε το παράθυρο χωρίς να σωθούν οι τιμές"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Βοήθεια"
@@ -1308,7 +1308,7 @@ msgstr ""
"τον εξής αριθμό λεπτών"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "λεπτά"
@@ -1324,7 +1324,7 @@ msgstr "αναστολή εργασιών εάν η χρήση του επεξε
msgid "percent (0 means no restriction)"
msgstr "τοις εκατό (0 σημαίνει κανένας περιορισμός)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Κάθε μέρα μεταξύ των ορών"
@@ -1332,8 +1332,8 @@ msgstr "Κάθε μέρα μεταξύ των ορών"
msgid "start work at this time"
msgstr "εκκίνηση εργασιών αυτή την ώρα"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "και"
@@ -1341,45 +1341,45 @@ msgstr "και"
msgid "stop work at this time"
msgstr "σταμάτημα εργασιών αυτή την ώρα"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(κανένας περιορισμός εάν είναι ίσα)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"επιλέξτε το κουτάκι για να προσδιορίσετε τις ώρες για αυτή τη μέρα της "
"εβδομάδας"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Δευτέρα"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Τρίτη"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Τετάρτη"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Πέμπτη"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Παρασκευή"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Σάββατο"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Κυριακή"
@@ -1400,9 +1400,9 @@ msgstr "Σε πολυεπεξεργαστικά συστήματα, χρήση
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Χρήση μέχρι"
@@ -1411,73 +1411,73 @@ msgstr "Χρήση μέχρι"
msgid "% CPU time"
msgstr "% χρόνος χρήσης κεντρικής μονάδας επεξεργασίας"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Γενικές επιλογές"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Μέγιστος ρυθμός λήψης"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "ΚBytes/sec."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Μέγιστος ρυθμός αποστολής"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Μεταφορά το μέγιστο"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "κάθε"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "μέρες"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Παράκαμψη επαλήθευσης αρχείου εικόνας"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"επιλέξτε αυτό εάν ο διαδικτυακός σας πάροχος τροποποιεί τα εικονικά αρχεία"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Επιλογές σύνδεσης"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Επιβεβαιώστε πρωτού συνδεθείτε στο διαδίκτυο"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1485,11 +1485,11 @@ msgstr ""
"εάν επιλεχθεί, ένα παράθυρο επιβεβαίωσης θα εμφανιστεί πρωτού προσπαθήσετε "
"να συνδεθείτε στο διαδίκτυο"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Αποσύνδεση όταν τελειώσει"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1497,154 +1497,154 @@ msgstr ""
"εάν επιλεχθεί, το BOINC θα κολλάει όταν η χρήση του δικτύου ολοκληρώνεται\n"
"(σχετικό μόνο με dialup-συνδέσεις)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Χρήση του δικτύου επιτρέπεται"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "Ώρα εκκίνησης χρήσης δικτύου"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "Ώρα σταματήματος χρήσης δικτύου"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Χρήση δίσκου"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "μέγιστος χώρος χρήσης του δίσκου απο το BOINC (σε Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes χώρος δίσκου"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Άφησε τουλάχιστον "
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"Το BOINC αφήνει τουλάχιστον αυτό το ποσό του δίσκου ελεύθερο (σε Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes ελεύθερου χώρου στο δίσκο"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "Το BOINC χρησιμοποιεί μέγιστο αυτό το ποσοστό του χώρου του δίσκου"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% του συνολικού χώρου του δίσκου"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Εγγραφή σημείων ελέγχου της εφαρμογής στο δίσκο κάθε"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "δευτερόλεπτα"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
#, fuzzy, no-c-format
msgid "% of page file (swap space)"
msgstr "% του αρχείου σελίδας (swap χώρος)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Χρήση μνήμης"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% όταν ο υπολογιστης είναι σε χρήση"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% όταν ο υπολογιστής είναι αδρανής"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Παραμονή των εφαρμογών στην μνήμη ενώ έχου παυθεί οι εργασίες"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "εάν επιλεγεί, οι αναβληθείσες εργασίες παραμένουν στη μνήμη"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Παύση χρήσης επεξεργαστή και δικτύου όταν εκτελούνται αυτές οι εφαρμογές:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Προσθήκη..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Προσθήκη μιας εφαρμογής στη λίστα"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Αφαίρεση"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Αφαίρεση μιας εφαρμογής απο τη λίστα"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Για προχωρημένες επιλογές, ανατρέξτε στο"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Καταγραφέας Συμβάντων"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Πρόγραμμα"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Χρόνος"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Μήνυμα"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
#, fuzzy
msgid "&Show only this project"
msgstr "&Εμφάνιση μόνο αυτού του προγράμματος"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
#, fuzzy
msgid "Copy &All"
msgstr "Αντιγραφή &Όλων"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Αντιγραφή όλων των μηνυμάτων στο πρόχειρο"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "Αντιγραφή Επιλεγμένων"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1653,7 +1653,7 @@ msgstr ""
"πολλαπλά μηνύματα κρατώντας πατημένο το κουμπί shift ή control ενώ πατάτε "
"στα μηνύματα."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1662,25 +1662,25 @@ msgstr ""
"πολλαπλά μηνύματα κρατώντας πατημένο το κουμπί shift ή control όταν κάνετε "
"κλίκ στα μηνύματα."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Έξοδος"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr ""
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "Εμφάνιση όλων των μηνυμάτων"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Εμφάνιση μηνυμάτων για όλα τα έργα."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Εμφάνιση μόνο των μηνυμάτων για το επιλεγμένο έργο"
@@ -1731,7 +1731,7 @@ msgstr ""
"Να απομνημονευτεί η απόφαση και να μην εμφανιστεί ξανά αυτό το παράθυρο."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "Ακύρωση"
@@ -1739,231 +1739,231 @@ msgstr "Ακύρωση"
msgid "Don't show this dialog again."
msgstr "Μην ξαναεμφανίσεις αυτό το μήνυμα."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "Δεν δέχεται νέες εργασίες"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Προτιμήσεις έργου"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "Ιστοσελίδα του προγράμματος διαχείρισης λογαριασμού"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
#, fuzzy
msgid "Project has no apps for "
msgstr "Το πρόγραμμα δεν έχει εφαρμογές για"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
#, fuzzy
msgid "Client configuration excludes "
msgstr "Η παραμετροποίηση του προγράμματος αποκλείει"
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
#, fuzzy
msgid " work fetch deferred for"
msgstr "η λήψη εργασιών αναβλήθηκε για "
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr ""
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Ρυθμίσεις του προγράμματος"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Γενικά"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Κεντρική ηλεκρονική διεύθυνση"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Όνομα Χρήστη"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Όνομα ομάδας"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Μερίδα πόρων"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Το χρονοδιάγραμμα RPC αναβλήθηκε για"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Η λήψη του αρχείου αναβλήθηκε για"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Η αποστολή του αρχείου αναβλήθηκε για"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Ταυτότητα υπολογιστή"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr ""
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "ναί"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Παύθηκε μέσω GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "όχι"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Μη ζητήσετε επιπλέον εργασίες"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Κλήση χρονοδιαγράμματος σε εξέλιξη"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
#, fuzzy
msgid "Host location"
msgstr "Τοποθεσία Φιλοξενητή"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
#, fuzzy
msgid "default"
msgstr "Εξ'ορισμού"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Προστέθηκε μέσω του διαχειριστή λογαριασμού"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Αφαίρεση όταν οι εργασίες ολοκληρωθούν"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Τελειωμένο"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Πόντοι"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Χρήστης"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Πάροχος"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Χρήση χρονοδιαγράμματος"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Προγραμματισμός προτεραιότητας"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "Επεξεργαστής"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Παράγοντας διόρθωσης διάρκειας"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Ιδιότητες εργασίας"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Εφαρμογή"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Όνομα εργασίας"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Όνομα"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Κατάσταση"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Ληφθέντα"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Προθεσμία αναφοράς"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Πόροι"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr ""
"Χρόνος χρήσης κεντρικής μονάδας επεξεργασίας στο τελευταίο σημείο ελέγχου"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Χρόνος Επεξεργαστή"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Χρόνος που έχει περάσει"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Εκτιμώμενος χρόνος που απομένει"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Ολοκλήρωση κλάσματος"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Μέγεθος εικονικής μνήμης"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr ""
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Διεύθυνση"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Ταυτότητα διαδικασίας"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Τοπικό:"
@@ -2051,7 +2051,7 @@ msgstr "Αφήστε τα κενά εάν δεν χρειάζονται"
msgid "User Name:"
msgstr "Όνομα Χρήστη"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Κωδικός:"
@@ -2114,12 +2114,12 @@ msgstr ""
"Η %s γλώσσα έχει αλλάξει. Για να τεθεί σε εφαρμογή αυτή η αλλαγή, πρέπει να "
"επανεκκινήσετε το %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Επιλογή Υπολογιστή"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2129,7 +2129,7 @@ msgstr ""
"σε αυτόν τον υπολογιστή. Παρακαλώ επιλέξτε ένα άλλο πρόγραμμα για να "
"παρακολουθήσετε."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Όνομα host:"
@@ -2340,210 +2340,210 @@ msgstr "Έρευνα"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Μάθετε για τα προγράμματα που φιλοξενούνται στο World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Εκκίνηση προγράμματος"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Σύνδεση με το πρόγραμμα"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Ανάκτηση κατάστασης συστήματος, παρακαλώ περιμένετε..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "Λείπει η εφαρμογή"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr ""
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "ο υπολογιστης είναι σε χρήση"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "αίτημα του χρήστη"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "ώρα της ημέρας"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Εκτέλεση μετρήσεων επεξεργαστή σε πρόοδο"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "χρειάζεται επιπλέον χώρος στο δίσκο - ελέγξτε προτιμήσεις"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "ο υπολογιστής δε χρησιμοποιείται"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "γίνεται εκκίνηση"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "μια αποκλειστική εφαρμογή εκτελείται"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "η κεντρική μονάδα επεξεργασίας είναι απασχολημένη"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "ξεπεράστηκε το όριο εύρους ζώνης του δικτύου"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "ζητήθηκε απο το λειτουργικό σύστημα"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "άγνωστος λόγος"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "η μονάδα επεξεργασίας γραφικών απουσιάζει,"
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Νέο"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Αποτυχία λήψης"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Λήψη"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr "(παύθηκε -"
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Το πρόγραμμα παύθηκε απο τον χρήστη"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Η εγασία παύθηκε απο τον χρήστη"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Παύθηκε -"
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr "Παύθηκε η χρήση της GPU -"
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Αναμονή της μνήμης"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Αναμονή της μοιραζόμενης μνήμης"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Εκτελείται, υψηλή προτεραιότητα"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Εκτελείται"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr ""
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Αναμένοντας για εκτέλεση"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Έτοιμο για εκκίνηση"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr "(Προγραμματιστής περιμένει:"
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(Προγραμματιστής περιμένει)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
#, fuzzy
msgid " (Waiting for network access)"
msgstr "(Αναμονή για πρόσβαση στο δίκτυο)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Λάθος Υπολογισμών"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Αποτυχία ανεβάσματος"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Ανέβασμα"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Εγκαταλείφθηκε από το χρήστη"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Εγκαταλείφθηκε απο το πρόγραμμα"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
#, fuzzy
msgid "Aborted: not started by deadline"
msgstr "Απορριφθηκε: δεν ξεκίνησε μέσα στη διορία"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Απορρίφθηκε: το όριο του δίσκου ξεπεράστηκε"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Απορρίφθηκε: ξεπεράστηκε ο χρόνος εκτέλεσης"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Απορρίφθηκε: ξεπεράστηκε το όριο μνήμης"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Εγκαταλείφθηκε"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Αναγνωρίστηκε"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Έτοιμο για αναφορά"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Σφάλμα: μη έγκυρη κατάσταση '%d'"
@@ -2591,60 +2591,60 @@ msgstr "Ελέγξτε το όνομα χρήστη και τον κωδικό,
msgid "Check the email address and password, and try again."
msgstr "Ελέγξτε τη διεύθυνση ηλεκτρονικού ταχυδρομίου, και ξαναπροσπαθήστε."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "περισσότερα..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Επιλέξτε ένα πρόγραμμα"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Για να επιλέξετε ένα έργο, πατήστε το όνομά του ή πληκτρολογήστε τη "
"διεύθυνσή του παρακάτω."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "Προγράμματα"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Λεπτομέρειες προγράμματος"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Χώρος έρευνας:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Οργανισμός:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "Ιστοσελίδα:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Υποστηριζόμενα συστήματα:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
#, fuzzy
msgid "Project URL:"
msgstr "Ηλεκτοκτρονική διεύθυνση προγράμματος"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2652,7 +2652,7 @@ msgstr ""
"Αυτό το έργο πιθανόν να μην έχει εργασίες για τον τύπο του υπολογιστή σας. "
"Θέλετε να το προσθέσετε οπωσδήποτε;"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
"Έχετε ήδη προσθέσει αυτό το έργο. Παρακαλώ επιλέξτε ένα διαφορετικό έργο."
@@ -2661,11 +2661,11 @@ msgstr ""
msgid "Communicating with project."
msgstr "Επικοινωνία με το έργο."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Απαραίτητα αρχεία δε βρέθηκαν στον διακομιστή."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Προέκυψε ένα εσωτερικό σφάλμα στον διακομιστή."
@@ -2778,8 +2778,8 @@ msgid "I agree to the terms of use."
msgstr "Συμφωνώ στους όρους χρήσης."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "Δε συμφωνώ με τους όρους χρήσης."
+msgid "I do not agree to the terms of use."
+msgstr ""
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2870,7 +2870,7 @@ msgstr "Το '%s' δεν περιέχει ένα έκγυρο όνομα υπο
msgid "'%s' does not contain a valid path."
msgstr "Το '%s' δεν περιέχει μια έγκυρη διαδρομή."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Εντολές"
@@ -2923,7 +2923,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "Δεν υπάρχουν ανακοινώσεις αυτή τη στιγμή."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Ανακοινώσεις"
@@ -2940,7 +2940,7 @@ msgstr ""
"προτιμήσεων και πιθανών νέων εργασιών."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3185,135 +3185,135 @@ msgstr "ελεύθερο:"
msgid "used by other programs: "
msgstr "χρησιμοποιείται απο άλλα προγράμματα:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Σύνολο χρήστη"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Μέσος Όρος Χρήστη"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Σύνολο Υπολογιστή"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Μέσος Όρος Υπολογιστή"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Τελευταία ενημέρωση: %.0f μέρες πριν"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Εμφάνιση συνόλου χρήστη"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Εμφάνιση ολικών πόντων χρήστη"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Εμφάνιση μέσου όρου χρήστη"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Εμφάνιση μέσου όρου πόντων χρήστη"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Εμφάνιση συνόλου υπολογιστή"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Εμφάνιση συνολικών πόντων πάροχου"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Εμφάνιση μέσου όρου πάροχου"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Εμφάνιση μέσου όρου πόντων πάροχου"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Προηγούμενο έργο"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Εμφάνιση γραφήματος για προηγούμενο πρόγραμμα"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Επόμενο πρόγραμμα>"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Εμφάνιση γραφήματος για επόμενο πρόγραμμα"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Απόκρυψη λίστας έργων"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Χρήση ολόκληρου του χώρου για τα γραφικά"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Τρόπος προβολής"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Ένα πρόγραμμα"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Εμφάνιση ενός προγράμματος με τα επιλεγμένα προγράμματα"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Όλα τα έργα (ξεχωριστά)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Εμφάνιση όλων των προγραμμάτων, ένα γράφημα για κάθε πρόγραμμα"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Όλα τα έργα (μαζί)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Εμφάνιση ενός γραφήματος με όλα τα προγράμματα"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Όλα τα έργα (αθροιστικά)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Εμφάνιση ενός γραφήματος με όλα τα έργα αθροιστικά"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Στατιστικά"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Ανανέωση γραφημάτων..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Εμφάνιση λίστας έργων"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Χρήση μικρότερου χώρου για τα γραφηκά"
@@ -3485,10 +3485,6 @@ msgstr "Απομένει (εκτιμάται)"
msgid "Deadline"
msgstr "Προθεσμία αναφοράς"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Όνομα"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Εργασίες"
@@ -3620,42 +3616,42 @@ msgstr "Είστε σίγουρος ότι θέλετε να ακυρώστε;"
msgid "Question"
msgstr "Ερώτηση"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Προηγμένη προβολή...\t Ctrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
#, fuzzy
msgid "Display the advanced graphical interface."
msgstr "Εμφάνιση της απλής γραφικής διεπιφάνειας."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Εμφάνιση"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "Καθορισμός Εξ' ορισμού"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
@@ -3678,117 +3674,119 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Εκτέλεση εργασιών μόνο μεταξύ:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Σύνδεση στο διαδίκτυο μόνο μεταξύ:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Χρήση όχι περισσότερο απο:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "του χώρου του δίσκου"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "του επεξεργαστή"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr ""
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Εκτέλεση εργασίων ενώ είναι αδρανής για:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Οποιαδήποτε στιγμη"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Διαρκής Εκτέλεση)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "Θέλετε όντως να αφαιρέσετε όλες τις τοπικές προτιμήσεις;"
@@ -3848,120 +3846,120 @@ msgid ""
"(Progress: %.1lf%%, Status: %s)"
msgstr ""
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Δεν έχετε άλλα προγράμματα. Παρακαλώ προσθέστε ένα πρόγραμμα."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr ""
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "Εργασίες"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr ""
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr ""
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr ""
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr ""
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, fuzzy, c-format
msgid "Application: %s"
msgstr "Εφαρμογή:"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr ""
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr ""
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
# 84%
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
#, fuzzy, c-format
msgid "Remaining (estimated): %s"
msgstr "Απομένει"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr ""
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Ανάκτηση τρέχουσας κατάστασης."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Λήψη εργασιών απο τον διακομιστή."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Επεξεργασία παύθηκε:Λειτουργία απο μπαταρίες."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Επεξεργασία παύθηκε:Χρήστης ενεργός."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Επεξεργασία παύθηκε: Η επεξεργασία παύθηκε απο τον χρήστη."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Επεξεργασία παύθηκε: Ώρα της ημέρας."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr ""
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Επεξεργασία παύθηκε."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Αναμονή για επικοινωνία με τους διακομιστές του έργου."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Ανακτώντας την τρέχουσα κατάσταση"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Καμία εργασία διαθέσιμη για επεξεργασία"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Αδύνατη η σύνδεση με τον πυρήνα του προγράμματος"
@@ -4005,6 +4003,12 @@ msgstr ""
msgid "Quit %s"
msgstr "&Έξοδος %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Δε συμφωνώ με τους όρους χρήσης."
+
+#~ msgid "Workunit name"
+#~ msgstr "Όνομα εργασίας"
+
#, fuzzy
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Εμφάνιση της απλής γραφικής διεπιφάνειας."
diff --git a/locale/el/BOINC-Project-Generic.po b/locale/el/BOINC-Project-Generic.po
index d2f2eac..8de4c6d 100644
--- a/locale/el/BOINC-Project-Generic.po
+++ b/locale/el/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2010-11-26 20:50+0200\n"
"Last-Translator: chris g <chr1407 at hotmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -186,7 +186,7 @@ msgstr "Αναζήτηση στα φόρουμ"
msgid "Advanced search"
msgstr "Προηγμένη αναζήτηση"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Προσωπικά μηνύματα"
@@ -196,8 +196,8 @@ msgstr "Προσωπικά μηνύματα"
msgid "Questions and Answers"
msgstr "Ερωτήσεις και απαντήσεις"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -269,7 +269,7 @@ msgstr "Νήμα"
msgid "Message %1"
msgstr "Πίνακας μηνυμάτων"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr ""
@@ -460,7 +460,7 @@ msgstr ""
msgid "Thread"
msgstr "Νήμα"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Δημοσιεύσεις"
@@ -469,7 +469,7 @@ msgstr "Δημοσιεύσεις"
msgid "Views"
msgstr ""
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Τελευταία δημοσίευση"
@@ -508,7 +508,7 @@ msgid "Home"
msgstr "Σπίτι"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Εργασία"
@@ -574,9 +574,9 @@ msgid "Created"
msgstr ""
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -752,7 +752,7 @@ msgstr ""
msgid "Computer info"
msgstr ""
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr ""
@@ -761,9 +761,9 @@ msgstr ""
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -852,8 +852,8 @@ msgstr ""
msgid "Computer ID"
msgstr ""
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -890,7 +890,7 @@ msgstr ""
msgid "Write"
msgstr ""
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
#, fuzzy
msgid "Send private message"
msgstr "Προσωπικά μηνύματα"
@@ -1620,7 +1620,7 @@ msgstr ""
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
@@ -1713,9 +1713,9 @@ msgstr ""
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1723,7 +1723,7 @@ msgstr ""
msgid "Country"
msgstr ""
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr ""
@@ -1751,8 +1751,8 @@ msgstr ""
msgid "founder response deadline is %1"
msgstr ""
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr ""
@@ -1776,107 +1776,107 @@ msgstr ""
msgid "Web site"
msgstr ""
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr ""
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr ""
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
#, fuzzy
msgid "Message board"
msgstr "Πίνακας μηνυμάτων"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
#, fuzzy
msgid "Threads"
msgstr "Νήμα"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr ""
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr ""
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr ""
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr ""
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr ""
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr ""
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr ""
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr ""
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr ""
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr ""
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr ""
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr ""
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr ""
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr ""
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr ""
@@ -1886,53 +1886,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr ""
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr ""
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr ""
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr ""
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr ""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr ""
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1965,7 +1965,7 @@ msgid "Computers on this account"
msgstr ""
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr ""
@@ -1982,8 +1982,8 @@ msgstr ""
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
#, fuzzy
msgid "Team"
msgstr "Νήμα"
@@ -2013,7 +2013,7 @@ msgstr ""
msgid "Email address"
msgstr ""
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr ""
@@ -2021,7 +2021,7 @@ msgstr ""
msgid "Postal code"
msgstr ""
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr ""
@@ -2041,7 +2041,7 @@ msgstr ""
msgid "other account info"
msgstr ""
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr ""
@@ -2086,96 +2086,96 @@ msgstr ""
msgid "Community"
msgstr ""
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr ""
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr ""
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr ""
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr ""
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr ""
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr ""
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr ""
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr ""
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr ""
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr ""
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr ""
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr ""
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr ""
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr ""
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr ""
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr ""
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr ""
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr ""
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr ""
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr ""
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2249,7 +2249,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2443,7 +2443,7 @@ msgstr ""
msgid "User of the day"
msgstr ""
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr ""
@@ -5278,135 +5278,135 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr ""
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr ""
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr ""
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5652,6 +5652,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/el/BOINC-Setup.mo b/locale/el/BOINC-Setup.mo
index 710a15c..91e9f72 100644
Binary files a/locale/el/BOINC-Setup.mo and b/locale/el/BOINC-Setup.mo differ
diff --git a/locale/el/BOINC-Setup.po b/locale/el/BOINC-Setup.po
index 67d911c..7c6db46 100644
--- a/locale/el/BOINC-Setup.po
+++ b/locale/el/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: 2013-10-21 15:34+0000\n"
"Last-Translator: chris g <chr1407 at hotmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -27,11 +27,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Ναι"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Όχι"
@@ -56,15 +56,15 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "Εντάξει"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Σφάλμα άδειας μετά απο επανεκτέλεση"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
#, fuzzy
msgid ""
"Removal may take several minutes.\n"
@@ -73,7 +73,7 @@ msgstr ""
"Η Αφαίρεση μπορεί να διαρκέσει αρκετά λεπτά.\n"
"Παρακαλώ να είστε υπομονετικοί."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -86,21 +86,27 @@ msgstr ""
"Αυτό θα αφαιρέσει τα εκτελέσιμα αρχεία αλλά τα %s αρχεία δεδομένων θα "
"μείνουν ανέπαφα."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Ακυρώθηκε: %s έμειναν ανέπαφα."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Ένα σφάλμα συνέβει: κωδικός σφάλματος %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "όνομα του χρήστη"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -112,7 +118,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -123,11 +129,11 @@ msgstr ""
"υπολογιστή σας\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Ακύρωση"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Συνέχεια..."
diff --git a/locale/el/BOINC-Web.mo b/locale/el/BOINC-Web.mo
index d798b76..0634250 100644
Binary files a/locale/el/BOINC-Web.mo and b/locale/el/BOINC-Web.mo differ
diff --git a/locale/el/BOINC-Web.po b/locale/el/BOINC-Web.po
index d5e1865..0c23b87 100644
--- a/locale/el/BOINC-Web.po
+++ b/locale/el/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2010-11-26 20:50+0200\n"
"Last-Translator: chris g <chr1407 at hotmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -447,16 +447,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr ""
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -464,19 +464,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -485,15 +485,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -502,15 +502,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -518,15 +518,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -534,31 +534,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr ""
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -566,15 +566,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -585,15 +585,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr ""
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -603,30 +603,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr ""
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -638,15 +638,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -656,15 +666,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr ""
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -677,33 +687,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -713,15 +723,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -730,15 +740,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -747,23 +757,23 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
#, fuzzy
msgid "University of California, Berkeley"
msgstr "Το BOINC βρίσκεται στο πανεπιστήμιο της Καλιφορνιας, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -772,15 +782,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -788,45 +798,45 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
#, fuzzy
msgid "European research projects"
msgstr "Έργα έρευνας"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -834,28 +844,28 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
#, fuzzy
msgid "Various Spanish research projects"
msgstr "Έργα έρευνας"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -863,50 +873,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -916,18 +926,18 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
#, fuzzy
msgid "Software testing"
msgstr "Ενημερώσεις λογισμικού"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -935,11 +945,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -950,23 +960,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
diff --git a/locale/es/BOINC-Android.po b/locale/es/BOINC-Android.po
index 28049ee..a22c933 100644
--- a/locale/es/BOINC-Android.po
+++ b/locale/es/BOINC-Android.po
@@ -2,144 +2,147 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2013-09-22 20:57+0000\n"
+"Last-Translator: Anonymous Pootle User\n"
"Language-Team: es <LL at li.org>\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1379883430.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Es wird geladen. Bitte warten…"
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Projekt auswählen:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Projekt mittels URL hinzufügen"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Projekt-URL eingeben:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Projekt hinzufügen"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Bitte die Projekt-URL eingeben"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Kontoverwaltung hinzufügen"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "Keine Internetverbindung"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "kontaktiere Projektserver…"
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Projektlogo."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Bereich:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Fachbereich:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Beschreibung:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Betreiber:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Webseite:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
+msgid "This project supports Android devices"
msgstr ""
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
+msgid "This project does not support Android devices"
msgstr ""
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Nutzungsbedingungen für"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Wenn Sie bei diesem Projekt ein Konto anlegen, akzeptieren Sie die oben "
+"gezeigten Nutzungsbedingungen."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Mit bestehendem Konto anmelden"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "E-Mail:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Name:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Passwort:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Neu bei"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Ein Konto erstellen um teilzunehmen:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Die Projektwebseite besuchen um ein Konto zu erstellen:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Das Projekt erlaubt zur Zeit keine neuen Konten!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
@@ -151,53 +154,53 @@ msgstr ""
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Passwort vergessen"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Verbindung zum Projekt fehlgeschlagen!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Verbunden"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Konto-Registrierung für"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Projekt:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "E-Mail:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Name:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Team:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Passwort:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Bestätigung:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Erstellen"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Kontoverwaltung hinzufügen"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
@@ -205,64 +208,64 @@ msgstr ""
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Benutzer:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Passwort:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Bestätigung:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Hinzufügen"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "Benutzer nicht gefunden"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Passwort ist zu kurz"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Verbindungsfehler"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Passwörter stimmen nicht überein"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Bitte geben Sie die Adresse ein"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Bitte geben Sie Ihre E-Mail-Adresse ein"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Bitte Passwort eingeben"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Bitte einen Benutzernamen eingeben"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "fehlgeschlagen"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Benutzername nicht erlaubt"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "E-Mail-Adresse ist bereits registriert"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
@@ -270,40 +273,40 @@ msgstr ""
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "E-Mail nicht akzeptiert"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Passwort zu kurz"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "Die Kontoerstellung ist bei diesem Projekt deaktiviert"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "Ungültige Adresse"
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Zurück"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Beenden"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Erfolgreich"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Fehlgeschlagen"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "…"
msgctxt "attachproject_working_finished"
msgid "."
@@ -311,15 +314,15 @@ msgstr ""
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Verbinden"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Konto überprüfen"
msgctxt "attachproject_working_register"
msgid "Register account"
@@ -327,88 +330,90 @@ msgstr ""
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Anmelden"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Kontoverwaltung hinzufügen"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Synchronisieren"
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
+msgid "Tab here to choose a project."
msgstr ""
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Whooops"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"…das sollte eigentlich nicht passieren!\n"
+"Auf das Symbol klicken um es erneut zu probieren."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "BOINC Logo"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Status"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projekte"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Aufgaben"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Übertragungen"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Einstellungen"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Nachrichten"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigation"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Berechnung läuft"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Vielen Dank für Ihre Beteiligung."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Nichts zu tun"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Warten auf Aufgaben…"
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
@@ -416,36 +421,36 @@ msgstr ""
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "Startet…"
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Wählen Sie ein Projekt zur Teilnahme aus."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Beenden…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Leistungsüberprüfung…"
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "Projektbild"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "lese Einstellungen…"
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Speichern"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Neuen Wert eingeben:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
@@ -453,77 +458,61 @@ msgstr ""
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Allgemeines"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Netzwerk"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Energie"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "Prozessor"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Speicherplatz"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Fehlerdiagnose"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Fehlerdiagnose"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
-
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
-
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
+msgstr "Zeige erweiterte Einstellungen und Steuerungen…"
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
msgstr ""
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Min. Akku-Ladestand"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC hält die Berechnung an, wenn der Akkuladestand unter den gewählten "
+"Wert sinkt."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Max. Akkutemperatur"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC hält die Berechnung an, sobald diese Temperatur überschritten wird. Es "
+"wird nicht empfohlen diesen Wert zu ändern."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
@@ -531,11 +520,11 @@ msgstr ""
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr ""
+msgstr "Wie viel Prozent Ihres Speichers darf BOINC maximal verwenden?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "min. freizuhaltender Speicher"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
@@ -543,35 +532,35 @@ msgstr ""
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "tägliche Transferbegrenzung"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Begrenzt die Datenmenge welche täglich durch BOINC übertragen wird."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Übertrage Aufgaben nur per WLAN"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Automatisch starten"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Zeige Nachrichten wenn angehalten"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Benutzte Prozessoren"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Limitiert die Anzahl der Prozessoren welche BOINC nutzen darf."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Anhalten wenn Prozessornutzung über"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
@@ -579,23 +568,24 @@ msgstr ""
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "Prozessorbegrenzung"
+#, fuzzy
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Limitiert die Anzahl der Prozessoren welche BOINC nutzen darf."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "Arbeitsspeicherlimit"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Limitiert den Arbeitsspeicher welcher für Aufgaben zur Verfügung steht."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC Client Protokolleinstellungen"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
@@ -607,20 +597,20 @@ msgstr ""
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
@@ -629,281 +619,283 @@ msgstr ""
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Projekt hinzufügen"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Projektsymbol"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Punkte:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(auf diesem Gerät)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(gesamt)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Angehalten durch Benutzer"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Keine neuen Arbeitspakete"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Projekt wurde beendet - kann jetzt entfernt werden"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "wird entfernt wenn Aufgaben erledigt"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Serveranfrage ausstehend"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Serveranfrage läuft"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Trickle-Up Nachricht ausstehend"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "nächste Kommunikation in:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Projektbefehle:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Webseite besuchen"
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Aktualisieren"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Anhalten"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Fortsetzen"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Keine neuen Aufgaben"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Neue Aufgaben zulassen"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Zurücksetzen"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Kontoverwaltungsbefehle:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Synchronisieren"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Deaktivieren"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Projekt entfernen?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Wollen Sie wirklich zurücksetzen"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "von BOINC?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Entfernen"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Projekt zurücksetzen"
+#, fuzzy
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Wollen Sie wirklich zurücksetzen"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Zurücksetzen"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Kontoverwaltung deaktivieren"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Sind Sie sicher die Kontoverwaltung zu beenden"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Deaktivieren"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Aufgabenname:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Abgelaufene Zeit:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(angehalten)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Ablaufdatum:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "neu"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "herunterladen läuft"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "herunterladen abgeschlossen"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "Berechnungsfehler"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "hochladen"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "hochladen abgeschlossen"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "abgebrochen"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "hochladen fehlgeschlagen"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "bereit"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "wird ausgeführt"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "wird angehalten"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "wird angehalten"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "Projekt angehalten"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "meldebereit"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Aufgabe abbrechen?"
+#, fuzzy
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Aufgabe abbrechen?"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Bestätigungsdialog"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Lade Übertragungen…"
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Hochladen"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Herunterladen"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "erneut versuchen in"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "fehlgeschlagen"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "angehalten"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "aktiv"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "ausstehend"
msgctxt "trans_projectbackoff"
msgid "project backoff"
@@ -911,15 +903,15 @@ msgstr ""
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Datei:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Übertragung wiederholen"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Übertragung abbrechen?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
@@ -927,46 +919,46 @@ msgstr ""
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Abbrechen"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Lade Nachrichten..."
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Lade Protokollnachrichten…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Client Meldungen"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "GUI Meldungen"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Protokoll in die Zwischenablage kopiert."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Ereignisprotokoll für BOINC auf Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Berechnung angehalten."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "Schließen Sie Ihr Gerät an eine Stromquelle an um weiterzurechnen."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "Benutzer ist aktiv."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
@@ -974,11 +966,11 @@ msgstr ""
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC ermittelt die Leistungsfähigkeit ihres Gerätes…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Kein Speicherplatz mehr verfügbar."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
@@ -986,150 +978,152 @@ msgstr ""
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Keine Benutzeraktivität."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Startverzögerung"
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Eine exklusive Anwendung läuft."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Ihr Gerät ist mit anderen Apps ausgelastet."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "Netzwerkübertragungslimit erreicht."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Gestoppt von Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Nicht per WLAN verbunden."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
msgstr ""
+"Der Akku muss geladen werden bevor die Berechnung fortgesetzt werden kann."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Berechnung wird fortgesetzt wenn der Ladezustand erreicht"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "aktuell"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Warten bis der Akku abgekühlt ist"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Berechnung wird fortgesetzt…"
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "manuell."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Vom Nutzer gefordert"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Um Arbeit zu holen"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Um Aufgaben abzuliefern"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Um Trickle-Up Nachricht zu senden"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Angefordert vom Kontomanager"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Projektinitialisierung"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Vom Projekt angefordert"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Unbekannter Grund"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Neu laden"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Als E-Mail versenden"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "In Zwischenablage kopieren"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Statusprotokoll"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "BOINC beenden"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Anhalten"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Fortsetzen"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "Über"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Hilfe"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Zurück"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "Über"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Version"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "Berkeley Open Infrastructure for Network Computing"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-
+"© 2003–2013 Universität von Kalifornien, Berkeley.\n"
+"Alle Rechte vorbehalten."
diff --git a/locale/es/BOINC-Manager.mo b/locale/es/BOINC-Manager.mo
index 299b103..06afcc8 100644
Binary files a/locale/es/BOINC-Manager.mo and b/locale/es/BOINC-Manager.mo differ
diff --git a/locale/es/BOINC-Manager.po b/locale/es/BOINC-Manager.po
index 5df633e..d1ad6fe 100644
--- a/locale/es/BOINC-Manager.po
+++ b/locale/es/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 4.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-09-22 20:57+0000\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: BOINC Development Team <rwalton at ssl.berkeley.edu>\n"
@@ -216,342 +216,342 @@ msgstr "Conectado"
msgid "Disconnected"
msgstr "Desconectado"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Cerrar la ventana %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Cerrar Ventana"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Salir de %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Avisos\t Ctrl+Shift+A"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Visualiza los anuncios"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Proyectos\t Crtl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Visualizar los proyectos"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Tareas\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Visualizar las tareas"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Trans&ferencias\tCtrl+Shift+F"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Visualizar las transferencias"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Estadísticas\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Visualizar las estadísticas"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Disco\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Visualizar uso del disco"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Vista Simple...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Muestra el interfaz gráfico simple de BOINC."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Añadir un proyecto o un administrador de cuentas..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Ser voluntario de alguno o todos de los más de 30 proyectos en muchas áreas "
"de la ciencia"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sincronizar con %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Obtener las preferencias actuales de %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Añadir proyecto..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Añadir un proyecto"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&Parar de usar %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Eliminar el control de este ordenador por el administrador de cuentas."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opciones..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Configurar las opciones del interfaz de usuario y los valores del proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Preferencias de computación..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configurar preferencias de computación"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Ejecutar siempre"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Permitir el trabajo sin tener en cuenta sus preferencias"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Ejecutar según &preferencias"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Permitir el trabajo de acuerdo con sus preferencias"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "S&uspender"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Detiene el trabajo sin tener en cuenta sus preferencias"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Usar la GPU siempre"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Permitir trabajar a la GPU sin tener en cuenta sus preferencias"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Usar &GPU según preferencias"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Permitir trabajar a la GPU de acuerdo con sus preferencias"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Suspender GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Detiene el trabajo de la GPU sin tener en cuenta sus preferencias"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Actividad de red siempre &disponible"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Actividad de red sin tener en cuenta sus preferencias"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Actividad de red basada en sus preferencias"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Perimitir actividad de red de acuerdo con sus preferencias"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Actividad de red suspendida"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Detiene la actividad de red de BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Conecta a otro ordenador ejecutando %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Seleccionar orde&nador..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Cerrar c&liente conectado..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Cerrar el cliente actualmente conectado"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Ejecutar &pruebas de rendimiento de la CPU"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Ejecuta las pruebas de rendimiento de BOINC"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Ejecutar comunicaciones de red"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Ejecutar todas las comunicaciones de red pendientes"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Leer ficheros de configuración"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Leer información de configuración de los ficheros cc_config.xml y todos los "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Leer a&rchivo local de preferencias"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Leer preferencias de global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Ejecutar otro proceso de %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Ejecutar otro %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Registro de sucesos... \t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Visualizar mensajes de diagnóstico."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "A&yuda %s"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Muestra información acerca de %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "Ayuda &%s"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Muestra información acerca de %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, fuzzy
msgid "%s &web site"
msgstr "Página &web de %s"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Muestra información acerca de BOINC y %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "A&cerca de %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Información de licencia y copyright"
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Archivo"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Ver"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Herramientas"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "Ac&tividad"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "Avan&zado"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "A&yuda"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Dejar de usar %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -566,12 +566,12 @@ msgstr ""
"\n"
"¿Quiere dejar de usar %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Cerrar el cliente actual..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -580,27 +580,27 @@ msgstr ""
"%s cerrá el cliente actual y le pedirá\n"
"otro ordenador al que conectarse (host)."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s ha agregado con éxito %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Conectando a %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Conectado a %s (%s)"
@@ -637,26 +637,26 @@ msgstr ""
"\n"
"Por favor visite la página web del proyecto y siga allí las instrucciones."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Comunicando con cliente BOINC._ Por favor, espere ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Cerrar %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "&Salir de %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Comunicación"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Cancelar"
@@ -816,7 +816,7 @@ msgstr "%s se ha desconectado de Internet con éxito."
msgid "%s failed to disconnected from the Internet."
msgstr "%s falló al desconectarse de Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -837,7 +837,7 @@ msgstr ""
" - contacte con su administrador para que le añada al\n"
" grupo de usuarios 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -847,16 +847,16 @@ msgstr ""
"por favor reinstale %s.\n"
"(Código de error %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " en "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -864,73 +864,73 @@ msgstr ""
"Es necesario reiniciar para que BOINC funcione correctamente.\n"
"Por favor, reinicie su ordenador e inténtelo de nuevo."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Administrador BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr ""
"El Administrador BOINC ha sido iniciado por el sistema operativo "
"automáticamente"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Inicia BOINC de forma que sólo sea visible el icono en el área de "
"notificación"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Carpeta que contiene el ejecutable del Cliente BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Carpeta con los datos de BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Nombre del ordenador o dirección IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Número de puerto GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Contraseña"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Arrancar BOINC con estos argumentos opcionales"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "desactiva la seguridad de usuarios y permisos en BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"activar modo depuración de pieles (skin) para permitir los mensajes de error "
"del administrador de pieles"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "permitidas múltiples instancias del administrador BOINC"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "No usado: solución temporal para el error en XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Detección Automática)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Desconocido)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Definido por el Usuario)"
@@ -957,7 +957,7 @@ msgid "E&xit"
msgstr "&Salir"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Reanudar"
@@ -1113,64 +1113,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Infraestructura Abierta de Berkeley para Computación en Red"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&Aceptar"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "número inválido"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "hora inválida, el format es HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "intervalo de tiempo inválido, el formato es HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "detectada introducción de valor inválido"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Error de Validación"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Aplicaciones a añadir"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' no es una aplicación ejecutable."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Añadir Aplicación Exclusiva"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "¿Nombre de la aplicación a añadir?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Añadir aplicación exclusiva"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Los nombres de aplicación deben terminar en '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' ya está en la lista."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1178,11 +1178,11 @@ msgstr ""
"¿Quiere realmente borrar todas las preferencias locales?\n"
"(Esto no afectará a las aplicaciones exclusivas.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Confirmación"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferencias"
@@ -1198,11 +1198,11 @@ msgstr ""
"Pulse Restablecer para restaurar las preferencias basadas en web (excepto "
"aplicaciones exclusivas)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Restablecer"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "restaurar todas las preferencias locales y cerrar la ventana"
@@ -1222,7 +1222,7 @@ msgstr "uso de disco y memoria"
msgid "exclusive applications"
msgstr "aplicaciones exclusivas"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "Aceptar"
@@ -1235,7 +1235,7 @@ msgid "close the dialog without saving"
msgstr "cerrar la ventana sin grabar"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Ayuda"
@@ -1293,7 +1293,7 @@ msgstr ""
"de minutos"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minutos"
@@ -1309,7 +1309,7 @@ msgstr "suspender el trabajo si el uso del procesador excede este nivel"
msgid "percent (0 means no restriction)"
msgstr "porciento (0 significa sin restricciones)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Cada día entre las horas"
@@ -1317,8 +1317,8 @@ msgstr "Cada día entre las horas"
msgid "start work at this time"
msgstr "empezar el trabajo a esta hora"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "y"
@@ -1326,44 +1326,44 @@ msgstr "y"
msgid "stop work at this time"
msgstr "suspender el trabajo a esta hora"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(sin restricciones si son iguales)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Inactividad por día de la semana:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"seleccione el cuadro para especificar las horas para este día de la semana"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Lunes"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Martes"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Miércoles"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Jueves"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Viernes"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sábado"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Domingo"
@@ -1384,9 +1384,9 @@ msgstr "En sistemas multiprocesador, utilizar como máximo"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Utilizar como máximo"
@@ -1395,87 +1395,87 @@ msgstr "Utilizar como máximo"
msgid "% CPU time"
msgstr "% del tiempo de la CPU"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Opciones generales"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Velocidad máxima de descarga"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KB/s"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Velocidad máxima de envío"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Transferir como máximo"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "cada"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "días"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Bufer mínimo de trabajo"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Trata de mantener suficientes tareas para estar ocupado durante todos estos "
"días"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Bufer máximo de trabajo adicional"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
"Adicionalmente, mantener suficientes tareas como máximo para todos estos "
"días"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "No verificar archivos de imagen"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "márquela si su proveedor de Internet modifica los archivos de imágenes"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Opciones de conexión"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Confirmar antes de conectar a Internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr ""
"si está marcada, una venta aparecerá antes de intentar conectar a Internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Desconectar cuando finalice"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1483,153 +1483,153 @@ msgstr ""
"si está marcada, BOINC cuelga cuando ha terminado de usar la red\n"
"( sólo para conexiones a través de módem) "
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Uso de la red permitido"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "hora de comienzo de uso de la red"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "hora de finalización de uso de la red"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Uso del disco"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "el espacio máximo de disco usado por BOINC (en gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "gigabytes de espacio en disco"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Dejar como mínimo"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"BOINC deja como mínimo esta cantidad de espacio de disco libre (en "
"gigabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "gigabytes de espacio libre en disco"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC usa como máximo este porcentaje del espacio total del disco"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% del espacio total de disco"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Las tareas vuelcan al disco al menos cada"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "segundos"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% del archivo de paginación (espacio de intercambio)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Uso de memoria"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% cuando el ordenador se usa"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% cuando el ordenador esta inactivo"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Dejar las aplicaciones en memoria mientras están suspendidas"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
"si está marcada, las unidades de trabajo suspendidas son dejadas en memoria"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Suspender el uso del procesador y la red cuando estas aplicaciones estén "
"funcionando:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Añadir..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Añadir una aplicación a esta lista"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Eliminar"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Eliminar una aplicación de esta lista"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Para opciones avanzadas, dirigirse a "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Registro de Sucesos"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Proyecto"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Hora"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Mensaje"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "Mostrar sólo este &proyecto"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Copiar &Todo"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Copia todos los mensajes al portapapeles"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Copiar &Selección"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1638,7 +1638,7 @@ msgstr ""
"múltiples mensajes manteniendo pulsadas las teclas Shift o Control mientras "
"hace clic en los mensajes."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1647,24 +1647,24 @@ msgstr ""
"múltiples mensajes manteniendo pulsadas las teclas Shift y/o Control "
"mientras hace clic en los mensajes."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Cerrar"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Obtener ayuda con %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Mostrar todos los &mensajes"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Mostar los mensajes de todos los proyectos"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Mostrar sólo los mensajes para el proyecto seleccionado"
@@ -1717,7 +1717,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Recordar esta opción y no volver a mostrar este mensaje."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Cancelar"
@@ -1725,223 +1725,223 @@ msgstr "&Cancelar"
msgid "Don't show this dialog again."
msgstr "No mostrar este mensaje de nuevo."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "No buscar tareas para "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Preferencia del proyecto"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Preferencia del administrador de cuentas"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "El proyecto no tiene aplicaciones para "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "La configuración del cliente excluye "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " búsqueda de trabajo aplazada"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " intervalo diferido la búsqueda de trabajo "
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Propiedades del proyecto "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "General"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL principal"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nombre de usuario:"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nombre del equipo"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Asignación de recursos"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Petición (RPC) del planificador aplazada"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Descargas de archivos aplazada durante"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Envíos de archivos aplazados durante"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID del ordenador"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Uso no intensivo de CPU"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "si"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Suspendido mediante interfaz gráfica (GUI)"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "no"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "No solicitar más trabajo"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Llamada al planificador en progreso"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Trickle-up pendiente"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Ubicación del host"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "predeterminado"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Añadido mediante administrador de cuentas"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Eliminar cuando las tareas estén terminadas"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Finalizado"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Crédito"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Usuario"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Ordenador"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Planificando"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Planificando prioridad"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Factor de corrección de duración"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Propiedades de la tarea "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Programa"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nombre unidad trabajo"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nombre"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Estado"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Recibido"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Límite para informar"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Recursos"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Tamaño de cálculo estimado"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Tiempo de CPU en el último chequeo"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Tiempo de CPU"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Tiempo transcurrido"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Tiempo restante aproximado"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Parte hecha"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Tamaño de la memoria virtual"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Tamaño conjunto trabajo"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Carpeta"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID de proceso"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local: "
@@ -2029,7 +2029,7 @@ msgstr "Dejarlos en blanco si no se necesitan"
msgid "User Name:"
msgstr "Nombre de usuario:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Clave:"
@@ -2089,12 +2089,12 @@ msgstr ""
"Se ha cambiado el idioma de %s. Para que este cambio tenga efecto usted "
"debe reiniciar %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Seleccionar ordenador"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2103,7 +2103,7 @@ msgstr ""
"Otra instancia de %s ya está ejecutándose\n"
"en este ordenador. Por favor seleccione un cliente a monitorizar."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nombre del ordenador:"
@@ -2301,23 +2301,23 @@ msgstr "Investigación"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Aprenda acerca de los proyectos albergados en World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Iniciando cliente"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Conectando al cliente"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Recuperando estado del sistema; por favor espere..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Aplicación perdida"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2325,184 +2325,184 @@ msgstr ""
"Por favor descargue e instale la aplicación CoRD de "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "con baterías"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "ordenador está en uso"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "petición del usuario"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "hora del día"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "benchmarks de CPU en progreso"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "se necesita espacio en disco - compruebe las preferencias"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "ordenador no está en uso"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "Iniciando"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "una aplicación se está ejecuntando en exclusiva"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "la CPU está ocupada"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "límite de ancho de banda de red excedido"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "solicitado por el sistema operativo"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "razón desconocida"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "falta GPU, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nuevo"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Descarga fallida"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Descargando"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (suspendido - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Proyecto suspendido por el usuario"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Tarea suspendida por el usuario"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Suspendido - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU suspendida - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Esperando memoria"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Esperando memoria compartida"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Ejecutando, alta prioridad"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Ejecutando"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr "(no-CPU-intensivo)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Esperando para ejecutar"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Listo para comenzar"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Planificador en espera: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Planificador en espera)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Esperando acceso a la red)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Error de cálculo"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Envío fallido"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Enviando"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Abortado por el usuario"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Abortado por el proyecto"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Abortado: no iniciado por el límite de tiempo"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Abortado: límite de disco excedido"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Abortado: límite de tiempo de ejecución excedido"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Abortado: límite de memoria excedido"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Abortado"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Aceptado"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Listo para informar"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Error: estado inválido '%d'"
@@ -2557,56 +2557,56 @@ msgstr "Verifique su nombre de usuario y clave e inténtelo de nuevo."
msgid "Check the email address and password, and try again."
msgstr "Verifique que su dirección de correo y clave e inténtelo de nuevo."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "más..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Todo"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Elegir un proyecto"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Para elegir un proyecto, pulse sobre su nombre o introduzca su URL debajo."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Categorías:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Proyectos:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Detalles del proyecto"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Área de investigación:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organización:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Sitio web:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Sistemas soportados:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL del proyecto:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2614,7 +2614,7 @@ msgstr ""
"Puede que este proyecto no tenga trabajo para su tipo de ordenador. ¿Quiere "
"añadirlo de todas formas?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Usted ya ha agregado este proyecto. Por favor, elija otro proyecto."
@@ -2622,11 +2622,11 @@ msgstr "Usted ya ha agregado este proyecto. Por favor, elija otro proyecto."
msgid "Communicating with project."
msgstr "Comunicando con el proyecto."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Los archivos requeridos no se encuentran en el servidor."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Ha ocurrido un error interno en el servidor."
@@ -2735,7 +2735,8 @@ msgid "I agree to the terms of use."
msgstr "Acepto los términos de uso."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+#, fuzzy
+msgid "I do not agree to the terms of use."
msgstr "No acepto los términos de uso:"
#: UnavailablePage.cpp:183
@@ -2825,7 +2826,7 @@ msgstr "'%s' no contiene un nombre válido de ordenador."
msgid "'%s' does not contain a valid path."
msgstr "'%s' no contiene una ruta válida."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Comandos"
@@ -2878,7 +2879,7 @@ msgstr "Buscando avisos; por favor espere..."
msgid "There are no notices at this time."
msgstr "No hay avisos en este momento."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Avisos"
@@ -2895,7 +2896,7 @@ msgstr ""
"preferencias y posiblemente descargar más tareas."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3131,135 +3132,135 @@ msgstr "libre: "
msgid "used by other programs: "
msgstr "utilizado por otros programas: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Total Usuario"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Promedio Usuario"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Total Ordenador"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Promedio Ordenador"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Última actualización: hace %.0f días"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Mostrar totales del usuario"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Muestra el crédito total del usuario"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Mostrar promedios del usuario"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Muestra el crédito promedio del usuario"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Mostrar totales del ordenador"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Muestra el crédito total del ordenador"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Mostrar promedios del ordenador"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Muestra el crédito promedio del ordenador"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< Proyecto &anterior"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Muestra el gráfico del proyecto anterior"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Siguiente proyecto >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Muestra el gráfico del siguiente proyecto"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Ocultar la lista de proyectos"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Usar todo el área para gráficos"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Modo de presentación"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Un proyecto"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Muestra un gráfico del proyecto seleccionado"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Todos los proyectos (separados)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Muestra todos los proyectos, un gráfico por proyecto"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Todos los proyectos (juntos)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Muestra un gráfico con todos los proyectos"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Todos los proyectos (suma)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Muestra un gráfico con la suma de los proyectos"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Estadísticas"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Actualizando gráficas..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Mostrar la lista de proyectos"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Usar un área menor para gráficos"
@@ -3428,10 +3429,6 @@ msgstr "Restante (estimado)"
msgid "Deadline"
msgstr "Límite para informar"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nombre"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Tareas"
@@ -3587,40 +3584,40 @@ msgstr "¿Realmente desea cancelar?"
msgid "Question"
msgstr "Pregunta"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Vista Avanzada\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Muestra la interfaz gráfica avanzada."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Piel"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Seleccione el aspecto de la interfaz de usuario."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Predeterminado"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Suspender la Computación"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Reanudar la Computación"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Abrir una ventana para ver avisos de los proyectos o de BOINC"
@@ -3642,117 +3639,121 @@ msgid "Click OK to set preferences."
msgstr "Pulse Aceptar para establecer las preferencias."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Haga clic en Restablecer para restaurar la configuración basada en web."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
+#, fuzzy
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr "Para ajustes adicionales, seleccione Preferencias de Computación en"
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "la Vista Avanzada."
-
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Trabajar sólo entre:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Conectar a Internet sólo entre:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "No usar más de:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "de espacio en disco"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "del procesador"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "¿Trabajar cuando use baterías?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Trabajar después de estar inactivo durante:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+#, fuzzy
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "restaurar todas las preferencias locales y cerrar la ventana"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "En cualquier momento"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Ejecutar siempre)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "¿Realmente desea borrar todas las preferencias locales?"
@@ -3812,116 +3813,116 @@ msgstr ""
"¿Está seguro de querer cancelar la tarea '%s'?\n"
"(Progreso: %.1lf%%, Estado: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Usted no tiene ningún proyecto. Por favor únase a uno."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "No disponible"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Tareas:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Seleccione una tarea a la que acceder"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "De:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Progreso de esta tarea"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Comandos de la Tarea"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Visualizar un menú de comandos aplicables a esta tarea"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Aplicación: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Aplicación: No disponible"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "No Disponible"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Transcurrido: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Restante (estimado): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Estado: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Recuperando estado actual."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Descargando trabajo del servidor."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Procesamiento Suspendido: Funcionando con Baterías."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Procesamiento Suspendido: Usuario Activo."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Procesamiento Suspendido: Usuario suspendió actividad."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Procesamiento Suspendido: Hora del Día."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Procesamiento Suspendido: Ejecutando Pruebas Rendimiento."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Procesamiento Suspendido."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Esperando a contactar con los servidores del proyecto."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Recuperando estado actual"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "No hay trabajo disponible para procesar"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "No se puede conectar al cliente núcleo"
@@ -3963,6 +3964,24 @@ msgstr "Mostrar Todo"
msgid "Quit %s"
msgstr "Cerrar %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "No acepto los términos de uso:"
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Haga clic en Restablecer para restaurar la configuración basada en web."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Para ajustes adicionales, seleccione Preferencias de Computación en"
+
+#~ msgid "the Advanced View."
+#~ msgstr "la Vista Avanzada."
+
+#~ msgid "Workunit name"
+#~ msgstr "Nombre unidad trabajo"
+
+#~ msgid "invalid float"
+#~ msgstr "número inválido"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Cambiar al interfaz gráfico avanzado (accesible)."
diff --git a/locale/es/BOINC-Project-Generic.po b/locale/es/BOINC-Project-Generic.po
index 9ffadeb..6fa8d19 100644
--- a/locale/es/BOINC-Project-Generic.po
+++ b/locale/es/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-09-22 20:57+0000\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: \n"
@@ -196,7 +196,7 @@ msgstr "Búsqueda avanzada"
# ########################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Mensajes privados"
@@ -208,8 +208,8 @@ msgstr "Mensajes privados"
msgid "Questions and Answers"
msgstr "Preguntas y Respuestas"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -281,7 +281,7 @@ msgstr "No leído"
msgid "Message %1"
msgstr "Mensaje %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "oculto"
@@ -487,7 +487,7 @@ msgstr "Hilo"
# ########################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Mensajes"
@@ -496,7 +496,7 @@ msgstr "Mensajes"
msgid "Views"
msgstr "Visitas"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Último mensaje"
@@ -540,7 +540,7 @@ msgid "Home"
msgstr "Inicio"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Trabajo"
@@ -606,9 +606,9 @@ msgid "Created"
msgstr "Creado"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -789,7 +789,7 @@ msgstr "Último contacto"
msgid "Computer info"
msgstr "Información del ordenador"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Posición"
@@ -798,9 +798,9 @@ msgstr "Posición"
msgid "Avg. credit"
msgstr "Crédito promedio"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -888,8 +888,8 @@ msgstr "Sólo ordenadores activos en los últimos 30 días"
msgid "Computer ID"
msgstr "ID del ordenador"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -927,7 +927,7 @@ msgstr "Escribir"
# ########################################
# Private messages
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Enviar mensaje privado"
@@ -1699,7 +1699,7 @@ msgstr "Límite de tiempo para informar"
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Estado"
@@ -1797,9 +1797,9 @@ msgstr "Palabras clave"
msgid "Find teams with these words in their names or descriptions"
msgstr "Buscar equipos con estas palabras en sus nombres o descripciones"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1807,7 +1807,7 @@ msgstr "Buscar equipos con estas palabras en sus nombres o descripciones"
msgid "Country"
msgstr "País"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tipo de equipo"
@@ -1837,8 +1837,8 @@ msgstr "Solicitado por usted"
msgid "founder response deadline is %1"
msgstr "el tiempo límite para que el fundador responda es %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Ninguno"
@@ -1862,27 +1862,27 @@ msgstr "Descripción"
msgid "Web site"
msgstr "Sitio web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Estadísticas entre proyectos"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipo"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Foro"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Hilos"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Unirse a este equipo"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1891,79 +1891,79 @@ msgstr ""
"preferencias de su proyecto, uniéndose a un equipo le da a su fundador "
"acceso a su dirección de correo electrónico."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "No se aceptan nuevos miembros"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Petición de cambio del fundador"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Respondido por %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Cambio del fundador del equipo"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Miembros"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fundador"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administradores"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Miembros nuevos en el último día"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Total de miembros"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "ver"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Miembros activos"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Miembros con crédito"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrador"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Anteriores %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Siguiente %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "No existe dicho equipo."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Esta operación requiere ser fundador."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Esta operación requiere privilegios de administrador de equipo"
@@ -1973,7 +1973,7 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1982,48 +1982,48 @@ msgstr ""
"proyecto (recursos compartidos, preferencia gráficas) serán visibles para el "
"público."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nombre del equipo, versión en texto"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "No use etiquetas HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nombre del equipo, versión HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Puede usar un %1número limitado de etiquetas HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Si no conoce el HTML, deje este recuadro en blanco."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL de la página web del equipo, si la hay"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sin \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
"Este URL será puesto como vínculo en la página del equipo en este sitio."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Descripción del equipo"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "¿Aceptar nuevos miembros?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Perfil de usuario"
@@ -2058,7 +2058,7 @@ msgid "Computers on this account"
msgstr "Ordenadores en esta cuenta"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Ver"
@@ -2075,8 +2075,8 @@ msgstr "Estadísticas interproyectos"
msgid "Account"
msgstr "Cuenta"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Equipo"
@@ -2105,7 +2105,7 @@ msgstr "Información de la cuenta"
msgid "Email address"
msgstr "Dirección de correo electrónico"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2113,7 +2113,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Código postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "miembro de %1 desde"
@@ -2133,7 +2133,7 @@ msgstr "contraseña"
msgid "other account info"
msgstr "otros datos de la cuenta"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID de usuario"
@@ -2179,100 +2179,100 @@ msgstr "Preferencias de %1"
msgid "Community"
msgstr "Comunidad"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Borrar"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Crear"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Perfil"
# ########################################
# Forum
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 mensajes"
# ########################################
# Apps page (apps.php)
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notificaciones"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Separase del equipo"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrar"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(petición de modificación del fundador pendiente)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Miembro del equipo"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "buscar un equipo"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fundador pero no miembro de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Encontrar amigos"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amigos"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Ordenadores"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donante"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contactar"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Esta persona es un amigo"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Cancelar amistad"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Solicitud pediente"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Añadir como amigo"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2352,7 +2352,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Permanecer conectado en este ordenador"
@@ -2564,7 +2564,7 @@ msgstr ""
msgid "User of the day"
msgstr "Usuario del día"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Estado del servidor"
@@ -5692,140 +5692,140 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tareas en progreso"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# ########################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Programas"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "No enviado"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "En progreso"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -6088,6 +6088,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "El nombre del equipo no puede estar en blanco"
diff --git a/locale/es/BOINC-Setup.mo b/locale/es/BOINC-Setup.mo
index a99e131..5920a95 100644
Binary files a/locale/es/BOINC-Setup.mo and b/locale/es/BOINC-Setup.mo differ
diff --git a/locale/es/BOINC-Setup.po b/locale/es/BOINC-Setup.po
index aeb3430..50b5ab2 100644
--- a/locale/es/BOINC-Setup.po
+++ b/locale/es/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: 2013-08-10 18:41+0200\n"
"Last-Translator: David M <davidcomp2 at telefonica dot net>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -26,11 +26,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Sí"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "No"
@@ -54,21 +54,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -76,21 +76,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -102,7 +108,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -110,10 +116,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Cancelar"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Continuar..."
diff --git a/locale/es/BOINC-Web.mo b/locale/es/BOINC-Web.mo
index de5552f..90aa530 100644
Binary files a/locale/es/BOINC-Web.mo and b/locale/es/BOINC-Web.mo differ
diff --git a/locale/es/BOINC-Web.po b/locale/es/BOINC-Web.po
index 9f67df2..f00e466 100644
--- a/locale/es/BOINC-Web.po
+++ b/locale/es/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-08-29 18:47+0000\n"
"Last-Translator: David M <davidcomp2 at telefonica dot net>\n"
"Language-Team: \n"
@@ -456,16 +456,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Ciencia cognitiva e inteligencia artificial"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Privado"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Inteligencia artificial"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -477,19 +477,19 @@ msgstr ""
"habla, y etiquetado gramatical con el fin de imitar el comportamiento humano "
"en las conversaciones."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biología y Medicina"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -498,15 +498,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Universidad de Karlsruhe (Alemania)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Predicción de la estructura de las proteínas"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -521,15 +521,15 @@ msgstr ""
"las proteínas, y para desarrollar nuevos medicamentos basados en las "
"estructuras tridimensionales de proteínas biológicamente importantes."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Universidad de Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Estudio de las interacciones proteína-ligando"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -541,15 +541,15 @@ msgstr ""
"detalles atómicos de las interacciones proteína-ligando y, de esta manera, "
"buscará el conocimiento para el descubrimiento de fármacos novedosos."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Parque de Investigación Biomédica de Barcelona (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Simulaciones moleculares de proteínas"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -562,15 +562,15 @@ msgstr ""
"han sido posibles dándole un nuevo papel a la biología computacional para la "
"investigación biomédica."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Análisis del ligamiento genético"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -581,17 +581,17 @@ msgstr ""
"hipertensión (presión alta de la sangre), cancer, esquizofrenia y muchas "
"otras."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
"Universidad de Maryland Centro de Bioinformática y Biología Computacional"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Investigación de las ciencias de la vida"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -603,15 +603,15 @@ msgstr ""
"datos de secuencias de ADN; de las secuencias de proteinas de bacterias, "
"plásmidos y virus; y la diversidad biológica en las reservas naturales."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "El Instituto Swiss Tropical"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiología"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -630,15 +630,15 @@ msgstr ""
"variado conjunto de parámetros relacionados con los factores biológicos y "
"sociales que influyen en la distribución de la enfermedad."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Universidad de Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biología"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -655,11 +655,11 @@ msgstr ""
"proteínas para luchar contra enfermedades tales como VIH, Malaria, Cáncer y "
"Alzheimer"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Universidad de Viena"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -669,19 +669,19 @@ msgstr ""
"pública de los datos resultantes, que juegan un papel clave en muchos "
"proyectos de investigación bioinformática."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Ciencias de la Tierra"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Universidad de Oxford"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Estudio del clima"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -702,17 +702,25 @@ msgstr ""
"cómo puede que cambie el clima en el próximo siglo bajo un amplio rango de "
"escenarios distintos."
-# 75%
-#: projects.inc:196
-#, fuzzy
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomía/Física/Química"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomía"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -722,15 +730,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Universidad de Texas en Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Química"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -755,12 +763,12 @@ msgstr ""
"largo plazo."
# 95%
-#: projects.inc:240
+#: projects.inc:262
#, fuzzy
msgid "University of Illinois at Urbana-Champaign"
msgstr "Universidad de Illinois en Urbana-Chamapign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -770,11 +778,11 @@ msgstr ""
"nuestro Universo y de encontrar la gama de modelos que concuerden con los "
"datos disponibles en la fisica de partículas astronomicas."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Instituto Politécnico Rensselaer"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -784,11 +792,11 @@ msgstr ""
"precisión de la galaxia Via Lactea usando los datos reunidos por el Sloan "
"Digital Sky Survey."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Universidad de Leiden, Países Bajos"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -798,15 +806,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Univ. de Wisconsin - Milwaukee, Instituto Max Planck"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofísica"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -815,15 +823,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Organización Europea para la Investigación Nuclear)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Física"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -832,22 +840,22 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Universidad de California, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofísica, astrobiología"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -856,15 +864,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Universidad de Bielefeld de Ciencias Aplicadas"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Ingeniería química y nanotecnología"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -872,44 +880,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Múltiples aplicaciones"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Academia China de las Ciencias"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Física, bioquímica, y otros"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matemáticas, física, evolución"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "Laboratorio MTA-SZTAKI de Sistemas Paralelos y Distribuidos (Hungría)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Proyectos de investigación europeos"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -917,27 +925,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Universidades y centros de investigación españoles"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Varios proyectos de investigación españoles"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Investigación en física, ciencia de los materiales, y biomedicina"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -945,52 +953,52 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matemáticas, computación y juegos"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Criptografía"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matemáticas"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
"Estudio de la Conjetura de Collatz, una conjetura no resuelta por las "
"matemáticas"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Universidad del Estado de California Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Factorización de enteros grandes"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1000,7 +1008,7 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1008,11 +1016,11 @@ msgstr ""
"Universidad Técnica Vilnius Gediminas y Universidad de Tecnología Kaunas "
"(Lituania)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Prueba de software"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1020,11 +1028,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Instituto Matemático de la Universidad de Leiden / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1035,23 +1043,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Universidad Hochschule RheinMain de Ciencias Aplicadas"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1067,6 +1075,11 @@ msgstr "Comentarios"
msgid "News is available as an %sRSS feed%s"
msgstr "Las noticias están disponibles en formato %sRSS feed%s"
+# 75%
+#, fuzzy
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomía/Física/Química"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s para %s (%s MB)"
diff --git a/locale/fi/BOINC-Android.po b/locale/fi/BOINC-Android.po
index 4f9e6eb..db6a3c5 100644
--- a/locale/fi/BOINC-Android.po
+++ b/locale/fi/BOINC-Android.po
@@ -7,16 +7,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-11-26 19:45+0000\n"
+"PO-Revision-Date: 2014-03-05 10:57+0000\n"
"Last-Translator: Sami Nordlund <sami.nordlund at kolumbus.fi>\n"
"Language-Team: fi <LL at li.org>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1394017036.0\n"
#. app global
msgctxt "app_name"
@@ -26,7 +27,7 @@ msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr "Ladataan! Odota…"
+msgstr "Ladataan, odota…"
#. attach project
#. project list
@@ -36,7 +37,7 @@ msgstr "Valitse projekti:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr "Lisää projekti URL-osoitteella"
+msgstr "Lisää projekti URLin avulla"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
@@ -56,7 +57,7 @@ msgstr "Lisää tilihallitsija"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr "Ei internet-yhteyttä"
+msgstr "Ei internetyhteyttä"
#. project login
msgctxt "attachproject_login_loading"
@@ -101,17 +102,17 @@ msgstr "Tämä projekti ei tue Android-laitteita"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Käyttöehdot projektille"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
-msgstr "Luomalla tilin tässä projektissa, hyväksyt ylläolevat käyttöoikeudet."
+msgstr "Luomalla tilin tässä projektissa hyväksyt ylläolevat käyttöehdot."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr "Kirjaudu sisään käytössä olevalla tilillä"
+msgstr "Kirjaudu olemassa olevalla tilillä"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
@@ -125,9 +126,10 @@ msgctxt "attachproject_login_header_pwd"
msgid "Password:"
msgstr "Salasana:"
+#, fuzzy
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Neu bei"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
@@ -135,7 +137,7 @@ msgstr "Rekisteröi tili osallistuaksesi:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr "Käy projektin nettisivulla luodaksesi tilin:"
+msgstr "Käy projektin nettisivulla luomassa tili:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
@@ -164,7 +166,7 @@ msgstr "Liitetty"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Tilin rekisteröinti"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
@@ -188,7 +190,7 @@ msgstr "Salasana:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr "… Kirjoita uudelleen:"
+msgstr "… Toista:"
msgctxt "attachproject_registration_button"
msgid "Create"
@@ -213,7 +215,7 @@ msgstr "Salasana:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr "… Kirjoita uudelleen:"
+msgstr "… Toista:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
@@ -222,7 +224,7 @@ msgstr "Lisää"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr "Käyttäjää ei löydy"
+msgstr "Käyttäjää ei löytynyt"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
@@ -238,19 +240,19 @@ msgstr "Salasanat eivät täsmää"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr "Anna URL"
+msgstr "Syötä URL"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr "Anna sähköpostiosoite"
+msgstr "Syötä sähköpostiosoite"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr "Anna salasana"
+msgstr "Syötä salasana"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr "Anna käyttäjänimi"
+msgstr "Syötä käyttäjänimi"
msgctxt "attachproject_error_unknown"
msgid "failed"
@@ -258,11 +260,11 @@ msgstr "epäonnistui"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr "Käyttäjänimi hylätty"
+msgstr "Käyttäjänimi ei kelpaa"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr "Sähköposti on jo käytössä"
+msgstr "sähköpostiosoite on jo käytössä"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
@@ -270,11 +272,11 @@ msgstr "Projekti on sammutettu"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr "Sähköposti hylätty"
+msgstr "sähköpostiosoite ei kelpaa"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr "Salasana hylätty"
+msgstr "Salasana ei kelpaa"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
@@ -340,7 +342,7 @@ msgstr "Synkronoi"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Napauta tähän valitaksesi projektin."
msgctxt "main_error"
msgid "Whooops"
@@ -352,11 +354,11 @@ msgid ""
"Click on the icon to try again."
msgstr ""
"…tätä ei olisi pitänyt tapahtua!\n"
-"Napsauta kuvaketta yrittääksesi uudelleen."
+"Yritä uudelleen napsauttamalla kuvaketta."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr "BOINC kuvake"
+msgstr "BOINCin kuvake"
#. tab names
msgctxt "tab_status"
@@ -369,7 +371,7 @@ msgstr "Projektit"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr "Tehtävät"
+msgstr "Paketit"
msgctxt "tab_transfers"
msgid "Transfers"
@@ -390,7 +392,7 @@ msgstr "Navigointi"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr "Laskenta"
+msgstr "Laskenta käynnissä"
msgctxt "status_running_long"
msgid "Thank you for participating."
@@ -406,7 +408,7 @@ msgstr "Ei mitään tehtävää"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr "Odottaa tehtäviä…"
+msgstr "Odotetaan paketteja…"
msgctxt "status_computing_disabled"
msgid "Suspended"
@@ -414,7 +416,7 @@ msgstr "Hyllytetty"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "Paina play palauttaaksesi verkkoyhteyden ja jatkaaksesi laskentaa."
msgctxt "status_launching"
msgid "Starting…"
@@ -422,7 +424,7 @@ msgstr "Käynnistetään…"
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr "Valitse projekti, johon osallistut."
+msgstr "Valitse projekti johon osallistut."
msgctxt "status_closing"
msgid "Closing…"
@@ -430,7 +432,7 @@ msgstr "Suljetaan…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr "Suorituskykytestaus…"
+msgstr "Suorituskykymittaus…"
msgctxt "status_image_description"
msgid "project image"
@@ -447,7 +449,7 @@ msgstr "Tallenna"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr "Anna uusi arvo:"
+msgstr "Syötä uusi arvo:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
@@ -471,7 +473,7 @@ msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr "Tilankäyttö"
+msgstr "Tallennustila"
msgctxt "prefs_category_memory"
msgid "Memory"
@@ -528,7 +530,7 @@ msgstr "Kuinka paljon laitteesi tallennustilasta jätetään vapaaksi?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr "Päivittäinen siirtoraja"
+msgstr "Päivittäinen tiedonsiirtoraja"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
@@ -536,7 +538,7 @@ msgstr "Rajoitus BOINCin päivittäiselle tiedonsiirrolle."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr "Siirrä tehtävät vain WiFin kautta"
+msgstr "Siirrä paketit vain WiFillä"
msgctxt "prefs_autostart_header"
msgid "Autostart"
@@ -544,19 +546,19 @@ msgstr "Automaattikäynnistys"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr "Näytä ilmoitus kun hyllytetty"
+msgstr "Näytä ilmoitus hyllytettäessä"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr "Käytetyt CPU-ytimet"
+msgstr "Käytettävät prosessoriytimet"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr "Rajoittaa CPU-ytimien määrää, jota BOINC käyttää laskentaan."
+msgstr "Rajoittaa BOINCin laskentaan käyttämien prosessoriytimien määrän."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr "Tauota prosessorikäytön ylittäessä"
+msgstr "Tauota kun prosessorin käyttö on yli"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
@@ -572,23 +574,23 @@ msgstr "Rajoittaa prosessoriaikaa, jota BOINC käyttää laskentaan."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr "RAM raja"
+msgstr "Muistiraja"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr "Rajoittaa RAM-muistin määrää, joka tehtäville annetaan."
+msgstr "Rajoittaa tehtävän käytettävissä olevan muistin määrän."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC ohjelman lokimerkinnät"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "Määrittää GUI-kirjausviestien laajuuden."
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Määrittää GUI-kirjausviestien laajuuden."
msgctxt "prefs_unit_mb"
msgid "MB"
@@ -630,7 +632,7 @@ msgstr "(tällä laitteella)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr "(kaikki)"
+msgstr "(yhteensä)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
@@ -639,7 +641,7 @@ msgstr "Käyttäjän hyllyttämä"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr "Ei uusia töitä"
+msgstr "Älä lataa uutta työtä"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
@@ -647,7 +649,7 @@ msgstr "Projekti päättynyt - voi poistaa"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr "Poistetaan kun paketit on suoritettu"
+msgstr "Poistetaan tehtävien valmistuttua"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
@@ -663,7 +665,7 @@ msgstr "Väliaikaviesti odottaa"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Seuraava yhteydenotto:"
#. project controls
msgctxt "projects_control_dialog_title"
@@ -672,7 +674,7 @@ msgstr "Projektin komennot:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr "Käy sivulla"
+msgstr "Käy nettisivulla"
msgctxt "projects_control_update"
msgid "Update"
@@ -692,7 +694,7 @@ msgstr "Jatka"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr "Ei uutta työtä"
+msgstr "Ei uusia töitä"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
@@ -712,7 +714,7 @@ msgstr "Synkronoi"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr "Poista"
+msgstr "Poista käytöstä"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
@@ -721,7 +723,7 @@ msgstr "Poista projekti?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr "Haluatko varmasti poistaa"
+msgstr "Haluatko poistaa"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
@@ -745,7 +747,7 @@ msgstr "Nollaa"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr "Poista tilihallitsija"
+msgstr "Poista tilihallitsija käytöstä"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
@@ -753,7 +755,7 @@ msgstr "Haluatko lopettaa käyttämästä"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr "Poista käytöstä"
+msgstr "Poista"
#. tasks tab strings
msgctxt "tasks_header_name"
@@ -762,7 +764,7 @@ msgstr "Tehtävän nimi:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr "Käytetty aika:"
+msgstr "Kulunut aika:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
@@ -790,7 +792,7 @@ msgstr "laskentavirhe"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr "lähetetään"
+msgstr "lähetys"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
@@ -798,7 +800,7 @@ msgstr "lähetys valmis"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr "hylätty"
+msgstr "keskeytetty"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
@@ -834,7 +836,7 @@ msgstr "projekti hyllytetty"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr "valmis raportoitavaksi"
+msgstr "valmiina raportoitavaksi"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
@@ -864,11 +866,11 @@ msgstr "Luetaan siirtoja…"
msgctxt "trans_upload"
msgid "Upload"
-msgstr "Lähetä"
+msgstr "Lähetys"
msgctxt "trans_download"
msgid "Download"
-msgstr "Lataa"
+msgstr "Lataus"
msgctxt "trans_retryin"
msgid "retry in"
@@ -922,7 +924,7 @@ msgstr "Luetaan ilmoituksia…"
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr "Ladataan lokiviestit…"
+msgstr "Ladataan lokiviestejä…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
@@ -955,11 +957,11 @@ msgstr "Käyttäjä aktiivinen."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Laskennalle varattu aika ylitetty."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr "BOINC suorityskykytestaa laitettasi…"
+msgstr "BOINC suorituskykymittaa laitettasi…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
@@ -967,15 +969,15 @@ msgstr "Levytila loppu."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Aikataulutettu CPU-kiihdytys."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Ei käyttäjän toimintaa lähiaikoina."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Käyttöönoton viivästys."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
@@ -999,15 +1001,15 @@ msgstr "Ei WiFi-yhteyttä."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr "Akku tulee ladata ennen kuin laskentaa jatketaan."
+msgstr "Akku täytyy ladata ennen kuin laskentaa voidaan jatkaa."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr "Laskenta jatkuu akun varaustilan saavuttaessa"
+msgstr "Laskenta jatkuu kun akun varaustila saavuttaa"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "tällä hetkellä"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
@@ -1036,7 +1038,7 @@ msgstr "Raportoidaan valmiit paketit"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr "Lähetetään väliaikaviesti"
+msgstr "Väliaikaviestin lähetys"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
@@ -1073,7 +1075,7 @@ msgstr "Tapahtumaloki"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr "Lopeta BOINC"
+msgstr "Sulje BOINC"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
@@ -1089,12 +1091,12 @@ msgstr "Tietoja"
msgctxt "menu_help"
msgid "Help"
-msgstr "Ohje"
+msgstr "Apua"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Takaisin"
msgctxt "about_title"
msgid "About"
diff --git a/locale/fi/BOINC-Manager.mo b/locale/fi/BOINC-Manager.mo
index 3bdab4d..81a146b 100644
Binary files a/locale/fi/BOINC-Manager.mo and b/locale/fi/BOINC-Manager.mo differ
diff --git a/locale/fi/BOINC-Manager.po b/locale/fi/BOINC-Manager.po
index 5941c0e..e77aae9 100644
--- a/locale/fi/BOINC-Manager.po
+++ b/locale/fi/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-22 18:49+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-03-03 17:12+0000\n"
"Last-Translator: Sami Nordlund <sami.nordlund at kolumbus.fi>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fi\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1385146143.0\n"
+"X-POOTLE-MTIME: 1393866765.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -210,341 +210,341 @@ msgstr "Yhdistetty"
msgid "Disconnected"
msgstr "Yhteys katkaistu"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Sulje %s ikkuna"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Sulje ikkuna"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Lopeta %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Ilmoitukset\t Ctrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Näytä ilmoitukset"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projektit\t Ctrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Näytä projektit"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Työpaketit\t Ctrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Näytä työpaketit"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Sii&rrot\t Ctrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Näytä siirrot"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Tilastot\t Ctrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Näytä tilastot"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Levynkäyttö\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Näytä levynkäyttö"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Yksinkertainen &näkymä...\t Ctrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Näytä yksinkertainen näkymä."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Lisää projekti tai tilihallitsija..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Osallistu yhteen tai useampaan yli 30:sta projektista tieteen monilla "
"alueilla"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
-msgstr "&Synkronisoi %s kanssa"
+msgstr "&Synkronoi %s kanssa"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Hae nykyiset asetukset %s:sta"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Liity projektiin..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Lisää projekti"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "L&opeta %s:n käyttö..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Poista tämä tietokone tilihallitsijasta."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Asetukset..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Muuta näytön ja proxyn asetuksia"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Laskenta &asetukset..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Muuta laskennan asetuksia"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Suorita aina"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Salli työ riippumatta asetuksista"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Suorita &asetusten perusteella"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Salli työ asetusten mukaisesti"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Hyllytä"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Keskeytä työ riippumatta asetuksista"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Käytä näytönohjainta aina"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Salli näytönohjaimen työ riippumatta asetuksista"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Käytä näytönohjainta asetusten mukaan"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Salli näytönohjaimen työ asetusten mukaan"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Hyllytä näytönohjain"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Pysäytä näytönohjaimen työ riippumatta asetuksista"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Verkkoyhteys aina saatavilla"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Salli verkon käyttö asetuksista riippumatta"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Verkon käyttö asetusten mukaan"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Salli verkon käyttö asetusten mukaan"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Verkkoyhteys hyllytetty"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Pysäytä BOINCin verkkoyhteys"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Ota yhteys toiseen tietokoneeseen, jossa %s on käytössä"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Valitse tietokone..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Sulje yhdistetty ydinohjelma..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Sulje tällä hetkellä yhdistetty ydinohjelma"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Aja keskusyksikön &suorituskykytestit"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Ajaa BOINC CPU -suorituskykytestit"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Suorita verkkotoiminnot"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Suorittaa kaikki odottavat verkkoyhteystoiminnot"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Lue kokoonpanotiedosto"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Lue kokoonpanotiedot cc_config.xml -tiedostosta ja kaikista app_config.xml "
"-tiedostoista"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Lue paikallinen asetustiedosto"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Lue asetukset global_prefs_override.xml -tiedostosta."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Käynnistä toinen %s -instanssi..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Käynnistä uusi %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Tapahtumaloki...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Näytä diagnostiikkaviestit."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &ohje"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Näytä tietoja %s:sta"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s apua"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Näytä tietoja %s:sta"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr "%s &nettisivu"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Näytä tietoja BOINCista ja %s:sta"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Tietoja %s:sta..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Lisenssi- ja tekijänoikeustiedot."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Tiedosto"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Näytä"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Työkalut"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Toiminta"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "L&isäasetukset"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Apua"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Lopeta %s:n käyttö"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -559,12 +559,12 @@ msgstr ""
"\n"
"Haluatko lopettaa %s:n käytön?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Sulje nykyinen ohjelma..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -573,27 +573,27 @@ msgstr ""
"%s sulkee nykyisen ohjelman ja\n"
"pyytää toista konetta, johon yhteys otetaan."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s on onnistuneesti lisätty %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Otetaan yhteyttä %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Yhteydessä %s:iin (%s)"
@@ -630,26 +630,26 @@ msgstr ""
"\n"
"Käy projektin nettisivuilla ja seuraa siellä olevia ohjeita."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Ollaan yhteydessä BOINC-ohjelmaan. Odota..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Sulje %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "Lopeta %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Verkkoyhteys"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Peruuta"
@@ -807,7 +807,7 @@ msgstr "%s yhteys internetiin on katkaistu."
msgid "%s failed to disconnected from the Internet."
msgstr "%s yhteyden katkaisu internetiin epäonnistui."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -828,7 +828,7 @@ msgstr ""
" - ota yhteyttä ylläpitoon joka lisää sinut 'boinc_master-'\n"
" käyttäjäryhmään."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -837,16 +837,16 @@ msgstr ""
"%s -käyttöoikeuksia ei ole asetettu oikein; asenna %s uudelleen.\n"
"(Virhekoodi %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -854,67 +854,67 @@ msgstr ""
"Tarvitaan uudelleenkäynnistys, jotta BOINC voisi toimia kunnolla.\n"
"Uudelleenkäynnistä tietokoneesi ja yritä uudelleen."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Käyttöjärjestelmä käynnisti BOINC Managerin automaattisesti"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Käynnistä BOINC niin, että vain tehtäväpalkin kuvake on näkyvissä"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Hakemisto, joka sisältää BOINCin ohjelmatiedoston"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINCin datahakemisto"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Konenimi tai IP-osoite"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC porttinumero"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Salasana"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Käynnistä BOINC näillä lisäoptioilla"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "poista käytöstä BOINCin turvakäyttäjät ja käyttöoikeudet"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "laita ulkoasun virheenkorjaus päälle nähdäksesi virheviestit"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "useita BOINC Manager -instansseja sallittu"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Ei käytetä: tilapäinen korjaus bugiin XCode 4.2:ssa"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automaattinen tunnistus)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Tuntematon)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Käyttäjän määrittelemä)"
@@ -941,7 +941,7 @@ msgid "E&xit"
msgstr "L&opeta"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Jatka"
@@ -1100,64 +1100,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeleyn avoin infrastruktuuri verkkolaskentaan"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "virheellinen liukuluku"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "virheellinen numero"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "virheellinen aika, muoto on HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "virheellinen aikaväli, muoto on HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "virheellinen syöttöarvo havaittu"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Vahvistusvirhe"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Lisättävät sovellukset"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "\"%s\" ei ole ajettava sovellus."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Lisää erityissovellus"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Lisättävän sovelluksen nimi?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Lisää erityissovellus"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Sovellusnimien pitää päätyä \"%s\""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "\"%s\" on jo listalla."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1165,11 +1165,11 @@ msgstr ""
"Haluatko tyhjentää kaikki paikalliset asetukset?\n"
"(Tämä ei vaikuta erityissovelluksiin.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Vahvistus"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Asetukset"
@@ -1185,11 +1185,11 @@ msgstr ""
"Napsauta Tyhjennä palauttaaksesi web-pohjaiset asetukset (poislukien "
"erityissovellukset)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Tyhjennä"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "tyhjennä kaikki paikalliset asetukset ja sulje ikkuna"
@@ -1209,7 +1209,7 @@ msgstr "levyn ja muistin käyttö"
msgid "exclusive applications"
msgstr "erityissovellukset"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1222,7 +1222,7 @@ msgid "close the dialog without saving"
msgstr "sulje tallentamatta"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Apua"
@@ -1280,7 +1280,7 @@ msgstr ""
"minuuttiin"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minuuttia"
@@ -1296,7 +1296,7 @@ msgstr "hyllytä työ jos prosessorin käyttö ylittää tämän tason"
msgid "percent (0 means no restriction)"
msgstr "prosenttia (0 tarkoittaa ei rajoitusta)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Joka päivä aikavälillä"
@@ -1304,8 +1304,8 @@ msgstr "Joka päivä aikavälillä"
msgid "start work at this time"
msgstr "aloita työ tähän aikaan"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "ja"
@@ -1313,43 +1313,43 @@ msgstr "ja"
msgid "stop work at this time"
msgstr "lopeta työ tähän aikaan"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(ei rajoitusta jos yhtä suuret)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Viikonpäivän ohitus:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "valitse määritelläksesi tunnit tälle päivälle"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Maanantai"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Tiistai"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Keskiviikko"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Torstai"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Perjantai"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Lauantai"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Sunnuntai"
@@ -1370,9 +1370,9 @@ msgstr "Moniprosessorikoneissa käytä enintään"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% prosessoreista (0 tarkoittaa jätä huomiotta)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Käytä enintään"
@@ -1381,72 +1381,72 @@ msgstr "Käytä enintään"
msgid "% CPU time"
msgstr "% prosessoriajasta"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Yleiset asetukset"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Suurin latausnopeus"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "Ktavua/sek."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Suurin lähetysnopeus"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Siirrä enintään"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Megatavua"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "joka"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "vrk"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Minimityömäärä"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "Yritä pitää työpaketteja näin monen päivän edestä"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Suurin lisämäärä työtä"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Pidä lisäksi työpaketteja näin monen päivän edestä"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Ohita kuvatiedoston varmennus"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "valitse tämä jos operaattorisi muokkaa kuvatiedostoja"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Yhteysasetukset"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Pyydä vahvistus ennen internet-yhteyden avaamista"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1454,11 +1454,11 @@ msgstr ""
"jos valittu, vahvistusikkuna näytetään ennen kuin yritetään yhteyttä "
"internetiin"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Katkaise yhteys lopuksi"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1466,149 +1466,149 @@ msgstr ""
"jos valittuna, BOINC katkaisee verkkoyhteyden lopuksi\n"
"(koskee vain puhelinverkkoyhteyksiä)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Verkon käyttö sallittu"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "verkon käytön alkamistunti"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "verkon käytön lopetustunti"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Levyn käyttö"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "suurin levytila, jota BOINC käyttää (gigatavuina)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigatavua levytilaa"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Jätä vähintään"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC jättää vähintään tämän verran levytilaa vapaaksi (gigatavuina)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigatavua vapaata levytilaa"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC käyttää enintään tämän verran kokonaislevytilasta prosentteina"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% kokonaislevytilasta"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Paketin tarkistuspiste levylle joka"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "sekunti"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% sivutustiedostosta (näennäismuistista)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Muistin käyttö"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% tietokoneen ollessa käytössä"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% tietokoneen ollessa jouten"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Jätä sovellukset muistiin hyllytyksen ajaksi"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "jos valittuna, hyllytetyt työt jätetään muistiin"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Hyllytä prosessori- ja verkkokäyttö kun nämä sovellukset ovat käynnissä:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Lisää..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Lisää sovellus tähän listaan"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Poista"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Poista sovellus tästä listasta"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Lisäasetukset, katso "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Tapahtumaloki"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekti"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Aika"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Viesti"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Näytä vain tämä projekti"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Kopioi &kaikki"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopioi kaikki viestit leikepöydälle."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Kopioi &valitut"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1617,7 +1617,7 @@ msgstr ""
"pitämällä shift- tai command-näppäintä pohjassa samalla kun napsautat "
"viestiä."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1626,24 +1626,24 @@ msgstr ""
"pitämällä shift- tai control-näppäintä pohjassa samalla kun napsautat "
"viestiä."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Sulje"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Hae apua %s:iin"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Näytä kaikki &viestit"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Näytä kaikkien projektien viestit"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Näytä vain valitun projektin viestit"
@@ -1696,7 +1696,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Muista valinta äläkä näytä tätä uudelleen."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Peruuta"
@@ -1704,223 +1704,223 @@ msgstr "&Peruuta"
msgid "Don't show this dialog again."
msgstr "Älä näytä tätä uudelleen."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Älä lataa työtä prosessorille "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Projektiasetukset"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Tilihallitsijan asetukset"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Projektilla ei ole sovelluksia prosessorille "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " työn latausta lykätty"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " työn latauksen lykkäysaikaväli"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Tietoja projektista "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Yleiset"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL-pääosoite"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Käyttäjänimi"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Tiiminimi"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Resurssien jako"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "RPC-aikataulutusta lykätty"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Tiedoston latausta lykätty"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Tiedoston lähetystä lykätty"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Tietokoneen tunniste"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Ei prosessorikuormittava"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "kyllä"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Hyllytetty käyttöliittymän kautta"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "ei"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Älä pyydä lisää työtä"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Pyyntö aikatauluttajalle käynnissä"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Väliaikaviesti odottaa"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Koneen sijainti"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "oletus"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Lisätty tilihallitsijan kautta"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Poista pakettien valmistuttua"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Päättynyt"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Pisteet"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Käyttäjä"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Kone"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Aikataulutus"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Aikataulutusprioriteetti"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Korjauskerroin"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Tiedot työpaketista "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Sovellus"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Työpaketin nimi"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nimi"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Tila"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Vastaanotettu"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Raportoinnin takaraja"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Resurssit"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Arvioitu laskentakoko"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Suoritinaika viim. tarkistuspisteessä"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Suoritinaika"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Kulunut aika"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Arvioitu jäljellä oleva aika"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Suoritettu osuus"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Virtuaalimuistin koko"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Työjoukon koko"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Hakemisto"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Prosessin tunniste"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Paikallinen: "
@@ -2008,7 +2008,7 @@ msgstr "Jätä tyhjäksi jos ei tarvita"
msgid "User Name:"
msgstr "Käyttäjänimi:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Salasana:"
@@ -2068,12 +2068,12 @@ msgstr ""
"%s:n kieli on vaihdettu. Jotta muutos tulee voimaan, %s pitää käynnistää "
"uudelleen."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Valitse tietokone"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2082,7 +2082,7 @@ msgstr ""
"Toinen instanssi %s:sta on jo käynnissä \n"
"tässä koneessa. Valitse ohjelma seurataksesi."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Konenimi:"
@@ -2278,207 +2278,207 @@ msgstr "Tutkimus"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Hanki tietoja World Community Grid -projekteista"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Käynnistetään ohjelma"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Otetaan yhteys ohjelmaan"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Noudetaan järjestelmätila, odota..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Puuttuva sovellus"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr "Lataa ja asenna CoRD-sovellus osoitteesta http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "akkukäytöllä"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "tietokone on käytössä"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "käyttäjän pyytämä"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "aika päivästä"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "suorituskykytestit käynnissä"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "tarvitaan levytilaa - tarkista asetukset"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "tietokone ei ole käytössä"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "käynnistetään"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "erityisohjelma käynnissä"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU varattu"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "verkon latausraja ylitetty"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "käyttöjärjestelmän pyytämä"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "tuntematon syy"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "Näytönohjain puuttuu, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Uusi"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Lataus epäonnistui"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Ladataan"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (hyllytetty - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projekti on käyttäjän hyllyttämä"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Tehtävä on käyttäjän hyllyttämä"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Hyllytetty - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU hyllytetty - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Odottaa muistia"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Odottaa jaettua muistia"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Suoritetaan, korkea prioriteetti"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Suoritetaan"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (ei prosessorikuormittava)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Odottaa suorittamista"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Valmiina aloitettavaksi"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Odottaa ajoittamista: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Odottaa ajoittamista)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Odottaa pääsyä verkkoon)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Laskentavirhe"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Lähetys epäonnistui"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Lähetetään"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Käyttäjän hylkäämä"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Projektin hylkäämä"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Hylätty: ei ehditty aloittaa ennen takarajaa"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Hylätty: levyraja saavutettu"
# 78%
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Hylätty: suoritusajan raja saavutettu"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Hylätty: muistiraja saavutettu"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Hylätty"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Hyväksytty"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Valmiina raportoitavaksi"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Virhe: virheellinen tila \"%d\""
@@ -2533,56 +2533,56 @@ msgstr "Tarkista käyttäjänimi ja salasana."
msgid "Check the email address and password, and try again."
msgstr "Tarkista sähköpostiosoite ja salasana."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "lisää..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Kaikki"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Valitse projekti"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Valitse projekti listasta napsauttamalla nimeä tai kirjoita sen URL-osoite."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategoriat:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projektit:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Projektitiedot"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Tutkimusala:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organisaatio:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Nettisivu:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Tuetut järjestelmät:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Projektin URL-osoite:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2590,7 +2590,7 @@ msgstr ""
"Tällä projektilla ei ehkä ole työtä tietokoneesi tyypille. Lisätäänkö se "
"kuitenkin?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Olet jo liittynyt tähän projektiin. Valitse toinen projekti."
@@ -2598,11 +2598,11 @@ msgstr "Olet jo liittynyt tähän projektiin. Valitse toinen projekti."
msgid "Communicating with project."
msgstr "Ollaan yhteydessä projektiin."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Palvelimelta ei löydy tarvittavia tiedostoja."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Palvelimella on tapahtunut virhe."
@@ -2711,7 +2711,7 @@ msgid "I agree to the terms of use."
msgstr "Hyväksyn käyttöehdot."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "En hyväksy käyttöehtoja."
#: UnavailablePage.cpp:183
@@ -2801,7 +2801,7 @@ msgstr "\"%s\" ei sisällä kunnollista konenimeä."
msgid "'%s' does not contain a valid path."
msgstr "\"%s\" ei sisällä kunnollista polkua."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Komennot"
@@ -2854,7 +2854,7 @@ msgstr "Noudetaan ilmoituksia, odota..."
msgid "There are no notices at this time."
msgstr "Tällä hetkellä ei ole ilmoituksia."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Ilmoitukset"
@@ -2871,7 +2871,7 @@ msgstr ""
"sekä mahdollisesti lisää paketteja."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3106,135 +3106,135 @@ msgstr "vapaana: "
msgid "used by other programs: "
msgstr "muiden ohjelmien käytössä: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Käyttäjän kokonaispisteet"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Käyttäjän keskiarvo"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Koneen kokonaispisteet"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Koneen keskiarvo"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Viimeisin päivitys: %.0f päivää sitten"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Näytä käyttäjän kokonaispisteet"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Näytä käyttäjän kokonaispisteet"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Näytä käyttäjän keskiarvo"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Näytä käyttäjän keskimääräiset pisteet"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Näytä koneen kokonaispisteet"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Näytä koneen kokonaispisteet"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Näytä koneen keskiarvo"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Näytä koneen keskimääräiset pisteet"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Edellinen projekti"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Näytä edellisen projektin taulukko"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Seuraava projekti >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Näytä seuraavan projektin taulukko"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Piilota projektilista"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Käytä koko alue grafiikalle"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Näkymä"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Yksi projekti"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Näytä yksi kaavio valitulle projektille"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Kaikki projektit (erikseen)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Näytä kaikki projektit, yksi kaavio jokaiselle"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Kaikki projektit (yhdessä)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Näytä kaikki projektit yhdellä kaaviolla"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Kaikki projektit (summattu)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Näytä kaikki projektit summattuna yhdellä kaaviolla"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Tilastot"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Päivitetään taulukkoja..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Näytä projektilistaus"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Käyttää pienempää aluetta grafiikalle"
@@ -3401,10 +3401,6 @@ msgstr "Jäljellä (arvio)"
msgid "Deadline"
msgstr "Takaraja"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nimi"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Paketit"
@@ -3555,40 +3551,40 @@ msgstr "Haluatko todella peruuttaa?"
msgid "Question"
msgstr "Kysymys"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Laajennettu näkymä...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Näytä laajennettu graafinen käyttöliittymä."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Ulkoasu"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Valitse käyttöliittymän ulkomuoto."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Oletus"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Hyllytä laskenta"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Jatka laskentaa"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Avaa ikkuna katsoaksesi ilmoituksia projektilta tai BOINCilta"
@@ -3610,117 +3606,122 @@ msgid "Click OK to set preferences."
msgstr "Napsauta OK muuttaaksesi asetuksia."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Napsauta Tyhjennä palauttaaksesi web-pohjaiset asetukset."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Napsauta Tyhjennä palauttaaksesi nettipohjaiset asetukset kaikkiin alla "
+"oleviin asetuksiin."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Lisää asetuksia kohdassa Laskenta-asetukset "
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "laajennetussa näkymässä."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"Lisää asetuksia valitsemalla Laskenta-asetukset laajennetussa näkymässä."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Salli työ vain välillä:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Ota internetyhteys vain välillä:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Älä käytä enempää kuin:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "levytilasta"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "prosessoreista"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Suorita oltaessa akkukäytöllä?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Suorita, kun on ollut jouten:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Tyhjennä kaikki ylläolevat paikalliset asetukset ja sulje ikkuna"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Milloin vain"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 Mt"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 Mt"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 Mt"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 Gt"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 Gt"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 Gt"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 Gt"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 Gt"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 Gt"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 Gt"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d Mt"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f Gt"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Suorita aina)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Haluatko tyhjentää kaikki paikalliset asetukset?\n"
@@ -3730,7 +3731,7 @@ msgstr "Lisää projekti"
#: sg_ProjectPanel.cpp:73
msgid "Synchronize"
-msgstr "Synkronisoi"
+msgstr "Synkronoi"
#: sg_ProjectPanel.cpp:74
msgid "Work done for this project"
@@ -3738,7 +3739,7 @@ msgstr "Tälle projektille tehty työ"
#: sg_ProjectPanel.cpp:77
msgid "Synchronize projects with account manager system"
-msgstr "Synkronisoi projektit tilihallitsijajärjestelmän kanssa"
+msgstr "Synkronoi projektit tilihallitsijajärjestelmän kanssa"
#: sg_ProjectPanel.cpp:124
msgid "Select a project to access with the controls below"
@@ -3779,116 +3780,116 @@ msgstr ""
"Haluatko varmasti hylätä paketin \"%s\"?\n"
"(Suoritettu: %.1lf%%, Tila: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Sinulla ei ole yhtään projektia. Lisää projekti."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Ei saatavissa"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Paketit:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Valitse käsiteltävä paketti"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
-msgstr ""
+msgstr "Mistä:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Tämän paketin edistyminen"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Paketin komennot"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Ponnahdusvalikko tähän pakettiin liittyvistä komennoista"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Sovellus: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Sovellus: Ei saatavilla"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Ei saatavilla"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Kulunut: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Jäljellä (arvio): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Tila: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Noudetaan nykyinen tila."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Ladataan työtä palvelimelta."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Laskenta hyllytetty: kone akkukäytöllä."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Laskenta hyllytetty: käyttäjä aktiivinen."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Laskenta hyllytetty: käyttäjä tauotti laskennan."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Laskenta hyllytetty: aika päivästä."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Laskenta hyllytetty: suorituskykytestit."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Laskenta hyllytetty."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Odotetaan yhteydenottoa projektin palvelimeen."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Haetaan nykyinen tila"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Suoritettavaa työtä ei ole"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Yhteyttä ydinohjelmaan ei saada"
@@ -3930,6 +3931,24 @@ msgstr "Näytä kaikki"
msgid "Quit %s"
msgstr "Sulje %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "En hyväksy käyttöehtoja."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Napsauta Tyhjennä palauttaaksesi web-pohjaiset asetukset."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Lisää asetuksia kohdassa Laskenta-asetukset "
+
+#~ msgid "the Advanced View."
+#~ msgstr "laajennetussa näkymässä."
+
+#~ msgid "Workunit name"
+#~ msgstr "Työpaketin nimi"
+
+#~ msgid "invalid float"
+#~ msgstr "virheellinen liukuluku"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Näytä laajennettu graafinen käyttöliittymä."
diff --git a/locale/fi/BOINC-Project-Generic.po b/locale/fi/BOINC-Project-Generic.po
index 844ac6b..7eb8923 100644
--- a/locale/fi/BOINC-Project-Generic.po
+++ b/locale/fi/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-25 11:56+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-21 20:27+0000\n"
"Last-Translator: Sami Nordlund <sami.nordlund at kolumbus.fi>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fi\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385380598.0\n"
+"X-POOTLE-MTIME: 1393014450.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "English"
@@ -191,7 +191,7 @@ msgstr "Hae foorumeista"
msgid "Advanced search"
msgstr "Tarkennettu haku"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Yksityisviestit"
@@ -201,8 +201,8 @@ msgstr "Yksityisviestit"
msgid "Questions and Answers"
msgstr "Kysymykset ja vastaukset"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "Lukematon"
msgid "Message %1"
msgstr "Viesti %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "piilotettu"
@@ -480,7 +480,7 @@ msgstr "Piilotettuun ketjuun ei voi kirjoittaa."
msgid "Thread"
msgstr "Viestiketju"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Viestit"
@@ -489,7 +489,7 @@ msgstr "Viestit"
msgid "Views"
msgstr "Katsottu"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Viimeisin viesti"
@@ -527,7 +527,7 @@ msgid "Home"
msgstr "Koti"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Työ"
@@ -537,7 +537,7 @@ msgstr "Koulu"
#: ../inc/host.inc:59
msgid "Mobile"
-msgstr ""
+msgstr "Mobiili"
#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
@@ -593,9 +593,9 @@ msgid "Created"
msgstr "Luotu"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -771,7 +771,7 @@ msgstr "Viimeksi yhteydessä"
msgid "Computer info"
msgstr "Tietokoneen tiedot"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Sija"
@@ -780,9 +780,9 @@ msgstr "Sija"
msgid "Avg. credit"
msgstr "Keskim. pisteet"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -871,8 +871,8 @@ msgstr "Vain kuukauden aikana yhteydessä olleet koneet"
msgid "Computer ID"
msgstr "Tietokoneen tunniste"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -908,7 +908,7 @@ msgstr "Saapuneet"
msgid "Write"
msgstr "Kirjoita"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Lähetä yksityisviesti"
@@ -1669,7 +1669,7 @@ msgstr "Raportointiaika<br />tai takaraja"
msgid "explain"
msgstr "selite"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Tila"
@@ -1761,9 +1761,9 @@ msgstr "Hakusanat"
msgid "Find teams with these words in their names or descriptions"
msgstr "Etsi tiimejä, joiden nimessä tai kuvauksessa ovat nämä sanat"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1771,7 +1771,7 @@ msgstr "Etsi tiimejä, joiden nimessä tai kuvauksessa ovat nämä sanat"
msgid "Country"
msgstr "Maa"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tiimin tyyppi"
@@ -1799,8 +1799,8 @@ msgstr "Sinun pyytämäsi"
msgid "founder response deadline is %1"
msgstr "perustajan vastauksen takaraja on %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Ei mikään"
@@ -1824,27 +1824,27 @@ msgstr "Kuvaus"
msgid "Web site"
msgstr "Nettisivu"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Projektikohtaiset tilastot"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tyyppi"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Keskustelupalsta"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Viestiketjut"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Liity tähän tiimiin"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1852,79 +1852,79 @@ msgstr ""
"Huom: jos sallit sähköpostin lähettämisen projektin asetuksissa, tiimiin "
"liittyessä sen perustaja saa sähköpostiosoitteesi."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Ei ota uusia jäseniä"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Pyyntö vaihtaa perustaja"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Vastaus %1 mennessä"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Tiimin perustajan vaihto"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Jäsenet"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Perustaja"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Ylläpitäjät"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Uusia jäseniä viimeisen vrk:n aikana"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Jäseniä kaikkiaan"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "katso"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktiivisia jäseniä"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Jäsenet, joilla pisteitä"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Ylläpitäjä"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Edelliset %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Seuraavat %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Tiimiä ei ole."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Toiminto vaatii perustajan oikeudet."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Toiminto vaatii ylläpitäjän oikeudet"
@@ -1937,7 +1937,7 @@ msgstr ""
"tulevat pian ylikirjoitetuksi. Muokkaa sen sijaan %1BOINC-laajuista tiimiä%"
"2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1945,47 +1945,47 @@ msgstr ""
"%1Yksityisyydestä%2: jos luot tiimin, projektisi asetukset (kuten resurssien "
"jako) näkyvät kaikille."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Tiimin nimi, tekstiversio"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Älä käytä HTML-tageja."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Tiimin nimi, HTML-versio"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Voit käyttää %1HTML-tageja rajoitetusti%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Jätä tämä kohta tyhjäksi, jos et osaa HTML:ää."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Tiimin nettisivun osoite, jos on"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "ilman \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Tämä URL linkitetään tiimin sivulta tälle sivulle."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Tiimin kuvaus"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Sallii uudet jäsenet?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Käyttäjäprofiili"
@@ -2018,7 +2018,7 @@ msgid "Computers on this account"
msgstr "Tämän tilin tietokoneet"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Katso"
@@ -2035,8 +2035,8 @@ msgstr "Projektikohtaiset tilastot"
msgid "Account"
msgstr "Tili"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Tiimi"
@@ -2065,7 +2065,7 @@ msgstr "Tilin tiedot"
msgid "Email address"
msgstr "Sähköpostiosoite"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2073,7 +2073,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postinumero"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 jäsen alkaen"
@@ -2093,7 +2093,7 @@ msgstr "salasana"
msgid "other account info"
msgstr "muu tilitieto"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Käyttäjä-ID"
@@ -2138,96 +2138,96 @@ msgstr "%1 asetukset"
msgid "Community"
msgstr "Yhteisö"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Poista"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Luo"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profiili"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 viestiä"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Ilmoitukset"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Irrottaudu tiimistä"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Ylläpitäjä"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(perustajuuden vaihtopyyntö odottaa)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Tiimin jäsen"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "etsi tiimi"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Perustaja mutta ei jäsen tiimissä"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Etsi ystäviä"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Ystävät"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Tietokoneet"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Lahjoittaja"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Yhteydenotto"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Tämä henkilö on ystävä"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Peruuta ystävyys"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Pyyntö odottaa"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Lisää ystäväksi"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "käyttäjänimen alussa tai lopussa ei saa olla välilyöntiä"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "käyttäjänimi ei saa olla tyhjä"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "käyttäjänimi ei saa sisältää HTML-tageja"
@@ -2305,7 +2305,7 @@ msgstr "Tietokantaan ei saada yhteyttä - yritä myöhemmin uudelleen"
msgid "Unable to select database - please try again later"
msgstr "Tietokannan valinta ei onnistu - yritä myöhemmin uudelleen"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Pysy kirjautuneena tällä tietokoneella"
@@ -2511,7 +2511,7 @@ msgstr "luo tiimi tai liity tiimiin"
msgid "User of the day"
msgstr "Päivän käyttäjä"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Palvelimen tila"
@@ -5594,135 +5594,135 @@ msgstr "Ei käynnissä"
msgid "Disabled"
msgstr "Sammutettu"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Projektin tila"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Palvelimen ohjelmistoversio: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Ohjelma"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Kone"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "tietokantaa käyttävät sivut"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "lähettävä/vast.ottava palvelin"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "aikatauluttaja"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Käynnissä:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Ohjelma toimii normaalisti"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Ei käynnissä:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Ohjelma sammui tai projekti on suljettu"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Sammutettu:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Ohjelma on sammutettu"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Laskennan tila"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Tietokantapalvelimeen ei saada yhteyttä"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tehtäviä lähetettävänä"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Suorituksessa olevat"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Varmennusta odottavat työpaketit"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Yhdistämistä odottavat työpaketit"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Poistoa odottavat työpaketit"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Poistoa odottavat paketit"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Siirtokasautuma (tuntia)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Käyttäjiä"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "joilla pisteitä hiljattain"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "joilla pisteitä"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "viimeisen vrk:n aikana rekisteröityneet"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "tämänhetkiset GigaFLOPSit"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tehtävät sovelluksittain"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "sovellus"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "lähettämättä"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "laskennassa"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "viim. 100 paketin keskim. suoritusaika ed. tunnillta (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "käyttäjiä edellisen 24 tunnin aikana"
@@ -5994,6 +5994,10 @@ msgstr "Uusi perustaja?"
msgid "Change founder"
msgstr "Vaihda perustaja"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Tiimiin siirrettäviä käyttäjiä ei ole."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Tiimille pitää valita jokin nimi"
@@ -6732,7 +6736,7 @@ msgstr "Käyttäjää ei ole."
#: ../user/validate_email_addr.php:49
msgid "Error in URL data - can't validate email address"
-msgstr "Virhe URLissa - sähköpostiosoitetta ei voi vahvistaa"
+msgstr "Virhe URL-osoitteessa - sähköpostiosoitetta ei voi vahvistaa"
#: ../user/validate_email_addr.php:54
msgid "Database update failed - please try again later."
diff --git a/locale/fi/BOINC-Setup.mo b/locale/fi/BOINC-Setup.mo
index e69a5b0..2e604a0 100644
Binary files a/locale/fi/BOINC-Setup.mo and b/locale/fi/BOINC-Setup.mo differ
diff --git a/locale/fi/BOINC-Setup.po b/locale/fi/BOINC-Setup.po
index 7537e47..4fd46f8 100644
--- a/locale/fi/BOINC-Setup.po
+++ b/locale/fi/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-11-22 18:42+0000\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-01-31 12:03+0000\n"
"Last-Translator: Sami Nordlund <sami.nordlund at kolumbus.fi>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fi\n"
@@ -19,7 +19,7 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1385145745.0\n"
+"X-POOTLE-MTIME: 1391169782.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
@@ -27,11 +27,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr "Tämä %s -versio vaatii järjestelmän 10.5 tai uudemman."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Kyllä"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Ei"
@@ -61,15 +61,15 @@ msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
"Haluatko asettaa %s näytönsäästäjäksi kaikille tämän Macin %s -käyttäjille?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Käyttöoikeusvirhe uudelleenkäynnistyksen jälkeen"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -77,7 +77,7 @@ msgstr ""
"Poistaminen voi kestää useita minuutteja.\n"
"Ole kärsivällinen."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -88,21 +88,29 @@ msgstr ""
"\n"
"Tämä poistaa ohjelmatiedostot mutta ei koske %s datatiedostoihin."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Peruttu: %s ei koskettu."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Tapahtui virhe: virhekoodi %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "käyttäjän nimi"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"Haluatko poistaa myös VirtualBoxin tietokoneesta?\n"
+"(VirtualBox asennettiin BOINCin kanssa.)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -121,7 +129,7 @@ msgstr ""
"jokaiselta käyttäjältä tiedosto\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -131,11 +139,11 @@ msgstr ""
"Anna ylläpitäjän salasana poistaaksesi %s kokonaan tietokoneesta.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Peruuta"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Jatka..."
diff --git a/locale/fi/BOINC-Web.mo b/locale/fi/BOINC-Web.mo
index 51c1d85..2cf2289 100644
Binary files a/locale/fi/BOINC-Web.mo and b/locale/fi/BOINC-Web.mo differ
diff --git a/locale/fi/BOINC-Web.po b/locale/fi/BOINC-Web.po
index fa4d569..4d6ac5c 100644
--- a/locale/fi/BOINC-Web.po
+++ b/locale/fi/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-11-16 09:11+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-21 20:06+0000\n"
"Last-Translator: Sami Nordlund <sami.nordlund at kolumbus.fi>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fi\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1384593098.0\n"
+"X-POOTLE-MTIME: 1393013199.0\n"
#: docutil.php:21
msgid "Search"
@@ -402,7 +402,7 @@ msgstr "BOINC sijaitsee Kalifornian yliopistolla, Berkeleyssä"
#: projects.inc:14
msgid "Distributed sensing"
-msgstr ""
+msgstr "Hajautettu anturitekniikka"
# 78%
#: projects.inc:19
@@ -453,16 +453,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Kognitiivinen tiede ja tekoäly"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Yksityinen"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Tekoäly"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -473,19 +473,19 @@ msgstr ""
"käyttää semanttisia verkkoja, sanojen vartaloita ja osia puhetietokannoista "
"jäljitelläkseen ihmisen käyttäytymistä keskustelutilanteissa."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologia ja lääketiede"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "University College Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Malarialääkkeen löytäminen"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -498,15 +498,15 @@ msgstr ""
"Uusien lääkkeiden tulisi kohdistua loisen UUSIIN proteiineihin. "
"FightMalaria at Home -projekti tähtää näiden uusien kohteiden löytämiseen."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Karlsruhen yliopisto (Saksa)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Proteiinirakenteiden ennakointi"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -521,15 +521,15 @@ msgstr ""
"liittyviä sairauksia ja kehittämään uusia lääkkeitä biologisesti tärkeiden "
"proteiinien kolmiulotteisten rakenteiden pohjalta."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Delawaren yliopisto"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Proteiinitutkimus - ligandin vuorovaikutukset"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -540,15 +540,15 @@ msgstr ""
"Projekti tähtää tiedon lisäämiseen proteiiniligandien vuorovaikutuksista ja "
"sitä myöten löytää uusia lääkkeitä."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Barcelona Biomedical Research Park (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Proteiinien molekyylisimuloinnit"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -560,15 +560,15 @@ msgstr ""
"biolääketieteelliset sovellukset tulivat mahdollisiksi antaen uuden roolin "
"bioinformatiikalle biolääketieteellisessä tutkimuksessa."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Geneettisten sidonnaisuuksien tutkimus"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -578,16 +578,16 @@ msgstr ""
"geenejä, jotka aiheuttavat tietyntyyppistä diabetestä, kohonnutta "
"verenpainetta, syöpää, skitsofreniaa ja muita sairauksia."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Marylandin yliopiston bioinformatiikan keskus"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Biologiset tieteet"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -599,15 +599,15 @@ msgstr ""
"bakteeri-, plasmidi- ja virusproteiinisarjoja; ja biologista "
"monimuotoisuutta luonnonsuojelualueilla. "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Sveitsin trooppisten tautien laitos"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologia"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -625,15 +625,15 @@ msgstr ""
"vaaditaan suuri ihmispopulaatio, jossa on lukuisia biologisiin ja "
"sosiaalisiin tekijöihin liittyviä parametreja. "
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Washingtonin yliopisto"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologia"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -649,11 +649,11 @@ msgstr ""
"suunnittelussa taistelussa HIVia, malariaa, syöpää ja Alzheimerin tautia "
"vastaan"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Wienin yliopisto"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -663,19 +663,19 @@ msgstr ""
"tietokannan, jolla on merkittävä rooli monissa bioinformatiikan "
"tutkimusprojekteissa."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Geotieteet"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Oxfordin yliopisto"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Ilmastotutkimus"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -694,16 +694,25 @@ msgstr ""
"muutoksille. Näin voidaan tutkia, miten ilmasto muuttuu seuraavan vuosisadan "
"aikana eri skenaarioiden mukaan."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomia, fysiikka ja kemia"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Fysikaalinen tiede"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Konetekniikka"
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr "Lasketaan optimaalista rakennetta nk. 52 tangon ristikkopalkille."
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomia"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -712,16 +721,21 @@ msgid ""
"star formation history) on a resolved pixel-by-pixel basis using spectral "
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
+"Yhdistämme GALEX:n, Pan-STARRS1:n ja WISE:n spektrit muodostaaksemme "
+"moniaaltopituisen UV-optis-infrapunagalaktisen kartaston lähiuniversumista. "
+"Mittaamme fysikaalisia parametreja (kuten tähden pintatiheyden, "
+"muodostumisnopeuden ja historia) käyttämällä SED:iin sovitettuja tekniikoita "
+"hajautetussa laskennassa."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Texasin yliopisto, Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Kemia"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -744,11 +758,11 @@ msgstr ""
"kiinnostunut laskemaan systeemin pitkän ajan dynamiikkaa."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Illinoisin yliopisto, Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -758,11 +772,11 @@ msgstr ""
"universumiamme sekä löytää malleja, jotka ovat sopusoinnussa hiukkasfysiikan "
"tietojen kanssa."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Rensselaerin teknillinen yliopisto"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -771,11 +785,11 @@ msgstr ""
"Milkyway at Homen tavoitteena on luoda erittäin tarkka kolmiulotteinen malli "
"linnunradasta käyttäen Sloan Digital Sky Surveyn keräämää aineistoa."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Leidenin yliopisto, Hollanti"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -791,15 +805,15 @@ msgstr ""
"nestemäistä argonia tai testaamaan ideaalikaasulain oikeellisuutta tekemällä "
"simulaatioita verkossa."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Wisconsinin yliopisto - Milwaukee, Max Planck -instituutti"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofysiikka"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -813,15 +827,15 @@ msgstr ""
"tukenut American Physical Society (APS) sekä joukko kansainvälisiä "
"järjestöjä."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Euroopan ydintutkimuskeskus)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fysiikka"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -835,7 +849,7 @@ msgstr ""
"rakennettu laite, jolla tutkitaan hiukkasten ominaisuuksia. LHC at home ajaa "
"simulaatioita, joilla parannetaan LHC:n suunnittelua ja sen ilmaisimia."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -845,15 +859,15 @@ msgstr ""
"tapahtumien fysiikan simulointiin. Tämä vaatii, että koneellesi on "
"asennettu VirtualBox"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Kalifornian yliopisto, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofysiikka, astrobiologia"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -868,15 +882,15 @@ msgstr ""
"Sellaisia signaaleja ei tiedetä esiintyvän luonnollisesti, joten signaalin "
"havaitseminen voi tarjota todisteen maan ulkopuolisesta teknologiasta."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Bielefeldin ammattikorkeakoulu"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Kemiantekniikka ja nanoteknologia"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -888,19 +902,19 @@ msgstr ""
"lääketieteellisissä sovelluksissa (kuten kemoterapiassa) ja "
"bioteknologiassa."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Useita sovelluksia"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Kiinan tiedeakatemia"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Fysiikka, biokemia ja muita"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -909,11 +923,11 @@ msgstr ""
"CAS at homen tarkoituksena on rohkaista ja avustaa tutkijoita Kiinassa ottamaan "
"käyttöön hajautettu laskenta ja sen ajatus."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matematiikka, fysiikka, evoluutio"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -921,16 +935,16 @@ msgstr ""
"Yoyo at home toimii välikappaleena BOINCin ja useiden projektien kuten ECM, "
"Muon, Evolution at home ja distributed.net välillä"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
"MTA-SZTAKI Rinnakkaisten ja hajautettujen järjestelmien laboratorio (Unkari)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Eurooppalaiset tutkimusprojektit"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -942,28 +956,28 @@ msgstr ""
"vapaaehtoisten käsiteltäväksi. Tieteelliset projektit sisältävät mm. "
"matematiikkaa, fysiikkaa ja biologiaa."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Espanjalaiset yliopistot ja tutkimuskeskukset"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Erilaisia espanjalaisia tutkimusprojekteja"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Tutkimusta fysiikassa, materiaalitekniikassa ja biolääketieteessä"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Corporate Citizenship"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
"Lääketieteellistä, ympäristöntutkimusta ja muita humanitaarisia tutkimuksia"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -975,27 +989,27 @@ msgstr ""
"trooppisia ja muita tutkimattomia tauteja, aurinkoenergiaa ja puhdasta "
"vettä."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matematiikka, laskenta ja pelit"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Tietojenkäsittelytiede"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Matematiikka, fysiikka, keinoäly"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Kvanttilaskennan simulointi; Goldbachin konjektuuri."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Kryptografia"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1003,25 +1017,25 @@ msgstr ""
"Yrityksenä purkaa 3 alkuperäistä Enigma-viestiä. Signaalit on kaapattu "
"Pohjois-Atlantilla vuonna 1942 ja niiden uskotaan olevan murtamattomia."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matematiikka"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
"Tutkimus Collatzin konjektuurista, ratkaisematon konjektuuri matematiikassa"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Kalifornian osavaltion yliopisto, Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Suurten kokonaislukujen jakaminen tekijöihin"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1036,7 +1050,7 @@ msgstr ""
"kokonaisluvun jakamisesta alkutekijöihinsä, kuten esim. 15 = 3 * 5 tai 35 = "
"5 * 7. NFS at Home suorittaa samaa satoja merkkejä pitkillä kokonaisluvuilla."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1044,11 +1058,11 @@ msgstr ""
"Vilnan Gediminasin teknillinen yliopisto ja Kaunasin teknillinen yliopisto "
"(Liettua)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Ohjelmistotestaus"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1059,11 +1073,11 @@ msgstr ""
"(VGTU) tutkijoille ja muille Liettuan akatemian laitoksille. Nykyiset "
"sovellukset käsittelevät Monte-Carlo -pohjaista ohjelmistotestausta."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Leidenin yliopiston matematiikan laitos / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1082,7 +1096,7 @@ msgstr ""
"ongelmista. Jos se todistetaan oikeaksi, moneen muuhun ongelmaan saadaan "
"vastaus siitä."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1090,11 +1104,11 @@ msgstr ""
"Primegridillä on useita projekteja, joilla etsitään suurten alkulukujen eri "
"muotoja sekä suurimman tunnetun alkuluvun etsintä."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "RheinMainin ammattikorkeakoulu"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1102,7 +1116,7 @@ msgstr ""
"Löytää poikkeukset kahteen konjektuuriin, jotka liittyvät alkulukujen "
"tunnistamiseen"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1119,6 +1133,10 @@ msgstr "Kommentti"
msgid "News is available as an %sRSS feed%s"
msgstr "Uutiset saatavana %sRSS-syötteenä%s"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomia, fysiikka ja kemia"
+
#~ msgid "Download BOINC + Virtualbox"
#~ msgstr "Lataa BOINC + Virtualbox"
diff --git a/locale/fr/BOINC-Android.po b/locale/fr/BOINC-Android.po
index 9ef55cb..eea7c53 100644
--- a/locale/fr/BOINC-Android.po
+++ b/locale/fr/BOINC-Android.po
@@ -2,1134 +2,1129 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2014-02-04 22:00+0000\n"
+"Last-Translator: Jerome <jerome.cadet at pobox.com>\n"
"Language-Team: fr <LL at li.org>\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1391551239.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Chargement en cours! Veuillez patienter..."
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Choisissez un projet:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Ajouter un projet à l'aide d'une URL"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Saisir l'URL du projet:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Ajouter un projet"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Veuillez saisir l'URL du projet"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Ajouter un gestionnaire de compte"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "Pas de connexion internet"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Accès au serveur du projet en cours..."
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Logo du projet."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Zone générale:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Zone spécifique:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Description:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Accueil:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Site web:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Androïd:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
-msgstr ""
+msgid "This project supports Android devices"
+msgstr "Ce projet supporte les appareils sous Android"
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
-msgstr ""
+msgid "This project does not support Android devices"
+msgstr "Ce projet ne supporte pas les appareils sous Android"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Conditions d'utilisation pour"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"En créant un compte sur ce projet, vous acceptez les conditions "
+"d'utilisation décrites ci-dessus."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Enregistrez-vous avec un compte existant"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "Courriel:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Nom:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Mot de passe:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Nouveau dans"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "S'enregistrer avec un compte pour participer:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Visiter le site web du projet pour créer un compte:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Le projet n'autorise pas la création de compte actuellement!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "Enregistrer"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "S'enregistrer"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Mot de passe oublié"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "La connexion au projet a échoué!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Attaché"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Enregistrement de compte pour"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Projet:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "Courriel:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Nom:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Equipe:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Mot de passe:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Tapez de nouveau:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Créer"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Ajouter un manager de compte"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Utilisateur:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Mot de passe:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Tapez de nouveau:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Ajouter"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "Utilisateur non trouvé"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Mot de passe trop court"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Erreur de connexion"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Le mot de passe ne correspond pas"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Merci de saisir l'URL"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Merci de saisir l'adresse de courriel"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Merci de saisir le mot de passe"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Merci de saisir le nom d'utilisateur"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "erreur"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Nom d'utilisateur refusé"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "L'adresse courriel est déjà utilisée"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "Le projet n'est pas accessible"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "Adresse courriel refusée"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Mot de passe refusé"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "La création de compte est désactivée sur ce projet"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "URL invalide"
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Retour"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Terminer"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Réussi"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Echec"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "…"
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Connecter"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Vérifier le compte"
msgctxt "attachproject_working_register"
msgid "Register account"
-msgstr ""
+msgstr "Enregistrer un compte"
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Connexion"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Ajouter un gestionnaire de compte"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Synchroniser"
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
-msgstr ""
+msgid "Tab here to choose a project."
+msgstr "Appuyez ici pour choisir un projet."
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Oups"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"…ceci ne devrait pas se produire!\n"
+"Cliquez sur l'icône pour essayer de nouveau."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "Icône BOINC"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Statut"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projets"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Tâches"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Transferts"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Préférences"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Remarques"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigation"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Calcul"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Merci de votre participation."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "Suspendu"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Rien à faire"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "En attente de tâches…"
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "Suspendu"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "Appuyer sur lecture pour relancer le service réseau et le calcul."
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "En cours de démarrage…"
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Choisissez un projet auquel participer."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Fermeture…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Test de puissance…"
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "image de projet"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Lecture des préférences…"
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Enregistrer"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Saisir une nouvelle valeur:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "Sélectionner:"
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Général"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Réseau"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Enérgie"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Stockage"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Mémoire"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Déboguer"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
+msgstr "Afficher les préférences et contrôles avancés..."
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
-
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
-
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
-msgstr ""
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
+msgstr "Calculer sur batteries"
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Niveau de batterie min."
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
-msgstr ""
+msgstr "BOINC suspend le calcul en dessous du seuil de charge défini."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Température de batterie max."
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC suspend le calcul au dessus de la température de batterie définie. Il "
+"n'est pas recommandé de changer cette valeur."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "Espace de stockage max."
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
msgstr ""
+"Quel pourcentage de l'espace de stockage de votre appareil BOINC est-il "
+"autorisé à utiliser ?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "Espace disponible min."
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
+msgstr "Combien d'espace de stockage de votre appareil doit rester disponible?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Limite de transfert journalière"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Limite la quantité de données journalière occasionnée par BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Transférer les tâches uniquement en WIFI"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Démarrage automatique"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Montrer les notifications si suspendu"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Cœurs CPU utilisés"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Limiter le nombre de cœurs CPU utilisés par BOINC pour le calcul."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Mettre en pause si l'utilisation du CPU est au dessus de"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
msgstr ""
+"Définit quand BOINC met le calcul en pause du fait de l'utilisation du CPU "
+"par d'autres applications."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "Limite CPU"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Limite le temps de CPU utilisé par BOINC pour les calculs."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "Limite RAM"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Limite la quantité de RAM que les tâches peuvent utiliser."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "Drapeaux du journal du client BOINC"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "Niveau de journal GUI"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Spécifie le niveau de trace des messages du journal GUI"
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "Mo"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "Go"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "Lecture des projets…"
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Ajouter un projet"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Icône de projet"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Crédit:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(sur cet appareil)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(total)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Suspendu par l'utilisateur"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Pas de nouvelles tâches"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Projet terminé - OK pour retirer"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "Sera retiré une fois les tâches terminées"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "En attente de requête au projet"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "En cours de requête au projet"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Envoi des notifications d'avancement en attente"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Communication prévue dans:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Commandes de projet:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Aller au site web"
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Mettre à jour"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Retirer"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Suspendre"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Continuer"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Pas de nouveau travail"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Autoriser du nouveau travail"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Réinitialiser"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Commandes du gestionnaire de compte:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Synchroniser"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Désactiver"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Retirer le projet?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir retirer"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "de BOINC?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Retirer"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Réinitialiser le projet"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir réinitialiser"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Réinitialiser"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Désactiver le gestionnaire de compte"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Êtes-vous sûr de vouloir cesser d'utiliser"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Désactiver"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Nom de tâche:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Temps écoulé:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(suspendu)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Date limite:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "nouveau"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "en attente de téléchargement"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "téléchargement terminé"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "erreur de calcul"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "envoi en cours"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "envoi terminé"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "abandonné"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "échec de l'envoi"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "prêt"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "exécution en cours"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "suspendu"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "suspension en cours"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "suspension en cours"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "suspendu"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "projet suspendu"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "prêt à valider"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Abandonner la tâche?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Abandonner la tâche:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Abandonner"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Annuler"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Dialogue de confirmation"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Lecture des transferts…"
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Envoi"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Téléchargement"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "réessayer dans"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "échec"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "suspendu"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "actif"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "en attente"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "retrait de projet"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Fichier:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Réessayer les transferts"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Abandonner les transferts?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "Abandonner les transferts:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Abandonner"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Lecture des remarques…"
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Chargement du journal des messages…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Messages du client"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "Messages GUI"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Journal copié dans le presse-papier."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Journal des évènements de BOINC pour Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Calcul suspendu."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "Connecter votre appareil à un chargeur pour continuer à calculer."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "L'utilisateur est actif."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "En dehors de la fenêtre temporelle de calcul."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC fait un test de puissance sur votre appareil…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Plus d'espace disque."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Accélérateur CPU planifié."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Pas d'activité récente de l'utilisateur."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Délai d'initialisation."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Une application exclusive est en cours d'exécution."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Votre appareil est occupé avec d'autres applications."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC a atteint la limite de transfert réseau."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Arrêté par Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Pas connecté au WiFi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
msgstr ""
+"Les batteries doivent se recharger avant de pouvoir continuer le calcul."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Le calcul pourra continuer quand la charge batterie atteindra"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "actuellement"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "En attente de refroidissement de la batterie"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Reprise du calcul…"
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "manuellement."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Demandé par l'utilisateur"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Demander du travail"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Envoyer le travail terminé"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Envoyer la notification d'avancement"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Demandé par le gestionnaire de compte"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Initialisation du projet"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Demandé par le projet"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Raison inconnue"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Rafraîchir"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Envoyer comme courriel"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Copier vers le presse-papier"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Journal des évènements"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "Quitter BOINC"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Suspendre"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Continuer"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "A propos"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Aide"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Retour"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "A propos"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Version"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
msgstr ""
+"Berkeley Open Infrastructure for Network Computing (Infrastructure Ouverte "
+"pour le Calcul Distribué de Berkeley)"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-
+"© 2003–2013 Université de Californie, Berkeley.\n"
+"Tous droits réservés."
diff --git a/locale/fr/BOINC-Manager.mo b/locale/fr/BOINC-Manager.mo
index a4d7ab9..5ac00de 100644
Binary files a/locale/fr/BOINC-Manager.mo and b/locale/fr/BOINC-Manager.mo differ
diff --git a/locale/fr/BOINC-Manager.po b/locale/fr/BOINC-Manager.po
index 4cd3f4f..3728d18 100644
--- a/locale/fr/BOINC-Manager.po
+++ b/locale/fr/BOINC-Manager.po
@@ -3,8 +3,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-10-06 20:40+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-02 21:58+0000\n"
"Last-Translator: Jerome Cadet <jerome.cadet at pobox.com>\n"
"Language-Team: <fr at li.org>\n"
"Language: fr\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1381092035.0\n"
+"X-POOTLE-MTIME: 1391378324.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -117,12 +117,11 @@ msgid ""
"please do so before proceeding. Click on the link below\n"
"to register or to retrieve a forgotten password."
msgstr ""
-"Si vous ne vous êtres pas encore inscrit à ce gestionnaire de compte, merci "
-"de la faire avant de continuer. Cliquez sur le lien ci-dessous pour vous "
-"enregistrer ou pour récupérer un mot de passe oublié."
+"Si vous ne vous êtres pas encore inscrit à ce gestionnaire de compte, \n"
+"merci de la faire avant de continuer. Cliquez sur le lien ci-dessous pour \n"
+"vous enregistrer ou pour récupérer un mot de passe oublié."
#: AccountInfoPage.cpp:532
-#, fuzzy
msgid "Account manager web site"
msgstr "Site du gestionnaire de compte"
@@ -142,17 +141,16 @@ msgstr "Utiliser le gestionnaire de compte"
#: AccountInfoPage.cpp:585
msgid "Please enter a user name."
-msgstr ""
+msgstr "Veuillez saisir un nom d'utilisateur."
#: AccountInfoPage.cpp:587
-#, fuzzy
msgid "Please enter an email address."
-msgstr "Veuillez entrer une adresse email"
+msgstr "Veuillez saisir une adresse de courriel."
#: AccountInfoPage.cpp:597
#, c-format
msgid "Please enter a password of at least %d characters."
-msgstr ""
+msgstr "Veuillez entrer un mot de passe d'au moins %d caractères."
#: AccountInfoPage.cpp:607
msgid ""
@@ -170,26 +168,24 @@ msgid ""
"To choose an account manager, click its name or \n"
"type its URL below."
msgstr ""
-"Pour choisir un gestionnaire de compte, cliquez sur son nom ou tapez son URL "
-"ci-dessous."
+"Pour choisir un gestionnaire de compte, cliquez sur son nom\n"
+"ou tapez son URL ci-dessous."
#: AccountManagerInfoPage.cpp:279
-#, fuzzy
msgid "Account manager details:"
-msgstr "Site du gestionnaire de compte"
+msgstr "Détails sur le gestionnaire de compte:"
#: AccountManagerInfoPage.cpp:283
-#, fuzzy
msgid "Account manager &URL:"
-msgstr "&URL du gestionnaire de compte:"
+msgstr "URL du gestionnaire de compte:"
#: AccountManagerInfoPage.cpp:287
msgid "Open web page"
-msgstr ""
+msgstr "Ouvrir une page web"
#: AccountManagerInfoPage.cpp:290
msgid "Visit this account manager's web site"
-msgstr ""
+msgstr "Visiter le site web du gestionnaire de compte"
#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
@@ -216,346 +212,346 @@ msgstr "Connecté"
msgid "Disconnected"
msgstr "Déconnecté"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Fermez la fenêtre %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Fermer la fenêtre"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Quitter %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Remarques\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Afficher les remarques"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projets\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Afficher les projets"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Tâches\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Afficher les tâches"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Trans&ferts\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Afficher les transferts"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistiques\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Afficher les statistiques"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Utilisation &Disque\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Afficher l'utilisation disque"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Vue Simple...\tCTRL+SHIFT+S"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Affiche l'interface graphique simplifiée"
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Rejoindre un projet ou un gestionnaire de compte..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Volontaire pour tout projet parmi la trentaine disponibles dans de nombreux "
"domaines de sciences"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Synchronisation avec %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Récupération des paramètres actuels de %s "
# changement de terminologie boinc (cf. comm de David Anderson sur boinc_loc)
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "Ajouter un &projet..."
# changement de terminologie boinc (cf. comm de David Anderson sur boinc_loc)
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Ajouter un projet"
# Is this a serious real message ???
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&Arrêter d'utiliser %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Enlever cet ordinateur du contrôle du gestionnaire de compte."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Options..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Configuration des options d'affichage et des paramètres de proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Préférences de calcul..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configurer les préférences de calcul"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Calculer en permanence"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Autorise le travail sans tenir compte des préférences"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Calculer selon les &préférences"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Autorise le travail selon les préférences"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Suspendre"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Arrêter les calculs sans tenir compte des préférences"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Toujours utiliser le GPU"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Autorise le calcul GPU sans tenir compte des préférences"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Utiliser le GPU selon les préférences"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Autoriser le calcul GPU selon les préférences"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Suspendre le GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Arrête les calculs du GPU sans tenir compte des préférences"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Activité réseau toujours disponible"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Autoriser l'activité réseau sans tenir compte des préférences"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Activité réseau selon les préférences"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Autoriser l'activité réseau selon les préférences"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Activité réseau suspendue"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Arrêter l'activité réseau de BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Se connecter à un autre ordinateur travaillant sur %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Sélectionner un ordinateur..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Arrêter le client connecté..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Arrêter le client actuellement connecté"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Effectuer les &tests de puissance de votre CPU"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Effectue les tests de puissance BOINC de votre CPU"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Relancer les communications réseaux"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Relancer toutes les communications réseau en attente"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Lire les fichiers de configuration"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Lire les informations de configuration du fichier cc_config.xml et de tout "
"fichier app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Lire le fichier de préférences locales"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr ""
"Lit les préférences contenues dans le fichier global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Démarrer une nouvelle instance de %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Démarrer un autre %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Journal des évènements...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Afficher les messages de diagnostique."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "&Aide sur %s"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Affiche les informations à propos de %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&Aide sur le %s"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Affiche les informations à propos du %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
-#, c-format, fuzzy
+#, c-format, c-format
msgid "%s &web site"
-msgstr "&Site web de %s"
+msgstr "Site web de %s"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Affiche les informations à propos de BOINC et %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&A propos de %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informations sur les droits d'auteur et la licence."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Fichier"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Affichage"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Outils"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Activité"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "A&vancé"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Aide"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Arrêter d'utiliser %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -564,44 +560,46 @@ msgid ""
"\n"
"Do you want to stop using %s?"
msgstr ""
-"Si vous cessez d'utiliser %s, vous conserverez tous vos projets mais vous "
-"devrez les gérer manuellement.Voulez-vous cesser d'utiliser %s ?"
+"Si vous cessez d'utiliser %s, \n"
+"vous conserverez tous vos projets \n"
+"mais vous devrez les gérer manuellement.\n"
+"Voulez-vous cesser d'utiliser %s ?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Arrêter le client actuel..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
"and prompt you for another host to connect to."
msgstr ""
-"%s arrêtera le client connecté,et vous invitera à vous connecter à un autre "
-"ordinateur."
+"%s arrêtera le client connecté\n"
+"et vous invitera à vous connecter à un autre ordinateur."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s a ajouté avec succès %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Connexion à %s en cours"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Connecté à %s (%s)"
@@ -638,26 +636,26 @@ msgstr ""
"\n"
"Visitez le site web du projet et suivez ses instructions, svp"
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Communication avec le client BOINC en cours. Veuillez patienter ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Quitter %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "&Fermer %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Communication"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Annuler"
@@ -672,8 +670,9 @@ msgid ""
"Please contact your administrator to add you to the 'boinc_users' local user "
"group."
msgstr ""
-"Vous n'êtes actuellement pas autorisé à gérer le client. Demandez à votre "
-"administrateur système de vous ajouter au groupe local \"boinc_users\"."
+"Vous n'êtes actuellement pas autorisé à gérer le client. \n"
+"Demandez à votre administrateur système de vous ajouter au groupe local "
+"\"boinc_users\"."
#: BOINCBaseFrame.cpp:523
msgid ""
@@ -720,9 +719,9 @@ msgid ""
"Please launch the Control Panel->Administative Tools->Services applet and "
"start the BOINC service."
msgstr ""
-"%s ne peut pas démarrer un client %s.Merci d'ouvrir le Panneau de "
-"Contrôle->Outils d'Administration->Gestionnaire de Services et démarrez le "
-"service BOINC."
+"%s ne peut pas démarrer un client %s.\n"
+"Merci d'ouvrir le Panneau de Contrôle->Outils d'Administration->Gestionnaire "
+"de Services et démarrez le service BOINC."
#: BOINCBaseFrame.cpp:638
#, c-format
@@ -806,8 +805,8 @@ msgid ""
"%s has detected it is now connected to the Internet.\n"
"Updating all projects and retrying all transfers."
msgstr ""
-"%s a détecté qu'il est maintenant connecté à Internet.Mise à jour de tous "
-"les projets et essais de transfert en cours."
+"%s a détecté qu'il est maintenant connecté à Internet.\n"
+"Mise à jour de tous les projets et essais de transfert en cours."
#: BOINCDialupManager.cpp:417
#, c-format
@@ -819,7 +818,7 @@ msgstr "%s a réussi à se déconnecter d'Internet."
msgid "%s failed to disconnected from the Internet."
msgstr "%s n'a pas réussi à se déconnecter d'Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -840,7 +839,7 @@ msgstr ""
"- contacter votre administrateur pour qu'il ajoute ce compte au\n"
"groupe utilisateur \"boinc_master\"."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -850,16 +849,16 @@ msgstr ""
"veuillez réinstaller %s.\n"
"(Code erreur %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " chez "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -867,70 +866,70 @@ msgstr ""
"Un redémarrage est requis pour le bon fonctionnement de BOINC.\n"
"Veuillez redémarrer votre ordinateur et réessayer."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Manager BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr ""
"BOINC Manager a été démarré automatiquement par le système d'exploitation."
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Démarrer BOINC avec seulement l'icône de la barre des tâches visible"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Répertoire contenant les fichiers exécutables de BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Répertoire des données BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Nom de l'hôte ou adresse IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Numéro de port GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Mot de passe"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Démarrer BOINC avec ces arguments optionnels"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "désactiver les permissions et les sécurités utilisateur de BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"sélectionner le mode débogage d'apparence pour activer les messages d'erreur "
"du gestionnaire d'apparence"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "instances multiples du gestionnaire BOINC autorisées"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Non utilisé: contournement du bogue dans XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Détection automatique)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Inconnu)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Défini par l'utilisateur)"
@@ -957,7 +956,7 @@ msgid "E&xit"
msgstr "&Quitter"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Reprendre"
@@ -1029,6 +1028,9 @@ msgid ""
"\n"
"Click Finish to close."
msgstr ""
+"Veuillez réessayer ultérieurement.\n"
+"\n"
+"Cliquer sur Terminer pour fermer."
#: CompletionErrorPage.cpp:225 CompletionPage.cpp:222 CompletionPage.cpp:242
#: CompletionPage.cpp:273
@@ -1113,76 +1115,76 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "nombre flottant invalide"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "nombre invalide"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "heure invalide, le format est HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "intervale de temps invalide, le format est HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "valeur invalide détectée"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Erreur de Validation"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Applications à ajouter"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' n'est pas une application exécutable."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Ajouter une application exclusive"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Nom de l'application à ajouter?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Ajouter une application exclusive"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Les noms d'application doivent finir par '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' est déjà dans la liste."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-"Voulez-vous réellement supprimer vos préférences locales ? (cela n'affectera "
-"pas vos applications exclusives)"
+"Voulez-vous réellement supprimer vos préférences locales ? \n"
+"(cela n'affectera pas vos applications exclusives)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Confirmation"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Préférences"
@@ -1198,11 +1200,11 @@ msgstr ""
"Cliquez sur Effacer pour restaurer les paramètres du site internet(sauf les "
"applications exclusives)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Supprimer"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "effacer toutes les préférences locales et fermer la fenêtre"
@@ -1222,7 +1224,7 @@ msgstr "utilisation du disque et de la mémoire"
msgid "exclusive applications"
msgstr "applications exclusives"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1235,7 +1237,7 @@ msgid "close the dialog without saving"
msgstr "fermer la fenêtre sans sauvegarder"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Aide"
@@ -1293,7 +1295,7 @@ msgstr ""
"nombre de minutes suivant"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minutes"
@@ -1309,7 +1311,7 @@ msgstr "suspendre le travail si l'utilisation du processeur dépasse ce niveau"
msgid "percent (0 means no restriction)"
msgstr "pour-cent (0 signifie pas de restriction)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Tous les jours entre les heures suivantes"
@@ -1317,8 +1319,8 @@ msgstr "Tous les jours entre les heures suivantes"
msgid "start work at this time"
msgstr "commencer le travail à cette heure"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "et"
@@ -1326,43 +1328,43 @@ msgstr "et"
msgid "stop work at this time"
msgstr "cesser le travail à cette heure"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(pas de restriction si égaux)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Contrainte sur jours de la semaine:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "cocher pour préciser les heures pour cette journée de la semaine"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Lundi"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Mardi"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Mercredi"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Jeudi"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Vendredi"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Samedi"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Dimanche"
@@ -1381,11 +1383,11 @@ msgstr "Sur les systèmes multiprocesseurs, utiliser au plus"
#: DlgAdvPreferencesBase.cpp:346
#, no-c-format
msgid "% of the processors (0 means ignore this setting)"
-msgstr ""
+msgstr "% des processeurs (0 pour ignorer ce paramètre)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Utiliser au plus"
@@ -1394,77 +1396,77 @@ msgstr "Utiliser au plus"
msgid "% CPU time"
msgstr "% du temps processeur"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Options générales"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Débit maximum de téléchargement descendant"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KOctets/sec."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Débit maximum de téléchargement ascendant"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Transférer au plus"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Moctets"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "chaque"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "jours"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Réserve de travail minimale"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Essayer d'avoir suffisamment de tâches pour rester actif durant ce nombre de "
"jours"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Réserve de travail maximale"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
"Additionnellement, avoir suffisamment de tâches pour au plus ce nombre de "
"jours"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr " Ignorer la vérification du fichier image"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"cocher si votre fournisseur d'accès Internet modifie les fichiers images"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Options de connexion"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Confirmer avant de se connecter à internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1472,11 +1474,11 @@ msgstr ""
"si coché, un message de confirmation sera affiché avant d'essayer de se "
"connecter à Internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Se déconnecter dès que terminé"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1484,152 +1486,152 @@ msgstr ""
"si coché, BOINC raccrochera dès que l'utilisation du réseau sera terminée\n"
"(utile uniquement pour une connexion RTC)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Utilisation du réseau autorisée"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "heure de début d'utilisation du réseau"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "heure de fin d'utilisation du réseau"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Utilisation du disque"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "l'espace disque utilisé par BOINC au maximum (en Gigaoctets)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigaoctets d'espace disque"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Laisser au moins"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"BOINC laisse au minimum cette quantité d'espace disque libre (en Gigaoctets)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigaoctets d'espace disque libre"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC utilise au maximum ce pourcentage d'espace disque total"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% de l'espace disque total"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Ecrire les points de contrôle sur le disque au plus toutes les"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "secondes"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% de la mémoire physique (espace swap)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Utilisation mémoire"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% quand l'ordinateur est utilisé"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% quand l'ordinateur n'est pas utilisé"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr " Laisser les applications en mémoire lorsqu'elles sont suspendues"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "si coché, les tâches suspendues seront laissées en mémoire"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Suspendre l'utilisation du processeur et l'activité réseau quand ces "
"applications sont en cours:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Ajouter..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Ajouter une application à cette liste"
# changement de terminologie boinc (cf. comm de David Anderson sur boinc_loc)
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Retirer"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Retirer une application de cette liste"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Pour les paramètres avancés, se référer à"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Journal des événements"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projet"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Date"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Message"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "Ne montrer que ce projet"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Tout copier"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Copie tous les messages dans le presse-papiers"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Copier la sélection"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1638,7 +1640,7 @@ msgstr ""
"sélectionner plusieurs messages en maintenant appuyée la touche Shift ou "
"Ctrl lorsque vous cliquez sur les messages."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1647,24 +1649,24 @@ msgstr ""
"sélectionner plusieurs messages en maintenant appuyée la touche Shift ou "
"Ctrl lorsque vous cliquez sur les messages."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Fermer"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Obtenir de l'aide avec %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Montrer tous les messages"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Montrer les messages de tous les projets."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Ne montrer que les messages du projet sélectionné."
@@ -1717,7 +1719,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Se rappeler de cette décision et ne plus afficher cette fenêtre."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Annuler"
@@ -1725,224 +1727,224 @@ msgstr "&Annuler"
msgid "Don't show this dialog again."
msgstr "Ne plus afficher cette fenêtre."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Ne pas charger de tâches pour "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Préférences du projet"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Préférence du gestionnaire de compte"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Le projet n'a pas d'application pour "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "La configuration du client exclue "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr "Demande de travail différée de"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr "Intervalle d'ajournement de demande de travail"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Propriétés du projet "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Général"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL maître"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nom d'utilisateur"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nom de l'équipe"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Partage des ressources"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Programmateur RPC différé pour"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Téléchargement de fichiers différé pour"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Envoi de fichiers différé pour"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID Ordinateur"
# I don't know the context of this message
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Sollicite peu le CPU"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "oui"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Suspendu via l'interface graphique"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "non"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Ne pas demander de travail supplémentaire"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Requête au planificateur en cours"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Envoi des notifications d'avancement en attente"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Emplacement de l'hôte"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "valeur par défaut"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Ajouté via le gestionnaire de compte"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Se détacher une fois les tâches terminées"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Terminé"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Crédit"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Utilisateur"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Ordinateur"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Planification"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Priorité de planification"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Facteur de correction de durée"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Propriétés de la tâche "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Application"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nom de la tâche"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nom"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Etat"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Reçu"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Date limite d'envoi"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Ressources"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Taille de tâche estimée"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Temps processeur au dernier point de sauvegarde"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Temps de calcul"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Temps écoulé"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Temps restant estimé"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Portion effectuée"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Taille de la mémoire virtuelle"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Espace mémoire alloué"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Répertoire"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID du process"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local:"
@@ -2032,7 +2034,7 @@ msgstr "Laisser vide si non nécessaire"
msgid "User Name:"
msgstr "Nom d'utilisateur:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Mot de passe:"
@@ -2092,12 +2094,12 @@ msgstr ""
"La langue par défaut du %s a été modifiée. Pour que le changement prenne "
"effet, vous devez redémarrer le %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Sélectionner un ordinateur"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2106,7 +2108,7 @@ msgstr ""
"Une autre instance de %s est en cours d'exécution \n"
"sur cet ordinateur. Veuillez sélectionnez un client à superviser."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nom d'hôte:"
@@ -2304,207 +2306,207 @@ msgstr "Recherche"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "S'informer sur les projets hébergés par World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Client en court de démarrage"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Connexion au client en cours"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Recherche de l'état du système; veuillez patienter..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Application manquante"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
"Merci d'installer l'application CorD à partir de http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr " - sur batteries"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "l'ordinateur est utilisé"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "requête utilisateur"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "moment de la journée"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Tests de puissance de l'ordinateur en cours"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "a besoin d'espace disque - vérifiez les préférences"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "l'ordinateur n'est pas utilisé"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "en cours de démarrage"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr " une application exclusive est en cours d'exécution"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "Le CPU est occupé"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "dépassement de limite du débit réseau"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "demandé par le système d'exploitation"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "raison inconnue"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU absent, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nouveau"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Echec du téléchargement"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Téléchargement en cours"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (suspendu - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projet suspendu par l'utilisateur"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Tâche suspendue par l'utilisateur"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Suspendu - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "Activité du GPU suspendue"
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "En attente de mémoire"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "En attente de mémoire partagée"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "En cours d'exécution, priorité haute"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Calculs en cours"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (CPU-non-intensif)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Calculs en attente"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Prêt à démarrer"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Attente de planification: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(En attente de planification)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (En attente d’accès réseau)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Erreur de calcul"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Echec de l'envoi"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Envoi en cours"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Abandonné par l'utilisateur"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Annulé par le projet"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Avorté : non démarré dans le délai imparti"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Abandon: limite du disque excédée"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Abandon: limite du temps d'exécution excédée"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Abandon: limite de la mémoire excédée"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Annulé"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Confirmé"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Prêt à valider"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Erreur: état invalide '%d'"
@@ -2559,56 +2561,56 @@ msgstr "Vérifiez le nom d'utilisateur et le mot de passe, et essayez à nouveau
msgid "Check the email address and password, and try again."
msgstr "Vérifiez l'adresse email et le mot de passe, et essayez à nouveau."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "suivant..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Tous"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Choisissez un projet"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Pour choisir un projet, cliquez sur son nom ou tapez son URL ci-dessous."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Catégories:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projets:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Détails du projet"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Domaine de recherche:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organisation:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Site Web:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Systèmes compatibles:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL du projet:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2616,7 +2618,7 @@ msgstr ""
"Il se peut que ce projet n'ait pas d'unité de travail pour votre système "
"d'exploitation. Êtes vous sur de vouloir l'ajouter?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Vous avez déjà ajouté ce projet. Merci de choisir un projet différent."
@@ -2624,11 +2626,11 @@ msgstr "Vous avez déjà ajouté ce projet. Merci de choisir un projet différen
msgid "Communicating with project."
msgstr "Communication avec le projet en cours."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Fichiers requis non trouvés sur le serveur."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Une erreur interne du serveur a eu lieu."
@@ -2741,7 +2743,7 @@ msgid "I agree to the terms of use."
msgstr "J'accepte les conditions d'utilisation."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "Je n'accepte pas les conditions d'utilisation."
#: UnavailablePage.cpp:183
@@ -2834,7 +2836,7 @@ msgstr "'%s' ne contient pas de nom d'hôte valide."
msgid "'%s' does not contain a valid path."
msgstr "'%s' ne contient pas de chemin valide."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Commandes"
@@ -2887,7 +2889,7 @@ msgstr "Recherche d'avis; patientez s'il-vous-plaît..."
msgid "There are no notices at this time."
msgstr "Il n'y a pas de nouveaux messages."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Remarques"
@@ -2904,7 +2906,7 @@ msgstr ""
"les préférences, et si possible télécharge du travail."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3147,135 +3149,135 @@ msgstr "libre: "
msgid "used by other programs: "
msgstr "utilisé par d'autres programmes: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Total de l'utilisateur"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Moyenne de l'utilisateur"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Total de l'hôte"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Moyenne de l'hôte"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Dernière mise à jour: il y a %.0f jours"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Total de l'utilisateur"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Crédit total de l'utilisateur"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Moyenne de l'utilisateur"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Crédit moyen de l'utilisateur"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Total de l'hôte"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Crédit total de l'hôte"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Moyenne de l'hôte"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Crédit moyen de l'hôte"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Projet précédent"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Montre le graphique du projet précédent"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Projet suivant >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Montre le graphique du projet suivant"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Masquer la liste de projets"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Utilisez toute la zone pour les graphiques"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Mode visuel"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Un projet"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Montre un graphique pour le projet sélectionné"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Tous les projets (séparés)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Montre tous les projets, un graphique par projet"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Tous les projets (ensembles)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Montre un graphique pour tous les projets"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Tous les projets (somme)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Montre un graphique avec la somme de tous les projets"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistiques"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Mise à jour des diagrammes en cours..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Montrer la liste des projets"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Utilisez une zone plus petite pour les graphiques"
@@ -3447,10 +3449,6 @@ msgstr "Restant (estimation)"
msgid "Deadline"
msgstr "Date limite d'envoi"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nom"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Tâches"
@@ -3567,14 +3565,17 @@ msgid ""
"Please choose which type of change you would like to make:\n"
msgstr ""
"Vous avez choisi d'ajouter un nouveau projet de calcul volontaire ou changez "
-"les projetsauxquels vous contribuez.Quelques projets sont exécutés et "
-"administrés par World Community Grid, quand d'autressont exécutés et "
-"administrés par d'autres chercheurs ou organisations. Le programme BOINCpeut "
-"diviser votre puissance de calcul que vous avez décidé de partager parmi "
-"une combinaison de projets.Sinon, si vous vous êtes enregistrés avec une "
-"Gestionnaire de compte BOINC, vous pouvez l'utiliserpour choisir quels "
-"projets supporter.S'il-vous-plaît, choisissez quel genre de changement vous "
-"voudriez faire:"
+"les projets auxquels vous contribuez.\n"
+"Quelques projets sont exécutés et administrés par World Community Grid, "
+"quand d'autres\n"
+"sont exécutés et administrés par d'autres chercheurs ou organisations. Le "
+"programme BOINC\n"
+"peut répartir la puissance de calcul que vous avez décidé de partager parmi "
+"une liste de projets.\n"
+"Sinon, si vous vous êtes enregistrés avec un Gestionnaire de compte BOINC, "
+"vous pouvez l'utiliser\n"
+"pour choisir quels projets supporter.\n"
+"S'il-vous-plaît, choisissez quel genre de changement vous voudriez faire:\n"
#: WelcomePage.cpp:339
msgid "Use a BOINC Account Manager"
@@ -3600,40 +3601,40 @@ msgstr "Voulez-vous vraiment annuler ?"
msgid "Question"
msgstr "Question"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Vue Avancée\tCTRL+SHIFT+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Afficher l'interface graphique avancée."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Apparence"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Choisissez l'apparence de l'interface utilisateur."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Valeur par défaut"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Suspendre le calcul"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Reprendre le calcul"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Ouvrir une fenêtre pour voir les messages des projets ou de BOINC"
@@ -3657,120 +3658,125 @@ msgid "Click OK to set preferences."
msgstr "Cliquez sur OK pour enregistrer les préférences."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Cliquez sur Effacer pour revenir aux réglages du site web."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Cliquer sur Effacer pour restaurer les paramètres du site pour toutes les "
+"préférences listées ci-dessous."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-"Pour des réglages supplémentaires, choisissez Préférences de Calcul dans"
+"Pour des réglages supplémentaires, choisissez Préférences de Calcul dans la "
+"vue Avancée."
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "la Vue avancée."
-
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Travailler seulement entre:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Se connecter à internet seulement entre:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Ne pas utiliser plus de:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "d'espace disque"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "du processeur"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Travailler lorsque l'ordinateur est sur batteries ?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Travailler après que l'ordinateur soit inactif pendant:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Effacer toutes les préférences locales et fermer la fenêtre"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "N'importe quand"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MO"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MO"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MO"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GO"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GO"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GO"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GO"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GO"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GO"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GO"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MO"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GO"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Toujours Calculer)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
-msgstr "Voulez-vous vraiment annuler toutes les préférences locales ?"
+msgstr "Voulez-vous vraiment annuler toutes les préférences locales ?\n"
# changement de terminologie boinc (cf. comm de David Anderson sur boinc_loc)
#: sg_ProjectPanel.cpp:72
@@ -3803,9 +3809,9 @@ msgstr "Commandes du projet"
#: sg_ProjectPanel.cpp:267
#, c-format
-#, c-format, fuzzy
+#, c-format, c-format
msgid "Pop up a menu of web sites for project %s"
-msgstr "Afficher une liste des sites web du projet %s"
+msgstr "Afficher une liste des sites web pour le projet %s"
#: sg_ProjectPanel.cpp:269
#, c-format
@@ -3831,116 +3837,116 @@ msgstr ""
"Êtes-vous sûr de vouloir abandonner cette tâche '%s'?\n"
"(Avancement: %.1lf%%, État: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Vous n'avez aucun projet. Veuillez Ajouter un projet."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Non disponible"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Tâches:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Choisir une tâche"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "De:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Avancement de cette tâche"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Commandes de tâche"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Afficher une liste des commandes applicables à cette tâche"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Application: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Application: Non disponible"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Non disponible"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Écoulé: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Restant (estimation): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Statut: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Recherche de l'état actuel"
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Téléchargement du travail depuis le serveur en cours"
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Traitement Suspendu: Fonctionne sur Batteries."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Traitement Suspendu: Utilisateur Actif"
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Traitement Suspendu: L'utilisateur a mis en pause le traitement."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Traitement Suspendu: Moment de la Journée."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Traitement Suspendu: Tests de puissance de l'ordinateur."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Traitement Suspendu."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "En attente du contact des serveurs des projets."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Recherche de l'état actuel"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Aucun travail disponible à traiter"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Incapable de se connecter au client BOINC"
@@ -3982,6 +3988,25 @@ msgstr "Montrer tout"
msgid "Quit %s"
msgstr "Quitter %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Je n'accepte pas les conditions d'utilisation."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Cliquez sur Effacer pour revenir aux réglages du site web."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr ""
+#~ "Pour des réglages supplémentaires, choisissez Préférences de Calcul dans"
+
+#~ msgid "the Advanced View."
+#~ msgstr "la Vue avancée."
+
+#~ msgid "Workunit name"
+#~ msgstr "Nom de la tâche"
+
+#~ msgid "invalid float"
+#~ msgstr "nombre flottant invalide"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Afficher l'interface graphique avancée (accessible)"
diff --git a/locale/fr/BOINC-Project-Generic.po b/locale/fr/BOINC-Project-Generic.po
index 06c7236..71fd34d 100644
--- a/locale/fr/BOINC-Project-Generic.po
+++ b/locale/fr/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-10-06 20:40+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-02 22:07+0000\n"
"Last-Translator: Jerome Cadet <jerome.cadet at pobox.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fr\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1381092035.0\n"
+"X-POOTLE-MTIME: 1391378827.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "LANG_NAME_NATIVE"
@@ -191,7 +191,7 @@ msgstr "Chercher dans les forums"
msgid "Advanced search"
msgstr "Recherche avancée"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Messages privés"
@@ -201,8 +201,8 @@ msgstr "Messages privés"
msgid "Questions and Answers"
msgstr "Questions / Réponses"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "Non lu"
msgid "Message %1"
msgstr "Message %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "caché"
@@ -378,22 +378,28 @@ msgid ""
" nationality, gender, class or sexuality.\n"
" "
msgstr ""
-" <ul> <li> "
-"Les messages doivent être «adapté aux enfants»: ils ne peuvent pas contenir "
-" de contenu obscène, incitant à "
-"la haine, sexuellement "
-"explicite ou suggestif. <li> Pas de "
-"publicité commerciale. <li> Pas de liens "
-"vers des sites Web ayant un contenu sexuel, "
-" lié aux jeux d'argent ou à "
-"l'intolérance envers les autres. <li> Aucun "
-"messages destinés à gêner ou contrarier d'autres personnes, "
-" ou à détourner un sujet de "
-"conversation. <li> Pas de messages "
-"délibérément hostiles ou insultants. <li> "
-"Pas de commentaires abusifs impliquant la race, la religion, "
-" la nationalité, le sexe, la "
-"classe ou la sexualité. "
+" <ul>\n"
+" <li> Les messages doivent être «adapté aux "
+"enfants»: ils ne peuvent pas contenir\n"
+" de contenu obscène, incitant à "
+"la haine,\n"
+" sexuellement explicite ou "
+"suggestif.\n"
+" <li> Pas de publicité commerciale.\n"
+" <li> Pas de liens vers des sites Web ayant "
+"un contenu sexuel,\n"
+" lié aux jeux d'argent ou à "
+"l'intolérance envers les autres.\n"
+" <li> Aucun messages destinés à gêner ou "
+"contrarier d'autres personnes,\n"
+" ou à détourner un sujet de "
+"conversation.\n"
+" <li> Pas de messages délibérément hostiles "
+"ou insultants.\n"
+" <li> Pas de commentaires abusifs impliquant "
+"la race, la religion,\n"
+" la nationalité, le sexe, la "
+"classe ou la sexualité.\n"
#: ../inc/forum.inc:780
msgid "Rules:"
@@ -481,7 +487,7 @@ msgstr "Vous ne pouvez pas écrire dans une discussion masquée."
msgid "Thread"
msgstr "Sujet"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Messages"
@@ -490,7 +496,7 @@ msgstr "Messages"
msgid "Views"
msgstr "Vues"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Dernier message"
@@ -528,7 +534,7 @@ msgid "Home"
msgstr "Maison"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Travail"
@@ -538,7 +544,7 @@ msgstr "École"
#: ../inc/host.inc:59
msgid "Mobile"
-msgstr ""
+msgstr "Mobile"
#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
@@ -571,7 +577,7 @@ msgstr "Nom de domaine"
#: ../inc/host.inc:98
msgid "Product name"
-msgstr ""
+msgstr "Nom du produit"
#: ../inc/host.inc:102
msgid "Local Standard Time"
@@ -594,9 +600,9 @@ msgid "Created"
msgstr "Créé"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -774,7 +780,7 @@ msgstr "Dernier contact"
msgid "Computer info"
msgstr "Informations sur l'ordinateur"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -783,9 +789,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Crédit moyen"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -874,8 +880,8 @@ msgstr "Uniquement les ordinateurs actifs durant les 30 derniers jours"
msgid "Computer ID"
msgstr "ID de l'ordinateur"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -892,7 +898,7 @@ msgstr "Fusionner les ordinateurs par le nom"
#: ../inc/language_names.inc:61
msgid "Browser default"
-msgstr ""
+msgstr "Navigateur par défaut"
#: ../inc/news.inc:40
msgid "Comment"
@@ -911,7 +917,7 @@ msgstr "Courrier entrant"
msgid "Write"
msgstr "Écrire"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Envoyer un message privé"
@@ -930,9 +936,8 @@ msgid "no such message"
msgstr "message inexistant"
#: ../inc/pm.inc:82
-#, fuzzy
msgid "To"
-msgstr "Pour"
+msgstr "A"
#: ../inc/pm.inc:82
msgid "User IDs or unique usernames, separated with commas"
@@ -1209,9 +1214,9 @@ msgstr ""
"plus %2"
#: ../inc/prefs.inc:344
-#, fuzzy
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
-msgstr "Utiliser le GPU ATI %1 Applicable depuis la version 6.10 et plus %2"
+msgstr ""
+"Utiliser le GPU Intel %1 Applicable depuis la version 7.2 et suivantes %2"
#: ../inc/prefs.inc:358
msgid ""
@@ -1338,16 +1343,19 @@ msgstr "Modifier les préférences de %1"
#: ../inc/prefs.inc:885
msgid "These apply to all BOINC projects in which you participate."
msgstr ""
+"Ceux-ci s'appliquent sur tous les projets BOINC auxquels vous participez."
#: ../inc/prefs.inc:887
msgid ""
"On computers participating in multiple projects, the most recently modified "
"preferences will be used."
msgstr ""
+"Sur les ordinateurs participants à plusieurs projets, les préférences mises "
+"à jours le plus récemment seront utilisées."
#: ../inc/prefs.inc:889
msgid "These preferences do not apply to Android devices."
-msgstr ""
+msgstr "Ces préférences ne sont pas applicables pour les appareils Android."
#: ../inc/prefs.inc:892
msgid "Preferences last modified:"
@@ -1446,7 +1454,7 @@ msgstr "GPU ATI"
#: ../inc/result.inc:57 ../user/host_app_versions.php:28
msgid "Intel GPU"
-msgstr ""
+msgstr "GPU Intel"
#: ../inc/result.inc:65
msgid "Not in DB"
@@ -1697,7 +1705,7 @@ msgstr "Délai reporté<br/>ou date limite"
msgid "explain"
msgstr "explication"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "État"
@@ -1774,9 +1782,8 @@ msgid "State"
msgstr "État"
#: ../inc/result.inc:747
-#, fuzzy
msgid "Task name:"
-msgstr "Nom de tâche"
+msgstr "Nom de la tâche:"
#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
@@ -1791,9 +1798,9 @@ msgid "Find teams with these words in their names or descriptions"
msgstr ""
"Trouver des équipes dont le nom ou la description contiennent ces mots clefs"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1801,7 +1808,7 @@ msgstr ""
msgid "Country"
msgstr "Pays"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Type d'équipe"
@@ -1830,8 +1837,8 @@ msgstr "Vous l'avez requis"
msgid "founder response deadline is %1"
msgstr "la date limite de réponse du fondateur est %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Aucun(e)"
@@ -1855,28 +1862,28 @@ msgstr "Description"
msgid "Web site"
msgstr "Site web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Statistiques inter-projets"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Type"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Sujets"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Rejoindre cette équipe"
# Verifier si le OK to email est traduisible ou pas
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1885,80 +1892,80 @@ msgstr ""
"de rejoindre une équipe, donnera accès à votre adresse email à son "
"fondateur."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "N'accepte pas de nouveaux membres"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Changement de fondateur demandé"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Répondre par %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Changement de fondateur de l'équipe"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Membres"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fondateur"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administrateurs"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nouveaux membres de la veille"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Membres totaux"
# vue ?
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "voir"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Membres actifs"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Membres avec du crédit"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrateur"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "%1 précédent"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Prochains %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Pas de telle équipe."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Cette opération requiert d'être fondateur."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Cette opération requiert les privilèges d'administrateur de l'équipe"
@@ -1971,7 +1978,7 @@ msgstr ""
"modifications ici, elles seront écrasées rapidement. A la place, éditez %"
"1l'équipe globale BOINC%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1979,47 +1986,47 @@ msgstr ""
"%1Confidentialité%2: si vous créez une équipe, vos préférences (partage de "
"ressources, préférences graphiques) deviendront publiques."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nom de l'équipe, version texte"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ne pas utiliser de balises HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nom de l'équipe, version HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Vous pouvez utiliser %1certaines balises HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Si vous ne connaissez pas HTML, laissez cette zone vide."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL de l'équipe si disponible"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sans \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "La page de l'équipe sur ce site pointera sur cette URL."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Description de l'équipe"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Accepte des nouveaux membres ?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil utilisateur"
@@ -2053,7 +2060,7 @@ msgstr "Ordinateurs de ce compte"
# vue ?
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Voir"
@@ -2070,8 +2077,8 @@ msgstr "Statistiques inter-projets"
msgid "Account"
msgstr "Compte"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Equipe"
@@ -2100,7 +2107,7 @@ msgstr "Informations de compte"
msgid "Email address"
msgstr "Adresse email"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2108,7 +2115,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Code postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 membre depuis"
@@ -2128,7 +2135,7 @@ msgstr "mot de passe"
msgid "other account info"
msgstr "autres informations"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Identifiant utilisateur"
@@ -2173,96 +2180,96 @@ msgstr "Préférences de %1"
msgid "Community"
msgstr "Communauté"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Supprimer"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Créer"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 messages"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notifications"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Quitter l'équipe"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrer"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(demande de changement de fondateur en cours)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Membre de l'équipe"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "trouver une équipe"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fondateur mais non membre de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Trouver des amis"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amis"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Ordinateurs"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donateur"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contacter"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Cette personne est un(e) ami(e)"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Annuler l'amitié"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Requête en cours"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Ajouter en tant qu'ami(e)"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "le nom d'utilisateur ne peut contenir d'espace au début ou à la fin"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "le nom d'utilisateur ne doit pas être vide"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "le nom d'utilisateur ne peut pas contenir de balises HTML"
@@ -2346,7 +2353,7 @@ msgstr ""
"Impossible d'interroger la base de données - veuillez réessayer "
"ultérieurement"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Rester connecté sur cet ordinateur"
@@ -2424,9 +2431,12 @@ msgid ""
"HTML)."
msgstr ""
"Les balises BBCode vous permettent de formater le texte de votre profil et "
-"les messages publiés.C'est similaire à l'HTML, mais plus simple. Les balises "
-"commencent par un [ (là où vous auriez dû utiliser %1 en HTML) et se "
-"terminent par ] (où vous auriez dû utiliser %2 en HTML)."
+"les messages publiés.\n"
+"C'est similaire au HTML, mais en plus simple. Les balises commencent par un "
+"[ (là où vous\n"
+"auriez dû utiliser %1 en HTML) et se terminent par ] (où vous auriez dû "
+"utiliser %2 \n"
+"en HTML)."
#: ../user/bbcode.php:31
msgid "Examples"
@@ -2445,9 +2455,8 @@ msgid "Underline"
msgstr "Souligné"
#: ../user/bbcode.php:35
-#, fuzzy
msgid "Superscript"
-msgstr "Superscript"
+msgstr "Exposant"
#: ../user/bbcode.php:36
msgid "Big text"
@@ -2520,15 +2529,16 @@ msgid ""
"the raw tag itself will display instead of the formatted text."
msgstr ""
"Si vous ne fermez pas une balise ou ne spécifiez pas correctement un "
-"paramètre, le texte même de la balise sera affiché et non le texte formaté."
+"paramètre, \n"
+"le texte même de la balise sera affiché et non le texte formaté."
#: ../user/bs_sample_index.php:44
msgid "Participants"
-msgstr ""
+msgstr "Participants"
#: ../user/bs_sample_index.php:46
msgid "Do work"
-msgstr ""
+msgstr "Faire le travail"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
#: ../user/home.php:49 ../project.sample/project.inc:43
@@ -2537,7 +2547,7 @@ msgstr "Votre compte"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
msgid "view stats, modify preferences"
-msgstr ""
+msgstr "afficher des statistiques, modifier les préférences"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
#: ../user/team.php:25
@@ -2546,13 +2556,13 @@ msgstr "Equipes"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
msgid "create or join a team"
-msgstr ""
+msgstr "créer ou rejoindre une équipe"
#: ../user/bs_sample_index.php:51 ../user/sample_index.php:191
msgid "User of the day"
msgstr "Utilisateur du jour"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "État du serveur"
@@ -2563,11 +2573,11 @@ msgstr "Profils"
#: ../user/bs_sample_index.php:61
msgid "User search"
-msgstr ""
+msgstr "Recherche d'utilisateur"
#: ../user/bs_sample_index.php:64
msgid "Statistics"
-msgstr ""
+msgstr "Statistiques"
#: ../user/bs_sample_index.php:65 ../user/stats.php:30
#: ../user/top_users.php:116
@@ -2588,9 +2598,8 @@ msgid "Top GPU models"
msgstr "Meilleurs modèles GPU"
#: ../user/bs_sample_index.php:70
-#, fuzzy
msgid "Languages"
-msgstr "Langue"
+msgstr "Langues"
#: ../user/bs_sample_index.php:149 ../user/info.php:24
#: ../user/sample_index.php:79
@@ -2911,7 +2920,8 @@ msgid ""
"if you want another profile in the future."
msgstr ""
"Les profils supprimés ne peuvent plus être récupérés --\n"
-"vous devrez tout recommencer si vous voulez un nouveau profil par la suite."
+"vous devrez tout recommencer si vous voulez \n"
+"un nouveau profil par la suite."
#: ../user/delete_profile.php:48
msgid ""
@@ -3219,8 +3229,9 @@ msgid ""
"<br> providing dynamic 'signature images'\n"
"<br> showing your latest credit info, project news, etc."
msgstr ""
-"Essayez divers %1services gratuits%2<br> offrant des images de signature "
-"dynamique<br> montrant vos statistiques, des nouvelles des projets, etc."
+"Essayez divers %1services gratuits%2<br> \n"
+"offrant des images de signature dynamique<br> \n"
+"montrant vos statistiques, des nouvelles des projets, etc."
#: ../user/edit_forum_preferences_form.php:104
msgid "characters remaining"
@@ -3645,6 +3656,8 @@ msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
+"Ce projet n'a pas créé de message email - Veuillez notifier ses "
+"administrateurs"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -4210,8 +4223,9 @@ msgid ""
"has not yet read the thread will quickly be able to identify the issue.%2"
msgstr ""
"Pourquoi trouvez vous ce message insultant : %1Merci d'inclure suffisamment "
-"d'information pour qu'une personne n'ayant pas encore lu le sujet puisse "
-"être capable d'identifier rapidement le problème%2"
+"d'information pour qu'une personne \n"
+"n'ayant pas encore lu le sujet puisse être capable d'identifier rapidement "
+"le problème%2"
#: ../user/forum_report_post.php:90
msgid "Report not registered"
@@ -4697,6 +4711,8 @@ msgid ""
"Go to the BOINC data directory on your computer (its location is written to "
"the Event Log at startup)."
msgstr ""
+"Aller dans le répertoire de données de BOINC de votre ordinateur (son chemin "
+"est inscrit dans le Journal d’événements au démarrage). "
#: ../user/get_passwd.php:51
msgid "Find your account file for this project; it will be named <b>%1</b>."
@@ -5263,11 +5279,15 @@ msgid ""
" <p>"
msgstr ""
"Cette opération fusionne les ordinateurs en fonction de leur nom de domaine. "
-" <p> Pour chaque nom de "
-"domaine, tous les ordinateurs les plus anciens ayant ce nom "
-" seront fusionnés avec les ordinateurs les plus "
-"récents ayant ce nom. Les ordinateurs incompatibles ne "
-"seront pas fusionnés. <p>"
+" \n"
+" <p>\n"
+" Pour chaque nom de domaine, tous les ordinateurs les "
+"plus anciens ayant ce nom\n"
+" seront fusionnés avec les ordinateurs les plus "
+"récents ayant ce nom.\n"
+" Les ordinateurs incompatibles ne seront pas "
+"fusionnés.\n"
+" <p>"
#: ../user/merge_by_name.php:82
msgid "Go ahead and do this"
@@ -5284,9 +5304,9 @@ msgid ""
"our message boards are moderated.\n"
"Message board postings are subject to the following posting rules:\n"
msgstr ""
-"Afin de maximiser la discussion et la circulation de l'information, nos "
-"forums sont modérés.Les messages des forums sont soumis aux règles "
-"suivantes:"
+"Afin de maximiser la discussion et la circulation de l'information, \n"
+"nos forums sont modérés.\n"
+"Les messages des forums sont soumis aux règles suivantes:\n"
#: ../user/moderation.php:30
msgid ""
@@ -5455,8 +5475,11 @@ msgid ""
" by the Akismet anti-spam system.\n"
" Please modify your text and try again."
msgstr ""
-"Votre réponse a été marquée comme spam par le système anti-spam Akismet.\n"
-" Veuillez modifier votre texte et réessayer."
+"Votre réponse a été marquée comme spam \n"
+" par le système anti-"
+"spam Akismet.\n"
+" Veuillez modifier votre "
+"texte et réessayer."
#: ../user/pm.php:205
msgid "Could not find user with id %1"
@@ -5548,9 +5571,10 @@ msgid ""
" will take effect when your computer communicates with %1\n"
" or you issue the %2Update%3 command from the BOINC Manager."
msgstr ""
-"Vos préférences ont été réinitialisées et "
-"prendront effet lorsque votre ordinateur communiquera avec %1 "
-" ou si vous demandez une %2mises à jour%3 "
+"Vos préférences ont été réinitialisées et\n"
+" prendront effet lorsque votre ordinateur "
+"communiquera avec %1\n"
+" ou si vous demandez une %2mises à jour%3 "
"depuis le BOINC Manager."
#: ../user/prefs_edit.php:65 ../user/prefs_edit.php:93
@@ -5721,136 +5745,136 @@ msgstr "Arrêté"
msgid "Disabled"
msgstr "Suspendu"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Statut du projet"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Version du serveur: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programme"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Hôte"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "pages web pilotée par les données"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "serveur d'upload/download"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "ordonnanceur"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "En cours d'exécution:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Le programme fonctionne normalement"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Arrêté:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programme en échec ou projet arrêté"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Suspendu:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Le programme est suspendu"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "État de l'exécution"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Le serveur de base de donnée n'est pas joignable"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tâches prêtes à l'envoi"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tâches en cours"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Unités de travail en attente de validation"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Unités de travail en attente d'assimilation"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Unités de travail en attente de nettoyage de fichiers"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Tâches en attente de nettoyage de fichiers"
# aucune idée de comment traduire ce truc...
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Transitioner backlog (heures)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Utilisateurs"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "avec des crédits récents"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "avec des crédits"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "enregistrés dans les dernières 24 heures"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOPs actuels"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tâches par application"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "applications"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "non envoyé"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "en cours"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "temps d'exécution moyen des 100 derniers résultats en heures (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "utilisateurs dans les dernières 24 heures"
@@ -6132,6 +6156,10 @@ msgstr "Nouveau fondateur ?"
msgid "Change founder"
msgstr "Changer de fondateur"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Il n'y a pas d'utilisateur à qui transférer l'équipe."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Vous devez choisir une nom d'équipe"
@@ -6933,8 +6961,9 @@ msgid ""
" Your account key is:"
msgstr ""
"Vous pouvez accéder à votre compte soit en utilisant votre adresse email et "
-"mot de passe ou en utilisant une 'clé de compte'. "
-"Votre clé de compte est :"
+"mot de passe\n"
+" ou en utilisant une 'clé de compte'.\n"
+" Votre clé de compte est :"
#: ../user/weak_auth.php:57
msgid "This key can be used to:"
@@ -6951,10 +6980,10 @@ msgid ""
" create a file named %1 in the BOINC\n"
" data directory, and set its contents to:"
msgstr ""
-"pour rattacher un ordinateur à votre compte sans utiliser le BOINC Manager "
-" Vous devez installer BOINC, "
-"crée un répertoire nommé %1 dans le répertoire de "
-"données BOINC, et définir son contenu à:"
+"pour rattacher un ordinateur à votre compte sans utiliser le BOINC Manager\n"
+" Vous devez installer BOINC,\n"
+" crée un répertoire nommé %1 dans le répertoire\n"
+" de données BOINC, et définir son contenu à:"
#: ../user/weak_auth.php:73
msgid "Weak account key"
@@ -6970,12 +6999,13 @@ msgid ""
" Your weak account key is:"
msgstr ""
"Votre 'clé de compte non robuste' peut être utilisée pour rattacher des "
-"ordinateurs à votre compte comme décrit ci-dessus, mais ne peut pas "
-"être utilisée pour se connecter à votre compte ou le modifier en aucune "
-"façon. Si vous voulez rattacher des ordinateurs dans lesquels vous "
-"n'avez pas confiance ou qui ne sont pas sûrs à votre compte, faites "
-"le avec votre clé de compte non robuste. Votre clé de compte non "
-"robuste est:"
+"ordinateurs à votre compte\n"
+" comme décrit ci-dessus, mais ne peut pas être utilisée pour se "
+"connecter à votre compte ou le modifier en aucune façon.\n"
+" Si vous voulez rattacher des ordinateurs dans lesquels vous n'avez "
+"pas confiance ou qui ne sont pas sûrs à votre compte,\n"
+" faites le avec votre clé de compte non robuste.\n"
+" Votre clé de compte non robuste est:"
#: ../user/weak_auth.php:81
msgid ""
@@ -7065,9 +7095,11 @@ msgid ""
" <li>Any suggestions?\n"
" </ol>"
msgstr ""
-"Dites nous vos pensées à propos de %1<ol> <li>Pourquoi utilisez vous %1? "
-" <li>Quel est votre point de vue à propos du projet ? <li>Des "
-"suggestions ? </ol>"
+"Dites nous vos pensées à propos de %1<ol>\n"
+" <li>Pourquoi utilisez vous %1?\n"
+" <li>Quel est votre point de vue à propos du projet ?\n"
+" <li>Des suggestions ?\n"
+" </ol>"
#: ../project.sample/project_specific_prefs.inc:47
msgid "Color scheme for graphics"
diff --git a/locale/fr/BOINC-Setup.mo b/locale/fr/BOINC-Setup.mo
index aa5ab57..4d7112a 100644
Binary files a/locale/fr/BOINC-Setup.mo and b/locale/fr/BOINC-Setup.mo differ
diff --git a/locale/fr/BOINC-Setup.po b/locale/fr/BOINC-Setup.po
index 9b04cd1..95b4eb8 100644
--- a/locale/fr/BOINC-Setup.po
+++ b/locale/fr/BOINC-Setup.po
@@ -6,36 +6,40 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-02 21:30+0000\n"
+"Last-Translator: Jerome Cadet <jerome.cadet at pobox.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.5\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
+"X-POOTLE-MTIME: 1391376604.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
#, c-format
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
+"Veuillez nous excuser, cette version de %s requiert un système 10.5 ou "
+"supérieur."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
-msgstr ""
+msgstr "Oui"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
-msgstr ""
+msgstr "Non"
#: PostInstall.cpp:133
msgid "Should BOINC run even when no user is logged in?"
-msgstr ""
+msgstr "BOINC doit-il fonctionner même lorsqu'aucun utilisateur n'est connecté?"
#: PostInstall.cpp:1416
#, c-format
@@ -46,49 +50,70 @@ msgid ""
"Do you also want non-administrative users to be able to run and control %s "
"on this Mac?"
msgstr ""
+"Les utilisateurs ayant les privilèges administrateurs sur cet ordinateur "
+"seront automatiquement autorisés à exécuter et contrôler %s.\n"
+"\n"
+"Voulez-vous aussi autoriser les utilisateurs non-administrateurs à exécuter "
+"et contrôler %s sur ce Mac ?"
#: PostInstall.cpp:1444
#, c-format
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
+"Voulez-vous établir %s comme économiseur d'écran pour tous les utilisateurs "
+"%s sur ce Mac ?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
-msgstr ""
+msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
-msgstr ""
+msgstr "Erreur de droit d'accès après un redémarrage"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
+"La suppression peut durer plusieurs minutes.\n"
+"Veuillez patienter."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
"\n"
"This will remove the executables but will not touch %s data files."
msgstr ""
+"Êtes-vous certain de vouloir supprimer %s de votre ordinateur ?\n"
+"\n"
+"Cela supprimera les fichiers exécutables mais pas les fichiers de données %"
+"s."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
-msgstr ""
+msgstr "Annulé : %s n'a pas été modifié ."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
-msgstr ""
+msgstr "Une erreur est survenue: code d'erreur %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
+msgstr "nom d'utilisateur"
+
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
msgstr ""
+"Voulez-vous également supprimer VirtualBox de votre ordinateur?\n"
+"(VirtualBox a été installé en même temps que BOINC)"
-#: uninstall.cpp:262
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -99,19 +124,30 @@ msgid ""
"for each user, the file\n"
"\"%s\"."
msgstr ""
+"Suppression effectuée.\n"
+"\n"
+"Vous voulez peut-être supprimer les éléments restants suivants en utilisant "
+"l'outil de recherche: \n"
+"le répertoire \"%s\"\n"
+"\n"
+"pour chaque utilisateur, le fichier\n"
+"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
"computer.\n"
"\n"
msgstr ""
+"Inscrivez votre mot de passe administrateur pour effacer complètement %s de "
+"votre ordinateur. \n"
+"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
-msgstr ""
+msgstr "Annuler"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
-msgstr ""
+msgstr "Continuer..."
diff --git a/locale/fr/BOINC-Web.mo b/locale/fr/BOINC-Web.mo
index 76393e3..6c52320 100644
Binary files a/locale/fr/BOINC-Web.mo and b/locale/fr/BOINC-Web.mo differ
diff --git a/locale/fr/BOINC-Web.po b/locale/fr/BOINC-Web.po
index 10bef8b..26237af 100644
--- a/locale/fr/BOINC-Web.po
+++ b/locale/fr/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-10-06 20:40+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-02 21:53+0000\n"
"Last-Translator: Jerome Cadet <jerome.cadet at pobox.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: fr\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: doc\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1381092035.0\n"
+"X-POOTLE-MTIME: 1391378007.0\n"
"X-Poedit-KeywordsList: tra\n"
#: docutil.php:21
@@ -41,29 +41,31 @@ msgid ""
"We recommend that you also install VirtualBox, so your computer can work on "
"science projects that require it."
msgstr ""
+"Nous vous recommandons d'installer également VirtualBox afin que votre "
+"ordinateur puisse aussi faire fonctionner les projets qui le nécessitent."
#: download.php:41
msgid "Learn more about VirtualBox."
-msgstr ""
+msgstr "En apprendre plus sur VirtualBox."
#: download.php:51
msgid "Download BOINC + VirtualBox"
-msgstr ""
+msgstr "Télécharger BOINC + VirtualBox"
#: download.php:54 download.php:69
#, php-format
msgid "for %s"
-msgstr ""
+msgstr "pour %s"
#: download.php:57 download.php:72
#, php-format
msgid "BOINC version %s"
-msgstr ""
+msgstr "BOINC version %s"
#: download.php:59
#, php-format
msgid "VirtualBox version %s"
-msgstr ""
+msgstr "VirtualBox version %s"
#: download.php:67
msgid "Download BOINC"
@@ -75,27 +77,34 @@ msgid ""
"projects like SETI at home, Climateprediction.net, Rosetta at home, World "
"Community Grid, and many others."
msgstr ""
+"BOINC est un programme qui vous permet d'offrir le temps de calcul inutilisé "
+"de votre ordinateur à des projets scientifiques comme SETI at home, "
+"Climateprediction.net, Rosetta at home, World Community Grid, et beaucoup "
+"d'autres."
#: download.php:125
msgid ""
"After installing BOINC on your computer, you can connect it to as many of "
"these projects as you like."
msgstr ""
+"Après avoir installé BOINC sur votre ordinateur, vous pouvez le connecter à "
+"autant de ces projets que vous le désirez."
#: download.php:127
msgid ""
"You may run this software on a computer only if you own the computer or have "
"the permission of its owner."
msgstr ""
-"Vous ne devez faire fonctionner ce logiciel sur un ordinateur uniquement si "
-"l'ordinateur vous appartient ou si vous en avez la permission de son "
-"propriétaire."
+"Vous ne devez faire fonctionner ce logiciel sur un ordinateur que s'il vous "
+"appartient ou si vous avez la permission de son propriétaire."
#: download.php:132
msgid ""
"We recommend that you download BOINC from the Google Play Store or Amazon "
"Appstore, not from here."
msgstr ""
+"Nous vous recommandons de télécharger BOINC depuis le site de Google Play ou "
+"d'Amazon Appstore, et non d'ici."
#: download.php:167
msgid "System requirements"
@@ -119,7 +128,7 @@ msgstr "Historique des versions"
#: download.php:172
msgid "GPU computing"
-msgstr ""
+msgstr "calcul sur GPU"
#: download.php:190
msgid "BOINC: compute for science"
@@ -159,11 +168,11 @@ msgid ""
"also use Skype's text-based chat system or regular email (if you don't have "
"Skype) to communicate with Help Volunteers."
msgstr ""
-"Vous obtiendrez de l'aide de la meilleure façon de vive voix. Pour ce faire "
-"vous devez disposer d'un microphone et d'enceintes ou d'un casque de "
-"communication. Vous pouvez également utiliser le système de tchat textuel "
-"de Skype ou plus classiquemeent le courriel (si vous ne disposez pas de "
-"Skype) pour communiquer avec les volontaires."
+"La meilleure façon de demander de l'aide est de la faire de vive voix. Pour "
+"cela vous devez disposer d'un microphone et d'enceintes ou d'un casque de "
+"communication. Vous pouvez également utiliser le système de tchat textuel de "
+"Skype ou plus classiquemeent le courriel (si vous ne disposez pas de Skype) "
+"pour communiquer avec les volontaires."
#: help.php:31
msgid ""
@@ -203,7 +212,7 @@ msgid ""
"or the University of California."
msgstr ""
"Les volontaires de support BOINC sont bénévoles. Leurs conseils ne sont pas "
-"garantis par BOINC ou l'Université de Californie."
+"sous la responsabilité de BOINC ou l'Université de Californie."
#: help_funcs.php:110
msgid "%1Never%2 give email address or password information to BOINC helpers."
@@ -217,7 +226,7 @@ msgstr "Puissance de calcul"
#: index.php:26
msgid "Top 100 volunteers"
-msgstr "100 meilleurs participants"
+msgstr "Les 100 meilleurs participants"
#: index.php:27
msgid "Statistics"
@@ -241,13 +250,12 @@ msgstr "moyenne sur 24 heures:"
# 80%
#: index.php:56
-#, fuzzy
msgid "PetaFLOPS."
-msgstr "TeraFLOPS."
+msgstr "PétaFLOPS."
#: index.php:68
msgid "News"
-msgstr "Nouvelles"
+msgstr "Actualités"
#: index.php:83
msgid "Volunteer"
@@ -263,11 +271,11 @@ msgstr "Documentation"
#: index.php:88
msgid "Add-ons"
-msgstr ""
+msgstr "Extensions"
#: index.php:89
msgid "Links"
-msgstr ""
+msgstr "Liens"
#: index.php:94
msgid ""
@@ -275,18 +283,22 @@ msgid ""
"diseases, study global warming, discover pulsars, and do many other types of "
"scientific research. It's safe, secure, and easy:"
msgstr ""
+"Utilise les ressources inexploitées de votre ordinateur (Windows, Mac, Linux "
+"ou Android) pour guérir des maladies, étudier le réchauffement planétaire, "
+"découvrir des pulsars et faire beaucoup d'autres types de recherches "
+"scientifiques. C'est sans danger, sécurisé et facile:"
#: index.php:96
msgid "Choose projects"
-msgstr ""
+msgstr "Choisir des projets"
#: index.php:97
msgid "Download BOINC software"
-msgstr ""
+msgstr "Télécharger le logiciel BOINC"
#: index.php:98
msgid "Enter an email address and password."
-msgstr ""
+msgstr "Entrer une adresse courriel et un mot de passe."
#: index.php:102
#, php-format
@@ -339,11 +351,11 @@ msgstr "Listes email"
#: index.php:157
msgid "Personnel and contributors"
-msgstr "Personnel et donateurs"
+msgstr "Personnel et contributeurs"
#: index.php:158
msgid "Events"
-msgstr "Evénements"
+msgstr "Evènements"
#: index.php:159
msgid "Papers and talks"
@@ -363,7 +375,7 @@ msgstr "et"
#: index.php:166
msgid "Help wanted"
-msgstr "Aidez nous ! "
+msgstr "Aidez-nous ! "
#: index.php:168
msgid "Programming"
@@ -393,7 +405,7 @@ msgstr "API pour extensions logicielles"
#, php-format
msgid ""
"Open-source software for %svolunteer computing%s and %sgrid computing%s."
-msgstr "Logiciel libre de %scalcul bénévole%s et %sdistribué%s."
+msgstr "Logiciel libre pour le %scalcul bénévole%s et %sle calcul distribué%s."
#: index.php:230
msgid "BOINC is based at The University of California, Berkeley"
@@ -401,17 +413,16 @@ msgstr "BOINC est basé à l'Université de Californie, Berkeley"
#: projects.inc:14
msgid "Distributed sensing"
-msgstr ""
+msgstr "Réseau de capteurs"
# 78%
#: projects.inc:19
-#, fuzzy
msgid "Stanford University"
-msgstr "Université d'Oxford"
+msgstr "Université de Stanford"
#: projects.inc:20
msgid "Seismology"
-msgstr ""
+msgstr "Sismologie"
#: projects.inc:21
msgid ""
@@ -419,14 +430,18 @@ msgid ""
"using sensors attached to Internet-connected computers. You must buy a "
"sensor to participate."
msgstr ""
+"Le Réseau de Capteurs Sismiques QCN développe le plus grand réseau "
+"sismologique au monde en utilisant les capteurs sismiques reliés à des "
+"ordinateurs connectés sur Internet.Vous devez acheter un capteur pour y "
+"participer."
#: projects.inc:27
msgid "BOINC Poland Foundation"
-msgstr ""
+msgstr "Fondation BOINC de Pologne"
#: projects.inc:28
msgid "Environmental research"
-msgstr ""
+msgstr "Recherche environnementale"
#: projects.inc:29
msgid ""
@@ -434,27 +449,32 @@ msgid ""
"levels by using sensors connected to volunteers' computers. You must buy a "
"sensor to participate."
msgstr ""
+"Ce projet créé une cartographie gratuite continuellement à jour des niveaux "
+"de radiation en utilisant des capteurs reliés aux ordinateurs des "
+"volontaires. Vous devez acheter un capteur pour y participer."
#: projects.inc:33
msgid ""
"To participate in these projects you must buy a sensor and attach it to your "
"computer."
msgstr ""
+"Pour participer à ces projets, vous devez acheter un capteur et le brancher "
+"sur votre ordinateur."
#: projects.inc:37
msgid "Cognitive science and artifical intelligence"
msgstr "Science cognitive et intelligence artificielle"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Privé"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Intelligence artificielle"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -466,19 +486,19 @@ msgstr ""
"des analyseurs morphologiques et une partie des bases de données orales afin "
"d'imiter le comportement humain dans les conversations."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologie et médecine"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
-msgstr ""
+msgstr "University College Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
-msgstr ""
+msgstr "Découverte de médicaments antipaludiques"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -486,16 +506,21 @@ msgid ""
"the parasite. The FightMalaria at Home project is aimed at finding these new "
"targets."
msgstr ""
+"Le parasite causant la malaria continue de développer une résistance aux "
+"médicaments disponibles. C'est pourquoi, il est urgent de découvrir de "
+"nouveaux médicaments pour les remplacer. Plus important encore; ces nouveaux "
+"médicaments doivent cibler de nouvelles protéines du parasite. Le projet "
+"FightMalaria at Home a pour but de trouver ces nouvelles cibles."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Université de Karlsruhe (Allemagne)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Prédiction de la structure des protéines"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -511,15 +536,15 @@ msgstr ""
"base de structures tridimensionnelle des protéines biologiquement "
"importantes."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Université de Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Étude de protéine - interactions de ligand"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -531,15 +556,15 @@ msgstr ""
"ligand, et ainsi, par leur analyse découvrir de nouveaux produits "
"pharmaceutiques."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Campus de Recherche Biomédicale de Barcelone (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Simulations moléculaires de protéines"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -552,15 +577,15 @@ msgstr ""
"applications biomédicales deviennent soudainement possibles donnant un "
"nouveau rôle à la biologie informatique pour la recherche biomédicale."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israël"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Analyse des liens génétiques"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -570,18 +595,18 @@ msgstr ""
"responsables de quelques types de diabète, l'hypertension, cancer, "
"schizophrénie et bien d'autres."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
"Centre Universitaire du Maryland pour la bio-informatique et la biologie "
"informatique"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Recherche en sciences de la vie"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -593,15 +618,15 @@ msgstr ""
"données séquentielles d'ADN; bactérien, plasmide, séquences de protéine "
"virales, et biodiversité dans les réserves naturelles."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "L'institut Tropical Suisse"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Épidémiologie"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -621,15 +646,15 @@ msgstr ""
"liés aux facteurs biologiques et sociaux qui influencent la diffusion de la "
"maladie."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Université de Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologie"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -646,11 +671,11 @@ msgstr ""
"concevoir de nouvelles protéines pour combattre les maladies telles que HIV, "
"la malaria, le Cancer, et l'Alzheimer"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Université de Vienne"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -660,19 +685,19 @@ msgstr ""
"données publique des résultats qui joue un rôle-clé dans de nombreux projets "
"de recherche en bio-informatique. "
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Sciences de la terre"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Université d'Oxford"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Étude du climat"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -693,17 +718,27 @@ msgstr ""
"permettras de voir comment pourrait évoluer le climat au cours du prochain "
"siècle à travers un grand nombre de scénarios différents."
-# 75%
-#: projects.inc:196
-#, fuzzy
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomie/Physique/Chimie"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Sciences Physiques"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Ingénierie Mécanique"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+"Nous sommes en train de calculer le design optimum d'une structure appelée "
+"le \"52 bar truss\""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomie"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -712,16 +747,24 @@ msgid ""
"star formation history) on a resolved pixel-by-pixel basis using spectral "
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
+"Nous combinerons les couvertures spectrales de GALEX, Pan-STARRS1 et WISE "
+"pour générer un atlas des galaxies de l'Univers proche, caractérisées par "
+"leurs spectres UV-visible-NIR. Nous mesurerons des paramètres physiques "
+"(tels que la densité surfacique de masse stellaire, la densité surfacique de "
+"taux de formation d’étoile, l'atténuation et l’historique de la formation "
+"des étoiles de 1ère génération) basé sur une résolution au pixel près en "
+"utilisant la distribution d'énergie spectrale qui convient parfaitement aux "
+"techniques de calculs distribués."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Université du Texas à Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Chimie"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -746,12 +789,11 @@ msgstr ""
"systèmes."
# 95%
-#: projects.inc:240
-#, fuzzy
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
-msgstr "Université de l'Illinois à Urbana-Chamapign"
+msgstr "Université de l'Illinois à Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -761,11 +803,11 @@ msgstr ""
"notre Univers et de trouver la gamme de modèles conformes aux données "
"disponibles en physique des particules en astronomie."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Institut Polytechnique Rensselaer"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -775,11 +817,11 @@ msgstr ""
"précision de la Galaxie Voie Lactée en utilisant les données recueillies par "
"The Sloan Digital Sky Survey (SDSS)."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Université de Leyde, Pays-Bas"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -796,15 +838,15 @@ msgstr ""
"la validité de la loi des gaz parfaits en faisant des simulations à travers "
"la grille de calcul."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Université du Wisconsin - Milwaukee, Institut Max Planck"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrophysique"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -818,15 +860,15 @@ msgstr ""
"Mondiale de la Physique 2005 soutenu par l'American Physical Society (APS) "
"et par un certain nombre d'organisations internationales."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Organisation Européenne pour la Recherche Nucléaire)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Physique"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -841,22 +883,26 @@ msgstr ""
"LHC at home exécute des simulations pour améliorer la conception du LHC et de "
"ses détecteurs."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
+"Ce projet utilise la technologie de machines virtuelles développées par le "
+"CERN pour simuler sur les ordinateurs des volontaires, des évènements "
+"physiques propres au LHC. Cela requiert l'installation de VirtualBox sur "
+"votre ordinateur"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Université de Californie, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrophysique, astrobiologie"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -871,15 +917,15 @@ msgstr ""
"signaux ne sont pas connus pour se produire naturellement, en détecter "
"serait une preuve de la technologie extraterrestre."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Université des Sciences Appliquées de Bielefeld"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Ingénierie chimique et nanotechnologie"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -892,19 +938,19 @@ msgstr ""
"médecine (comme la chimiothérapie locale de la tumeur) et en "
"biotechnologie."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Applications multiples"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Académie Chinoise des Sciences"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Physique, biochimie, et autres"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -914,11 +960,11 @@ msgstr ""
"Chine à adopter les technologies de calcul volontaire partagé et la "
"réflexion des volontaires pour leur recherche."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Mathématique, physique, évolution"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -926,15 +972,15 @@ msgstr ""
"Yoyo at home est un adaptateur entre BOINC et plusieurs projets existants de "
"calcul partagé: ECM, Muon, Evolution at home, et distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "Laboratoire MTA-SZTAKI de Systèmes parallèles et distribués (Hongrie)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Projets de recherche européens"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -947,55 +993,59 @@ msgstr ""
"scientifiques couverts par le projet comprennent les mathématiques, la "
"physique, la biologie, etc"
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Centres de recherche et universités espagnols"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Plusieurs projets de recherche espagnols"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Recherche en physique, science des matériaux, et biomédecine"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
-msgstr ""
+msgstr "IBM Corporate Citizenship"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
-msgstr ""
+msgstr "Recherches médicale, environnementale et autre recherche humanitaire"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
"includes HIV-AIDS, cancer, tropical and neglected diseases, solar energy, "
"clean water and many more."
msgstr ""
+"Pour aider des recherches à but non lucratif critiques sur les problèmes les "
+"plus urgents de l'humanité en créant le plus grand réseau de calcul partagé "
+"volontaire. La recherche inclue le SIDA, le cancer, les maladies tropicales "
+"et orphelines, l'énergie solaire, l'eau propre, et bien d'autres."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Mathématiques, informatique et jeux"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
-msgstr ""
+msgstr "Sciences Informatiques"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
-msgstr ""
+msgstr "Mathématiques, Physique, Intelligence Artificielle"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
-msgstr ""
+msgstr "Simulation de calculateur quantique; conjecture de Goldbach"
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
-msgstr "Cryptographie"
+msgstr "Chiffrement"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1004,26 +1054,26 @@ msgstr ""
"interceptés dans l'Atlantique nord en 1942 et sont réputés ne pas avoir été "
"décodés."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Mathématiques"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-"Étude de la conjecture de Collatz, une conjecture insolvable en "
+"Étude de la conjecture de Collatz, une conjecture non résolue en "
"mathématique."
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Université de l’État de Californie à Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Factorisation de grands nombres entiers"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1039,7 +1089,7 @@ msgstr ""
"5 ou 5 * 7. NFS at Home est la continuation de cette expérience, mais avec des "
"nombres entiers longs de centaines de chiffres."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1047,11 +1097,11 @@ msgstr ""
"Université Technique de Vilnius Gediminas et Université Technologique de "
"Kaunas (Lituanie)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Test de logiciels"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1064,11 +1114,11 @@ msgstr ""
"lituaniennes. Les applications actuelles concernent l'étude de test de "
"logiciels basé sur la méthode Monte-Carlo."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Institut mathématique de l'université de Leiden / Kennislink "
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1086,17 +1136,20 @@ msgstr ""
"plus grands problèmes ouverts en mathématiques. S'il est démontré être vrai, "
"beaucoup d'autres problèmes ouverts peuvent être résolus directement."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
+"Primegrid regroupe divers projets de recherche sur différentes formes de "
+"très grands nombres premiers, incluant des recherches sur les plus grands "
+"nombres premiers connus."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Université de Hochschule RheinMain des sciences appliquées"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1104,7 +1157,7 @@ msgstr ""
"Recherche de contre-exemples à deux conjectures liées à l'identification de "
"nombres premiers"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1114,7 +1167,6 @@ msgstr ""
"dimension 11."
#: ../html/inc/news.inc:40
-#, fuzzy
msgid "Comment"
msgstr "Commentaires"
@@ -1123,6 +1175,11 @@ msgstr "Commentaires"
msgid "News is available as an %sRSS feed%s"
msgstr "Les nouvelles sont disponibles en tant que %sflux RSS%s"
+# 75%
+#, fuzzy
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomie/Physique/Chimie"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s pour %s (%s Mo)"
diff --git a/locale/he/BOINC-Android.po b/locale/he/BOINC-Android.po
index 4a1c82b..5b88e0d 100644
--- a/locale/he/BOINC-Android.po
+++ b/locale/he/BOINC-Android.po
@@ -15,8 +15,9 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1381092035.0\n"
#. app global
#, fuzzy
diff --git a/locale/he/BOINC-Manager.mo b/locale/he/BOINC-Manager.mo
index e7a9683..ccf47a3 100644
Binary files a/locale/he/BOINC-Manager.mo and b/locale/he/BOINC-Manager.mo differ
diff --git a/locale/he/BOINC-Manager.po b/locale/he/BOINC-Manager.po
index 2976e17..a76e55e 100644
--- a/locale/he/BOINC-Manager.po
+++ b/locale/he/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC 6.10.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2012-04-26 04:05+0000\n"
"Last-Translator: Ido <dj_legolas1 at hotmail.com>\n"
"Language-Team: IOPanel.net\n"
@@ -211,338 +211,338 @@ msgstr "מחובר"
msgid "Disconnected"
msgstr "מנותק"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "סגור את חלון %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&סגור חלון"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "צא מ-%s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&התראות\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "הצג התראות"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&פרוייקטים\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "הצג פרוייקטים"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&משימות\t Ctrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "הצג משימות"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "ה&עברות\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "הצג העברות"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&סטטיסטיקות\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "הצג סטטיסטיקות"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&ניצול דיסק\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "הצג ניצול דיסק"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&תצוגה פשוטה...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "הצג ממשק גרפי פשוט."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&הוסף פרוייקט או מנהל חשבונות..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "התנדב לאחד מלמעלה מ-30 פרוייקטים, או יותר, בתחומי מדע שונים"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&התסנכן עם %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "קבל הגדרות נוכחיות מ-%s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&הוסף פרוייקט..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "הוסף פרוייקט"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&הפסק שימוש ב-%s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "הסר מחשב משליטת מנהל חשבונות."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&אפשרויות..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "הגדר אפשרויות תצוגה ושרת פרוקסי"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&העדפות חישוב..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "הגדר העדפות חישוב"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&הרץ תמיד"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "אפשר עבודה ללא קשר להעדפות"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "ה&רץ לפי העדפות"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "אפשר עבודה בהתאם להעדפות"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "ה&שהה"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "עצור עבודה ללא קשר להעדפות"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "השתמש תמיד במעבד הגרפי"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "אפשר עבודת מעבד גרפי ללא קשר להעדפות"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "השתמש במעבד הגרפי בהתאם להעדפות"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "אפשר עבודת מעבד גרפי בהתאם להעדפות"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "השהה מעבד גרפי"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "עצור עבודת מעבד גרפי ללא קשר להעדפות"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "פעילות רשת תמיד זמינה"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "אפשר פעילות רשת ללא קשר להגדרות"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "פעילות רשת בהתאם להעדפות"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "אפשר פעילות רשת בהתאם להעדפות"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "פעילות רשת מושהית"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "עצור פעילות רשת של BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "התחבר למחשב אחר המריץ %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "בחר מחשב..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "כבה מחשב מחובר..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "כבה את המחשב המחובר כעת"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "הרץ &הערכת ביצועים למעבד הגרפי"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "מריץ הערכת ביצועי מעבד של BOINC"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "בצע התקשרות לרשת"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "בצע את כל ההתקשרויות הממתינות לרשת"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "קרא קובץ תצורה"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "קרא קובץ העדפות מקומי"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "קרא נתוני העדפות מ-global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "הרץ עותק נוסף של %s"
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "הפעל %s נוסף"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "יומן אירועים...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "הצג הודעות אבחון"
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "&עזרה של %s"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "הצג מידע אודות %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "ע&זרה של %s"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "הצג מידע אודות ה-%s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "הצג מידע אודות BOINC ו-%s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&אודות %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "מידע על רשיון וזכויות יוצרים."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&קובץ"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&תצוגה"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&כלים"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&פעילות"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&מתקדם"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&עזרה"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - הפסק שימוש ב-%s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -557,12 +557,12 @@ msgstr ""
"\n"
"האם אתה בטוח שברצונך להתנתק מ-%s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - מכבה את הקליינט הנוכחי..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -571,27 +571,27 @@ msgstr ""
"%s יסגור את הקליינט המחובר כרגע\n"
"ויבקש ממך להתחבר למחשב מארח אחר."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s הוסיף בהצלחה את %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "מתחבר ל-%s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "מחובר ל-%s (%s)"
@@ -628,26 +628,26 @@ msgstr ""
"\n"
"אנא היכנס לאתר הפרוייקט ועקוב אחר ההוראות שם."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "מתקשר עם קליינט BOINC. אנא המתן..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&הפסק %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "&צא מ-%s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - תיקשורת"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "ביטול"
@@ -804,7 +804,7 @@ msgstr "%s התנתק מהאינטרנט בהצלחה."
msgid "%s failed to disconnected from the Internet."
msgstr "%s כשל בהתנתקות מהאינטרנט."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -825,7 +825,7 @@ msgstr ""
" -צור קשר עם מנהל הרשת על מנת להוסיף אותך לקבוצת\n"
" המשתמשים 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -834,17 +834,17 @@ msgstr ""
"הבעלות או ההרשאות של %s אינן מוגדרות כראוי; אנא התקן מחדש את %s.\n"
"(קוד שגיאה: %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
#, fuzzy
msgid " at "
msgstr " ב "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -852,67 +852,67 @@ msgstr ""
"איתחול נחוץ כדי ש-BOINC ירוץ בצורה תקינה.\n"
"אנא אתחל את המחשב ונסה שוב לאחר מכן."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Manager הופעל אוטומטית על ידי המערכת הפעלה"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "הפעל את BOINC כך שניתן יהיה לראות רק את הסמל בשורת המשימות."
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "התיקייה המכילה את קבצי ההפעלה של קליינט ה-BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "תיקיית קבצי המידע של BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "שם מחשב או כתובת IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "מספר הפורט של פרוצדורת קריאה מרוחקת לממשק משתמש גרפי"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "סיסמה"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "הפעל BOINC עם הגדרות אופציונליות אלו"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "נטרל את משתמשי האבטחה וההרשאות של BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "הפעל מצב איתור שגיאות מראה בכדי לאפשר הודעות שגיאה ממנהל המראה"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "ריבוי עותקי BOINC Manager מאושר"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(זיהויי אוטומטי)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(לא ידוע)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(מוגדר ע\"י משתמש)"
@@ -939,7 +939,7 @@ msgid "E&xit"
msgstr "י&ציאה"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "המשך"
@@ -1097,66 +1097,66 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&אישור"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "ערך לא חוקי"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "זמן לא נכון, הצורה צריכה להיות HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "מרווח זמן שגוי, הצורה צריכה להיות HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "זוהה ערך מוזן לא נכון"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "תקלת אימות"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "אפליקציות להוספה"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "\"%s\" אינה אפליקציה הניתנת להרצה."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
#, fuzzy
msgid "Add Exclusive App"
msgstr "הוסף אפליקציה מיוחדת"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "שם האפליקציה להוספה?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
#, fuzzy
msgid "Add exclusive app"
msgstr "הוסף אפליקציה מיוחדת"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "שם האפליקציה חייב להסתיים ב-'%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' כבר קיים ברשימה."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
#, fuzzy
msgid ""
"Do you really want to clear all local preferences?\n"
@@ -1165,11 +1165,11 @@ msgstr ""
"אתה בטוח שברצונך למחוק את ההעדפות המקומיות?\n"
"(פעולה זו לא תשפיעה על האפליקציות המיוחדות.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "אימות"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - העדפות"
@@ -1185,11 +1185,11 @@ msgstr ""
"לחץ 'אישור' כדי לקבוע את ההעדפות.\n"
"לחץ 'נקה' כדי לשחזר הגדרות מבוססות-אתר (למעט אפליקציות מיוחדות)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "נקה"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "נקה את כל ההעדפות המקומיות וסגור את החלון"
@@ -1210,7 +1210,7 @@ msgstr "שימוש בדיסק וזיכרון"
msgid "exclusive applications"
msgstr "אפליקציות מיוחדות"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "אישור"
@@ -1223,7 +1223,7 @@ msgid "close the dialog without saving"
msgstr "סגור את החלון ללא שמירה"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "עזרה"
@@ -1273,7 +1273,7 @@ msgid ""
msgstr "עבד מידע רק אחרי שלא השתמשת במחשב למשך מספר הדקות הזה"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "דקות"
@@ -1289,7 +1289,7 @@ msgstr "השהה עבודה אם השימוש במעבד חרג מהערך הב
msgid "percent (0 means no restriction)"
msgstr "אחוז (0 משמעותו ללא הגבלה)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "כל יום בין השעות"
@@ -1297,8 +1297,8 @@ msgstr "כל יום בין השעות"
msgid "start work at this time"
msgstr "התחל עבודה בזמן זה"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "ו"
@@ -1306,43 +1306,43 @@ msgstr "ו"
msgid "stop work at this time"
msgstr "עצור עבודה בזמן זה"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(ללא הגבלה במידה ושווה)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "מעקף של יום בשבוע:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "סמן את התא כדי להגדיר את השעות של אותו יום בשבוע"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "שני"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "שלישי"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "רביעי"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "חמישי"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "שישי"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "שבת"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "ראשון"
@@ -1363,9 +1363,9 @@ msgstr "במערכות מרובות מעבדים, השתמש לכל היותר
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "השתמש לכל היותר ב-"
@@ -1374,86 +1374,86 @@ msgstr "השתמש לכל היותר ב-"
msgid "% CPU time"
msgstr "אחוזים מזמן מעבד"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "אפשרויות כלליות"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "קצב הורדה מקסימלי"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "ק\"ב לשנייה"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "קצב העלאה מקסימלי"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "העבר לכל היותר"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "מ\"ב"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "כל"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "ימים"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
#, fuzzy
msgid "Minimum work buffer"
msgstr "מאגר עבודה מינימלי"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
#, fuzzy
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "נסה לשמור על מספיק משימות כדי לשמור על מצב עסוק למשך כמות ימים של"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
#, fuzzy
msgid "Max additional work buffer"
msgstr "מאגר עבודה נוסף מקסימלי"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
#, fuzzy
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "בנוסף, שמור על מספיק משימות למשך עד כמות ימים של"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "דלג על אימות קובץ תמונה"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "סמן במידה וספקית האינטרנט שלך משנה קבצי תמונה"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "אפשרויות חיבור"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "וודא לפני התחברות לאינטרנט"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr "אם מסומן, חלון אימות יופיע לפני ניסיון התחברות לאינטרנט"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "התנתק בסיום"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1461,151 +1461,151 @@ msgstr ""
"אם מסומן, BOINC ינתק את החיבור לרשת כשיסיים\n"
"(רלוונטי לחיבורי חייגן בלבד)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "שימוש ברשת מאושר"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "שעת התחלת השימוש ברשת"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "שעת סיום השימוש ברשת"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "שימוש בדיסק"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "השטח השימוש המקסימלי בדיסק על ידי BOINC (ב-GB)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "GB משטח הדיסק"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "השאר לפחות"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC ישאיר לפחות את הכמות הזאת של שטח פנוי (ב-GB)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "GB משטח הדיסק פנויים"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC ישתמש לכל היותר באחוז זה מכלל שטח הדיסק"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% משטח הדיסק הכללי"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "משימות יבצעו נקודות ביקורת בדיסק לכל היותר כל"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "שניות"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% מקובץ העמוד (החלף מקום)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "שימוש בזיכרון"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% כאשר המחשב בשימוש"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% כאשר המחשב לא בשימוש"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "השאר את היישומים בזיכרון כאשר הם מושהים"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "אם מסומן, יחידות העבודה המושהות ישארו בזיכרון"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr "השהה השימוש במעבד והרשת כאשר האפליקציות הבאות רצות:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "הוסף..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "הוסף אפליקציה לרשימה"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "הסר"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "הסר אפליקציה מהרשימה"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
#, fuzzy
msgid "For advanced options, refer to "
msgstr "לאפשרויות מתקדמות, עבור ל "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - יומן אירועים"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "פרוייקט"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "זמן"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "הודעה"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&הצג פרוייקט זה בלבד"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
#, fuzzy
msgid "Copy &All"
msgstr "ה&עתק הכל"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "העתק את כל ההודעות ללוח."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "העתק הודעות נבחרות"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1613,7 +1613,7 @@ msgstr ""
"העתק הודעות נבחרות ללוח. באפשרותך לבחור הודעות מרובות על ידי לחיצה ממושכת על "
"לחצן shift או command בזמן הלחיצה על ההודעות."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1621,26 +1621,26 @@ msgstr ""
"העתק הודעות נבחרות ללוח. באפשרותך לבחור הודעות מרובות על ידי לחיצה ממושכת על "
"לחצן shift או control בזמן הלחיצה על ההודעות."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&סגור"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
#, fuzzy, c-format
msgid "Get help with %s"
msgstr "קבל עזרה עם %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "ה&צג את כל ההודעות"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "הצג הודעות מכל הפרוייקטים"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "הצג את ההודעות הקשורות לפרוייקט הנבחר בלבד"
@@ -1695,7 +1695,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "זכור אפשרות זו ואל תציג חלון זה."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&ביטול"
@@ -1703,230 +1703,230 @@ msgstr "&ביטול"
msgid "Don't show this dialog again."
msgstr "אל תציג חלון זה שוב."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "אל תקבל משימות למעבד"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "העדפת פרוייקט"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "אתר מנהל חשבונות"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
#, fuzzy
msgid "Project has no apps for "
msgstr "אתרי הפרוייקט"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
#, fuzzy
msgid " work fetch deferred for"
msgstr "קבלת עבודה למעבד נדחתה למשך"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
#, fuzzy
msgid " work fetch deferral interval"
msgstr "משך זמן ההמתנה לקבלת עבודה למעבד"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "מאפייני פרוייקט"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "כללי"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "כתובת אתר ראשית"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "שם משתמש"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "שם הקבוצה"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "שתוף משאבים"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "תזמון RPC נדחה ל-"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "הורדת קבצים נדחתה ל-"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "העלאת קבצים נדחתה ל-"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "זהות המחשב"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "ללא דרישת מעבד"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "כן"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "הושהה בעזרת הממשק הגרפי"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "לא"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "אל תבקש עוד עבודה"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "מתבצעת פנייה למתזמן"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "מיקום המחשב"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "ברירת מחדל"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "התווסף באמצעות מנהל חשבונות"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "הסר כאשר משימות הושלמו"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "נגמר"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "ניקוד"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "משתמש"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "מחשב"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "תזמון"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
#, fuzzy
msgid "Scheduling priority"
msgstr "עדיפות תזמון"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "גורם תיקון הזמן"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "מאפייני משימה"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "יישום"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "שם יחידת העבודה"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "שם"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "מצב"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "התקבל"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "מועד אחרון לדיווח"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "משאבים"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
#, fuzzy
msgid "Estimated computation size"
msgstr "נפח חישוב משוער"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "זמן מעבד בנקודת ביקורת אחרונה"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "זמן מעבד"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "זמן שחלף"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "זמן משוער שנשאר"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "החלק שהושלם"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "גודל זיכרון וירטואלי"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "גודל שטח עבודה"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "תיקייה"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "זהות יישום"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "מקומי:"
@@ -2014,7 +2014,7 @@ msgstr "השאר ריק במידה ולא נחוץ"
msgid "User Name:"
msgstr "שם משתמש"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "סיסמה:"
@@ -2073,12 +2073,12 @@ msgid ""
msgstr ""
"שפת ברירת המחדל של %s שונתה, על מנת ששינוי זה יכנס לתוקף עליך לאתחל את %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - בחר מחשב"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2087,7 +2087,7 @@ msgstr ""
"עותק אחר של %s כבר רץ על מחשב זה.\n"
"בחר קליינט לניתור."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "שם המחשב:"
@@ -2279,210 +2279,210 @@ msgstr "מחקר"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "למד אודות הפרוייקטים של World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "מפעיל קליינט"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "מתחבר לקליינט"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "מאחזר את מצב המערכת; אנא המתן..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "אפליקציות מיוחדות"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "פועל על סוללות"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "המחשב בשימוש"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "בקשת משתמש"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "זמן של היום"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "הערכת ביצועי מעבד מתבצעת"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "יש צורך בשטח דיסק - בדוק העדפות"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "המחשב אינו בשימוש"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "מתחיל"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "יישום יחודי רץ כרגע"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "מעבד תפוס"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "חריגה מהגבלת רוחב הפס של הרשת"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
#, fuzzy
msgid "requested by operating system"
msgstr "נתבקש על ידי מערכת ההפעלה"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "סיבה לא ידועה"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "מעבד גרפי חסר."
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "חדש"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "הורדה נכשלה"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "מוריד"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr "(מושהה - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "פרוייקט הושהה על ידי המשתמש"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "משימה הושתה על ידי המשתמש"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "מושהה -"
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr "(מושהה - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "ממתין לזיכרון"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "ממתין לזיכרון משותף"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "רץ, עדיפות גבוהה"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "רץ"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr "(ללא דרישת מעבד)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "ממתין להרצה"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "מוכן להתחיל"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
#, fuzzy
msgid " (Waiting for network access)"
msgstr "ממתין לזיכרון"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "שגיאת עיבוד"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "העלאה נכשלה"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "מעלה"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "בוטל על ידי המשתמש"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "בוטל על ידי הפרוייקט"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "בוטל: לא התחיל לפני התאריך האחרון לביצוע"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "בוטל"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "אושר"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "מוכן לדיווח"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "שגיאה: מצב לא חוקי '%d'"
@@ -2536,64 +2536,64 @@ msgstr "בדוק את שם המשתמש והסיסמה, ונסה שוב."
msgid "Check the email address and password, and try again."
msgstr "בדוק את כתובת הדוא\"ל והסיסמה, ונסה שוב."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "עוד..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "הכל"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "בחר פרוייקט"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "כדי לבחור פרוייקט, לחץ על השם שלו או רשום את כתובת האינטרנט שלו למטה."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
#, fuzzy
msgid "Categories:"
msgstr "קטגוריות:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "פרוייקטים:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "פרטי הפרוייקט"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
#, fuzzy
msgid "Organization:"
msgstr "אירגון:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "אתר אינטרנט:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
#, fuzzy
msgid "Supported systems:"
msgstr "מערכות נתמכות:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "כתובת האינטרנט של הפרוייקט:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr "ייתכן ולפרוייקט זה אין עבודה לסוג המחשב שלך. האם תרצה להוסיפו בכל זאת?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "כבר הוספת פרוייקט זה. אנא בחר פרוייקט אחר."
@@ -2601,11 +2601,11 @@ msgstr "כבר הוספת פרוייקט זה. אנא בחר פרוייקט אח
msgid "Communicating with project."
msgstr "מתקשר עם הפרוייקט."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "קבצים דרושים לא נמצאו על השרת."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "התרחשה שגיאת שרת פנימית."
@@ -2714,8 +2714,8 @@ msgid "I agree to the terms of use."
msgstr "אני מסכים לתנאי השימוש."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "אני לא מסכים לתנאי השימוש."
+msgid "I do not agree to the terms of use."
+msgstr ""
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2804,7 +2804,7 @@ msgstr "'%s אינו מכיל שם מחשב תקף."
msgid "'%s' does not contain a valid path."
msgstr "'%s' אינו מכיל נתיב תקף."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "פקודות"
@@ -2857,7 +2857,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "אין התראות להציג בשלב זה."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "התראות"
@@ -2874,7 +2874,7 @@ msgstr ""
"וככל הנראה קבל עוד משימות. ."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3111,135 +3111,135 @@ msgstr "פנוי:"
msgid "used by other programs: "
msgstr "בשימוש על ידי תוכנות אחרות:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "סה\"כ למשתמש"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "ממוצע למשתמש"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "סה\"כ למחשב"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "ממוצע למחשב"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "עדכון אחרון: לפני %.0f ימים"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "הצג סה\"כ למשתמש"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "הצג את סך כל הניקוד למשתמש"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "הצג ממוצע למשתמש"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "הצג ניקוד ממוצע למשתמש"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "הצג סה\"כ למחשב"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "הצג את סך כל הניקוד למחשב"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "הצג ממוצע למחשב"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "הצג ניקוד ממוצע למחשב"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &הפרוייקט הקודם"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "הצג תרשים לפרוייקט הקודם"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&הפרוייקט הבא >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "הצג תרשים לפרוייקט הבא"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "הסתר רשימת פרוייקטים"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "השתמש בכל השטח עבור הגרפים"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "מצב תצוגה"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "פרוייקט יחיד"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "הצג תרשים אחד עם הפרוייקט הנבחר"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "כל הפרוייקטים (בנפרד)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "הצג את כל הפרוייקטים, תרשים אחד לכל פרוייקט"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "כל הפרוייקטים (ביחד)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "הצג תרשים אחד עם כל הפרוייקטים"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "כל הפרוייקטים (סיכום)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "הצג תרשים אחד עם סיכום הפרוייקטים"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "סטטיסטיקות"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "מעדכן תרשימים..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "הצג רשימת פרוייקטים"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "משתמש בשטח קטן יותר עבור הגרפים"
@@ -3410,10 +3410,6 @@ msgstr "נשאר"
msgid "Deadline"
msgstr "מועד אחרון לדיווח"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "שם"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "משימות"
@@ -3555,43 +3551,43 @@ msgstr "האם אתה בטוח שברצונך לבטל?"
msgid "Question"
msgstr "שאלה"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "תצוגה מתקדמת...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "הצג ממשק גרפי מתקדם."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "מראה"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
#, fuzzy
msgid "Select the appearance of the user interface."
msgstr "בחר את המראה של ממשק המשתמש."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "ברירת מחדל"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
#, fuzzy
msgid "Suspend Computing"
msgstr "השהה חישובים"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
#, fuzzy
msgid "Resume Computing"
msgstr "המשך חישובים"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "פתח חלון לצפיה בהתראות מהפרוייקטים או מ-BOINC"
@@ -3614,117 +3610,119 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "תעבוד רק בין:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "התחבר לאינטרנט רק בין:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "השתמש לכל היותר ב-"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "מתוך שטח הדיסק"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "של המעבד"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "האם לבצע חישובים בזמן עבודה על סוללות?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "התחל לעבוד אחרי אי שימוש במחשב במשך:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "תמיד"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (תריץ תמיד)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "האם אתה בטוח שברצונך למחוק את כל ההעדפות המקומיות?"
@@ -3786,119 +3784,119 @@ msgstr ""
"אתה בטוח שאתה רוצה לבטל את הישום '%s'?\n"
"(התקדמות: %.1lf%%, מצב: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "אין לך פרוייקטים. אנא הוסף פרוייקט."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "לא זמין"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "משימות"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "בחר משימה אליה ברצונך לגשת"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
#, fuzzy
msgid "From:"
msgstr "מ"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "התקדמות משימה זו"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "פקודות משימה"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "הקפץ תפריט של פקודות ליישם עבור משימה זו"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "יישום: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "יישום: לא זמין"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "לא זמין"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
#, fuzzy, c-format
msgid "Remaining (estimated): %s"
msgstr "זמן שנותר: %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "מצב: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "מאחזר מצב נוכחי."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "מוריד עבודה מהשרת."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "חישוב מושהה: עובד על סוללות."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "חישוב מושהה: משתמש פעיל."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "חישוב מושהה: המשתמש השהה חישובים."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "החישוב מושהה: זמן היום."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "חישוב מושהה: מבחני ביצועים רצים."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "חישוב מושהה."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "ממתין ליצירת קשר עם שרתי הפרוייקט."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "מאחזר מצב נוכחי"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "אין עבודה זמינה לעיבוד"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "לא מצליח להתחבר לקליינט המקור."
@@ -3940,6 +3938,15 @@ msgstr "הצג הכל"
msgid "Quit %s"
msgstr "הפסק %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "אני לא מסכים לתנאי השימוש."
+
+#~ msgid "Workunit name"
+#~ msgstr "שם יחידת העבודה"
+
+#~ msgid "invalid float"
+#~ msgstr "ערך לא חוקי"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "הצג את הממשק הגרפי המתקדם (נגיש)."
diff --git a/locale/he/BOINC-Project-Generic.po b/locale/he/BOINC-Project-Generic.po
index 07836b6..8c0f4b9 100644
--- a/locale/he/BOINC-Project-Generic.po
+++ b/locale/he/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2012-04-26 04:05+0200\n"
"Last-Translator: Ido <dj_legolas1 at hotmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -187,7 +187,7 @@ msgstr "חפש פורומים"
msgid "Advanced search"
msgstr "חיפוש מתקדם"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "הודעות פרטיות"
@@ -197,8 +197,8 @@ msgstr "הודעות פרטיות"
msgid "Questions and Answers"
msgstr "שאלות ותשובות"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -272,7 +272,7 @@ msgstr "לא נקרא"
msgid "Message %1"
msgstr "הודעה"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "מוסתר"
@@ -480,7 +480,7 @@ msgstr ""
msgid "Thread"
msgstr "אשכול"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "הודעות"
@@ -489,7 +489,7 @@ msgstr "הודעות"
msgid "Views"
msgstr "צפיות"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "הודעה אחרונה"
@@ -531,7 +531,7 @@ msgid "Home"
msgstr "בית"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "עבודה"
@@ -597,9 +597,9 @@ msgid "Created"
msgstr "נוצר"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -776,7 +776,7 @@ msgstr "יצירת קשר אחרון"
msgid "Computer info"
msgstr "מידע אודות המחשב"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "דרגה"
@@ -785,9 +785,9 @@ msgstr "דרגה"
msgid "Avg. credit"
msgstr "ממוצע נקודות זכות"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -875,8 +875,8 @@ msgstr "רק מחשבים אשר היו פעילים ב-30 הימים האחרו
msgid "Computer ID"
msgstr "זיהוי מחשב"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -912,7 +912,7 @@ msgstr "דואר נכנס"
msgid "Write"
msgstr "כתוב"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "שלח הודעה פרטית"
@@ -1668,7 +1668,7 @@ msgstr "זמן דיווח<br />או תאריך יעד"
msgid "explain"
msgstr "הסבר"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "מצב"
@@ -1761,9 +1761,9 @@ msgstr "מילות מפתח"
msgid "Find teams with these words in their names or descriptions"
msgstr "מצא קבוצות עם מילים אלו בשמות או בתיאור שלהן"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1771,7 +1771,7 @@ msgstr "מצא קבוצות עם מילים אלו בשמות או בתיאור
msgid "Country"
msgstr "מדינה"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "סוג הקבוצה"
@@ -1799,8 +1799,8 @@ msgstr "התבקש על ידך"
msgid "founder response deadline is %1"
msgstr "תאריך יעד לתשובת מייסד הוא %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "לא קיים"
@@ -1825,27 +1825,27 @@ msgstr "תיאור"
msgid "Web site"
msgstr "אתר אינטרנט"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "סטטיסטיקות פרוייקט מוצלב"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "סוג"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "לוח הודעות"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "אשכולות"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "הצטרף לקבוצה זו"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1853,81 +1853,81 @@ msgstr ""
"הערה: אם בהעדפות הפרוייקט שלך מוגדר \"אישור למייל\", הצטרפות לקבוצה תאפשר "
"למייסד גישה לכתובת הדוא\"ל שלך."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "לא מקבלים חברים חדשים"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "התבקש שינוי בעלות מייסד"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "השב עד %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "שינוי בעלות מייסד הקבוצה"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "חברים"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "מייסד"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "מנהלים"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "חברים חדשים ביום האחרון"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "סה\"כ חברים"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "הצג"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "חברים פעילים"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "חברים עם נקודות זכות"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "מנהל"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
#, fuzzy
msgid "Previous %1"
msgstr "%1 הקודמים/הקודם"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
#, fuzzy
msgid "Next %1"
msgstr "%1 הבאים/הבא"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "לא קיימת קבוצה."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "פעולה זו מצריכה בעלות מייסד."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "פעולה זו מצריכה הרשאות מנהל קבוצה"
@@ -1939,7 +1939,7 @@ msgstr ""
"אזהרה: זוהי קבוצת כלל-BOINC. אם תבצע שינויים כאן, הם ישוכתבו בקרוב. ערוך "
"במקום זאת את %1קבוצת כלל-BOINC%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1947,47 +1947,47 @@ msgstr ""
"%1הערת פרטיות%2: בעת יצירת קבוצה, העדפות הפרוייקט שלך (חלוקת משאבים, העדפות "
"גרפיות) יהיו גלויות לציבור הרחב."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "שם הקבוצה, גרסת טקסט"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "אל תשתמש בתגי HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "שם הקבוצה, גרסת HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "באפשרותך להשתמש %1בכמות מוגבלת של תגי HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "אם אין לך ידע ב-HTML, השאר תיבה זו ריקה."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "כתובת אתר האינטרנט של הקבוצה, אם קיימת"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "ללא \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "ניתן יהיה להגיע לכתובת זו מדף הקבוצה באתר זה."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "תיאור הקבוצה"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "האם לקבל חברים חדשים?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "פרופיל משתמש"
@@ -2020,7 +2020,7 @@ msgid "Computers on this account"
msgstr "מחשבים של חשבון זה"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "הצג"
@@ -2037,8 +2037,8 @@ msgstr "סטטיסטיקות פרוייקט מוצלב"
msgid "Account"
msgstr "חשבון"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "קבוצה"
@@ -2067,7 +2067,7 @@ msgstr "מידע אודות החשבון"
msgid "Email address"
msgstr "כתובת אימייל"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "כתובת אתר"
@@ -2075,7 +2075,7 @@ msgstr "כתובת אתר"
msgid "Postal code"
msgstr "מיקוד"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 חבר מאז"
@@ -2095,7 +2095,7 @@ msgstr "סיסמא"
msgid "other account info"
msgstr "מידע חשבון אחר"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "זיהוי משתמש"
@@ -2142,96 +2142,96 @@ msgstr "העדפות %1"
msgid "Community"
msgstr "קהילה"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "מחק"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "צור"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "פרופיל"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "הרשומות של %1"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "התראות"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "עזוב קבוצה"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "נהל"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(בקשת שינוי בעלות מייסד ממתינה)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "חבר בקבוצה"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "מצא קבוצה"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "מייסד אך לא חבר ב"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "מצא חברים"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "חברים"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "מחשבים"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "תורם"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "צור קשר"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "גורם זה הוא חבר"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "ביטול חברות"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "בקשה ממתינה"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "הוסף כחבר"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2312,7 +2312,7 @@ msgstr "לא ניתן להתחבר לבסיס הנתונים - אנא נסה ש
msgid "Unable to select database - please try again later"
msgstr "לא ניתן לבחור בסיס נתונים - אנא נסה שנית מאוחר יותר"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "הישאר מחובר במחשב זה"
@@ -2517,7 +2517,7 @@ msgstr ""
msgid "User of the day"
msgstr "משתמש היום"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "מצב השרת"
@@ -5593,137 +5593,137 @@ msgstr "לא רץ/רצה (כנ\"ל)"
msgid "Disabled"
msgstr "מנוטרל"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "מצב הפרוייקט"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "גרסת תכנת השרת: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "תכנית"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "מחשב"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "שרת העלאה/הורדה"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "מתזמן"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "רץ:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "התכנה מתפקדת כראוי"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "לא רץ:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "כשלון בתכנית או שהפרוייקט לא פעיל"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "מנוטרל:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "התכנית מנוטרלת"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "מצב החישוב"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "שרת בסיס-הנתונים אינו נגיש"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "משימות מוכנות לשליחה"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
#, fuzzy
msgid "Tasks in progress"
msgstr "משימות בתהליך"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "יחידות עבודה ממתינות לאישור"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "יחידות עבודה ממתינות להטמעה"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "יחידות עבודה ממתינות למחיקת קבצים"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "משימות ממתינות למחיקת קבצים"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "משתמשים"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "עם נקודות זכות אחרונות"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "עם נקודות זכות"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "נרשמו ב-24 השעות האחרונות"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOP נוכחי"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "משימות לפי יישום"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "יישום"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "לא נשלח"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "בתהליך"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "זמן ריצה ממוצע בשעות של 100 התוצאות האחרונות (מינימום-מקסימום)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "משתמשים ב-24 השעות האחרונות"
@@ -5991,6 +5991,10 @@ msgstr "מייסד חדש?"
msgid "Change founder"
msgstr "שינוי מייסד"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "עלייך לבחור שם קבוצה שאינו ריק"
diff --git a/locale/he/BOINC-Setup.mo b/locale/he/BOINC-Setup.mo
index ff611cd..b12362a 100644
Binary files a/locale/he/BOINC-Setup.mo and b/locale/he/BOINC-Setup.mo differ
diff --git a/locale/he/BOINC-Setup.po b/locale/he/BOINC-Setup.po
index 032cc27..e31e256 100644
--- a/locale/he/BOINC-Setup.po
+++ b/locale/he/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/he/BOINC-Web.mo b/locale/he/BOINC-Web.mo
index 7616930..e7caafe 100644
Binary files a/locale/he/BOINC-Web.mo and b/locale/he/BOINC-Web.mo differ
diff --git a/locale/he/BOINC-Web.po b/locale/he/BOINC-Web.po
index f531dd1..2239161 100644
--- a/locale/he/BOINC-Web.po
+++ b/locale/he/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2012-04-26 04:05+0200\n"
"Last-Translator: Ido <dj_legolas1 at hotmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -422,16 +422,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr ""
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -439,19 +439,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -460,15 +460,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -477,15 +477,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -493,15 +493,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -509,31 +509,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr ""
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -541,15 +541,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -560,15 +560,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr ""
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -578,30 +578,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr ""
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -613,15 +613,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -631,15 +641,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr ""
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -652,33 +662,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -688,15 +698,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -705,15 +715,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -722,23 +732,23 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
#, fuzzy
msgid "University of California, Berkeley"
msgstr "BOINC ממוקמת באוניברסיטת קליפורניה בברקלי"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -747,15 +757,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -763,45 +773,45 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
#, fuzzy
msgid "European research projects"
msgstr "פרוייקטי מחקר"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -809,28 +819,28 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
#, fuzzy
msgid "Various Spanish research projects"
msgstr "פרוייקטי מחקר"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -838,50 +848,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -891,18 +901,18 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
#, fuzzy
msgid "Software testing"
msgstr "עדכוני תוכנה"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -910,11 +920,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -925,23 +935,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
diff --git a/locale/hr/BOINC-Manager.mo b/locale/hr/BOINC-Manager.mo
index da8440a..19e2a96 100644
Binary files a/locale/hr/BOINC-Manager.mo and b/locale/hr/BOINC-Manager.mo differ
diff --git a/locale/hr/BOINC-Manager.po b/locale/hr/BOINC-Manager.po
index e69e616..d887f0d 100644
--- a/locale/hr/BOINC-Manager.po
+++ b/locale/hr/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 4.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2012-02-22 23:12+0200\n"
"Last-Translator: Josip <J.Matijevic at inet.hr>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
@@ -199,359 +199,359 @@ msgstr "Spojeno"
msgid "Disconnected"
msgstr "Prekinuto"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr ""
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr ""
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr ""
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr ""
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr ""
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr ""
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr ""
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr ""
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr ""
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr ""
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr ""
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr ""
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr ""
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr ""
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr ""
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr ""
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr ""
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
#, fuzzy
msgid "&Add project or account manager..."
msgstr "Uključujem se u projekt..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr ""
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr ""
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
#, fuzzy
msgid "&Add project..."
msgstr "Uključujem se u projekt..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
#, fuzzy
msgid "Add a project"
msgstr "Priključi se"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
#, fuzzy, c-format
msgid "S&top using %s..."
msgstr "Zaustavljam rezultat..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr ""
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr ""
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
#, fuzzy
msgid "Configure display options and proxy settings"
msgstr "Podešava GUI opcije i proxy postavke"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
#, fuzzy
msgid "Computing &preferences..."
msgstr "&Radi ovisno o postavkama"
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
#, fuzzy
msgid "Configure computing preferences"
msgstr "&Radi ovisno o postavkama"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Uvijek radi"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
#, fuzzy
msgid "Allow work regardless of preferences"
msgstr "Obrađuje bez obzira na postavke"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "&Radi ovisno o postavkama"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
#, fuzzy
msgid "Allow work according to preferences"
msgstr "Obrađuje ovisno o postavkama"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Zaustavi"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
#, fuzzy
msgid "Stop work regardless of preferences"
msgstr "Zaustavlja obradu bez obzira na postavke"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr ""
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
#, fuzzy
msgid "Allow GPU work regardless of preferences"
msgstr "Obrađuje bez obzira na postavke"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
#, fuzzy
msgid "Use GPU based on preferences"
msgstr "&Radi ovisno o postavkama"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
#, fuzzy
msgid "Allow GPU work according to preferences"
msgstr "Obrađuje ovisno o postavkama"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
#, fuzzy
msgid "Suspend GPU"
msgstr "Zaustavi"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
#, fuzzy
msgid "Stop GPU work regardless of preferences"
msgstr "Zaustavlja obradu bez obzira na postavke"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr ""
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
#, fuzzy
msgid "Allow network activity regardless of preferences"
msgstr "Obrađuje bez obzira na postavke"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
#, fuzzy
msgid "Network activity based on preferences"
msgstr "Obrađuje bez obzira na postavke"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
#, fuzzy
msgid "Allow network activity according to preferences"
msgstr "Obrađuje ovisno o postavkama"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
#, fuzzy
msgid "Network activity suspended"
msgstr "Aktivnosti zaustavljene"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
#, fuzzy
msgid "Stop BOINC network activity"
msgstr "Zaustavlja mrežnu aktivnost BOINC-a"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
#, fuzzy, c-format
msgid "Connect to another computer running %s"
msgstr "Spojite se na drugo računolo koje ima BOINC"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
#, fuzzy
msgid "Select computer..."
msgstr "Odaberite računalo..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr ""
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr ""
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr ""
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Pokreće BOINC-ove testove procesora"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr ""
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr ""
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr ""
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr ""
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr ""
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr ""
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr ""
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr ""
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr ""
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr ""
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr ""
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr ""
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr ""
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
#, fuzzy, c-format
msgid "Show information about BOINC and %s"
msgstr "Pokazuje informacije o BOINC menadžeru"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr ""
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Licenčne i autorske informacije."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Datoteka"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr ""
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Alati"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr ""
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr ""
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Pomoć"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr ""
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -561,39 +561,39 @@ msgid ""
"Do you want to stop using %s?"
msgstr ""
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr ""
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
"and prompt you for another host to connect to."
msgstr ""
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr ""
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr ""
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Spajam se na %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
#, fuzzy, c-format
msgid "Connected to %s (%s)"
@@ -623,26 +623,26 @@ msgid ""
"Please visit the project's web site and follow the instructions there."
msgstr ""
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr ""
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr ""
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr ""
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr ""
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
#, fuzzy
msgid "Cancel"
msgstr "&Poništi"
@@ -791,7 +791,7 @@ msgstr "BOINC se uspješno odpojio s interneta."
msgid "%s failed to disconnected from the Internet."
msgstr "BOINC se nije uspio odpojiti s interneta."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -804,90 +804,90 @@ msgid ""
" user group."
msgstr ""
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
"(Error code %d"
msgstr ""
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ""
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
msgstr ""
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Menadžer"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr ""
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Pokrenuti BOINC tako da je vidljiva samo ikona u trayu"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr ""
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr ""
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr ""
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr ""
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
#, fuzzy
msgid "Password"
msgstr "Lozinka:"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr ""
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr ""
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr ""
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automatska detekcija)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Nepoznato)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Korisnički određeno)"
@@ -914,7 +914,7 @@ msgid "E&xit"
msgstr "&Izlaz"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Nastavi"
@@ -1075,74 +1075,74 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&U redu"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr ""
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr ""
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr ""
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr ""
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr ""
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr ""
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr ""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr ""
@@ -1154,11 +1154,11 @@ msgid ""
"Click Clear to restore web-based settings (except exclusive apps)."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr ""
@@ -1178,7 +1178,7 @@ msgstr ""
msgid "exclusive applications"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr ""
@@ -1191,7 +1191,7 @@ msgid "close the dialog without saving"
msgstr ""
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
#, fuzzy
msgid "Help"
msgstr "&Pomoć"
@@ -1242,7 +1242,7 @@ msgid ""
msgstr ""
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr ""
@@ -1258,7 +1258,7 @@ msgstr ""
msgid "percent (0 means no restriction)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr ""
@@ -1266,8 +1266,8 @@ msgstr ""
msgid "start work at this time"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr ""
@@ -1275,43 +1275,43 @@ msgstr ""
msgid "stop work at this time"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr ""
@@ -1332,9 +1332,9 @@ msgstr ""
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr ""
@@ -1344,231 +1344,231 @@ msgstr ""
msgid "% CPU time"
msgstr "Procesorsko vrijeme"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
#, fuzzy
msgid "Transfer at most"
msgstr "Prijenosi"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
#, fuzzy
msgid "Remove"
msgstr "Nastavi"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr ""
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Vrijeme"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Poruka"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr ""
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr ""
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopiraj sve poruke u memoriju"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr ""
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
#, fuzzy
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
@@ -1577,7 +1577,7 @@ msgstr ""
"Kopiraj označene poruke u memoriju. Možete označiti više poruka držeći shift "
"ili ctrl dok klikate na poruke."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1585,26 +1585,26 @@ msgstr ""
"Kopiraj označene poruke u memoriju. Možete označiti više poruka držeći shift "
"ili ctrl dok klikate na poruke."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
#, fuzzy
msgid "&Close"
msgstr "Zatvoriti"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr ""
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "Kopiraj sve poruke"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr ""
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
#, fuzzy
msgid "Show only the messages for the selected project"
msgstr "Kopiraj sve poruke u memoriju"
@@ -1646,7 +1646,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr ""
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Poništi"
@@ -1654,230 +1654,230 @@ msgstr "&Poništi"
msgid "Don't show this dialog again."
msgstr ""
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "Neće dobiti novi posao"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr ""
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "Adresa menadžera računa:"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr ""
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr ""
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr ""
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr ""
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Općenito"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr ""
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
#, fuzzy
msgid "User name"
msgstr "Korisničko ime:"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr ""
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Djeljenje resursa"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr ""
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr ""
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr ""
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr ""
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr ""
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr ""
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr ""
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr ""
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr ""
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr ""
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
#, fuzzy
msgid "Host location"
msgstr "Ukupan kredit računala"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
#, fuzzy
msgid "default"
msgstr "&Postavi kao pretpostavljeno"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
#, fuzzy
msgid "Added via account manager"
msgstr "Menadžer računa"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr ""
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr ""
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr ""
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr ""
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr ""
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr ""
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr ""
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr ""
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr ""
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplikacija"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr ""
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Ime"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr ""
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr ""
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Rok prijave"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr ""
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr ""
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Procesorsko vrijeme"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
#, fuzzy
msgid "Elapsed time"
msgstr "Proteklo vrijeme"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr ""
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr ""
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr ""
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr ""
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr ""
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr ""
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr ""
@@ -1965,7 +1965,7 @@ msgstr "Ne ispunjavajte ukoliko nije potrebno"
msgid "User Name:"
msgstr "Korisničko ime:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Lozinka:"
@@ -2026,20 +2026,20 @@ msgstr ""
"BOINC menadžerov pretpostavljeni jezik je promijenjen, da bi ta promjena "
"stupila na snagu menadžer mora biti restartiran."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
#, fuzzy, c-format
msgid "%s - Select Computer"
msgstr "Odaberi računalo"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr ""
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Naziv računala:"
@@ -2230,211 +2230,211 @@ msgstr ""
msgid "Learn about the projects hosted at World Community Grid"
msgstr ""
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr ""
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr ""
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Provjeravam stanje sistema; molimo pričekajte..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "Aplikacija"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr ""
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr ""
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr ""
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr ""
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr ""
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr ""
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr ""
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr ""
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr ""
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr ""
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr ""
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
#, fuzzy
msgid "unknown reason"
msgstr "(Nepoznato)"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr ""
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Novo"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Skidanje neuspjelo"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Skidanje"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
#, fuzzy
msgid " (suspended - "
msgstr "Zaustavljeno"
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr ""
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr ""
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
#, fuzzy
msgid "Suspended - "
msgstr "Zaustavljeno"
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr "Zaustavljeno"
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr ""
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr ""
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr ""
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Radi"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr ""
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr ""
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr ""
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr ""
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Greška pri obradi"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Dizanje neuspjelo"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Dizanje"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Obrisan od korisnika"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr ""
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr ""
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr ""
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Potvrđeno"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Spreman za prijavu"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Greška: nedopušteno stanje '%d'"
@@ -2482,63 +2482,63 @@ msgstr ""
msgid "Check the email address and password, and try again."
msgstr ""
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr ""
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr ""
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "Projekti"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "Web stranice"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr ""
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr ""
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
@@ -2546,11 +2546,11 @@ msgstr ""
msgid "Communicating with project."
msgstr ""
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr ""
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr ""
@@ -2633,7 +2633,7 @@ msgid "I agree to the terms of use."
msgstr ""
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr ""
#: UnavailablePage.cpp:183
@@ -2713,7 +2713,7 @@ msgstr "'%s' ne sadrži valjano ime računala"
msgid "'%s' does not contain a valid path."
msgstr "'%s' ne sadrži valjan put."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr ""
@@ -2769,7 +2769,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr ""
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr ""
@@ -2787,7 +2787,7 @@ msgstr ""
"poruke, i možda dobij još posla."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3040,135 +3040,135 @@ msgstr ""
msgid "used by other programs: "
msgstr ""
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Ukupno po korisniku"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Korisnikov prosjek"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Ukupan kredit računala"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Prosjek računala"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr ""
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Pokaži ukupan korisnikov kredit"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr ""
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Pokaži korisnički prosjek"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr ""
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Pokaži ukupan kredit računala"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr ""
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "pokaži prosjek računala"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr ""
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr ""
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr ""
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr ""
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr ""
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr ""
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr ""
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr ""
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr ""
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr ""
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr ""
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr ""
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr ""
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr ""
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr ""
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr ""
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistika"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Ažuriram grafove"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr ""
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr ""
@@ -3336,10 +3336,6 @@ msgstr "Radi"
msgid "Deadline"
msgstr "Rok prijave"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Ime"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Zadaće"
@@ -3475,41 +3471,41 @@ msgstr ""
msgid "Question"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "&Postavi kao pretpostavljeno"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
@@ -3532,117 +3528,119 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr ""
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr ""
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr ""
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr ""
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr ""
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr ""
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr ""
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr ""
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr ""
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr ""
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr ""
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr ""
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr ""
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr ""
@@ -3702,120 +3700,120 @@ msgid ""
"(Progress: %.1lf%%, Status: %s)"
msgstr ""
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr ""
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr ""
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "Zadaće"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr ""
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr ""
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr ""
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr ""
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, fuzzy, c-format
msgid "Application: %s"
msgstr "Aplikacija"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr ""
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr ""
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
# 84%
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
#, fuzzy, c-format
msgid "Remaining (estimated): %s"
msgstr "Radi"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr ""
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr ""
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr ""
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr ""
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr ""
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr ""
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr ""
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr ""
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr ""
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr ""
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr ""
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr ""
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr ""
diff --git a/locale/hr/BOINC-Project-Generic.po b/locale/hr/BOINC-Project-Generic.po
index c9c8477..1d881b0 100644
--- a/locale/hr/BOINC-Project-Generic.po
+++ b/locale/hr/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -185,7 +185,7 @@ msgstr ""
msgid "Advanced search"
msgstr ""
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr ""
@@ -195,8 +195,8 @@ msgstr ""
msgid "Questions and Answers"
msgstr ""
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -262,7 +262,7 @@ msgstr ""
msgid "Message %1"
msgstr ""
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr ""
@@ -449,7 +449,7 @@ msgstr ""
msgid "Thread"
msgstr ""
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr ""
@@ -458,7 +458,7 @@ msgstr ""
msgid "Views"
msgstr ""
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr ""
@@ -496,7 +496,7 @@ msgid "Home"
msgstr ""
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr ""
@@ -562,9 +562,9 @@ msgid "Created"
msgstr ""
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -740,7 +740,7 @@ msgstr ""
msgid "Computer info"
msgstr ""
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr ""
@@ -749,9 +749,9 @@ msgstr ""
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -839,8 +839,8 @@ msgstr ""
msgid "Computer ID"
msgstr ""
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -876,7 +876,7 @@ msgstr ""
msgid "Write"
msgstr ""
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr ""
@@ -1601,7 +1601,7 @@ msgstr ""
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
@@ -1693,9 +1693,9 @@ msgstr ""
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1703,7 +1703,7 @@ msgstr ""
msgid "Country"
msgstr ""
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr ""
@@ -1731,8 +1731,8 @@ msgstr ""
msgid "founder response deadline is %1"
msgstr ""
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr ""
@@ -1756,105 +1756,105 @@ msgstr ""
msgid "Web site"
msgstr ""
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr ""
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr ""
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr ""
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr ""
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr ""
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr ""
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr ""
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr ""
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr ""
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr ""
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr ""
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr ""
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr ""
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr ""
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr ""
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr ""
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr ""
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr ""
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr ""
@@ -1864,53 +1864,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr ""
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr ""
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr ""
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr ""
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr ""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr ""
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1943,7 +1943,7 @@ msgid "Computers on this account"
msgstr ""
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr ""
@@ -1960,8 +1960,8 @@ msgstr ""
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr ""
@@ -1990,7 +1990,7 @@ msgstr ""
msgid "Email address"
msgstr ""
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr ""
@@ -1998,7 +1998,7 @@ msgstr ""
msgid "Postal code"
msgstr ""
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr ""
@@ -2018,7 +2018,7 @@ msgstr ""
msgid "other account info"
msgstr ""
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr ""
@@ -2063,96 +2063,96 @@ msgstr ""
msgid "Community"
msgstr ""
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr ""
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr ""
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr ""
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr ""
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr ""
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr ""
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr ""
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr ""
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr ""
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr ""
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr ""
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr ""
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr ""
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr ""
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr ""
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr ""
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr ""
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr ""
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr ""
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr ""
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2226,7 +2226,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2419,7 +2419,7 @@ msgstr ""
msgid "User of the day"
msgstr ""
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr ""
@@ -5224,135 +5224,135 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr ""
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr ""
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr ""
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5598,6 +5598,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/hr/BOINC-Setup.mo b/locale/hr/BOINC-Setup.mo
index 4e78c2a..5f76179 100644
Binary files a/locale/hr/BOINC-Setup.mo and b/locale/hr/BOINC-Setup.mo differ
diff --git a/locale/hr/BOINC-Setup.po b/locale/hr/BOINC-Setup.po
index d6bd26e..7b90214 100644
--- a/locale/hr/BOINC-Setup.po
+++ b/locale/hr/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/hr/BOINC-Web.mo b/locale/hr/BOINC-Web.mo
index 137d912..269f51e 100644
Binary files a/locale/hr/BOINC-Web.mo and b/locale/hr/BOINC-Web.mo differ
diff --git a/locale/hr/BOINC-Web.po b/locale/hr/BOINC-Web.po
index c227df2..82e1511 100644
--- a/locale/hr/BOINC-Web.po
+++ b/locale/hr/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -404,16 +404,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr ""
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -421,19 +421,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -442,15 +442,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -459,15 +459,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -475,15 +475,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -491,31 +491,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr ""
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -523,15 +523,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -542,15 +542,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr ""
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -560,30 +560,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr ""
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -595,15 +595,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -613,15 +623,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr ""
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -634,33 +644,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -670,15 +680,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -687,15 +697,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -704,22 +714,22 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr ""
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -728,15 +738,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -744,44 +754,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr ""
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -789,27 +799,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr ""
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -817,50 +827,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -870,17 +880,17 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr ""
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -888,11 +898,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -903,23 +913,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
diff --git a/locale/hu/BOINC-Android.po b/locale/hu/BOINC-Android.po
index ab681f8..5ac8c3a 100644
--- a/locale/hu/BOINC-Android.po
+++ b/locale/hu/BOINC-Android.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-12-15 08:43+0000\n"
+"PO-Revision-Date: 2014-02-22 14:58+0000\n"
"Last-Translator: Gabor <csega at mailbox.hu>\n"
"Language-Team: hu <LL at li.org>\n"
"Language: hu\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n !=1);\n"
"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
-"X-POOTLE-MTIME: 1387097001.0\n"
+"X-POOTLE-MTIME: 1393081112.0\n"
#. app global
msgctxt "app_name"
@@ -62,7 +62,7 @@ msgstr "Nincs internetkapcsolat"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Kapcsolódás a projekt szerverhez..."
msgctxt "attachproject_login_image_description"
msgid "Project logo."
@@ -70,7 +70,7 @@ msgstr "Projekt logó."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Általános terület:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
@@ -102,17 +102,19 @@ msgstr "Ez a projekt nem támogatja az Android eszközöket"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Felhasználási feltételek"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Fiók létrehozásával e projektben Ön elfogadja a fenti felhasználási "
+"feltételeket."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Jelentkezzen be már létező fiókjával"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
@@ -132,7 +134,7 @@ msgstr ""
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "A részvételhez hozzon létre egy fiókot:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
@@ -144,19 +146,20 @@ msgstr ""
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "Regisztráció"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "Bejelentkezés"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Elfelejtett jelszó"
+#, fuzzy
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Kapcsolódás a projekt szerverhez..."
msgctxt "attachproject_login_attached"
msgid "Attached"
@@ -169,7 +172,7 @@ msgstr ""
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Projekt:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
@@ -181,7 +184,7 @@ msgstr "Név:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Csapat:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
@@ -193,7 +196,7 @@ msgstr ""
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Létrehoz"
#. account manager
msgctxt "attachproject_acctmgr_header"
@@ -202,11 +205,11 @@ msgstr "Fiókkezelő hozzáadása"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Felhasználó:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
@@ -218,7 +221,7 @@ msgstr ""
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Hozzáad"
#. error strings
msgctxt "attachproject_error_wrong_name"
@@ -227,15 +230,15 @@ msgstr ""
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Túl rövid a jelszó"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Kapcsolódási hiba"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "A jelszavak nem egyeznek"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
@@ -316,7 +319,7 @@ msgstr ""
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Kapcsolódás"
msgctxt "attachproject_working_verify"
msgid "Verify account"
@@ -328,7 +331,7 @@ msgstr ""
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Bejelentkezés"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
@@ -336,7 +339,7 @@ msgstr "Fiókkezelő hozzáadása"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Szinkronizálás"
#. main activity
#, fuzzy
@@ -346,7 +349,7 @@ msgstr "Válasszon projektet:"
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Hupsz"
msgctxt "main_error_long"
msgid ""
@@ -356,61 +359,61 @@ msgstr ""
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "BOINC ikon"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Állapot"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projektek"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Feladatok"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Adatforgalom"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Beállítások"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Értesítések"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigáció"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Számítás"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Köszönjük részvételét."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Nincs teendő"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Várakozás feladatokra..."
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
@@ -418,11 +421,11 @@ msgstr ""
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "Indítás…"
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Válasszon projektet, amiben részt szeretne venni."
msgctxt "status_closing"
msgid "Closing…"
@@ -430,24 +433,24 @@ msgstr ""
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Sebességmérés..."
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "projekt kép"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Beállítások olvasása..."
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Mentés"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Adjon meg új értéket:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
@@ -455,11 +458,11 @@ msgstr ""
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Általános"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Hálózat"
msgctxt "prefs_category_power"
msgid "Power"
@@ -467,7 +470,7 @@ msgstr ""
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
@@ -475,11 +478,11 @@ msgstr ""
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Memória"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Hibakeresés"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
@@ -491,7 +494,7 @@ msgstr ""
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Min. akkumulátorszint"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
@@ -499,7 +502,7 @@ msgstr ""
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Max. akkumulátor-hőmérséklet"
msgctxt "battery_temperature_max_description"
msgid ""
@@ -533,7 +536,7 @@ msgstr ""
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Feladatok átvitele csak WiFi-n történjen"
msgctxt "prefs_autostart_header"
msgid "Autostart"
@@ -573,7 +576,7 @@ msgstr ""
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "A feladatok által lefoglalható memória korlátozása."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
@@ -636,7 +639,7 @@ msgstr ""
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Nem kap új feladatot"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
@@ -679,9 +682,10 @@ msgctxt "projects_control_remove"
msgid "Remove"
msgstr ""
+#, fuzzy
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "projects_control_resume"
msgid "Resume"
@@ -689,11 +693,11 @@ msgstr ""
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Nincs új feladat"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Új feladatok engedélyezése"
msgctxt "projects_control_reset"
msgid "Reset"
@@ -705,7 +709,7 @@ msgstr ""
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Szinkronizálás"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
@@ -761,9 +765,10 @@ msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
msgstr ""
+#, fuzzy
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
@@ -809,9 +814,10 @@ msgctxt "tasks_active_executing"
msgid "running"
msgstr ""
+#, fuzzy
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
@@ -821,9 +827,10 @@ msgctxt "tasks_active_quit_pending"
msgid "suspending"
msgstr ""
+#, fuzzy
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
@@ -831,7 +838,7 @@ msgstr ""
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "jelentésre kész"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
@@ -875,9 +882,10 @@ msgctxt "trans_failed"
msgid "failed"
msgstr ""
+#, fuzzy
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "trans_active"
msgid "active"
@@ -1029,7 +1037,7 @@ msgstr ""
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Elkészült feladatok jelentése"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
@@ -1072,9 +1080,10 @@ msgctxt "menu_exit"
msgid "Exit BOINC"
msgstr ""
+#, fuzzy
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Felfüggesztve"
msgctxt "menu_run_mode_enable"
msgid "Resume"
diff --git a/locale/hu/BOINC-Manager.mo b/locale/hu/BOINC-Manager.mo
index a4ad4b4..14f31e6 100644
Binary files a/locale/hu/BOINC-Manager.mo and b/locale/hu/BOINC-Manager.mo differ
diff --git a/locale/hu/BOINC-Manager.po b/locale/hu/BOINC-Manager.po
index 49db63c..e9811a3 100644
--- a/locale/hu/BOINC-Manager.po
+++ b/locale/hu/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 5.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-10-09 09:31+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-22 15:16+0000\n"
"Last-Translator: Gabor <csega at mailbox.hu>\n"
"Language-Team: BOINC Development Team <rwalton at ssl.berkeley.edu>\n"
"Language: hu\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1381311093.0\n"
+"X-POOTLE-MTIME: 1393082210.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -126,7 +126,7 @@ msgstr ""
#: AccountInfoPage.cpp:532
msgid "Account manager web site"
-msgstr ""
+msgstr "A fiókkezelő honlapja"
#: AccountInfoPage.cpp:574 WelcomePage.cpp:348
msgid "Add project"
@@ -142,16 +142,16 @@ msgstr "Fiókkezelő használata"
#: AccountInfoPage.cpp:585
msgid "Please enter a user name."
-msgstr ""
+msgstr "Kérjük, adjon meg egy felhasználónevet."
#: AccountInfoPage.cpp:587
msgid "Please enter an email address."
-msgstr ""
+msgstr "Kérjük, adjon meg egy email címet:"
#: AccountInfoPage.cpp:597
#, c-format
msgid "Please enter a password of at least %d characters."
-msgstr ""
+msgstr "Kérjük, adjon meg egy legalább %d karakter hosszú jelszót."
#: AccountInfoPage.cpp:607
msgid ""
@@ -172,15 +172,15 @@ msgstr ""
#: AccountManagerInfoPage.cpp:279
msgid "Account manager details:"
-msgstr ""
+msgstr "Fiókkezelő részletek:"
#: AccountManagerInfoPage.cpp:283
msgid "Account manager &URL:"
-msgstr ""
+msgstr "Fiókkezelő &URL-je:"
#: AccountManagerInfoPage.cpp:287
msgid "Open web page"
-msgstr ""
+msgstr "Weboldal megnyitása"
#: AccountManagerInfoPage.cpp:290
msgid "Visit this account manager's web site"
@@ -189,7 +189,7 @@ msgstr ""
#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
msgid "Communicating with %s."
-msgstr "Kommunikáció ezzel: %s."
+msgstr "Ezen fiókkezelő weboldalának megtekintése"
#: AccountManagerProcessingPage.cpp:194 AccountManagerPropertiesPage.cpp:200
msgid "Communicating with server."
@@ -211,338 +211,339 @@ msgstr "Kapcsolódva"
msgid "Disconnected"
msgstr "Kapcsolat megszakítva"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "%s ablak bezárása"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Ablak bezárása"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "%s bezárása"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Értesítések\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Értesítések megjelenítése"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projektek\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Projektek mutatása"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Feladatok\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Feladatok mutatása"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "A&datforgalom\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Adatforgalom mutatása"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statisztika\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Statisztikák mutatása"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Lemezhasználat\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Lemezhasználat mutatása"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Egyszerű &nézet\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Az egyszerű grafikus felület megjelenítése."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Projekt vagy fiókkezelő hozzáadása"
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Vegyen részt bármelyikben a több, mint 30 különböző tudományos projektből"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Szinkronizáció ezzel: %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Aktuális beállítások betöltése innen: %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Projekt hozzáadása..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Projekt hozzáadása"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "%s használatának &befejezése..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Számítógép eltávolítása a fiókkezelő felügyelete alól."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opciók..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "A grafikus megjelentés és a proxy beállítása"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Számítási &beállítások..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Számítási beállítások konfigurálása"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Mindig fut"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Munka engedélyezése a beállítások figyelmen kívül hagyásával"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "&Beállítások szerint fut"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Munka engedélyezése a beállítások figyelembevételével"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Felfüggeszt"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Beállítások figyelembe vétele nélkül leáll"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "GPU használata mindig"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "GPU munka engedélyezése a beállításoktól függetlenül"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "A GPU beállítások szerinti használata"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "GPU munka engedélyezése a beállítások figyelembevételével"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "GPU felfüggesztése"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "A GPU munka leállítása a beállításoktól függetlenül"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "A hálózati forgalom mindig elérhető"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Beállítások mellőzésével a hálózatra kapcsolódhat"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Hálózati forgalom a beállítások alapján"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Hálózati forgalom engedélyezése a beállítások szerint"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Hálózati forgalom felfüggesztve"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "BOINC hálózati aktivitásának leállítása"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Kapcsolódás másik %s -t futtató számítógéphez"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Számítógép kiválasztása..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Kapcsolódott kliens leállítása..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "A jelenleg kapcsolódott kliens leállítása"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "&Sebességmérés futtatása"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "A BOINC processzor-sebesség mérésének futtatása "
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Hálózati kommunikáció létesítése"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Minden függőben lévő hálózati kommunikáció folytatása"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Konfigurációs fájlok beolvasása"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Helyi beállításfájl beolvasása"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Beállítások beolvasása a global_prefs_override.xml fájlból."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "A(z) %s másik példányának indítása..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Másik %s indítása"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Eseménynapló...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Diagnosztikai üzenetek mutatása."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &segítség"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Információk erről: %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s segítség"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Információk erről: %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
+#, c-format, fuzzy
msgid "%s &web site"
-msgstr ""
+msgstr "%s &weboldal"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Információk a BOINC kezelőről és erről: %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "%s &névjegye..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Licensz és szerzői jogi információ."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Fájl"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Nézet"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Eszközök"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Aktivitás"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Haladó"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Segítség"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - %s használatának befejezése"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -557,12 +558,12 @@ msgstr ""
"\n"
"Biztosan befejezi %s használatát?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - A jelenlegi kliens leállítása..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -571,27 +572,27 @@ msgstr ""
"%s leállítja a jelenleg kapcsolódott klienst,\n"
"és javasol Önnek egy másik klienst, amihez csatlakozhat.\n"
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s sikeresen hozzáadva ehhez: %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Kapcsolódás %s-hoz"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Kapcsolódva ehhez: %s (%s)"
@@ -630,26 +631,26 @@ msgstr ""
"Kérem, látogasson el a projekt weboldalára, és kövesse az ott leírt "
"teendőket."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Kommunikáció a BOINC klienssel. Kérem, várjon..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "%s &bezárása"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "%s &bezárása"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Kommunikáció"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Mégsem"
@@ -809,7 +810,7 @@ msgstr "%s sikeresen lekapcsolódott az internetről."
msgid "%s failed to disconnected from the Internet."
msgstr "%s nem tudott lekapcsolódni az internetről."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -830,7 +831,7 @@ msgstr ""
"- lépjen kapcsolatba a rendszergazdával és kérje meg, hogy adja hozzá a\n"
"'boinc_master' felhasználói csoporthoz."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -840,16 +841,16 @@ msgstr ""
"kérjük, telepítse újra a(z) %s-t.\n"
"(Hibakód %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr "itt:"
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -857,69 +858,69 @@ msgstr ""
"A BOINC megfelelő futásához újraindítás szükséges.\n"
"Kérjük, indítsa újra a számítógépét, majd próbálja újra."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Kezelő"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "A BOINC Kezelőt az operációs rendszer automatikusan indította"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "A BOINC csak tálcaikonként történő indítása"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "A futtatható BOINC Klienst tartalmazó könyvtár"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC adatkönyvtár"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Hostnév vagy IP cím"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC portszám"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Jelszó"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "A BOINC indítása a következő opcionális lehetőségekkel"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "BOINC biztonsági felhasználók és hozzáférések kikapcsolása"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"kinézet hibakereső mód beállítása, ezzel a kinézetkezelő hibaüzeneteinek "
"engedélyezése"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "a BOINC Kezelő több példányának futása engedélyezett"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Nem használt: az XCode 4.2-ben található megoldás a hibára"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automatikus felismerés)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Ismeretlen)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Felhasználó által megadott)"
@@ -946,7 +947,7 @@ msgid "E&xit"
msgstr "K&ilépés"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Folytatás"
@@ -1103,64 +1104,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Nyílt Rendszer a Hálózati Számitásért (BOINC)"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "érvénytelen lebegőpontos"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "érvénytelen idő, a helyes formátum: ÓÓ:PP"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "érvénytelen időintervallum, a helyes formátum: ÓÓ:PP-ÓÓ:PP"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "érvénytelen bemeneti értéket észleltem"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Érvényesítési hiba"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Hozzáadható alkalmazások"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' nem végrehajtható alkalmazás."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Exkluzív alkalmazás hozzáadása"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Mi a hozzáadandó alkalmazás neve?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Exkluzív alkalmazás hozzáadása"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Az alkalmazás nevének '%s'-re kell végződnie"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' már a listában van."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1168,11 +1169,11 @@ msgstr ""
"BIztosan törölni szeretne minden helyi beállítást?\n"
"(Ez nem érinti az exkluzív alkalmazásokat.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Megerősítés"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Beállítások"
@@ -1189,11 +1190,11 @@ msgstr ""
"Kattintson a Törlés-re a webes beállítások visszaállításához (kivéve az "
"exkluzív alkalmazásokat)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Törlés"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "minden helyi beállítás törlése és a párbeszédpanel bezárása"
@@ -1213,7 +1214,7 @@ msgstr "lemez- és memóriahasználat"
msgid "exclusive applications"
msgstr "exkluzív alkalmazások"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1226,7 +1227,7 @@ msgid "close the dialog without saving"
msgstr "zárja be a párbeszédablakot mentés nélkül"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Súgó"
@@ -1284,7 +1285,7 @@ msgstr ""
"használja:"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "perc"
@@ -1300,7 +1301,7 @@ msgstr "munka felfüggesztése, ha a processzorhasználat meghaladja ezt a szint
msgid "percent (0 means no restriction)"
msgstr "százalék (0 esetén nincs korlátozás)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Minden nap"
@@ -1308,8 +1309,8 @@ msgstr "Minden nap"
msgid "start work at this time"
msgstr "ekkor kezdje a feldolgozást"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "és"
@@ -1317,45 +1318,45 @@ msgstr "és"
msgid "stop work at this time"
msgstr "ekkor fejezze be a feldolgozást"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "óra között (ha megegyeznek, nincs korlátozva)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Felülírás a hét napjaira:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"jelölje be a négyzetet, ha a hét ezen napjára külön szeretné beállítani az "
"időtartamot"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Hétfő"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Kedd"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Szerda"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Csütörtök"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Péntek"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Szombat"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Vasárnap"
@@ -1376,9 +1377,9 @@ msgstr "Többprocesszoros rendszereken legfeljebb"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Legfeljebb"
@@ -1387,83 +1388,83 @@ msgstr "Legfeljebb"
msgid "% CPU time"
msgstr "%-át használja a CPU időnek"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Általános beállítások"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Max letöltési sebesség"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KByte/sec."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Max feltöltési sebesség"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Legfeljebb"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbájt"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "minden"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "nap"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Minimum munka buffer"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "Próbáljon ennyi napra elegendő feladatot készenlétben tartani:"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Max kiegészítő munka buffer"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Legfeljebb ennyi napra elegendő feladatot tartson készenlétben:"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Képfájl ellenőrzés kihagyása"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "jelölje be, ha az internetszolgáltatója módosítja a képfájlokat"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Csatlakozási opciók"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Jóváhagyás internetre csatlakozás előtt"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr ""
"ha aktív, egy jóváhagyás kérés fog megjelenni internetre csatlakozás elött"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Lecsatlakozik ha kész"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1471,152 +1472,152 @@ msgstr ""
"ha aktív, a BOINC lecsatlakozik miután befejezte a hálózat használatát\n"
"(csak betárcsázós kapcsolatnál számít)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Hálózathasználat engedélyezése"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "hálózathasználat kezdeti ideje"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "hálózathasználat befejezési ideje"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Lemezhasználat"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "a BOINC által maxmálisan használt lemezterület (Gigabájtban)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabájt lemezterület"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Hagyjon legalább"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "A BOINC legalább ennyi lemezterületet szabadon hagy (Gigabájtban)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabájt szabad lemezterületet"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "A BOINC legfeljebb a teljes lemezterület ekkora hányadát használja"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "%-át használja a teljes lemezterületnek"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Feladat állapotának lemezre írása legalább minden"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "másodpercben"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "%-át használja a lapozófájlnak (swap terület)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Memóriahasználat"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% ha a számítógép használatban van"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% amikor a számítógép tétlen"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Hagyja az alkalmazásokat a memóriában a felfüggesztésük alatt"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
"ha be van jelölve, akkor a felfüggesztett munkacsomagok a memóriában "
"maradnak"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Függessze fel a processzor- és hálózathasználatot, amikor a következő "
"alkalmazások futnak:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Hozzáadás..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Alkalmazás hozzáadása ehhez a listához"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Eltávolítás"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Alkalmazás eltávolítása ebből a listából"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Haladó beállításokhoz lásd"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Eseménynapló"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Idő"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Üzenet"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Csak ezt a projektet mutassa"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "&Mindent másol"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Minden üzenet másolása a vágólapra."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "&Kijelöltek másolása"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1625,7 +1626,7 @@ msgstr ""
"ha az üzenetkre történő kattintás közben nyomva tartja a Shift, vagy a "
"parancsbillentyűt."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1633,24 +1634,24 @@ msgstr ""
"A kiválasztott üzenetek másolása a vágólapra. Több üzenetek is kiváaszthat a "
"SHIFT vagy CTRL gombok lenyomásával, miközben az üzenetekre kattint."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Bezárás"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Segítség ehhez: %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "&Minden üzenet mutatása"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Az összes projekt üzeneteinek mutatása."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Csak a kiválasztott projekt üzeneteit mutassa"
@@ -1703,7 +1704,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Emlékezzen a döntésemre és ne mutassa többé ezt az ablakot."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "Mégsem"
@@ -1711,223 +1712,223 @@ msgstr "Mégsem"
msgid "Don't show this dialog again."
msgstr "Ne mutassa újra ezt a párbeszédablakot."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Ne töltsön le feladatokat ehhez:"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "A projekt élvez elsőbbséget"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "A fiókkezelő élvez elsőbbséget"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "A projektnek nincs alkalmazása ehhez: "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "A kliens beállításai kizárják ezt: "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " munka letöltése elhalasztva ennyi időre"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr "munkaletöltés újrapróbálási időköze"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Projekt tulajdonságok"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Általános"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Mester URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Felhasználónév"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Csapatnév"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Erőforrásmegosztás"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Ütemező RPC elhalasztva ennyi időre"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Fájlok letöltése elhalasztva ennyi időre"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Fájlok feltöltése elhalasztva ennyi időre"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Számítógép azonosító (ID)"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Nem processzorigényes"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "igen"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "GUI-n keresztül felfüggesztve"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "nem"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Ne kérjen több feladatot"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Ütemező hívása folyamatban"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Időközi jelentés függőben"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "A számítógép helyzete"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "alapértelmezett"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Hozzáadva a fiókkezelővel"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Eltávolítás a munkák elkészültekor"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Vége"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Kredit"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Felhasználó"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Számítógép"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Ütemezés"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Ütemezés prioritása"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Időtartam korrekciós faktor"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Feladat tulajdonságai: "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Alkalmazás"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "A munkacsomag neve"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Név"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Állapot"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Letöltve"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Jelentési határidő"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Erőforrások"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Becsült kiszámítási idő"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "CPU idő az utolsó ellenőrzőpontnál"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Processzor idő"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Eltelt idő"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Becsült hátralévő idő"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Elkészült rész"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "A virtuális memória mérete"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "A munkahalmaz mérete"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Mappa"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Folyamat azonosító"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Helyi:"
@@ -2015,7 +2016,7 @@ msgstr "Csak szükség esetén töltse ki"
msgid "User Name:"
msgstr "Felhasználói név:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Jelszó:"
@@ -2075,12 +2076,12 @@ msgstr ""
"A(z) %s alapértelmezett nyelve megváltozott, a változás érvénybe lépéséhez "
"újra kell indítani %s-t."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Számítógép kiválasztása"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2089,7 +2090,7 @@ msgstr ""
"Jelenleg %s egy másik példánya is fut a számítógépen.\n"
" Kérem válasszon egy klienst a megfigyeléshez."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Számítógépnév:"
@@ -2291,23 +2292,23 @@ msgstr "Kutatás"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Tudjon meg többet a World Community Gridnél futó projektekről"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Induló kliens"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Csatlakozás a klienshez"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Rendszerállapot lekérdezése, kérem várjon..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Hiányzó alkalmazás"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2315,185 +2316,185 @@ msgstr ""
"Kérjük, töltse le és telepítse a CoRD alkalmazást a "
"http://cord.sourceforge.net oldalról"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "akkumulátorról működik"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "a számítógép használatban van"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "felhasználói kérés"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "napszak"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU sebességmérés fut"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "több lemezterület szükséges - ellenőrizze a beállításokat"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "a számítógép nincs használatban"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "elindulás"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "egy alkalmazás kizárólagosan fut"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "a CPU foglalt"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "hálózati sávszélességi korlát túllépve"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "az operációs rendszer kérésére"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "ismerelten ok"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU hiányzik,"
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Új"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Sikertelen letöltés"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Letöltés..."
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (felfüggesztve - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "A projektet a felhasználó felfüggesztette"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "A feladatot a felhasználó felfüggesztette"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Felfüggesztve - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr " (felfüggesztve - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Várakozás memóriára"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Várakozás megosztott memóriára"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Fut (magas prioritással)"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Fut"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (nem CPU igényes)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Futásra vár"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Indításra kész"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr "(Ütemező vár: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(Ütemező vár)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr "(Várakozás hálózati hozzáférésre)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Számolási hiba"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Sikertelen feltöltés"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Feltöltés..."
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Felhasználó által eldobva"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "A projekt által eldobva"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Eldobva: a jelentési határidőig nem indult el"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Eldobva"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Nyugtázva"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Jelentésre kész"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Hiba: érvénytelen állapot \"%d\""
@@ -2548,57 +2549,57 @@ msgstr "Ellenőrizze a felhasználónevet és a jelszót, majd próbálja újra.
msgid "Check the email address and password, and try again."
msgstr "Ellenőrizze az emailcímet és a jelszót, majd próbálja újra."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "tovább..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Mind"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Válasszon egy projektet"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Projekt kiválasztásához kattintson annak nevére vagy gépelje be alább az "
"URL-jét."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategóriák:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projektek:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Projekt részletek"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Kutatási terület:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Szervezet:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Weboldal:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Támogatott rendszerek:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Projekt URL:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2606,7 +2607,7 @@ msgstr ""
"Elképzelhető, hogy ez a projekt nem tud az Ön számítógépének megfelelő "
"munkát biztosítani. Mégis hozzá szeretné adni?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Már hozzáadta ezt a projektet. Kérjük, válasszon másikat."
@@ -2614,11 +2615,11 @@ msgstr "Már hozzáadta ezt a projektet. Kérjük, válasszon másikat."
msgid "Communicating with project."
msgstr "Kommunikáció a projekttel."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "A szükséges fájlok nem találhatók a szerveren."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Belső szerverhiba történt."
@@ -2729,7 +2730,8 @@ msgid "I agree to the terms of use."
msgstr "Elfogadom a felhasználási feltételeket."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+#, fuzzy
+msgid "I do not agree to the terms of use."
msgstr "Nem fogadom el a felhasználási feltételeket."
#: UnavailablePage.cpp:183
@@ -2819,7 +2821,7 @@ msgstr "\"%s\" nem tartalmaz érvényes gépnevet."
msgid "'%s' does not contain a valid path."
msgstr "\"%s\" nem tartalmaz érvényes útvonalat."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Parancsok"
@@ -2872,7 +2874,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "Jelenleg nincsenek megjegyzések."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Értesítések"
@@ -2889,7 +2891,7 @@ msgstr ""
"esetlegesen új munka letöltése."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3126,135 +3128,135 @@ msgstr "szabad:"
msgid "used by other programs: "
msgstr "más programok által használt: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Felhasználó - Összes kredit"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Felhasználó - Átlag kredit"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Számítógép - Összes kredit"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Számítógép - Átlag kredit"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Utolsó frissítés: %.0f napja"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Felhasználó - Összes kredit"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "A felhasználó összes kreditjének mutatása"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Felhasználó - Átlag kredit"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "A felhasználó kreditátlagának mutatása"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Számítógép - Összes kredit"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "A számítógép összes kreditjének mutatása"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Számítógép - Átlag kredit"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "A számítógép kreditátlagának mutatása"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< E&lőző projekt"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Az előző projekt grafikonjának megjelenítése"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Következő projekt >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "A következő projekt grafikonjának megjelenítése"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Projektlista elrejtése"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Használja a teljes területet a grafikonhoz"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Mód nézet"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Egy projekt"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Egy grafikon mutatása a kiválasztott projekttel"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Minden projekt (külön)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Megmutatja az összes projektet, projektenként külön grafikonon"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Minden projekt (együtt)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Az összes projekt ábrázolása egy grafikonon"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Minden projekt (összeg)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Egy grafikonon ábrázolja a projektek összegeit"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statisztika"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Grafikonok frissítése..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Projektlista megjelenítése"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "A grafikonokhoz kisebb területet használ"
@@ -3421,10 +3423,6 @@ msgstr "Hátralévő (becsült)"
msgid "Deadline"
msgstr "Határidő"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Név"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Feladatok"
@@ -3565,40 +3563,40 @@ msgstr "Tényleg meg akarja szakítani?"
msgid "Question"
msgstr "Kérdés"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Haladó nézet...\t Ctrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Az haladó grafikus felület megjelenítése."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Kinézet"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Válassza ki a felhasználói felület kinézetét."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Alapértelmezett"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Számítás felfüggesztése"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Számítás folytatása"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
"Ablak nyitása a BOINC-tól vagy a projektektől érkező üzenetek "
@@ -3622,117 +3620,121 @@ msgid "Click OK to set preferences."
msgstr "Kattintson az OK-ra a beállítások érvényesítéséhez."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Kattintson a Törlésre a web-alapú beállítások visszaállításához."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
+#, fuzzy
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr "További beállításokhoz válassza a Számítási beállításokat a"
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "haladó nézetben."
-
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Csak ettől eddig dolgozzon:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Csak ettől eddig kapcsolódhat az internetre:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Legfeljebb"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "%-át használja a lemezterületnek"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "%-át használja a processzoroknak"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Akkus üzem esetén dolgozhat?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Ennyi üresjárat után dolgozhat:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+#, fuzzy
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "minden helyi beállítás törlése és a párbeszédpanel bezárása"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Bármikor"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (mindig fut)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Biztosan törölni akar minden helyi beállítást?\n"
@@ -3768,8 +3770,9 @@ msgstr "Projekt parancsok"
#: sg_ProjectPanel.cpp:267
#, c-format
+#, c-format, fuzzy
msgid "Pop up a menu of web sites for project %s"
-msgstr ""
+msgstr "Jelenjen meg egy menü a(z) %s projekt weboldalairól"
#: sg_ProjectPanel.cpp:269
#, c-format
@@ -3793,116 +3796,116 @@ msgstr ""
"Biztosan eldobja ezt a csomagot: '%s'?\n"
"(Elkészült: %.1lf%%, Status: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Nincs egy projektje sem. Kérjük, adjon hozzá egyet."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Nem elérhető"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Feladatok:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Válasszon ki egy feladatot, amelyhez hozzá kíván férni"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Innen:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Ezen feladat állapota"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Feladatparancsok"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Jelenjen meg egy menü az ezen feladatra alkalmazható parancsokról"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Alkalmazás: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Alkalmazás: Nem elérhető"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Nem elérhető"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Eltelt: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Hátralévő (becsült): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Állapot: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Aktuális állapot lekérdezése."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Munka letöltése a szerverről."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Számítás felfüggesztve: A gép akkumulátorról működik."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Számítás felfüggesztve: a felhasználó aktív."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Számítás felfüggesztve: a felhasználó függesztette fel."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Számítás felfüggesztve: ilyenkor nem dolgozhat."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Számítás felfüggesztve: sebességmérés fut."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Számítás felfüggesztve."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Várakozás a projektszerverekkel való kapcsolatfelvételre."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Aktuális állapot lekérdezése"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Nincs feldolgozható munka"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Nem lehet csatlakozni a magklienshez"
@@ -3944,6 +3947,24 @@ msgstr "Mutasd mindet"
msgid "Quit %s"
msgstr "%s bezárása"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Nem fogadom el a felhasználási feltételeket."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Kattintson a Törlésre a web-alapú beállítások visszaállításához."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "További beállításokhoz válassza a Számítási beállításokat a"
+
+#~ msgid "the Advanced View."
+#~ msgstr "haladó nézetben."
+
+#~ msgid "Workunit name"
+#~ msgstr "A munkacsomag neve"
+
+#~ msgid "invalid float"
+#~ msgstr "érvénytelen lebegőpontos"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "A haladó (elérhető) grafikus felület megjelenítése."
diff --git a/locale/hu/BOINC-Project-Generic.po b/locale/hu/BOINC-Project-Generic.po
index fd2779a..28bdd28 100644
--- a/locale/hu/BOINC-Project-Generic.po
+++ b/locale/hu/BOINC-Project-Generic.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-08 11:52+0000\n"
-"Last-Translator: ZT <vdonksgula at gmail.com>\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-04-05 17:35+0000\n"
+"Last-Translator: Gabor <csega at mailbox.hu>\n"
"Language-Team: \n"
"Language: hu\n"
"MIME-Version: 1.0\n"
@@ -21,7 +21,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1383911572.0\n"
+"X-POOTLE-MTIME: 1396719309.0\n"
# The name of this language in this language
msgid "LANG_NAME_NATIVE"
@@ -199,7 +199,7 @@ msgstr "Részletes keresés"
# #######################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Személyes üzenetek"
@@ -211,8 +211,8 @@ msgstr "Személyes üzenetek"
msgid "Questions and Answers"
msgstr "Kérdések és válaszok"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -280,7 +280,7 @@ msgstr "Olvasatlan"
msgid "Message %1"
msgstr "%1. üzenet"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "rejtett"
@@ -499,7 +499,7 @@ msgstr "Téma"
# #######################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Üzenetek"
@@ -508,7 +508,7 @@ msgstr "Üzenetek"
msgid "Views"
msgstr "Megtekintések"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Utolsó üzenet"
@@ -546,7 +546,7 @@ msgid "Home"
msgstr "Otthon"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Munka"
@@ -612,9 +612,9 @@ msgid "Created"
msgstr "Létrehozva"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -794,7 +794,7 @@ msgstr "Utolsó kapcsolat"
msgid "Computer info"
msgstr "Számítógép infó"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -803,9 +803,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Átl. kredit"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -893,8 +893,8 @@ msgstr "Csak az utóbbi 30 napban aktív számítógépek"
msgid "Computer ID"
msgstr "Számítógép ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -930,7 +930,7 @@ msgstr "Bejövő"
msgid "Write"
msgstr "Levélírás"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Privát üzenet küldése"
@@ -1226,8 +1226,9 @@ msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
msgstr "Használja az NVIDIA GPU-t %1 Erőltetve a 6.10 verzió felett %2"
#: ../inc/prefs.inc:344
+#, fuzzy
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
-msgstr ""
+msgstr "Használja az ATI GPU-t %1 Erőltetve a 6.10 verzió felett %2"
#: ../inc/prefs.inc:358
msgid ""
@@ -1708,7 +1709,7 @@ msgstr "A jelentés ideje<br />vagy határidő"
msgid "explain"
msgstr "megmagyaráz"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Állapot"
@@ -1806,9 +1807,9 @@ msgstr ""
"Keressen csapatokat, amiknek nevében vagy leírásában benne vannak a "
"következő szavak"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1816,7 +1817,7 @@ msgstr ""
msgid "Country"
msgstr "Ország"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Csapat típusa"
@@ -1844,8 +1845,8 @@ msgstr "Ön kérte"
msgid "founder response deadline is %1"
msgstr "alapítói válaszadási határidő: %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Nincs"
@@ -1869,27 +1870,27 @@ msgstr "Leírás"
msgid "Web site"
msgstr "Weboldal"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Projekt-közti statisztikák"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Típus"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Üzenőfal"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Témák"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Csatlakozzon ehhez a csapathoz"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1898,79 +1899,79 @@ msgstr ""
"csapathoz való csatlakozás láthatóvá teszi emailcímét a csapat alapítója "
"számára."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nem fogad új tagokat"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Alapító megváltoztatása kérve"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Válaszoljon %1-el"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Csapat alapítójának megváltoztatása"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Tagok"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Alapító"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Adminok"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Új tagok tegnap"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Összes tag"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "megtekint"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktív tagok"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Kredittel rendelkező tagok"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Admin"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Előző %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Következő %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Nincs ilyen csapat."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Ehhez a művelethez alapítói jogkör szükséges."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Ehhez a művelthez csapat adminisztrátori jogosultság szükséges"
@@ -1982,7 +1983,7 @@ msgstr ""
"FIGYELEM: ez egy BOINC-közi csapat. Ha itt változtatásokat eszközöl, azok "
"hamarosan felül lesznek írva. Szerkessze inkább a %1BOINC-közi csapatot%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1991,48 +1992,48 @@ msgstr ""
"beállításai (erőforrás-megosztás, megjelenítési beállítások) mindenki "
"számára láthatóak lesznek."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Csapatnév, szöveges változat"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ne használjon HTML címkéket."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Csapatnév, HTML változat"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Használhat %1bizonyos HTML címkéket%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Ha nem ismeri a HTML-t, hagyja üresen ezt a négyzetet."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "A csapat honlapja, ha van"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "\"http://\" nélkül"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
#, fuzzy
msgid "This URL will be linked to from the team's page on this site."
msgstr "Erre az URL-re fog hivatkozni a csapat oldala ezen a honlapon."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "A csapat leírása"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Fogad új tagokat?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Felhasználói profil"
@@ -2065,7 +2066,7 @@ msgid "Computers on this account"
msgstr "Ezen fiók számítógépei"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Megtekint"
@@ -2082,8 +2083,8 @@ msgstr "Projekt-közti statisztikák"
msgid "Account"
msgstr "Fiók"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Csapat"
@@ -2112,7 +2113,7 @@ msgstr "Fiókinformáció"
msgid "Email address"
msgstr "Email cím"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2120,7 +2121,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Irányítószám"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 tag ennyi ideje:"
@@ -2140,7 +2141,7 @@ msgstr "jelszó"
msgid "other account info"
msgstr "egyéb fiókinformáció"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Felhasználói azonosító"
@@ -2186,96 +2187,96 @@ msgstr "%1 beállítások"
msgid "Community"
msgstr "Közösség"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Törlés"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Létrehoz"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 üzenet"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Értesítések"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Kilépés a csapatból"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Igazgató"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(alapító változtatási kérelem folyamatban)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Ezen csapat tagja:"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "csapat keresése"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Alapítója, de nem tagja ennek a csapatnak:"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Ismerősök keresése"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Barátok"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Számítógépek"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donor"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kapcsolat"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ez a személy ismerőse Önnek"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Barátság megszüntetése"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Kérés folyamatban"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Barátokhoz ad"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2354,7 +2355,7 @@ msgstr "Az adatbázishoz csatlakozás sikertelen - kérjük, próbálja újra k
msgid "Unable to select database - please try again later"
msgstr "Az adatbázis kiválasztása sikertelen - kérjük, próbálja újra később"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Maradjon bejelentkezve ezen a gépen"
@@ -2563,7 +2564,7 @@ msgstr ""
msgid "User of the day"
msgstr "A nap felhasználója"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Szerver állapot"
@@ -4720,7 +4721,7 @@ msgstr "2) Ha elfelejtette e-mail címét vagy nem tud leveleket fogadni:"
msgid ""
"If you have run BOINC under this account, you can still access it. Here's "
"how:"
-msgstr ""
+msgstr "Ha ebben a fiókban futtatja a BOINC-ot, hozzáférhet az alábbi módon:"
#: ../user/get_passwd.php:50
msgid ""
@@ -4731,18 +4732,24 @@ msgstr ""
#: ../user/get_passwd.php:51
msgid "Find your account file for this project; it will be named <b>%1</b>."
msgstr ""
+"Keresse meg fiókfile-ját a projekthez az alábbi elnevezéssel: <b>%1</b>."
#: ../user/get_passwd.php:52
msgid "Open the file in a text editor like Notepad. You'll see something like"
msgstr ""
+"Szövegszerkesztőben (pl. Jegyzettömb) nyissa meg a fájlt. Valami ilyesmit "
+"fog látni:"
#: ../user/get_passwd.php:62
msgid "Select and Copy the string between %1 and %2 (%3 in the above example)."
msgstr ""
+"Jelölje ki és másolja ki a karakterláncot %1 és %2 között (%3 a fenti "
+"példában)."
#: ../user/get_passwd.php:64
msgid "Paste the string into the field below, and click OK."
msgstr ""
+"Illessze be a karakterláncot az alábbi mezőbe és kattintson az OK gombra."
#: ../user/get_passwd.php:65
msgid ""
@@ -4756,7 +4763,7 @@ msgstr ""
#: ../user/gpu_list.php:126 ../user/gpu_list.php:152
msgid "No GPU tasks reported"
-msgstr ""
+msgstr "GPU feladat nincs jelentve"
#: ../user/gpu_list.php:183
msgid ""
@@ -4780,9 +4787,8 @@ msgid "If you have not already done so, %1download BOINC client software%2."
msgstr "Ha még nem tette, %1töltse le a BOINC kliens szoftvert%2."
#: ../user/host_app_versions.php:37
-#, fuzzy
msgid "Anonymous platform, missing app"
-msgstr "Névtelen platform"
+msgstr "Névtelen platform, hiányzó app"
#: ../user/host_app_versions.php:40
#, fuzzy
@@ -4791,32 +4797,31 @@ msgstr "Névtelen platform"
#: ../user/host_app_versions.php:43
msgid "Missing app version"
-msgstr ""
+msgstr "Hiányzó app verzió"
#: ../user/host_app_versions.php:45
msgid "Missing app"
-msgstr ""
+msgstr "Hiányzó app"
#: ../user/host_app_versions.php:47
msgid "Missing platform"
-msgstr ""
+msgstr "Hiányzó platform"
#: ../user/host_app_versions.php:56
msgid "Number of tasks completed"
-msgstr ""
+msgstr "Elvégzett feladatok száma"
#: ../user/host_app_versions.php:57
msgid "Max tasks per day"
-msgstr ""
+msgstr "Maximális feladat naponta"
#: ../user/host_app_versions.php:58
-#, fuzzy
msgid "Number of tasks today"
-msgstr "processzorok száma"
+msgstr "Mai feladatok száma"
#: ../user/host_app_versions.php:59
msgid "Consecutive valid tasks"
-msgstr ""
+msgstr "Egymást követő érvényes feladatok"
#: ../user/host_app_versions.php:63
#, fuzzy
@@ -4831,9 +4836,8 @@ msgid "Application details for host %1"
msgstr "Alkalmazások"
#: ../user/host_delete.php:31
-#, fuzzy
msgid "We have no record of that computer."
-msgstr "Egyesítse ezen számítógép kettőzött bejegyzéseit"
+msgstr "Nincs adat erről a számítógépről."
#: ../user/host_delete.php:38
msgid ""
@@ -4841,6 +4845,9 @@ msgid ""
"contains work for it. You must wait a few days until the work for this "
"computer has been deleted from the project database."
msgstr ""
+"Nem törölheti a számítógép adatait, mert adatbázisunk még tartogat neki "
+"munkát. Néhány napot várnia kell, míg a számítógéphez rendelt munka törlődik "
+"a projekt adatbázisból."
#: ../user/host_delete.php:40
#, fuzzy
@@ -4848,14 +4855,12 @@ msgid "Delete record of computer"
msgstr "Számítógép törlése"
#: ../user/host_delete.php:41
-#, fuzzy
msgid "Record deleted."
-msgstr "Valóban törli?"
+msgstr "Adatok törölve."
#: ../user/host_delete.php:42 ../user/host_edit_action.php:65
-#, fuzzy
msgid "Return to list of your computers"
-msgstr "A(z) %1 projektet csak jogosult számítógépeken futtassa"
+msgstr "Vissza a számítógépek listájához"
#: ../user/host_edit_action.php:39
#, fuzzy
@@ -4872,15 +4877,16 @@ msgid ""
"Sometimes BOINC assigns separate identities to the same computer by mistake. "
"You can correct this by merging old identities with the newest one."
msgstr ""
+"Időként a BOINC tévedésből elkülöníti az egy számítógéphez tartozó "
+"identitásokat. Ön kijavíthatja ezt a régi identitások összefűzésével."
#: ../user/host_edit_form.php:56
msgid "No hosts are eligible for merging with this one."
-msgstr ""
+msgstr "Nincs megfelelő gép az összefűzéshez."
#: ../user/host_edit_form.php:58 ../user/host_edit_form.php:114
-#, fuzzy
msgid "Show details"
-msgstr "Nevek mutatása"
+msgstr "Részletek mutatása"
#: ../user/host_edit_form.php:66
msgid ""
@@ -4933,6 +4939,7 @@ msgid ""
"This change will take effect the next time the host communicates with this "
"project."
msgstr ""
+"A változtatás a gép projekthez történő következő kapcsolódásakor lép életbe."
#: ../user/host_venue_action.php:50
msgid "Return to host page"
@@ -4951,43 +4958,40 @@ msgstr "Számítógép infó"
#: ../user/hosts_user.php:56
msgid ""
"This user has chosen not to show information about his or her computers."
-msgstr ""
+msgstr "Ez a felhasználó elrejtette számítógépe adatait."
#: ../user/hosts_user.php:64
-#, fuzzy
msgid "Your computers"
-msgstr "Minden számítógép"
+msgstr "Az Ön számítógépei"
#: ../user/html.php:23
-#, fuzzy
msgid "Allowed HTML tags"
-msgstr "Ne használjon HTML címkéket."
+msgstr "Engedélyezett HTML címkék"
#: ../user/html.php:25
msgid "The following HTML tags are allowed in team descriptions:"
-msgstr ""
+msgstr "Az alábbi HTML címkék engedélyezettek a csapatleírásban:"
# 75%
#: ../user/html.php:27
-#, fuzzy
msgid "bold"
-msgstr "Félkövér"
+msgstr "félkövér"
#: ../user/html.php:28
msgid "italics"
-msgstr ""
+msgstr "dőlt"
#: ../user/html.php:29
msgid "hyperlink"
-msgstr ""
+msgstr "hivatkozás"
#: ../user/html.php:30
msgid "paragraph"
-msgstr ""
+msgstr "bekezdés"
#: ../user/html.php:31
msgid "break"
-msgstr ""
+msgstr "sortörés"
#: ../user/html.php:32
msgid "preformatted"
@@ -5553,8 +5557,9 @@ msgid ""
msgstr ""
#: ../user/profile_menu.php:42
+#, fuzzy
msgid "User of the Day"
-msgstr ""
+msgstr "A nap felhasználója"
#: ../user/profile_menu.php:57
msgid "User Profile Explorer"
@@ -5674,140 +5679,140 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# #######################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Alkalmazások"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Nincs elküldve"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "Folyamatban"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5926,6 +5931,8 @@ msgid ""
"Moderate the team forum, if any (admins get email notification of moderation "
"events and red X reports)"
msgstr ""
+"Moderálja a csapatfórumot, ha van (az adminok kapnak email értesítést a "
+"moderálási eseményekről és a piros X jelentésekről)"
#: ../user/team_admins.php:47
msgid "Team Admins cannot:"
@@ -6057,6 +6064,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/hu/BOINC-Setup.mo b/locale/hu/BOINC-Setup.mo
index 0643162..6cdceda 100644
Binary files a/locale/hu/BOINC-Setup.mo and b/locale/hu/BOINC-Setup.mo differ
diff --git a/locale/hu/BOINC-Setup.po b/locale/hu/BOINC-Setup.po
index 533b538..b25450d 100644
--- a/locale/hu/BOINC-Setup.po
+++ b/locale/hu/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-10-09 09:37+0000\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-01-19 08:29+0000\n"
"Last-Translator: Gabor <csega at mailbox.hu>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: hu\n"
@@ -15,23 +15,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n !=1);\n"
-"X-Generator: Poedit 1.5.5\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1381311478.0\n"
+"X-POOTLE-MTIME: 1390120193.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
#, c-format
msgid "Sorry, this version of %s requires system 10.5 or higher."
-msgstr ""
+msgstr "Sajnos a(z) %s ezen verziója 10.5 vagy nagyobb rendszerverziót igényel."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Igen"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Nem"
@@ -54,21 +54,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
-msgstr ""
+msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -76,21 +76,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -102,7 +108,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -110,11 +116,11 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
-msgstr ""
+msgstr "Mégse"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/hu/BOINC-Web.mo b/locale/hu/BOINC-Web.mo
index ab68b3c..7275218 100644
Binary files a/locale/hu/BOINC-Web.mo and b/locale/hu/BOINC-Web.mo differ
diff --git a/locale/hu/BOINC-Web.po b/locale/hu/BOINC-Web.po
index 67694f8..6a168f5 100644
--- a/locale/hu/BOINC-Web.po
+++ b/locale/hu/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-10-09 09:40+0000\n"
"Last-Translator: Gabor <csega at mailbox.hu>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -444,16 +444,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Kognitív tudomány és mesterséges intelligencia"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Magán"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "mesterséges intelligencia"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -465,19 +465,19 @@ msgstr ""
"szófaj adatbázisokat, szövegkörnyezet vizsgálatot használ, hogy imitálja az "
"emberi viselkedést a párbeszédekben."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biológia és orvostudomány"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -486,15 +486,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Karlsruhe-i Egyetem (Németország)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Fehérjestruktúra előrejelzés"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -510,15 +510,15 @@ msgstr ""
"lényeges fehérjék háromdimenziós szerkezete alapján új gyógyszereket "
"kifejleszteni."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Delaware Egyetem"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Fehérje - ligandum interakciók tanulmányozása"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -530,15 +530,15 @@ msgstr ""
"megismerését célozza meg, egyúttal újfajta gyógyszerkészítmények "
"felfedezésének módjait is kutatja."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Barcelonai Orvosbiológiai Kutatópark (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Fehérjék molekuláris szimulációja"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -551,15 +551,15 @@ msgstr ""
"megvalósíthatóvá, ezzel új szerepet adva a biológiai számítástudománynak az "
"orvosbiológiai kutatások területén."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Genetikai okok felderítése"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -569,16 +569,16 @@ msgstr ""
"betegségeket keltő géneket, amelyek sok más mellett a cukorbetegség, a "
"magas vérnyomás, a rák és a skizofrénia egyes típusainak okozói."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Maryland Egyetem Bioinformatikai és Biomodellezési Központ"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Élettudományok kutatása"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -590,15 +590,15 @@ msgstr ""
"plazmid, és vírus protein szekvenciákon, valamint természetvédelmi területek "
"biodiverzitásán alapuló tanulmányozásához."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "A Svájci Trópusi Intézet"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Járványtan"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -616,15 +616,15 @@ msgstr ""
"nagy emberpopulációkat kell szimulálnia, méghozzá a fertőzés terjedését "
"befolyásoló számos élettani és társadalmi tényező függvényében."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Washingtoni Egyetem"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biológia"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -641,11 +641,11 @@ msgstr ""
"kutatásunkat is segítheti, amelyek például a HIV, a malária, a rák vagy az "
"Alzheimer-kór leküzdéséhez járulhatnak hozzá."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Bécsi Egyetem"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -655,19 +655,19 @@ msgstr ""
"nyilvános adatbázist hoz létre, amely jelentős szerepet játszik több "
"bioinformatikai kutatási projektben."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Földtudományok"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Oxfordi Egyetem"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Klíma tanulmány"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -688,16 +688,25 @@ msgstr ""
"ráláthatunk, miként változhat az éghajlat az elkövetkező évszázadban, "
"számolva nagyszámú különböző forgatókönyvvel."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Csillagászat, fizika és kémia"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Csillagászat"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -707,15 +716,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Texasi Egyetem, Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Kémia"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -738,11 +747,11 @@ msgstr ""
"rendszerek hosszútávú dinamikájának vizsgálatát tűzte ki célul."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Illinois-i Egyetem, Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -753,11 +762,11 @@ msgstr ""
"halmazát, amelyek összhangban vannak a csillagászati részecskefizika "
"elérhető adataival."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Rensselaer-i Műszaki Egyetem"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -767,11 +776,11 @@ msgstr ""
"modelljének elkészítése a Sloan Digitális Égboltfelmérési Program által "
"begyűjtött adatok felhasználásával."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Leiden-i Egyetem, Hollandia"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -788,15 +797,15 @@ msgstr ""
"gáztörvény érvényességének ellenőrzésére a griden végzett szimuláció "
"segítségével."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Wisconsin-i Egyetem - Milwaukee, Max Planck Intézet"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Asztrofizika"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -810,15 +819,15 @@ msgstr ""
"2005\" projekt alprojektjei közül, melyet az Amerikai Fizikai Társaság "
"(American Physical Society - APS) és számos nemzetközi szervezet is támogat."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Nukleáris Kutatások Európai Szervezete)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fizika"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -833,22 +842,22 @@ msgstr ""
"céljából hoztak létre. Az LHC at home az LHC, és detektorainak tervezését "
"elősegítő szimulációkat futtat."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Californiai Egyetem, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Asztrofizika, asztrobiológia"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -862,15 +871,15 @@ msgstr ""
"rádiójeleket. Az ilyen jelek jellemzően nem keletkeznek természetes úton, "
"tehát észlelésük bizonyítéka lehetne földönkívüli technológia létezésének."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Alkalmazott Tudományok Bielefeldi Egyeteme"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Kémiai tervezés és nanotechnológia"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -882,19 +891,19 @@ msgstr ""
"kapcsolók kifejlesztésében, melyek a gyógyászatban (például helyi "
"tumorkemoterápiában) és a biotechnológiában lennének alkalmazhatók."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Többféle alkalmazás"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Kínai Tudományos Akadémia"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Fizika, biokémia és egyebek"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -903,11 +912,11 @@ msgstr ""
"A CAS at home célja, hogy ösztönözze és segítse Kína tudósait, hogy "
"kutatásukhoz befogadják az önkéntesi gondolkodás és számítás technológiáját."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matematika, fizika, evolúció"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -916,16 +925,16 @@ msgstr ""
"önkéntes számítási projektek között. Ilyenek az: ECM, Muon, Evolution at home "
"és a distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
"MTA-SZTAKI Párhuzamos és Elosztott Rendszerek Laboratóriuma (Magyarország)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Európai kutatási projektek"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -938,27 +947,27 @@ msgstr ""
"projekt által lefedett tudományos projektek matematikai, fizikai, biológiai "
"stb. témájúak."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Spanyol egyetemek és kutatóközpontok"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Különböző spanyol kutatási projektek"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Kutatások a fizika, az anyagtudomány és a biogyógyászat területén"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -966,27 +975,27 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matematika, számítás és játékok"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Kriptográfia"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -994,26 +1003,26 @@ msgstr ""
"Megpróbálunk dekódolni 3 eredeti Enigma üzenetet. A feltörhetetlennek hitt "
"jeleket az Észak-Atlanti térségben fogták 1942-ben."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matematika"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
"Egy a matematikában még megoldatlan, az úgynevezett Collatz-sejtést "
"tanulmányozzuk"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Kaliforniai Állami Egyetem, Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Nagy egész számok faktorizációja"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1029,17 +1038,17 @@ msgstr ""
"vagy hogy 35 = 5 * 7. Az NFS at Home ezen tapasztalatok kiterjesztése, csak "
"éppen több száz számjegy hosszúságú egész számokra."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr "Vilnius Gediminas Műszaki Egyetem és Kaunas Műszaki Egyetem (Litvánia)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Szoftvertesztelés"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1051,11 +1060,11 @@ msgstr ""
"intézmények kutatóinak számára. Jelen alkalmazások Monte-Carlo alapú "
"szoftvertesztelési kutatások részei."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "A Leideni Egyetem Matematikai Intézete / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1073,17 +1082,17 @@ msgstr ""
"napjainkban a matematika egyik legnagyobb nyitott problémája. Ha igaznak "
"bizonyul, rengeteg egyéb nyitott problémára fog majd választ adni."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "RheinMaini Alkalmazott Tudományok Egyeteme"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1091,7 +1100,7 @@ msgstr ""
"Prímszámok azonosításához kapcsolódó két sejtéshez tartozó ellenpéldák "
"keresése"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1108,6 +1117,10 @@ msgstr ""
msgid "News is available as an %sRSS feed%s"
msgstr ""
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Csillagászat, fizika és kémia"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s %s verzió (%s MB)"
diff --git a/locale/ja/BOINC-Android.po b/locale/ja/BOINC-Android.po
index e1cc21b..47c2bf0 100644
--- a/locale/ja/BOINC-Android.po
+++ b/locale/ja/BOINC-Android.po
@@ -2,1134 +2,1133 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2013-10-28 15:20+0000\n"
+"Last-Translator: Anonymous Pootle User\n"
"Language-Team: ja <LL at li.org>\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1383812267.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Caricamento in corso! Attendere prego…"
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Scegli un progetto:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Aggiungi un progetto dall'URL"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Inserisci l'URL del progetto:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Aggiungi progetto"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Aggiungi l'URL del progetto"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Aggiungi un account manager"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "Connessione Internet assente"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Comunicazione con il server progetto in corso…"
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Logo progetto."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Idea generale:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Area specifica:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Descrizione:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Home:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Sito Web:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
-msgstr ""
+msgid "This project supports Android devices"
+msgstr "Questo progetto supporta i dispositivi Android"
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
-msgstr ""
+msgid "This project does not support Android devices"
+msgstr "Questo progetto non supporta i dispositivi Android"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Licenza per"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Creando un account per questo progetto, accetti i termini della licenza "
+"visualizzata sotto."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Fai il login con un account esistente"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "eMail:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Nome:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Password:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Nuovo"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Registra un account per partecipare:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Visita il sito web del progetto per creare un account:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Il progetto non permette al momento la creazione di nuovi account!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "Registra"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "Login"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Password dimenticata"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Comunicazione col progetto fallita!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Connesso"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Registrazione account per"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Progetto:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "eMail:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Nome:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Team:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Password:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Ripeti:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Crea"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Aggiungi un account manager"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Utente:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Password:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Ripeti:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Aggiungi"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "Utente non trovato"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Password troppo corta"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Errore connessione"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Password non corrispondenti"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Inserire un URL"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Per favore inserisci un indirizzo eMail"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Per favore inserisci una password"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Per favore inserisci un nome utente"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "fallito"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Nome utente rifiutato"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "eMail già utilizzata"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "Progetto offline"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "eMail rifiutata"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Password rifiutata"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "La creazione account è disabilitata su questo progetto"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "URL invalido"
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Indietro"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Fine"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Completato"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Fallito"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "…"
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Connetti"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Verifica account"
msgctxt "attachproject_working_register"
msgid "Register account"
-msgstr ""
+msgstr "Registra account"
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Log in"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Aggiungi un account manager"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Sincronizza"
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
-msgstr ""
+msgid "Tab here to choose a project."
+msgstr "Premi qui per scegliere un progetto."
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Whooops"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"…questo non deve succedere!\n"
+"Clicca sull'icona per riprovare."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "icona BOINC"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Stato"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Progetti"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Elaborazioni"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Trasferimenti"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Preferenze"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Avvisi"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigazione"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Elaborazione in corso"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Grazie per la partecipazione."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "Sospeso"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Nulla da fare"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "In attesa di nuovi lavori…"
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "Sospeso"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "Premi play per far ripartire la rete e l'elaborazione"
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "Avvio in corso…"
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Scegli un progetto per partecipare."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Chiusura in corso…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Benchmark in corso…"
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "immagine progetto"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Lettura preferenze in corso…"
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Salva"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Inserisci il nuovo valore:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "Seleziona:"
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Generale"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Rete"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Energia"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Memoria fisica"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Memoria"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Debug"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
+msgstr "Visualizza preferenze avanzate e controlli…"
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
-
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
-
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
-msgstr ""
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
+msgstr "Elabora quando alimentato a Batteria"
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Minimo livello batteria"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC sospende l'elaborazione sotto il livello definito di carica della "
+"batteria."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Temperatura massima della batteria"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC sospende l'elaborazione sopra al livello definito di temperatura della "
+"batteria. Non è raccomandato il cambiamento di questo valore."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "Massimo spazio di salvataggio"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr ""
+msgstr "Quanta percentuale dello spazio di salvataggio può usare BOINC?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "Minimo spazio su disco"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
msgstr ""
+"Quanto dello spazio di salvataggio del tuo dispositivo deve rimanere libero?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Limite trasferimento giornaliero"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Limita il traffico giornaliero causato da BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Trasferisce i lavori solo su WiFi"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Avvio automatico"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Visualizza le notifiche quando sospeso"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Usa questo numero di core CPU"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Limita il numero di core CPU che BOINC usa per l'elaborazione."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Pausa con utilizzo CPU superiore a"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
msgstr ""
+"Determina quando BOINC ferma l'elaborazione a causa dell'utilizzo CPU di "
+"altre applicazioni."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "limite CPU"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Limita il tempo CPU che BOINC usa per l'elaborazione."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "limite RAM"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Limita il quantitativo di RAM che BOINC può occupare."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "Flag di log del Client BOINC"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "Livello di log della GUI"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Specifica la verbosità dei messaggi di log della GUI."
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "Lettura progetti…"
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Aggiungi progetto"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "icona Progetto"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Crediti:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(su questo dispositivo)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(totale)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Sospeso dall'utente"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Non chiedere nuovi lavori"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Progetto terminato - Può essere rimosso"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "Verrà rimosso quando i lavori sono terminati"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Richiesta allo scheduler in attesa"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Richiesta allo scheduler in corso"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Messaggi trickle up in attesa"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Comunicazione tra:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Comandi progetto:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Visita il sito web"
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Aggiorna"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Rimuovi"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Sospendi"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Riprendi"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Nessun nuovo lavoro"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Permetti nuovi lavori"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Reset"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Comandi dell'account manager:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Sincronizza"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Disabilita"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Rimuovere il progetto?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Sei sicuro di voler rimuovere"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "da BOINC?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Rimuovi"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Reset progetto"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Sei sicuro di voler resettare"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Reset"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Disabilita l'account manager"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Sei sicuro di voler terminare l'utilizzo"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Disabilita"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Nome Lavoro:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Tempo trascorso:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(sospeso)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Deadline:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "nuovo"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "in attesa del download"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "download completato"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "errore elaborazione"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "upload in corso"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "upload completo"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "annullato"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "upload fallito"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "pronto"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "elaborazione in corso"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "sospeso"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "in sospensione"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "in sospensione"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "sospeso"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "progetto sospeso"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "pronto per il report"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Annullare elaborazione?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Annulla elaborazione:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Annulla"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Cancella"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Finestra di conferma"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Lettura trasferimenti…"
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Upload"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Download"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "riprova tra"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "fallito"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "sospeso"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "attivo"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "in attesa"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "backoff del progetto"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "File:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Ritenta i trasferimenti"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Annullare trasferimento?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "Annulla File:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Annulla"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Lettura notizie..."
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Caricamento messaggi di log…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Messaggi del Client"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "Messaggi della GUI"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Log copiato nella clipboard."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Log eventi per BOINC su Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Elaborazione sospesa."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
msgstr ""
+"Connetti il tuo dispositivo ad un caricabatterie per continuare "
+"l'eleborazione."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "Utente attivo."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Fuori tempo massimo di computazione."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC sta facendo il benchmark del tuo dispositivo…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Superato lo spazio disco."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "CPU throttle schedulato"
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Nessuna attività dell'utente recente."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Ritardo di inizializzazione."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Un'applicazione esclusiva è in corso."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Il tuo dispositivo è occupato con altre applicazioni."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC ha raggiunto il limite di trasferimento dalla rete."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Fermato da Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Non connesso al WiFi"
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
msgstr ""
+"La batteria necessita di essere ricaricata prima di riprendere "
+"l'elaborazione."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
msgstr ""
+"L'elaborazione riprenderà quando il livello di carica della batteria "
+"raggiunge"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "attualmente"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "In attesa che la batteria si raffreddi"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Ripresa elaborazione…"
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "manualmente."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Richiesta dall'utente"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Richiesta lavoro"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Invio elaborazioni terminate"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Invio messaggi di trickle-up"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Richiesto dal gestore account"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Inizializzazione progetto"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Richiesto dal progetto"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Motivo sconosciuto"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Refresh"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Invia una Email"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Copia nella Clipboard"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Log Eventi"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "Chiudi BOINC"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Sospendi"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Riprendi"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "About"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Help"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Return"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "About"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Versione"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "Berkeley Open Infrastructure for Network Computing"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-
+"© 2003–2013 University of California, Berkeley.\n"
+"Tutti i diritti riservati."
diff --git a/locale/ja/BOINC-Manager.mo b/locale/ja/BOINC-Manager.mo
index 3d1d37c..25f6238 100644
Binary files a/locale/ja/BOINC-Manager.mo and b/locale/ja/BOINC-Manager.mo differ
diff --git a/locale/ja/BOINC-Manager.po b/locale/ja/BOINC-Manager.po
index 4579758..5652ae3 100644
--- a/locale/ja/BOINC-Manager.po
+++ b/locale/ja/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 5.10 Japanese\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-10-28 15:20+0000\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: \n"
@@ -213,340 +213,340 @@ msgstr "接続しました"
msgid "Disconnected"
msgstr "接続を切りました"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "この %s ウィンドーを閉じる"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "ウィンドーを閉じる(&C)"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "%s を終了する"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "お知らせ(&N)\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "お知らせを表示する"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "プロジェクト(&P)\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "プロジェクトを表示"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "タスク(&T)\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "タスクを表示"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "転送(&F)\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "転送を表示"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "統計(&S)\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "統計を表示"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "ディスク(&D)使用量\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "ディスク使用量を表示"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "簡易表示(&V)...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "簡易グラフィックインタフェースで表示します"
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "プロジェクトまたはアカウント・マネージャを追加(&A)..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "ボランティアで参加しましょう。科学の多分野に渡る30以上のプロジェクトにどれにでもいくつでも参加できます。"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "%s に同期(&S)"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "%s から現在の設定を取り出します"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "プロジェクトを追加(&A)..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "プロジェクトを追加する"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "%s を使うのを止める(&T)..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "このクライアントをアカウント・マネージャの制御からはずします"
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr ""
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "表示オプションとプロキシの設定をします"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "計算に関するプレファレンス(&P)..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "計算に関するプレファレンス (好みの設定)を指定する"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "常時稼働(&R)"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "プレファレンス (好みの設定) に関わらず仕事をさせます"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "プレファレンスに従って稼働(&P)"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "プレファレンス (好みの設定) に従って仕事をさせます"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "一時停止(&S)"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "プレファレンス (好みの設定) に関わらず仕事を停止します"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "常時 GPU を使う"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "プレファレンス (好みの設定) に関わらず GPU に仕事をさせます"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "プレファレンスに従って GPUを使用"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "プレファレンス (好みの設定) に従って GPU に仕事をさせます"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "GPU の使用を一時停止"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "プレファレンス (好みの設定) に関わらず GPU の仕事を停止します"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "ネットワークをいつでも使用"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "プレファレンス (好みの設定) に関わらずネットワークアクセスを許します"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "プレファレンスに従ってネットワークを使用"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "プレファレンス (好みの設定) に従ってネットワークアクセスを許します"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "ネットワークの使用を一時停止"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "BOINC によるネットワークアクセスを停止します"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "%s が稼動している別のコンピュータに接続します"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "コンピュータの選択..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "接続しているクライアントをシャットダウン..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "現在接続しているクライアントをシャットダウンさせます"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "CPU ベンチマークを実行(&B)"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "BOINC の CPU ベンチマークを実行します"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "通信を今すぐ実施"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "保留されているネットワーク通信を実行します"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "設定ファイルを読み込む"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "ローカル・プレファレンスファイルを読み込む"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "global_prefs_override.xml からプレファレンス (好みの設定) を読み込みます"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "もう一つ別の %s のインスタンスを走らせます..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "もう一つ別の %s を走らせる"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "イベント・ログ...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "診断メッセージを表示する"
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s のヘルプ(&H)"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "%s の情報を表示します"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s のヘルプ"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "%s の情報を表示します"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, fuzzy
msgid "%s &web site"
msgstr "%s ウェブサイト(&W)"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "BOINC および %s の情報を表示します"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "%s について(&A)..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "ライセンスと著作権情報"
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "ファイル(&F)"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "表示(&V)"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "ツール(&T)"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "アクティビティ(&A)"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "高度な操作(&D)"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "ヘルプ(&H)"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - %s の使用をやめる"
# Case of Detaching from an account manager
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -561,12 +561,12 @@ msgstr ""
"\n"
"%s を使うのをやめますか?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - 現在接続しているクライアントをシャットダウンします..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -575,28 +575,28 @@ msgstr ""
"%s は、現在接続しているクライアントをシャットダウンし、\n"
"別の計算機に接続するよう促します。"
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
# Case for attaching to an account manager
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s は %s を追加することに成功しました。"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "%s に接続処理中"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "%s (%s)に接続済み"
@@ -633,26 +633,26 @@ msgstr ""
"\n"
"プロジェクトのウェブサイトに行って、そこにある指示に従ってください。"
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "BOINC クライアントと通信中です。お待ちください ...."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "%s を終了する(&Q)"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "%s を終了する(&X)"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - 通信"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "キャンセル"
@@ -810,7 +810,7 @@ msgstr "%s はインターネットとの接続を切ることに成功しまし
msgid "%s failed to disconnected from the Internet."
msgstr "%s はインターネットとの接続を切ることにに失敗しました。"
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
#, fuzzy, c-format
msgid ""
@@ -832,7 +832,7 @@ msgstr ""
" - 管理者に依頼してあなたを ユーザグループ 'boinc_master' に加えて\n"
" もらいます。"
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
#, fuzzy, c-format
msgid ""
@@ -842,16 +842,16 @@ msgstr ""
"BOINC 関連ファイルの所有権あるいはパーミッションの設定が不適切です。 BOINC を\n"
"再インストールしてください。 (エラーコード %d)"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -859,67 +859,67 @@ msgstr ""
"BOINC を正常に実行するためには再起動が必要です。\n"
"あなたのコンピュータを再起動してから、もう一度試してください。"
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC マネージャ"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC マネージャはオペレーティング・システムにより自動的に起動されました。"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "BOINC 起動時に、システムトレイのアイコンだけを表示します"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "BOINC クライアントの実行可能ファイルがあるディレクトリ"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC 用データディレクトリ"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "ホスト名 または IPアドレス"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI用 RPC のポート番号"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "パスワード:"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "これらのオプション引数を付けて BOINC を起動します"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "BOINC のユーザとアクセス許可についてのセキュリティを無効にします"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "skin マネージャのエラーメッセージを有効にするために、skin debugging モードにします"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "BOINC Manager の複数インスタンス起動を許す"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(言語の自動判別)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(実装上のダミーエントリ1)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(実装上のダミーエントリ2)"
@@ -947,7 +947,7 @@ msgid "E&xit"
msgstr "終了(&X)"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "再開"
@@ -1105,74 +1105,74 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "浮動小数点形式の数値が正しくありません"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "時間が正しくありません。形式は「HH:MM」"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "時間帯が正しくありません。形式は「HH:MM-HH:MM」"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "正しくない入力値があります"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "検証エラー"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr ""
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr ""
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr ""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "確認"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - プレファレンス(好みの設定)"
@@ -1188,11 +1188,11 @@ msgstr ""
"変更をするならば、OKをクリックしてください。\n"
"プロジェクトウェブサイトで設定した値に戻すなら、[クリア]をクリックしてください。"
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "クリア"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "このコンピュータだけに適用するプレファレンス(好みの設定)を全てクリアして、ダイアログを終了します。"
@@ -1212,7 +1212,7 @@ msgstr "ディスクおよびメモリ使用"
msgid "exclusive applications"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1225,7 +1225,7 @@ msgid "close the dialog without saving"
msgstr "保存をしないでダイアログを終了します"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "ヘルプ"
@@ -1275,7 +1275,7 @@ msgid ""
msgstr "指定した時間(分)の間、コンピュータを操作しなかった場合のみ計算をします"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "分"
@@ -1291,7 +1291,7 @@ msgstr "プロセッサ使用率がこのレベルを超えると仕事を一時
msgid "percent (0 means no restriction)"
msgstr "%(0を指定すれば制約なし)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "1日の動作時間帯"
@@ -1299,8 +1299,8 @@ msgstr "1日の動作時間帯"
msgid "start work at this time"
msgstr "処理開始時刻"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "~"
@@ -1308,43 +1308,43 @@ msgstr "~"
msgid "stop work at this time"
msgstr "処理終了時刻"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(値が同じだと時間の制約なし)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "曜日ごとの設定:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "この曜日で時間帯を指定するにはチェックを入れてください"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "月曜日"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "火曜日"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "水曜日"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "木曜日"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "金曜日"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "土曜日"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "日曜日"
@@ -1366,9 +1366,9 @@ msgstr "マルチプロセッサの場合、全プロセッサのうち使うの
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "最大で"
@@ -1377,88 +1377,88 @@ msgstr "最大で"
msgid "% CPU time"
msgstr "% のCPU 時間まで使用"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "一般的なオプション"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "最大ダウンロード速度"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "キロバイト/秒"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "最大アップロード速度"
# This sequence of texts and forms deeply depends on English. Hardly to be traslated into Japanese in normal manner.
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "一定期間内の転送量上限:"
# This sequence of texts and forms deeply depends on English. Hardly to be traslated into Japanese in normal manner.
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "M バイトまでを"
# This sequence of texts and forms deeply depends on English. Hardly to be traslated into Japanese in normal manner.
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "右の期間内で許可"
# This sequence of texts and forms deeply depends on English. Hardly to be traslated into Japanese in normal manner.
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "日"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
#, fuzzy
msgid "Minimum work buffer"
msgstr "仕事の備蓄"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
#, fuzzy
msgid "Max additional work buffer"
msgstr "仕事の備蓄"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "イメージファイルの検証をスキップする"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "インターネットプロバイダが画像ファイルを変更する場合はチェックを入れてください。"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "接続オプション"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "インターネットに接続する前に確認する"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr "チェックを入れると、インターネットに接続する前に確認ダイアログが表示されます。"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "終わったら切断"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1466,157 +1466,157 @@ msgstr ""
"チェックを入れると、ネットワーク使用終了時に BOINC が電話を切ります\n"
"(ダイアルアップ接続の場合のみ有意)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "ネットワーク使用を許す時間帯"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "ネットワーク使用開始時刻"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "ネットワーク使用終了時刻"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "ディスク領域"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "BOINC使用最大ディスク使用量(ギガバイト)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "ギガバイトのディスク領域"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "最低限の未使用領域"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC は、ディスク空き容量がこの値を下まわるところまでは使いません(単位はギガバイト)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "ギガバイト(空き)"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC使用最大ディスク使用率(パーセント)"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% (ディスク全体に対する使用率)"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "タスクがチェックポイントでディスクに書く最小間隔"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "秒毎"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% (ページファイル/スワップ領域 の使用率)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "メモリ使用"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% (コンピュータ利用中)"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% (コンピュータ・アイドル時)"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "一時停止時にアプリケーションをメモリ上に残す"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "チェックをいれると、休止中のワークユニットはメモリに残ります"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "削除"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - イベント・ログ"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "プロジェクト"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "日時"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "メッセージ"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
#, fuzzy
msgid "&Show only this project"
msgstr "このプロジェクトだけを表示"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
#, fuzzy
msgid "Copy &All"
msgstr "すべてコピー"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "全メッセージをクリップボードにコピーします"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "選択部分をコピー"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
msgstr "選択したメッセージをクリップボードにコピーします。シフトまたはコマンドキーを押しながらクリックすることで複数のメッセージを選択できます。"
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1624,25 +1624,25 @@ msgstr ""
"選択したメッセージをクリップボードにコピーします。シフトまたはコントロールキーを押しながら、メッセージをクリックすれば複数のメッセージを選択状態にできま"
"す。 "
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "閉じる(&C)"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "%s について助けを求める"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "全メッセージを表示"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "すべてのプロジェクトのメッセージを表示"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "選択したプロジェクトのメッセージだけを表示"
@@ -1690,7 +1690,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "この決定を記憶して再びこのダイアログを表示しない"
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "キャンセル(&C)"
@@ -1698,230 +1698,230 @@ msgstr "キャンセル(&C)"
msgid "Don't show this dialog again."
msgstr "再びこのダイアログを表示しない"
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "CPU向けタスクを新たに取得しない"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "プロジェクトごとのプレファレンス"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "アカウント・マネージャのウェブサイト"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
#, fuzzy
msgid "Project has no apps for "
msgstr "プロジェクトのウェブサイト"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
#, fuzzy
msgid " work fetch deferred for"
msgstr "CPU 向けの仕事を獲得する処理の保留時間"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
#, fuzzy
msgid " work fetch deferral interval"
msgstr "CPU 向けの仕事を獲得する処理の保留間隔"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "プロジェクトのプロパティ "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "一般"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "マスター URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "参加者名(User name) "
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "チームの名称"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "リソース割り当て"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "スケジューラ RPC の保留時間"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "ファイルダウンロード 待機"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "ファイルアップロード 待機"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "コンピュータ ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "CPU を集中的に使わない"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "はい"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "GUI 経由で保留状態にされている"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "いいえ"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "新しい仕事を取りに行かない"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "スケジューラへ要求中"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "計算機の所在"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "デフォルト"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "アカウント・マネージャ経由での追加"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "タスクが完了したら削除する"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "終了した"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "功績(credit)の値"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "参加者"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "計算機"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "スケジューリング"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
#, fuzzy
msgid "Scheduling priority"
msgstr "CPU 向けスケジューリングの優先度"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
# good translation not found
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Duration correction factor"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "タスクのプロパティ : "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "アプリケーション"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "ワークユニットの名前"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "名前"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "状態"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "受信時刻 "
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "報告期限"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "リソース"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "最新のチェックポイントでの CPU 時間"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU時間"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "経過時間"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "処理完了までの想定時間"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "仕事の計算完了率"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "仮想メモリの大きさ"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "ワーキング・セットの大きさ"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "ディレクトリ"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "プロセスID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local:"
@@ -2009,7 +2009,7 @@ msgstr "プロキシを必要としない場合は空欄のままにしてくだ
msgid "User Name:"
msgstr "プロキシのユーザ名:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "パスワード:"
@@ -2069,12 +2069,12 @@ msgid ""
"effect, you must restart the %s."
msgstr "%s の言語設定を切り換えました。切り換えの効果を出すためには、この %s を再起動しなければなりません。"
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - コンピュータの選択"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2083,7 +2083,7 @@ msgstr ""
"このコンピュータではすでに %s の別のインスタンスが\n"
"走っています。監視するクライアントを選択してください。"
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "計算機名 (ホスト名):"
@@ -2273,209 +2273,209 @@ msgstr "研究"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "World Community Grid で動作しているプロジェクトについての手引き"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "クライアント起動中"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "クライアントに接続処理中。"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "システムの状態を読み出しています。お待ちください..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "アプリケーション"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "バッテリで駆動中"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "コンピュータを別途利用中"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "参加者の要求"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "実行時間帯制約"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU ベンチマーク実行中"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "ディスク容量の不足 - 好みの設定(プレファレンス)を確認してください"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "コンピュータの利用者なし"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "起動の途中"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "排他的なアプリケーションを実行中"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU が別途利用中"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "ネットワーク帯域幅の制約超過"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "理由不明"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU がありません、"
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "新規"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "ダウンロード失敗"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "ダウンロード処理中"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr "(一時停止中 - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "参加者によってプロジェクト一時停止"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "参加者によってタスク一時停止"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "一時停止中 - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr "(一時停止中 - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "メモリ不足のため待機"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "共有メモリが空くまで待機中"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "優先度高で処理中"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "実行中"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr "(常時 CPU を使用するわけではありません)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "実行待機"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "開始まで待機"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
#, fuzzy
msgid " (Waiting for network access)"
msgstr "メモリ不足のため待機"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "計算エラー"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "アップロード失敗"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "アップロード処理中"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "参加者によって中止"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "プロジェクトによって中止"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "中止されました: 期限までに開始されませんでした"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "中止"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "サーバ確認済み"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "報告待機"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "エラー: 無効状態 '%d'"
@@ -2530,64 +2530,64 @@ msgstr "名前とパスワードを確認の上、もう一度試してくださ
msgid "Check the email address and password, and try again."
msgstr "電子メールアドレスとパスワードを確認の上、もう一度試してください。"
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "つづく..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "プロジェクトを選んでください"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "プロジェクトを選択するには、その名前をクリックするか、あるいは下の欄に URL を入力してください。"
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "プロジェクト"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "ウェブサイト"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
#, fuzzy
msgid "Project URL:"
msgstr "プロジェクトの &URL:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr "このプロジェクトにはあなたのコンピュータに適合する仕事がないかもしれません。 それでも追加しますか?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "すでに指定したプロジェクトは追加済みです。別のプロジェクトを選んでください。"
@@ -2595,11 +2595,11 @@ msgstr "すでに指定したプロジェクトは追加済みです。別のプ
msgid "Communicating with project."
msgstr "サーバと通信中です。"
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "このサーバには必要なファイル群が見つかりません。"
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "サーバ内部で異常が発生しました。"
@@ -2708,7 +2708,8 @@ msgid "I agree to the terms of use."
msgstr "使用条件に合意する。"
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+#, fuzzy
+msgid "I do not agree to the terms of use."
msgstr "使用条件に合意しない。"
#: UnavailablePage.cpp:183
@@ -2798,7 +2799,7 @@ msgstr "'%s' に、有効なホスト名が含まれていません。"
msgid "'%s' does not contain a valid path."
msgstr "'%s' に有効なパス名が含まれていません。 "
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "操作"
@@ -2851,7 +2852,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "お知らせは現在ありません。"
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "お知らせ"
@@ -2866,7 +2867,7 @@ msgid ""
msgstr "完了したタスクを報告し、最新の功績 (credit) とプレファレンス (好みの設定) を取得し、可能であれば更にタスクを取得します。"
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3100,135 +3101,135 @@ msgstr "空き領域 : "
msgid "used by other programs: "
msgstr "その他のプログラムによる使用領域 :"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "参加者ごとの合計功績"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "参加者の平均功績/日"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "計算機の合計功績"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "計算機の平均功績/日"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "最終更新: %.0f 日前"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "参加者の合計功績を表示"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "参加者の合計功績 (credit) を表示します"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "参加者の平均功績/日を表示"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "参加者の平均功績 (credit)/日を表示します"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "計算機の合計功績を表示"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "計算機の合計功績 (credit) を表示します"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "計算機の平均功績/日を表示"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "計算機の平均功績 (credit)/日を表示します"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< 前のプロジェクト(&P)"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "前のプロジェクトの図を表示します"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "次のプロジェクト(&N) >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "次のプロジェクトの図を表示します"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "プロジェクト一覧を隠す"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "グラフだけの表示にする"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "表示モード"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "ひとつのプロジェクト"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "選択したプロジェクトの図を表示します"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "全てのプロジェクト(分離表示)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "全てのプロジェクトを個別の図に表示します"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "全てのプロジェクト(集約表示)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "全てのプロジェクトをひとつの図に表示します"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "全てのプロジェクト(合計値)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "全てのプロジェクトの合計を表示します"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "統計情報"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "図を更新しています..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "プロジェクト一覧の表示"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "グラフ表示を小さくする"
@@ -3399,10 +3400,6 @@ msgstr "終了までの予想時間"
msgid "Deadline"
msgstr "報告期限"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "名前"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "タスク"
@@ -3544,41 +3541,41 @@ msgstr "本当にキャンセルしますか?"
msgid "Question"
msgstr "お答えください"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "詳細表示... \tCTRL+SHIFT+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "詳細版のグラフィカルインタフェースを表示する。"
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "スキン"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "デフォルト"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "プロジェクトまたは BOINC からのお知らせを見るためのウィンドーを開く"
@@ -3601,117 +3598,120 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "動作許容時間帯:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "インターネット接続を許可する時間帯:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "使用上限:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "まで(ディスク領域)"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "まで(プロセッサ)"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "バッテリー動作時に仕事をさせるか?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "アイドル時間が次の時間を超えたときのみ仕事をする:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+#, fuzzy
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "このコンピュータだけに適用するプレファレンス(好みの設定)を全てクリアして、ダイアログを終了します。"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "常時"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (常時稼動)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "本当にローカルなプレファレンス (好みの設定) を全てクリアしてもよいですか?"
@@ -3773,118 +3773,118 @@ msgstr ""
"このタスク '%s' を中止してよろしいですか?\n"
"(進捗: %.1lf%%, 状態: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "どこのプロジェクトにも参加していません。プロジェクトを追加してください。"
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "表示できる情報がありません"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "タスク"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "アクセスするタスクを選ぶ"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr ""
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "このタスクの進捗状況"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "タスクへの操作"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "このタスクに対する操作のポップアップメニューを開く"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "アプリケーション: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "アプリケーション: 表示できる情報がありません"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "表示できる情報がありません"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
#, fuzzy, c-format
msgid "Remaining (estimated): %s"
msgstr "残り時間: %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "状態: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "現在の状態を読み出し中"
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "仕事をサーバからダウンロード中"
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "処理を一時停止: バッテリー動作中"
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "処理を一時停止: 人がコンピュータを利用中"
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "処理を一時停止: 参加者の指示による一時停止"
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "処理を一時停止: 動作制限時間帯"
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "処理を一時停止: ベンチマーク走行中"
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "処理を一時停止"
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "プロジェクトのサーバに接続待機中"
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "現在の状態を読み出し中"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "処理する仕事が不足"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "コア・クライアントに接続不可"
@@ -3926,6 +3926,15 @@ msgstr "全てを表示する"
msgid "Quit %s"
msgstr "%s を終了する"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "使用条件に合意しない。"
+
+#~ msgid "Workunit name"
+#~ msgstr "ワークユニットの名前"
+
+#~ msgid "invalid float"
+#~ msgstr "浮動小数点形式の数値が正しくありません"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "より使いやすい詳細グラフィカルインタフェースを表示する。"
diff --git a/locale/ja/BOINC-Project-Generic.po b/locale/ja/BOINC-Project-Generic.po
index 2202c9d..7378ca2 100644
--- a/locale/ja/BOINC-Project-Generic.po
+++ b/locale/ja/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-03-16 11:43+0200\n"
"Last-Translator: Kai <www.carrotsoft at gmail.com>\n"
"Language-Team: \n"
@@ -192,7 +192,7 @@ msgstr "高度な検索"
# #######################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "非公開メッセージ"
@@ -204,8 +204,8 @@ msgstr "非公開メッセージ"
msgid "Questions and Answers"
msgstr "質問と答(Q&A)"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -283,7 +283,7 @@ msgstr "未読"
msgid "Message %1"
msgstr "メッセージ"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "非公開"
@@ -501,7 +501,7 @@ msgstr "スレッド"
# #######################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "投稿"
@@ -510,7 +510,7 @@ msgstr "投稿"
msgid "Views"
msgstr "閲覧数"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "最新の投稿"
@@ -553,7 +553,7 @@ msgid "Home"
msgstr "自宅"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "勤務場所"
@@ -619,9 +619,9 @@ msgid "Created"
msgstr "作成日時"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -800,7 +800,7 @@ msgstr "最後の接続日時"
msgid "Computer info"
msgstr "コンピュータの情報"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "順位"
@@ -809,9 +809,9 @@ msgstr "順位"
msgid "Avg. credit"
msgstr "平均功績値"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -899,8 +899,8 @@ msgstr "過去30日の間に活動のあったコンピュータのみ"
msgid "Computer ID"
msgstr "コンピュータ ID "
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -936,7 +936,7 @@ msgstr "受信箱"
msgid "Write"
msgstr "作成"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "非公開メッセージを送信する"
@@ -1680,7 +1680,7 @@ msgstr "報告日時 <br />または期限"
msgid "explain"
msgstr "説明"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "状態"
@@ -1774,9 +1774,9 @@ msgstr "キーワード"
msgid "Find teams with these words in their names or descriptions"
msgstr "指定する語句がその名称または説明に含まれているチームを探します"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1784,7 +1784,7 @@ msgstr "指定する語句がその名称または説明に含まれているチ
msgid "Country"
msgstr "国名"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "チームの種類"
@@ -1812,8 +1812,8 @@ msgstr "あなたが要求中です"
msgid "founder response deadline is %1"
msgstr "創設者の応答期限は、%1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "なし"
@@ -1837,27 +1837,27 @@ msgstr "説明"
msgid "Web site"
msgstr "ウェブサイト"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "プロジェクト横断の統計"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "種類"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "掲示板"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "スレッド"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "このチームに参加する"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1865,79 +1865,79 @@ msgstr ""
"注意:あなたがプロジェクト・プレファレンスの中で 「Eメイルを送っても良い」という意味の項目を選択した状態でチームへ参加すると、 "
"そのチームの創設者はあなたのメイルアドレスを知ることになります。"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "新しいメンバーを受け入れていません"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "創設者権限の移譲が要求されています"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "%1 までに応答してください"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "チーム創設者の変更"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "メンバー"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "創設者"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "管理者"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "チームに昨日参加したメンバー"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "メンバーの総数"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "表示する"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "活動中のメンバー数"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "功績(credit)を獲得済みのメンバーの数"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "管理者"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "前の%1項目"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "次の%1項目"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "該当するチームはありません。"
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "この操作には創設者の権限が必要です。"
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "この操作にはチーム管理者の権限が必要です"
@@ -1949,7 +1949,7 @@ msgstr ""
"<警告>: これは BOINCワイドのチームです。ここで変更を行っても、 そのうち上書きされてしまいます。代わりに %1 BOINC ワイドのチーム %"
"2を編集してください。"
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1957,47 +1957,47 @@ msgstr ""
"%1プライバシに関連する注意%2: チームを作成すると、あなたのプロジェクト・プレファレンス(資源割り当て、 "
"グラフィクスについてのプレファレンス)が、公開されます。"
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "チーム名称、テキスト版"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "HTMLタグを使わないでください。"
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "チーム名称、HTML版"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "%1一部の HTML タグ%2は使えます。"
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "HTML の使い方をご存知でなければ、この欄は空白にしてください。"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "チームのウェブページのURL(もしあれば)"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "\"http://\" は含めないでください。"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "この URLへ は、このサイト内のチームのページからリンクが張られます。"
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "チームの説明"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "新メンバーを受け入れますか?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "参加者の自己紹介"
@@ -2030,7 +2030,7 @@ msgid "Computers on this account"
msgstr "このアカウントのコンピュータ"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "表示"
@@ -2047,8 +2047,8 @@ msgstr "プロジェクト横断の統計"
msgid "Account"
msgstr "アカウント"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "チーム"
@@ -2077,7 +2077,7 @@ msgstr "アカウント情報"
msgid "Email address"
msgstr "Eメイルアドレス"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2085,7 +2085,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "郵便番号"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 登録日"
@@ -2105,7 +2105,7 @@ msgstr "パスワード"
msgid "other account info"
msgstr "その他のアカウント情報"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "参加者のID(User ID)"
@@ -2151,96 +2151,96 @@ msgstr "%1 についての好みの設定(プレファレンス)"
msgid "Community"
msgstr "コミュニティ"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "削除"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "作成"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "自己紹介"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 回投稿"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "通知"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "チームを離脱する"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "管理作業をする"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(創設者を変更する要求は保留中)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "所属チーム"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "チームを探す"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "設立したチーム(メンバーではない)"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "友人を探す"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "友人"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "コンピュータ"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "寄付の実績"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "連絡"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "この人物は友人です"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "友人関係を取り消す"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "要求は保留中"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "友人として追加"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2317,7 +2317,7 @@ msgstr "データベースに接続できません - 後ほど試してくださ
msgid "Unable to select database - please try again later"
msgstr "データベースの選択ができませんでした(mysql_select_dbに失敗) - 時間を置いてからまた試してください。"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "現在のコンピュータからログインしたままにする"
@@ -2526,7 +2526,7 @@ msgstr ""
msgid "User of the day"
msgstr "毎日の参加者紹介"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "サーバー側の状態"
@@ -5499,137 +5499,137 @@ msgstr "停止状態"
msgid "Disabled"
msgstr "指示により停止"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "プロジェクトの状態"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "サーバソフトウェアの版: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "プログラム"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "計算機"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "ウェブページへのデータ自動反映"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "アップロード/ダウンロード用サーバー"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "スケジューラー"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "実行中:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "プログラムは正常に動作しています"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "停止状態:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "プログラムが異常終了したか、あるいは、このプロジェクトが止まっています"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "指示により停止:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "プログラムは停止させられています"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "計算の進捗状況"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "データベース サーバにアクセスできません"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "送信可能なタスク"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "タスク 実行中"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "検証待ち状態のワークユニット"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "取り込み待ち状態のワークユニット"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "削除前のワークユニット"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "削除前のタスク"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "トランジショナーの残務(時間)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "参加者"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "最近、功績値(クレジット)を獲得した人数"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "クレジット得たことのある人数"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "24時間内に参加した人数"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "現時点の GigaFLOPs"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "アプリケーションごとのタスク統計"
# #######################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "アプリケーション"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "未送出"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "計算中"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "最近100リザルトの平均計算所要時間/H、(最小値 - 最大値)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "24時間内に計算結果を返した参加者数"
@@ -5883,6 +5883,10 @@ msgstr "新しい創設者?"
msgid "Change founder"
msgstr "創設者の変更"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "チームの名前を決めます。その名前は空白であってはなりません。"
diff --git a/locale/ja/BOINC-Setup.mo b/locale/ja/BOINC-Setup.mo
index bae9ba8..29700be 100644
Binary files a/locale/ja/BOINC-Setup.mo and b/locale/ja/BOINC-Setup.mo differ
diff --git a/locale/ja/BOINC-Setup.po b/locale/ja/BOINC-Setup.po
index 3b6bd50..6b28e38 100644
--- a/locale/ja/BOINC-Setup.po
+++ b/locale/ja/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/ja/BOINC-Web.mo b/locale/ja/BOINC-Web.mo
index 765ddb2..80e3103 100644
Binary files a/locale/ja/BOINC-Web.mo and b/locale/ja/BOINC-Web.mo differ
diff --git a/locale/ja/BOINC-Web.po b/locale/ja/BOINC-Web.po
index aae9f0d..9cd284c 100644
--- a/locale/ja/BOINC-Web.po
+++ b/locale/ja/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-03-16 11:43+0200\n"
"Last-Translator: Kai <www.carrotsoft at gmail.com>\n"
"Language-Team: Japanese <nobody at example.com>\n"
@@ -424,16 +424,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "認知科学と人工知能"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "非公開"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "人工知能"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -443,19 +443,19 @@ msgstr ""
"FreeHALで使うセマンティックネットを構文解析し変換すること。FreeHALは人工知能のひとつであり、セマンティックネットや語幹処理機能、音声データ"
"ベースの一部、品詞タグ付け機能を使って人間の会話を模擬しようとするものです。"
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "生物学と医療"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -464,15 +464,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "カールスルーエ大学(ドイツ)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "蛋白質構造の予測"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -484,15 +484,15 @@ msgstr ""
"蛋白質どうしの間で信号処理が起こる場合の機構を理解したり、 蛋白質の誤動作や凝集に関係する疾病を理解する、あるいは、 "
"生物学的に重要な蛋白質の三次元構造を基礎に新薬を開発します。"
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "デラウェア大学"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "蛋白質-リガンド間の相互作用の研究"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -502,15 +502,15 @@ msgstr ""
"Docking at Home は、生物化学と計算機科学の両方の目標を持つプロジェクトです。 "
"蛋白質とリガンド間の相互作用の原子的な詳細知識を深めることを目標とすると同時に、 その中で、革新的な薬品発見のための知見を探していきます。"
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "バルセロナ生体医学研究パーク(PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "蛋白質の分子シミュレーション"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -521,15 +521,15 @@ msgstr ""
")を使うことにより、GPUGrid.netは、革新的な計算シナリオを開拓します。 新しい生体医学的応用が突然可能になり、 "
"生体医学を研究するにあたり計算生物学に新しい役割を与えます。"
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "遺伝的連鎖解析"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -538,16 +538,16 @@ msgstr ""
"Superlink at Technion は世界中の遺伝学者に、ある種の代謝異常や高血圧、ガン、 "
"統合失調症など起こして疾病を誘発する遺伝子を探しやすくします。"
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "メリーランド大学 バイオインフォマティックスと計算生物学のためのセンター"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "生命科学の研究"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -557,15 +557,15 @@ msgstr ""
"Lattice プロジェクトは メリーランド大学の科学者の種々の研究に計算能力を、 提供しています。 たとえば、DNA配列データを基礎にした進化論的関係"
"の研究、バクテリア、プラスミド、およびウィルスの蛋白質の配列の研究、そして、自然保護区における生物の多様性の研究などです。 "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "The Swiss Tropical Institute"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "疫学"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -580,15 +580,15 @@ msgstr ""
"これらのモデリングの手法は非常に大きな計算能力を必要とします。 多くの人口を対象にシミュレーションが必要ですし、 "
"この病気の拡散に影響を与える生物学的因子と社会学的因子が、 数多くのパラメタに関係しているからです。"
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "ワシントン大学"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "生物学"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -602,11 +602,11 @@ msgstr ""
"を走らせると、私たちの研究を加速し拡大してくれます。 それはあなたの助力なしにはきっと達成できないものです。 "
"さらに、HIVや、マラリア、癌、そしてアルツハイマー病のような疾病に対抗する、 新しい蛋白質を設計することにも力を貸していただけることになります。 "
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "ウィーン大学"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -615,19 +615,19 @@ msgstr ""
"蛋白質の相互類似性を計算するプロジェクトです。 SIMAP は計算結果を公開データベースとして提供します。 "
"このデータベースは多くの生命科学研究のプロジェクトで重要な役割を果たします。"
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "地球科学"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "オックスフォード大学"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "気候の研究"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -644,17 +644,25 @@ msgstr ""
"知識を豊かにします。また、二酸化炭素や硫黄循環での変化についても同様です。 このようにして、次の世紀がどのような気候変化をするか、 "
"いくつものシナリオを広く探求できるようになります。 "
-# 75%
-#: projects.inc:196
-#, fuzzy
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "天文学、物理学、化学"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "天文学"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -664,15 +672,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "University of Texas at Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "化学"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -690,12 +698,12 @@ msgstr ""
"間が掛かってしまうでしょう。われわれの研究グループは系の長期にわたる振る舞いを計算することに興味があります。"
# 95%
-#: projects.inc:240
+#: projects.inc:262
#, fuzzy
msgid "University of Illinois at Urbana-Champaign"
msgstr "University of Illinois at Urbana-Chamapign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -704,11 +712,11 @@ msgstr ""
"Cosmology at Home の目標は、われわれの宇宙を記述する最も良いモデルを探すこと、および、天文学的な粒子物理の入手可能なデータと整合性のあるモデ"
"ルがどの範囲であるのかを調べることです。"
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Rensselaer Polytechnic Institute"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -717,11 +725,11 @@ msgstr ""
"Milkyway at Home の目標は、天の川銀河の高精度な三次元モデルを Sloan Digital Survey "
"で収集したデータを使って作成することです。"
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "ライデン大学、オランダ"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -735,15 +743,15 @@ msgstr ""
"ジョブキューをおのおの持っています。このようにして、学生たちはこのグリッドを使い、実際にシミュレーションをすることにより、液体アルゴンを模擬してみたり、"
"理想気体の法則の有効性をテストしたりしてきました。"
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "ウィスコンシン大学 - ミルウォーキー、マックスプランク研究所"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "宇宙物理学"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -755,15 +763,15 @@ msgstr ""
"という重力波検出器が出力するデータと、Arecibo 電波観測所からのデータを使います。 Einstein at Home は、世界物理年 2005 "
"プロジェクトの一つで、 米国物理学会(APS)を始めとする多くの国際組織によって支援されています。"
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN(欧州原子核研究機構)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "物理学"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -775,22 +783,22 @@ msgstr ""
"は原子核物理研究のためのヨーロッパの組織で、世界最大の素粒子科学の研究所です。 LHC は素粒子の性質を研究する装置として今までで最強のものです。 "
"LHC at home は LHC とその検出器の設計を改良するためのシミュレーションを実行します。 "
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "カリフォルニア大学バークレー校"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "宇宙物理、宇宙生物学"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -803,15 +811,15 @@ msgstr ""
"電波望遠鏡を使って宇宙からの狭帯域の電波信号に耳を傾けます。 探している信号は自然に発生すると知られている種類のものではありません。 "
"したがって、そのような信号を検出すれば、地球外生命が持つ技術の証拠となります。"
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Bielefeld University of Applied Sciences"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "化学工業とナノテクノロジー"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -821,19 +829,19 @@ msgstr ""
"分子磁石とナノスケール磁化の制御の研究。これらの磁化した分子は、小さい磁気スイッチを開発したり、医学応用(たとえば局所腫瘍化学療法)とバイオテクノロジー"
"への応用に使えるかもしれません。"
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "複数の応用"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "中国科学院(Chinese Academy of Sciences)"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "物理学、生命化学、ほか"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -842,11 +850,11 @@ msgstr ""
"CAS at home "
"の目的は、中国の科学者たちが自分らの研究に関するボランティアコンピューティングとボランティア考察活動へ向けて、鼓舞・支援されることです。"
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "数学、物理学、進化学"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -855,15 +863,15 @@ msgstr ""
"と数種の既存ボランティアプロジェクトの間に入るアダプタです。その既存プロジェクトとは、ECM、Muon、Evolution at home、および "
"distributed.net です。"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (ハンガリー)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "European research projects"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -874,27 +882,27 @@ msgstr ""
"、ボランティアの方々へそれらのワークユニットを中継して計算してもらうことにより、ボランティア・コンピューティングをサービスグリッドのネットワークに統合し"
"ています。当プロジェクトが対応している科学プロジェクトは、数学、物理学、生物学などの分野のものがあります。"
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "スペインの大学と研究所群"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "スペインにおける種々の研究プロジェクト"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "物理学、材料科学および生物医学における研究"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -902,51 +910,51 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Mathematics, computing, and games"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "暗号学"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
"本物のEnigmaメッセージ3つの解読を試みます。これらの信号文は1942年に北大西洋で傍受されましたが、まだ解読されていないと信じられています。"
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "数学"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "数学で未解決の予想として有名は、コラッツの予想の研究"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "カリフォルニア州立大学フラトン校"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "大きな整数の因数分解"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -960,7 +968,7 @@ msgstr ""
"とがあるでしょう。たとえば、15 = 3 * 5 あるいは、35 = 5 * 7 のように。NFS at Home "
"はその経験の延長上にあるものです。ただし、問題となる整数値は何百桁もの長さの整数ですが。"
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -968,11 +976,11 @@ msgstr ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(リトアニア; Lithuania)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "ソフトウェアのテスト"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -982,11 +990,11 @@ msgstr ""
"このプロジェクトの目的は、 Vilnius Gediminas Technical University (VGTU)及びその他リトアニアの学術組織へ、"
"パワフルな分散コンピューティング・プラットフォームを提供することです。現在の応用分野には、モンテカルロ法によるソフトウェア試験の研究があります。"
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "ライデン大学数学研究所とKennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1002,23 +1010,23 @@ msgstr ""
") ) > h となるような a, b, c の組はたかだか有限個しかないという予想です。 "
"これが正しいと証明されると、まだ解決をみていない多くの数学の問題に答えをここから直接に与えることができます。"
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Hochschule RheinMain University of Applied Sciences"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr "素数判定法に関する2つの予想について反例を探します。"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1033,6 +1041,11 @@ msgstr ""
msgid "News is available as an %sRSS feed%s"
msgstr ""
+# 75%
+#, fuzzy
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "天文学、物理学、化学"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s 版 %s 用 (%s MB)"
diff --git a/locale/ko/BOINC-Android.po b/locale/ko/BOINC-Android.po
index 7f5c095..c4e95f2 100644
--- a/locale/ko/BOINC-Android.po
+++ b/locale/ko/BOINC-Android.po
@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: BOINC 7.2.x\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-12-09 05:20+0000\n"
-"Last-Translator: Xnuk <limm1127 at gmail.com>\n"
+"PO-Revision-Date: 2014-01-31 22:48+0000\n"
+"Last-Translator: Kangsan Lee <treppolse at gmail.com>\n"
"Language-Team: SETIKAH at HOME\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
-"X-POOTLE-MTIME: 1386566425.0\n"
+"X-POOTLE-MTIME: 1391208487.0\n"
#. app global
msgctxt "app_name"
@@ -735,7 +735,7 @@ msgstr "프로젝트 재설정"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr "다음 프로젝트가 재설정됩니다 괘찮습니까: "
+msgstr "다음 프로젝트가 재설정됩니다 괜찮습니까: "
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
diff --git a/locale/ko/BOINC-Manager.mo b/locale/ko/BOINC-Manager.mo
index ebea445..489ef48 100644
Binary files a/locale/ko/BOINC-Manager.mo and b/locale/ko/BOINC-Manager.mo differ
diff --git a/locale/ko/BOINC-Manager.po b/locale/ko/BOINC-Manager.po
index a318982..8d6b1c2 100644
--- a/locale/ko/BOINC-Manager.po
+++ b/locale/ko/BOINC-Manager.po
@@ -1,29 +1,21 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 7.2.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-12-09 05:24+0000\n"
-"Last-Translator: Kangsan Lee <treppolse at gmail.com>\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-07 17:42+0900\n"
+"Last-Translator: Lee Kangsan <treppolse at gmail.com>\n"
"Language-Team: SETIKAH at KOREA\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.5.0\n"
+"X-Generator: Poedit 1.6.3\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
-"X-Poedit-SearchPath-1: clientgui/msw\n"
-"X-Poedit-SearchPath-2: clientgui/gtk\n"
-"X-Poedit-SearchPath-3: clientgui/mac\n"
"X-Poedit-SearchPath-0: clientgui\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1386566695.0\n"
#: AccountInfoPage.cpp:387
#, c-format
@@ -93,7 +85,7 @@ msgstr "비밀번호 확인:"
#: AccountInfoPage.cpp:453
#, c-format
msgid "Are you already running %s?"
-msgstr "이미 %s를(을) 사용하고 있습니까?"
+msgstr "여러분은 이미 %s를(을) 실행하고 있습니까?"
#: AccountInfoPage.cpp:482
msgid "&Username:"
@@ -124,7 +116,7 @@ msgstr ""
#: AccountInfoPage.cpp:532
msgid "Account manager web site"
-msgstr "계정 관리자 웹사이트"
+msgstr "계정 관리자 웹 사이트"
#: AccountInfoPage.cpp:574 WelcomePage.cpp:348
msgid "Add project"
@@ -140,21 +132,22 @@ msgstr "계정 관리자 사용"
#: AccountInfoPage.cpp:585
msgid "Please enter a user name."
-msgstr "사용자 이름을 입력하십시오."
+msgstr "사용자 이름을 입력해 주세요."
#: AccountInfoPage.cpp:587
msgid "Please enter an email address."
-msgstr "이메일 주소를 입력하십시오."
+msgstr "email 주소를 입력해 주세요."
#: AccountInfoPage.cpp:597
#, c-format
msgid "Please enter a password of at least %d characters."
-msgstr "최소 %d자로 비밀번호를 입력하세요."
+msgstr "최소한 %d 글자로 된 비밀번호를 입력해 주세요."
#: AccountInfoPage.cpp:607
msgid ""
"The password and confirmation password do not match. Please type them again."
-msgstr "처음 비밀번호와 재입력한 비밀번호가 일치하지 않습니다. 다시 입력해주세요."
+msgstr ""
+"처음 비밀번호와 재입력한 비밀번호가 일치하지 않습니다. 다시 입력해주세요."
#: AccountManagerInfoPage.cpp:272
msgid "Choose an account manager"
@@ -209,336 +202,337 @@ msgstr "접속됨"
msgid "Disconnected"
msgstr "접속해제됨"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "%s 창 닫기"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "창 닫기(&C)"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "%s 종료(&E) "
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "공지 사항(&N)\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "공지 사항을 보여줍니다"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "프로젝트(&P)\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "프로젝트를 보여줍니다"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "태스크(&T)\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "태스크 현황을 보여줍니다"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "전송(&F)\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "전송 현황을 보여줍니다"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "통계(&S)\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "통계를 보여줍니다"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "디스크 사용량(&D)\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "디스크 사용량을 보여줍니다"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "간단히 보기(&V)...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "간단한 형태의 그래픽 인터페이스로 표시합니다."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "프로젝트 혹은 계정 관리자 추가(&A)..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
-msgstr "많은 과학 분야의 30개 이상 프로젝트중에서 하나 혹은 전부 참여하는 기여자"
+msgstr ""
+"많은 과학 분야의 30개 이상 프로젝트중에서 하나 혹은 전부 참여하는 기여자"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "%s와 동기화(&S)"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "%s 로부터 현재 설정을 가져옵니다"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "프로젝트 추가(&A)..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "프로젝트를 추가합니다"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "%s 사용 중지(&S)..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "계정 관리자 제어를 클라이언트에서 제거합니다."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "선택 사항(&O)..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "화면 옵션과 프록시 환경을 설정합니다"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "연산 환경 설정(&P)..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "연산 환경을 설정합니다"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "항상 실행(&R)"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "설정을 무시하고 작업을 허용합니다"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "설정한 대로 실행(&P)"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "설정에 따라서 작업을 허용합니다"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "일시 정지(&S)"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "설정을 무시하고 작업을 정지시킵니다"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "항상 GPU 사용"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "설정을 무시하고 GPU 작업을 허용합니다"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "설정한 대로 GPU 사용"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "설정에 따라서 GPU 작업을 허용합니다"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "GPU 일시 정지"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "설정을 무시하고 GPU 작업을 정지시킵니다"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "네트워크 활동 항상 가능"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "설정을 무시하고 네트워크 활동을 허용합니다"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "설정한 대로 네트워크 활동"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "설정에 따라서 네트워크 활동을 허용합니다"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "네트워크 활동 일시 정지됨"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "BOINC 네트워크 활동을 정지시킵니다"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "%s(이)가 실행중인 다른 컴퓨터로 접속"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "컴퓨터 선택(&S)..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "연결된 클라이언트 종료..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "현재 연결된 클라이언트를 종료합니다"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "CPU 벤치마크 실행(&B)"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "BOINC CPU 벤치마크를 실행합니다"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "네트워크 통신 실행"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "유보된 모든 네트워크 통신을 실행합니다"
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "설정 파일 읽기"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr "cc_config.xml 및 app_config.xml로 부터 설정 정보를 읽어옵니다"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "로컬 환경설정 파일 읽기"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "global_prefs_override.xml로 부터 환경 설정을 읽어옵니다."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "별도의 %s 객체 실행..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "별도로 %s 실행"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "이벤트 기록...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "진단 메세지를 보여줍니다."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s 도움말(&H)"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "%s에 대한 정보 보여주기"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s 도움말"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "%s에 대한 정보 보여주기"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr "%s 웹 사이트(&W)"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "BOINC와 %s에 대한 정보 보여주기"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "%s 정보(&A)..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "라이센스와 저작권 정보"
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "파일(&F)"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "보기(&V)"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "도구(&T)"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "활동(&A)"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "고급(&A)"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "도움말(&H)"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - %s 사용 중지"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -553,12 +547,12 @@ msgstr ""
"\n"
"정말로 %s 사용을 중지하겠습니까?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - 현재 클라이언트 종료..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -567,27 +561,27 @@ msgstr ""
"%s에 현재 연결된 클라이언트는 종료될 것이며,\n"
"또다른 호스트로 연결해서 명령을 내릴 수 있습니다."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s는 성공적으로 %s에 추가되었습니다"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "%s에 접속 중"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "%s (%s)에 접속됨"
@@ -624,26 +618,26 @@ msgstr ""
"\n"
"프로젝트 웹 사이트를 방문해서 그 곳의 지시대로 따라주십시오."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "BOINC 클라이언트와 통신하고 있습니다. 잠시 기다려 주세요..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "%s 나가기(&Q)"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "%s 종료(&X) "
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - 통신 중"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "취소"
@@ -798,7 +792,7 @@ msgstr "%s가 성공적으로 인터넷 연결을 종료했습니다."
msgid "%s failed to disconnected from the Internet."
msgstr "%s가 인터넷 연결 종료에 실패했습니다."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -819,7 +813,7 @@ msgstr ""
" - 관리자에게 문의해서 여러분을 'boinc_master' 사용자 그룹에\n"
" 추가하십시오."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -828,16 +822,16 @@ msgstr ""
"%s 소유권이나 권한이 적절히 설정되지 않았습니다. %s를 재설치해주세요.\n"
"(오류 code %d)"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " 의"
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -845,67 +839,67 @@ msgstr ""
"BOINC를 정상적으로 실행하려면 재부팅이 필요합니다.\n"
"컴퓨터를 다시 시작하고 재시도해 주세요."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC 관리자"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC 관리자를 운영 체제에서 자동적으로 시작시켰습니다"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "BOINC는 시스템 트레이 상태로 시작됨"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "실행 가능한 BOINC 클라이언트를 포함한 디렉토리"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC 데이터 디렉토리"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "호스트 이름 혹은 IP 주소"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC 포트 번호"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "비밀번호"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "BOINC는 해당 인수를 가지고 시작됨"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "BOINC 보안 사용자 및 권한 비활성화"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "스킨 관리자 오류 메세지 활성화를 위해 스킨 디버깅 모드 설정"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "BOINC 관리자 다중 실행이 허용됨"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "사용되지 않음: XCode 4.2 버그 회피책"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(자동 감지)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(알 수 없음)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(사용자 지정)"
@@ -932,7 +926,7 @@ msgid "E&xit"
msgstr "종료(&X)"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "다시 시작"
@@ -1004,7 +998,7 @@ msgid ""
"\n"
"Click Finish to close."
msgstr ""
-"나중에 다시 시도하세요.\n"
+"다음에 다시 시도하세요.\n"
"\n"
"닫으려면 완료를 클릭하세요."
@@ -1090,64 +1084,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "네트워크 컴퓨팅을 위한 Berkeley 개방형 하부구조체"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "확인"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "invalid float"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "유효하지 않은 숫자"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "잘못된 시간, 올바른 형식은 HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "잘못된 시간 간격, 올바른 형식은 HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "잘못된 입력값 발견"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "인증 오류"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "응용 프로그램이 추가됨"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s'은(는) 실행 가능한 응용 프로그램이 아닙니다."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "독점 프로그램 추가"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "추가할 응용 프로그램명?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "독점 프로그램 추가"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "응용 프로그램 이름은 반드시 '%s'로 끝나야 합니다"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s'는 이미 목록에 있습니다."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1155,11 +1149,11 @@ msgstr ""
"정말로 모든 로컬 환경설정을 지우겠습니까?\n"
"(독점 프로그램에는 영향이 없습니다.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "확인됨"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - 환경 설정"
@@ -1174,11 +1168,11 @@ msgstr ""
"확인을 눌러서 설정값을 저장하세요.\n"
"지우기를 눌러서 웹 기반 설정으로 복원할 수 있습니다.(독점 프로그램 제외)"
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "지우기"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "모든 로컬 환경 설정이 지워지며 다이얼로그를 닫습니다"
@@ -1198,7 +1192,7 @@ msgstr "디스크와 메모리 사용량"
msgid "exclusive applications"
msgstr "독점 프로그램"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "확인"
@@ -1211,7 +1205,7 @@ msgid "close the dialog without saving"
msgstr "저장하지 않고 창을 닫습니다"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "도움말"
@@ -1261,7 +1255,7 @@ msgid ""
msgstr "이 시간(분) 이후로 컴퓨터를 사용하지 않을 때 작업을 수행합니다"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "분"
@@ -1277,7 +1271,7 @@ msgstr "프로세서 사용량이 설정량 초과시 작업 일시 중지"
msgid "percent (0 means no restriction)"
msgstr "퍼센트 (0은 제한 없음)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "매일 이 시간 사이"
@@ -1285,8 +1279,8 @@ msgstr "매일 이 시간 사이"
msgid "start work at this time"
msgstr "이 시간에 작업을 시작"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "부터"
@@ -1294,43 +1288,43 @@ msgstr "부터"
msgid "stop work at this time"
msgstr "이 시간에 작업을 중지"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(똑같으면 제한이 없음)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "일주일 중 작업할 날:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "일주일 중 작업 일과 시간을 체크"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "월요일"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "화요일"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "수요일"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "목요일"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "금요일"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "토요일"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "일요일"
@@ -1351,9 +1345,9 @@ msgstr "다중 프로세서 시스템일 때 최대 사용량"
msgid "% of the processors (0 means ignore this setting)"
msgstr "프로세서 사용량 %(0일 경우 이 설정을 무시합니다)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "최대 사용량"
@@ -1362,82 +1356,82 @@ msgstr "최대 사용량"
msgid "% CPU time"
msgstr "% CPU 시간"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "일반적인 선택 사항"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "최대 다운로드 속도"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KB/s."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "최대 업로드 속도"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "최대 전송량"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MB"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "매"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "일"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "최소 작업 저장량"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "지정한 날짜동안 충분한 작업을 수행하고 유지하도록 합니다"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "최고 추가 작업 저장량"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "추가로 지정한 날짜동안 충분한 태스크 이상을 유지합니다"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "이미지 파일 검증 건너뛰기"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "인터넷 제공자가 이미지 파일을 수정하면 체크하세요"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "접속 옵션"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "인터넷 접속 전에 확인"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr "체크되면, 인터넷 접속 시도 전에 확인 다이얼로그가 표시됩니다"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "완료되면 접속 끊기"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1445,180 +1439,183 @@ msgstr ""
"체크되면, BOINC는 완료시 네트워크 사용을 중단합니다\n"
"(전화 접속에만 해당됨)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "네트워크 사용 허가"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "네트워크 사용 시작 시간"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "네트워크 사용 중단 시간"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "디스크 사용량"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "BOINC가 사용하는 최대 디스크 용량 (단위 GB)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "GB"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "최소한"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
-msgstr "BOINC는 최소한 이 만큼의 디스크 용량을 빈 공간으로 남겨둡니다 (단위 GB)"
+msgstr ""
+"BOINC는 최소한 이 만큼의 디스크 용량을 빈 공간으로 남겨둡니다 (단위 GB)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "GB를 남겨둡니다"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC는 전체 디스크 중 최대 해당 퍼센트만큼 사용합니다"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% (전체 디스크 공간 중)"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "태스크 기록지점을 지정된 시간마다 기록"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "초"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% of page file (스왑 영역)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "메모리 사용량"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "%를 컴퓨터 사용 시 씁니다"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "%를 컴퓨터가 대기 중일때 씁니다"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "일시 정지시 응용 프로그램을 메모리에서 비웁니다"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "체크되면 일시 정지시 작업 유닛을 메모리에서 비웁니다"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
-msgstr "이 응용 프로그램이 실행 중인 동안에 프로세서와 네트워크 사용을 일시중지:"
+msgstr ""
+"이 응용 프로그램이 실행 중인 동안에 프로세서와 네트워크 사용을 일시중지:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "추가..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "응용 프로그램을 이 목록에 추가"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "제거"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "이 목록에서 응용 프로그램을 제거"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "고급 옵션은 다음을 따릅니다"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - 이벤트 로그"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "프로젝트"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "시간"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "메시지"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "이 프로젝트만 보여주기(&S)"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "모두 복사(&A)"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "모든 메시지를 클립보드에 복사"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "선택한 항목 복사(&S)"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
msgstr ""
-"선택한 메세지를 클립보드로 복사합니다. 메세지를 클릭하는 동안 shift 키나 control 키를 눌러 여러 메세지를 선택할 수 있습니다"
+"선택한 메세지를 클립보드로 복사합니다. 메세지를 클릭하는 동안 shift 키나 "
+"control 키를 눌러 여러 메세지를 선택할 수 있습니다"
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
msgstr ""
-"클립보드에 선택한 메시지를 복사합니다. 메시지를 클릭하는 동안 Shift나 Control 키를 누른 상태에서 여러 메시지를 선택할 수 "
-"있습니다."
+"클립보드에 선택한 메시지를 복사합니다. 메시지를 클릭하는 동안 Shift나 "
+"Control 키를 누른 상태에서 여러 메시지를 선택할 수 있습니다."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "닫기"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "%s 도움말을 얻으세요"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "모든 메시지 보여주기(&m)"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "모든 프로젝트의 메세지를 보여줍니다."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "선택한 프로젝의 메세지만 보여줍니다."
@@ -1671,7 +1668,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "이 설정을 기억하고 이 창을 다시 보여주지 않습니다."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "취소(&C)"
@@ -1679,223 +1676,223 @@ msgstr "취소(&C)"
msgid "Don't show this dialog again."
msgstr "이 창을 다시 보여주지 않습니다."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "태스크를 반입 안 함: "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "프로젝트 환경 설정"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "계정 관리자 환경설정"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "프로젝트 앱이 없음: "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "클라이언트 설정 제외: "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " 작업 반입을 연기시킴: "
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " 작업 반입 연기 간격"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "프로젝트 속성"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "일반"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "마스터 URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "사용자 이름"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "팀 이름"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "자원 공유"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "스케줄러 RPC 지연"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "파일 다운로드 지연"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "파일 업로드 지연"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "컴퓨터 ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "CPU 비 집약적"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "예"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "GUI를 통해서 일시정지"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "아니오"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "더 이상 추가 작업을 요청하지 않습니다"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "현재 진행중인 스케쥴러 부르기"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Trickle up 메세지가 유보됨"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "호스트 위치"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "기본값 설정"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "계정 관리자를 통해 추가됨"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "태스크 완료시 제거"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "끝남"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "크레딧"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "사용자"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "호스트"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "스케쥴 조정"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "스케줄링 우선 순위"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "지연 정정 값"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "태스크 속성"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "어플리케이션"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "작업 유닛 이름"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "이름"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "상태"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "수신 시각"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "리포트 마감 시각"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "자원"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "추정된 연산 크기"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "마지막 기록 지점의 CPU 시간"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU 시간"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "경과 시간"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "추정된 남은 시간"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "분석 완료치"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "가상 메모리 크기"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "설정한 크기로 작업 중"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "디렉토리"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "프로세스 ID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "로컬: "
@@ -1983,7 +1980,7 @@ msgstr "필요없으면 빈 칸으로 남겨두세요"
msgid "User Name:"
msgstr "사용자 이름:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "암호:"
@@ -2038,14 +2035,16 @@ msgstr "%s - 언어 선택"
msgid ""
"The %s's language has been changed. In order for this change to take "
"effect, you must restart the %s."
-msgstr "%s 언어가 변경되었습니다. 해당 변경 사항을 적용하기 위해서는 %s을(를) 재시작해야 됩니다."
+msgstr ""
+"%s 언어가 변경되었습니다. 해당 변경 사항을 적용하기 위해서는 %s을(를) 재시작"
+"해야 됩니다."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - 컴퓨터 선택"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2054,7 +2053,7 @@ msgstr ""
"다른 %s 객체가 이미 이 컴퓨터에서 \n"
"실행중입니다. 모니터에서 클라이언트를 선택해 주세요."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "호스트 이름:"
@@ -2130,7 +2129,8 @@ msgstr "Einstein at Home 화면보호기에 대해서 보다 자세한 정보를
#: Localization.cpp:71
msgid ""
"Correspond with admins and other users on the Einstein at Home message boards"
-msgstr "Einstein at Home 게시판에서 운영자 및 다른 사용자와 이야기를 주고 받으세요"
+msgstr ""
+"Einstein at Home 게시판에서 운영자 및 다른 사용자와 이야기를 주고 받으세요"
#: Localization.cpp:73
msgid "Einstein status"
@@ -2244,205 +2244,206 @@ msgstr "연구"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "World Community Grid가 주관하는 프로젝트를 알아봅니다"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "클라이언트 시작 중"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "클라이언트에 연결."
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "시스템 상태를 검색 중 입니다; 잠시만 기다려 주세요..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "프로그램 누락됨"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
-msgstr "http://cord.sourceforge.net에서 CoRD 어플리케이션을 다운로드하고 설치하세요"
+msgstr ""
+"http://cord.sourceforge.net에서 CoRD 어플리케이션을 다운로드하고 설치하세요"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "배터리 가동"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "컴퓨터가 사용중"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "사용자 요청"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "설정한 시간이 아닙니다"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU 벤치마크 진행 중"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "디스크 공간 필요 - 환경 설정을 확인하세요"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "컴퓨터가 사용중이 아님"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "시작하는 중"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "독점 프로그램이 실행 중"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU가 다른 작업 중"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "네트워크 대역폭이 한계에 도달했습니다"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "운영체제에서 요청함"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "알 수 없는 원인"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU 탐지 실패,"
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "새로 만들기"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "다운로드 실패"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "다운로드 중"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (일시 정지됨 - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "사용자가 일시 정지시킨 프로젝트"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "사용자가 일시 정지시킨 태스크"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "일시 정지됨 - "
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU 일시 정지됨 - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr " - 디스크 공간이 부족합니다"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "공유된 메모리가 비길 기다리고 있습니다"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "높은 우선 순위로 실행 중"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "실행 중"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr "(CPU 비 집약적)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "실행 대기 중"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "시작 대기"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (스케줄러 대기:"
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (스케줄러 대기)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (네트워크 액세스 대기중)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "계산 오류"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "업로드 실패"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "업로드 중"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "사용자 요구로 중단됨"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "프로젝트가 중단됨"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "취소됨: 마감 시각이 지났습니다"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "중단됨: 디스크 사용량 제한치에 도달함"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "중단됨: 실행 시간 제한치에 도달함"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "중단됨: 메모리 제한치에 도달함"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "중단됨"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "다운로드 성공"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "리포트 준비 됨"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "오류: 잘못된 상태 '%d'"
@@ -2496,61 +2497,63 @@ msgstr "사용자 이름과 비밀번호를 확인하시고 다시 시도해 주
msgid "Check the email address and password, and try again."
msgstr "Email 주소와 비밀번호를 확인하시고, 다시 시도해 주세요."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "자세히..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "전체"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "프로젝트를 선택하세요"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "프로젝트를 선택하려면 이를을 클릭하거나 하단에 URL을 입력하세요."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "카테고리:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "프로젝트:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "프로젝트 상세 정보"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "연구 분야:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "소속:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "웹 사이트:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "지원되는 시스템:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "프로젝트 URL:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
-msgstr "이 프로젝트는 해당 컴퓨터에서 동작하지 않을 수도 있습니다. 그래도 추가하시겠습니까?"
+msgstr ""
+"이 프로젝트는 해당 컴퓨터에서 동작하지 않을 수도 있습니다. 그래도 추가하시겠"
+"습니까?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "이미 이 프로젝트가 추가되어 있습니다. 다른 프로젝트를 선택해주세요."
@@ -2558,11 +2561,11 @@ msgstr "이미 이 프로젝트가 추가되어 있습니다. 다른 프로젝
msgid "Communicating with project."
msgstr "프로젝트 서버와 통신 중"
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "서버에서 필요한 파일을 찾을 수 없습니다."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "내부 서버 오류가 발생했습니다."
@@ -2631,7 +2634,8 @@ msgstr ""
"아니면 모뎀을 연결하고 다시 시도하세요.\n"
"\n"
"2) 개인 방화벽 소프트웨어가 BOINC를 막았습니다.\n"
-"개인 방화벽을 설정해서 BOINC가 80번 포트를 사용가능하게 한 후 다시 시도하세요.\n"
+"개인 방화벽을 설정해서 BOINC가 80번 포트를 사용가능하게 한 후 다시 시도하세"
+"요.\n"
"\n"
"3) 프록시 서버를 사용하고 계시다면\n"
"다음을 눌러 BOINC 프록시 설정을 설정해주세요."
@@ -2669,7 +2673,7 @@ msgid "I agree to the terms of use."
msgstr "사용 계약에 동의합니다."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "사용 계약에 동의하지 않습니다."
#: UnavailablePage.cpp:183
@@ -2759,7 +2763,7 @@ msgstr "'%s'은(는) 유효한 호스트 이름을 포함하고 있지 않습니
msgid "'%s' does not contain a valid path."
msgstr "'%s'은(는) 유효한 경로를 포함하고 있지 않습니다."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "명령"
@@ -2812,7 +2816,7 @@ msgstr "공지사항 수신 중. 잠시만 기다려 주세요..."
msgid "There are no notices at this time."
msgstr "지금은 새로운 공지 사항이 없습니다."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "공지 사항"
@@ -2824,10 +2828,12 @@ msgstr "업데이트"
msgid ""
"Report all completed tasks, get latest credit, get latest preferences, and "
"possibly get more tasks."
-msgstr "모든 완료된 태스크를 보고하고 마지막 크레딧과 환경 설정을 받아오며 가능하면 추가 태스크를 받아옵니다."
+msgstr ""
+"모든 완료된 태스크를 보고하고 마지막 크레딧과 환경 설정을 받아오며 가능하면 "
+"추가 태스크를 받아옵니다."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -2856,14 +2862,16 @@ msgid ""
"Delete all files and tasks associated with this project, and get new tasks. "
"You can update the project first to report any completed tasks."
msgstr ""
-"이 프로젝트와 관련된 모든 태스크와 파일들을 삭제하고 새 태스크를 받아옵니다. 그 전에 먼저 완료된 태스크를 보고하도록 업데이트할 수 "
-"있습니다."
+"이 프로젝트와 관련된 모든 태스크와 파일들을 삭제하고 새 태스크를 받아옵니다. "
+"그 전에 먼저 완료된 태스크를 보고하도록 업데이트할 수 있습니다."
#: ViewProjects.cpp:203 sg_ProjectCommandPopup.cpp:86
msgid ""
"Remove this project. Tasks in progress will be lost (use 'Update' first to "
"report any completed tasks)."
-msgstr "이 프로젝트를 제거합니다. 진행 중인 태스크는 소실됩니다. (완료된 태스크를 보고하려면 '업데이트'를 사용하세요)"
+msgstr ""
+"이 프로젝트를 제거합니다. 진행 중인 태스크는 소실됩니다. (완료된 태스크를 보"
+"고하려면 '업데이트'를 사용하세요)"
#: ViewProjects.cpp:209 ViewWork.cpp:222 sg_ProjectCommandPopup.cpp:91
#: sg_TaskCommandPopup.cpp:78
@@ -3060,135 +3068,135 @@ msgstr "빈:"
msgid "used by other programs: "
msgstr "다른 프로그램이 사용 중:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "사용자 전체"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "사용자 평균"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "호스트 전체"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "호스트 평균"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "마지막 업데이트: %.0f 일 전"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "사용자 전체 보여주기"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "사용자 전체 크레딧 보여주기"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "사용자 평균 보여주기"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "사용자 평균 크레딧 보여주기"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "호스트 전체 보여주기"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "전체 호스트 크레딧을 보여줍니다"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "호스트 평균 보여주기"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "호스트 별로 평균 크레딧을 보여줍니다"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< 이전 프로젝트"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "이전 프로젝트를 차트로 보여줍니다"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "다음 프로젝트 >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "다음 프로젝트를 차트로 보여줍니다"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "프로젝트 목록 숨기기"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "전체 영역 그래프 사용"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "모드 뷰"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "한 프로젝트"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "선택한 프로젝트를 차트로 보여줍니다"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "모든 프로젝트 (분리)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "모든 프로젝트를 각각 하나의 차트로 보여줍니다"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "모든 프로젝트 (공동)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "모든 프로젝트를 하나의 차트로 보여줍니다"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "모든 프로젝트 (합계)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "프로젝트 합계를 하나의 차트로 보여줍니다"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "통계"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "차트 업데이트 중..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "프로젝트 목록 보여주기"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "작은 그래프 사용"
@@ -3305,11 +3313,11 @@ msgstr " (프로젝트 전송 지연: "
#: ViewWork.cpp:187 ViewWork.cpp:777
msgid "Show active tasks"
-msgstr "처리 중인 태스크 보여주기"
+msgstr "활성 태스크 보여주기"
#: ViewWork.cpp:188 ViewWork.cpp:778
msgid "Show only active tasks."
-msgstr "처리 중인 태스크만 보여줍니다."
+msgstr "활성된 태스크만 보여줍니다."
#: ViewWork.cpp:194 sg_TaskCommandPopup.cpp:60
msgid "Show graphics"
@@ -3355,10 +3363,6 @@ msgstr "남은 시간 (추정치)"
msgid "Deadline"
msgstr "리포트 마감 시각"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "이름"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "태스크"
@@ -3472,14 +3476,17 @@ msgid ""
"\n"
"Please choose which type of change you would like to make:\n"
msgstr ""
-"여러분은 새 기여자 컴퓨팅 프로젝트를 추가하거나 아니면 여러분이 공헌할 프로젝트를\n"
+"여러분은 새 기여자 컴퓨팅 프로젝트를 추가하거나 아니면 여러분이 공헌할 프로젝"
+"트를\n"
"변경할 수 있습니다.\n"
"\n"
-"이러한 프로젝트들 중 일부는 World Community Grid에서 수행 및 관리되고 있으며, 그외는\n"
+"이러한 프로젝트들 중 일부는 World Community Grid에서 수행 및 관리되고 있으"
+"며, 그외는\n"
"다른 연구자 혹은 기관에서 수행 및 관리되고 있습니다. BOINC 소프트웨어에서는\n"
"프로젝트들을 통틀어서 소모되는 연산력을 분할해 줄 수 있습니다.\n"
"\n"
-"대안으로서 만약 여러분이 BOINC 계정 관리자에 등록되어 있다면, 여러분이 지원할\n"
+"대안으로서 만약 여러분이 BOINC 계정 관리자에 등록되어 있다면, 여러분이 지원"
+"할\n"
"프로젝트를 선택하는데 있어 이것을 사용할 수 있습니다.\n"
"\n"
"여러분이 선호하는 관리 방식을 선택해 주십시오:\n"
@@ -3508,40 +3515,40 @@ msgstr "정말 취소할까요?"
msgid "Question"
msgstr "질문"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "고급 보기...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "고급 사용자 그래픽 인터페이스를 표시합니다."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "스킨"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "사용자 인터페이스의 외형을 선택하세요."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "기본값"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "연산 일시중지"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "연산 재개"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "BOINC나 프로젝트에서 온 공지 사항을 보기 위해 창을 엽니다"
@@ -3563,117 +3570,121 @@ msgid "Click OK to set preferences."
msgstr "저장하려면 확인을 누르세요."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "웹기반 설정으로 복원하려면 지우기를 누르세요."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"아래 나열된 모든 환경설정을 웹기반 설정으로 복원하려면 지우기를 누르세요."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "추가적인 설정은 연산 환경 설정에서 선택하세요"
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "고급 보기."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"추가적인 설정은 고급 보기 상태로 변경 후 연산 환경 설정에서 선택하세요."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "이 시간 사이에만 작업:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "이 시간 사이에만 인터넷이 접속:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "최대 사용 한도:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "디스크 공간"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "프로세서"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "배터리 가동 중에도 작업하시겠습니까?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "이 시간 이상 대기 후 작업:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "위에 나열된 모든 로컬 환경 설정이 지우고 다이얼로그를 닫습니다"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "언제든"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (항상 실행)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "정말로 모든 로컬 환경설정을 지우겠습니까?\n"
@@ -3732,116 +3743,116 @@ msgstr ""
"정말로 이 태스크 '%s'를 중단하시겠습니까?\n"
"(진행률: %.1lf%%, 상태: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "어떤 프로젝트도 없습니다. 프로젝트를 추가해주세요."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "사용 불가"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "태스크:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "접근할 태스크를 선택하세요"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "알림:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "이 태스크의 진행률"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "태스크 명령"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "이 태스크에 적용할 명령 메뉴를 띄웁니다"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "응용 프로그램: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "응용 프로그램: 사용 불가"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "사용 불가"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "경과 시간: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "남은 시간 (추정치): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "상태: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "현재 상태를 복구중."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "작업 유닛을 서버에서 다운로드하고 있습니다."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "작업 일시 정지: 컴퓨터가 배터리로 가동되고 있습니다."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "작업 일시 정지: 사용자가 활동을 시작했습니다."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "작업 일시 정지: 사용자가 작업을 중지시켰습니다."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "작업 일시 정지: 설정한 시간이 아닙니다."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "작업 일시 정지: 벤치마크를 실행하고 있습니다."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "작업이 일시 정지되었습니다."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "프로젝트 서버 접속을 기다리고 있습니다."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "현재 상태 복구중"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "수행가능한 작업이 없습니다"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "코어 클라이언트와 연결이 불가능합니다"
@@ -3883,382 +3894,11 @@ msgstr "모두 보여주기"
msgid "Quit %s"
msgstr "%s 종료"
-#~ msgid "Display the advanced (accessible) graphical interface."
-#~ msgstr "고급 사용자(장애인용) 그래픽 인터페이스를 표시합니다."
-
-#~ msgid "Paused: Other work running"
-#~ msgstr "중지: 다른 작업이 실행되고 있습니다"
-
-#~ msgid "Paused: User initiated. Click 'Resume' to continue"
-#~ msgstr "중지: 사용자가 요청했습니다. 계속하려면 '계속'을 누르세요."
-
-#~ msgid "Paused: User active"
-#~ msgstr "중지: 사용자가 활동합니다"
-
-#~ msgid "Paused: Computer on battery"
-#~ msgstr "중지: 컴퓨터가 배터리로 가동되고 있습니다"
-
-#~ msgid "Paused: Time of Day"
-#~ msgstr "중지: 설정한 시간이 아닙니다"
-
-#~ msgid "Paused: Benchmarks running"
-#~ msgstr "중지: 벤치마크를 실행하고 있습니다"
-
-#~ msgid "Paused"
-#~ msgstr "중지됨"
-
-#~ msgid "Paused: Application start delayed"
-#~ msgstr "중지: 응용 프로그램 시작이 지연되었습니다"
-
-#~ msgid "Click to show project graphics"
-#~ msgstr "클릭하면 프로젝트 그래픽을 보여줍니다"
-
-#~ msgid "Open a window to view messages"
-#~ msgstr "메세지 창 열기"
-
-#~ msgid "Stop all activity"
-#~ msgstr "모든 활동 중지"
-
-#~ msgid "Resume activity"
-#~ msgstr "활동 재개"
-
-#~ msgid "Open a window to set your preferences"
-#~ msgstr "환경 설정 창을 엽니다"
-
-#~ msgid "Switch to the BOINC advanced view"
-#~ msgstr "BOINC 고급 보기로 전환합니다"
-
-#~ msgid "My Projects:"
-#~ msgstr "내 프로젝트:"
-
-#, c-format
-#~ msgid "%s. Work done by %s: %0.2f"
-#~ msgstr "%s. 작업 완료 %s: %0.2f"
-
-#, c-format
-#~ msgid "%.1lf"
-#~ msgstr "%.1lf"
-
-#, c-format
-#~ msgid "%d hr %d min %d sec"
-#~ msgstr "%d 시 %d 분 %d 초"
-
-#~ msgid "Are you sure you want to display graphics on a remote machine?"
-#~ msgstr "정말로 원격 컴퓨터에서 그래픽 표시를 원하십니까?"
-
-#~ msgid "Application: "
-#~ msgstr "응용 프로그램"
-
-#~ msgid "Time Remaining: "
-#~ msgstr "남은 시간:"
-
-#~ msgid "Elapsed Time: "
-#~ msgstr "경과 시간:"
-
-#~ msgid "Account manager website"
-#~ msgstr "계정 관리자 웹사이트"
-
-#~ msgid "Account Manager &URL:"
-#~ msgstr "계정 관리자 &URL:"
-
-#, c-format
-#~ msgid "%s &website"
-#~ msgstr "%s 웹 사이트(&W)"
-
-#~ msgid "Notice List"
-#~ msgstr "공지 목록"
-
-#, c-format
-#~ msgid "%s; received on %s"
-#~ msgstr "%s, %s로부터 받음"
-
-#, c-format
-#~ msgid "%s; received from %s; on %s"
-#~ msgstr "%s, %s로부터 받음, %s"
-
-#~ msgid "Click"
-#~ msgstr "Click"
-
-#~ msgid "Project List"
-#~ msgstr "프로젝트 목록"
-
-#~ msgid "Nvidia GPU Supported"
-#~ msgstr "Nvidia GPU 지원됨"
-
-#~ msgid "ATI GPU Supported"
-#~ msgstr "ATI GPU 지원됨"
-
-#~ msgid "Project Website"
-#~ msgstr "프로젝트 웹 사이트"
-
-#~ msgid "One or more items failed to load from the Internet."
-#~ msgstr "하나 혹은 그 이상의 항목을 인터넷에서 불러오는데 실패했습니다."
-
-#~ msgid "Retry now"
-#~ msgstr "지금 다시 시도"
-
-#~ msgid "10%"
-#~ msgstr "10%"
-
-#~ msgid "20%"
-#~ msgstr "20%"
-
-#~ msgid "30%"
-#~ msgstr "30%"
-
-#~ msgid "40%"
-#~ msgstr "40%"
-
-#~ msgid "50%"
-#~ msgstr "50%"
-
-#~ msgid "60%"
-#~ msgstr "60%"
-
-#~ msgid "70%"
-#~ msgstr "70%"
-
-#~ msgid "80%"
-#~ msgstr "80%"
+#~ msgid "invalid float"
+#~ msgstr "invalid float"
-#~ msgid "90%"
-#~ msgstr "90%"
+#~ msgid "Workunit name"
+#~ msgstr "작업 유닛 이름"
-#~ msgid "100%"
-#~ msgstr "100%"
-
-#~ msgid "1"
-#~ msgstr "1"
-
-#~ msgid "3"
-#~ msgstr "3"
-
-#~ msgid "5"
-#~ msgstr "5"
-
-#~ msgid "10"
-#~ msgstr "10"
-
-#~ msgid "15"
-#~ msgstr "15"
-
-#~ msgid "30"
-#~ msgstr "30"
-
-#~ msgid "60"
-#~ msgstr "60"
-
-#, c-format
-#~ msgid "Pop up a menu of websites for project %s"
-#~ msgstr "%s 프로젝트 웹 사이트 메뉴를 띄웁니다"
-
-#~ msgid ""
-#~ "for accessibility support, please select advanced from the view menu or type "
-#~ "command shift a"
-#~ msgstr "접급성 지원을 원하시면 보기 메뉴에서 고급 보기를 선택하거나 쉬프트 A 명령을 입력하세요"
-
-#~ msgid "This panel contains graphs showing user totals for projects"
-#~ msgstr "이 패널은 프로젝트 전체 사용자를 보여주는 그래프를 포함합니다"
-
-#~ msgid "list headers"
-#~ msgstr "목록 헤더"
-
-#~ msgid "list of events"
-#~ msgstr "이벤트 목록"
-
-#~ msgid "list of events is empty"
-#~ msgstr "이벤트 목록이 비었습니다"
-
-#, c-format
-#~ msgid "list of %s"
-#~ msgstr "%s 목록"
-
-#, c-format
-#~ msgid "list of %s is empty"
-#~ msgstr "%s 목록이 비었습니다"
-
-#, c-format
-#~ msgid "; current sort column %d of %d; descending order; "
-#~ msgstr ", 현재 컬럼 %d %d 정렬, 내림차순 정렬, "
-
-#, c-format
-#~ msgid "; current sort column %d of %d; ascending order; "
-#~ msgstr ", 현재 컬럼 %d %d 정렬, 오름차순 정렬, "
-
-#, c-format
-#~ msgid "; column %d of %d; "
-#~ msgstr ", 컬럼 %d %d"
-
-#~ msgid "list is empty"
-#~ msgstr "목록이 없습니다"
-
-#, c-format
-#~ msgid "; row %d; "
-#~ msgstr ", 줄 %d, "
-
-#, c-format
-#~ msgid "; selected row %d of %d; "
-#~ msgstr ", 줄 %d %d가 선택됨, "
-
-#, c-format
-#~ msgid "; selected row %d ; "
-#~ msgstr ", 줄 %d가 선택됨, "
-
-#, c-format
-#~ msgid "; row %d of %d; "
-#~ msgstr ", 줄 %d %d, "
-
-#~ msgid "blank"
-#~ msgstr "공백"
-
-#~ msgid "list of projects or account managers"
-#~ msgstr "계정 관리자 및 프로젝트 목록"
-
-#, c-format
-#~ msgid "selected row %d of %d; "
-#~ msgstr "줄 %d %d가 선택됨, "
-
-#, c-format
-#~ msgid "row %d of %d; "
-#~ msgstr "줄 %d %d, "
-
-#~ msgid "The minimum username length for this project is 1. Please enter a different username."
-#~ msgstr "이 프로젝트는 최소 1글자 이상의 사용자 이름이 필요합니다. 다른 사용자 이름을 입력해 주세요."
-
-#~ msgid "The minimum username length for this account manager is 1. Please enter a different username."
-#~ msgstr "이 계정 관리자는 최소 1글자 이상의 사용자 이름이 필요합니다. 다른 사용자 이름을 입력해 주세요."
-
-#~ msgid "The minimum email address length for this project is 1. Please enter a different email address."
-#~ msgstr "이 프로젝트는 최소 1글자 이상의 email 주소가 필요합니다. 다른 email 주소를 입력해 주세요."
-
-#~ msgid "The minimum email address length for this account manager is 1. Please enter a different email address."
-#~ msgstr "이 계정 관리자는 최소 1글자 이상의 email 주소가 필요합니다. 다른 email 주소를 입력해 주세요."
-
-#, c-format
-#~ msgid "The minimum password length for this project is %d. Please enter a different password."
-#~ msgstr "이 프로젝트는 최소한 %d글자 이상의 비밀번호가 필요합니다. 다른 비밀번호를 입력해 주세요."
-
-#, c-format
-#~ msgid "The minimum password length for this account manager is %d. Please enter a different password."
-#~ msgstr "이 계정 관리자는 최소한 %d글자 이상의 비밀번호가 필요합니다. 다른 비밀번호를 입력해 주세요."
-
-#~ msgid ""
-#~ "An error has occurred;\n"
-#~ "check the Event Log for details.\n"
-#~ "\n"
-#~ "Click Finish to close."
-#~ msgstr ""
-#~ "오류가 발생했습니다.\n"
-#~ "자세한 사항은 이벤트 기록을 확인하세요.\n"
-#~ "\n"
-#~ "닫을려면 완료를 누르세요."
-
-#, no-c-format
-#~ msgid "% of the processors"
-#~ msgstr "% (프로세서 중)"
-
-#, c-format
-#~ msgid "New page inserted. Index = %i"
-#~ msgstr "새 페이지 삽입됨. Index = %i"
-
-#, c-format
-#~ msgid "New page appended. Index = %i"
-#~ msgstr "새 페이지 첨부됨. Index = %i"
-
-#, c-format
-#~ msgid "Old Page Index = %i"
-#~ msgstr "Old Page Index = %i"
-
-#, c-format
-#~ msgid "OnDropTarget: index by HitTest = %i"
-#~ msgstr "OnDropTarget: index by HitTest = %i"
-
-#~ msgid "Pie Ctrl"
-#~ msgstr "차트 컨트롤"
-
-#~ msgid "specify work start and stop hours in format HH:MM-HH:MM"
-#~ msgstr "작업 시작 시각과 종료 시각을 HH:MM-HH:MM 형식으로 적어주세요"
-
-#~ msgid "specify network usage start and stop hours in format HH:MM-HH:MM"
-#~ msgstr "네트워크 사용 시작 시각과 종료 시각을 HH:MM-HH:MM 형식으로 적어주세요"
-
-#~ msgid "NVIDIA GPU"
-#~ msgstr "NVIDIA GPU"
-
-#~ msgid "ATI GPU"
-#~ msgstr "ATI GPU"
-
-#~ msgid "Multicore CPU Supported"
-#~ msgstr "멀티코어 CPU 지원됨"
-
-#~ msgid "%s: %.0f"
-#~ msgstr "%s: %.0f"
-
-#~ msgid "Click 'Retry now' to transfer the file now"
-#~ msgstr "파일을 바로 전송하려면 '지금 다시 시도'를 클릭"
-
-#~ msgid ""
-#~ "Click 'Abort transfer' to delete the file from the transfer queue. This "
-#~ "will prevent you from being granted credit for this result."
-#~ msgstr ""
-#~ "전송 큐에서 파일을 삭제하려면 '전송 중단'을 클릭하세요. 이 결과로 인해서 "
-#~ "크레딧이 지급되지 않게 될 것입니다."
-
-#~ msgid "Aborting result..."
-#~ msgstr "작업 중단 중..."
-
-#~ msgid ""
-#~ "You have chosen to add a new BOINC project. Adding a new\n"
-#~ "project means that you will be connecting your computer to a new "
-#~ "organization.\n"
-#~ "If this is what you wanted to do, please click on\n"
-#~ "the 'Next' button below.\n"
-#~ "\n"
-#~ "Some projects like World Community Grid run multiple research "
-#~ "applications.\n"
-#~ "If you want to change which research applications are sent to your "
-#~ "computer\n"
-#~ "to run, visit the project's website and modify your\n"
-#~ "preferences there.\n"
-#~ "\n"
-#~ "To change which research applications are sent to you from\n"
-#~ "World Community Grid then please click on the following button:"
-#~ msgstr ""
-#~ "새 BOINC 프로젝트를 연결하기로 선택하셨습니다. 새 프로젝트를\n"
-#~ "추가한다는 것은 여러분의 컴퓨터가 새로운 웹 사이트와 단체로 연결된다는 걸 "
-#~ "뜻합니다.\n"
-#~ "만약 이 것이 여러분이 원하는 것이라면, 하단의 다음\n"
-#~ "버튼을 누르십시오.\n"
-#~ "\n"
-#~ "World Community Grid 같은 프로젝트는 여러 연구 응용 프로그램을 실행합니"
-#~ "다.\n"
-#~ "만약 여러분의 컴퓨터에서 실행될 연구 응용 프로그램이 바뀌길 원하신다면\n"
-#~ "프로젝트 웹 사이트를 방문한 다음, 거기서 환경 설정을\n"
-#~ "변경할 수 있습니다.\n"
-#~ "\n"
-#~ "World Community Grid에서 여러분에게 전송해 줄 연구 응용\n"
-#~ "프로그램을 바꿀려면 다음에 나오는 버튼을 누르십시오:"
-
-#~ msgid "Change Research Applications at World Community Grid"
-#~ msgstr "World Community Grid 연구 응용 프로그램을 바꿉니다"
-
-#~ msgid "Don't fetch NVIDIA GPU tasks"
-#~ msgstr "NVIDIA GPU 태스크를 받지 않음"
-
-#~ msgid "NVIDIA GPU work fetch deferred for"
-#~ msgstr "NVIDIA GPU가 이 시간 이후로 작업"
-
-#~ msgid "NVIDIA GPU work fetch deferral interval"
-#~ msgstr "NVIDIA GPU 작업 반입 지연 간격"
-
-#~ msgid "Don't fetch ATI GPU tasks"
-#~ msgstr "ATI GPU 태스크를 받지 않음"
-
-#~ msgid "ATI GPU work fetch deferred for"
-#~ msgstr "ATI GPU가 이 시간 이후로 작업"
-
-#~ msgid "ATI GPU work fetch deferral interval"
-#~ msgstr "ATI GPU 작업 반입 지연 간격"
-
-#~ msgid "Remaining"
-#~ msgstr "남은 시간"
+#~ msgid "the Advanced View."
+#~ msgstr "고급 보기."
diff --git a/locale/ko/BOINC-Setup.mo b/locale/ko/BOINC-Setup.mo
index e0913a0..271cb60 100644
Binary files a/locale/ko/BOINC-Setup.mo and b/locale/ko/BOINC-Setup.mo differ
diff --git a/locale/ko/BOINC-Setup.po b/locale/ko/BOINC-Setup.po
index ccc9994..0e24e7f 100644
--- a/locale/ko/BOINC-Setup.po
+++ b/locale/ko/BOINC-Setup.po
@@ -2,36 +2,32 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
msgid ""
msgstr ""
-"Project-Id-Version: BOINC 7.x\n"
+"Project-Id-Version: BOINC 7.2.y\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-12-09 05:39+0000\n"
-"Last-Translator: Kangsan Lee <treppolse at gmail.com>\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-07 17:48+0900\n"
+"Last-Translator: Lee Kangsan <treppolse at gmail.com>\n"
"Language-Team: SETIKAH at KOREA\n"
"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.5.0\n"
-"X-Poedit-SearchPath-0: mac_installer\n"
+"X-Generator: Poedit 1.6.3\n"
"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-Poedit-KeywordsList: _\n"
-"X-POOTLE-MTIME: 1386567551.0\n"
#: Installer.cpp:124
#, c-format
msgid "Sorry, this version of %s requires system 10.5 or higher."
-msgstr "죄송합니다. 해단 버전의 %s는 시스템 10.5 이상을 필요로 합니다."
+msgstr "죄송합니다. 해당 %s 버전은 시스템 10.5 이상을 요구합니다."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "네"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "아니오"
@@ -48,24 +44,26 @@ msgid ""
"Do you also want non-administrative users to be able to run and control %s "
"on this Mac?"
msgstr ""
-"이 컴퓨터에서 관리하도록 허가받은 사용자들은 자동적으로 %s를(를) 실행하고 제어할 수 있도록 허용될 것입니다.\n"
+"이 컴퓨터에서 관리하도록 허가받은 사용자들은 자동적으로 %s를(를) 실행하고 제"
+"어할 수 있도록 허용될 것입니다.\n"
"\n"
-"이 Mac에서 비관리자 사용자들도 %s를(을) 실행하고 제어할 수 있게 하길 원하십니까?"
+"이 Mac에서 비관리자 사용자들도 %s를(을) 실행하고 제어할 수 있게 하길 원하십니"
+"까?"
#: PostInstall.cpp:1444
#, c-format
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr "%s를(을) Mac상의 모든 %s 사용자용 화면 보호기로 지정하시겠습니까?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "확인"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "권한 오류 나중에 재실행하세요"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -73,7 +71,7 @@ msgstr ""
"제거에는 몇 분정도 걸릴 것입니다.\n"
"잠시 기다려 주세요."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -84,21 +82,29 @@ msgstr ""
"\n"
"실행 파일은 제거되지만 %s 데이터 파일들은 건드리지 않습니다."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "취소됨: %s가 터치되지 않았습니다."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "오류가 발생했습니다: 오류 코드 %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "사용자 이름"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"이 컴퓨터에서 VirtualBox도 제거하길 원하십니까?\n"
+"(VirtualBox는 BOINC와 함께 설치되었습니다.)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -111,47 +117,27 @@ msgid ""
msgstr ""
"제거가 완료되었습니다.\n"
"\n"
-" 여러분은 파인더를 사용해서 다음 잔존하는 항목을 삭제할 수 있습니다: \n"
+" 여러분은 파인더를 사용해서 잔존하는 다음 항목을 삭제할 수 있습니다: \n"
"\"%s\" 디렉토리\n"
"\n"
"개별 사용자의 경우\n"
"\"%s\" 파일."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
"computer.\n"
"\n"
msgstr ""
-"여러분 컴퓨터에서 %s를(을) 완전히 제거하려면 관리자 비밀번호를 입력해 주세요.\n"
+"여러분 컴퓨터에서 %s를(을) 완전히 제거하려면 관리자 비밀번호를 입력해 주세"
+"요.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "취소"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "계속..."
-
-#, c-format
-#~ msgid "Sorry, this version of %s requires system 10.4 or higher."
-#~ msgstr "죄송합니다. 해단 버전의 %s는 시스템 10.4 이상을 필요로 합니다."
-
-#~ msgid ""
-#~ "Removal completed.\n"
-#~ "\n"
-#~ " You may want to remove the following remaining items using the Finder: \n"
-#~ "\"/Library/Application Support/BOINC Data\" directory\n"
-#~ "\n"
-#~ "for each user, the file\n"
-#~ "\"/Users/[username]/Library/Preferences/BOINC Manager Preferences\"."
-#~ msgstr ""
-#~ "제거가 완료되었습니다.\n"
-#~ "\n"
-#~ " 여러분은 탐색기를 사용해서 다음 잔존하는 항목을 삭제할 수 있습니다: \n"
-#~ "\"/Library/Application Support/BOINC Data\" 디렉토리\n"
-#~ "\n"
-#~ "개별 사용자의 경우\n"
-#~ "\"/Users/[username]/Library/Preferences/BOINC Manager Preferences\"."
diff --git a/locale/ko/BOINC-Web.mo b/locale/ko/BOINC-Web.mo
index 0851ae3..351991d 100644
Binary files a/locale/ko/BOINC-Web.mo and b/locale/ko/BOINC-Web.mo differ
diff --git a/locale/ko/BOINC-Web.po b/locale/ko/BOINC-Web.po
index b3420bb..a89ba9d 100644
--- a/locale/ko/BOINC-Web.po
+++ b/locale/ko/BOINC-Web.po
@@ -1,27 +1,21 @@
-# BOINC web translation
-# Copyright (C) 2008-2009 University of California
-# This file is distributed under the same license as BOINC.
-# FileID : $Id$
msgid ""
msgstr ""
-"Project-Id-Version: BOINC web 2013/08/24\n"
+"Project-Id-Version: BOINC web 2014/2/7\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-12-09 03:37+0000\n"
-"Last-Translator: Kangsan Lee <treppolse at gmail.com>\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-07 17:56+0900\n"
+"Last-Translator: Lee Kangsan <treppolse at gmail.com>\n"
"Language-Team: SETIKAH at KOREA\n"
-"Language: ko\n"
+"Language: ko_KR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.5.0\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"X-Poedit-SearchPath-0: doc\n"
+"X-Generator: Poedit 1.6.3\n"
+"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-KeywordsList: tra\n"
-"X-POOTLE-MTIME: 1386560274.0\n"
+"X-Poedit-SearchPath-0: doc\n"
#: docutil.php:21
msgid "Search"
@@ -41,13 +35,16 @@ msgid ""
"We recommend that you also install VirtualBox, so your computer can work on "
"science projects that require it."
msgstr ""
-"저희는 여러분이 VirtualBox도 같이 설치하길 권장합니다. 그렇게 하면 해당 기능을 요구하는 과학 프로젝트 작업도 수행할 수 "
-"있습니다."
+"저희는 여러분이 VirtualBox도 같이 설치하길 권장합니다. 그렇게 하면 해당 기능"
+"을 요구하는 과학 프로젝트 작업도 수행할 수 있습니다."
#: download.php:41
msgid "Learn more about VirtualBox."
msgstr "VirtualBox에 대해서 알아봅니다."
+# #######################################
+# download.php
+# #######################################
#: download.php:51
msgid "Download BOINC + VirtualBox"
msgstr "BOINC + VirtualBox 다운로드"
@@ -69,6 +66,7 @@ msgstr "VirtualBox 버전 %s"
# #######################################
# download.php
+# #######################################
#: download.php:67
msgid "Download BOINC"
msgstr "BOINC 다운로드"
@@ -80,25 +78,32 @@ msgid ""
"Community Grid, and many others."
msgstr ""
"BOINC는 SETI at home, Climateprediction.net, Rosetta at home, World Community Grid "
-"그리고 다른 많은 과학 프로젝트들에게 여러분의 컴퓨터 대기 시간을 기여하도록 하는 프로그램입니다."
+"그 외 다른 많은 과학 프로젝트들에게 여러분의 컴퓨터 대기 시간을 기부하도록 하"
+"는 프로그램입니다."
#: download.php:125
msgid ""
"After installing BOINC on your computer, you can connect it to as many of "
"these projects as you like."
-msgstr "컴퓨터에 BOINC를 설치한 후에 여러분이 선호하는 수많은 프로젝트에 연결하실 수 있습니다."
+msgstr ""
+"컴퓨터에 BOINC를 설치한 후에 여러분이 선호하는 수많은 프로젝트에 연결하실 수 "
+"있습니다."
#: download.php:127
msgid ""
"You may run this software on a computer only if you own the computer or have "
"the permission of its owner."
-msgstr "여러분은 이 소프트웨어를 여러분이 소유한 컴퓨터 혹은 소유자로부터 권한을 부여받은 컴퓨터에서만 실행해야 합니다."
+msgstr ""
+"여러분은 이 소프트웨어를 여러분이 소유한 컴퓨터 혹은 소유자로부터 권한을 부여"
+"받은 컴퓨터에서만 실행해야 합니다."
#: download.php:132
msgid ""
"We recommend that you download BOINC from the Google Play Store or Amazon "
"Appstore, not from here."
-msgstr "이곳보다는 Google Play Store 또는 Amazon Appstore에서 BOINC를 다운로드하시길 권장합니다."
+msgstr ""
+"이곳보다는 Google Play Store 또는 Amazon Appstore에서 BOINC를 다운로드하시길 "
+"권장합니다."
#: download.php:167
msgid "System requirements"
@@ -136,8 +141,9 @@ msgid ""
"through the process of installing and using BOINC; %s troubleshoot any "
"problems you might have."
msgstr ""
-"BOINC 온라인 도움말은 경험많은 BOINC 사용자와 1:1대화를 하도록 합니다 대상: %s는 BOINC와 기여자 컴퓨팅에 대해서 "
-"답합니다. %s는 BOINC 설치 진행 및 사용을 도와드릴 것입니다. %s는 여러분이 겪는 각종 문제를 해결해 드릴 것입니다."
+"BOINC 온라인 도움말은 경험많은 BOINC 사용자와 1:1대화를 하도록 합니다 대상: "
+"%s는 BOINC와 기여자 컴퓨팅에 대해서 답합니다. %s는 BOINC 설치 진행 및 사용을 "
+"도와드릴 것입니다. %s는 여러분이 겪는 각종 문제를 해결해 드릴 것입니다."
#: help.php:21
#, php-format
@@ -147,8 +153,9 @@ msgid ""
"Skype, please %sdownload and install it now%s. When you're finished, return "
"to this page."
msgstr ""
-"BOINC 온라인 도움말은 인터넷 전화인 %sSkype%s에 기반을 두고 있습니다. Skype는 소프트웨어와 전화 모두 무료입니다. 아직 "
-"Skype를 사용하고 계시지 않았다면, %s지금 다운로드하고 설치하십시오%s. 완료되면 이 페이지로 돌아오십시오."
+"BOINC 온라인 도움말은 인터넷 전화인 %sSkype%s에 기반을 두고 있습니다. Skype"
+"는 소프트웨어와 전화 모두 무료입니다. 아직 Skype를 사용하고 계시지 않았다면, "
+"%s지금 다운로드하고 설치하십시오%s. 완료되면 이 페이지로 돌아오십시오."
#: help.php:28
msgid ""
@@ -157,15 +164,17 @@ msgid ""
"also use Skype's text-based chat system or regular email (if you don't have "
"Skype) to communicate with Help Volunteers."
msgstr ""
-"도움을 구하는 가장 좋은 방법은 목소리입니다. 이를 위해서 여러분 컴퓨터에는 마이크와 스피커 또는 외부 헤드셋이 필요합니다. 여러분은 "
-"또한 도우미 기여자들과 Skype 텍스트 기반 대화 시스템이나 일반적인 email (만약 Skype를 쓰지 않을 경우)로 대화를 주고받을 "
-"수 있습니다. "
+"도움을 구하는 가장 좋은 방법은 목소리입니다. 이를 위해서 여러분 컴퓨터에는 마"
+"이크와 스피커 또는 외부 헤드셋이 필요합니다. 여러분은 또한 도우미 기여자들과 "
+"Skype 텍스트 기반 대화 시스템이나 일반적인 email (만약 Skype를 쓰지 않을 경"
+"우)로 대화를 주고받을 수 있습니다. "
#: help.php:31
msgid ""
"Volunteers speaking several languages are available. Please select a "
"language:"
-msgstr "기여자들은 몇가지 언어로 얘기하는 것이 가능합니다. 언어를 선택해 주세요:"
+msgstr ""
+"기여자들은 몇가지 언어로 얘기하는 것이 가능합니다. 언어를 선택해 주세요:"
#: help.php:47
msgid "Be a Help Volunteer"
@@ -178,24 +187,29 @@ msgid ""
"Volunteer%s. It's a great way to help the cause of scientific research and "
"volunteer computing - and it's fun!"
msgstr ""
-"만약 여러분이 경험많은 BOINC 사용자라면, 우리는 여러분이 %s도우미 기여자%s가 되길 장려합니다. 그 것은 과학적 연구와 기여자 "
-"컴퓨팅을 돕는 위대한 방법입니다 - 그리고 그 것을 즐기세요!"
+"만약 여러분이 경험많은 BOINC 사용자라면, 우리는 여러분이 %s도우미 기여자%s가 "
+"되길 장려합니다. 그 것은 과학적 연구와 기여자 컴퓨팅을 돕는 위대한 방법입니"
+"다 - 그리고 그 것을 즐기세요!"
#: help.php:56
#, php-format
msgid ""
"If you're already a Help Volunteer: to edit your settings, %sclick here%s."
-msgstr "여러분이 이미 도우미 기여자일 경우: 설정을 바꾸실려면 %s여기를 누르십시오%s."
+msgstr ""
+"여러분이 이미 도우미 기여자일 경우: 설정을 바꾸실려면 %s여기를 누르십시오%s."
#: help_funcs.php:107
msgid ""
"BOINC helpers are unpaid volunteers. Their advice is not endorsed by BOINC "
"or the University of California."
-msgstr "BOINC 도우미는 자원봉사자들입니다. 그들의 조언은 BOINC나 캘리포니아 대학교에서 보증하지 않습니다."
+msgstr ""
+"BOINC 도우미는 자원봉사자들입니다. 그들의 조언은 BOINC나 캘리포니아 대학교에"
+"서 보증하지 않습니다."
#: help_funcs.php:110
msgid "%1Never%2 give email address or password information to BOINC helpers."
-msgstr "%1절대로%2 이메일 주소나 비밀번호 정보를 BOINC 도우미에게 제공하지 마세요."
+msgstr ""
+"%1절대로%2 이메일 주소나 비밀번호 정보를 BOINC 도우미에게 제공하지 마세요."
#: index.php:24
msgid "Computing power"
@@ -239,6 +253,7 @@ msgstr "기여자"
# #######################################
# download.php
+# #######################################
#: index.php:85
msgid "Download"
msgstr "다운로드"
@@ -261,13 +276,17 @@ msgid ""
"diseases, study global warming, discover pulsars, and do many other types of "
"scientific research. It's safe, secure, and easy:"
msgstr ""
-"질병 치료, 지구 온난화 연구, 중성자별 발견 그 외에 또 많은 종류의 과학연구를 위해 여러분 컴퓨터(윈도우, 맥, 리눅스, "
-"안드로이드)의 대기 시간을 사용하십시오. 이 것은 안전하고 보안이 철저하며 쉽습니다:"
+"질병 치료, 지구 온난화 연구, 중성자별 발견 그 외에 또 많은 종류의 과학연구를 "
+"위해 여러분 컴퓨터(윈도우, 맥, 리눅스, 안드로이드)의 대기 시간을 사용하십시"
+"오. 이 것은 안전하고 보안이 철저하며 쉽습니다:"
#: index.php:96
msgid "Choose projects"
msgstr "프로젝트를 선택하세요"
+# #######################################
+# download.php
+# #######################################
#: index.php:97
msgid "Download BOINC software"
msgstr "BOINC 소프트웨어를 다운로드하세요"
@@ -279,10 +298,11 @@ msgstr "이메일 주소와 비밀번호를 입력하세요."
#: index.php:102
#, php-format
msgid ""
-"Or, if you run several projects, try an %saccount manager%s such as %"
-"sGridRepublic%s or %sBAM!%s. "
+"Or, if you run several projects, try an %saccount manager%s such as "
+"%sGridRepublic%s or %sBAM!%s. "
msgstr ""
-"혹시 여러 개의 프로젝트를 수행하고 계시다면 %s계정 관리자%s(%sGridRepublic%s이나 %sBAM!%s등)를 사용해 보십시오."
+"혹시 여러 개의 프로젝트를 수행하고 계시다면 %s계정 관리자%s(%sGridRepublic%s"
+"이나 %sBAM!%s등)를 사용해 보십시오."
#: index.php:118
msgid "Compute with BOINC"
@@ -296,13 +316,16 @@ msgstr "소프트웨어 업데이트"
msgid ""
"%1Scientists%2: use BOINC to create a %3volunteer computing project%4 giving "
"you the computing power of thousands of CPUs."
-msgstr "%1과학자%2: BOINC를 이용해서 %3기여자 컴퓨팅 프로젝트%4를 생성하고 CPU 수천 개분의 연산 능력을 제공받으세요."
+msgstr ""
+"%1과학자%2: BOINC를 이용해서 %3기여자 컴퓨팅 프로젝트%4를 생성하고 CPU 수천 "
+"개분의 연산 능력을 제공받으세요."
#: index.php:132
msgid ""
"%1Universities%2: use BOINC to create a %3Virtual Campus Supercomputing "
"Center%4."
-msgstr "%1대학%2: %3가상 캠퍼스 슈퍼컴퓨터 센터%4를 생성해서 BOINC를 이용하세요."
+msgstr ""
+"%1대학%2: %3가상 캠퍼스 슈퍼컴퓨터 센터%4를 생성해서 BOINC를 이용하세요."
#: index.php:137
msgid "%1Companies%2: use BOINC for %3desktop Grid computing%4."
@@ -381,8 +404,8 @@ msgstr "%s기여자 컴퓨팅%s과 %s그리드 컴퓨팅%s을 위한 오픈 소
#: index.php:230
msgid "BOINC is based at The University of California, Berkeley"
msgstr ""
-"BOINC는 캘리포니아 대학교 버클리 캠퍼스(The University of California, Berkeley)에 기반을 두고 "
-"있습니다"
+"BOINC는 캘리포니아 대학교 버클리 캠퍼스(The University of California, "
+"Berkeley)에 기반을 두고 있습니다"
#: projects.inc:14
msgid "Distributed sensing"
@@ -402,8 +425,9 @@ msgid ""
"using sensors attached to Internet-connected computers. You must buy a "
"sensor to participate."
msgstr ""
-"Quake-Catcher Network는 인터넷에 연결된 컴퓨터에 연결된 센서를 사용한 세계에서 가장 큰 지진 감지망으로 개발되었습니다. "
-"여러분이 참여하려면 반드시 센서를 사야 됩니다."
+"Quake-Catcher Network는 인터넷에 연결된 컴퓨터에 연결된 센서를 사용한 세계에"
+"서 가장 큰 지진 감지망으로 개발되었습니다. 여러분이 참여하려면 반드시 센서를 "
+"사야 됩니다."
#: projects.inc:27
msgid "BOINC Poland Foundation"
@@ -419,51 +443,55 @@ msgid ""
"levels by using sensors connected to volunteers' computers. You must buy a "
"sensor to participate."
msgstr ""
-"이 프로젝트는 기여자들의 컴퓨터에 연결된 센서를 사용해서 지속적으로 업데이트되는 방사능 단계 지도를 대가없이 생성합니다. 여러분이 "
-"참여하려면 반드시 센서를 사야 됩니다."
+"이 프로젝트는 기여자들의 컴퓨터에 연결된 센서를 사용해서 지속적으로 업데이트"
+"되는 방사능 단계 지도를 대가없이 생성합니다. 여러분이 참여하려면 반드시 센서"
+"를 사야 됩니다."
#: projects.inc:33
msgid ""
"To participate in these projects you must buy a sensor and attach it to your "
"computer."
-msgstr "이러한 프로젝트에 참여하려면 여러분은 반드시 센서를 사서 컴퓨터에 연결시켜야 됩니다."
+msgstr ""
+"이러한 프로젝트에 참여하려면 여러분은 반드시 센서를 사서 컴퓨터에 연결시켜야 "
+"됩니다."
#: projects.inc:37
msgid "Cognitive science and artifical intelligence"
msgstr "인지 과학과 인공 지능"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "개인"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "인공 지능"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
"databases, and part of speech taggers in order to imitate human behavior in "
"conversations."
msgstr ""
-"인공 지능은 회화에서 인간의 행동을 모방하기 위해서 의미망, 스테밍, 품사 데이터베이스, 품사 태거를 이용합니다. FreeHAL에서는 "
-"이런 인공 지능 개발을 위해서 의미망을 분석하고 FreeHAL에서 사용할 수 있게 변환합니다."
+"인공 지능은 회화에서 인간의 행동을 모방하기 위해서 의미망, 스테밍, 품사 데이"
+"터베이스, 품사 태거를 이용합니다. FreeHAL에서는 이런 인공 지능 개발을 위해서 "
+"의미망을 분석하고 FreeHAL에서 사용할 수 있게 변환합니다."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "생물학 및 의약"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "칼리지 더블린 대학교<br />(University College Dublin)"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "항말라리야성 약물 발견"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -471,19 +499,21 @@ msgid ""
"the parasite. The FightMalaria at Home project is aimed at finding these new "
"targets."
msgstr ""
-"말라리야를 유발하는 기생충은 사용가능한 약물에 대한 내성이 계속 진화하고 있습니다. 따라서 우리는 시급히 현존하는 약을 대체할 새로운 "
-"약을 발견할 필요가 있습니다. 중요한 점은 이런 새로운 약은 기생충 안에 있는 '새로운' 단백질을 대상으로 요구합니다. "
-"FightMalaria at Home 프로젝트는 이러한 새로운 대상을 찾는 것을 목표로 합니다."
+"말라리야를 유발하는 기생충은 사용가능한 약물에 대한 내성이 계속 진화하고 있습"
+"니다. 따라서 우리는 시급히 현존하는 약을 대체할 새로운 약을 발견할 필요가 있"
+"습니다. 중요한 점은 이런 새로운 약은 기생충 안에 있는 '새로운' 단백질을 대상"
+"으로 요구합니다. FightMalaria at Home 프로젝트는 이러한 새로운 대상을 찾는 것을 "
+"목표로 합니다."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Karlsruhe 대학교 (독일, University of Karlsruhe)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "단백질 구조 예측"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -491,94 +521,99 @@ msgid ""
"protein malfunction or aggregation, and to develop new drugs on the basis of "
"the three-dimensions structure of biologically important proteins."
msgstr ""
-"POEM at HOME은 단백질의 활성 구조를 생물학적으로 예측하기 위해서 컴퓨터를 이용합니다. 또 단백질 간의 상호작용이 일어날 때의 "
-"신호처리 메커니즘을 이해하고자 합니다. 이외에 단백질의 기능 저하나 집적과 관련있는 질병을 이해하고 생물학적으로 중요한 단백질들의 3차원 "
-"구조에 기반해서 신약을 개발하는데 그 목적이 있습니다."
+"POEM at HOME은 단백질의 활성 구조를 생물학적으로 예측하기 위해서 컴퓨터를 이용합"
+"니다. 또 단백질 간의 상호작용이 일어날 때의 신호처리 메커니즘을 이해하고자 합"
+"니다. 이외에 단백질의 기능 저하나 집적과 관련있는 질병을 이해하고 생물학적으"
+"로 중요한 단백질들의 3차원 구조에 기반해서 신약을 개발하는데 그 목적이 있습니"
+"다."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "델라웨어 대학교"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "단백질 이론 - 리간드 상호작용"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
"interactions and, by doing so, will search for insights into the discovery "
"of novel pharmaceuticals."
msgstr ""
-"Docking at Home은 생명과학과 컴퓨터 과학의 양면에 목표를 갖고 있습니다. 프로젝트는 단백질 리간드 상호작용의 원자적 세부사항을 "
-"이해하고 그렇게 함으로써 새로운 의약품을 개발하기 위한 식견을 넓히는 것을 목표로 합니다."
+"Docking at Home은 생명과학과 컴퓨터 과학의 양면에 목표를 갖고 있습니다. 프로젝트"
+"는 단백질 리간드 상호작용의 원자적 세부사항을 이해하고 그렇게 함으로써 새로"
+"운 의약품을 개발하기 위한 식견을 넓히는 것을 목표로 합니다."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "바로셀로나 생물의학 연구 단지(PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "단백질 분자 시뮬레이션"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
"New biomedical applications suddenly become possible giving a new role to "
"computational biology for biomedical research."
msgstr ""
-"GPUGrid.net은 NVIDIA GPU에서 실행시키기 위해 처음으로 분자 속 전체 원자 동적 분석 코드(CellMD)로 특별히 "
-"최적화되었습니다. 이로서 새로운 계산 시나리오가 개척되었습니다. 새로운 생물의학 어플리케이션은 생물의학 연구를 위한 전산 생물학에 새로운 "
-"역할을 부여할 가능성을 가지고 있습니다."
+"GPUGrid.net은 NVIDIA GPU에서 실행시키기 위해 처음으로 분자 속 전체 원자 동적 "
+"분석 코드(CellMD)로 특별히 최적화되었습니다. 이로서 새로운 계산 시나리오가 개"
+"척되었습니다. 새로운 생물의학 어플리케이션은 생물의학 연구를 위한 전산 생물학"
+"에 새로운 역할을 부여할 가능성을 가지고 있습니다."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "이스라엘 Technion 대학교(Technion, Israel)"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "유전학적 연관성 분석"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-"Superlink at Technion은 당뇨병, 고혈압, 암, 정신 분열증, 기타 질병 등을 유발하는 특정 종류의 질병 유발 유전자를 찾는 "
-"전세계 모든 유전학자를 지원합니다."
+"Superlink at Technion은 당뇨병, 고혈압, 암, 정신 분열증, 기타 질병 등을 유발하"
+"는 특정 종류의 질병 유발 유전자를 찾는 전세계 모든 유전학자를 지원합니다."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-"메릴랜드 대학교 생물정보학과 전산생물학 연구 센터(University of Maryland Center for Bioinformatics "
-"and Computational Biology)"
+"메릴랜드 대학교 생물정보학과 전산생물학 연구 센터(University of Maryland "
+"Center for Bioinformatics and Computational Biology)"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "생명 과학 연구"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
"bacterial, plasmid, and virus protein sequences; and biological diversity in "
"nature reserves. "
msgstr ""
-"Lattice 프로젝트는 Maryland 대학교의 과학자들에게 컴퓨터 연산 능력을 제공합니다. 연구 분야: DNA 서열 데이터에 기반한 "
-"진화 관계, 박테리아, 플라스미드, 바이러스의 단백질 서열, 자연보호구역의 생물학적 다양성"
+"Lattice 프로젝트는 Maryland 대학교의 과학자들에게 컴퓨터 연산 능력을 제공합니"
+"다. 연구 분야: DNA 서열 데이터에 기반한 진화 관계, 박테리아, 플라스미드, 바이"
+"러스의 단백질 서열, 자연보호구역의 생물학적 다양성"
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "스위스 열대 연구소(The Swiss Tropical Institute)"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "전염병학"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -588,20 +623,22 @@ msgid ""
"populations with a diverse set of parameters related to biological and "
"social factors that influence the distribution of the disease. "
msgstr ""
-"전염 개체들의 시뮬레이션과 말라리아가 건강에 끼치는 영향은 말라리아 통제를 위한 중요한 수단입니다. 이는 현재 개발되고 있거나 시험 중인 "
-"새로운 백신, 화학요법, 모기장을 제공하기 위한 최적화된 전략을 정하기 위해서 이용될 수 있습니다. 이러한 모델은 컴퓨터에 매우 "
-"의존해야 되며, 질병 분포에 영향을 미치는 생물학적, 사회적 요인들이 관련된 인자를 포함한 여러 종류의 조건을 갖춘 대규모 인구 집단의 "
-"시뮬레이션이 요구됩니다."
-
-#: projects.inc:159
+"전염 개체들의 시뮬레이션과 말라리아가 건강에 끼치는 영향은 말라리아 통제를 위"
+"한 중요한 수단입니다. 이는 현재 개발되고 있거나 시험 중인 새로운 백신, 화학요"
+"법, 모기장을 제공하기 위한 최적화된 전략을 정하기 위해서 이용될 수 있습니다. "
+"이러한 모델은 컴퓨터에 매우 의존해야 되며, 질병 분포에 영향을 미치는 생물학"
+"적, 사회적 요인들이 관련된 인자를 포함한 여러 종류의 조건을 갖춘 대규모 인구 "
+"집단의 시뮬레이션이 요구됩니다."
+
+#: projects.inc:170
msgid "University of Washington"
msgstr "워싱턴 대학교"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "생물학"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -610,37 +647,38 @@ msgid ""
"efforts at designing new proteins to fight diseases such as HIV, Malaria, "
"Cancer, and Alzheimer's"
msgstr ""
-"단백질의 3차원 형태를 파악하는 연구는 궁극적으로 특정 질병의 치료법을 이끌어낼 수 있을지도 모릅니다. Rosetta at home을 "
-"실행함으로써 여러분의 도움 없이는 시도할 수 없었던 방법으로 연구를 진행하고 있습니다. 따라서 여러분은 저희 연구의 속도를 높이고 "
-"확장하는 것을 도울 수 있습니다. 또한 HIV, 말라리아, 암, 알츠하이머 병과 같은 질환과 싸울 새로운 단백질의 설계를 도와줄 수 "
-"있습니다."
+"단백질의 3차원 형태를 파악하는 연구는 궁극적으로 특정 질병의 치료법을 이끌어"
+"낼 수 있을지도 모릅니다. Rosetta at home을 실행함으로써 여러분의 도움 없이는 시"
+"도할 수 없었던 방법으로 연구를 진행하고 있습니다. 따라서 여러분은 저희 연구"
+"의 속도를 높이고 확장하는 것을 도울 수 있습니다. 또한 HIV, 말라리아, 암, 알츠"
+"하이머 병과 같은 질환과 싸울 새로운 단백질의 설계를 도와줄 수 있습니다."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "비엔나 대학교"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-"단백질 사이의 유사성을 계산합니다. SIMAP는 많은 생명 정보학 연구 프로젝트에게 중요한 역할을 하는 결과 값들의 공공 데이터베이스를 "
-"제공합니다."
+"단백질 사이의 유사성을 계산합니다. SIMAP는 많은 생명 정보학 연구 프로젝트에"
+"게 중요한 역할을 하는 결과 값들의 공공 데이터베이스를 제공합니다."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "지구 과학"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "옥스퍼드 대학교"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "기후 연구"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -651,20 +689,32 @@ msgid ""
"cycle. This will allow us to explore how climate may change in the next "
"century under a wide range of different scenarios."
msgstr ""
-"최첨단 기후 모델로 만들어진 근사값을 추측합니다. 우리는 해당 모델을 여러 번 실행시켜서, 근사값을 조금씩 수정함에 따라 모델이 어떻게 "
-"반응하는지를 알아내려고 하고 있습니다.(근사값이 비현실적인 값이 되지 않을 만큼 조금씩만 변화시킵니다) 이 것은 우리의 모델이 작은 "
-"변화나 이산화탄소 및 유황순환의 변화에 얼마나 민감한지 이해할 수 있게 해줍니다. 또한 우리에게 기후가 다른 시나리오에서 넓은 지역에 "
-"걸쳐 다음 세기에 어떻게 변할 것인지 탐색할 수 있게 해줄 것입니다."
-
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "천문학, 물리학, 화학"
+"최첨단 기후 모델로 만들어진 근사값을 추측합니다. 우리는 해당 모델을 여러 번 "
+"실행시켜서, 근사값을 조금씩 수정함에 따라 모델이 어떻게 반응하는지를 알아내려"
+"고 하고 있습니다.(근사값이 비현실적인 값이 되지 않을 만큼 조금씩만 변화시킵니"
+"다) 이 것은 우리의 모델이 작은 변화나 이산화탄소 및 유황순환의 변화에 얼마"
+"나 민감한지 이해할 수 있게 해줍니다. 또한 우리에게 기후가 다른 시나리오에서 "
+"넓은 지역에 걸쳐 다음 세기에 어떻게 변할 것인지 탐색할 수 있게 해줄 것입니다."
+
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "자연 과학"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "기계 공학"
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr "현재 저희는 52 바 트로스라는 구조물의 최적 설계안을 계산하고 있습니다"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "천문학"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -673,19 +723,21 @@ msgid ""
"star formation history) on a resolved pixel-by-pixel basis using spectral "
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-"저희는 근처 우주의 다파장 UV 광학 NIR 은하 지도를 생성하기 위해 GALEX, Pan-STARRS1, WISE의 스펙트럼 커버리지를 "
-"통합합니다. 저희는 분산 컴퓨팅 모드에서 스펙트럼 에너지 분포(SED) 피팅 기술을 사용한, 분해된 개별 픽셀 정보상의 물리적 "
-"파라메터들(예를 들어 항성의 질량 면밀도, 항성 생성률의 면밀도, 감쇠, 일차 항성의 형성 이력)을 측량합니다."
+"저희는 근처 우주의 다파장 UV 광학 NIR 은하 지도를 생성하기 위해 GALEX, Pan-"
+"STARRS1, WISE의 스펙트럼 커버리지를 통합합니다. 저희는 분산 컴퓨팅 모드에서 "
+"스펙트럼 에너지 분포(SED) 피팅 기술을 사용한, 분해된 개별 픽셀 정보상의 물리"
+"적 파라메터들(예를 들어 항성의 질량 면밀도, 항성 생성률의 면밀도, 감쇠, 일차 "
+"항성의 형성 이력)을 측량합니다."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "텍사스 대학교 오스틴 캠퍼스(University of Texas at Austin)"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "화학"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -697,42 +749,48 @@ msgid ""
"single event of interest can be expected to occur. Our research group is "
"interested in calculating the long time dynamics of systems."
msgstr ""
-"이론화학, 응집물질물리학, 재료과학에서의 일반적인 문제는 화학 반응이나 확산이 발생할 때 원자 단위 체계에서 일어나는 시간 변화를 "
-"계산하는 것입니다. 일반적으로 우리가 관측하려는 사건은 훨씬 드물게 발생합니다.(원자의 진동속도보다 비교할 수 없을 정도로 느립니다) 즉 "
-"원자 각각의 운동을 직접 시뮬레이션다면, 관측하려는 사건을 단 한 번 발생시키려고 하는 데만도 현존하는 가장 빠른 컴퓨터로 수천 년이 "
-"걸릴 정도입니다. 저희 연구 단체에서는 체계의 장시간 역학을 계산하는 것에 흥미를 갖고 있습니다."
-
-#: projects.inc:240
+"이론화학, 응집물질물리학, 재료과학에서의 일반적인 문제는 화학 반응이나 확산"
+"이 발생할 때 원자 단위 체계에서 일어나는 시간 변화를 계산하는 것입니다. 일반"
+"적으로 우리가 관측하려는 사건은 훨씬 드물게 발생합니다.(원자의 진동속도보다 "
+"비교할 수 없을 정도로 느립니다) 즉 원자 각각의 운동을 직접 시뮬레이션다면, 관"
+"측하려는 사건을 단 한 번 발생시키려고 하는 데만도 현존하는 가장 빠른 컴퓨터"
+"로 수천 년이 걸릴 정도입니다. 저희 연구 단체에서는 체계의 장시간 역학을 계산"
+"하는 것에 흥미를 갖고 있습니다."
+
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
-msgstr "일리노이 대학교 어바나-샴페인<br />(University of Illinois at Urbana-Chamapign)"
+msgstr ""
+"일리노이 대학교 어바나-샴페인<br />(University of Illinois at Urbana-"
+"Chamapign)"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-"Cosmology at Home의 목표는 우리 우주를 가장 잘 기술할 수 있는 모델을 찾고 사용 가능한 천문학적 입자 물리학 데이터와 일치하는 "
-"모델의 범위를 찾습니다."
+"Cosmology at Home의 목표는 우리 우주를 가장 잘 기술할 수 있는 모델을 찾고 사용 "
+"가능한 천문학적 입자 물리학 데이터와 일치하는 모델의 범위를 찾습니다."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "렌셀러 폴리테크닉 대학교(Rensselaer Polytechnic Institute)"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-"Milkyway at Home의 목표는 슬론 디지털 스카이 탐사(Sloan Digital Sky Survey)에서 수집된 데이터를 사용해서 "
-"은하수 은하의 가장 정확한 3차원 모델을 만드는 것입니다."
+"Milkyway at Home의 목표는 슬론 디지털 스카이 탐사(Sloan Digital Sky Survey)에서 "
+"수집된 데이터를 사용해서 은하수 은하의 가장 정확한 3차원 모델을 만드는 것입니"
+"다."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "네덜란드 Leiden 대학교"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -741,22 +799,24 @@ msgid ""
"argon, or to test the validity of the ideal gas law by actually doing the "
"simulations through the grid."
msgstr ""
-"표면 과학 계산은 고전 역학을 이용합니다. Leiden Classical은 기여자, 학생, 다른 과학자에게 가각 개인적으로 한 계산을 "
-"그리드로 제출할 수 있게 해줍니다. 각 유저는 고전 역학 작업을 위한 개인적인 대기열을 가지고 있습니다. 이런 방식으로 학생들은 액체 "
-"아르곤을 시뮬레이션하기 위해서 또는 실제로 그리드를 통해서 시뮬레이션을 실행함으로써 이상기체 법칙의 타당성을 시험하기 위해 그리드를 "
-"이용할 수 있습니다."
-
-#: projects.inc:272
+"표면 과학 계산은 고전 역학을 이용합니다. Leiden Classical은 기여자, 학생, 다"
+"른 과학자에게 가각 개인적으로 한 계산을 그리드로 제출할 수 있게 해줍니다. 각 "
+"유저는 고전 역학 작업을 위한 개인적인 대기열을 가지고 있습니다. 이런 방식으"
+"로 학생들은 액체 아르곤을 시뮬레이션하기 위해서 또는 실제로 그리드를 통해서 "
+"시뮬레이션을 실행함으로써 이상기체 법칙의 타당성을 시험하기 위해 그리드를 이"
+"용할 수 있습니다."
+
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-"위스콘신-밀워키 대학교(Univ. of Wisconsin - Milwaukee), 막스 플랑크 연구소(Max Planck "
-"Institute)"
+"위스콘신-밀워키 대학교(Univ. of Wisconsin - Milwaukee), 막스 플랑크 연구소"
+"(Max Planck Institute)"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "천체물리학"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -764,18 +824,20 @@ msgid ""
"supported by the American Physical Society (APS) and by a number of "
"international organizations."
msgstr ""
-"LIGO 및 GEO 중력파 감지기와 아레시보 전파 망원경에서 수집된 데이터를 사용해서 회전하는 중성자 별(펄서라고도 합니다)을 찾습니다. "
-" Einstein at Home은 미국 물리학 협회(APS) 및 수많은 국제 단체로부터 지원을 받는 2005 세계 과학의 해 프로젝트입니다."
+"LIGO 및 GEO 중력파 감지기와 아레시보 전파 망원경에서 수집된 데이터를 사용해"
+"서 회전하는 중성자 별(펄서라고도 합니다)을 찾습니다. Einstein at Home은 미국 물"
+"리학 협회(APS) 및 수많은 국제 단체로부터 지원을 받는 2005 세계 과학의 해 프로"
+"젝트입니다."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (유럽 입자 물리 연구소)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "물리학"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -783,28 +845,30 @@ msgid ""
"investigate on particles proprieties. LHC at home runs simulations to improve "
"the design of LHC and its detectors."
msgstr ""
-"대형 강입자 가속기(LHC)는 CERN(유럽 입자 물리 연구소)에 위치한 소립자 가속기이며, 세계에서 가장 큰 입자 물리학 "
-"연구시설입니다. 이것은 입자의 속성을 조사하기 위해서 건설한 것 중 가장 강력한 장치입니다. LHC at home은 LHC 및 검출기의 설계를 "
-"향상시키기 위한 시뮬레이션을 수행합니다."
+"대형 강입자 가속기(LHC)는 CERN(유럽 입자 물리 연구소)에 위치한 소립자 가속기"
+"이며, 세계에서 가장 큰 입자 물리학 연구시설입니다. 이것은 입자의 속성을 조사"
+"하기 위해서 건설한 것 중 가장 강력한 장치입니다. LHC at home은 LHC 및 검출기의 "
+"설계를 향상시키기 위한 시뮬레이션을 수행합니다."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-"이 프로젝트는 CERN이 개발한, 완전히 독립된 LHC 사건(event) 물리학 시뮬레이션용 가상 머신 기술을 기여자 컴퓨터 상에서 "
-"사용합니다. 따라서 여러분은 컴퓨터에 VirtualBox를 설치해야 됩니다."
+"이 프로젝트는 CERN이 개발한, 완전히 독립된 LHC 사건(event) 물리학 시뮬레이션"
+"용 가상 머신 기술을 기여자 컴퓨터 상에서 사용합니다. 따라서 여러분은 컴퓨터"
+"에 VirtualBox를 설치해야 됩니다."
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "캘리포니아 대학교 버클리 캠퍼스(University of California, Berkeley)"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "천체물리학, 우주생물학"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -812,156 +876,164 @@ msgid ""
"signals from space. Such signals are not known to occur naturally, so a "
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-"SETI(Search for Extraterrestrial Intelligence, 외계 지성체 탐사)는 지구 밖에 존재하는 지성체를 "
-"감지하는 데 목표를 둔 과학 분야입니다. 라디오 SETI로 알려진 한가지 접근 방법은 우주에서 오는, 좁은 대역폭의 전파를 듣기 위해서 "
-"전파 망원경을 사용합니다. 어떤 신호는 자연적으로 발생하지 않는다고 알려져 있습니다. 따라서 이 것의 감지는 외계 기술의 증거를 제공해 "
-"줄 수도 있습니다."
+"SETI(Search for Extraterrestrial Intelligence, 외계 지성체 탐사)는 지구 밖에 "
+"존재하는 지성체를 감지하는 데 목표를 둔 과학 분야입니다. 라디오 SETI로 알려"
+"진 한가지 접근 방법은 우주에서 오는, 좁은 대역폭의 전파를 듣기 위해서 전파 망"
+"원경을 사용합니다. 어떤 신호는 자연적으로 발생하지 않는다고 알려져 있습니다. "
+"따라서 이 것의 감지는 외계 기술의 증거를 제공해 줄 수도 있습니다."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Bielefeld 응용 과학 대학교"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "화학 공학과 나노 기술"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
"applications in medicine (such as local tumor chemotherapy) and "
"biotechnology."
msgstr ""
-"분자 자석과 제어된 나노 단위의 자력을 연구합니다. 이런 자성을 가진 분자는 의약품(예를 들어 국소암 화학 요법)과 생물 공학에 적용할 "
-"수 있는 극소형 자성 스위치 개발에 사용될 수 있을지도 모릅니다."
+"분자 자석과 제어된 나노 단위의 자력을 연구합니다. 이런 자성을 가진 분자는 의"
+"약품(예를 들어 국소암 화학 요법)과 생물 공학에 적용할 수 있는 극소형 자성 스"
+"위치 개발에 사용될 수 있을지도 모릅니다."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "여러 응용 분야"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "중국 과학원"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "물리학, 생화학, 기타"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-"CAS at home의 목적은 기여자 컴퓨팅 기술과 연구에 대한 기여자들의 생각을 채택해서 중국에 있는 과학자들을 장려하고 지원하는 것입니다."
+"CAS at home의 목적은 기여자 컴퓨팅 기술과 연구에 대한 기여자들의 생각을 채택해"
+"서 중국에 있는 과학자들을 장려하고 지원하는 것입니다."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "수학, 물리학, 진화론"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-"Yoyo at home은 BOINC와 기존 기여자 컴퓨팅 프로젝트(ECM, 뮤온, Evolution at home, distributed.net)를 "
-"중개합니다."
+"Yoyo at home은 BOINC와 기존 기여자 컴퓨팅 프로젝트(ECM, 뮤온, Evolution at home, "
+"distributed.net)를 중개합니다."
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-"MTA-SZTAKI 병렬 및 분산 시스템 연구소 (헝가리, MTA-SZTAKI Laboratory of Parallel and "
-"Distributed Systems)"
+"MTA-SZTAKI 병렬 및 분산 시스템 연구소 (헝가리, MTA-SZTAKI Laboratory of "
+"Parallel and Distributed Systems)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "유럽의 연구 프로젝트들"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
"processed by the volunteers of this project. The scientific projects covered "
"by the project include math, physics, biology, etc."
msgstr ""
-"EDGeS at Home 베타 프로젝트는 해당 프로젝트의 기여자가 처리해야할 작업 유닛을 전송하는 서비스 그리드를 허용함으로써 유럽 서비스 "
-"그리드 네트워크와 기여자 컴퓨팅을 통합합니다. 과학 프로젝트는 수학, 물리학, 생물학, 기타 등을 포함하고 있습니다."
+"EDGeS at Home 베타 프로젝트는 해당 프로젝트의 기여자가 처리해야할 작업 유닛을 전"
+"송하는 서비스 그리드를 허용함으로써 유럽 서비스 그리드 네트워크와 기여자 컴퓨"
+"팅을 통합합니다. 과학 프로젝트는 수학, 물리학, 생물학, 기타 등을 포함하고 있"
+"습니다."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "여러 스페인 대학교 및 연구소"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "스페인의 각종 연구 프로젝트"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "물리학, 재료 과학, 생물 의학 등의 연구"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM 시민 공동체(IBM Corporate Citizenship)"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "의학, 환경 및 기타 인도주의적 연구"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
"includes HIV-AIDS, cancer, tropical and neglected diseases, solar energy, "
"clean water and many more."
msgstr ""
-"세계에서 가장 큰 기여자 컴퓨팅 그리드를 통해서 인류가 직면한 가장 심각한 문제를 비영리적으로 연구합니다. 연구에는 HIV 에이즈, "
-"암, 열대 지방의 병 및 연구가 덜 된 질병, 태양 에너지, 깨끗한 물 이외에 많은 것들이 포함됩니다."
+"세계에서 가장 큰 기여자 컴퓨팅 그리드를 통해서 인류가 직면한 가장 심각한 문제"
+"를 비영리적으로 연구합니다. 연구에는 HIV 에이즈, 암, 열대 지방의 병 및 연구"
+"가 덜 된 질병, 태양 에너지, 깨끗한 물 이외에 많은 것들이 포함됩니다."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "수학, 컴퓨팅, 게임"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "컴퓨터 과학"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "수학, 물리학, 인공 지능"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "양자 컴퓨팅 시뮬레이션, 골드바흐 추측(Goldbach's conjecture)."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "암호학"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-"3가지 에니그마 원문을 해독하고자 시도합니다. 이 신호는 1942년 북대서양에서 포착되었으며 깨지지 않은 것으로 여겨지고 있습니다."
+"3가지 에니그마 원문을 해독하고자 시도합니다. 이 신호는 1942년 북대서양에서 포"
+"착되었으며 깨지지 않은 것으로 여겨지고 있습니다."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "수학"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "수학에서 풀리지 않은 Collatz 추측을 연구합니다."
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
-msgstr "캘리포니아 주립 대학교 풀러턴 캠퍼스(California State University Fullerton)"
+msgstr ""
+"캘리포니아 주립 대학교 풀러턴 캠퍼스(California State University Fullerton)"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "큰 정수의 인수 분해"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -970,39 +1042,42 @@ msgid ""
"NFS at Home is a continuation of that experience, only with integers that are "
"hundreds of digits long."
msgstr ""
-"NFS at Home은 큰 정수들을 수체선별법(Number Field Sieve)으로써 인수분해하는 래티스 시빙 절차를 시행하기 위해서, "
-"인터넷에 연결된 컴퓨터를 사용하는 연구 프로젝트입니다. 초등학교 저학년 시절에 15 = 3 * 5 혹은 35 = 5 * 7처럼 정수를 "
-"소인수로 쪼개어 본 경험을 하셨을 것입니다. NFS at Home은 이러한 경험의 연장선입니다. 단지 정수가 백자리 정도의 길이를 갖을 "
-"뿐입니다."
+"NFS at Home은 큰 정수들을 수체선별법(Number Field Sieve)으로써 인수분해하는 래티"
+"스 시빙 절차를 시행하기 위해서, 인터넷에 연결된 컴퓨터를 사용하는 연구 프로젝"
+"트입니다. 초등학교 저학년 시절에 15 = 3 * 5 혹은 35 = 5 * 7처럼 정수를 소인수"
+"로 쪼개어 본 경험을 하셨을 것입니다. NFS at Home은 이러한 경험의 연장선입니다. "
+"단지 정수가 백자리 정도의 길이를 갖을 뿐입니다."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-"빌니우스 게디미나스 공과대학교(Vilnius Gediminas Technical University)와 카우나스 기술 대학교(Kaunas "
-"University of Technology)(리투아니아)"
+"빌니우스 게디미나스 공과대학교(Vilnius Gediminas Technical University)와 카우"
+"나스 기술 대학교(Kaunas University of Technology)(리투아니아)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "소프트웨어 테스트"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
"well as others Lithuanian academic institutions. Current applications "
"involve the study of Monte-Carlo based software testing."
msgstr ""
-"이 프로젝트의 목표는 Vilnius Gediminas 공과대학교와 같은 다른 리투아니아 연구 기관들의 과학자에게 강력한 분산 컴퓨팅 "
-"플랫폼을 제공하는 것입니다. 현 응용 프로그램은 몬테 카를로 이론에 기반한 소프트웨어 테스트를 수반합니다."
+"이 프로젝트의 목표는 Vilnius Gediminas 공과대학교와 같은 다른 리투아니아 연"
+"구 기관들의 과학자에게 강력한 분산 컴퓨팅 플랫폼을 제공하는 것입니다. 현 응"
+"용 프로그램은 몬테 카를로 이론에 기반한 소프트웨어 테스트를 수반합니다."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-"Leiden 대학교 수학 연구소(Mathematical Institute of Leiden University) / Kennislink"
+"Leiden 대학교 수학 연구소(Mathematical Institute of Leiden University) / "
+"Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1012,35 +1087,38 @@ msgid ""
"problems in mathematics. If it is proven to be true, a lot of other open "
"problems can be answered directly from it."
msgstr ""
-"'ABC 삼각형'을 찾습니다: 양의 정수 a, b, c는 다음과 같다. a+b=c, a < b < c, a, b, c는 "
-"공약수가 없으며 c > rad(abc)이다. 여기서 rad(n)은 n을 구성하는 소인수들의 곱을 나타냅니다. ABC 추측은 "
-"log(c)/log(rad(abc)) > h (h는 1보다 큰 임의의 실수)를 만족하는 a, b, c는 유한하다고 말하고 있습니다. "
-"ABC 추측은 현재 수학에서 가장 큰 미해결 문제 중 하나입니다. 만약 이 것이 사실로 증명되면 이 것에서 다른 수많은 미해결 문제들의 "
-"답을 직접적으로 찾을 수 있습니다."
-
-#: projects.inc:491
+"'ABC 삼각형'을 찾습니다: 양의 정수 a, b, c는 다음과 같다. a+b=c, a < b "
+"< c, a, b, c는 공약수가 없으며 c > rad(abc)이다. 여기서 rad(n)은 n을 구성"
+"하는 소인수들의 곱을 나타냅니다. ABC 추측은 log(c)/log(rad(abc)) > h (h는 1보"
+"다 큰 임의의 실수)를 만족하는 a, b, c는 유한하다고 말하고 있습니다. ABC 추측"
+"은 현재 수학에서 가장 큰 미해결 문제 중 하나입니다. 만약 이 것이 사실로 증명"
+"되면 이 것에서 다른 수많은 미해결 문제들의 답을 직접적으로 찾을 수 있습니다."
+
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-"Primegrid는 다른 형태의 매우 큰 소수를 찾는 복수 프로젝트입니다. 그중에는 알려진 소수 중 가장 큰 소수를 찾는 프로젝트도 "
-"포함됩니다."
+"Primegrid는 다른 형태의 매우 큰 소수를 찾는 복수 프로젝트입니다. 그중에는 알"
+"려진 소수 중 가장 큰 소수를 찾는 프로젝트도 포함됩니다."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Hochschule RheinMain 응용 과학 대학교"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr "소수 증명과 관련된 두가지 추측의 반례를 찾습니다"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
-msgstr "11차원 이상에서 법칙화된 2진수 체계(행렬들로 이루어졌으며, 숫자는 벡터)를 모두 찾습니다."
+msgstr ""
+"11차원 이상에서 법칙화된 2진수 체계(행렬들로 이루어졌으며, 숫자는 벡터)를 모"
+"두 찾습니다."
#: ../html/inc/news.inc:40
msgid "Comment"
@@ -1051,257 +1129,5 @@ msgstr "코멘트"
msgid "News is available as an %sRSS feed%s"
msgstr "공지 사항은 %sRSS 피드%s로도 제공됩니다"
-#, php-format
-#~ msgid "%s for %s (%s MB)"
-#~ msgstr "%s버전 %s용 (%s MB)"
-
-#~ msgid ""
-#~ "BOINC is a program that lets you donate your idle computer time to science "
-#~ "projects like SETI at home, Climateprediction.net, Rosetta at home, World "
-#~ "Community Grid, and many others. <p> After installing BOINC on your "
-#~ "computer, you can connect it to as many of these projects as you like."
-#~ msgstr ""
-#~ "BOINC는 SETI at home, Climateprediction.net, Rosetta at home, World Community Grid "
-#~ "그리고 다른 많은 과학 프로젝트들에게 여러분의 컴퓨터 대기 시간을 기여하도록 하는 프로그램입니다. <p> BOINC를 여러분 컴퓨터에 "
-#~ "설치한 후 여러분의 취향에 따라서 이런 다양한 프로젝트에 접속하실 수 있습니다."
-
-#~ msgid "Browser default"
-#~ msgstr "브라우저 기본 설정"
-
-#, php-format
-#~ msgid ""
-#~ " Use the idle time on your computer (Windows, Mac, or Linux) to cure "
-#~ "diseases, study global warming, discover pulsars, and do many other types of "
-#~ "scientific research. It's safe, secure, and easy: %sChoose%s projects "
-#~ "%sDownload%s and run BOINC software %sEnter%s an email address and "
-#~ "password. "
-#~ msgstr ""
-#~ "질병 치료, 지구 온난화 연구, 펄서 발견 그리고 또 다른 종류의 과학연구를 위해 여러분 컴퓨터(윈도우, 맥, 리눅스)의 대기 시간을 "
-#~ "사용하십시오. 이 것은 안전하고 보안이 철저하며 쉽습니다: %s프로젝트%s를 선택하십시오 %sBOINC 소프트웨어%s를 다운로드받고 "
-#~ "실행하십시오 %semail 주소와 비밀번호%s를 입력하십시오."
-
-#~ msgid "Humanitarian research on disease, natural disasters and hunger."
-#~ msgstr "질병, 자연 재해, 기아에 대한 인도주의적 연구"
-
-#~ msgid ""
-#~ "Primegrid is generating a public sequential prime number database, and is "
-#~ "searching for large twin primes of the form k*2<sup>n</sup>+1 and "
-#~ "k*2<sup>n</sup>-1"
-#~ msgstr ""
-#~ "Primegrid는 공공 순차적인 소수 데이터베이스를 제작하고 k*2<sup>n</sup>+1"
-#~ "와 k*2<sup>n</sup>-1 형태의 큰 두 소수를 찾습니다."
-
-#~ msgid "FreeHAL"
-#~ msgstr "FreeHAL"
-
-#~ msgid "private"
-#~ msgstr "개인"
-
-#~ msgid "POEM at HOME"
-#~ msgstr "POEM at HOME"
-
-#~ msgid "Docking at Home"
-#~ msgstr "Docking at Home"
-
-#~ msgid "GPUGrid.net"
-#~ msgstr "GPUGrid.net"
-
-#~ msgid "Superlink at Technion"
-#~ msgstr "Superlink at Technion"
-
-#~ msgid "The Lattice Project"
-#~ msgstr "Lattice 프로젝트"
-
-#~ msgid "Malariacontrol.net"
-#~ msgstr "Malariacontrol.net"
-
-#~ msgid "Rosetta at home"
-#~ msgstr "Rosetta at home"
-
-#~ msgid "SIMAP"
-#~ msgstr "SIMAP"
-
-#~ msgid "Virtual Prairie"
-#~ msgstr "가상 초원(Virtual Prairie)"
-
-#~ msgid "University of Houston"
-#~ msgstr "휴스턴 대학교"
-
-#~ msgid "Study of botanical ecosystems"
-#~ msgstr "식물학 관련 생태계 이론"
-
-#~ msgid ""
-#~ "Provide ecological guidelines on the design of prairies with the best "
-#~ "potential for water purification."
-#~ msgstr ""
-#~ "수질 정화에 최적의 가능성을 가진 초원 디자인을 위해서 생태학적 가이드라인"
-#~ "을 제공합니다."
-
-#~ msgid "Climateprediction.net"
-#~ msgstr "Climateprediction.net"
-
-#~ msgid "eOn"
-#~ msgstr "eOn"
-
-#~ msgid "Orbit at home"
-#~ msgstr "Orbit at home"
-
-#~ msgid "Planetary Science Institute"
-#~ msgstr "행성 과학 연구소(Planetary Science Institute)"
-
-#~ msgid "Monitor and study the hazard posed by near-Earth asteroids"
-#~ msgstr "재앙을 초래할 위험성을 지닌 지구 접근 소행성들을 연구 및 감시"
-
-#~ msgid "Cosmology at Home"
-#~ msgstr "Cosmology at Home"
-
-#~ msgid "Milkyway at home"
-#~ msgstr "Milkyway at home"
-
-#~ msgid "Leiden Classical"
-#~ msgstr "Leiden Classical"
-
-#~ msgid "uFluids at home"
-#~ msgstr "uFluids at home"
-
-#~ msgid "Purdue University"
-#~ msgstr "퍼듀 대학교"
-
-#~ msgid "Physics/Aeronautics"
-#~ msgstr "물리학/항공학"
-
-#~ msgid ""
-#~ "The uFluids project simulates two-phase fluid behavior in microgravity "
-#~ "and microfluidics problems. Our goal is to design better satellite "
-#~ "propellant management devices and address two-phase flow in microchannel "
-#~ "and MEMS devices."
-#~ msgstr ""
-#~ "uFluids 프로젝트는 미세 중력에서의 2상 유체 활동 및 미세 유체 공학 문제를 "
-#~ "시뮬레이션합니다. 우리의 목표는 더 좋은 인공 위성 추진체 관리 장치를 설계"
-#~ "하고 마이크로 채널 및 MEMS 장치에서의 2상 흐름을 다루는 것입니다."
-
-#~ msgid "Einstein at home"
-#~ msgstr "Einstein at home"
-
-#~ msgid "LHC at home"
-#~ msgstr "LHC at home"
-
-#~ msgid "SETI at home"
-#~ msgstr "SETI at home"
-
-#~ msgid "Quantum Monte Carlo at Home"
-#~ msgstr "Quantum Monte Carlo at Home"
-
-#~ msgid "University of Muenster (Germany)"
-#~ msgstr "뮌스터 대학교 (독일)"
-
-#~ msgid ""
-#~ "Study the structure and reactivity of molecules using Quantum Chemistry."
-#~ msgstr "양자 화학을 이용한 분자 구조 및 반응성을 연구합니다."
-
-#~ msgid "Spinhenge at home"
-#~ msgstr "Spinhenge at home"
-
-#~ msgid "CAS at home"
-#~ msgstr "CAS at home"
-
-#~ msgid "Yoyo at home"
-#~ msgstr "Yoyo at home"
-
-#~ msgid "EDGeS at Home"
-#~ msgstr "EDGeS at Home"
-
-#~ msgid "Ibercivis"
-#~ msgstr "Ibercivis"
-
-#~ msgid "World Community Grid"
-#~ msgstr "World Community Grid"
-
-#~ msgid "Enigma at Home"
-#~ msgstr "Enigma at Home"
-
-#~ msgid "Collatz Conjecture"
-#~ msgstr "Collatz 추측<br />(Collatz Conjecture)"
-
-#~ msgid "NFS at home"
-#~ msgstr "NFS at home"
-
-#~ msgid "VTU at home"
-#~ msgstr "VTU at home"
-
-#~ msgid "AQUA at home"
-#~ msgstr "AQUA at home"
-
-#~ msgid "D-Wave Systems, Inc."
-#~ msgstr "D-Wave Systems, Inc."
-
-#~ msgid ""
-#~ "D-Wave's AQUA (Adiabatic QUantum Algorithms) is a research project whose "
-#~ "goal is to predict the performance of superconducting adiabatic quantum "
-#~ "computers on a variety of hard problems arising in fields ranging from "
-#~ "materials science to machine learning. AQUA at home uses Internet-connected "
-#~ "computers to help design and analyze quantum computing algorithms, using "
-#~ "Quantum Monte Carlo techniques."
-#~ msgstr ""
-#~ "D-Wave의 AQUA(단열 양자 알고리즘, Adiabatic QUantum Algorithms)은 재료과학"
-#~ "에서 기계학습까지 여러 분야에 걸쳐서 제기된 다양한 난제를 풀기 위한 초전"
-#~ "도 단열 양자 컴퓨터의 성능을 예측하는 것이 목표입니다. AQUA at home은 양자 몬"
-#~ "테 카를로 기술을 활용한 양자 컴퓨터 알고리즘 설계를 지원하고 분석하기 위해"
-#~ "서 인터넷에 연결된 컴퓨터를 사용합니다."
-
-#~ msgid "ABC at home"
-#~ msgstr "ABC at home"
-
-#~ msgid "PrimeGrid"
-#~ msgstr "PrimeGrid"
-
-#~ msgid "primaboinca"
-#~ msgstr "primaboinca"
-
-#~ msgid "SZTAKI Desktop Grid"
-#~ msgstr "SZTAKI Desktop Grid"
-
-#~ msgid "Chess960 at home"
-#~ msgstr "Chess960 at home"
-
-#~ msgid "Chess-960.org"
-#~ msgstr "Chess-960.org"
-
-#~ msgid "Game-playing"
-#~ msgstr "게임 진행"
-
-#~ msgid ""
-#~ "This project studies Chess 960, a variant of orthodox chess. In classical "
-#~ "chess the starting position of the game never changes. In Chess 960, "
-#~ "just before the start of every game, the initial configuration of the "
-#~ "chess pieces is determined randomly."
-#~ msgstr ""
-#~ "체스 960 프로젝트는 전통적 체스의 변종을 연구합니다. 전통적인 체스 게임에"
-#~ "서는 말의 시작 위치가 절대 바뀌지 않습니다. 체스 960에서는 모든 게임을 시"
-#~ "작하기 바로 전에 체스 말의 초기 위치가 무작위로 결정됩니다."
-
-#~ msgid "The current release is known to work with these Linux versions:"
-#~ msgstr "해당 리눅스 버전에서 동작하는 최신 릴리즈 버전:"
-
-#~ msgid ""
-#~ "For other Linux versions, check if a BOINC package is offered by your "
-#~ "Linux distribution."
-#~ msgstr ""
-#~ "다른 리눅스 버전이시면 여러분의 리눅스 배포판에서 BOINC 패키지를 제공하는"
-#~ "지 확인하세요."
-
-#~ msgid ""
-#~ "Alternatively, download the %1BOINC client for older Linux versions%2. "
-#~ "This doesn't have a graphical interface, but it should work on all Linux "
-#~ "systems, both x86 and x64."
-#~ msgstr ""
-#~ "대안으로서 %1구 리눅스 버전용 BOINC 클라이언트%2를 다운로드하세요. 그래픽 "
-#~ "인터페이스는 제공하지 않지만 x86과 x64를 포함한 모든 리눅스 시스템에서 동"
-#~ "작합니다."
-
-#~ msgid ""
-#~ "Note: if your computer is equipped with an Graphics Processing Unit "
-#~ "(GPU), you may be able to %suse it to compute faster%s"
-#~ msgstr ""
-#~ "참고: 만약 여러분 컴퓨터에 그래픽 처리 유닛(GPU)이 장착되어 있으면 %s연산"
-#~ "을 더 빠르게 할 수 있습니다%s"
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "천문학, 물리학, 화학"
diff --git a/locale/lt/BOINC-Android.po b/locale/lt/BOINC-Android.po
index 94f1965..76e2bc1 100644
--- a/locale/lt/BOINC-Android.po
+++ b/locale/lt/BOINC-Android.po
@@ -7,18 +7,18 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-10-22 15:28-0700\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"PO-Revision-Date: 2014-01-10 17:31+0000\n"
+"Last-Translator: Rytis Slatkevičius <rytis.s at gmail.com>\n"
"Language-Team: lt <LL at li.org>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
-"100<10 || n%100>=20) ? 1 : 2)\n"
+"100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
-"X-POOTLE-MTIME: 1386566425.0\n"
+"X-POOTLE-MTIME: 1391208487.0\n"
#. app global
msgctxt "app_name"
@@ -26,28 +26,34 @@ msgid "BOINC"
msgstr "BOINC"
#. generic. used by multiple Activities/tabs
+#, fuzzy
msgctxt "generic_loading"
msgid "Loading! Please wait…"
msgstr "로딩 중! 잠시 기다려 주세요…"
#. attach project
#. project list
+#, fuzzy
msgctxt "attachproject_list_header"
msgid "Choose a project:"
msgstr "프로젝트를 선택:"
+#, fuzzy
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
msgstr "URL로 프로젝트 추가"
+#, fuzzy
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
msgstr "프로젝트 URL 입력:"
+#, fuzzy
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
msgstr "프로젝트 추가"
+#, fuzzy
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
msgstr "프로젝트 URL를 입력하세요"
@@ -56,6 +62,7 @@ msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
msgstr "계정 관리자 추가"
+#, fuzzy
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
msgstr "인터넷 연결이 되지 않았습니다"
@@ -65,6 +72,7 @@ msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
msgstr "프로젝트 서버 연결 중…"
+#, fuzzy
msgctxt "attachproject_login_image_description"
msgid "Project logo."
msgstr "프로젝트 로고"
@@ -85,6 +93,7 @@ msgctxt "attachproject_login_header_home"
msgid "Home:"
msgstr "거점:"
+#, fuzzy
msgctxt "attachproject_login_header_url"
msgid "Website:"
msgstr "웹 사이트:"
@@ -93,14 +102,17 @@ msgctxt "attachproject_login_header_platform"
msgid "Android:"
msgstr "Android:"
+#, fuzzy
msgctxt "attachproject_login_platform_supported"
msgid "This project supports Android devices"
msgstr "이 프로젝트는 안드로이드 장치를 지원합니다"
+#, fuzzy
msgctxt "attachproject_login_platform_not_supported"
msgid "This project does not support Android devices"
msgstr "이 프로젝트는 안드로이드 장치를 지원하지 않습니다"
+#, fuzzy
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
msgstr "사용자 약관"
@@ -115,14 +127,17 @@ msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
msgstr "기존 계정으로 로그인"
+#, fuzzy
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
msgstr "이메일:"
+#, fuzzy
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
msgstr "이름:"
+#, fuzzy
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
msgstr "비밀번호:"
@@ -135,6 +150,7 @@ msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
msgstr "참여하기 위해 계정 등록:"
+#, fuzzy
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
msgstr "계정 생성을 위해 프로젝트 웹사이트 방문하기:"
@@ -143,14 +159,17 @@ msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
msgstr "현재 프로젝트에서 신규 계정 생성을 허용하지 않았습니다!"
+#, fuzzy
msgctxt "attachproject_login_button_registration"
msgid "Register"
msgstr "등록"
+#, fuzzy
msgctxt "attachproject_login_button_login"
msgid "Sign in"
msgstr "로그인"
+#, fuzzy
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
msgstr "비밀번호 분실"
@@ -327,6 +346,7 @@ msgctxt "attachproject_working_register"
msgid "Register account"
msgstr "계정 등록"
+#, fuzzy
msgctxt "attachproject_working_login"
msgid "Log in"
msgstr "로그인"
@@ -734,9 +754,10 @@ msgctxt "projects_confirm_reset_title"
msgid "Reset project"
msgstr "프로젝트 재설정"
+#, fuzzy
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr "다음 프로젝트가 재설정됩니다 괘찮습니까: "
+msgstr "다음 프로젝트가 재설정됩니다 괜찮습니까: "
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
diff --git a/locale/lt/BOINC-Client.mo b/locale/lt/BOINC-Client.mo
index 13040e2..453e6ab 100644
Binary files a/locale/lt/BOINC-Client.mo and b/locale/lt/BOINC-Client.mo differ
diff --git a/locale/lt/BOINC-Client.po b/locale/lt/BOINC-Client.po
index 440cad6..6776b5e 100644
--- a/locale/lt/BOINC-Client.po
+++ b/locale/lt/BOINC-Client.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-15 22:25-0700\n"
-"PO-Revision-Date: 2013-10-15 14:05+0000\n"
+"PO-Revision-Date: 2014-01-11 12:58+0000\n"
"Last-Translator: Rytis Slatkevičius <rytis.s at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: lt\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
"100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.5.0\n"
-"X-POOTLE-MTIME: 1381845922.0\n"
+"X-POOTLE-MTIME: 1389445096.0\n"
#: acct_mgr.cpp:450 acct_mgr.cpp:459
msgid "Message from account manager"
@@ -66,7 +66,7 @@ msgstr "Yra nauja BOINC versija."
#: current_version.cpp:94 current_version.cpp:102
msgid "Download"
-msgstr ""
+msgstr "Atsisiųsti"
#: log_flags.cpp:269 log_flags.cpp:449
msgid "Unexpected text in cc_config.xml"
@@ -169,7 +169,7 @@ msgstr "Reikalinga naujesnė BOINC versija; įdiekite naują versiją"
#, c-format
msgid ""
"Tasks for %s are available, but your preferences are set to not accept them"
-msgstr ""
+msgstr "Yra užduočių %s, bet jūsų nustatymai neleidžia jų priimti"
#: ../sched/sched_types.cpp:254
msgid "Unknown app name in app_info.xml"
diff --git a/locale/lt/BOINC-Manager.mo b/locale/lt/BOINC-Manager.mo
index 54f759d..34d1a37 100644
Binary files a/locale/lt/BOINC-Manager.mo and b/locale/lt/BOINC-Manager.mo differ
diff --git a/locale/lt/BOINC-Manager.po b/locale/lt/BOINC-Manager.po
index a3e4109..e9a244b 100644
--- a/locale/lt/BOINC-Manager.po
+++ b/locale/lt/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 4.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-09-20 10:48+0000\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: BOINC Development Team <rwalton at ssl.berkeley.edu>\n"
@@ -204,340 +204,340 @@ msgstr "Prisijungta"
msgid "Disconnected"
msgstr "Atsijungta"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Uždaryti %s langą"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Uždaryti langą"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Išeiti iš %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "Pra&nešimai\t Ctrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Rodyti pranešimus"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projektai\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Rodyti projektus"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "Užduo&tys\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Rodyti užduotis"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "P&erdavimai\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Rodyti perdavimus"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistika\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Rodyti statistiką"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Disko naudojimas\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Rodyti disko naudojimą"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "S&upaprastintas režimas...\tCTRL+SHIFT+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Rodyti supaprastintą vartotojo sąsają."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Prisijungti prie projekto ar paskyros valdytojo..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Būkite savanoriu viename ar keliuose iš daugiau kaip 30 projektų įvairiose "
"mokslo srityse"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sinchronizuoti su %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Gauti dabartinius nustatymus iš %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Prisijungti prie projekto..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Prisijungti prie projekto"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "Nus&toti naudoti %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Nebenaudoti abonemento valdiklio šio kompiuterio valdymui."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Nustatymai..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Vartotojo sąsajos ir įgaliotojo serverio nustatymai"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Skaičiavimų nustatymai..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Pakeisti skaičiavimų nustatymus"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "Veikti visada"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Darbas vykdomas nepaisant nustatymų"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Veikti pagal nustatymus"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Leisti veikti pagal nustatymus"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Sustabdyti"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Darbas sustabdomas nepaisant nustatymų"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Visada naudoti grafikos procesorių"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Leisti GPU darbą nepaisant nustatymų"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Naudoti GPU pagal nustatymus"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Leisti GPU darbą pagal nustatymus"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Sustabdyti GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Sustabdyti GPU darbą nepaisant nustatymų"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Veiksmai tinkle leidžiami bet kada"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Veiksmai tinkle galimi nepaisant nustatymų"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Veiksmai tinkle pagal nustatymus"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Leisti veiksmus tinkle pagal nustatymus"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Veiksmai tinkle sustabdyti"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Veiksmai tinkle negalimi"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Prisijungti prie kito kompiuterio, kuriame veikia %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Pasirinkti kompiuterį..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Išjungti prisijungusį klientą..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Išjungti šiuo metu prisijungusį pagrindinį klientą"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Matuoti sistemos greitį"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Matuoja sistemos procesoraus darbo našumą"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Atlikti susijungimus tinkle"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Atlikti visus laukiančius susijungimus tinkle"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "Nuskaityti nustatymų bylą"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Nuskaityti vietinių nustatymų bylą"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Nuskaityti nustatymus iš global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr ""
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Vykdyti kitą %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Įvykių žurnalas...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Rodyti diagnostikos žinutes."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &pagalba"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Rodyti informaciją apie %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s pagalba"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Rodyti informaciją apie %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Rodyti informaciją apie BOINC ir %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Apie %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Licensijų ir autorinių teisių informacija."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Byla"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Peržiūra"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Įrankiai"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Veikimas"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Papildomi"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Pagalba"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Sustabdyti %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
#, fuzzy, c-format
msgid ""
@@ -553,12 +553,12 @@ msgstr ""
"\n"
"Ar tikrai norite atsijungti nuo %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Išjungti dabartinį klientą..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -567,28 +567,28 @@ msgstr ""
"%s išjungs šiuo metu prisijungusį klientą\n"
"ir pasiūlys prisijungti prie kito kompiuterio."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
#, fuzzy, c-format
msgid "%s has successfully added %s"
msgstr "%s sėkmingai prisijungė prie %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Jungiamasi prie %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Prisijungta prie %s (%s)"
@@ -627,26 +627,26 @@ msgstr ""
"Prašome apsilankyti projekto tinklapyje ir veikti pagal ten\n"
"nurodytas instrukcijas."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Jungiamasi prie BOINC kliento. Prašome palaukti..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr ""
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "Išeiti iš %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr ""
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Atšaukti"
@@ -803,7 +803,7 @@ msgstr "%s sėkmingai atsijungė nuo interneto."
msgid "%s failed to disconnected from the Internet."
msgstr "%s nepavyko atsijungti nuo interneto."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
#, fuzzy, c-format
msgid ""
@@ -820,23 +820,23 @@ msgstr ""
"Susisiekite su savo administratoriumi, kad jis pridėtų jus į \"boinc_users\" "
"vartotojų grupę."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
"(Error code %d"
msgstr ""
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ""
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -844,70 +844,70 @@ msgstr ""
"Kad BOINC veiktų teisingai, būtina perkrauti sistemą.\n"
"Perkraukite kompiuterį ir pamėginkite dar kartą."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC valdiklis"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC valdiklis buvo automatiškai paleistas operacinės sistemos"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Paleisti BOINC tik su matoma piktograma sistemos dėkle"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr ""
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr ""
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr ""
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr ""
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
#, fuzzy
msgid "Password"
msgstr "Slaptažodis:"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Paleisti BOINC su šiais parametrais"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "atjungti BOINC saugumo vartotojus ir įgaliojimus"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"įjungti apvalkalų derinimo režimą, kad būtų įjungti apvalkalų valdiklio "
"klaidų pranešimai"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr ""
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automatinis aptikimas)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Nežinoma)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Vartotojo nustatyta)"
@@ -934,7 +934,7 @@ msgid "E&xit"
msgstr "Išeiti"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Tęsti"
@@ -1093,74 +1093,74 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&Gerai"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "neteisingas skaičius su kableliu"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "neteisingas laikas, formatas yra VV:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "neteisingas laiko intervalas, formatas yra VV:MM-VV:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "įvesta negalima reikšmė"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Patikrinimo klaida"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr ""
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr ""
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr ""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Patvirtinimas"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - nustatymai"
@@ -1177,11 +1177,11 @@ msgstr ""
"Spauskite Pašalinti, kad vėl pradėtumėte naudoti internete pasirinktus "
"nustatymus."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Pašalinti"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "išvalyti vietinius nustatymus ir uždaryti šį langą"
@@ -1201,7 +1201,7 @@ msgstr ""
msgid "exclusive applications"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "Gerai"
@@ -1214,7 +1214,7 @@ msgid "close the dialog without saving"
msgstr ""
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Pagalba"
@@ -1270,7 +1270,7 @@ msgstr ""
"skaičių"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minutes"
@@ -1286,7 +1286,7 @@ msgstr ""
msgid "percent (0 means no restriction)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Kiekvieną dieną tarp"
@@ -1294,8 +1294,8 @@ msgstr "Kiekvieną dieną tarp"
msgid "start work at this time"
msgstr "pradėti vykdyti"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "ir"
@@ -1303,43 +1303,43 @@ msgstr "ir"
msgid "stop work at this time"
msgstr "baigti vykdyti"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(be apribojimų jei vienodi)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Pirmadienis"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Antradienis"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Trečiadienis"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Ketvirtadienis"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Penktadienis"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Šeštadienis"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Sekmadienis"
@@ -1360,9 +1360,9 @@ msgstr "Sistemose su keletu procesorių naudoti daugiausiai"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Naudoti daugiausiai"
@@ -1371,230 +1371,230 @@ msgstr "Naudoti daugiausiai"
msgid "% CPU time"
msgstr "% procesoriaus laiko"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Bendri nustatymai"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Didžiausia parsiuntimo sparta"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KB/s"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Didžiausia išsiuntimo sparta"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Praleisti bylų tikrinimą"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Susijungimo nustatymai"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Klausti prieš jungiantis prie interneto"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Atsijungti pabaigus"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Disko naudojimas"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "sekundžių"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% kai kompiuteris naudojamas"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% kai kompiuteris nenaudojamas"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Pašalinti"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr ""
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projektas"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Laikas"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Pranešimas"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr ""
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr ""
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopijuoti visas žinutes į laikinąją saugyklą."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "Kopijuoti pasirinktas"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1602,7 +1602,7 @@ msgstr ""
"Kopijuoti pasirinktas žinutes į laikinąją saugyklą. Keletą žinučių galite "
"pažymėti spausdami Shift arba Command klavišus žymėjimo metu."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1610,25 +1610,25 @@ msgstr ""
"Kopijuoti pasirinktas žinutes į laikinąją saugyklą. Keletą žinučių galite "
"pažymėti spausdami Shift arba Control klavišus žymėjimo metu."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "Uždaryti"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr ""
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "Rodyti visus pranešimus"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Rodyti visų projektų žinutes"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Rodyti tik pasirinkto projekto žinutes"
@@ -1669,7 +1669,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr ""
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Atšaukti"
@@ -1677,229 +1677,229 @@ msgstr "&Atšaukti"
msgid "Don't show this dialog again."
msgstr ""
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "Negauti užduočių procesoriui"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Projekto nustatymai"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "Abonento valdiklio tinklapis"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
#, fuzzy
msgid "Project has no apps for "
msgstr "Projektas nerastas"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
#, fuzzy
msgid "Client configuration excludes "
msgstr "Vartotojo abonementų kūrimas yra išjungtas"
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr ""
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr ""
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr ""
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Bendri"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr ""
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Vartotojo vardas"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Komanda"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Resursų padalijimas"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr ""
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr ""
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr ""
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr ""
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr ""
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "taip"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr ""
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "ne"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr ""
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Jungiamasi prie projekto serverio"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
#, fuzzy
msgid "Host location"
msgstr "Kompiuterio suminiai rodikliai"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
#, fuzzy
msgid "default"
msgstr "&Nustatyti numatytus nustatymus"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Prisijungta naudojant abonemento valdiklį"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr ""
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Užbaigtas"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr ""
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr ""
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr ""
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr ""
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr ""
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr ""
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr ""
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Programa"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr ""
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Pavadinimas"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Būsena"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Gauta"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Atlikti iki"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr ""
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr ""
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Procesoriaus laikas"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Praėjęs laikas"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Numanomas likęs laikas"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Atlikta dalis"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr ""
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr ""
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr ""
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr ""
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr ""
@@ -1987,7 +1987,7 @@ msgstr "Jei nereikalingi, palikite tuščius"
msgid "User Name:"
msgstr "Vartotojo vardas:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Slaptažodis:"
@@ -2049,19 +2049,19 @@ msgstr ""
"%s aptiko pasirinktos kalbos pakeitimą. %s turi būti paleistas iš naujo, kad "
"įsigaliotų kalbos pakeitimas."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - kompiuterio pasirinkimas"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr ""
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Kompiuterio pavadinimas:"
@@ -2259,211 +2259,211 @@ msgstr "Tyrimai"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Sužinokite daugiau apie World Community Grid projektus"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr ""
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
#, fuzzy
msgid "Connecting to client"
msgstr "Iš naujo prisijungiama prie kliento."
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Gaunama sistemos būklė; prašome palaukti..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "Programa"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "veikia iš baterijų"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "kompiuteris naudojamas"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr ""
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "paros metas"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Matuojamas procesoriaus greitis"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "reikalinga vieta diske - patikrinkite nustatymus"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "kompiuteris nėra naudojamas"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr ""
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr ""
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr ""
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr ""
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
#, fuzzy
msgid "unknown reason"
msgstr "(Nežinoma)"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr ""
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nauja"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Parsiuntimas nepavyko"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Parsiunčiama"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (sustabdyta - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projektą sustabdė vartotojas"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Sustabdė vartotojas"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Sustabdyta - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr " (sustabdyta - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Laukiama atminties"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr ""
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr ""
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Vykdoma"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr ""
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Paruoštas vykdymui"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Paruoštas vykdymui"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
#, fuzzy
msgid " (Waiting for network access)"
msgstr "Laukiama atminties"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Skaičiavimo klaida"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Išsiuntimas nepavyko"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Išsiunčiama"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Atšaukė vartotojas"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Atšaukė projektas"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr ""
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Nutrauktas"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Patvirtinta"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Paruoštas perdavimui"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Klaida: neteisinga būsena \"%d\""
@@ -2518,66 +2518,66 @@ msgstr "Patikrinkite vartotojo vardą ir slaptažodį ir pabandykite dar kartą.
msgid "Check the email address and password, and try again."
msgstr "Patikrinkite el. pašto adresą ir slaptažodį ir pabandykite dar kartą."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr ""
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr ""
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Kad pasirinktumėte projektą, spragtelėkite jo vardą arba žemiau įveskite jo "
"tinklapio adresą."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "Projektai"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "Tinklapiai"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
#, fuzzy
msgid "Project URL:"
msgstr "Projekto tinklapis:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr ""
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
@@ -2586,11 +2586,11 @@ msgstr ""
msgid "Communicating with project."
msgstr "Jungiamasi prie serverio."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr ""
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Vidinė serverio klaida."
@@ -2698,7 +2698,7 @@ msgid "I agree to the terms of use."
msgstr ""
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr ""
#: UnavailablePage.cpp:183
@@ -2786,7 +2786,7 @@ msgstr "\"%s\" nėra teisingas kompiuterio pavadinimas."
msgid "'%s' does not contain a valid path."
msgstr "\"%s\" nėra teisingai nurodytas kelias."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Komandos"
@@ -2839,7 +2839,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr ""
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr ""
@@ -2856,7 +2856,7 @@ msgstr ""
"nustatymus ir galbūt daugiau darbo."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3097,136 +3097,136 @@ msgstr ""
msgid "used by other programs: "
msgstr "naudojama kitų programų: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Vartotojo suminiai rodikliai"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Vartotojo vidurkiai"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Kompiuterio suminiai rodikliai"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Kompiuterio vidurkiai"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Paskutinis atnaujinimas: prieš %.0f dienų"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Vartotojo suminiai rodikliai"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Rodyti bendrą vartotojo kreditų kiekį"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Vartotojo vidurkiai"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Rodyti vidutinį vartotojo kreditų kiekį"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Kompiuterio suminiai rodikliai"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Rodyti bendrą kompiuterio kreditų kiekį"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Kompiuterio vidurkiai"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Rodyti vidutinį kompiuterio kreditų kiekį"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Ankstesnis projektas"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Rodyti ankstesnio projekto diagramą"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Kitas projektas >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Rodyti kito projekto diagramą"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr ""
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr ""
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Peržiūros režimas"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Vienas projektas"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr ""
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr ""
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr ""
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr ""
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr ""
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
#, fuzzy
msgid "All projects (sum)"
msgstr "Visi projektai(apibendrinta)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr ""
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistika"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Atnaujinami grafikai..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr ""
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr ""
@@ -3396,10 +3396,6 @@ msgstr "Likęs laikas"
msgid "Deadline"
msgstr "Atlikti iki"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Pavadinimas"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Užduotys"
@@ -3531,42 +3527,42 @@ msgstr "Ar norite atšaukti?"
msgid "Question"
msgstr "Klausimas"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
#, fuzzy
msgid "Display the advanced graphical interface."
msgstr "Rodyti supaprastintą vartotojo sąsają."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "&Nustatyti numatytus nustatymus"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
@@ -3588,117 +3584,119 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Vykdyti užduotis tik tarp:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Jungtis prie interneto tik tarp:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr ""
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "disko vietos"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "procesoriaus"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr ""
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr ""
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr ""
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr ""
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr ""
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr ""
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (veikti visada)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr ""
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "Ar norite pašalinti visus vietinius nustatymus?"
@@ -3762,120 +3760,120 @@ msgstr ""
"Ar tikrai norite nutraukti šią užduotį '%s'?\n"
"(Pažanga: %s, Būklė: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Jūs neprisijungęs prie nė vieno projekto. Prisijunkite."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr ""
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "Užduotys"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr ""
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr ""
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr ""
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr ""
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, fuzzy, c-format
msgid "Application: %s"
msgstr "Programa:"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr ""
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr ""
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
# 84%
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
#, fuzzy, c-format
msgid "Remaining (estimated): %s"
msgstr "Likęs laikas"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr ""
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Gaunama dabartinė būsena."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Gaunamos užduotys iš serverio."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Skaičiavimai sustabdyti: veikiama iš baterijų."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Skaičiavimai sustabdyti: vartotojas aktyvus."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Skaičiavimai sustabdyti: sustabdė vartotojas."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Skaičiavimai sustabdyti: dienos laikas."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Skaičiavimai sustabdyti: matuojamas greitis."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Skaičiavimai sustabdyti."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Laukiama susijungimo su projekto serveriais."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Gaunama dabartinė būsena"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Nėra vykdymui paruoštų užduočių"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Nepavyksta prisijungti prie kliento"
@@ -3918,6 +3916,9 @@ msgstr ""
msgid "Quit %s"
msgstr ""
+#~ msgid "invalid float"
+#~ msgstr "neteisingas skaičius su kableliu"
+
#, fuzzy
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Rodyti supaprastintą vartotojo sąsają."
diff --git a/locale/lt/BOINC-Project-Generic.po b/locale/lt/BOINC-Project-Generic.po
index ed0d5d9..2257bec 100644
--- a/locale/lt/BOINC-Project-Generic.po
+++ b/locale/lt/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2012-03-10 18:30+0200\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-04-25 11:11+0000\n"
"Last-Translator: Rytis Slatkevičius <rytis.s at gmail.com>\n"
"Language-Team: \n"
"Language: lt\n"
@@ -16,11 +16,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
"100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.1.6\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
+"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
+"X-POOTLE-MTIME: 1398424289.0\n"
# The name of this language in this language
msgid "LANG_NAME_NATIVE"
@@ -32,19 +33,19 @@ msgstr "Lithuanian"
#: ../inc/bbcode_html.inc:11
msgid "Bold text: [b]text[/b] (alt+b)"
-msgstr ""
+msgstr "Pusjuodis tekstas: [b]tekstas[/b] (alt+b)"
#: ../inc/bbcode_html.inc:14
msgid "Italic text: [i]text[/i] (alt+i)"
-msgstr ""
+msgstr "Tekstas kursyvu: [i]tekstas[/i] (alt+i)"
#: ../inc/bbcode_html.inc:17
msgid "Underline text: [u]text[/u] (alt+u)"
-msgstr ""
+msgstr "Pabrauktas tekstas: [u]tekstas[/u] (alt+u)"
#: ../inc/bbcode_html.inc:20
msgid "Quote text: [quote]text[/quote] (alt+q)"
-msgstr ""
+msgstr "Citata: [quote]tekstas[/quote] (alt+q)"
#: ../inc/bbcode_html.inc:23
msgid "Code display: [code]code[/code] (alt+c)"
@@ -194,7 +195,7 @@ msgstr "Detali paieška"
# ########################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Asmeninės žinutės"
@@ -206,8 +207,8 @@ msgstr "Asmeninės žinutės"
msgid "Questions and Answers"
msgstr "Klausimai ir atsakymai"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -277,7 +278,7 @@ msgstr "Neskaityta"
msgid "Message %1"
msgstr "Žinutė %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "paslėptas"
@@ -475,7 +476,7 @@ msgstr "Tema"
# ########################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Žinutės"
@@ -484,7 +485,7 @@ msgstr "Žinutės"
msgid "Views"
msgstr "Peržiūros"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Paskutinė žinutė"
@@ -522,7 +523,7 @@ msgid "Home"
msgstr "Namai"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Darbas"
@@ -588,9 +589,9 @@ msgid "Created"
msgstr "Sukurtas"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -769,7 +770,7 @@ msgstr ""
msgid "Computer info"
msgstr "Kompiuterio informacija"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Eilė"
@@ -778,9 +779,9 @@ msgstr "Eilė"
msgid "Avg. credit"
msgstr "Vid. kreditai"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -868,8 +869,8 @@ msgstr ""
msgid "Computer ID"
msgstr "Kompiuterio ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -907,7 +908,7 @@ msgstr "Rašyti"
# ########################################
# Private messages
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Siųsti asmeninę žinutę"
@@ -1636,7 +1637,7 @@ msgstr "Atlikimo laikas<br />arba galutinis terminas"
msgid "explain"
msgstr "paaiškinti"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Būsena"
@@ -1717,8 +1718,9 @@ msgid "State"
msgstr "Būsena"
#: ../inc/result.inc:747
+#, fuzzy
msgid "Task name:"
-msgstr ""
+msgstr "Užduoties pavadinimas"
#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
@@ -1732,9 +1734,9 @@ msgstr "Raktiniai žodžiai"
msgid "Find teams with these words in their names or descriptions"
msgstr "Rasti komandas su šiais žodžiais pavadinimuose ar aprašymuose"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1742,7 +1744,7 @@ msgstr "Rasti komandas su šiais žodžiais pavadinimuose ar aprašymuose"
msgid "Country"
msgstr "Valstybė"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Komandos tipas"
@@ -1770,8 +1772,8 @@ msgstr "Prašytas jūsų"
msgid "founder response deadline is %1"
msgstr "laikas, skirtas įkūrėjui atsakyti, yra %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Nėra"
@@ -1795,27 +1797,27 @@ msgstr "Aprašymas"
msgid "Web site"
msgstr "Tinklapis"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Tarpprojektinė statistika"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipas"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forumas"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Temos"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Prisijungti prie komandos"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1824,79 +1826,79 @@ msgstr ""
"prisijungus prie komandos jos įkūrėjas gaus priėjimą prie jūsų el. pašto "
"adreso."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nauji dalyviai nepriimami"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Laukiamas įkūrėjo pakeitimas"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Atsakyti per %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Komandos įkūrėjo pakeitimas"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Dalyviai"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Įkūrėjas"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administratoriai"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nauji nariai per paskutinę dieną"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Iš viso narių"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "peržiūrėti"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktyvūs nariai"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Nariai, turintys kreditų"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administratorius"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Kiti %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Tokios komandos nėra."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Šiam veiksmui atlikti turite būti įkūrėju."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Šiai operacijai atlikti turite būti komandos administratoriumi."
@@ -1906,7 +1908,7 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1914,47 +1916,47 @@ msgstr ""
"%1Pastaba%2: jei įkursite komandą, jūsų nustatymai (resursų padalijimas, "
"vaizdo nustatymai) bus prieinami viešai."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Komandos pavadinimas, tekstinė versija"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nenaudokite HTML žymių."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Komandos pavadinimas, HTML versija"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Galite naudoti %1kai kurias HTML žymes%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Jei nežinote HTML, palikite šį lauką tuščią."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Komandos tinklapio adresas"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "be \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Ši nuoroda bus rodoma komandos puslapyje šiame tinklapyje."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Komandos aprašymas"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1989,7 +1991,7 @@ msgid "Computers on this account"
msgstr "Abonementui priskirti kompiuteriai"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Peržiūrėti"
@@ -2006,8 +2008,8 @@ msgstr "Tarpprojektinė statistika"
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Komanda"
@@ -2036,7 +2038,7 @@ msgstr "Abonemento informacija"
msgid "Email address"
msgstr "El. pašto adresas"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "Tinklapis"
@@ -2044,7 +2046,7 @@ msgstr "Tinklapis"
msgid "Postal code"
msgstr "Pašto kodas"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 narys nuo"
@@ -2066,7 +2068,7 @@ msgstr "slaptažodį"
msgid "other account info"
msgstr "kitą abonemento informaciją"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Vartotojo ID"
@@ -2075,8 +2077,9 @@ msgid "Used in community functions"
msgstr "Naudojama bendruomenės funkcijose"
#: ../inc/user.inc:216 ../user/weak_auth.php:25
+#, fuzzy
msgid "Account keys"
-msgstr ""
+msgstr "Abonemento raktas"
#: ../inc/user.inc:221
msgid "Preferences"
@@ -2111,100 +2114,100 @@ msgstr "%1 nustatymai"
msgid "Community"
msgstr "Bendruomenė"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Ištrinti"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Sukurti"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Aprašymas"
# ########################################
# Forum
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 žinučių"
# ########################################
# Apps page (apps.php)
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Pranešimai"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Palikti komandą"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administruoti"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(laukiamas įkūrėjo pakeitimas)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Komandos narys"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "raskite komandą"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Įkūrėjas, tačiau ne narys"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Rasti draugus"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Draugai"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Kompiuteriai"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Suteikęs paramą"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Susisiekti"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Šis asmuo yra draugas"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Nutraukti draugystę"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Laukiama patvirtinimo"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Pridėti draugą"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2213,12 +2216,13 @@ msgid "log out"
msgstr "atsijungti"
#: ../inc/util.inc:133
+#, fuzzy
msgid "log in"
-msgstr ""
+msgstr "Prisijungti"
#: ../inc/util.inc:204 ../user/login_form.php:30 ../user/login_form.php:66
msgid "Log in"
-msgstr ""
+msgstr "Prisijungti"
# ########################################
# "Your account" page (home.php)
@@ -2280,9 +2284,9 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
-msgstr ""
+msgstr "Likite prisijungęs šiame kompiuteryje"
#: ../user/account_finish.php:34
msgid "Finish account setup"
@@ -2485,7 +2489,7 @@ msgstr ""
msgid "User of the day"
msgstr "Dienos dalyvis"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Būsena serveryje"
@@ -4552,9 +4556,8 @@ msgstr ""
# ########################################
# "Your account" page (home.php)
#: ../user/get_passwd.php:25
-#, fuzzy
msgid "Forgot your account info?"
-msgstr "kitą abonemento informaciją"
+msgstr "Pamiršote prisijungimo informaciją?"
#: ../user/get_passwd.php:28
msgid ""
@@ -4572,6 +4575,8 @@ msgid ""
"2) If you forgot your account's email address, or you can't receive email "
"there:"
msgstr ""
+"2) Jei pamiršote elektroninio pašto adresą arba į jį nebegalite gauti "
+"elektroninių laiškų:"
#: ../user/get_passwd.php:47
msgid ""
@@ -5075,7 +5080,7 @@ msgstr "El. pašto adresas:"
#: ../user/login_form.php:45
msgid "forgot email address?"
-msgstr ""
+msgstr "pamiršote elektroninio pašto adresą?"
#: ../user/login_form.php:48
msgid "Password:"
@@ -5083,7 +5088,7 @@ msgstr "Slaptažodis:"
#: ../user/login_form.php:48
msgid "forgot password?"
-msgstr ""
+msgstr "pamiršote slaptažodį?"
#: ../user/login_form.php:51
msgid "Stay logged in"
@@ -5091,7 +5096,7 @@ msgstr ""
#: ../user/login_form.php:62
msgid "or %1create an account%2."
-msgstr ""
+msgstr "arba %1užsiregistruokite%2."
#: ../user/merge_by_name.php:31
msgid "Processing %1"
@@ -5511,137 +5516,137 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Projekto būsena"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Užduočių rinkiniai, laukiantys patikrinimo"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Užduočių rinkiniai, laukiantys apdorojimo"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Užduočių rinkiniai, laukiantys failų trynimo"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Užduotys, laukiančios failų trynimo"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# ########################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "programa"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "neišsiųsta"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "vykdoma"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5890,6 +5895,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/lt/BOINC-Setup.mo b/locale/lt/BOINC-Setup.mo
index 21e5035..b077e9b 100644
Binary files a/locale/lt/BOINC-Setup.mo and b/locale/lt/BOINC-Setup.mo differ
diff --git a/locale/lt/BOINC-Setup.po b/locale/lt/BOINC-Setup.po
index 0b2c02e..c515384 100644
--- a/locale/lt/BOINC-Setup.po
+++ b/locale/lt/BOINC-Setup.po
@@ -6,36 +6,39 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-01-11 13:01+0000\n"
+"Last-Translator: Rytis Slatkevičius <rytis.s at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.5\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
+"X-POOTLE-MTIME: 1389445286.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
#, c-format
msgid "Sorry, this version of %s requires system 10.5 or higher."
-msgstr ""
+msgstr "Atsiprašome, šiai %s versijai reikia sistemos 10.5 ar naujesnės."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
-msgstr ""
+msgstr "Taip"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
-msgstr ""
+msgstr "Ne"
#: PostInstall.cpp:133
msgid "Should BOINC run even when no user is logged in?"
-msgstr ""
+msgstr "Ar BOINC turėtų veikti kai nėra prisijungęs joks vartotojas?"
#: PostInstall.cpp:1416
#, c-format
@@ -52,43 +55,54 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
-msgstr ""
+msgstr "Gerai"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
-msgstr ""
+msgstr "Leidimų klaida paleidžiant iš naujo"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
+"Pašalinimas gali užtrukti keletą minučių.\n"
+"Prašome palaukti."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
"\n"
"This will remove the executables but will not touch %s data files."
msgstr ""
+"Ar tikrai norite pašalinti %s iš kompiuterio?\n"
+"\n"
+"Tai pašalins programą bet paliks %s duomenų failus."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
-msgstr ""
+msgstr "Atšaukta: %s nebuvo pakeistas."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
-msgstr ""
+msgstr "Įvyko klaida: klaidos kodas %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +114,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +122,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
-msgstr ""
+msgstr "Atšaukti"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
-msgstr ""
+msgstr "Tęsti..."
diff --git a/locale/lt/BOINC-Web.mo b/locale/lt/BOINC-Web.mo
index 097e844..efb588c 100644
Binary files a/locale/lt/BOINC-Web.mo and b/locale/lt/BOINC-Web.mo differ
diff --git a/locale/lt/BOINC-Web.po b/locale/lt/BOINC-Web.po
index 1b90015..2bd7639 100644
--- a/locale/lt/BOINC-Web.po
+++ b/locale/lt/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2012-03-10 18:30+0200\n"
"Last-Translator: Rytis Slatkevičius <rytis.s at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -434,17 +434,17 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Kognityvinis mokslas ir dirbtinis intelektas"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
#, fuzzy
msgid "Private"
msgstr "privatus"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Dirbtinis intelektas"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -452,19 +452,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologija ir medicina"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -473,15 +473,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -490,15 +490,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -506,15 +506,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Molekulinės baltymų simuliacijos"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -522,31 +522,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Izraelis"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Genetinių sąsajų analizė"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Gamtos mokslų tyrimai"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -554,15 +554,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologija"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -573,15 +573,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologija"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -591,11 +591,11 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -605,19 +605,19 @@ msgstr ""
"duomenų bazę, kuri yra svarbus aspektas daugelyje bioinformatikos tyrimų "
"projektų."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Klimato studijos"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -629,17 +629,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-# 75%
-#: projects.inc:196
-#, fuzzy
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomija, fizika, chemija"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -649,15 +657,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Chemija"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -670,33 +678,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -706,15 +714,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -723,15 +731,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -740,22 +748,22 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "University of California, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -764,15 +772,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -780,44 +788,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Europos tyrimų projektai"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -825,28 +833,28 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
#, fuzzy
msgid "Various Spanish research projects"
msgstr "Tyrimų projektai"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -854,50 +862,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -907,18 +915,18 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
#, fuzzy
msgid "Software testing"
msgstr "Programinės įrangos atnaujinimai"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -926,11 +934,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -941,23 +949,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -972,6 +980,11 @@ msgstr ""
msgid "News is available as an %sRSS feed%s"
msgstr ""
+# 75%
+#, fuzzy
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomija, fizika, chemija"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s, skirta %s (%s MB)"
diff --git a/locale/lv/BOINC-Android.po b/locale/lv/BOINC-Android.po
index ee3afa0..6dc6b41 100644
--- a/locale/lv/BOINC-Android.po
+++ b/locale/lv/BOINC-Android.po
@@ -7,1108 +7,1121 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-10-22 15:28-0700\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"PO-Revision-Date: 2014-03-09 15:07+0000\n"
+"Last-Translator: Atis <boinc.at.latvia at gmail.com>\n"
"Language-Team: lv <LL at li.org>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1394377641.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Ielādējas! Lūdzu uzgaidiet..."
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Izvēlieties projektu:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Pievienojiet projektu pēc URL"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Ievadiet projekta URL:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Pievienot projektu"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Lūdzu ievadiet projekta URL"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Pievienot konta menedžeri"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "Nav Internet savienojuma"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Savienojas ar projekta serveri..."
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Projekta logo."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Vispārīgā joma:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Konkrētā joma:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Apraksts:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Mājvieta:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Mājas lapa:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
msgid "This project supports Android devices"
-msgstr ""
+msgstr "Šis projekts atbalsta Android ierīces"
msgctxt "attachproject_login_platform_not_supported"
msgid "This project does not support Android devices"
-msgstr ""
+msgstr "Šis projekts neatbalsta Android ierīces"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Lietošanas nosacījumi"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Veidojot rēķinu šajā projektā, Jūs apņematies ievērot iepriekšminētos "
+"nosacījumus."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Pieteikties ar esošu kontu"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "e-Pasts:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Vārds:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Parole:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Vai vēl neesat"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Lai piedalītos ir jāreģistrē konts:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Apmeklējiet projekta mājas lapu, lai reģistrētu kontu:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Projekts neļaj veidot jaunus kontus!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "Reģistrēt"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "Pieteikties"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Aizmirsu paroli"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Savienojums ar projektu neizdevās!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Pievienots"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Konta reģistrācija"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Projekts:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "e-Pasts:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Vārds:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Komanda:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Parole:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "... atkārtojiet:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Izveidot"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Pievienot konta menedžeri"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Lietotājs:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Parole:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "... atkārtojiet:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Pievienot"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "Lietotājs nav atrasts"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Parole ir par īsu"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Savienojuma kļūme"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Paroles nesakrīt"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Lūdzu, ievadiet URL"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Lūdzu, ievadiet e-pasta adresi"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Lūdzu, ievadiet paroli"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Lūdzu, ievadiet lietotājvārdu"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "neizdevās"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Nepieņēma lietotājvārdu"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "e-pasta adrese jau ir lietošanā"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "Projekts ir bezsaistē"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "e-pasta adrese netika pieņemta"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Parole netika pieņemta"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "Kontu izveide ir atspējota šajā projektā"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "Nederīgs URL"
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Atgriezties"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Pabeigt"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Veiksmīgs"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Neizdevās"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "..."
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Savienoties"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Pārbaudīt kontu"
msgctxt "attachproject_working_register"
msgid "Register account"
-msgstr ""
+msgstr "Reģistrēt kontu"
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Pieteikties"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Pievienot konta menedžeri"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Sinhronizēt"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Pieskarieties šeit, lai izvēlētos projektu."
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Ak vai"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"...šim nevajadzēja notikt!\n"
+"Pieskarieties ikonai, lai mēģinātu vēlreiz."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "BOINC ikona"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Statuss"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projekti"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Uzdevumi"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Pārsūtīšana"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Preferences"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Paziņojumi"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigācija"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Skaitļo"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Paldies par piedalīšanos."
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "Atlikts"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Nav darāmā"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Gaida uzdevumus..."
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "Atlikts"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "Nospiest atskaņot, lai atsāktu tīkla sakarus un skaitļošanu."
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "Startējas..."
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Izvēlieties projektu, kurā piedalīties."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Tiek aizvērts..."
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Veiktspējas tests..."
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "projekta attēls"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Lasīt preferences..."
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Saglabāt"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Ievadiet jaunu vērtību:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "Izvēlieties:"
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Vispārīgi"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Tīkls"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Strāva"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Krātuve"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Atmiņa"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Atkļūdot"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
+msgstr "Rādīt papildu preferences un kontroles..."
msgctxt "prefs_run_on_battery_header"
msgid "Compute on Battery"
-msgstr ""
+msgstr "Skaitļot, izmantojot akumulatoru"
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Min. akumulatora līmenis"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC atliek skaitļošanu, ja akumulatora strāvas līmenis ir zem definētā."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Maksimālā akumulatora temperatūra"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC aptur skaitļošanu, ja akumulatora temperatūra ir virs definētās. Nav "
+"ieteicams šo vērtību mainīt."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "Maksimālais aizņemamās vietas apjoms"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr ""
+msgstr "Procentuāli cik daudz krātuves vietu ierīcē BOINC var izmantot? "
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "Min. rezerves apjoms krātuvei"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
+msgstr "Cik daudz brīvās vietas ir jāpaliek ierīces krātuvē?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Pārsūtīšanas dienas limits"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Ierobežo datu pārsūtīšanu, ko rada BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Pārsūtīt uzdevumus tikai izmantojot WiFi"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Startēt automātiski"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Rādīt paziņojumus, kad ir apturēts"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Izmantotie CPU kodoli"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Ierobežo CPU kodolu skaitu, ko BOINC lieto skaitļošanai."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Pauzēt, ja CPU lieto virs"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
msgstr ""
+"Nosaka, cik daudz CPU citām lietotnēm ir jāizmanto, lai BOINC apturētu "
+"skaitļošanu."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "CPU limits"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Ierobežo CPU laiku, ko BOINC var izmantot skaitļošanai."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "Operatīvās atmiņas limits"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Ierobežo cik lietotnes drīkst izmantot operatīvo atmiņu."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC klienta žurnālu karodziņi"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "GUI žurnāla ierakstu līmenis "
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Nosaka cik detalizēti būs GUI žurnāla ziņojumi."
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "Nolasa projektus..."
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Pievienot projektu"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Projekta ikona"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Kredīts"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(uz šīs ierīces)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(kopā)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Lietotāja atlikts"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Neiegūs jaunus uzdevumus"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Projekts noslēdzies - var noņemt"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "Noņems, kad pabeigs uzdevumus"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Gaida atbildi uz plānotāja pieprasījumu"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Notiek plānotāja pieprasījums"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Gaida uz ziņu uzsūkšanos"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Sazināšanās ieplānota pēc:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Projekta komandas:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Apmeklēt mājas lapu"
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Atjaunināt"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Noņemt"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Apturēt"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Atsākt"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Nepieprasīt uzdevumus"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Atļaut pieprasīt uzdevumus"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Atiestatīt"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Konta menedžera komandas:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Sinhronizēt"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Atspējot"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Noņemt projektu?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Vai esat pārliecināti, ka vēlaties noņemt"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "no BOINC?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Noņemt"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Atiestatīt projektu"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Vai esat pārliecināti, ka vēlaties atiestatīt"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Atiestatīt"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Atspējot konta menedžeri"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Vai esat pārliecināti, ka vēlaties pārstāt lietot"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Atspējot"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Uzdevuma nosaukums:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Pagājušais laiks:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(atlikts)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Termiņš:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "jauns"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "gaida lejupielādi"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "lejupielāde pabeigta"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "skaitļošanas kļūda"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "augšupielādē"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "augšupielāde pabeigta"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "pārtraukts"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "augšupielāde neizdevās"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "gatavībā"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "izpildās"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "atlikts"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "tiek atlikts"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "tiek atlikts"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "atlikts"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "projekts atlikts"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "gatavs ziņošanai"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Vai pārtraukt uzdevumu? "
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Pārtraukt uzdevumu:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Pārtraukt"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Atcelt"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Apstiprināšanas dialogs"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Gatavo pārsūtīšanu..."
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Augšupielādēt"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Lejupielādēt"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "atkārtot pēc"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "neizdevās"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "atlikts"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "aktīvs"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "gaida"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "projekts liek uzgaidīt"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Fails:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Atkārtot pārsūtīšanas"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Vai pārtraukt pārsūtīšanu?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "Pārtraukt failu:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Pārtraukt"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Lasa paziņojumus..."
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Žurnāla ziņu ielāde..."
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Klienta ziņas"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "GUI ziņas"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Žurnāls iekopēts starpliktuvē."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "BOINC notikumu žurnāls uz Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Skaitļošana atlikta."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "Savienojiet ierīci ar lādētāju, lai turpinātu skaitļot."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "Lietotājs ir aktīvs."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Ārpus skaitļošanas laika posma."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC veic Jūsu ierīces veiktspējas testu..."
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Trūkst vietas diskā."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Plānotā CPU drosele."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Nav nesenu lietotāja darbību."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Inicializācijas aizture."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Darbojas īpašais lietojums."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Jūsu ierīce ir aizņemta ar citiem lietojumiem."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC sasniedza tīkla pārsūtīšanas limitu."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Android apturēts."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Nav savienots ar WiFi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
+msgstr "Akumulators ir jāuzlādē pirms atsāksim skaitļošanu."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Skaitļošana tiks atsākta, kad akumulatora uzlādes līmenis sasniegs"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "pašlaik"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Gaida kamēr akumulators atdzisīs"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Atjauno skaitļošanu..."
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "manuāli."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Lietotāja prieprasīts"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Lai iegūtu darbu"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Lai ziņotu par pabeigtajiem uzdevumiem"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Lai nosūtītu uzsūkšanās ziņu"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Konta menedžera pieprasīts"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Projekta inicializācija"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Projekta pieprasīts"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Nezināms iemesls"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Atsvaidzināt"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Sūtīt kā e-pastu"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Kopēt starpliktuvē"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Notikumu žurnāls"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "Iziet no BOINC"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Atlikt"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Atsākt"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "Par"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Palīdzība"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Atgriezties"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "Par"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Versija"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "Berklijas atvērtā infrastruktūra tīklskaitļošanai"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
+"© 2003–2013 Kalifornijas Universitāte Berklijā.\n"
+"Visas tiesības aizsargātas."
diff --git a/locale/lv/BOINC-Client.mo b/locale/lv/BOINC-Client.mo
index 46a61c7..1e1bc92 100644
Binary files a/locale/lv/BOINC-Client.mo and b/locale/lv/BOINC-Client.mo differ
diff --git a/locale/lv/BOINC-Client.po b/locale/lv/BOINC-Client.po
index 947fb25..52bcb4e 100644
--- a/locale/lv/BOINC-Client.po
+++ b/locale/lv/BOINC-Client.po
@@ -7,36 +7,41 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-15 22:25-0700\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"PO-Revision-Date: 2014-03-16 21:06+0000\n"
+"Last-Translator: Atis <boinc.at.latvia at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Translate Toolkit 1.2.1\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Pootle 2.5.0\n"
+"X-POOTLE-MTIME: 1395003997.0\n"
#: acct_mgr.cpp:450 acct_mgr.cpp:459
msgid "Message from account manager"
-msgstr ""
+msgstr "Ziņojums no konta pārvaldnieka"
#: client_msgs.cpp:81
msgid "Message from server"
-msgstr ""
+msgstr "Ziņojums no servera"
#: client_state.cpp:258
msgid ""
"Some tasks need more memory than allowed by your preferences. Please check "
"the preferences."
msgstr ""
+"Daži uzdevumi prasa vairāk atmiņas, nekā atļauj Jūsu iestatījumi. Lūdzu, "
+"pārbaudiet iestatījumus."
#: client_state.cpp:520
msgid "Couldn't write state file; check directory permissions"
-msgstr ""
+msgstr "Nevarēja ierakstīt stāvokļa failā; lūdzu, pārbaudiet kataloga tiesības"
#: cs_cmdline.cpp:303
msgid "The HTTP_PROXY environment variable must specify an HTTP proxy"
-msgstr ""
+msgstr "HTTP_PROXY vides mainīgajam jādefinē HTTP starpniekserveris"
#: cs_scheduler.cpp:613
#, c-format
@@ -44,116 +49,132 @@ msgid ""
"You used the wrong URL for this project. When convenient, remove this "
"project, then add %s"
msgstr ""
+"Jūs lietojāt nepareizu URL šim projektam. Kad ērtāk, noņemiet šo projektu un "
+"pievienojiet %s"
#: cs_statefile.cpp:828 ../sched/sched_types.cpp:259
msgid "Syntax error in app_info.xml"
-msgstr ""
+msgstr "Sintakses kļūda failā app_info.xml"
#: cs_statefile.cpp:868
msgid "File referenced in app_info.xml does not exist: "
-msgstr ""
+msgstr "Fails, uz kuru atsaucas app_info.xml failā, neeksistē: "
#: current_version.cpp:91
msgid "A new version of BOINC is available."
-msgstr ""
+msgstr "Ir pieejama jauna BOINC versija."
#: current_version.cpp:94 current_version.cpp:102
msgid "Download"
-msgstr ""
+msgstr "Lejupielādēt"
#: log_flags.cpp:269 log_flags.cpp:449
msgid "Unexpected text in cc_config.xml"
-msgstr ""
+msgstr "Neparedzēts teksts failā cc_config.xml"
#: log_flags.cpp:423 log_flags.cpp:475
msgid "Unrecognized tag in cc_config.xml"
-msgstr ""
+msgstr "Neatpazīts tags failā cc_config.xml"
#: log_flags.cpp:440
msgid "Missing start tag in cc_config.xml"
-msgstr ""
+msgstr "Iztrūkst starta tags failā cc_config.xml"
#: log_flags.cpp:465
msgid "Error in cc_config.xml options"
-msgstr ""
+msgstr "Kļūda cc_config.xml faila opcijās"
#: log_flags.cpp:483
msgid "Missing end tag in cc_config.xml"
-msgstr ""
+msgstr "Iztrūkst beigu tags failā cc_config.xml"
#: ../sched/handle_request.cpp:307
msgid "Invalid or missing account key. To fix, remove and add this project."
msgstr ""
+"Nepareiza vai iztrūkst konta atsēga. Lai labotu, noņemiet un pievienojiet šo "
+"projektu."
#: ../sched/handle_request.cpp:849
msgid "Invalid code signing key. To fix, remove and add this project."
msgstr ""
+"Nepareiza koda parakstīšanas atslēga. Lai labotu, noņemiet un pievienojiet "
+"šo projektu."
#: ../sched/handle_request.cpp:859
msgid ""
"The project has changed its security key. Please remove and add this "
"project."
msgstr ""
+"Šim projektam ir mainīta drošības atslēga. Lūdzu, noņemiet un pievienojiet "
+"šo projektu."
#: ../sched/handle_request.cpp:943
msgid "This project doesn't support operating system"
-msgstr ""
+msgstr "Šis projekts neatbalsta operētājsistēmu"
#: ../sched/handle_request.cpp:969
msgid "This project doesn't support CPU type"
-msgstr ""
+msgstr "Šis projekts neatbalsta procesora (CPU) tipu"
#: ../sched/handle_request.cpp:993
msgid ""
"Your BOINC client software is too old. Please install the current version."
msgstr ""
+"Jūsu BOINC klienta programmatūra ir par vecu. Lūdzu, uzstādiet aktuālo "
+"versiju."
#: ../sched/handle_request.cpp:1259
msgid "This project doesn't support computers of type"
-msgstr ""
+msgstr "Šis projekts neatbalsta datora tipu"
#: ../sched/sched_send.cpp:1092
msgid "Upgrade to the latest driver to process tasks using your computer's GPU"
msgstr ""
+"Uzstādiet draivera jaunāko versiju, lai veiktu uzdevumus, izmantojot Jūsu "
+"datora GPU"
#: ../sched/sched_send.cpp:1099
msgid ""
"Upgrade to the latest driver to use all of this project's GPU applications"
msgstr ""
+"Uzstādiet draivera jaunāko versiju, lai lietotu visus šī projekta GPU "
+"lietojumus"
#: ../sched/sched_send.cpp:1118
msgid ""
"A newer version of BOINC is needed to use your NVIDIA GPU; please upgrade to "
"the current version"
msgstr ""
+"Lai lietotu Jūsu NVIDIA GPU nepieciešama jaunāka BOINC versija; lūdzu, "
+"atjauniniet uz aktuālo versiju"
#: ../sched/sched_send.cpp:1146
#, c-format
msgid "An %s GPU is required to run tasks for this project"
-msgstr ""
+msgstr "Lai šim projektam pildītu uzdevumus ir nepieciešams %s GPU"
#: ../sched/sched_send.cpp:1262
msgid "No tasks are available for the applications you have selected."
-msgstr ""
+msgstr "Nav uzdevumu Jūsu izvēlētiem lietojumiem."
#: ../sched/sched_send.cpp:1288
msgid "Your computer type is not supported by this project"
-msgstr ""
+msgstr "Šis projekts neatbalsta Jūsu datora tipu"
#: ../sched/sched_send.cpp:1294
msgid "Newer BOINC version required; please install current version"
-msgstr ""
+msgstr "Nepieciešama jaunāka BOINC versija; lūdzu, uzstādiet aktuālo versiju"
#: ../sched/sched_send.cpp:1305
#, c-format
msgid ""
"Tasks for %s are available, but your preferences are set to not accept them"
-msgstr ""
+msgstr "Ir pieejami uzdevumi %s, bet Jūsu preferences iestatītas tos nepieņemt"
#: ../sched/sched_types.cpp:254
msgid "Unknown app name in app_info.xml"
-msgstr ""
+msgstr "Nezināms lietojuma vārds app_info.xml failā"
#: ../sched/sched_version.cpp:214
msgid "Your app_info.xml file doesn't have a usable version of"
-msgstr ""
+msgstr "Jūsu app_info.xml fails nesatur lietojamu versiju"
diff --git a/locale/lv/BOINC-Manager.mo b/locale/lv/BOINC-Manager.mo
index 729b71d..9ed9c87 100644
Binary files a/locale/lv/BOINC-Manager.mo and b/locale/lv/BOINC-Manager.mo differ
diff --git a/locale/lv/BOINC-Manager.po b/locale/lv/BOINC-Manager.po
index 27b45cd..fb9dbce 100644
--- a/locale/lv/BOINC-Manager.po
+++ b/locale/lv/BOINC-Manager.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 5.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2012-02-19 23:33+0200\n"
-"Last-Translator: Atis <boinc_at_latvia at mac.com>\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-03-09 21:17+0000\n"
+"Last-Translator: Atis <boinc.at.latvia at gmail.com>\n"
"Language-Team: BOINC at Latvia <boinc_at_latvia at mac.com>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
"2);\n"
-"X-Generator: Pootle 2.1.6\n"
+"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SearchPath-1: clientgui/msw\n"
"X-Poedit-SearchPath-2: clientgui/gtk\n"
"X-Poedit-SearchPath-3: clientgui/mac\n"
@@ -24,13 +24,13 @@ msgstr ""
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
+"X-POOTLE-MTIME: 1394399823.0\n"
# 81%
#: AccountInfoPage.cpp:387
-#, c-format
-#, fuzzy, c-format
+#, c-format, c-format
msgid "Identify your account at %s"
-msgstr "Identificējiet jūsu kontu "
+msgstr "Identificējiet jūsu kontu %s"
#: AccountInfoPage.cpp:393
msgid ""
@@ -126,7 +126,7 @@ msgstr ""
#: AccountInfoPage.cpp:532
msgid "Account manager web site"
-msgstr ""
+msgstr "Konta menedžera mājas lapa"
#: AccountInfoPage.cpp:574 WelcomePage.cpp:348
msgid "Add project"
@@ -142,16 +142,16 @@ msgstr "Lietot konta menedžeri"
#: AccountInfoPage.cpp:585
msgid "Please enter a user name."
-msgstr ""
+msgstr "Lūdzu, ievadiet lietotājvārdu."
#: AccountInfoPage.cpp:587
msgid "Please enter an email address."
-msgstr ""
+msgstr "Lūdzu, ievadiet e-pasta adresi."
#: AccountInfoPage.cpp:597
#, c-format
msgid "Please enter a password of at least %d characters."
-msgstr ""
+msgstr "Lūdzu, ievadiet paroli, kura ir vismaz %d simbolu gara."
#: AccountInfoPage.cpp:607
msgid ""
@@ -172,19 +172,19 @@ msgstr ""
#: AccountManagerInfoPage.cpp:279
msgid "Account manager details:"
-msgstr ""
+msgstr "Konta menedžera informācija:"
#: AccountManagerInfoPage.cpp:283
msgid "Account manager &URL:"
-msgstr ""
+msgstr "Konta menedžera &URL:"
#: AccountManagerInfoPage.cpp:287
msgid "Open web page"
-msgstr ""
+msgstr "Atvērt mājas lapu"
#: AccountManagerInfoPage.cpp:290
msgid "Visit this account manager's web site"
-msgstr ""
+msgstr "Apmeklēt šī konta menedžera mājas lapu"
#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
@@ -211,340 +211,341 @@ msgstr "Savienots"
msgid "Disconnected"
msgstr "Atvienots"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Aizvērt %s logu"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Aizvērt logu"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Iziet %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "P&aziņojumi\t Ctrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Parādīt paziņojumus"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projekti\t Ctrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Parādīt projektus"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Uzdevumi\t Ctrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Parādīt uzdevumus"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Pārsūtīša&na\t Ctrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Parādīt pārsūtīšanu"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistika\t Ctrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Parādīt statistiku"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Diska lietojums\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Parādīt diska lietojumu"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Vienāršais skats...\t Ctrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Parādīt vienkāršu grafisko interfeisu."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Pievienot projektu vai konta menedžeri..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Brīvprātīgi pieteikties jebkuram vai visiem 30+ projektiem daudzās zinātnes "
"sfērās"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sinhronizēties ar %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Iegūt pašreizējos iestatījumus no %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "P&ievienot projektu..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Pievienot projektu"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "Nelie&tot %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Noņemt šo datoru no konta menedžera kontroles."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opcijas..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Konfigurēt attēlošanas opcijas un proxy iestatījumus"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Skaitļošanas &preferences..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Konfigurēt skaitļošanas preferences"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Izpildīt vienmēr"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Atļaut darbu neskatoties uz preferencēm"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Izpildīt balstoties uz &preferencēm"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Atļaut darbu saskaņā ar jūsu preferencēm"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Atlikt"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Aptur darbu neskatoties uz preferencēm"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Vienmēr lietot GPU"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Atļaut GPU darbu neskatoties uz preferencēm"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "&Lietot GPU balstoties uz preferencēm"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Atļaut GPU darbu saskaņā ar jūsu preferencēm"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Atlikt GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Pārstāt izpildīt GPU darbu neskatoties uz preferencēm"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "&Tīkls vienmēr pieejams"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Atļaut lietot tīklu neskatoties uz preferencēm"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "&Pieslēgties tīklam balstoties uz preferencēm"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Lietot tīklu saskaņā ar jūsu preferencēm"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Pi&eslēgums tīklam atlikts"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Aptur BOINC tīkla aktivitātes"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Pieslēgties citam datoram, kas izpilda %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "&Izvēlieties datoru..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Slēgt pievienoto klientu..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Slēgt pašlaik pievienoto klientu"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Palaist CPU veiktspējas te&stu"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Palaiž etalonuzdevumu, lai noteiktu procesora veiktspēju"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Iniciēt tīkla sakarus"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Iniciēt visus nenokārtotos tīkla sakarus"
# 94%
-#: AdvancedFrame.cpp:585
-#, fuzzy
+#: AdvancedFrame.cpp:589
msgid "Read config files"
-msgstr "Lasīt konfigurācijas failu"
+msgstr "Lasīt konfigurācijas failus"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
+"Lasīt konfigurācijas informāciju no cc_config.xml un jebkuriem "
+"app_config.xml failiem"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Lasīt vietējo preferenču failu"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Lasīt preferences no global_prefs_override.xml"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Palaist citu %s instanci..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Palaist citu %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Žurnāls...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Parādīt diagnostikas ziņojumus."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &palīdzība"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Parādīt informāciju par %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s palīdzība"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Parādīt informāciju par %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
-msgstr ""
+msgstr "%s &mājas lapa"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Parādīt informāciju par BOINC un %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Par %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Licencēšanas un autortiesību informācija."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Fails"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Skats"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Rīki"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Aktivitāte"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "Pap&ildu"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Palīdzība"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Pārtraukt lietot %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -559,12 +560,12 @@ msgstr ""
"\n"
"Vai jūs vēlaties pārtraukt lietot %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Slēgt pašreizējo klientu..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -573,27 +574,27 @@ msgstr ""
"%s slēgs pašreizējo klientu\n"
"un prasīs jums citu hostu kam pievienoties."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s veiksmīgi pievienoja %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Pieslēdzas pie %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Pieslēdzās pie %s (%s)"
@@ -632,26 +633,26 @@ msgstr ""
"Lūdzu, apmeklējiet projekta tīmekļa vietni un sekojiet tur norādītajām "
"instrukcijām."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Sazināšanās ar BOINC klientu. Lūdzu, uzgaidiet ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Beigt %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "I&ziet %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Sazināšanās"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Atcelt"
@@ -809,7 +810,7 @@ msgstr "%s veiksmīgi atvienojās no Internet."
msgid "%s failed to disconnected from the Internet."
msgstr "%s neizdevās atvienoties no Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -830,7 +831,7 @@ msgstr ""
" - sazinieties ar jūsu administratoru, lai pieliek jūs 'boinc_master'\n"
" lietotāju grupai."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -840,16 +841,16 @@ msgstr ""
"uzstādiet %s.\n"
"(Kļūdas kods %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " iekš "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -857,70 +858,70 @@ msgstr ""
"Nepieciešama restartēšana, lai pareizi palaistu BOINC.\n"
"Lūdzu, restartējiet datoru un mēģiniet vēlreiz."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC pārvaldnieks"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Operētājsistēma automātiski startēja BOINC pārvaldnieku"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Startēt BOINC tā, lai rīkjoslas paziņojumu laukā būtu redzama tikai ikona"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Katalogs, kas satur BOINC klienta izpildāmos failus"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC datu katalogs"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Hosta vārds vai IP adrese"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Grafiskā lietotāja intefeisa RPC porta numurs"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Parole"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Startē BOINC ar šiem izvēles argumentiem"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "Atslēgt BOINC drošības lietotāju un atļauju lietošanu"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"iestatīt ādiņu atkļūdošanas režīmā, lai atļautu ādiņu pārvaldnieka kļūdu "
"paziņojumus"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "atļautas vairākas BOINC pārvaldnieka instances"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Netiek lietots: XCode 4.2 kļūdas apiešanai"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automātiska noteikšana)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Nezināms)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Lietotāja definēts)"
@@ -947,7 +948,7 @@ msgid "E&xit"
msgstr "I&ziet"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Atsākt"
@@ -1019,6 +1020,9 @@ msgid ""
"\n"
"Click Finish to close."
msgstr ""
+"Lūdzu, vēlāk mēģiniet vēlreiz.\n"
+"\n"
+"Noklikšķiniet uz Beigt, lai aizvērtu."
#: CompletionErrorPage.cpp:225 CompletionPage.cpp:222 CompletionPage.cpp:242
#: CompletionPage.cpp:273
@@ -1091,12 +1095,11 @@ msgstr "Autortiesības:"
# 98%
#: DlgAbout.cpp:192
-#, fuzzy
msgid ""
"(C) 2003-2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-"(C) 2003-2011 Kalifornijas Universitāte Berklijā.\n"
+"(C) 2003-2013 Kalifornijas Universitāte Berklijā.\n"
"Visas tiesības aizsargātas."
#: DlgAbout.cpp:196
@@ -1104,64 +1107,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berklijas atvērtā infrastruktūra tīklskaitļošanai"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&Labi"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "nederīgs peldošais"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "nederīgs skaitlis"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "nederīgs laiks, formāts ir SS:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "nederīgs laika intervāls, formāts ir SS:MM-SS:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "noteikta nederīga ievadītā vērtība"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Validācijas kļūda"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Pievienojamie lietojumi"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' nav izpildāma lietojumprogramma."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Pievienot īpašu lietojumu"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Pievienojamā lietojuma vārds?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Pievienot īpašu lietojumu"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Lietojumu vārdiem jābeidas ar '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' jau ir sarakstā."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1169,11 +1172,11 @@ msgstr ""
"Vai tiešām vēlaties notīrīt visas lokālās preferences?\n"
"(Tas neietekmēs īpašos lietojumus.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Apstiprināšana"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferences"
@@ -1189,11 +1192,11 @@ msgstr ""
"Noklikšķināt Notīrīt, lai atjaunotu web-bāzētus iestatījumus (izņemot īpašos "
"lietojumus)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Notīrīt"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "notīrīt visas lokālās preferences un aizvērt dialoga logu"
@@ -1213,7 +1216,7 @@ msgstr "diska un atmiņas izlietojums"
msgid "exclusive applications"
msgstr "īpašās lietojumprogrammas"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "Labi"
@@ -1226,7 +1229,7 @@ msgid "close the dialog without saving"
msgstr "aizvērt dialoga logu nesaglabājot"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Palīdzība"
@@ -1282,7 +1285,7 @@ msgid ""
msgstr "veikt darbu tikai, ja neesat lietojis datoru norādīto minūšu skaitu"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minūtes"
@@ -1298,7 +1301,7 @@ msgstr "atlikt darbu, ja procesora lietojums pārsniedz šo līmeni"
msgid "percent (0 means no restriction)"
msgstr "procenti (0 nozīmē bez ierobežojumiem)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Katru dienu starp stundām"
@@ -1306,8 +1309,8 @@ msgstr "Katru dienu starp stundām"
msgid "start work at this time"
msgstr "startēt darbu šajā laikā"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "un"
@@ -1315,43 +1318,43 @@ msgstr "un"
msgid "stop work at this time"
msgstr "apstādināt darbu šajā laikā"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(bez ierobežojumiem, ja vienāds)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Nedēļas dienās savādāk:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "atzīmējiet, lai norādītu stundas šai nedēļas dienai"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Pirmdiena"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Otrdiena"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Trešdiena"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Ceturtdiena"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Piektdiena"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sestdiena"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Svētdiena"
@@ -1370,11 +1373,11 @@ msgstr "Multiprocesoru sistēmās lietot ne vairāk kā"
#: DlgAdvPreferencesBase.cpp:346
#, no-c-format
msgid "% of the processors (0 means ignore this setting)"
-msgstr ""
+msgstr "% no procesoriem (0 nozīmē ignorēt šo iestatījumu)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Lietot ne vairāk kā"
@@ -1383,73 +1386,73 @@ msgstr "Lietot ne vairāk kā"
msgid "% CPU time"
msgstr "% CPU laiks"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Vispārējas opcijas"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Maksimālais lejupielādes ātrums"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBaiti/sek."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Maksimālais augšupielādes ātrums"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Pārsūtīt ne vairāk kā"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MBaiti"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "katras"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dienas"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Minimālais darbu buferis"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "Dienu skaits uz cik censties nodrošināt ar darbu"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Maks. papildu darba buferis"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Papildus, līdz pat cik dienām nodrošināt ar darbu "
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Izlaist attēla faila pārbaudi"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"atzīmējiet, ja jūsu Internet pakalpojumu sniedzējs modificē attēlu failus"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Savienojuma opcijas"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Apstiprināt pirms pievienoties Internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1457,11 +1460,11 @@ msgstr ""
"ja atzīmēts, pirms pieslēgties Internet tiks parādīts apstiprināšanas "
"dialoga logs"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Atvienoties, kad pabeigs"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1469,150 +1472,150 @@ msgstr ""
"ja atzīmēts, BOINC beigs sarunu, kad beigsies tīkla lietošana\n"
"(saistošs tikai iezvanpieejas savienojumam)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Tīkla lietošana atļauta"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "tīkla lietošanas sākumstunda"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "tīkla lietošanas beigu stunda"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Diska izlietojums"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "maksimālais diska vietas apjoms, ko aizņem BOINC (Gigabaitos)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabaitu diska vietas"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Atstāt vismaz"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC atstāj brīvu vietu diskā (Gigabaitos), vismaz"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Brīva diska vieta gigabaitos"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "Procentuāli no kopējas diska vietas BOINC lietos ne vairāk kā"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% no kopējās diska vietas"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Uzdevumi raksta kontropunktus uz diska ne vairāk kā katras"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "sekundes"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% no lapošanas faila (virtuālā atmiņa)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Atmiņas izlietojums"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "%, kad dators ir lietošanā"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "%, kad dators ir dīkstāvē"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Atstāt lietojumus atmiņā, kamēr darbība atlikta"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "ja atzīmēts, atliktie darbi tiek paturēti atmiņā"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Pārtraukt procesora un tīkla lietošanu, ja tiek lietotas šīs "
"lietojumprogrammas:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Pievienot..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Pievienot lietojumu šim sarakstam"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Izņemt"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Izņemt lietojumu no šī saraksta"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Pēc papildu opcijām, skatīt "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Žurnāls"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekts"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Laiks"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Ziņojums"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Rādīt tikai šo projektu"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Kopēt &visu"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopēt visus ziņojumus starpliktuvē."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Kopēt &atlasīto"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1620,7 +1623,7 @@ msgstr ""
"Kopēt atlasītos ziņojumus starpliktuvē. Jūs varat atlasīt vairākas ziņas "
"pieturot Shift vai komandas taustiņus, kamēr spiežat uz ziņojumiem."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1628,24 +1631,24 @@ msgstr ""
"Kopēt atlasītos ziņojumus starpliktuvē. Jūs varat atlasīt vairākas ziņas "
"pieturot Shift vai Ctrl taustiņus, kamēr spiežat uz ziņojuma."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Aizvērt"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Saņemt palīdzību par %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Rādīt visus &ziņojumus"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Rādīt ziņojumus visiem projektiem"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Rādīt ziņojumus tikai atlasītajiem projektiem"
@@ -1698,7 +1701,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Atcerēties šo lēmumu un nerādīt vairs dialoga logu."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Atcelt"
@@ -1706,228 +1709,223 @@ msgstr "&Atcelt"
msgid "Don't show this dialog again."
msgstr "Vairs nerādīt šo dialoga logu."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
-#, fuzzy
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
-msgstr "Neņemt CPU-bāzētus uzdevumus"
+msgstr "Neņemt uzdevumus priekš"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Projekta preferences"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Konta pārvaldnieka preferences"
-#: DlgItemProperties.cpp:170
-#, fuzzy
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
-msgstr "Projektam nav CPU lietojumu"
+msgstr "Projektam nav lietojumu priekš"
-#: DlgItemProperties.cpp:173
-#, fuzzy
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
-msgstr "Klienta konta izveidošana nav iespējama"
+msgstr "Klienta konfigurācija izslēdz "
-#: DlgItemProperties.cpp:177
-#, fuzzy
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
-msgstr "CPU uzdevumu ņemšana atlikta uz"
+msgstr "darba ņemšana atlikta uz"
-#: DlgItemProperties.cpp:178
-#, fuzzy
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
-msgstr "CPU uzdevumu ņemšanas atlikšanas intervāls"
+msgstr "darba ņemšanas atlikšanas intervāls"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Projekta īpašības "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Vispārējais"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Centrālais URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Lietotāja vārds"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Komandas vārds"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Resursu daļa"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Plānotāja RPC atlikts uz"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Faila lejupielāde atlikta uz"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Failu augšupielāde atlikta uz"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Datora ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "CPU neintensitīvs"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "jā"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Atlikts caur GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "nē"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Nepieprasīt vairāk darbu"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Izveic plānotāja pieprasījumu"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Sūkties līdz"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Hosta atrašanās vieta"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "noklusētais"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Pievienots caur konta pārvaldnieku"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Noņemt, kad uzdevums pabeigts"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Pabeigts"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Kredīts"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Lietotājs"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Hosts"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Plānošana"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Plānošanas prioritāte"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
-msgstr ""
+msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Ilguma korekcijas faktors"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Īpašības uzdevumam "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Lietojums"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Darba vienības vārds"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Uzdevums"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Stāvoklis"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Saņemts"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Termiņš"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Resursi"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Plānotais skaitļošanas izmērs"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "CPU laiks kopš pēdējā kontrolpunkta"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU laiks"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Pavadītais laiks"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Plānotais atlikušais laiks"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Daļa pabeigta"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Virtuālās atmiņas izmērs"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Darba kopuma izmērs"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Katalogs"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Precesa ID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Lokāls: "
@@ -2015,7 +2013,7 @@ msgstr "Atstājiet laukus tukšus, ja nevajag"
msgid "User Name:"
msgstr "Lietotāja vārds:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Parole:"
@@ -2066,20 +2064,19 @@ msgid "%s - Language Selection"
msgstr "%s - valodas atlase"
#: DlgOptions.cpp:695
-#, c-format
-#, fuzzy, c-format
+#, c-format, c-format
msgid ""
"The %s's language has been changed. In order for this change to take "
"effect, you must restart the %s."
msgstr ""
"%s noklusētā valoda tika izmainīta. Lai tā stātos spēkā ir jāpārstartē %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Izvēlieties datoru"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2088,7 +2085,7 @@ msgstr ""
"Cita %s instance jau ir startēta uz \n"
"šī datora. Lūdzu, izvēlieties klientu, ko monitorēt."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Hosta vārds:"
@@ -2282,23 +2279,23 @@ msgstr "Pētniecība"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Uzzināt par projektiem izvietotiem World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Startē klientu"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Savienojas ar klientu"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Atjauno sistēmas stāvokli, lūdzu, uzgaidiet..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Trūkstošs lietojums"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2306,186 +2303,184 @@ msgstr ""
"Lūdzu, lejupielādējiet un instalējiet CoRD lietojumu no "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "uz akumulatoriem"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "dators ir lietošanā"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "lietotāja pieprasījums"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "dienas laiks"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Izpilda CPU veiktspējas testu"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "vajag diska vietu - pārbaudīt preferences"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "dators nav ielietots"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "startējas"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "strādā īpašais lietojums"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU ir aizņemts"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "pārsniegts tīkla joslas platuma limits"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "pieprasījums no operētājsistēmas"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "nezināms iemesls"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "trūkst GPU, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Jauns"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Lejupielāde neizdevās"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Lejupielādē"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (atlikts - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Lietotājs atlika projektu"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Lietotājs atlika uzdevumu"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Atlikts - "
# 75%
-#: MainDocument.cpp:2490
-#, fuzzy
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
-msgstr " (atlikts - "
+msgstr "GPU atlikts - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Gaida atmiņu"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Gaida koplietojamo atmiņu"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Izpildās, augsta prioritāte"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Izpildās"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (CPU neintensīvs)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Gaida uz izpildi"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Gatavs sākt"
-#: MainDocument.cpp:2522
-#, fuzzy
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
-msgstr " (Plānotāja gaidišana)"
+msgstr " (Plānotājs gaida: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Plānotāja gaidišana)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Gaida uz pieeju tīklam)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Aprēķinu kļūda"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Augšupielāde neizdevās"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Augšupielādē"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Lietotāja pārtraukts"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Projekta pārtraukts"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Pārtraukts: nav termiņa startēts"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
-msgstr ""
+msgstr "Pārtraukts: sasniegts diska vietas limits"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
-msgstr ""
+msgstr "Pārtraukts: pārsniegta izpildes laika robeža"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
-msgstr ""
+msgstr "Pārtraukts: pārsniegta operatīvās atmiņas robeža"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Pārtraukts"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Atzīts"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Gatavs ziņošanai"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Kļūda: nederīgs stāvoklis '%d'"
@@ -2540,55 +2535,55 @@ msgstr "Pārbaudiet lietotāja vārdu un paroli, un mēģiniet vēlreiz."
msgid "Check the email address and password, and try again."
msgstr "Pārbaudiet e-pasta adresi un paroli, un mēģiniet vēlreiz."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "vairāk..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Viss"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Izvēlieties projektu"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "Lai izvēlētos projektu noklikšķiniet uz tā vārda vai ierakstiet tā URL."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategorijas:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projekti:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Projekta detaļas"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Pētniecības zona:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organizācija:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Tīmekļa vietne:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Atbalstītās sistēmas:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Projekta URL:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2596,7 +2591,7 @@ msgstr ""
"Šim projektam var nebūt darba priekš jūsu tipa datora. Vai jūs vēlaties to "
"pievienot tik un tā? "
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
"Jūs jau esat pievienojuši šo projektu. Lūdzu, izvēlieties citu projektu."
@@ -2605,11 +2600,11 @@ msgstr ""
msgid "Communicating with project."
msgstr "Sazinās ar projektu."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Uz servera nepieciešamie faili nav atrasti."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Atgadījās iekšēja servera kļūda."
@@ -2626,7 +2621,6 @@ msgid "Network communication failure"
msgstr "Tīkla komunikāciju kļūda"
#: ProxyInfoPage.cpp:199
-#, fuzzy
msgid ""
"The World Community Grid - BOINC software failed to communicate\n"
"over the Internet. The most likely reasons are:\n"
@@ -2642,20 +2636,21 @@ msgid ""
"3) You are using a proxy server.\n"
"Click Next to configure BOINC's proxy settings."
msgstr ""
-"BOINC neizdevās komunicēties Internetā. Iespējams, ka tam\n"
-"par iemeslu ir:\n"
+"World Community Grid - BOINC programmatūrai neizdevās sazināties\n"
+"caur Internet. Iespējams, ka tam par iemeslu ir:\n"
"\n"
-"1) Jūsu ugunsmūra programmatūra bloķē BOINC. Jums vajag\n"
-"nokonfigurēt ugunsmūri, lai tas ļauj BOINC komunicēties caur\n"
-"80. portu. Tiklīdz tas ir darīts, noklikšķiniet Atpakaļ, lai mēģinātu\n"
-"vēlreiz.\n"
+"1) Savienojuma problēma. Pārbaudiet Jūsu tīkla vai modema pieslēgumu\n"
+"un tad nospiediet Atpakaļ, lai mēģinātu vēlreiz.\n"
"\n"
-"2) Jūs lietojat proxy serveri un BOINC ir nepieciešams par to zināt.\n"
+"2) Jūsu ugunsmūra programmatūra bloķē World Community Grid - \n"
+"BOINC programmatūru. Konfigurējiet ugunsmūri, lai tas ļauj BOINC\n"
+"un BOINC menedžerim sazināties caur 80. un 443. portu un tad\n"
+"noklikšķiniet Atpakaļ, lai mēģinātu vēlreiz.\n"
"\n"
-"Noklikšķiniet uz Nākamais, lai konfigurētu BOINC proxy parametrus.\n"
+"3) Jūs lietojat proxy serveri.\n"
+"Noklikšķiniet Nākamais, lai konfigurētu BOINC proxy parametrus."
#: ProxyInfoPage.cpp:203
-#, fuzzy
msgid ""
"BOINC failed to communicate on the Internet.\n"
"The most likely reasons are:\n"
@@ -2671,17 +2666,19 @@ msgid ""
"3) You are using a proxy server.\n"
"Click Next to configure BOINC's proxy settings."
msgstr ""
-"BOINC neizdevās komunicēties Internetā. Iespējams, ka tam\n"
-"par iemeslu ir:\n"
+"BOINC neizdevās sazināties caur Internet.\n"
+"Iespējams, ka tam par iemeslu ir:\n"
"\n"
-"1) Jūsu ugunsmūra programmatūra bloķē BOINC. Jums vajag\n"
-"nokonfigurēt ugunsmūri, lai tas ļauj BOINC komunicēties caur\n"
-"80. portu. Tiklīdz tas ir darīts, noklikšķiniet Atpakaļ, lai mēģinātu\n"
-"vēlreiz.\n"
+"1) Savienojuma problēma. Pārbaudiet Jūsu tīkla vai modema\n"
+"pieslēgumu un tad nospiediet Atpakaļ, lai mēģinātu vēlreiz.\n"
"\n"
-"2) Jūs lietojat proxy serveri un BOINC ir nepieciešams par to zināt.\n"
+"2) Jūsu ugunsmūra programmatūra bloķē BOINC.\n"
+"Konfigurējiet ugunsmūri, lai tas ļauj BOINC un BOINC\n"
+"menedžerim sazināties caur 80. portu.\n"
+"Tad noklikšķiniet Atpakaļ, lai mēģinātu vēlreiz.\n"
"\n"
-"Noklikšķiniet uz Nākamais, lai konfigurētu BOINC proxy parametrus.\n"
+"3) Jūs lietojat proxy serveri.\n"
+"Noklikšķiniet Nākamais, lai konfigurētu BOINC proxy parametrus."
#: ProxyPage.cpp:331
msgid "Proxy configuration"
@@ -2705,19 +2702,19 @@ msgstr "SOCKS proxy"
#: TermsOfUsePage.cpp:218
msgid "Terms of Use"
-msgstr ""
+msgstr "Lietošanas noteikumi"
#: TermsOfUsePage.cpp:222
msgid "Please read the following terms of use:"
-msgstr ""
+msgstr "Lūdzu, izlasiet šos lietošanas noteikumus:"
#: TermsOfUsePage.cpp:231
msgid "I agree to the terms of use."
-msgstr ""
+msgstr "Es piekrītu lietošanas noteikumiem."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr ""
+msgid "I do not agree to the terms of use."
+msgstr "Es nepiekrītu lietošanas noteikumiem."
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2761,11 +2758,11 @@ msgstr "Validācijas konflikts"
#: ValidateEmailAddress.cpp:72
msgid "Please specify an email address"
-msgstr ""
+msgstr "Lūdzu, norādiet e-pasta adresi"
#: ValidateEmailAddress.cpp:75
msgid "Invalid email address; please enter a valid email address"
-msgstr ""
+msgstr "Nederīga e-pasta adrese; lūdzu, ievadiet derīgu e-pasta adresi"
#: ValidateURL.cpp:69
msgid "Missing URL"
@@ -2806,11 +2803,10 @@ msgstr "'%s' nesatur derīgu datora vārdu."
msgid "'%s' does not contain a valid path."
msgstr "'%s' nesatur derīgu ceļu."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
-#, fuzzy
msgid "Commands"
-msgstr "&Komandas"
+msgstr "Komandas"
#: ViewMessages.cpp:88
msgid "Copy all messages"
@@ -2822,14 +2818,12 @@ msgstr "Kopēt atzīmētos ziņojumus"
# 95%
#: ViewMessages.cpp:106 ViewMessages.cpp:502
-#, fuzzy
msgid "Show only this project"
-msgstr "&Rādīt tikai šo projektu"
+msgstr "Rādīt tikai šo projektu"
#: ViewMessages.cpp:107 ViewMessages.cpp:503
-#, fuzzy
msgid "Show only the messages for the selected project."
-msgstr "Kopēt visus ziņojumus starpliktuvē"
+msgstr "Rādīt ziņojumus tikai izvēlētajam projektam."
#: ViewMessages.cpp:164
msgid "Messages"
@@ -2840,52 +2834,48 @@ msgid "Copying all messages to the clipboard..."
msgstr "Kopē visus ziņojumus starpliktuvē..."
#: ViewMessages.cpp:223
-#, fuzzy
msgid "Copying selected messages to the clipboard..."
-msgstr "Kopē visus ziņojumus starpliktuvē..."
+msgstr "Kopē izvēlētos ziņojumus starpliktuvē..."
#: ViewMessages.cpp:286
msgid "Filtering messages..."
-msgstr ""
+msgstr "Ziņu filtrēšana..."
#: ViewMessages.cpp:494
-#, fuzzy
msgid "Show all messages"
-msgstr "Kopēt visus ziņojumus"
+msgstr "Rādīt visus ziņojumus"
# 96%
#: ViewMessages.cpp:495
-#, fuzzy
msgid "Show messages for all projects."
-msgstr "Rādīt ziņojumus visiem projektiem"
+msgstr "Rādīt ziņojumus visiem projektiem."
#: ViewNotices.cpp:58 sg_DlgMessages.cpp:124
msgid "Fetching notices; please wait..."
-msgstr ""
+msgstr "Iegūst paziņojumus; lūdzu, uzgaidiet..."
#: ViewNotices.cpp:65 sg_DlgMessages.cpp:132
msgid "There are no notices at this time."
msgstr "Pašlaik nav jaunu paziņojumu"
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
-msgstr ""
+msgstr "Paziņojumi"
#: ViewProjects.cpp:174 sg_ProjectCommandPopup.cpp:61
msgid "Update"
msgstr "Aktualizēt"
#: ViewProjects.cpp:175 sg_ProjectCommandPopup.cpp:62
-#, fuzzy
msgid ""
"Report all completed tasks, get latest credit, get latest preferences, and "
"possibly get more tasks."
msgstr ""
-"Ziņot par paveikto, aktualizēt kredītpunktus un preferences, kā arī, "
-"iespējams, iegūt jaunus uzdevumus"
+"Ziņot par paveikto, iegūt pēdējos kredītpunktus un preferences, kā arī, "
+"iespējams, iegūt vairāk uzdevumus."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -2893,52 +2883,47 @@ msgstr "Atlikt"
#: ViewProjects.cpp:182 ViewProjects.cpp:722 sg_ProjectCommandPopup.cpp:68
#: sg_ProjectCommandPopup.cpp:114
-#, fuzzy
msgid "Suspend tasks for this project."
-msgstr "Atlikt uzdevumu izpildi no šī projekta"
+msgstr "Atlikt uzdevumu izpildi šim projektam."
#: ViewProjects.cpp:188 ViewProjects.cpp:741 sg_ProjectCommandPopup.cpp:73
#: sg_ProjectCommandPopup.cpp:121
msgid "No new tasks"
-msgstr ""
+msgstr "Neņemt jaunus uzdevumus"
#: ViewProjects.cpp:189 sg_ProjectCommandPopup.cpp:74
-#, fuzzy
msgid "Don't get new tasks for this project."
-msgstr "Neņemt jaunus uzdevumus no šī projekta"
+msgstr "Neņemt jaunus uzdevumus šim projektam."
#: ViewProjects.cpp:195 sg_ProjectCommandPopup.cpp:79
msgid "Reset project"
msgstr "Atjaunināt projektu"
#: ViewProjects.cpp:196 sg_ProjectCommandPopup.cpp:80
-#, fuzzy
msgid ""
"Delete all files and tasks associated with this project, and get new tasks. "
"You can update the project first to report any completed tasks."
msgstr ""
-"Izdzēst visus failus un uzdevumus, kas saistās ar šo projektu un iegūt "
-"jaunus.\n"
-"Pirms tam jūs varat aktualizēt projektu, lai ziņotu par izpildītiem "
+"Izdzēst visus failus un uzdevumus, kas saistīti ar šo projektu un iegūt "
+"jaunus. Pirms tam jūs varat aktualizēt projektu, lai ziņotu par izpildītiem "
"uzdevumiem."
#: ViewProjects.cpp:203 sg_ProjectCommandPopup.cpp:86
-#, fuzzy
msgid ""
"Remove this project. Tasks in progress will be lost (use 'Update' first to "
"report any completed tasks)."
msgstr ""
-"Atvienot datoru no šī projekta. Nepabeigtie uzdevumi tiks zaudēti (lietojiet "
-"vispirms 'Aktualizēt', lai ziņotu par jau izpildītajiem)."
+"Noņemt šo projektu. Nepabeigtie uzdevumi tiks zaudēti (lietojiet vispirms "
+"'Aktualizēt', lai ziņotu par jau izpildītajiem)."
#: ViewProjects.cpp:209 ViewWork.cpp:222 sg_ProjectCommandPopup.cpp:91
#: sg_TaskCommandPopup.cpp:78
msgid "Properties"
-msgstr ""
+msgstr "Īpašības"
#: ViewProjects.cpp:210 sg_ProjectCommandPopup.cpp:92
msgid "Show project details."
-msgstr ""
+msgstr "Rādīt projekta informāciju."
#: ViewProjects.cpp:220 ViewStatistics.cpp:450
msgid "Account"
@@ -2946,11 +2931,11 @@ msgstr "Konts"
#: ViewProjects.cpp:222
msgid "Work done"
-msgstr ""
+msgstr "Paveikts"
#: ViewProjects.cpp:223
msgid "Avg. work done"
-msgstr ""
+msgstr "Vidēji"
#: ViewProjects.cpp:225 ViewTransfers.cpp:188 ViewWork.cpp:234
msgid "Status"
@@ -2973,12 +2958,10 @@ msgid "Suspending project..."
msgstr "Atliek projektu..."
#: ViewProjects.cpp:385
-#, fuzzy
msgid "Telling project to allow additional task downloads..."
-msgstr "Ziņo projektam par atļauju uz jaunu uzdevumu lejupielādi..."
+msgstr "Ziņo projektam par atļauju lejupielādēt jaunus uzdevumus..."
#: ViewProjects.cpp:389
-#, fuzzy
msgid "Telling project to not fetch any additional tasks..."
msgstr "Ziņo projektam par nevēlēšanos saņemt papildus uzdevumus..."
@@ -2996,99 +2979,86 @@ msgid "Reset Project"
msgstr "Atjaunināt projektu"
#: ViewProjects.cpp:483
-#, fuzzy
msgid "Removing project..."
-msgstr "Atsāk projektu..."
+msgstr "Noņem projektu..."
#: ViewProjects.cpp:496 sg_ProjectCommandPopup.cpp:251
-#, c-format
-#, fuzzy, c-format
+#, c-format, c-format
msgid "Are you sure you want to remove project '%s'?"
msgstr "Vai tiešām vēlaties atjaunināt projektu '%s'?"
#: ViewProjects.cpp:502 sg_ProjectCommandPopup.cpp:257
msgid "Remove Project"
-msgstr ""
+msgstr "Noņemt projektu"
#: ViewProjects.cpp:543 ViewWork.cpp:599
msgid "Launching browser..."
msgstr "Palaiž pārlūkprogrammu..."
#: ViewProjects.cpp:718 sg_ProjectCommandPopup.cpp:111
-#, fuzzy
msgid "Resume tasks for this project."
-msgstr "Atsākt uzdevumu apstrādi šim projektam"
+msgstr "Atsākt uzdevumu apstrādi šim projektam."
#: ViewProjects.cpp:737 sg_ProjectCommandPopup.cpp:118
msgid "Allow new tasks"
-msgstr ""
+msgstr "Atļaut pieprasīt uzdevumus"
#: ViewProjects.cpp:737 sg_ProjectCommandPopup.cpp:119
-#, fuzzy
msgid "Allow fetching new tasks for this project."
-msgstr "Atļauj saņemt jaunus uzdevumus no šī projekta"
+msgstr "Atļauj saņemt jaunus uzdevumus šim projektam."
#: ViewProjects.cpp:741 sg_ProjectCommandPopup.cpp:122
-#, fuzzy
msgid "Don't fetch new tasks for this project."
-msgstr "Nepieprasīt jaunus uzdevumus no šī projekta"
+msgstr "Nepieprasīt jaunus uzdevumus šim projektam."
#: ViewProjects.cpp:1058
-#, fuzzy
msgid "Requested by user"
-msgstr "Lietotāja atlikts"
+msgstr "Lietotāja pieprasīts"
#: ViewProjects.cpp:1059
-#, fuzzy
msgid "To fetch work"
-msgstr "Neņemt jaunus uzdevumus"
+msgstr "Saņemt jaunus uzdevumus"
#: ViewProjects.cpp:1060
msgid "To report completed tasks"
-msgstr ""
+msgstr "Ziņot par pabeigtiem uzdevumiem"
#: ViewProjects.cpp:1061
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Sūtīt uzsūkšanās ziņu"
#: ViewProjects.cpp:1062
-#, fuzzy
msgid "Requested by account manager"
-msgstr "&Konta menedžeris"
+msgstr "Konta menedžera pieprasīts"
#: ViewProjects.cpp:1063
-#, fuzzy
msgid "Project initialization"
-msgstr "Projekts nav atrasts"
+msgstr "Projekta inicializēšana"
#: ViewProjects.cpp:1064
-#, fuzzy
msgid "Requested by project"
-msgstr "Atjaunināt projektu"
+msgstr "Projekta pieprasīts"
#: ViewProjects.cpp:1065
-#, fuzzy
msgid "Unknown reason"
-msgstr "(Nezināms)"
+msgstr "Nezināms iemesls"
#: ViewProjects.cpp:1079
msgid "Suspended by user"
msgstr "Lietotāja atlikts"
#: ViewProjects.cpp:1082
-#, fuzzy
msgid "Won't get new tasks"
msgstr "Nesaņems jaunus uzdevumus"
#: ViewProjects.cpp:1085
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Projekts beidzies - var noņemt"
# 77%
#: ViewProjects.cpp:1088
-#, fuzzy
msgid "Will remove when tasks done"
-msgstr "Noņemt, kad uzdevums pabeigts"
+msgstr "Noņems, kad uzdevumi tiks pabeigti"
#: ViewProjects.cpp:1091
msgid "Scheduler request pending"
@@ -3096,13 +3066,12 @@ msgstr "Gaida plānotāja pieprasījuma rezultātu"
# 75%
#: ViewProjects.cpp:1097
-#, fuzzy
msgid "Scheduler request in progress"
msgstr "Izveic plānotāja pieprasījumu"
#: ViewProjects.cpp:1100
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Gaida uzsūkšanās ziņu"
#: ViewProjects.cpp:1106
msgid "Communication deferred "
@@ -3110,11 +3079,11 @@ msgstr "Komunikācija atlikta uz "
#: ViewResources.cpp:62
msgid "Total disk usage"
-msgstr ""
+msgstr "Kopējais diska izlietojums"
#: ViewResources.cpp:83
msgid "Disk usage by BOINC projects"
-msgstr ""
+msgstr "BOINC projektiem izlietotā diska vieta"
#: ViewResources.cpp:116
msgid "Disk"
@@ -3122,160 +3091,159 @@ msgstr "Disks"
#: ViewResources.cpp:249
msgid "no projects: 0 bytes used"
-msgstr ""
+msgstr "nav projektu: izlietoti 0 baiti"
#: ViewResources.cpp:286
msgid "used by BOINC: "
-msgstr ""
+msgstr "BOINC lietošanā"
#: ViewResources.cpp:296
msgid "free, available to BOINC: "
-msgstr ""
+msgstr "brīvs, pieejams BOINC"
#: ViewResources.cpp:306
msgid "free, not available to BOINC: "
-msgstr ""
+msgstr "brīvs, nav pieejams BOINC"
#: ViewResources.cpp:316
msgid "free: "
-msgstr ""
+msgstr "brīvs:"
#: ViewResources.cpp:326
msgid "used by other programs: "
-msgstr ""
+msgstr "izmanto citas programmas:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Lietotāja kopā iegūtie kredītpunkti"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Lietotāja vidēji iegūtie kredītpunkti"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Datora kopējie kredītpunkti"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Datora vidēji iegūtie kredītpunkti"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
-msgstr ""
+msgstr "Atjaunināts: %.0f dienas atpakaļ"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Rādīt lietotāja kopējo"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
-msgstr ""
+msgstr "Rādīt kopējo lietotāja kredītu"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Rādīt lietotāja vidējo"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
-msgstr ""
+msgstr "Rādīt vidējo lietotāja kredītu"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Rādīt datora kopējo"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
-msgstr ""
+msgstr "Rādīt datora kopējo kredītu "
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Rādīt datora vidējo"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
-msgstr ""
+msgstr "Rādīt datora vidējo kredītu"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
-msgstr ""
+msgstr "< &Iepriekšējais projekts"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
-msgstr ""
+msgstr "Rādīt grafiku iepriekšējam projektam"
-#: ViewStatistics.cpp:2017
-#, fuzzy
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
-msgstr "Nākamais projekts"
+msgstr "&Nākamais projekts >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
-msgstr ""
+msgstr "Rādīt grafiku nākamajam projektam"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
-msgstr ""
+msgstr "Noslēpt projektu sarakstu"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
-msgstr ""
+msgstr "Izmantot visu laukumu grafikiem"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Režīma skats"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
-msgstr ""
+msgstr "Viens projekts"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
-msgstr ""
+msgstr "Rādīt vienu grafiku ar izvēlēto projektu"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
-msgstr ""
+msgstr "Visi projekti (atsevišķi)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
-msgstr ""
+msgstr "Rādīt visus projektus, katru savā grafikā"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
-msgstr ""
+msgstr "Visi projekti (kopā)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
-msgstr ""
+msgstr "Rādīt vienu grafiku ar visiem projektiem"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
-msgstr ""
+msgstr "Visi projekti (summa)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
-msgstr ""
+msgstr "Rādīt vienu grafiku ar projektu kopsummu"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistika"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Aktualizē diagrammas..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
-msgstr ""
+msgstr "Rādīt projektu sarakstu"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
-msgstr ""
+msgstr "Lieto mazāku laukumu grafikiem"
#: ViewTransfers.cpp:164
msgid "Retry Now"
@@ -3283,7 +3251,7 @@ msgstr "Mēģināt tagad"
#: ViewTransfers.cpp:165
msgid "Retry the file transfer now"
-msgstr ""
+msgstr "Atkārtot faila pārsūtīšanu tagad"
#: ViewTransfers.cpp:171
msgid "Abort Transfer"
@@ -3291,7 +3259,7 @@ msgstr "Pārtraukt pārsūtīšanu"
#: ViewTransfers.cpp:172
msgid "Abort this file transfer. You won't get credit for the task."
-msgstr ""
+msgstr "Pārtraukt šī faila pārsūtīšanu. Jūs neiegūsiet kredītu par šo uzdevumu."
#: ViewTransfers.cpp:183
msgid "File"
@@ -3318,19 +3286,20 @@ msgid "Transfers"
msgstr "Pārsūtīšana"
#: ViewTransfers.cpp:280
-#, fuzzy
msgid "Network activity is suspended - "
-msgstr "Pi&eslēgums tīklam atlikts"
+msgstr "Tīkla aktivitāte atlikta - "
#: ViewTransfers.cpp:282
msgid ""
".\n"
"You can enable it using the Activity menu."
msgstr ""
+".\n"
+"Jūs varat iespējot to izmantojot Aktivitātes izvēlni."
#: ViewTransfers.cpp:285
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#: ViewTransfers.cpp:292
msgid "Retrying transfer now..."
@@ -3347,6 +3316,9 @@ msgid ""
"NOTE: Aborting a transfer will invalidate a task and you\n"
"will not receive credit for it."
msgstr ""
+"Vai esat pārliecināti, ka vēlaties pārtraukt šī faila pārsūtīšanu '%s'?\n"
+"PIEZĪME: Pārsūtīšanas pārtraukšana padarīs uzdevumu par nederīgu\n"
+"un Jūs nesaņemsiet par to kredītu."
#: ViewTransfers.cpp:349
msgid "Abort File Transfer"
@@ -3354,44 +3326,43 @@ msgstr "Pārtraukt faila pārsūtīšanu"
#: ViewTransfers.cpp:780
msgid "Upload"
-msgstr ""
+msgstr "Augšupielāde"
#: ViewTransfers.cpp:780
msgid "Download"
-msgstr ""
+msgstr "Lejupielāde"
#: ViewTransfers.cpp:784
-#, fuzzy
msgid "retry in "
-msgstr "Atkārtos pēc "
+msgstr "atkārtot pēc "
#: ViewTransfers.cpp:786
msgid "failed"
-msgstr ""
+msgstr "neizdevās"
#: ViewTransfers.cpp:789
msgid "suspended"
-msgstr ""
+msgstr "atlikts"
#: ViewTransfers.cpp:794
msgid "active"
-msgstr ""
+msgstr "aktīvs"
#: ViewTransfers.cpp:796
msgid "pending"
-msgstr ""
+msgstr "gaida"
#: ViewTransfers.cpp:803
msgid " (project backoff: "
-msgstr ""
+msgstr "(projekts liek uzgaidīt:"
#: ViewWork.cpp:187 ViewWork.cpp:777
msgid "Show active tasks"
-msgstr ""
+msgstr "Rādīt aktīvos uzdevumus"
#: ViewWork.cpp:188 ViewWork.cpp:778
msgid "Show only active tasks."
-msgstr ""
+msgstr "Rādīt tikai aktīvos uzdevumus."
#: ViewWork.cpp:194 sg_TaskCommandPopup.cpp:60
msgid "Show graphics"
@@ -3402,14 +3373,12 @@ msgid "Show application graphics in a window."
msgstr "Rādīt lietojuma grafisko informāciju logā"
#: ViewWork.cpp:201
-#, fuzzy
msgid "Show VM Console"
-msgstr "Rādīt datora kopējo"
+msgstr "Rādīt VM konsoli"
#: ViewWork.cpp:202
-#, fuzzy
msgid "Show VM Console in a window."
-msgstr "Rādīt lietojuma grafisko informāciju logā"
+msgstr "Rādīt VM konsoli logā."
#: ViewWork.cpp:209
msgid "Suspend work for this result."
@@ -3427,48 +3396,39 @@ msgstr ""
#: ViewWork.cpp:223 sg_TaskCommandPopup.cpp:79
msgid "Show task details."
-msgstr ""
+msgstr "Rādīt uzdevuma informāciju."
#: ViewWork.cpp:235
msgid "Elapsed"
-msgstr ""
+msgstr "Aizritējis"
#: ViewWork.cpp:236
-#, fuzzy
msgid "Remaining (estimated)"
-msgstr "Izpildās"
+msgstr "Atlicis (paredzams)"
#: ViewWork.cpp:237
-#, fuzzy
msgid "Deadline"
msgstr "Termiņš"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Uzdevums"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Uzdevumi"
#: ViewWork.cpp:357
msgid "Resuming task..."
-msgstr ""
+msgstr "Atsāk uzdevumu..."
#: ViewWork.cpp:360
-#, fuzzy
msgid "Suspending task..."
-msgstr "Atliek šī uzdevuma izpildi..."
+msgstr "Atliek uzdevumu..."
#: ViewWork.cpp:389
-#, fuzzy
msgid "Showing graphics for task..."
msgstr "Rāda uzdevuma grafisko informāciju..."
#: ViewWork.cpp:426
-#, fuzzy
msgid "Showing VM console for task..."
-msgstr "Rāda uzdevuma grafisko informāciju..."
+msgstr "Rāda VM konsoli uzdevumam..."
#: ViewWork.cpp:479
#, c-format
@@ -3476,49 +3436,46 @@ msgid ""
"Are you sure you want to abort this task '%s'?\n"
"(Progress: %s, Status: %s)"
msgstr ""
+"Vai esat pārliecināti, ka vēlaties pārtraukt šo uzdevumu '%s'?\n"
+"(Progress: %s, Statuss: %s)"
#: ViewWork.cpp:485
-#, c-format
-#, fuzzy, c-format
+#, c-format, c-format
msgid "Are you sure you want to abort these %d tasks?"
-msgstr "Vai tiešām vēlaties pārtaukt apstrādāt šo uzdevumu '%s'?"
+msgstr "Vai tiešām vēlaties pārtaukt apstrādāt šos %d uzdevums?"
#: ViewWork.cpp:490 sg_TaskCommandPopup.cpp:256
msgid "Abort task"
-msgstr ""
+msgstr "Pārtraukt uzdevumu"
# 75%
#: ViewWork.cpp:499
-#, fuzzy
msgid "Aborting task..."
-msgstr "Pārtrauc pārsūtīšanu..."
+msgstr "Pārtrauc uzdevumu..."
#: ViewWork.cpp:771
msgid "Show all tasks"
-msgstr ""
+msgstr "Rādīt visus uzdevumus"
#: ViewWork.cpp:772
msgid "Show all tasks."
-msgstr ""
+msgstr "Rādīt visus uzdevumus."
#: ViewWork.cpp:796 sg_TaskCommandPopup.cpp:103
-#, fuzzy
msgid "Resume work for this task."
-msgstr "Atsākt šī uzdevuma izpildi."
+msgstr "Atsākt darbu pie šī uzdevuma."
#: ViewWork.cpp:802 sg_TaskCommandPopup.cpp:107
-#, fuzzy
msgid "Suspend work for this task."
-msgstr "Atlikt šī uzdevuma izpildi"
+msgstr "Atlikt darbu pie šī uzdevuma."
#: WelcomePage.cpp:284
-#, fuzzy
msgid "Add project or account manager"
-msgstr "Pievienoties konta menedžerim"
+msgstr "Pievienot projektu vai konta menedžeri"
#: WelcomePage.cpp:288
msgid "Add project or use BOINC Account Manager"
-msgstr ""
+msgstr "Pievienojiet projektu vai izmantojiet BOINC konta menedžeri"
#: WelcomePage.cpp:297
#, c-format
@@ -3529,6 +3486,11 @@ msgid ""
"Projects added via this wizard will not be\n"
"listed on or managed via %s."
msgstr ""
+"Ja iespējams, pievienojiet projektus\n"
+"%s mājas lapā.\n"
+"\n"
+"Projekti, kuri pievienoti caur šo vedni nebūs\n"
+"uzskaitīti vai vadāmi no %s."
#: WelcomePage.cpp:313
msgid ""
@@ -3538,6 +3500,11 @@ msgid ""
"You can add a project directly,\n"
"or use an 'Account Manager' web site to select projects."
msgstr ""
+"Ir pieejami vairāk nekā 30 BOINC-bāzētu projektu,\n"
+"kuri veic pētījumus daudzās zinātņu jomās\n"
+"un Jūs varat pieteikties kaut katrā no tiem.\n"
+"Jūs varat pievienot projektu tieši vai arī lietot\n"
+"'Konta menedžera' mājas lapu, lai izvēlētos projektus."
#: WelcomePage.cpp:325
msgid ""
@@ -3557,10 +3524,23 @@ msgid ""
"\n"
"Please choose which type of change you would like to make:\n"
msgstr ""
+"Jūs esat izvēlējušies pievienot jaunu brīvprātīgo skaitļošanas projektu vai "
+"arī mainīt,\n"
+"kurus projektus veicināt.\n"
+"\n"
+"Dažus no šiem projektiem vada un pārvalda World Community Grid, kamēr citus\n"
+"vada un pārvalda citi pētnieki vai organizācijas. BOINC programmatūra\n"
+"sadalīt Jūsu brīvo skaitļošanas jaudu star projektiem jebkurā kombinācijā.\n"
+"\n"
+"Alternatīvi, ja esat reģistrējušies BOINC konta menedžerī, Jūs varat lietot "
+"to,\n"
+"lai izvēlētos, kurus projektus atbalstīt.\n"
+"\n"
+"Lūdzu, izvēlieties, kāda tipa izmaiņas vēlaties veikt :\n"
#: WelcomePage.cpp:339
msgid "Use a BOINC Account Manager"
-msgstr ""
+msgstr "Lietot BOINC konta menedžeri"
#: WelcomePage.cpp:352
msgid "To continue, click Next."
@@ -3568,11 +3548,11 @@ msgstr "Lai turpinātu nospiediet Nākamais."
#: WelcomePage.cpp:358
msgid "Add or change your World Community Grid projects"
-msgstr ""
+msgstr "Pievienot vai mainīt savus World Community Grid projektus"
#: WelcomePage.cpp:361
msgid "Add projects run by other researchers or organizations"
-msgstr ""
+msgstr "Pievienot projektus, kurus vada citi pētnieki vai organizācijas"
#: WizardAttach.cpp:634
msgid "Do you really want to cancel?"
@@ -3582,232 +3562,231 @@ msgstr "Vai tiešām vēlaties atcelt?"
msgid "Question"
msgstr "Jautājums"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
-msgstr ""
+msgstr "Detalizētais skats...\tCtrl+Shift+A"
# 82%
-#: sg_BoincSimpleFrame.cpp:146
-#, fuzzy
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
-msgstr "Parādīt vienkāršu grafisko interfeisu."
+msgstr "Parādīt papildu grafisko interfeisu."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
-msgstr ""
+msgstr "Ādiņa"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
-msgstr ""
+msgstr "Izvēlieties lietotāja saskarnes izskatu."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
-msgstr ""
+msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
-#, fuzzy
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
-msgstr "Ie&stādīt kā noklusēto"
+msgstr "Noklusētais"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
-msgstr ""
+msgstr "Apturēt skaitļošanu"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
-msgstr ""
+msgstr "Atsākt skaitļošanu"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
-msgstr ""
+msgstr "Atvērt logu, lai redzētu paziņojumus no projektiem vai BOINC"
# 83%
#: sg_DlgMessages.cpp:146
-#, fuzzy
msgid "Close"
-msgstr "&Aizvērt"
+msgstr "Aizvērt"
# 83%
#: sg_DlgMessages.cpp:389
-#, c-format
-#, fuzzy, c-format
+#, c-format, c-format
msgid "%s - Notices"
-msgstr "%s Paziņojumi"
+msgstr "%s - Paziņojumi"
#: sg_DlgPreferences.cpp:268
msgid "This dialog controls preferences for this computer only."
-msgstr ""
+msgstr "Šis dialoglogs kontrolē preferences tikai šim datoram."
#: sg_DlgPreferences.cpp:273
msgid "Click OK to set preferences."
-msgstr ""
+msgstr "Noklišķiniet Labi, lai iestatītu preferences."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
+"Noklišķiniet Notīrīt, lai atjaunotu tīmekļa-bāzētus iestatījumus visām zemāk "
+"minētām preferencēm."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
+"Papildu iestatījumiem izvēlieties Skaitļošanas preferences Detalizētajā "
+"skatā."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
-msgstr ""
+msgstr "Veikt darbu tikai starp:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
-msgstr ""
+msgstr "Savienoties ar Internet tikai starp:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
-msgstr ""
+msgstr "Nelietot vairāk par:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
-msgstr ""
+msgstr "diska vietas"
# 84%
-#: sg_DlgPreferences.cpp:392
-#, fuzzy
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
-msgstr "% procesoru"
+msgstr "procesora"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
-msgstr ""
+msgstr "Vai strādāt, kad lieto akumulatoru?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
-msgstr ""
+msgstr "Strādāt, ja dīkstāvē:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Notīrīt visas augstāk minētās lokālās preferences un aizvērt dialoglogu"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
-msgstr ""
+msgstr "Jebkurā laikā"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
-msgstr ""
+msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
-msgstr ""
+msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
-msgstr ""
+msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
-msgstr ""
+msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
-msgstr ""
+msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
-msgstr ""
+msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
-msgstr ""
+msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
-msgstr ""
+msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
-msgstr ""
+msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
-msgstr ""
+msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
-msgstr ""
+msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
-msgstr ""
+msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
-msgstr ""
+msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
-msgstr ""
+msgstr "0 (izpildīt vienmēr)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
-msgstr ""
+msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
-msgstr ""
+msgstr "Vai tiešām vēlaties notīrīt visas lokālās preferences?\n"
#: sg_ProjectPanel.cpp:72
-#, fuzzy
msgid "Add Project"
-msgstr "LIGO projekts"
+msgstr "Pievienot projektu"
#: sg_ProjectPanel.cpp:73
msgid "Synchronize"
-msgstr ""
+msgstr "Sinhronizēt"
#: sg_ProjectPanel.cpp:74
msgid "Work done for this project"
-msgstr ""
+msgstr "Paveiktais šim projektam"
#: sg_ProjectPanel.cpp:77
msgid "Synchronize projects with account manager system"
-msgstr ""
+msgstr "Sinhronizēt projektus ar konta menedžera sistēmu"
#: sg_ProjectPanel.cpp:124
msgid "Select a project to access with the controls below"
-msgstr ""
+msgstr "Izvēlieties projektu kam piekļūt ar zemāk izvietotām vadīklām"
# 88%
#: sg_ProjectPanel.cpp:145
-#, fuzzy
msgid "Project Web Pages"
msgstr "Projekta web lapas"
#: sg_ProjectPanel.cpp:149
msgid "Project Commands"
-msgstr ""
+msgstr "Projekta komandas"
#: sg_ProjectPanel.cpp:267
#, c-format
msgid "Pop up a menu of web sites for project %s"
-msgstr ""
+msgstr "Rādīt uznirstošo izvēlni ar mājas lapām projektam %s"
#: sg_ProjectPanel.cpp:269
#, c-format
msgid "Pop up a menu of commands to apply to project %s"
-msgstr ""
+msgstr "Rādīt uznirstošo izvēlni ar komandām, ko pielietot projektam %s"
#: sg_TaskCommandPopup.cpp:67
msgid "Suspend this task."
-msgstr ""
+msgstr "Apturēt šo uzdevumu."
#: sg_TaskCommandPopup.cpp:73
msgid "Abandon this task. You will get no credit for it."
-msgstr ""
+msgstr "Pārtraukt šo uzdevumu. Jūs neiegūsiet kredītu par to."
#: sg_TaskCommandPopup.cpp:251
#, c-format
@@ -3815,123 +3794,122 @@ msgid ""
"Are you sure you want to abort this task '%s'?\n"
"(Progress: %.1lf%%, Status: %s)"
msgstr ""
+"Vai esat pārliecināti, ka vēlaties pārtraukt šo uzdevumu '%s'?\n"
+"(Progress: %.1lf%%, Statuss: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
-msgstr ""
+msgstr "Jums nav neviena projekta. Lūdzu, pievienojiet projektu."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
-msgstr ""
+msgstr "Nav pieejams"
-#: sg_TaskPanel.cpp:463
-#, fuzzy
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
-msgstr "Uzdevumi"
+msgstr "Uzdevumi:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
-msgstr ""
+msgstr "Izvēlieties uzdevumu, lai piekļūtu"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
-msgstr ""
+msgstr "No:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
-msgstr ""
+msgstr "Šī uzdevuma progress"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
-msgstr ""
+msgstr "Uzdevuma komandas"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
-msgstr ""
+msgstr "Rādīt uznirstošo izvēlni ar komandām, ko pielietot šim uzdevumam"
-#: sg_TaskPanel.cpp:688
-#, c-format
-#, fuzzy, c-format
+#: sg_TaskPanel.cpp:701
+#, c-format, c-format
msgid "Application: %s"
-msgstr "Lietojums"
+msgstr "Lietojums: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
-msgstr ""
+msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
-msgstr ""
+msgstr "Lietojums: Nav pieejams"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
-msgstr ""
+msgstr "Nav pieejams"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
-msgstr ""
+msgstr "Pagājis: %s"
# 84%
-#: sg_TaskPanel.cpp:848
-#, c-format
-#, fuzzy, c-format
+#: sg_TaskPanel.cpp:861
+#, c-format, c-format
msgid "Remaining (estimated): %s"
-msgstr "Izpildās"
+msgstr "Atlicis (paredzams): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
-msgstr ""
+msgstr "Statuss: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
-msgstr ""
+msgstr "Iegūst pašreizējo statusu."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
-msgstr ""
+msgstr "Lejupielādē darbu no servera."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
-msgstr ""
+msgstr "Apstrāde apturēta: Strādā no akumulatora."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
-msgstr ""
+msgstr "Apstrāde apturēta: Lietotājs aktīvs."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
-msgstr ""
+msgstr "Apstrāde apturēta: Lietotājs apturēja apstrādi."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
-msgstr ""
+msgstr "Apstrāde apturēta: Diennakts laiks."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
-msgstr ""
+msgstr "Apstrāde apturēta: Veic veiktspējas testu."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
-msgstr ""
+msgstr "Apstrāde apturēta."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
-msgstr ""
+msgstr "Gaida, lai savienotos ar projekta serveriem."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
-msgstr ""
+msgstr "Iegūst pašreizējo statusu."
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
-msgstr ""
+msgstr "Nav pieejams darbs, ko apstrādāt"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
-msgstr ""
+msgstr "Nevar izveidot savienojumu ar galveno klientu"
#: wizardex.cpp:377 wizardex.cpp:553
msgid "&Next >"
@@ -3947,31 +3925,36 @@ msgstr "&Beigt"
#: mac/Mac_GUI.cpp:110
msgid "Preferences…"
-msgstr ""
+msgstr "Preferences..."
#: mac/Mac_GUI.cpp:122
msgid "Services"
-msgstr ""
+msgstr "Servisi"
#: mac/Mac_GUI.cpp:144
#, c-format
msgid "Hide %s"
-msgstr ""
+msgstr "Paslēpt %s"
#: mac/Mac_GUI.cpp:158
msgid "Hide Others"
-msgstr ""
+msgstr "Paslēpt citus"
#: mac/Mac_GUI.cpp:172
msgid "Show All"
-msgstr ""
+msgstr "Rādīt visu"
# 87%
#: mac/Mac_GUI.cpp:186
-#, c-format
-#, fuzzy, c-format
+#, c-format, c-format
msgid "Quit %s"
-msgstr "&Beigt %s"
+msgstr "Iziet %s"
+
+#~ msgid "Workunit name"
+#~ msgstr "Darba vienības vārds"
+
+#~ msgid "invalid float"
+#~ msgstr "nederīgs peldošais"
# 82%
# 75%
diff --git a/locale/lv/BOINC-Project-Generic.po b/locale/lv/BOINC-Project-Generic.po
index e942025..7a4a732 100644
--- a/locale/lv/BOINC-Project-Generic.po
+++ b/locale/lv/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -185,7 +185,7 @@ msgstr ""
msgid "Advanced search"
msgstr ""
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr ""
@@ -195,8 +195,8 @@ msgstr ""
msgid "Questions and Answers"
msgstr ""
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -262,7 +262,7 @@ msgstr ""
msgid "Message %1"
msgstr ""
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr ""
@@ -449,7 +449,7 @@ msgstr ""
msgid "Thread"
msgstr ""
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr ""
@@ -458,7 +458,7 @@ msgstr ""
msgid "Views"
msgstr ""
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr ""
@@ -496,7 +496,7 @@ msgid "Home"
msgstr ""
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr ""
@@ -562,9 +562,9 @@ msgid "Created"
msgstr ""
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -740,7 +740,7 @@ msgstr ""
msgid "Computer info"
msgstr ""
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr ""
@@ -749,9 +749,9 @@ msgstr ""
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -839,8 +839,8 @@ msgstr ""
msgid "Computer ID"
msgstr ""
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -876,7 +876,7 @@ msgstr ""
msgid "Write"
msgstr ""
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr ""
@@ -1601,7 +1601,7 @@ msgstr ""
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
@@ -1693,9 +1693,9 @@ msgstr ""
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1703,7 +1703,7 @@ msgstr ""
msgid "Country"
msgstr ""
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr ""
@@ -1731,8 +1731,8 @@ msgstr ""
msgid "founder response deadline is %1"
msgstr ""
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr ""
@@ -1756,105 +1756,105 @@ msgstr ""
msgid "Web site"
msgstr ""
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr ""
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr ""
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr ""
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr ""
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr ""
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr ""
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr ""
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr ""
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr ""
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr ""
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr ""
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr ""
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr ""
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr ""
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr ""
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr ""
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr ""
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr ""
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr ""
@@ -1864,53 +1864,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr ""
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr ""
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr ""
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr ""
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr ""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr ""
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1943,7 +1943,7 @@ msgid "Computers on this account"
msgstr ""
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr ""
@@ -1960,8 +1960,8 @@ msgstr ""
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr ""
@@ -1990,7 +1990,7 @@ msgstr ""
msgid "Email address"
msgstr ""
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr ""
@@ -1998,7 +1998,7 @@ msgstr ""
msgid "Postal code"
msgstr ""
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr ""
@@ -2018,7 +2018,7 @@ msgstr ""
msgid "other account info"
msgstr ""
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr ""
@@ -2063,96 +2063,96 @@ msgstr ""
msgid "Community"
msgstr ""
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr ""
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr ""
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr ""
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr ""
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr ""
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr ""
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr ""
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr ""
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr ""
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr ""
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr ""
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr ""
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr ""
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr ""
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr ""
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr ""
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr ""
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr ""
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr ""
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr ""
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2226,7 +2226,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2419,7 +2419,7 @@ msgstr ""
msgid "User of the day"
msgstr ""
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr ""
@@ -5224,135 +5224,135 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr ""
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr ""
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr ""
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5598,6 +5598,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/lv/BOINC-Setup.mo b/locale/lv/BOINC-Setup.mo
index 44c4f7f..61cc818 100644
Binary files a/locale/lv/BOINC-Setup.mo and b/locale/lv/BOINC-Setup.mo differ
diff --git a/locale/lv/BOINC-Setup.po b/locale/lv/BOINC-Setup.po
index d63804f..e200155 100644
--- a/locale/lv/BOINC-Setup.po
+++ b/locale/lv/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/lv/BOINC-Web.mo b/locale/lv/BOINC-Web.mo
index 6441455..69c8148 100644
Binary files a/locale/lv/BOINC-Web.mo and b/locale/lv/BOINC-Web.mo differ
diff --git a/locale/lv/BOINC-Web.po b/locale/lv/BOINC-Web.po
index 0ae0759..d977dd8 100644
--- a/locale/lv/BOINC-Web.po
+++ b/locale/lv/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -404,16 +404,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr ""
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -421,19 +421,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -442,15 +442,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -459,15 +459,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -475,15 +475,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -491,31 +491,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr ""
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -523,15 +523,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -542,15 +542,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr ""
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -560,30 +560,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr ""
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -595,15 +595,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -613,15 +623,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr ""
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -634,33 +644,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -670,15 +680,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -687,15 +697,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -704,22 +714,22 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr ""
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -728,15 +738,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -744,44 +754,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr ""
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -789,27 +799,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr ""
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -817,50 +827,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -870,17 +880,17 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr ""
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -888,11 +898,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -903,23 +913,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
diff --git a/locale/ms/BOINC-Android.po b/locale/ms/BOINC-Android.po
new file mode 100644
index 0000000..c810c5f
--- /dev/null
+++ b/locale/ms/BOINC-Android.po
@@ -0,0 +1,1114 @@
+# Translations template for PROJECT.
+# Copyright (C) 2013 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.10.0\n"
+"Generated-By: Babel 1.0dev\n"
+
+#. app global
+msgctxt "app_name"
+msgid "BOINC"
+msgstr ""
+
+#. generic. used by multiple Activities/tabs
+msgctxt "generic_loading"
+msgid "Loading! Please wait…"
+msgstr ""
+
+#. attach project
+#. project list
+msgctxt "attachproject_list_header"
+msgid "Choose a project:"
+msgstr ""
+
+msgctxt "attachproject_list_manual_button"
+msgid "Add project by URL"
+msgstr ""
+
+msgctxt "attachproject_list_manual_dialog_title"
+msgid "Enter project URL:"
+msgstr ""
+
+msgctxt "attachproject_list_manual_dialog_button"
+msgid "Add project"
+msgstr ""
+
+msgctxt "attachproject_list_manual_no_url"
+msgid "Please enter project URL"
+msgstr ""
+
+msgctxt "attachproject_list_acctmgr_button"
+msgid "Add account manager"
+msgstr ""
+
+msgctxt "attachproject_list_no_internet"
+msgid "No Internet connection"
+msgstr ""
+
+#. project login
+msgctxt "attachproject_login_loading"
+msgid "Contacting project server…"
+msgstr ""
+
+msgctxt "attachproject_login_image_description"
+msgid "Project logo."
+msgstr ""
+
+msgctxt "attachproject_login_header_general_area"
+msgid "General area:"
+msgstr ""
+
+msgctxt "attachproject_login_header_specific_area"
+msgid "Specific area:"
+msgstr ""
+
+msgctxt "attachproject_login_header_description"
+msgid "Description:"
+msgstr ""
+
+msgctxt "attachproject_login_header_home"
+msgid "Home:"
+msgstr ""
+
+msgctxt "attachproject_login_header_url"
+msgid "Website:"
+msgstr ""
+
+msgctxt "attachproject_login_header_platform"
+msgid "Android:"
+msgstr ""
+
+msgctxt "attachproject_login_platform_supported"
+msgid "This project supports Android devices"
+msgstr ""
+
+msgctxt "attachproject_login_platform_not_supported"
+msgid "This project does not support Android devices"
+msgstr ""
+
+msgctxt "attachproject_login_category_terms_of_use"
+msgid "Terms of use for"
+msgstr ""
+
+msgctxt "attachproject_login_accept_terms_of_use"
+msgid ""
+"By creating an account with this project, you accept the terms of use as "
+"shown above."
+msgstr ""
+
+msgctxt "attachproject_login_category_login"
+msgid "Sign in with existing account"
+msgstr ""
+
+msgctxt "attachproject_login_header_id_email"
+msgid "eMail:"
+msgstr ""
+
+msgctxt "attachproject_login_header_id_name"
+msgid "Name:"
+msgstr ""
+
+msgctxt "attachproject_login_header_pwd"
+msgid "Password:"
+msgstr ""
+
+msgctxt "attachproject_login_category_creation"
+msgid "New to"
+msgstr ""
+
+msgctxt "attachproject_login_header_creation_enabled"
+msgid "Register an account to participate:"
+msgstr ""
+
+msgctxt "attachproject_login_header_creation_client_disabled"
+msgid "Visit project website to create an account:"
+msgstr ""
+
+msgctxt "attachproject_login_header_creation_disabled"
+msgid "Project does currently now allow creation of new accounts!"
+msgstr ""
+
+msgctxt "attachproject_login_button_registration"
+msgid "Register"
+msgstr ""
+
+msgctxt "attachproject_login_button_login"
+msgid "Sign in"
+msgstr ""
+
+msgctxt "attachproject_login_button_forgotpw"
+msgid "Forgot Password"
+msgstr ""
+
+msgctxt "attachproject_login_error_toast"
+msgid "Contacting project failed!"
+msgstr ""
+
+msgctxt "attachproject_login_attached"
+msgid "Attached"
+msgstr ""
+
+#. project registration
+msgctxt "attachproject_registration_header"
+msgid "Account registration for"
+msgstr ""
+
+msgctxt "attachproject_registration_header_url"
+msgid "Project:"
+msgstr ""
+
+msgctxt "attachproject_registration_header_email"
+msgid "eMail:"
+msgstr ""
+
+msgctxt "attachproject_registration_header_username"
+msgid "Name:"
+msgstr ""
+
+msgctxt "attachproject_registration_header_teamname"
+msgid "Team:"
+msgstr ""
+
+msgctxt "attachproject_registration_header_pwd"
+msgid "Password:"
+msgstr ""
+
+msgctxt "attachproject_registration_header_pwd_confirm"
+msgid "… Retype:"
+msgstr ""
+
+msgctxt "attachproject_registration_button"
+msgid "Create"
+msgstr ""
+
+#. account manager
+msgctxt "attachproject_acctmgr_header"
+msgid "Add account manager"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_url"
+msgid "URL"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_name"
+msgid "User:"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_pwd"
+msgid "Password:"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_pwd_confirm"
+msgid "… Retype:"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_button"
+msgid "Add"
+msgstr ""
+
+#. error strings
+msgctxt "attachproject_error_wrong_name"
+msgid "User not found"
+msgstr ""
+
+msgctxt "attachproject_error_short_pwd"
+msgid "Password too short"
+msgstr ""
+
+msgctxt "attachproject_error_no_internet"
+msgid "Connection failure"
+msgstr ""
+
+msgctxt "attachproject_error_pwd_no_match"
+msgid "Passwords do not match"
+msgstr ""
+
+msgctxt "attachproject_error_no_url"
+msgid "Please enter URL"
+msgstr ""
+
+msgctxt "attachproject_error_no_email"
+msgid "Please enter eMail address"
+msgstr ""
+
+msgctxt "attachproject_error_no_pwd"
+msgid "Please enter a password"
+msgstr ""
+
+msgctxt "attachproject_error_no_name"
+msgid "Please enter user name"
+msgstr ""
+
+msgctxt "attachproject_error_unknown"
+msgid "failed"
+msgstr ""
+
+msgctxt "attachproject_error_bad_username"
+msgid "User name refused"
+msgstr ""
+
+msgctxt "attachproject_error_email_in_use"
+msgid "eMail is already in use"
+msgstr ""
+
+msgctxt "attachproject_error_project_down"
+msgid "Project is offline"
+msgstr ""
+
+msgctxt "attachproject_error_email_bad_syntax"
+msgid "eMail refused"
+msgstr ""
+
+msgctxt "attachproject_error_bad_pwd"
+msgid "Password refused"
+msgstr ""
+
+msgctxt "attachproject_error_creation_disabled"
+msgid "Account creation is disabled on this project"
+msgstr ""
+
+msgctxt "attachproject_error_invalid_url"
+msgid "Invalid URL"
+msgstr ""
+
+#. working activity
+msgctxt "attachproject_working_back_button"
+msgid "Back"
+msgstr ""
+
+msgctxt "attachproject_working_finish_button"
+msgid "Finish"
+msgstr ""
+
+msgctxt "attachproject_working_check_desc"
+msgid "Successful"
+msgstr ""
+
+msgctxt "attachproject_working_failed_desc"
+msgid "Failed"
+msgstr ""
+
+msgctxt "attachproject_working_ongoing"
+msgid "…"
+msgstr ""
+
+msgctxt "attachproject_working_finished"
+msgid "."
+msgstr ""
+
+msgctxt "attachproject_working_description"
+msgid ":"
+msgstr ""
+
+msgctxt "attachproject_working_connect"
+msgid "Connect"
+msgstr ""
+
+msgctxt "attachproject_working_verify"
+msgid "Verify account"
+msgstr ""
+
+msgctxt "attachproject_working_register"
+msgid "Register account"
+msgstr ""
+
+msgctxt "attachproject_working_login"
+msgid "Log in"
+msgstr ""
+
+msgctxt "attachproject_working_acctmgr"
+msgid "Add account manager"
+msgstr ""
+
+msgctxt "attachproject_working_acctmgr_sync"
+msgid "Synchronize"
+msgstr ""
+
+#. main activity
+msgctxt "main_noproject_warning"
+msgid "Tab here to choose a project."
+msgstr ""
+
+msgctxt "main_error"
+msgid "Whooops"
+msgstr ""
+
+msgctxt "main_error_long"
+msgid ""
+"…this should not happen!\n"
+"Click on the icon to try again."
+msgstr ""
+
+msgctxt "main_title_icon_desc"
+msgid "BOINC icon"
+msgstr ""
+
+#. tab names
+msgctxt "tab_status"
+msgid "Status"
+msgstr ""
+
+msgctxt "tab_projects"
+msgid "Projects"
+msgstr ""
+
+msgctxt "tab_tasks"
+msgid "Tasks"
+msgstr ""
+
+msgctxt "tab_transfers"
+msgid "Transfers"
+msgstr ""
+
+msgctxt "tab_preferences"
+msgid "Preferences"
+msgstr ""
+
+msgctxt "tab_notices"
+msgid "Notices"
+msgstr ""
+
+msgctxt "tab_desc"
+msgid "Navigation"
+msgstr ""
+
+#. status strings
+msgctxt "status_running"
+msgid "Computing"
+msgstr ""
+
+msgctxt "status_running_long"
+msgid "Thank you for participating."
+msgstr ""
+
+msgctxt "status_paused"
+msgid "Suspended"
+msgstr ""
+
+msgctxt "status_idle"
+msgid "Nothing to do"
+msgstr ""
+
+msgctxt "status_idle_long"
+msgid "Waiting for tasks…"
+msgstr ""
+
+msgctxt "status_computing_disabled"
+msgid "Suspended"
+msgstr ""
+
+msgctxt "status_computing_disabled_long"
+msgid "Press play to resume network and computation."
+msgstr ""
+
+msgctxt "status_launching"
+msgid "Starting…"
+msgstr ""
+
+msgctxt "status_noproject"
+msgid "Choose a project to participate in."
+msgstr ""
+
+msgctxt "status_closing"
+msgid "Closing…"
+msgstr ""
+
+msgctxt "status_benchmarking"
+msgid "Benchmarking…"
+msgstr ""
+
+msgctxt "status_image_description"
+msgid "project image"
+msgstr ""
+
+#. preferences tab strings
+msgctxt "prefs_loading"
+msgid "Reading preferences…"
+msgstr ""
+
+msgctxt "prefs_submit_button"
+msgid "Save"
+msgstr ""
+
+msgctxt "prefs_dialog_title"
+msgid "Enter new value:"
+msgstr ""
+
+msgctxt "prefs_dialog_title_selection"
+msgid "Select:"
+msgstr ""
+
+msgctxt "prefs_category_general"
+msgid "General"
+msgstr ""
+
+msgctxt "prefs_category_network"
+msgid "Network"
+msgstr ""
+
+msgctxt "prefs_category_power"
+msgid "Power"
+msgstr ""
+
+msgctxt "prefs_category_cpu"
+msgid "CPU"
+msgstr ""
+
+msgctxt "prefs_category_storage"
+msgid "Storage"
+msgstr ""
+
+msgctxt "prefs_category_memory"
+msgid "Memory"
+msgstr ""
+
+msgctxt "prefs_category_debug"
+msgid "Debug"
+msgstr ""
+
+msgctxt "prefs_show_advanced_header"
+msgid "Show advanced preferences and controls…"
+msgstr ""
+
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
+msgstr ""
+
+msgctxt "battery_charge_min_pct_header"
+msgid "Min. battery level"
+msgstr ""
+
+msgctxt "battery_charge_min_pct_description"
+msgid "BOINC suspends computation below defined battery charge level."
+msgstr ""
+
+msgctxt "battery_temperature_max_header"
+msgid "Max. battery temperature"
+msgstr ""
+
+msgctxt "battery_temperature_max_description"
+msgid ""
+"BOINC suspends computation above defined battery temperature. It is not "
+"recommended to change this value."
+msgstr ""
+
+msgctxt "prefs_disk_max_pct_header"
+msgid "Max. used storage space"
+msgstr ""
+
+msgctxt "prefs_disk_max_pct_description"
+msgid "How many percent of your device's storage space is BOINC allowed to use?"
+msgstr ""
+
+msgctxt "prefs_disk_min_free_gb_header"
+msgid "Min. spare storage"
+msgstr ""
+
+msgctxt "prefs_disk_min_free_gb_description"
+msgid "How much of your device's storage space shall stay free?"
+msgstr ""
+
+msgctxt "prefs_network_daily_xfer_limit_mb_header"
+msgid "Daily transfer limit"
+msgstr ""
+
+msgctxt "prefs_network_daily_xfer_limit_mb_description"
+msgid "Limits the daily data traffic caused by BOINC."
+msgstr ""
+
+msgctxt "prefs_network_wifi_only_header"
+msgid "Transfer tasks on WiFi only"
+msgstr ""
+
+msgctxt "prefs_autostart_header"
+msgid "Autostart"
+msgstr ""
+
+msgctxt "prefs_show_notification_header"
+msgid "Show notification when suspended"
+msgstr ""
+
+msgctxt "prefs_cpu_number_cpus_header"
+msgid "Used CPU cores"
+msgstr ""
+
+msgctxt "prefs_cpu_number_cpus_description"
+msgid "Limits the number of CPU cores BOINC uses for computation."
+msgstr ""
+
+msgctxt "prefs_cpu_other_load_suspension_header"
+msgid "Pause at CPU usage above"
+msgstr ""
+
+msgctxt "prefs_cpu_other_load_suspension_description"
+msgid "Determines when BOINC pauses computation due to other app's CPU usage."
+msgstr ""
+
+msgctxt "prefs_cpu_time_max_header"
+msgid "CPU limit"
+msgstr ""
+
+msgctxt "prefs_cpu_time_max_description"
+msgid "Limits the CPU time BOINC uses for computation."
+msgstr ""
+
+msgctxt "prefs_memory_max_idle_header"
+msgid "RAM limit"
+msgstr ""
+
+msgctxt "prefs_memory_max_idle_description"
+msgid "Limits the amount of RAM tasks are allowed to occupy."
+msgstr ""
+
+msgctxt "prefs_client_log_flags_header"
+msgid "BOINC Client log flags"
+msgstr ""
+
+msgctxt "prefs_gui_log_level_header"
+msgid "GUI log level"
+msgstr ""
+
+msgctxt "prefs_gui_log_level_description"
+msgid "Specifies verbosity of GUI log messages."
+msgstr ""
+
+msgctxt "prefs_unit_mb"
+msgid "MB"
+msgstr ""
+
+msgctxt "prefs_unit_gb"
+msgid "GB"
+msgstr ""
+
+#, c-format
+msgctxt "prefs_unit_pct"
+msgid "%"
+msgstr ""
+
+msgctxt "prefs_unit_celcius"
+msgid "°C"
+msgstr ""
+
+#. projects tab strings
+msgctxt "projects_loading"
+msgid "Reading projects…"
+msgstr ""
+
+msgctxt "projects_add"
+msgid "Add project"
+msgstr ""
+
+msgctxt "projects_icon"
+msgid "Project icon"
+msgstr ""
+
+msgctxt "projects_credits_header"
+msgid "Credit:"
+msgstr ""
+
+msgctxt "projects_credits_host_header"
+msgid "(on this device)"
+msgstr ""
+
+msgctxt "projects_credits_user_header"
+msgid "(total)"
+msgstr ""
+
+#. project status strings
+msgctxt "projects_status_suspendedviagui"
+msgid "Suspended by user"
+msgstr ""
+
+msgctxt "projects_status_dontrequestmorework"
+msgid "Won't get new tasks"
+msgstr ""
+
+msgctxt "projects_status_ended"
+msgid "Project ended - OK to remove"
+msgstr ""
+
+msgctxt "projects_status_detachwhendone"
+msgid "Will remove when tasks done"
+msgstr ""
+
+msgctxt "projects_status_schedrpcpending"
+msgid "Scheduler request pending"
+msgstr ""
+
+msgctxt "projects_status_schedrpcinprogress"
+msgid "Scheduler request in progress"
+msgstr ""
+
+msgctxt "projects_status_trickleuppending"
+msgid "Trickle up message pending"
+msgstr ""
+
+msgctxt "projects_status_backoff"
+msgid "Communication scheduled in:"
+msgstr ""
+
+#. project controls
+msgctxt "projects_control_dialog_title"
+msgid "Project commands:"
+msgstr ""
+
+msgctxt "projects_control_visit_website"
+msgid "Visit website"
+msgstr ""
+
+msgctxt "projects_control_update"
+msgid "Update"
+msgstr ""
+
+msgctxt "projects_control_remove"
+msgid "Remove"
+msgstr ""
+
+msgctxt "projects_control_suspend"
+msgid "Suspend"
+msgstr ""
+
+msgctxt "projects_control_resume"
+msgid "Resume"
+msgstr ""
+
+msgctxt "projects_control_nonewtasks"
+msgid "No new tasks"
+msgstr ""
+
+msgctxt "projects_control_allownewtasks"
+msgid "Allow new tasks"
+msgstr ""
+
+msgctxt "projects_control_reset"
+msgid "Reset"
+msgstr ""
+
+msgctxt "projects_control_dialog_title_acctmgr"
+msgid "Account manager commands:"
+msgstr ""
+
+msgctxt "projects_control_sync_acctmgr"
+msgid "Synchronize"
+msgstr ""
+
+msgctxt "projects_control_remove_acctmgr"
+msgid "Disable"
+msgstr ""
+
+#. project confirm dialog
+msgctxt "projects_confirm_detach_title"
+msgid "Remove project?"
+msgstr ""
+
+msgctxt "projects_confirm_detach_message"
+msgid "Are you sure you want to remove"
+msgstr ""
+
+msgctxt "projects_confirm_detach_message2"
+msgid "from BOINC?"
+msgstr ""
+
+msgctxt "projects_confirm_detach_confirm"
+msgid "Remove"
+msgstr ""
+
+msgctxt "projects_confirm_reset_title"
+msgid "Reset project"
+msgstr ""
+
+msgctxt "projects_confirm_reset_message"
+msgid "Are you sure you want to reset"
+msgstr ""
+
+msgctxt "projects_confirm_reset_confirm"
+msgid "Reset"
+msgstr ""
+
+msgctxt "projects_confirm_remove_acctmgr_title"
+msgid "Disable account manager"
+msgstr ""
+
+msgctxt "projects_confirm_remove_acctmgr_message"
+msgid "Are you sure you want to stop using"
+msgstr ""
+
+msgctxt "projects_confirm_remove_acctmgr_confirm"
+msgid "Disable"
+msgstr ""
+
+#. tasks tab strings
+msgctxt "tasks_header_name"
+msgid "Task Name:"
+msgstr ""
+
+msgctxt "tasks_header_elapsed_time"
+msgid "Elapsed time:"
+msgstr ""
+
+msgctxt "tasks_header_project_paused"
+msgid "(suspended)"
+msgstr ""
+
+msgctxt "tasks_header_deadline"
+msgid "Deadline:"
+msgstr ""
+
+msgctxt "tasks_result_new"
+msgid "new"
+msgstr ""
+
+msgctxt "tasks_result_files_downloading"
+msgid "waiting for download"
+msgstr ""
+
+msgctxt "tasks_result_files_downloaded"
+msgid "download complete"
+msgstr ""
+
+msgctxt "tasks_result_compute_error"
+msgid "computation error"
+msgstr ""
+
+msgctxt "tasks_result_files_uploading"
+msgid "uploading"
+msgstr ""
+
+msgctxt "tasks_result_files_uploaded"
+msgid "upload complete"
+msgstr ""
+
+msgctxt "tasks_result_aborted"
+msgid "aborted"
+msgstr ""
+
+msgctxt "tasks_result_upload_failed"
+msgid "upload failed"
+msgstr ""
+
+msgctxt "tasks_active_uninitialized"
+msgid "ready"
+msgstr ""
+
+msgctxt "tasks_active_executing"
+msgid "running"
+msgstr ""
+
+msgctxt "tasks_active_suspended"
+msgid "suspended"
+msgstr ""
+
+msgctxt "tasks_active_abort_pending"
+msgid "suspending"
+msgstr ""
+
+msgctxt "tasks_active_quit_pending"
+msgid "suspending"
+msgstr ""
+
+msgctxt "tasks_custom_suspended_via_gui"
+msgid "suspended"
+msgstr ""
+
+msgctxt "tasks_custom_project_suspended_via_gui"
+msgid "project suspended"
+msgstr ""
+
+msgctxt "tasks_custom_ready_to_report"
+msgid "ready to report"
+msgstr ""
+
+#. confirmation dialog
+msgctxt "confirm_abort_task_title"
+msgid "Abort task?"
+msgstr ""
+
+msgctxt "confirm_abort_task_message"
+msgid "Abort task:"
+msgstr ""
+
+msgctxt "confirm_abort_task_confirm"
+msgid "Abort"
+msgstr ""
+
+msgctxt "confirm_cancel"
+msgid "Cancel"
+msgstr ""
+
+msgctxt "confirm_image_desc"
+msgid "Confirmation dialog"
+msgstr ""
+
+#. transfers tab strings
+msgctxt "trans_loading"
+msgid "Reading transfers…"
+msgstr ""
+
+msgctxt "trans_upload"
+msgid "Upload"
+msgstr ""
+
+msgctxt "trans_download"
+msgid "Download"
+msgstr ""
+
+msgctxt "trans_retryin"
+msgid "retry in"
+msgstr ""
+
+msgctxt "trans_failed"
+msgid "failed"
+msgstr ""
+
+msgctxt "trans_suspended"
+msgid "suspended"
+msgstr ""
+
+msgctxt "trans_active"
+msgid "active"
+msgstr ""
+
+msgctxt "trans_pending"
+msgid "pending"
+msgstr ""
+
+msgctxt "trans_projectbackoff"
+msgid "project backoff"
+msgstr ""
+
+msgctxt "trans_header_name"
+msgid "File:"
+msgstr ""
+
+msgctxt "trans_control_retry"
+msgid "Retry transfers"
+msgstr ""
+
+msgctxt "confirm_abort_trans_title"
+msgid "Abort transfer?"
+msgstr ""
+
+msgctxt "confirm_abort_trans_message"
+msgid "Abort File:"
+msgstr ""
+
+msgctxt "confirm_abort_trans_confirm"
+msgid "Abort"
+msgstr ""
+
+#. notices tab strings
+msgctxt "notices_loading"
+msgid "Reading notices…"
+msgstr ""
+
+#. eventlog tab strings
+msgctxt "eventlog_loading"
+msgid "Loading log messages…"
+msgstr ""
+
+msgctxt "eventlog_client_header"
+msgid "Client Messages"
+msgstr ""
+
+msgctxt "eventlog_gui_header"
+msgid "GUI Messages"
+msgstr ""
+
+msgctxt "eventlog_copy_toast"
+msgid "Log copied to clipboard."
+msgstr ""
+
+msgctxt "eventlog_email_subject"
+msgid "Event Log for BOINC on Android:"
+msgstr ""
+
+#. suspend reasons
+msgctxt "suspend_unknown"
+msgid "Computation suspended."
+msgstr ""
+
+msgctxt "suspend_batteries"
+msgid "Connect your device to a charger to continue computing."
+msgstr ""
+
+msgctxt "suspend_useractive"
+msgid "User is active."
+msgstr ""
+
+msgctxt "suspend_tod"
+msgid "Out of computation time-frame."
+msgstr ""
+
+msgctxt "suspend_bm"
+msgid "BOINC is benchmarking your device…"
+msgstr ""
+
+msgctxt "suspend_disksize"
+msgid "Out of disk space."
+msgstr ""
+
+msgctxt "suspend_cputhrottle"
+msgid "Scheduled CPU throttle."
+msgstr ""
+
+msgctxt "suspend_noinput"
+msgid "No recent user activity."
+msgstr ""
+
+msgctxt "suspend_delay"
+msgid "Initialization delay."
+msgstr ""
+
+msgctxt "suspend_exclusiveapp"
+msgid "An exclusive app is running."
+msgstr ""
+
+msgctxt "suspend_cpu"
+msgid "Your device is busy with other apps."
+msgstr ""
+
+msgctxt "suspend_network_quota"
+msgid "BOINC reached network transfer limit."
+msgstr ""
+
+msgctxt "suspend_os"
+msgid "Stopped by Android."
+msgstr ""
+
+msgctxt "suspend_wifi"
+msgid "Not connected to WiFi."
+msgstr ""
+
+msgctxt "suspend_battery_charging"
+msgid "Battery needs to charge before resuming computation."
+msgstr ""
+
+msgctxt "suspend_battery_charging_long"
+msgid "Computing will resume when battery charge reaches"
+msgstr ""
+
+msgctxt "suspend_battery_charging_current"
+msgid "currently"
+msgstr ""
+
+msgctxt "suspend_battery_overheating"
+msgid "Waiting for battery to cool down"
+msgstr ""
+
+msgctxt "suspend_user_req"
+msgid "Resuming computation…"
+msgstr ""
+
+msgctxt "suspend_network_user_req"
+msgid "manually."
+msgstr ""
+
+#. rpc reasons
+msgctxt "rpcreason_userreq"
+msgid "Requested by user"
+msgstr ""
+
+msgctxt "rpcreason_needwork"
+msgid "To fetch work"
+msgstr ""
+
+msgctxt "rpcreason_resultsdue"
+msgid "To report completed tasks"
+msgstr ""
+
+msgctxt "rpcreason_trickleup"
+msgid "To send trickle-up message"
+msgstr ""
+
+msgctxt "rpcreason_acctmgrreq"
+msgid "Requested by account manager"
+msgstr ""
+
+msgctxt "rpcreason_init"
+msgid "Project initialization"
+msgstr ""
+
+msgctxt "rpcreason_projectreq"
+msgid "Requested by project"
+msgstr ""
+
+msgctxt "rpcreason_unknown"
+msgid "Unknown reason"
+msgstr ""
+
+#. menu
+msgctxt "menu_refresh"
+msgid "Refresh"
+msgstr ""
+
+msgctxt "menu_emailto"
+msgid "Send as Email"
+msgstr ""
+
+msgctxt "menu_copy"
+msgid "Copy to Clipboard"
+msgstr ""
+
+msgctxt "menu_eventlog"
+msgid "Event Log"
+msgstr ""
+
+msgctxt "menu_exit"
+msgid "Exit BOINC"
+msgstr ""
+
+msgctxt "menu_run_mode_disable"
+msgid "Suspend"
+msgstr ""
+
+msgctxt "menu_run_mode_enable"
+msgid "Resume"
+msgstr ""
+
+msgctxt "menu_about"
+msgid "About"
+msgstr ""
+
+msgctxt "menu_help"
+msgid "Help"
+msgstr ""
+
+#. about dialog
+msgctxt "about_button"
+msgid "Return"
+msgstr ""
+
+msgctxt "about_title"
+msgid "About"
+msgstr ""
+
+msgctxt "about_name"
+msgid "BOINC"
+msgstr ""
+
+msgctxt "about_version"
+msgid "Version"
+msgstr ""
+
+msgctxt "about_name_long"
+msgid "Berkeley Open Infrastructure for Network Computing"
+msgstr ""
+
+msgctxt "about_copyright"
+msgid ""
+"© 2003–2013 University of California, Berkeley.\n"
+"All Rights Reserved."
+msgstr ""
diff --git a/locale/ms/BOINC-Client.po b/locale/ms/BOINC-Client.po
new file mode 100644
index 0000000..9ae5b19
--- /dev/null
+++ b/locale/ms/BOINC-Client.po
@@ -0,0 +1,160 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-10-15 22:25-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.10.0\n"
+
+#: acct_mgr.cpp:450 acct_mgr.cpp:459
+msgid "Message from account manager"
+msgstr ""
+
+#: client_msgs.cpp:81
+msgid "Message from server"
+msgstr ""
+
+#: client_state.cpp:258
+msgid ""
+"Some tasks need more memory than allowed by your preferences. Please check "
+"the preferences."
+msgstr ""
+
+#: client_state.cpp:520
+msgid "Couldn't write state file; check directory permissions"
+msgstr ""
+
+#: cs_cmdline.cpp:303
+msgid "The HTTP_PROXY environment variable must specify an HTTP proxy"
+msgstr ""
+
+#: cs_scheduler.cpp:613
+#, c-format
+msgid ""
+"You used the wrong URL for this project. When convenient, remove this "
+"project, then add %s"
+msgstr ""
+
+#: cs_statefile.cpp:828 ../sched/sched_types.cpp:259
+msgid "Syntax error in app_info.xml"
+msgstr ""
+
+#: cs_statefile.cpp:868
+msgid "File referenced in app_info.xml does not exist: "
+msgstr ""
+
+#: current_version.cpp:91
+msgid "A new version of BOINC is available."
+msgstr ""
+
+#: current_version.cpp:94 current_version.cpp:102
+msgid "Download"
+msgstr ""
+
+#: log_flags.cpp:269 log_flags.cpp:449
+msgid "Unexpected text in cc_config.xml"
+msgstr ""
+
+#: log_flags.cpp:423 log_flags.cpp:475
+msgid "Unrecognized tag in cc_config.xml"
+msgstr ""
+
+#: log_flags.cpp:440
+msgid "Missing start tag in cc_config.xml"
+msgstr ""
+
+#: log_flags.cpp:465
+msgid "Error in cc_config.xml options"
+msgstr ""
+
+#: log_flags.cpp:483
+msgid "Missing end tag in cc_config.xml"
+msgstr ""
+
+#: ../sched/handle_request.cpp:307
+msgid "Invalid or missing account key. To fix, remove and add this project."
+msgstr ""
+
+#: ../sched/handle_request.cpp:849
+msgid "Invalid code signing key. To fix, remove and add this project."
+msgstr ""
+
+#: ../sched/handle_request.cpp:859
+msgid ""
+"The project has changed its security key. Please remove and add this "
+"project."
+msgstr ""
+
+#: ../sched/handle_request.cpp:943
+msgid "This project doesn't support operating system"
+msgstr ""
+
+#: ../sched/handle_request.cpp:969
+msgid "This project doesn't support CPU type"
+msgstr ""
+
+#: ../sched/handle_request.cpp:993
+msgid ""
+"Your BOINC client software is too old. Please install the current version."
+msgstr ""
+
+#: ../sched/handle_request.cpp:1259
+msgid "This project doesn't support computers of type"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1092
+msgid "Upgrade to the latest driver to process tasks using your computer's GPU"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1099
+msgid ""
+"Upgrade to the latest driver to use all of this project's GPU applications"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1118
+msgid ""
+"A newer version of BOINC is needed to use your NVIDIA GPU; please upgrade to "
+"the current version"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1146
+#, c-format
+msgid "An %s GPU is required to run tasks for this project"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1262
+msgid "No tasks are available for the applications you have selected."
+msgstr ""
+
+#: ../sched/sched_send.cpp:1288
+msgid "Your computer type is not supported by this project"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1294
+msgid "Newer BOINC version required; please install current version"
+msgstr ""
+
+#: ../sched/sched_send.cpp:1305
+#, c-format
+msgid ""
+"Tasks for %s are available, but your preferences are set to not accept them"
+msgstr ""
+
+#: ../sched/sched_types.cpp:254
+msgid "Unknown app name in app_info.xml"
+msgstr ""
+
+#: ../sched/sched_version.cpp:214
+msgid "Your app_info.xml file doesn't have a usable version of"
+msgstr ""
diff --git a/locale/ms/BOINC-Manager.po b/locale/ms/BOINC-Manager.po
new file mode 100644
index 0000000..64eed48
--- /dev/null
+++ b/locale/ms/BOINC-Manager.po
@@ -0,0 +1,3706 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.10.0\n"
+
+#: AccountInfoPage.cpp:387
+#, c-format
+msgid "Identify your account at %s"
+msgstr ""
+
+#: AccountInfoPage.cpp:393
+msgid ""
+"Please enter your account information\n"
+"(to create an account, visit the project's web site)"
+msgstr ""
+
+#: AccountInfoPage.cpp:397
+msgid ""
+"This project is not currently accepting new accounts.\n"
+"You can add it only if you already have an account."
+msgstr ""
+
+#: AccountInfoPage.cpp:401
+msgid "Are you already running this project?"
+msgstr ""
+
+#: AccountInfoPage.cpp:405
+msgid "&No, new user"
+msgstr ""
+
+#: AccountInfoPage.cpp:408
+msgid "&Yes, existing user"
+msgstr ""
+
+#: AccountInfoPage.cpp:413
+msgid ""
+"We were not able to set up your account information\n"
+"automatically.\n"
+"\n"
+"Please click on the 'Find login information' link\n"
+"below to find out what to put in the email address and\n"
+"password fields."
+msgstr ""
+
+#: AccountInfoPage.cpp:416
+msgid "Find login information"
+msgstr ""
+
+#: AccountInfoPage.cpp:436 AccountInfoPage.cpp:641
+msgid "&Password:"
+msgstr ""
+
+#: AccountInfoPage.cpp:443 AccountInfoPage.cpp:665
+msgid "Choose a &password:"
+msgstr ""
+
+#: AccountInfoPage.cpp:446
+msgid "C&onfirm password:"
+msgstr ""
+
+#: AccountInfoPage.cpp:453
+#, c-format
+msgid "Are you already running %s?"
+msgstr ""
+
+#: AccountInfoPage.cpp:482
+msgid "&Username:"
+msgstr ""
+
+#: AccountInfoPage.cpp:508
+msgid "&Email address:"
+msgstr ""
+
+#: AccountInfoPage.cpp:515
+#, c-format
+msgid "minimum length %d"
+msgstr ""
+
+#: AccountInfoPage.cpp:522
+msgid "Forgot your password?"
+msgstr ""
+
+#: AccountInfoPage.cpp:529
+msgid ""
+"If you have not yet registered with this account manager,\n"
+"please do so before proceeding. Click on the link below\n"
+"to register or to retrieve a forgotten password."
+msgstr ""
+
+#: AccountInfoPage.cpp:532
+msgid "Account manager web site"
+msgstr ""
+
+#: AccountInfoPage.cpp:574 WelcomePage.cpp:348
+msgid "Add project"
+msgstr ""
+
+#: AccountInfoPage.cpp:576
+msgid "Update account manager"
+msgstr ""
+
+#: AccountInfoPage.cpp:578 WelcomePage.cpp:307 WelcomePage.cpp:321
+msgid "Use account manager"
+msgstr ""
+
+#: AccountInfoPage.cpp:585
+msgid "Please enter a user name."
+msgstr ""
+
+#: AccountInfoPage.cpp:587
+msgid "Please enter an email address."
+msgstr ""
+
+#: AccountInfoPage.cpp:597
+#, c-format
+msgid "Please enter a password of at least %d characters."
+msgstr ""
+
+#: AccountInfoPage.cpp:607
+msgid ""
+"The password and confirmation password do not match. Please type them again."
+msgstr ""
+
+#: AccountManagerInfoPage.cpp:272
+msgid "Choose an account manager"
+msgstr ""
+
+#: AccountManagerInfoPage.cpp:275
+msgid ""
+"To choose an account manager, click its name or \n"
+"type its URL below."
+msgstr ""
+
+#: AccountManagerInfoPage.cpp:279
+msgid "Account manager details:"
+msgstr ""
+
+#: AccountManagerInfoPage.cpp:283
+msgid "Account manager &URL:"
+msgstr ""
+
+#: AccountManagerInfoPage.cpp:287
+msgid "Open web page"
+msgstr ""
+
+#: AccountManagerInfoPage.cpp:290
+msgid "Visit this account manager's web site"
+msgstr ""
+
+#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
+#, c-format
+msgid "Communicating with %s."
+msgstr ""
+
+#: AccountManagerProcessingPage.cpp:194 AccountManagerPropertiesPage.cpp:200
+msgid "Communicating with server."
+msgstr ""
+
+#: AccountManagerProcessingPage.cpp:199 AccountManagerPropertiesPage.cpp:205
+msgid "Please wait..."
+msgstr ""
+
+#: AccountManagerProcessingPage.cpp:326
+msgid "An internal server error has occurred.\n"
+msgstr ""
+
+#: AdvancedFrame.cpp:95
+msgid "Connected"
+msgstr ""
+
+#: AdvancedFrame.cpp:103
+msgid "Disconnected"
+msgstr ""
+
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
+#, c-format
+msgid "Close the %s window"
+msgstr ""
+
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
+msgid "&Close Window"
+msgstr ""
+
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
+#, c-format
+msgid "Exit %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:371
+msgid "&Notices\tCtrl+Shift+N"
+msgstr ""
+
+#: AdvancedFrame.cpp:372
+msgid "Display notices"
+msgstr ""
+
+#: AdvancedFrame.cpp:377
+msgid "&Projects\tCtrl+Shift+P"
+msgstr ""
+
+#: AdvancedFrame.cpp:378
+msgid "Display projects"
+msgstr ""
+
+#: AdvancedFrame.cpp:383
+msgid "&Tasks\tCtrl+Shift+T"
+msgstr ""
+
+#: AdvancedFrame.cpp:384
+msgid "Display tasks"
+msgstr ""
+
+#: AdvancedFrame.cpp:389
+msgid "Trans&fers\tCtrl+Shift+X"
+msgstr ""
+
+#: AdvancedFrame.cpp:390
+msgid "Display transfers"
+msgstr ""
+
+#: AdvancedFrame.cpp:395
+msgid "&Statistics\tCtrl+Shift+S"
+msgstr ""
+
+#: AdvancedFrame.cpp:396
+msgid "Display statistics"
+msgstr ""
+
+#: AdvancedFrame.cpp:401
+msgid "&Disk usage\tCtrl+Shift+D"
+msgstr ""
+
+#: AdvancedFrame.cpp:402
+msgid "Display disk usage"
+msgstr ""
+
+#: AdvancedFrame.cpp:409
+msgid "Simple &View...\tCtrl+Shift+V"
+msgstr ""
+
+#: AdvancedFrame.cpp:410
+msgid "Display the simple graphical interface."
+msgstr ""
+
+#: AdvancedFrame.cpp:424
+msgid "&Add project or account manager..."
+msgstr ""
+
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
+msgid "Volunteer for any or all of 30+ projects in many areas of science"
+msgstr ""
+
+#: AdvancedFrame.cpp:429
+#, c-format
+msgid "&Synchronize with %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:433
+#, c-format
+msgid "Get current settings from %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:443
+msgid "&Add project..."
+msgstr ""
+
+#: AdvancedFrame.cpp:444
+msgid "Add a project"
+msgstr ""
+
+#: AdvancedFrame.cpp:447
+#, c-format
+msgid "S&top using %s..."
+msgstr ""
+
+#: AdvancedFrame.cpp:453
+msgid "Remove this computer from account manager control."
+msgstr ""
+
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
+msgid "&Options..."
+msgstr ""
+
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
+msgid "Configure display options and proxy settings"
+msgstr ""
+
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
+msgid "Computing &preferences..."
+msgstr ""
+
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
+msgid "Configure computing preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:472
+msgid "&Run always"
+msgstr ""
+
+#: AdvancedFrame.cpp:473
+msgid "Allow work regardless of preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:477
+msgid "Run based on &preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:478
+msgid "Allow work according to preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:482
+msgid "&Suspend"
+msgstr ""
+
+#: AdvancedFrame.cpp:483
+msgid "Stop work regardless of preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:508
+msgid "Use GPU always"
+msgstr ""
+
+#: AdvancedFrame.cpp:509
+msgid "Allow GPU work regardless of preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:513
+msgid "Use GPU based on preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:514
+msgid "Allow GPU work according to preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:518
+msgid "Suspend GPU"
+msgstr ""
+
+#: AdvancedFrame.cpp:519
+msgid "Stop GPU work regardless of preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:543
+msgid "Network activity always available"
+msgstr ""
+
+#: AdvancedFrame.cpp:544
+msgid "Allow network activity regardless of preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:548
+msgid "Network activity based on preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:549
+msgid "Allow network activity according to preferences"
+msgstr ""
+
+#: AdvancedFrame.cpp:553
+msgid "Network activity suspended"
+msgstr ""
+
+#: AdvancedFrame.cpp:554
+msgid "Stop BOINC network activity"
+msgstr ""
+
+#: AdvancedFrame.cpp:564
+#, c-format
+msgid "Connect to another computer running %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:569
+msgid "Select computer..."
+msgstr ""
+
+#: AdvancedFrame.cpp:574
+msgid "Shut down connected client..."
+msgstr ""
+
+#: AdvancedFrame.cpp:575
+msgid "Shut down the currently connected client"
+msgstr ""
+
+#: AdvancedFrame.cpp:579
+msgid "Run CPU &benchmarks"
+msgstr ""
+
+#: AdvancedFrame.cpp:580
+msgid "Runs BOINC CPU benchmarks"
+msgstr ""
+
+#: AdvancedFrame.cpp:584
+msgid "Do network communication"
+msgstr ""
+
+#: AdvancedFrame.cpp:585
+msgid "Do all pending network communication"
+msgstr ""
+
+#: AdvancedFrame.cpp:589
+msgid "Read config files"
+msgstr ""
+
+#: AdvancedFrame.cpp:590
+msgid "Read configuration info from cc_config.xml and any app_config.xml files"
+msgstr ""
+
+#: AdvancedFrame.cpp:594
+msgid "Read local prefs file"
+msgstr ""
+
+#: AdvancedFrame.cpp:595
+msgid "Read preferences from global_prefs_override.xml."
+msgstr ""
+
+#: AdvancedFrame.cpp:600
+#, c-format
+msgid "Launch another instance of %s..."
+msgstr ""
+
+#: AdvancedFrame.cpp:604
+#, c-format
+msgid "Launch another %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:614
+msgid "Event Log...\tCtrl+Shift+E"
+msgstr ""
+
+#: AdvancedFrame.cpp:615
+msgid "Display diagnostic messages."
+msgstr ""
+
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
+#, c-format
+msgid "%s &help"
+msgstr ""
+
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
+#, c-format
+msgid "Show information about %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:643
+#, c-format
+msgid "&%s help"
+msgstr ""
+
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
+#, c-format
+msgid "Show information about the %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
+#, c-format
+msgid "%s &web site"
+msgstr ""
+
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
+#, c-format
+msgid "Show information about BOINC and %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
+#, c-format
+msgid "&About %s..."
+msgstr ""
+
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
+msgid "Licensing and copyright information."
+msgstr ""
+
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+msgid "&File"
+msgstr ""
+
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+msgid "&View"
+msgstr ""
+
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
+msgid "&Tools"
+msgstr ""
+
+#: AdvancedFrame.cpp:704
+msgid "&Activity"
+msgstr ""
+
+#: AdvancedFrame.cpp:708
+msgid "A&dvanced"
+msgstr ""
+
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
+#: wizardex.cpp:374 wizardex.cpp:381
+msgid "&Help"
+msgstr ""
+
+#: AdvancedFrame.cpp:1199
+#, c-format
+msgid "%s - Stop using %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:1204
+#, c-format
+msgid ""
+"If you stop using %s,\n"
+"you'll keep all your current projects,\n"
+"but you'll have to manage projects manually.\n"
+"\n"
+"Do you want to stop using %s?"
+msgstr ""
+
+#: AdvancedFrame.cpp:1401
+#, c-format
+msgid "%s - Shut down the current client..."
+msgstr ""
+
+#: AdvancedFrame.cpp:1410
+#, c-format
+msgid ""
+"%s will shut down the current client\n"
+"and prompt you for another host to connect to."
+msgstr ""
+
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
+#, c-format
+msgid "%s"
+msgstr ""
+
+#: AdvancedFrame.cpp:1754
+#, c-format
+msgid "%s has successfully added %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:1893
+#, c-format
+msgid "%s - (%s)"
+msgstr ""
+
+#: AdvancedFrame.cpp:1897
+#, c-format
+msgid "Connecting to %s"
+msgstr ""
+
+#: AdvancedFrame.cpp:1900
+#, c-format
+msgid "Connected to %s (%s)"
+msgstr ""
+
+#: AlreadyExistsPage.cpp:184
+msgid "Username already in use"
+msgstr ""
+
+#: AlreadyExistsPage.cpp:187
+msgid ""
+"An account with that username already exists and has a\n"
+"different password than the one you entered.\n"
+"\n"
+"Please visit the project's web site and follow the instructions there."
+msgstr ""
+
+#: AlreadyExistsPage.cpp:191
+msgid "Email address already in use"
+msgstr ""
+
+#: AlreadyExistsPage.cpp:194
+msgid ""
+"An account with that email address already exists and has a\n"
+"different password than the one you entered.\n"
+"\n"
+"Please visit the project's web site and follow the instructions there."
+msgstr ""
+
+#: AsyncRPC.cpp:1031
+msgid "Communicating with BOINC client. Please wait ..."
+msgstr ""
+
+#: AsyncRPC.cpp:1034
+#, c-format
+msgid "&Quit %s"
+msgstr ""
+
+#: AsyncRPC.cpp:1036
+#, c-format
+msgid "E&xit %s"
+msgstr ""
+
+#: AsyncRPC.cpp:1040
+#, c-format
+msgid "%s - Communication"
+msgstr ""
+
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
+msgid "Cancel"
+msgstr ""
+
+#: BOINCBaseFrame.cpp:505
+#, c-format
+msgid "%s - Connection Error"
+msgstr ""
+
+#: BOINCBaseFrame.cpp:514
+msgid ""
+"You currently are not authorized to manage the client.\n"
+"Please contact your administrator to add you to the 'boinc_users' local user "
+"group."
+msgstr ""
+
+#: BOINCBaseFrame.cpp:523
+msgid ""
+"Authorization failed connecting to running client.\n"
+"Make sure you start this program in the same directory as the client."
+msgstr ""
+
+#: BOINCBaseFrame.cpp:525
+msgid "Authorization failed connecting to running client."
+msgstr ""
+
+#: BOINCBaseFrame.cpp:533
+msgid "The password you have provided is incorrect, please try again."
+msgstr ""
+
+#: BOINCBaseFrame.cpp:577
+#, c-format
+msgid "%s - Connection Failed"
+msgstr ""
+
+#: BOINCBaseFrame.cpp:586
+#, c-format
+msgid ""
+"%s is not able to connect to a %s client.\n"
+"Would you like to try to connect again?"
+msgstr ""
+
+#: BOINCBaseFrame.cpp:622
+#, c-format
+msgid "%s - Daemon Start Failed"
+msgstr ""
+
+#: BOINCBaseFrame.cpp:632
+#, c-format
+msgid ""
+"%s is not able to start a %s client.\n"
+"Please launch the Control Panel->Administative Tools->Services applet and "
+"start the BOINC service."
+msgstr ""
+
+#: BOINCBaseFrame.cpp:638
+#, c-format
+msgid ""
+"%s is not able to start a %s client.\n"
+"Please start the daemon and try again."
+msgstr ""
+
+#: BOINCBaseFrame.cpp:689
+#, c-format
+msgid "%s - Connection Status"
+msgstr ""
+
+#: BOINCBaseFrame.cpp:700
+#, c-format
+msgid ""
+"%s is not currently connected to a %s client.\n"
+"Please use the 'Advanced\\Select Computer...' menu option to connect up to a "
+"%s client.\n"
+"To connect up to your local computer please use 'localhost' as the host name."
+msgstr ""
+
+#: BOINCBaseView.cpp:779
+msgid "Project web pages"
+msgstr ""
+
+#: BOINCClientManager.cpp:575
+#, c-format
+msgid "%s - Unexpected Exit"
+msgstr ""
+
+#: BOINCClientManager.cpp:585
+#, c-format
+msgid ""
+"The %s client has exited unexpectedly 3 times within the last %d minutes.\n"
+"Would you like to restart it again?"
+msgstr ""
+
+#: BOINCDialupManager.cpp:61
+#, c-format
+msgid "%s - Network Status"
+msgstr ""
+
+#: BOINCDialupManager.cpp:241
+#, c-format
+msgid ""
+"%s needs to connect to the Internet.\n"
+"May it do so now?"
+msgstr ""
+
+#: BOINCDialupManager.cpp:254
+#, c-format
+msgid "%s is connecting to the Internet."
+msgstr ""
+
+#: BOINCDialupManager.cpp:303
+#, c-format
+msgid "%s has successfully connected to the Internet."
+msgstr ""
+
+#: BOINCDialupManager.cpp:331
+#, c-format
+msgid "%s failed to connect to the Internet."
+msgstr ""
+
+#: BOINCDialupManager.cpp:372
+#, c-format
+msgid ""
+"%s has detected it is now connected to the Internet.\n"
+"Updating all projects and retrying all transfers."
+msgstr ""
+
+#: BOINCDialupManager.cpp:417
+#, c-format
+msgid "%s has successfully disconnected from the Internet."
+msgstr ""
+
+#: BOINCDialupManager.cpp:433
+#, c-format
+msgid "%s failed to disconnected from the Internet."
+msgstr ""
+
+#: BOINCGUIApp.cpp:339
+#, c-format
+msgid ""
+"You currently are not authorized to manage the client.\n"
+"\n"
+"To run %s as this user, please:\n"
+" - reinstall %s answering \"Yes\" to the question about\n"
+" non-administrative users\n"
+" or\n"
+" - contact your administrator to add you to the 'boinc_master'\n"
+" user group."
+msgstr ""
+
+#: BOINCGUIApp.cpp:345
+#, c-format
+msgid ""
+"%s ownership or permissions are not set properly; please reinstall %s.\n"
+"(Error code %d"
+msgstr ""
+
+#: BOINCGUIApp.cpp:351
+msgid " at "
+msgstr ""
+
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
+msgid ")"
+msgstr ""
+
+#: BOINCGUIApp.cpp:384
+msgid ""
+"A reboot is required in order for BOINC to run properly.\n"
+"Please reboot your computer and try again."
+msgstr ""
+
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
+msgid "BOINC Manager"
+msgstr ""
+
+#: BOINCGUIApp.cpp:572
+msgid "BOINC Manager was started by the operating system automatically"
+msgstr ""
+
+#: BOINCGUIApp.cpp:574
+msgid "Startup BOINC so only the system tray icon is visible"
+msgstr ""
+
+#: BOINCGUIApp.cpp:576
+msgid "Directory containing the BOINC Client executable"
+msgstr ""
+
+#: BOINCGUIApp.cpp:577
+msgid "BOINC data directory"
+msgstr ""
+
+#: BOINCGUIApp.cpp:579
+msgid "Host name or IP address"
+msgstr ""
+
+#: BOINCGUIApp.cpp:580
+msgid "GUI RPC port number"
+msgstr ""
+
+#: BOINCGUIApp.cpp:581
+msgid "Password"
+msgstr ""
+
+#: BOINCGUIApp.cpp:582
+msgid "Startup BOINC with these optional arguments"
+msgstr ""
+
+#: BOINCGUIApp.cpp:583
+msgid "disable BOINC security users and permissions"
+msgstr ""
+
+#: BOINCGUIApp.cpp:584
+msgid "set skin debugging mode to enable skin manager error messages"
+msgstr ""
+
+#: BOINCGUIApp.cpp:585
+msgid "multiple instances of BOINC Manager allowed"
+msgstr ""
+
+#: BOINCGUIApp.cpp:587
+msgid "Not used: workaround for bug in XCode 4.2"
+msgstr ""
+
+#: BOINCGUIApp.cpp:814
+msgid "(Automatic Detection)"
+msgstr ""
+
+#: BOINCGUIApp.cpp:815
+msgid "(Unknown)"
+msgstr ""
+
+#: BOINCGUIApp.cpp:816
+msgid "(User Defined)"
+msgstr ""
+
+#: BOINCTaskBar.cpp:508
+#, c-format
+msgid "Open %s Web..."
+msgstr ""
+
+#: BOINCTaskBar.cpp:515
+#, c-format
+msgid "Open %s..."
+msgstr ""
+
+#: BOINCTaskBar.cpp:522 BOINCTaskBar.cpp:619 BOINCTaskBar.cpp:627
+msgid "Snooze"
+msgstr ""
+
+#: BOINCTaskBar.cpp:524 BOINCTaskBar.cpp:646 BOINCTaskBar.cpp:654
+msgid "Snooze GPU"
+msgstr ""
+
+#: BOINCTaskBar.cpp:542
+msgid "E&xit"
+msgstr ""
+
+#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
+#: sg_TaskCommandPopup.cpp:102
+msgid "Resume"
+msgstr ""
+
+#: BOINCTaskBar.cpp:639
+msgid "Resume GPU"
+msgstr ""
+
+#: BOINCTaskBar.cpp:713
+msgid "Computing is enabled"
+msgstr ""
+
+#: BOINCTaskBar.cpp:717
+msgid "Computing is suspended - "
+msgstr ""
+
+#: BOINCTaskBar.cpp:727
+msgid "GPU computing is enabled"
+msgstr ""
+
+#: BOINCTaskBar.cpp:730
+msgid "GPU computing is suspended - "
+msgstr ""
+
+#: BOINCTaskBar.cpp:739
+msgid "Network is enabled"
+msgstr ""
+
+#: BOINCTaskBar.cpp:742
+msgid "Network is suspended - "
+msgstr ""
+
+#: BOINCTaskBar.cpp:750
+msgid "Reconnecting to client."
+msgstr ""
+
+#: BOINCTaskBar.cpp:752
+msgid "Not connected to a client."
+msgstr ""
+
+#: BOINCTaskBar.cpp:805
+#, c-format
+msgid "%s Notices"
+msgstr ""
+
+#: BOINCTaskBar.cpp:811
+msgid "There are new notices - click to view."
+msgstr ""
+
+#: CompletionErrorPage.cpp:199
+msgid "Failed to add project"
+msgstr ""
+
+#: CompletionErrorPage.cpp:204
+msgid "Failed to update account manager"
+msgstr ""
+
+#: CompletionErrorPage.cpp:208
+msgid "Failed to remove account manager"
+msgstr ""
+
+#: CompletionErrorPage.cpp:212
+msgid "Failed to add account manager"
+msgstr ""
+
+#: CompletionErrorPage.cpp:221
+msgid ""
+"Please try again later.\n"
+"\n"
+"Click Finish to close."
+msgstr ""
+
+#: CompletionErrorPage.cpp:225 CompletionPage.cpp:222 CompletionPage.cpp:242
+#: CompletionPage.cpp:273
+msgid "Click Finish to close."
+msgstr ""
+
+#: CompletionErrorPage.cpp:234
+msgid "Messages from server:"
+msgstr ""
+
+#: CompletionPage.cpp:207
+msgid "Project added"
+msgstr ""
+
+#: CompletionPage.cpp:213
+msgid "This project has been successfully added."
+msgstr ""
+
+#: CompletionPage.cpp:218
+msgid ""
+"When you click Finish, your web browser will go to a page where\n"
+"you can set your account name and preferences."
+msgstr ""
+
+#: CompletionPage.cpp:232
+#, c-format
+msgid "Update from %s completed."
+msgstr ""
+
+#: CompletionPage.cpp:236
+msgid "Update completed."
+msgstr ""
+
+#: CompletionPage.cpp:247
+msgid "Now using account manager"
+msgstr ""
+
+#: CompletionPage.cpp:252
+#, c-format
+msgid "Welcome to %s!"
+msgstr ""
+
+#: CompletionPage.cpp:263
+#, c-format
+msgid "You are now using %s to manage accounts."
+msgstr ""
+
+#: CompletionPage.cpp:267
+msgid "You are now using this account manager."
+msgstr ""
+
+#: DlgAbout.cpp:113 mac/Mac_GUI.cpp:96
+#, c-format
+msgid "About %s"
+msgstr ""
+
+#: DlgAbout.cpp:172
+msgid "Version:"
+msgstr ""
+
+#: DlgAbout.cpp:180
+msgid "wxWidgets Version:"
+msgstr ""
+
+#: DlgAbout.cpp:188
+msgid "Copyright:"
+msgstr ""
+
+#: DlgAbout.cpp:192
+msgid ""
+"(C) 2003-2013 University of California, Berkeley.\n"
+"All Rights Reserved."
+msgstr ""
+
+#: DlgAbout.cpp:196
+msgid "Berkeley Open Infrastructure for Network Computing"
+msgstr ""
+
+#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
+msgid "&OK"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:545
+msgid "invalid time, format is HH:MM"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:546
+msgid "invalid time interval, format is HH:MM-HH:MM"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:751
+msgid "invalid input value detected"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:753
+msgid "Validation Error"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
+msgid "Applications to add"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:914
+#, c-format
+msgid "'%s' is not an executable application."
+msgstr ""
+
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
+msgid "Add Exclusive App"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:927
+msgid "Name of application to add?"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:927
+msgid "Add exclusive app"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:961
+#, c-format
+msgid "Application names must end with '%s'"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:985
+#, c-format
+msgid "'%s' is already in the list."
+msgstr ""
+
+#: DlgAdvPreferences.cpp:1077
+msgid ""
+"Do you really want to clear all local preferences?\n"
+"(This will not affect exclusive applications.)"
+msgstr ""
+
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
+msgid "Confirmation"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
+#, c-format
+msgid "%s - Preferences"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:62
+msgid ""
+"This dialog controls preferences for this computer only.\n"
+"Click OK to set preferences.\n"
+"Click Clear to restore web-based settings (except exclusive apps)."
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
+msgid "Clear"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:66
+msgid "clear all local preferences and close the dialog"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:81
+msgid "processor usage"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:84
+msgid "network usage"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:87
+msgid "disk and memory usage"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:90
+msgid "exclusive applications"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
+msgid "OK"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:103
+msgid "save all values and close the dialog"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:108
+msgid "close the dialog without saving"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
+msgid "Help"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:113
+msgid "shows the preferences web page"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:135
+msgid "Computing allowed"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:139
+msgid "While computer is on batteries"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:142
+msgid ""
+"check this if you want this computer to do work while it runs on batteries"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:148
+msgid "While computer is in use"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:151
+msgid ""
+"check this if you want this computer to do work even when you're using it"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:157
+msgid "Use GPU while computer is in use"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:160
+msgid ""
+"check this if you want your GPU to do work even when you're using the "
+"computer"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:172
+msgid "Only after computer has been idle for"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:182
+msgid ""
+"do work only after you haven't used the computer for this number of minutes"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
+#: sg_DlgPreferences.cpp:417
+msgid "minutes"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:206
+msgid "While processor usage is less than"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:216
+msgid "suspend work if processor usage exceeds this level"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:221
+msgid "percent (0 means no restriction)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
+msgid "Every day between hours of"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:239
+msgid "start work at this time"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
+msgid "and"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:247
+msgid "stop work at this time"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
+msgid "(no restriction if equal)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
+msgid "Day-of-week override:"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
+msgid "check box to specify hours for this day of week"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
+msgid "Monday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
+msgid "Tuesday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
+msgid "Wednesday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
+msgid "Thursday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
+msgid "Friday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
+msgid "Saturday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
+msgid "Sunday"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:323
+msgid "Other options"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:330
+msgid "Switch between applications every"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:339
+msgid "On multiprocessor systems, use at most"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:346
+#, no-c-format
+msgid "% of the processors (0 means ignore this setting)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
+msgid "Use at most"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:356
+#, no-c-format
+msgid "% CPU time"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:378
+msgid "General options"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:386
+msgid "Maximum download rate"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
+msgid "KBytes/sec."
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:395
+msgid "Maximum upload rate"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:406
+msgid "Transfer at most"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:412
+msgid "Mbytes"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:415
+msgid "every"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
+msgid "days"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:429
+msgid "Minimum work buffer"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:438
+msgid "Try to maintain enough tasks to keep busy for this many days"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:450
+msgid "Max additional work buffer"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:459
+msgid "In addition, maintain enough tasks for up to this many days"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:466
+msgid "Skip image file verification"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:468
+msgid "check this if your Internet provider modifies image files"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:476
+msgid "Connect options"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:478
+msgid "Confirm before connecting to internet"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:480
+msgid ""
+"if checked, a confirmation dialog will be displayed before trying to connect "
+"to the Internet"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:484
+msgid "Disconnect when done"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:486
+msgid ""
+"if checked, BOINC hangs up when network usage is done\n"
+"(only relevant for dialup-connection)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:492
+msgid "Network usage allowed"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:500
+msgid "network usage start hour"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:508
+msgid "network usage stop hour"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
+msgid "Disk usage"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:609
+msgid "the maximum disk space used by BOINC (in Gigabytes)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:613
+msgid "Gigabytes disk space"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:616
+msgid "Leave at least"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:620
+msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:624
+msgid "Gigabytes disk space free"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:631
+msgid "BOINC uses at most this percentage of total disk space"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:636
+#, no-c-format
+msgid "% of total disk space"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:639
+msgid "Tasks checkpoint to disk at most every"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:645
+msgid "seconds"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:655
+#, no-c-format
+msgid "% of page file (swap space)"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:662
+msgid "Memory usage"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:676
+#, no-c-format
+msgid "% when computer is in use"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:686
+#, no-c-format
+msgid "% when computer is idle"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:691
+msgid "Leave applications in memory while suspended"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:693
+msgid "if checked, suspended work units are left in memory"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:713
+msgid ""
+"Suspend processor and network usage when these applications are running:"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:722
+msgid "Add..."
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:723
+msgid "Add an application to this list"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
+#: sg_ProjectCommandPopup.cpp:85
+msgid "Remove"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:729
+msgid "Remove an application from this list"
+msgstr ""
+
+#: DlgAdvPreferencesBase.cpp:738
+msgid "For advanced options, refer to "
+msgstr ""
+
+#: DlgEventLog.cpp:219
+#, c-format
+msgid "%s - Event Log"
+msgstr ""
+
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
+#: ViewWork.cpp:232
+msgid "Project"
+msgstr ""
+
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
+msgid "Time"
+msgstr ""
+
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
+msgid "Message"
+msgstr ""
+
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
+msgid "&Show only this project"
+msgstr ""
+
+#: DlgEventLog.cpp:294
+msgid "Copy &All"
+msgstr ""
+
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
+msgid "Copy all the messages to the clipboard."
+msgstr ""
+
+#: DlgEventLog.cpp:305
+msgid "Copy &Selected"
+msgstr ""
+
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
+msgid ""
+"Copy the selected messages to the clipboard. You can select multiple "
+"messages by holding down the shift or command key while clicking on messages."
+msgstr ""
+
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
+msgid ""
+"Copy the selected messages to the clipboard. You can select multiple "
+"messages by holding down the shift or control key while clicking on messages."
+msgstr ""
+
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
+msgid "&Close"
+msgstr ""
+
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
+#, c-format
+msgid "Get help with %s"
+msgstr ""
+
+#: DlgEventLog.cpp:348
+msgid "Show all &messages"
+msgstr ""
+
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
+msgid "Show messages for all projects"
+msgstr ""
+
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
+msgid "Show only the messages for the selected project"
+msgstr ""
+
+#: DlgExitMessage.cpp:82
+#, c-format
+msgid "%s - Exit Confirmation"
+msgstr ""
+
+#: DlgExitMessage.cpp:130
+#, c-format
+msgid ""
+"You have requested to exit the %s,\n"
+"which allows you to view and manage\n"
+"the tasks running on your computer.\n"
+"\n"
+"If you also want to stop running the tasks,\n"
+"choose from the following options:"
+msgstr ""
+
+#: DlgExitMessage.cpp:135
+#, c-format
+msgid ""
+"This will shut down %s and its tasks until either the\n"
+"%s or the %s screen saver is run again.\n"
+"\n"
+"In most cases, it is better just to close the %s window\n"
+"rather than to exit the application; that will allow %s to run its\n"
+"tasks at the times you selected in your preferences."
+msgstr ""
+
+#: DlgExitMessage.cpp:153
+#, c-format
+msgid "Stop running tasks when exiting the %s"
+msgstr ""
+
+#: DlgExitMessage.cpp:165
+msgid "Remember this decision and do not show this dialog."
+msgstr ""
+
+#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
+msgid "&Cancel"
+msgstr ""
+
+#: DlgGenericMessage.cpp:112
+msgid "Don't show this dialog again."
+msgstr ""
+
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
+msgid "Don't fetch tasks for "
+msgstr ""
+
+#: DlgItemProperties.cpp:168
+msgid "Project preference"
+msgstr ""
+
+#: DlgItemProperties.cpp:171
+msgid "Account manager preference"
+msgstr ""
+
+#: DlgItemProperties.cpp:174
+msgid "Project has no apps for "
+msgstr ""
+
+#: DlgItemProperties.cpp:177
+msgid "Client configuration excludes "
+msgstr ""
+
+#: DlgItemProperties.cpp:181
+msgid " work fetch deferred for"
+msgstr ""
+
+#: DlgItemProperties.cpp:182
+msgid " work fetch deferral interval"
+msgstr ""
+
+#: DlgItemProperties.cpp:213
+msgid "Properties of project "
+msgstr ""
+
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
+msgid "General"
+msgstr ""
+
+#: DlgItemProperties.cpp:218
+msgid "Master URL"
+msgstr ""
+
+#: DlgItemProperties.cpp:219
+msgid "User name"
+msgstr ""
+
+#: DlgItemProperties.cpp:220
+msgid "Team name"
+msgstr ""
+
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
+msgid "Resource share"
+msgstr ""
+
+#: DlgItemProperties.cpp:223
+msgid "Scheduler RPC deferred for"
+msgstr ""
+
+#: DlgItemProperties.cpp:226
+msgid "File downloads deferred for"
+msgstr ""
+
+#: DlgItemProperties.cpp:229
+msgid "File uploads deferred for"
+msgstr ""
+
+#: DlgItemProperties.cpp:232
+msgid "Computer ID"
+msgstr ""
+
+#: DlgItemProperties.cpp:234
+msgid "Non CPU intensive"
+msgstr ""
+
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
+msgid "yes"
+msgstr ""
+
+#: DlgItemProperties.cpp:236
+msgid "Suspended via GUI"
+msgstr ""
+
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
+msgid "no"
+msgstr ""
+
+#: DlgItemProperties.cpp:237
+msgid "Don't request more work"
+msgstr ""
+
+#: DlgItemProperties.cpp:239
+msgid "Scheduler call in progress"
+msgstr ""
+
+#: DlgItemProperties.cpp:242
+msgid "Trickle-up pending"
+msgstr ""
+
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
+msgid "Host location"
+msgstr ""
+
+#: DlgItemProperties.cpp:247
+msgid "default"
+msgstr ""
+
+#: DlgItemProperties.cpp:251
+msgid "Added via account manager"
+msgstr ""
+
+#: DlgItemProperties.cpp:254
+msgid "Remove when tasks done"
+msgstr ""
+
+#: DlgItemProperties.cpp:257
+msgid "Ended"
+msgstr ""
+
+#: DlgItemProperties.cpp:259
+msgid "Credit"
+msgstr ""
+
+#: DlgItemProperties.cpp:260
+msgid "User"
+msgstr ""
+
+#: DlgItemProperties.cpp:267
+msgid "Host"
+msgstr ""
+
+#: DlgItemProperties.cpp:276
+msgid "Scheduling"
+msgstr ""
+
+#: DlgItemProperties.cpp:277
+msgid "Scheduling priority"
+msgstr ""
+
+#: DlgItemProperties.cpp:278
+msgid "CPU"
+msgstr ""
+
+#: DlgItemProperties.cpp:302
+msgid "Duration correction factor"
+msgstr ""
+
+#: DlgItemProperties.cpp:316
+msgid "Properties of task "
+msgstr ""
+
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
+msgid "Application"
+msgstr ""
+
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr ""
+
+#: DlgItemProperties.cpp:330
+msgid "State"
+msgstr ""
+
+#: DlgItemProperties.cpp:333
+msgid "Received"
+msgstr ""
+
+#: DlgItemProperties.cpp:336
+msgid "Report deadline"
+msgstr ""
+
+#: DlgItemProperties.cpp:338
+msgid "Resources"
+msgstr ""
+
+#: DlgItemProperties.cpp:341
+msgid "Estimated computation size"
+msgstr ""
+
+#: DlgItemProperties.cpp:344
+msgid "CPU time at last checkpoint"
+msgstr ""
+
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
+msgid "CPU time"
+msgstr ""
+
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
+msgid "Elapsed time"
+msgstr ""
+
+#: DlgItemProperties.cpp:349
+msgid "Estimated time remaining"
+msgstr ""
+
+#: DlgItemProperties.cpp:350
+msgid "Fraction done"
+msgstr ""
+
+#: DlgItemProperties.cpp:351
+msgid "Virtual memory size"
+msgstr ""
+
+#: DlgItemProperties.cpp:352
+msgid "Working set size"
+msgstr ""
+
+#: DlgItemProperties.cpp:354
+msgid "Directory"
+msgstr ""
+
+#: DlgItemProperties.cpp:357
+msgid "Process ID"
+msgstr ""
+
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
+msgid "Local: "
+msgstr ""
+
+#: DlgOptions.cpp:129 DlgOptions.cpp:135
+msgid "Options"
+msgstr ""
+
+#: DlgOptions.cpp:175
+msgid "Language:"
+msgstr ""
+
+#: DlgOptions.cpp:182
+msgid "What language should BOINC use?"
+msgstr ""
+
+#: DlgOptions.cpp:186
+msgid "Notice reminder interval:"
+msgstr ""
+
+#: DlgOptions.cpp:193
+msgid "How often should BOINC remind you of new notices?"
+msgstr ""
+
+#: DlgOptions.cpp:198
+msgid "Run Manager at login?"
+msgstr ""
+
+#: DlgOptions.cpp:204
+msgid "Run the BOINC Manager when you log on."
+msgstr ""
+
+#: DlgOptions.cpp:209
+msgid "Enable Manager exit dialog?"
+msgstr ""
+
+#: DlgOptions.cpp:215
+msgid "Display the exit dialog when shutting down the Manager."
+msgstr ""
+
+#: DlgOptions.cpp:226
+msgid "Dial-up and Virtual Private Network settings"
+msgstr ""
+
+#: DlgOptions.cpp:240
+msgid "&Set Default"
+msgstr ""
+
+#: DlgOptions.cpp:245
+msgid "&Clear Default"
+msgstr ""
+
+#: DlgOptions.cpp:252
+msgid "Default Connection:"
+msgstr ""
+
+#: DlgOptions.cpp:259
+msgid "Connections"
+msgstr ""
+
+#: DlgOptions.cpp:268
+msgid "Connect via HTTP proxy server"
+msgstr ""
+
+#: DlgOptions.cpp:272
+msgid "HTTP Proxy Server Configuration"
+msgstr ""
+
+#: DlgOptions.cpp:280 DlgOptions.cpp:344
+msgid "Address:"
+msgstr ""
+
+#: DlgOptions.cpp:288 DlgOptions.cpp:352 ProxyPage.cpp:340 ProxyPage.cpp:360
+msgid "Port:"
+msgstr ""
+
+#: DlgOptions.cpp:296 DlgOptions.cpp:360
+msgid "Don't use proxy for:"
+msgstr ""
+
+#: DlgOptions.cpp:303 DlgOptions.cpp:367
+msgid "Leave these blank if not needed"
+msgstr ""
+
+#: DlgOptions.cpp:309 DlgOptions.cpp:373 ProxyPage.cpp:343 ProxyPage.cpp:363
+msgid "User Name:"
+msgstr ""
+
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
+#: ProxyPage.cpp:346 ProxyPage.cpp:366
+msgid "Password:"
+msgstr ""
+
+#: DlgOptions.cpp:324
+msgid "HTTP Proxy"
+msgstr ""
+
+#: DlgOptions.cpp:332
+msgid "Connect via SOCKS proxy server"
+msgstr ""
+
+#: DlgOptions.cpp:336
+msgid "SOCKS Proxy Server Configuration"
+msgstr ""
+
+#: DlgOptions.cpp:388
+msgid "SOCKS Proxy"
+msgstr ""
+
+#: DlgOptions.cpp:586
+msgid "always"
+msgstr ""
+
+#: DlgOptions.cpp:587
+msgid "1 hour"
+msgstr ""
+
+#: DlgOptions.cpp:588
+msgid "6 hours"
+msgstr ""
+
+#: DlgOptions.cpp:589
+msgid "1 day"
+msgstr ""
+
+#: DlgOptions.cpp:590
+msgid "1 week"
+msgstr ""
+
+#: DlgOptions.cpp:591
+msgid "never"
+msgstr ""
+
+#: DlgOptions.cpp:688
+#, c-format
+msgid "%s - Language Selection"
+msgstr ""
+
+#: DlgOptions.cpp:695
+#, c-format
+msgid ""
+"The %s's language has been changed. In order for this change to take "
+"effect, you must restart the %s."
+msgstr ""
+
+#: DlgSelectComputer.cpp:91
+#, c-format
+msgid "%s - Select Computer"
+msgstr ""
+
+#: DlgSelectComputer.cpp:125
+#, c-format
+msgid ""
+"Another instance of %s is already running \n"
+"on this computer. Please select a client to monitor."
+msgstr ""
+
+#: DlgSelectComputer.cpp:143
+msgid "Host name:"
+msgstr ""
+
+#: Localization.cpp:31 Localization.cpp:69
+msgid "Message boards"
+msgstr ""
+
+#: Localization.cpp:33
+msgid "Correspond with other users on the SETI at home message boards"
+msgstr ""
+
+#: Localization.cpp:37
+msgid "Ask questions and report problems"
+msgstr ""
+
+#: Localization.cpp:39 Localization.cpp:81 Localization.cpp:111
+#: Localization.cpp:129
+msgid "Your account"
+msgstr ""
+
+#: Localization.cpp:41 Localization.cpp:87 Localization.cpp:113
+msgid "View your account information and credit totals"
+msgstr ""
+
+#: Localization.cpp:43
+msgid "Your preferences"
+msgstr ""
+
+#: Localization.cpp:45
+msgid "View and modify your SETI at home account profile and preferences"
+msgstr ""
+
+#: Localization.cpp:47 Localization.cpp:89
+msgid "Your results"
+msgstr ""
+
+#: Localization.cpp:49 Localization.cpp:91
+msgid "View your last week (or more) of computational results and work"
+msgstr ""
+
+#: Localization.cpp:51 Localization.cpp:93
+msgid "Your computers"
+msgstr ""
+
+#: Localization.cpp:53
+msgid "View a listing of all the computers on which you are running SETI at Home"
+msgstr ""
+
+#: Localization.cpp:55 Localization.cpp:97
+msgid "Your team"
+msgstr ""
+
+#: Localization.cpp:57 Localization.cpp:99
+msgid "View information about your team"
+msgstr ""
+
+#: Localization.cpp:61
+msgid "Common questions"
+msgstr ""
+
+#: Localization.cpp:63
+msgid "Read the Einstein at Home Frequently Asked Question list"
+msgstr ""
+
+#: Localization.cpp:65
+msgid "Screensaver info"
+msgstr ""
+
+#: Localization.cpp:67
+msgid "Read a detailed description of the Einstein at Home screensaver"
+msgstr ""
+
+#: Localization.cpp:71
+msgid ""
+"Correspond with admins and other users on the Einstein at Home message boards"
+msgstr ""
+
+#: Localization.cpp:73
+msgid "Einstein status"
+msgstr ""
+
+#: Localization.cpp:75
+msgid "Current status of the Einstein at Home server"
+msgstr ""
+
+#: Localization.cpp:77
+msgid "Report problems"
+msgstr ""
+
+#: Localization.cpp:79
+msgid "A link to the Einstein at Home problems and bug reports message board"
+msgstr ""
+
+#: Localization.cpp:83
+msgid "View and modify your Einstein at Home account profile and preferences"
+msgstr ""
+
+#: Localization.cpp:85
+msgid "Account summary"
+msgstr ""
+
+#: Localization.cpp:95
+msgid ""
+"View a listing of all the computers on which you are running Einstein at Home"
+msgstr ""
+
+#: Localization.cpp:101
+msgid "LIGO project"
+msgstr ""
+
+#: Localization.cpp:103
+msgid ""
+"The home page of the Laser Interferometer Gravitational-wave Observatory "
+"(LIGO) project"
+msgstr ""
+
+#: Localization.cpp:105
+msgid "GEO-600 project"
+msgstr ""
+
+#: Localization.cpp:107
+msgid "The home page of the GEO-600 project"
+msgstr ""
+
+#: Localization.cpp:115 Localization.cpp:133 ViewProjects.cpp:221
+#: ViewStatistics.cpp:465
+msgid "Team"
+msgstr ""
+
+#: Localization.cpp:117
+msgid "Info about your Team"
+msgstr ""
+
+#: Localization.cpp:123
+msgid "Get help for climateprediction.net"
+msgstr ""
+
+#: Localization.cpp:125
+msgid "News"
+msgstr ""
+
+#: Localization.cpp:127
+msgid "climateprediction.net News"
+msgstr ""
+
+#: Localization.cpp:131
+msgid "View your account information, credits, and trickles"
+msgstr ""
+
+#: Localization.cpp:135
+msgid "Info about your team"
+msgstr ""
+
+#: Localization.cpp:141
+msgid "Search for help in our help system"
+msgstr ""
+
+#: Localization.cpp:143
+msgid "Global Statistics"
+msgstr ""
+
+#: Localization.cpp:145
+msgid "Summary statistics for World Community Grid"
+msgstr ""
+
+#: Localization.cpp:147
+msgid "My Grid"
+msgstr ""
+
+#: Localization.cpp:149
+msgid "Your statistics and settings"
+msgstr ""
+
+#: Localization.cpp:151
+msgid "Device Profiles"
+msgstr ""
+
+#: Localization.cpp:153
+msgid "Update your device settings"
+msgstr ""
+
+#: Localization.cpp:155
+msgid "Research"
+msgstr ""
+
+#: Localization.cpp:157
+msgid "Learn about the projects hosted at World Community Grid"
+msgstr ""
+
+#: MainDocument.cpp:583
+msgid "Starting client"
+msgstr ""
+
+#: MainDocument.cpp:591
+msgid "Connecting to client"
+msgstr ""
+
+#: MainDocument.cpp:1195
+msgid "Retrieving system state; please wait..."
+msgstr ""
+
+#: MainDocument.cpp:1816
+msgid "Missing application"
+msgstr ""
+
+#: MainDocument.cpp:1817
+msgid ""
+"Please download and install the CoRD application from http://cord."
+"sourceforge.net"
+msgstr ""
+
+#: MainDocument.cpp:2432
+msgid "on batteries"
+msgstr ""
+
+#: MainDocument.cpp:2433
+msgid "computer is in use"
+msgstr ""
+
+#: MainDocument.cpp:2434
+msgid "user request"
+msgstr ""
+
+#: MainDocument.cpp:2435
+msgid "time of day"
+msgstr ""
+
+#: MainDocument.cpp:2436
+msgid "CPU benchmarks in progress"
+msgstr ""
+
+#: MainDocument.cpp:2437
+msgid "need disk space - check preferences"
+msgstr ""
+
+#: MainDocument.cpp:2438
+msgid "computer is not in use"
+msgstr ""
+
+#: MainDocument.cpp:2439
+msgid "starting up"
+msgstr ""
+
+#: MainDocument.cpp:2440
+msgid "an exclusive app is running"
+msgstr ""
+
+#: MainDocument.cpp:2441
+msgid "CPU is busy"
+msgstr ""
+
+#: MainDocument.cpp:2442
+msgid "network bandwidth limit exceeded"
+msgstr ""
+
+#: MainDocument.cpp:2443
+msgid "requested by operating system"
+msgstr ""
+
+#: MainDocument.cpp:2445
+msgid "unknown reason"
+msgstr ""
+
+#: MainDocument.cpp:2467
+msgid "GPU missing, "
+msgstr ""
+
+#: MainDocument.cpp:2474
+msgid "New"
+msgstr ""
+
+#: MainDocument.cpp:2478
+msgid "Download failed"
+msgstr ""
+
+#: MainDocument.cpp:2480
+msgid "Downloading"
+msgstr ""
+
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
+msgid " (suspended - "
+msgstr ""
+
+#: MainDocument.cpp:2490
+msgid "Project suspended by user"
+msgstr ""
+
+#: MainDocument.cpp:2492
+msgid "Task suspended by user"
+msgstr ""
+
+#: MainDocument.cpp:2494
+msgid "Suspended - "
+msgstr ""
+
+#: MainDocument.cpp:2500
+msgid "GPU suspended - "
+msgstr ""
+
+#: MainDocument.cpp:2507
+msgid "Waiting for memory"
+msgstr ""
+
+#: MainDocument.cpp:2509
+msgid "Waiting for shared memory"
+msgstr ""
+
+#: MainDocument.cpp:2512
+msgid "Running, high priority"
+msgstr ""
+
+#: MainDocument.cpp:2514
+msgid "Running"
+msgstr ""
+
+#: MainDocument.cpp:2517
+msgid " (non-CPU-intensive)"
+msgstr ""
+
+#: MainDocument.cpp:2520
+msgid "Waiting to run"
+msgstr ""
+
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
+msgid "Ready to start"
+msgstr ""
+
+#: MainDocument.cpp:2532
+msgid " (Scheduler wait: "
+msgstr ""
+
+#: MainDocument.cpp:2536
+msgid " (Scheduler wait)"
+msgstr ""
+
+#: MainDocument.cpp:2540
+msgid " (Waiting for network access)"
+msgstr ""
+
+#: MainDocument.cpp:2544
+msgid "Computation error"
+msgstr ""
+
+#: MainDocument.cpp:2548
+msgid "Upload failed"
+msgstr ""
+
+#: MainDocument.cpp:2550
+msgid "Uploading"
+msgstr ""
+
+#: MainDocument.cpp:2561
+msgid "Aborted by user"
+msgstr ""
+
+#: MainDocument.cpp:2564
+msgid "Aborted by project"
+msgstr ""
+
+#: MainDocument.cpp:2567
+msgid "Aborted: not started by deadline"
+msgstr ""
+
+#: MainDocument.cpp:2570
+msgid "Aborted: disk limit exceeded"
+msgstr ""
+
+#: MainDocument.cpp:2573
+msgid "Aborted: run time limit exceeded"
+msgstr ""
+
+#: MainDocument.cpp:2576
+msgid "Aborted: memory limit exceeded"
+msgstr ""
+
+#: MainDocument.cpp:2579
+msgid "Aborted"
+msgstr ""
+
+#: MainDocument.cpp:2584
+msgid "Acknowledged"
+msgstr ""
+
+#: MainDocument.cpp:2586
+msgid "Ready to report"
+msgstr ""
+
+#: MainDocument.cpp:2588
+#, c-format
+msgid "Error: invalid state '%d'"
+msgstr ""
+
+#: NoInternetConnectionPage.cpp:179
+msgid "No Internet connection"
+msgstr ""
+
+#: NoInternetConnectionPage.cpp:182
+msgid "Please connect to the Internet and try again."
+msgstr ""
+
+#: NotDetectedPage.cpp:181
+msgid "Project not found"
+msgstr ""
+
+#: NotDetectedPage.cpp:184
+msgid ""
+"The URL you supplied is not that of a BOINC-based project.\n"
+"\n"
+"Please check the URL and try again."
+msgstr ""
+
+#: NotDetectedPage.cpp:188
+msgid "Account manager not found"
+msgstr ""
+
+#: NotDetectedPage.cpp:191
+msgid ""
+"The URL you supplied is not that of a BOINC-based account\n"
+"manager.\n"
+"\n"
+"Please check the URL and try again."
+msgstr ""
+
+#: NotFoundPage.cpp:181
+msgid "Login Failed."
+msgstr ""
+
+#: NotFoundPage.cpp:185
+msgid "Check the username and password, and try again."
+msgstr ""
+
+#: NotFoundPage.cpp:189
+msgid "Check the email address and password, and try again."
+msgstr ""
+
+#: NoticeListCtrl.cpp:222
+msgid "more..."
+msgstr ""
+
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
+msgid "All"
+msgstr ""
+
+#: ProjectInfoPage.cpp:615
+msgid "Choose a project"
+msgstr ""
+
+#: ProjectInfoPage.cpp:619
+msgid "To choose a project, click its name or type its URL below."
+msgstr ""
+
+#: ProjectInfoPage.cpp:623
+msgid "Categories:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
+msgid "Projects:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:631
+msgid "Project details"
+msgstr ""
+
+#: ProjectInfoPage.cpp:635
+msgid "Research area:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:639
+msgid "Organization:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:643
+msgid "Web site:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:647
+msgid "Supported systems:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:651
+msgid "Project URL:"
+msgstr ""
+
+#: ProjectInfoPage.cpp:826
+msgid ""
+"This project may not have work for your type of computer. Do you want to "
+"add it anyway?"
+msgstr ""
+
+#: ProjectInfoPage.cpp:850
+msgid "You already added this project. Please choose a different project."
+msgstr ""
+
+#: ProjectProcessingPage.cpp:321
+msgid "Communicating with project."
+msgstr ""
+
+#: ProjectProcessingPage.cpp:509
+msgid "Required files not found on the server."
+msgstr ""
+
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
+msgid "An internal server error has occurred."
+msgstr ""
+
+#: ProjectPropertiesPage.cpp:334
+msgid ""
+"Communicating with project\n"
+"Please wait..."
+msgstr ""
+
+#: ProxyInfoPage.cpp:195
+msgid "Network communication failure"
+msgstr ""
+
+#: ProxyInfoPage.cpp:199
+msgid ""
+"The World Community Grid - BOINC software failed to communicate\n"
+"over the Internet. The most likely reasons are:\n"
+"\n"
+"1) Connectivity problem. Check your network or modem connection\n"
+"and then click Back to try again.\n"
+"\n"
+"2) Personal firewall software is blocking the World Community\n"
+"Grid - BOINC software. Configure your personal firewall to let\n"
+"BOINC and BOINC Manager communicate on port 80 and port 443,\n"
+"then click Back to try again.\n"
+"\n"
+"3) You are using a proxy server.\n"
+"Click Next to configure BOINC's proxy settings."
+msgstr ""
+
+#: ProxyInfoPage.cpp:203
+msgid ""
+"BOINC failed to communicate on the Internet.\n"
+"The most likely reasons are:\n"
+"\n"
+"1) Connectivity problem. Check your network\n"
+"or modem connection and then click Back to try again.\n"
+"\n"
+"2) Personal firewall software is blocking BOINC.\n"
+"Configure your personal firewall to let BOINC and\n"
+"BOINC Manager communicate on port 80,\n"
+"then click Back to try again.\n"
+"\n"
+"3) You are using a proxy server.\n"
+"Click Next to configure BOINC's proxy settings."
+msgstr ""
+
+#: ProxyPage.cpp:331
+msgid "Proxy configuration"
+msgstr ""
+
+#: ProxyPage.cpp:334
+msgid "HTTP proxy"
+msgstr ""
+
+#: ProxyPage.cpp:337 ProxyPage.cpp:357
+msgid "Server:"
+msgstr ""
+
+#: ProxyPage.cpp:350
+msgid "Autodetect"
+msgstr ""
+
+#: ProxyPage.cpp:354
+msgid "SOCKS proxy"
+msgstr ""
+
+#: TermsOfUsePage.cpp:218
+msgid "Terms of Use"
+msgstr ""
+
+#: TermsOfUsePage.cpp:222
+msgid "Please read the following terms of use:"
+msgstr ""
+
+#: TermsOfUsePage.cpp:231
+msgid "I agree to the terms of use."
+msgstr ""
+
+#: TermsOfUsePage.cpp:237
+msgid "I do not agree to the terms of use."
+msgstr ""
+
+#: UnavailablePage.cpp:183
+msgid "Project temporarily unavailable"
+msgstr ""
+
+#: UnavailablePage.cpp:186
+msgid ""
+"The project is temporarily unavailable.\n"
+"\n"
+"Please try again later."
+msgstr ""
+
+#: UnavailablePage.cpp:190
+msgid "Account manager temporarily unavailable"
+msgstr ""
+
+#: UnavailablePage.cpp:193
+msgid ""
+"The account manager is temporarily unavailable.\n"
+"\n"
+"Please try again later."
+msgstr ""
+
+#: ValidateAccountKey.cpp:68
+msgid "Please specify an account key to continue."
+msgstr ""
+
+#: ValidateAccountKey.cpp:71
+msgid "Invalid Account Key; please enter a valid Account Key"
+msgstr ""
+
+#: ValidateAccountKey.cpp:82 ValidateEmailAddress.cpp:86
+msgid "Validation conflict"
+msgstr ""
+
+#: ValidateEmailAddress.cpp:72
+msgid "Please specify an email address"
+msgstr ""
+
+#: ValidateEmailAddress.cpp:75
+msgid "Invalid email address; please enter a valid email address"
+msgstr ""
+
+#: ValidateURL.cpp:69
+msgid "Missing URL"
+msgstr ""
+
+#: ValidateURL.cpp:70
+msgid ""
+"Please specify a URL.\n"
+"For example:\n"
+"http://www.example.com/"
+msgstr ""
+
+#: ValidateURL.cpp:83 ValidateURL.cpp:87 ValidateURL.cpp:91
+#: ValidateURL.cpp:103 ValidateURL.cpp:107 ValidateURL.cpp:110
+msgid "Invalid URL"
+msgstr ""
+
+#: ValidateURL.cpp:84 ValidateURL.cpp:88 ValidateURL.cpp:92
+msgid ""
+"Please specify a valid URL.\n"
+"For example:\n"
+"http://boincproject.example.com"
+msgstr ""
+
+#: ValidateURL.cpp:104 ValidateURL.cpp:108
+#, c-format
+msgid "'%s' does not contain a valid host name."
+msgstr ""
+
+#: ValidateURL.cpp:111
+#, c-format
+msgid "'%s' does not contain a valid path."
+msgstr ""
+
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
+#: ViewTransfers.cpp:160 ViewWork.cpp:183
+msgid "Commands"
+msgstr ""
+
+#: ViewMessages.cpp:88
+msgid "Copy all messages"
+msgstr ""
+
+#: ViewMessages.cpp:95
+msgid "Copy selected messages"
+msgstr ""
+
+#: ViewMessages.cpp:106 ViewMessages.cpp:502
+msgid "Show only this project"
+msgstr ""
+
+#: ViewMessages.cpp:107 ViewMessages.cpp:503
+msgid "Show only the messages for the selected project."
+msgstr ""
+
+#: ViewMessages.cpp:164
+msgid "Messages"
+msgstr ""
+
+#: ViewMessages.cpp:187
+msgid "Copying all messages to the clipboard..."
+msgstr ""
+
+#: ViewMessages.cpp:223
+msgid "Copying selected messages to the clipboard..."
+msgstr ""
+
+#: ViewMessages.cpp:286
+msgid "Filtering messages..."
+msgstr ""
+
+#: ViewMessages.cpp:494
+msgid "Show all messages"
+msgstr ""
+
+#: ViewMessages.cpp:495
+msgid "Show messages for all projects."
+msgstr ""
+
+#: ViewNotices.cpp:58 sg_DlgMessages.cpp:124
+msgid "Fetching notices; please wait..."
+msgstr ""
+
+#: ViewNotices.cpp:65 sg_DlgMessages.cpp:132
+msgid "There are no notices at this time."
+msgstr ""
+
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
+msgid "Notices"
+msgstr ""
+
+#: ViewProjects.cpp:174 sg_ProjectCommandPopup.cpp:61
+msgid "Update"
+msgstr ""
+
+#: ViewProjects.cpp:175 sg_ProjectCommandPopup.cpp:62
+msgid ""
+"Report all completed tasks, get latest credit, get latest preferences, and "
+"possibly get more tasks."
+msgstr ""
+
+#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
+#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
+#: sg_TaskCommandPopup.cpp:106
+msgid "Suspend"
+msgstr ""
+
+#: ViewProjects.cpp:182 ViewProjects.cpp:722 sg_ProjectCommandPopup.cpp:68
+#: sg_ProjectCommandPopup.cpp:114
+msgid "Suspend tasks for this project."
+msgstr ""
+
+#: ViewProjects.cpp:188 ViewProjects.cpp:741 sg_ProjectCommandPopup.cpp:73
+#: sg_ProjectCommandPopup.cpp:121
+msgid "No new tasks"
+msgstr ""
+
+#: ViewProjects.cpp:189 sg_ProjectCommandPopup.cpp:74
+msgid "Don't get new tasks for this project."
+msgstr ""
+
+#: ViewProjects.cpp:195 sg_ProjectCommandPopup.cpp:79
+msgid "Reset project"
+msgstr ""
+
+#: ViewProjects.cpp:196 sg_ProjectCommandPopup.cpp:80
+msgid ""
+"Delete all files and tasks associated with this project, and get new tasks. "
+"You can update the project first to report any completed tasks."
+msgstr ""
+
+#: ViewProjects.cpp:203 sg_ProjectCommandPopup.cpp:86
+msgid ""
+"Remove this project. Tasks in progress will be lost (use 'Update' first to "
+"report any completed tasks)."
+msgstr ""
+
+#: ViewProjects.cpp:209 ViewWork.cpp:222 sg_ProjectCommandPopup.cpp:91
+#: sg_TaskCommandPopup.cpp:78
+msgid "Properties"
+msgstr ""
+
+#: ViewProjects.cpp:210 sg_ProjectCommandPopup.cpp:92
+msgid "Show project details."
+msgstr ""
+
+#: ViewProjects.cpp:220 ViewStatistics.cpp:450
+msgid "Account"
+msgstr ""
+
+#: ViewProjects.cpp:222
+msgid "Work done"
+msgstr ""
+
+#: ViewProjects.cpp:223
+msgid "Avg. work done"
+msgstr ""
+
+#: ViewProjects.cpp:225 ViewTransfers.cpp:188 ViewWork.cpp:234
+msgid "Status"
+msgstr ""
+
+#: ViewProjects.cpp:250
+msgid "Projects"
+msgstr ""
+
+#: ViewProjects.cpp:302
+msgid "Updating project..."
+msgstr ""
+
+#: ViewProjects.cpp:344
+msgid "Resuming project..."
+msgstr ""
+
+#: ViewProjects.cpp:348
+msgid "Suspending project..."
+msgstr ""
+
+#: ViewProjects.cpp:385
+msgid "Telling project to allow additional task downloads..."
+msgstr ""
+
+#: ViewProjects.cpp:389
+msgid "Telling project to not fetch any additional tasks..."
+msgstr ""
+
+#: ViewProjects.cpp:425
+msgid "Resetting project..."
+msgstr ""
+
+#: ViewProjects.cpp:438 sg_ProjectCommandPopup.cpp:214
+#, c-format
+msgid "Are you sure you want to reset project '%s'?"
+msgstr ""
+
+#: ViewProjects.cpp:444 sg_ProjectCommandPopup.cpp:220
+msgid "Reset Project"
+msgstr ""
+
+#: ViewProjects.cpp:483
+msgid "Removing project..."
+msgstr ""
+
+#: ViewProjects.cpp:496 sg_ProjectCommandPopup.cpp:251
+#, c-format
+msgid "Are you sure you want to remove project '%s'?"
+msgstr ""
+
+#: ViewProjects.cpp:502 sg_ProjectCommandPopup.cpp:257
+msgid "Remove Project"
+msgstr ""
+
+#: ViewProjects.cpp:543 ViewWork.cpp:599
+msgid "Launching browser..."
+msgstr ""
+
+#: ViewProjects.cpp:718 sg_ProjectCommandPopup.cpp:111
+msgid "Resume tasks for this project."
+msgstr ""
+
+#: ViewProjects.cpp:737 sg_ProjectCommandPopup.cpp:118
+msgid "Allow new tasks"
+msgstr ""
+
+#: ViewProjects.cpp:737 sg_ProjectCommandPopup.cpp:119
+msgid "Allow fetching new tasks for this project."
+msgstr ""
+
+#: ViewProjects.cpp:741 sg_ProjectCommandPopup.cpp:122
+msgid "Don't fetch new tasks for this project."
+msgstr ""
+
+#: ViewProjects.cpp:1058
+msgid "Requested by user"
+msgstr ""
+
+#: ViewProjects.cpp:1059
+msgid "To fetch work"
+msgstr ""
+
+#: ViewProjects.cpp:1060
+msgid "To report completed tasks"
+msgstr ""
+
+#: ViewProjects.cpp:1061
+msgid "To send trickle-up message"
+msgstr ""
+
+#: ViewProjects.cpp:1062
+msgid "Requested by account manager"
+msgstr ""
+
+#: ViewProjects.cpp:1063
+msgid "Project initialization"
+msgstr ""
+
+#: ViewProjects.cpp:1064
+msgid "Requested by project"
+msgstr ""
+
+#: ViewProjects.cpp:1065
+msgid "Unknown reason"
+msgstr ""
+
+#: ViewProjects.cpp:1079
+msgid "Suspended by user"
+msgstr ""
+
+#: ViewProjects.cpp:1082
+msgid "Won't get new tasks"
+msgstr ""
+
+#: ViewProjects.cpp:1085
+msgid "Project ended - OK to remove"
+msgstr ""
+
+#: ViewProjects.cpp:1088
+msgid "Will remove when tasks done"
+msgstr ""
+
+#: ViewProjects.cpp:1091
+msgid "Scheduler request pending"
+msgstr ""
+
+#: ViewProjects.cpp:1097
+msgid "Scheduler request in progress"
+msgstr ""
+
+#: ViewProjects.cpp:1100
+msgid "Trickle up message pending"
+msgstr ""
+
+#: ViewProjects.cpp:1106
+msgid "Communication deferred "
+msgstr ""
+
+#: ViewResources.cpp:62
+msgid "Total disk usage"
+msgstr ""
+
+#: ViewResources.cpp:83
+msgid "Disk usage by BOINC projects"
+msgstr ""
+
+#: ViewResources.cpp:116
+msgid "Disk"
+msgstr ""
+
+#: ViewResources.cpp:249
+msgid "no projects: 0 bytes used"
+msgstr ""
+
+#: ViewResources.cpp:286
+msgid "used by BOINC: "
+msgstr ""
+
+#: ViewResources.cpp:296
+msgid "free, available to BOINC: "
+msgstr ""
+
+#: ViewResources.cpp:306
+msgid "free, not available to BOINC: "
+msgstr ""
+
+#: ViewResources.cpp:316
+msgid "free: "
+msgstr ""
+
+#: ViewResources.cpp:326
+msgid "used by other programs: "
+msgstr ""
+
+#: ViewStatistics.cpp:1205
+msgid "User Total"
+msgstr ""
+
+#: ViewStatistics.cpp:1206
+msgid "User Average"
+msgstr ""
+
+#: ViewStatistics.cpp:1207
+msgid "Host Total"
+msgstr ""
+
+#: ViewStatistics.cpp:1208
+msgid "Host Average"
+msgstr ""
+
+#: ViewStatistics.cpp:1355
+#, c-format
+msgid "Last update: %.0f days ago"
+msgstr ""
+
+#: ViewStatistics.cpp:1982
+msgid "Show user total"
+msgstr ""
+
+#: ViewStatistics.cpp:1983
+msgid "Show total credit for user"
+msgstr ""
+
+#: ViewStatistics.cpp:1989
+msgid "Show user average"
+msgstr ""
+
+#: ViewStatistics.cpp:1990
+msgid "Show average credit for user"
+msgstr ""
+
+#: ViewStatistics.cpp:1996
+msgid "Show host total"
+msgstr ""
+
+#: ViewStatistics.cpp:1997
+msgid "Show total credit for host"
+msgstr ""
+
+#: ViewStatistics.cpp:2003
+msgid "Show host average"
+msgstr ""
+
+#: ViewStatistics.cpp:2004
+msgid "Show average credit for host"
+msgstr ""
+
+#: ViewStatistics.cpp:2013
+msgid "< &Previous project"
+msgstr ""
+
+#: ViewStatistics.cpp:2014
+msgid "Show chart for previous project"
+msgstr ""
+
+#: ViewStatistics.cpp:2019
+msgid "&Next project >"
+msgstr ""
+
+#: ViewStatistics.cpp:2020
+msgid "Show chart for next project"
+msgstr ""
+
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
+msgid "Hide project list"
+msgstr ""
+
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
+msgid "Use entire area for graphs"
+msgstr ""
+
+#: ViewStatistics.cpp:2032
+msgid "Mode view"
+msgstr ""
+
+#: ViewStatistics.cpp:2036
+msgid "One project"
+msgstr ""
+
+#: ViewStatistics.cpp:2037
+msgid "Show one chart with selected project"
+msgstr ""
+
+#: ViewStatistics.cpp:2043
+msgid "All projects (separate)"
+msgstr ""
+
+#: ViewStatistics.cpp:2044
+msgid "Show all projects, one chart per project"
+msgstr ""
+
+#: ViewStatistics.cpp:2050
+msgid "All projects (together)"
+msgstr ""
+
+#: ViewStatistics.cpp:2051
+msgid "Show one chart with all projects"
+msgstr ""
+
+#: ViewStatistics.cpp:2057
+msgid "All projects (sum)"
+msgstr ""
+
+#: ViewStatistics.cpp:2058
+msgid "Show one chart with sum of projects"
+msgstr ""
+
+#: ViewStatistics.cpp:2079
+msgid "Statistics"
+msgstr ""
+
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
+msgid "Updating charts..."
+msgstr ""
+
+#: ViewStatistics.cpp:2420
+msgid "Show project list"
+msgstr ""
+
+#: ViewStatistics.cpp:2420
+msgid "Uses smaller area for graphs"
+msgstr ""
+
+#: ViewTransfers.cpp:164
+msgid "Retry Now"
+msgstr ""
+
+#: ViewTransfers.cpp:165
+msgid "Retry the file transfer now"
+msgstr ""
+
+#: ViewTransfers.cpp:171
+msgid "Abort Transfer"
+msgstr ""
+
+#: ViewTransfers.cpp:172
+msgid "Abort this file transfer. You won't get credit for the task."
+msgstr ""
+
+#: ViewTransfers.cpp:183
+msgid "File"
+msgstr ""
+
+#: ViewTransfers.cpp:184 ViewWork.cpp:233
+msgid "Progress"
+msgstr ""
+
+#: ViewTransfers.cpp:185
+msgid "Size"
+msgstr ""
+
+#: ViewTransfers.cpp:186
+msgid "Elapsed Time"
+msgstr ""
+
+#: ViewTransfers.cpp:187
+msgid "Speed"
+msgstr ""
+
+#: ViewTransfers.cpp:213
+msgid "Transfers"
+msgstr ""
+
+#: ViewTransfers.cpp:280
+msgid "Network activity is suspended - "
+msgstr ""
+
+#: ViewTransfers.cpp:282
+msgid ""
+".\n"
+"You can enable it using the Activity menu."
+msgstr ""
+
+#: ViewTransfers.cpp:285
+msgid "BOINC"
+msgstr ""
+
+#: ViewTransfers.cpp:292
+msgid "Retrying transfer now..."
+msgstr ""
+
+#: ViewTransfers.cpp:330
+msgid "Aborting transfer..."
+msgstr ""
+
+#: ViewTransfers.cpp:343
+#, c-format
+msgid ""
+"Are you sure you want to abort this file transfer '%s'?\n"
+"NOTE: Aborting a transfer will invalidate a task and you\n"
+"will not receive credit for it."
+msgstr ""
+
+#: ViewTransfers.cpp:349
+msgid "Abort File Transfer"
+msgstr ""
+
+#: ViewTransfers.cpp:780
+msgid "Upload"
+msgstr ""
+
+#: ViewTransfers.cpp:780
+msgid "Download"
+msgstr ""
+
+#: ViewTransfers.cpp:784
+msgid "retry in "
+msgstr ""
+
+#: ViewTransfers.cpp:786
+msgid "failed"
+msgstr ""
+
+#: ViewTransfers.cpp:789
+msgid "suspended"
+msgstr ""
+
+#: ViewTransfers.cpp:794
+msgid "active"
+msgstr ""
+
+#: ViewTransfers.cpp:796
+msgid "pending"
+msgstr ""
+
+#: ViewTransfers.cpp:803
+msgid " (project backoff: "
+msgstr ""
+
+#: ViewWork.cpp:187 ViewWork.cpp:777
+msgid "Show active tasks"
+msgstr ""
+
+#: ViewWork.cpp:188 ViewWork.cpp:778
+msgid "Show only active tasks."
+msgstr ""
+
+#: ViewWork.cpp:194 sg_TaskCommandPopup.cpp:60
+msgid "Show graphics"
+msgstr ""
+
+#: ViewWork.cpp:195 sg_TaskCommandPopup.cpp:61
+msgid "Show application graphics in a window."
+msgstr ""
+
+#: ViewWork.cpp:201
+msgid "Show VM Console"
+msgstr ""
+
+#: ViewWork.cpp:202
+msgid "Show VM Console in a window."
+msgstr ""
+
+#: ViewWork.cpp:209
+msgid "Suspend work for this result."
+msgstr ""
+
+#: ViewWork.cpp:215 sg_TaskCommandPopup.cpp:72
+msgid "Abort"
+msgstr ""
+
+#: ViewWork.cpp:216
+msgid "Abandon work on the result. You will get no credit for it."
+msgstr ""
+
+#: ViewWork.cpp:223 sg_TaskCommandPopup.cpp:79
+msgid "Show task details."
+msgstr ""
+
+#: ViewWork.cpp:235
+msgid "Elapsed"
+msgstr ""
+
+#: ViewWork.cpp:236
+msgid "Remaining (estimated)"
+msgstr ""
+
+#: ViewWork.cpp:237
+msgid "Deadline"
+msgstr ""
+
+#: ViewWork.cpp:264
+msgid "Tasks"
+msgstr ""
+
+#: ViewWork.cpp:357
+msgid "Resuming task..."
+msgstr ""
+
+#: ViewWork.cpp:360
+msgid "Suspending task..."
+msgstr ""
+
+#: ViewWork.cpp:389
+msgid "Showing graphics for task..."
+msgstr ""
+
+#: ViewWork.cpp:426
+msgid "Showing VM console for task..."
+msgstr ""
+
+#: ViewWork.cpp:479
+#, c-format
+msgid ""
+"Are you sure you want to abort this task '%s'?\n"
+"(Progress: %s, Status: %s)"
+msgstr ""
+
+#: ViewWork.cpp:485
+#, c-format
+msgid "Are you sure you want to abort these %d tasks?"
+msgstr ""
+
+#: ViewWork.cpp:490 sg_TaskCommandPopup.cpp:256
+msgid "Abort task"
+msgstr ""
+
+#: ViewWork.cpp:499
+msgid "Aborting task..."
+msgstr ""
+
+#: ViewWork.cpp:771
+msgid "Show all tasks"
+msgstr ""
+
+#: ViewWork.cpp:772
+msgid "Show all tasks."
+msgstr ""
+
+#: ViewWork.cpp:796 sg_TaskCommandPopup.cpp:103
+msgid "Resume work for this task."
+msgstr ""
+
+#: ViewWork.cpp:802 sg_TaskCommandPopup.cpp:107
+msgid "Suspend work for this task."
+msgstr ""
+
+#: WelcomePage.cpp:284
+msgid "Add project or account manager"
+msgstr ""
+
+#: WelcomePage.cpp:288
+msgid "Add project or use BOINC Account Manager"
+msgstr ""
+
+#: WelcomePage.cpp:297
+#, c-format
+msgid ""
+"If possible, add projects at the\n"
+"%s web site.\n"
+"\n"
+"Projects added via this wizard will not be\n"
+"listed on or managed via %s."
+msgstr ""
+
+#: WelcomePage.cpp:313
+msgid ""
+"There are over 30 BOINC-based projects\n"
+"doing research in many areas of science,\n"
+"and you can volunteer for as many of them as you like.\n"
+"You can add a project directly,\n"
+"or use an 'Account Manager' web site to select projects."
+msgstr ""
+
+#: WelcomePage.cpp:325
+msgid ""
+"You have chosen to add a new volunteer computing project or change which "
+"projects\n"
+"you contribute to.\n"
+"\n"
+"Some of these projects are run and managed by World Community Grid, while "
+"others\n"
+"are run and managed by other researchers or organizations. The BOINC "
+"software\n"
+"can divide your spare processing power among any combination of projects.\n"
+"\n"
+"Alternatively, if you have registered with a BOINC Account Manager, you can "
+"use\n"
+"this to choose which projects to support.\n"
+"\n"
+"Please choose which type of change you would like to make:\n"
+msgstr ""
+
+#: WelcomePage.cpp:339
+msgid "Use a BOINC Account Manager"
+msgstr ""
+
+#: WelcomePage.cpp:352
+msgid "To continue, click Next."
+msgstr ""
+
+#: WelcomePage.cpp:358
+msgid "Add or change your World Community Grid projects"
+msgstr ""
+
+#: WelcomePage.cpp:361
+msgid "Add projects run by other researchers or organizations"
+msgstr ""
+
+#: WizardAttach.cpp:634
+msgid "Do you really want to cancel?"
+msgstr ""
+
+#: WizardAttach.cpp:635
+msgid "Question"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:149
+msgid "Advanced View...\tCtrl+Shift+A"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:150
+msgid "Display the advanced graphical interface."
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:157
+msgid "Skin"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:159
+msgid "Select the appearance of the user interface."
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:206
+#, c-format
+msgid "&%s"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:390
+msgid "Default"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:759
+msgid "Suspend Computing"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:760
+msgid "Resume Computing"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:777
+msgid "Open a window to view notices from projects or BOINC"
+msgstr ""
+
+#: sg_DlgMessages.cpp:146
+msgid "Close"
+msgstr ""
+
+#: sg_DlgMessages.cpp:389
+#, c-format
+msgid "%s - Notices"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:268
+msgid "This dialog controls preferences for this computer only."
+msgstr ""
+
+#: sg_DlgPreferences.cpp:273
+msgid "Click OK to set preferences."
+msgstr ""
+
+#: sg_DlgPreferences.cpp:278
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+
+#: sg_DlgPreferences.cpp:285
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+
+#: sg_DlgPreferences.cpp:313
+msgid "Do work only between:"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:335
+msgid "Connect to internet only between:"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
+msgid "Use no more than:"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:370
+msgid "of disk space"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:387
+msgid "of the processor"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:391
+msgid "Do work while on battery?"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:404
+msgid "Do work after idle for:"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
+msgid "Anytime"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:638
+msgid "100 MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:639
+msgid "200 MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:640
+msgid "500 MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:641
+msgid "1 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:642
+msgid "2 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:643
+msgid "5 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:644
+msgid "10 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:645
+msgid "20 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:646
+msgid "50 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:647
+msgid "100 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:717
+#, c-format
+msgid "%d MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:719
+#, c-format
+msgid "%4.2f GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:760
+#, c-format
+msgid "%d%%"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:796
+msgid "0 (Run Always)"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:799
+#, c-format
+msgid "%d"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:1029
+msgid "Do you really want to clear all local preferences?\n"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:72
+msgid "Add Project"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:73
+msgid "Synchronize"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:74
+msgid "Work done for this project"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:77
+msgid "Synchronize projects with account manager system"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:124
+msgid "Select a project to access with the controls below"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:145
+msgid "Project Web Pages"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:149
+msgid "Project Commands"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:267
+#, c-format
+msgid "Pop up a menu of web sites for project %s"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:269
+#, c-format
+msgid "Pop up a menu of commands to apply to project %s"
+msgstr ""
+
+#: sg_TaskCommandPopup.cpp:67
+msgid "Suspend this task."
+msgstr ""
+
+#: sg_TaskCommandPopup.cpp:73
+msgid "Abandon this task. You will get no credit for it."
+msgstr ""
+
+#: sg_TaskCommandPopup.cpp:251
+#, c-format
+msgid ""
+"Are you sure you want to abort this task '%s'?\n"
+"(Progress: %.1lf%%, Status: %s)"
+msgstr ""
+
+#: sg_TaskPanel.cpp:464
+msgid "You don't have any projects. Please Add a Project."
+msgstr ""
+
+#: sg_TaskPanel.cpp:465
+msgid "Not available"
+msgstr ""
+
+#: sg_TaskPanel.cpp:476
+msgid "Tasks:"
+msgstr ""
+
+#: sg_TaskPanel.cpp:482
+msgid "Select a task to access"
+msgstr ""
+
+#: sg_TaskPanel.cpp:493
+msgid "From:"
+msgstr ""
+
+#: sg_TaskPanel.cpp:547
+msgid "This task's progress"
+msgstr ""
+
+#: sg_TaskPanel.cpp:565
+msgid "Task Commands"
+msgstr ""
+
+#: sg_TaskPanel.cpp:566
+msgid "Pop up a menu of commands to apply to this task"
+msgstr ""
+
+#: sg_TaskPanel.cpp:701
+#, c-format
+msgid "Application: %s"
+msgstr ""
+
+#: sg_TaskPanel.cpp:724
+#, c-format
+msgid "%.3f%%"
+msgstr ""
+
+#: sg_TaskPanel.cpp:732
+msgid "Application: Not available"
+msgstr ""
+
+#: sg_TaskPanel.cpp:832
+msgid "Not Available"
+msgstr ""
+
+#: sg_TaskPanel.cpp:847
+#, c-format
+msgid "Elapsed: %s"
+msgstr ""
+
+#: sg_TaskPanel.cpp:861
+#, c-format
+msgid "Remaining (estimated): %s"
+msgstr ""
+
+#: sg_TaskPanel.cpp:876
+#, c-format
+msgid "Status: %s"
+msgstr ""
+
+#: sg_TaskPanel.cpp:1223
+msgid "Retrieving current status."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1229
+msgid "Downloading work from the server."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1234
+msgid "Processing Suspended: Running On Batteries."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1236
+msgid "Processing Suspended: User Active."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1238
+msgid "Processing Suspended: User paused processing."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1240
+msgid "Processing Suspended: Time of Day."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1242
+msgid "Processing Suspended: Benchmarks Running."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1244
+msgid "Processing Suspended."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1248
+msgid "Waiting to contact project servers."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
+msgid "Retrieving current status"
+msgstr ""
+
+#: sg_TaskPanel.cpp:1256
+msgid "No work available to process"
+msgstr ""
+
+#: sg_TaskPanel.cpp:1258
+msgid "Unable to connect to the core client"
+msgstr ""
+
+#: wizardex.cpp:377 wizardex.cpp:553
+msgid "&Next >"
+msgstr ""
+
+#: wizardex.cpp:383
+msgid "< &Back"
+msgstr ""
+
+#: wizardex.cpp:553
+msgid "&Finish"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:110
+msgid "Preferences…"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:122
+msgid "Services"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:144
+#, c-format
+msgid "Hide %s"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:158
+msgid "Hide Others"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:172
+msgid "Show All"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:186
+#, c-format
+msgid "Quit %s"
+msgstr ""
diff --git a/locale/ms/BOINC-Project-Generic.po b/locale/ms/BOINC-Project-Generic.po
new file mode 100644
index 0000000..a8258b0
--- /dev/null
+++ b/locale/ms/BOINC-Project-Generic.po
@@ -0,0 +1,6470 @@
+# BOINC web translation
+# Copyright (C) 2008 University of California
+#
+# This file is distributed under the same license as BOINC.
+#
+# FileID : $Id$
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.10.0\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+msgid "LANG_NAME_NATIVE"
+msgstr ""
+
+msgid "LANG_NAME_INTERNATIONAL"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:11
+msgid "Bold text: [b]text[/b] (alt+b)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:14
+msgid "Italic text: [i]text[/i] (alt+i)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:17
+msgid "Underline text: [u]text[/u] (alt+u)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:20
+msgid "Quote text: [quote]text[/quote] (alt+q)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:23
+msgid "Code display: [code]code[/code] (alt+c)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:26
+msgid "List: [list]text[/list] (alt+l)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:29
+msgid "Ordered list: [list=]text[/list] (alt+o)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:32
+msgid "Insert image: [img]http://image_url[/img] (alt+p)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:35
+msgid ""
+"Insert URL: [url]http://url[/url] or [url=http://url]URL text[/url] (alt+w)"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:42
+msgid "Font color"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:43
+msgid ""
+"Font color: [color=red]text[/color] Tip: you can also use color=#FF0000"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:44 ../inc/bbcode_html.inc:59 ../inc/prefs.inc:638
+msgid "Default"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:45
+msgid "Dark Red"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:46
+msgid "Red"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:47
+msgid "Orange"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:48
+msgid "Brown"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:49
+msgid "Yellow"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:50
+msgid "Green"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:51
+msgid "Olive"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:52
+msgid "Cyan"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:53
+msgid "Blue"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:54
+msgid "Dark Blue"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:55
+msgid "Indigo"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:56
+msgid "Violet"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:57
+msgid "Font size"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:58
+msgid "Font size: [size=x-small]small text[/size]"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:60
+msgid "Small"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:61
+msgid "Normal"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:62
+msgid "Large"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:65
+msgid "Close all open bbCode tags"
+msgstr ""
+
+#: ../inc/bbcode_html.inc:65
+msgid "Close Tags"
+msgstr ""
+
+#: ../inc/forum.inc:37
+msgid "Oldest first"
+msgstr ""
+
+#: ../inc/forum.inc:38 ../inc/forum.inc:44
+msgid "Newest first"
+msgstr ""
+
+#: ../inc/forum.inc:39
+msgid "Highest rated posts first"
+msgstr ""
+
+#: ../inc/forum.inc:41
+msgid "Newest post first"
+msgstr ""
+
+#: ../inc/forum.inc:42
+msgid "Most views first"
+msgstr ""
+
+#: ../inc/forum.inc:43
+msgid "Most posts first"
+msgstr ""
+
+#: ../inc/forum.inc:125
+msgid "Search for words in forum messages"
+msgstr ""
+
+#: ../inc/forum.inc:125
+msgid "Search forums"
+msgstr ""
+
+#: ../inc/forum.inc:126
+msgid "Advanced search"
+msgstr ""
+
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
+#: ../user/pm.php:133
+msgid "Private messages"
+msgstr ""
+
+#: ../inc/forum.inc:151 ../user/bs_sample_index.php:63
+#: ../user/forum_forum.php:71 ../user/sample_index.php:130
+msgid "Questions and Answers"
+msgstr ""
+
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
+#: ../user/forum_forum.php:73 ../user/sample_index.php:129
+#: ../project.sample/project.inc:43
+msgid "Message boards"
+msgstr ""
+
+#: ../inc/forum.inc:187 ../inc/forum.inc:195
+msgid "%1 message board"
+msgstr ""
+
+#: ../inc/forum.inc:245 ../inc/result.inc:695
+msgid "Previous"
+msgstr ""
+
+#: ../inc/forum.inc:283 ../inc/result.inc:704
+msgid "Next"
+msgstr ""
+
+#: ../inc/forum.inc:412 ../inc/forum.inc:1175 ../user/forum_forum.php:137
+#: ../user/forum_reply.php:120 ../user/forum_report_post.php:76
+msgid "Author"
+msgstr ""
+
+#: ../inc/forum.inc:412 ../inc/pm.inc:86 ../user/forum_edit.php:128
+#: ../user/forum_edit.php:133 ../user/forum_post.php:116
+#: ../user/forum_reply.php:120 ../user/forum_report_post.php:76
+#: ../user/pm.php:90 ../user/pm.php:144
+msgid "Message"
+msgstr ""
+
+#: ../inc/forum.inc:580
+msgid "Send message"
+msgstr ""
+
+#: ../inc/forum.inc:580
+msgid "Send %1 a private message"
+msgstr ""
+
+#: ../inc/forum.inc:581
+msgid "Joined: %1"
+msgstr ""
+
+#: ../inc/forum.inc:590
+msgid "Posts: %1"
+msgstr ""
+
+#: ../inc/forum.inc:596
+msgid "Credit: %1"
+msgstr ""
+
+#: ../inc/forum.inc:597
+msgid "RAC: %1"
+msgstr ""
+
+#: ../inc/forum.inc:620
+msgid "You haven't read this message yet"
+msgstr ""
+
+#: ../inc/forum.inc:620
+msgid "Unread"
+msgstr ""
+
+#: ../inc/forum.inc:623 ../inc/forum.inc:628 ../inc/forum.inc:727
+msgid "Message %1"
+msgstr ""
+
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
+msgid "hidden"
+msgstr ""
+
+#: ../inc/forum.inc:625
+msgid "Posted: %1"
+msgstr ""
+
+#: ../inc/forum.inc:628
+msgid " - in response to "
+msgstr ""
+
+#: ../inc/forum.inc:631 ../inc/prefs.inc:705 ../inc/prefs.inc:707
+msgid "Edit"
+msgstr ""
+
+#: ../inc/forum.inc:631
+msgid "Edit this message"
+msgstr ""
+
+#: ../inc/forum.inc:637
+msgid "Last modified: %1"
+msgstr ""
+
+#: ../inc/forum.inc:640
+msgid ""
+"This post is not shown because the sender is on your 'ignore' list. Click %"
+"1here%2 to view this post"
+msgstr ""
+
+#: ../inc/forum.inc:668 ../inc/forum.inc:679
+msgid "Report this post as offensive"
+msgstr ""
+
+#: ../inc/forum.inc:668 ../inc/forum.inc:679
+msgid "Report as offensive"
+msgstr ""
+
+#: ../inc/forum.inc:672
+msgid "Rating: %1"
+msgstr ""
+
+#: ../inc/forum.inc:672
+msgid "rate: "
+msgstr ""
+
+#: ../inc/forum.inc:675
+msgid "Click if you like this message"
+msgstr ""
+
+#: ../inc/forum.inc:675
+msgid "Rate +"
+msgstr ""
+
+#: ../inc/forum.inc:677
+msgid "Click if you don't like this message"
+msgstr ""
+
+#: ../inc/forum.inc:677
+msgid "Rate -"
+msgstr ""
+
+#: ../inc/forum.inc:685 ../user/pm.php:106 ../user/pm.php:146
+msgid "Reply"
+msgstr ""
+
+#: ../inc/forum.inc:685
+msgid "Post a reply to this message"
+msgstr ""
+
+#: ../inc/forum.inc:687
+msgid "Quote"
+msgstr ""
+
+#: ../inc/forum.inc:687
+msgid "Post a reply by quoting this message"
+msgstr ""
+
+#: ../inc/forum.inc:708
+msgid "Hidden by a moderator"
+msgstr ""
+
+#: ../inc/forum.inc:729
+msgid "Posted %1 by %2"
+msgstr ""
+
+#: ../inc/forum.inc:747
+msgid "You may not post or rate messages until %1"
+msgstr ""
+
+#: ../inc/forum.inc:758
+msgid ""
+"\n"
+" <ul>\n"
+" <li> Posts must be 'kid friendly': they may not contain\n"
+" content that is obscene, hate-related,\n"
+" sexually explicit or suggestive.\n"
+" <li> No commercial advertisements.\n"
+" <li> No links to web sites involving sexual content,\n"
+" gambling, or intolerance of others.\n"
+" <li> No messages intended to annoy or antagonize other people,\n"
+" or to hijack a thread.\n"
+" <li> No messages that are deliberately hostile or insulting.\n"
+" <li> No abusive comments involving race, religion,\n"
+" nationality, gender, class or sexuality.\n"
+" "
+msgstr ""
+
+#: ../inc/forum.inc:780
+msgid "Rules:"
+msgstr ""
+
+#: ../inc/forum.inc:781
+msgid "More info"
+msgstr ""
+
+#: ../inc/forum.inc:1055 ../user/forum_thread.php:189
+msgid "Unhide"
+msgstr ""
+
+#: ../inc/forum.inc:1055
+msgid "Unhide this post"
+msgstr ""
+
+#: ../inc/forum.inc:1057 ../user/forum_thread.php:195
+msgid "Hide"
+msgstr ""
+
+#: ../inc/forum.inc:1057
+msgid "Hide this post"
+msgstr ""
+
+#: ../inc/forum.inc:1062 ../user/forum_thread.php:228
+msgid "Move"
+msgstr ""
+
+#: ../inc/forum.inc:1062
+msgid "Move post to a different thread"
+msgstr ""
+
+#: ../inc/forum.inc:1067
+msgid "Banish author"
+msgstr ""
+
+#: ../inc/forum.inc:1074
+msgid "Vote to banish author"
+msgstr ""
+
+#: ../inc/forum.inc:1078
+msgid "Vote not to banish author"
+msgstr ""
+
+#: ../inc/forum.inc:1083
+msgid "Start vote to banish author"
+msgstr ""
+
+#: ../inc/forum.inc:1116
+msgid "Only team members can post to the team message board"
+msgstr ""
+
+#: ../inc/forum.inc:1126
+msgid ""
+"In order to create a new thread in %1 you must have a certain amount of "
+"credit. This is to prevent and protect against abuse of the system."
+msgstr ""
+
+#: ../inc/forum.inc:1133
+msgid ""
+"You cannot create any more threads right now. Please wait a while before "
+"trying again. This delay has been enforced to protect against abuse of the "
+"system."
+msgstr ""
+
+#: ../inc/forum.inc:1140
+msgid ""
+"This thread is locked. Only forum moderators and administrators are allowed "
+"to post there."
+msgstr ""
+
+#: ../inc/forum.inc:1145
+msgid "Can't post to a hidden thread."
+msgstr ""
+
+#: ../inc/forum.inc:1173
+msgid "Thread"
+msgstr ""
+
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
+#: ../user/forum_index.php:94
+msgid "Posts"
+msgstr ""
+
+#: ../inc/forum.inc:1176 ../user/forum_forum.php:138
+msgid "Views"
+msgstr ""
+
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
+#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
+msgid "Last post"
+msgstr ""
+
+#: ../inc/forum.inc:1235
+msgid "New posts in the thread %1"
+msgstr ""
+
+#: ../inc/forum.inc:1240
+msgid "New posts in subscribed thread"
+msgstr ""
+
+#: ../inc/forum.inc:1241
+msgid "There are new posts in the thread '%1'"
+msgstr ""
+
+#: ../inc/forum.inc:1251
+msgid "Mark all threads as read"
+msgstr ""
+
+#: ../inc/forum.inc:1252
+msgid "Mark all threads in all message boards as read."
+msgstr ""
+
+#: ../inc/host.inc:24
+msgid "No host"
+msgstr ""
+
+#: ../inc/host.inc:26
+msgid "Unavailable"
+msgstr ""
+
+#: ../inc/host.inc:56 ../inc/prefs.inc:639 ../inc/prefs.inc:1048
+msgid "Home"
+msgstr ""
+
+#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
+#: ../user/server_status.php:314
+msgid "Work"
+msgstr ""
+
+#: ../inc/host.inc:58 ../inc/prefs.inc:640 ../inc/prefs.inc:1050
+msgid "School"
+msgstr ""
+
+#: ../inc/host.inc:59
+msgid "Mobile"
+msgstr ""
+
+#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
+#: ../user/edit_forum_preferences_form.php:173
+msgid "Update"
+msgstr ""
+
+#: ../inc/host.inc:85
+msgid "Computer information"
+msgstr ""
+
+#: ../inc/host.inc:89 ../inc/host.inc:94
+msgid "IP address"
+msgstr ""
+
+#: ../inc/host.inc:89
+msgid "(same the last %1 times)"
+msgstr ""
+
+#: ../inc/host.inc:91
+msgid "External IP address"
+msgstr ""
+
+#: ../inc/host.inc:94
+msgid "Show IP address"
+msgstr ""
+
+#: ../inc/host.inc:96
+msgid "Domain name"
+msgstr ""
+
+#: ../inc/host.inc:98
+msgid "Product name"
+msgstr ""
+
+#: ../inc/host.inc:102
+msgid "Local Standard Time"
+msgstr ""
+
+#: ../inc/host.inc:102
+msgid "UTC %1 hours"
+msgstr ""
+
+#: ../inc/host.inc:106 ../inc/host.inc:108 ../inc/host.inc:222
+msgid "Owner"
+msgstr ""
+
+#: ../inc/host.inc:108 ../inc/host.inc:355
+msgid "Anonymous"
+msgstr ""
+
+#: ../inc/host.inc:112 ../inc/result.inc:630
+msgid "Created"
+msgstr ""
+
+#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../user/profile_search_action.php:43
+#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
+#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
+#: ../user/top_users.php:59 ../user/user_search.php:140
+msgid "Total credit"
+msgstr ""
+
+#: ../inc/host.inc:114 ../inc/user.inc:125 ../user/team_search.php:70
+#: ../user/user_search.php:139
+msgid "Average credit"
+msgstr ""
+
+#: ../inc/host.inc:116
+msgid "Cross project credit"
+msgstr ""
+
+#: ../inc/host.inc:118
+msgid "CPU type"
+msgstr ""
+
+#: ../inc/host.inc:119
+msgid "Number of processors"
+msgstr ""
+
+#: ../inc/host.inc:121
+msgid "Coprocessors"
+msgstr ""
+
+#: ../inc/host.inc:123 ../inc/host.inc:687
+msgid "Operating System"
+msgstr ""
+
+#: ../inc/host.inc:126 ../inc/host.inc:235
+msgid "BOINC version"
+msgstr ""
+
+#: ../inc/host.inc:130
+msgid "Memory"
+msgstr ""
+
+#: ../inc/host.inc:130 ../inc/host.inc:140
+msgid "%1 MB"
+msgstr ""
+
+#: ../inc/host.inc:134
+msgid "Cache"
+msgstr ""
+
+#: ../inc/host.inc:134
+msgid "%1 KB"
+msgstr ""
+
+#: ../inc/host.inc:140
+msgid "Swap space"
+msgstr ""
+
+#: ../inc/host.inc:143
+msgid "Total disk space"
+msgstr ""
+
+#: ../inc/host.inc:143 ../inc/host.inc:146
+msgid "%1 GB"
+msgstr ""
+
+#: ../inc/host.inc:146
+msgid "Free Disk Space"
+msgstr ""
+
+#: ../inc/host.inc:150
+msgid "Measured floating point speed"
+msgstr ""
+
+#: ../inc/host.inc:150 ../inc/host.inc:153
+msgid "%1 million ops/sec"
+msgstr ""
+
+#: ../inc/host.inc:153
+msgid "Measured integer speed"
+msgstr ""
+
+#: ../inc/host.inc:157 ../inc/host.inc:159
+msgid "Average upload rate"
+msgstr ""
+
+#: ../inc/host.inc:157 ../inc/host.inc:164
+msgid "%1 KB/sec"
+msgstr ""
+
+#: ../inc/host.inc:159 ../inc/host.inc:166 ../inc/result.inc:216
+#: ../inc/result.inc:226 ../inc/result.inc:244 ../inc/result.inc:262
+#: ../inc/result.inc:278 ../user/explain_state.php:56
+#: ../user/host_app_versions.php:30
+msgid "Unknown"
+msgstr ""
+
+#: ../inc/host.inc:164 ../inc/host.inc:166
+msgid "Average download rate"
+msgstr ""
+
+#: ../inc/host.inc:169 ../user/host_app_versions.php:65
+msgid "Average turnaround time"
+msgstr ""
+
+#: ../inc/host.inc:169 ../user/forum_search.php:46 ../user/forum_search.php:47
+#: ../user/forum_search.php:48 ../user/forum_search.php:49
+msgid "%1 days"
+msgstr ""
+
+#: ../inc/host.inc:170
+msgid "Application details"
+msgstr ""
+
+#: ../inc/host.inc:171
+msgid "Show"
+msgstr ""
+
+#: ../inc/host.inc:181 ../inc/host.inc:336 ../inc/user.inc:152
+msgid "Tasks"
+msgstr ""
+
+#: ../inc/host.inc:185 ../inc/host.inc:206
+msgid "Number of times client has contacted server"
+msgstr ""
+
+#: ../inc/host.inc:186
+msgid "Last time contacted server"
+msgstr ""
+
+#: ../inc/host.inc:187
+#, php-format
+msgid "% of time BOINC is running"
+msgstr ""
+
+#: ../inc/host.inc:189
+#, php-format
+msgid "While BOINC running, % of time host has an Internet connection"
+msgstr ""
+
+#: ../inc/host.inc:191
+#, php-format
+msgid "While BOINC running, % of time work is allowed"
+msgstr ""
+
+#: ../inc/host.inc:193
+msgid "Average CPU efficiency"
+msgstr ""
+
+#: ../inc/host.inc:196
+msgid "Task duration correction factor"
+msgstr ""
+
+#: ../inc/host.inc:198 ../inc/host.inc:674
+msgid "Location"
+msgstr ""
+
+#: ../inc/host.inc:200
+msgid "Delete this computer"
+msgstr ""
+
+#: ../inc/host.inc:204
+msgid "Merge duplicate records of this computer"
+msgstr ""
+
+#: ../inc/host.inc:204
+msgid "Merge"
+msgstr ""
+
+#: ../inc/host.inc:207 ../inc/host.inc:689
+msgid "Last contact"
+msgstr ""
+
+#: ../inc/host.inc:220
+msgid "Computer info"
+msgstr ""
+
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
+#: ../user/top_users.php:48
+msgid "Rank"
+msgstr ""
+
+#: ../inc/host.inc:225 ../inc/host.inc:679
+msgid "Avg. credit"
+msgstr ""
+
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
+#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
+#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
+#: ../user/top_users.php:58
+msgid "Recent average credit"
+msgstr ""
+
+#: ../inc/host.inc:236 ../inc/host.inc:684 ../inc/result.inc:51
+#: ../user/host_app_versions.php:25
+msgid "CPU"
+msgstr ""
+
+#: ../inc/host.inc:237 ../inc/host.inc:685
+msgid "GPU"
+msgstr ""
+
+#: ../inc/host.inc:238
+msgid "Operating system"
+msgstr ""
+
+#: ../inc/host.inc:315
+msgid "(%1 processors)"
+msgstr ""
+
+#: ../inc/host.inc:335
+msgid "Details"
+msgstr ""
+
+#: ../inc/host.inc:340
+msgid "Cross-project stats:"
+msgstr ""
+
+#: ../inc/host.inc:515
+msgid "Host %1 has overlapping lifetime:"
+msgstr ""
+
+#: ../inc/host.inc:522
+msgid "Host %1 has an incompatible OS:"
+msgstr ""
+
+#: ../inc/host.inc:528
+msgid "Host %1 has an incompatible CPU:"
+msgstr ""
+
+#: ../inc/host.inc:595
+msgid "same host"
+msgstr ""
+
+#: ../inc/host.inc:598
+msgid "Can't merge host %1 into %2 - they're incompatible"
+msgstr ""
+
+#: ../inc/host.inc:601
+msgid "Merging host %1 into host %2"
+msgstr ""
+
+#: ../inc/host.inc:618
+msgid "Couldn't update credit of new computer"
+msgstr ""
+
+#: ../inc/host.inc:622
+msgid "Couldn't update results"
+msgstr ""
+
+#: ../inc/host.inc:627
+msgid "Couldn't retire old computer"
+msgstr ""
+
+#: ../inc/host.inc:629
+msgid "Retired old computer %1"
+msgstr ""
+
+#: ../inc/host.inc:652 ../inc/host.inc:655
+msgid "Show:"
+msgstr ""
+
+#: ../inc/host.inc:652 ../inc/host.inc:655
+msgid "All computers"
+msgstr ""
+
+#: ../inc/host.inc:652 ../inc/host.inc:655
+msgid "Only computers active in past 30 days"
+msgstr ""
+
+#: ../inc/host.inc:666 ../inc/result.inc:637
+msgid "Computer ID"
+msgstr ""
+
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../user/create_account_form.php:79 ../user/team_admins.php:62
+#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
+#: ../user/top_users.php:49 ../user/user_search.php:139
+msgid "Name"
+msgstr ""
+
+#: ../inc/host.inc:682
+msgid "BOINC<br>version"
+msgstr ""
+
+#: ../inc/host.inc:745 ../user/merge_by_name.php:65
+msgid "Merge computers by name"
+msgstr ""
+
+#: ../inc/language_names.inc:61
+msgid "Browser default"
+msgstr ""
+
+#: ../inc/news.inc:40
+msgid "Comment"
+msgstr ""
+
+#: ../inc/news.inc:111
+#, php-format
+msgid "News is available as an %sRSS feed%s"
+msgstr ""
+
+#: ../inc/pm.inc:25 ../inc/pm.inc:174 ../user/pm.php:69 ../user/pm.php:148
+msgid "Inbox"
+msgstr ""
+
+#: ../inc/pm.inc:26 ../inc/pm.inc:178
+msgid "Write"
+msgstr ""
+
+#: ../inc/pm.inc:33 ../inc/user.inc:378
+msgid "Send private message"
+msgstr ""
+
+#: ../inc/pm.inc:35 ../inc/pm.inc:37 ../inc/pm.inc:89
+#: ../user/ffmail_form.php:58 ../user/forum_edit.php:99
+#: ../user/forum_edit.php:101 ../user/forum_edit.php:145
+#: ../user/forum_post.php:61 ../user/forum_post.php:87
+#: ../user/forum_post.php:89 ../user/forum_post.php:130
+#: ../user/forum_reply.php:74 ../user/forum_reply.php:107
+#: ../user/forum_reply.php:109 ../user/forum_reply.php:165 ../user/pm.php:181
+msgid "Preview"
+msgstr ""
+
+#: ../inc/pm.inc:48 ../user/pm.php:131
+msgid "no such message"
+msgstr ""
+
+#: ../inc/pm.inc:82
+msgid "To"
+msgstr ""
+
+#: ../inc/pm.inc:82
+msgid "User IDs or unique usernames, separated with commas"
+msgstr ""
+
+#: ../inc/pm.inc:85 ../user/pm.php:90 ../user/pm.php:139
+msgid "Subject"
+msgstr ""
+
+#: ../inc/pm.inc:89
+msgid "Send message"
+msgstr ""
+
+#: ../inc/pm.inc:121
+msgid "sent you a private message; subject:"
+msgstr ""
+
+#: ../inc/pm.inc:127
+msgid "Private message%1 from %2, subject:"
+msgstr ""
+
+#: ../inc/pm.inc:135
+msgid "Couldn't create message"
+msgstr ""
+
+#: ../inc/pm.inc:166
+msgid ""
+"You are not allowed to send privates messages so often. Please wait some "
+"time before sending more messages."
+msgstr ""
+
+#: ../inc/pm.inc:176 ../user/forum_forum.php:186
+msgid "unread"
+msgstr ""
+
+#: ../inc/pm.inc:186
+msgid "For email notification, %1edit community prefs%2"
+msgstr ""
+
+#: ../inc/pm.inc:198
+msgid "Private message"
+msgstr ""
+
+#: ../inc/prefs.inc:77
+msgid ""
+"Suspend work while computer is on battery power? %1 Matters only for "
+"portable computers %2"
+msgstr ""
+
+#: ../inc/prefs.inc:85
+msgid "Suspend work while computer is in use?"
+msgstr ""
+
+#: ../inc/prefs.inc:91
+msgid ""
+"Suspend GPU work while computer is in use? %1 Enforced by version 6.6.21+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:99
+msgid "'In use' means mouse/keyboard activity in last"
+msgstr ""
+
+#: ../inc/prefs.inc:101 ../inc/prefs.inc:110 ../inc/prefs.inc:144
+msgid "minutes"
+msgstr ""
+
+#: ../inc/prefs.inc:105
+msgid ""
+"Suspend work if no mouse/keyboard activity in last %1 Needed to enter low-"
+"power mode on some computers %2"
+msgstr ""
+
+#: ../inc/prefs.inc:114
+msgid ""
+"Suspend work when non-BOINC CPU usage is above %1 0 means no "
+"restriction<br>Enforced by version 6.10.30+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:122
+msgid "Do work only between the hours of %1 No restriction if equal %2"
+msgstr ""
+
+#: ../inc/prefs.inc:130
+msgid ""
+"Leave tasks in memory while suspended? %1 Suspended tasks will consume swap "
+"space if 'yes' %2"
+msgstr ""
+
+#: ../inc/prefs.inc:139
+msgid "Switch between tasks every %1 Recommended: 60 minutes %2"
+msgstr ""
+
+#: ../inc/prefs.inc:147
+msgid "On multiprocessors, use at most"
+msgstr ""
+
+#: ../inc/prefs.inc:149
+msgid "processors"
+msgstr ""
+
+#: ../inc/prefs.inc:153
+msgid "On multiprocessors, use at most %1 Enforced by version 6.1+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:158
+#, php-format
+msgid "% of the processors"
+msgstr ""
+
+#: ../inc/prefs.inc:162
+msgid "Use at most %1 Can be used to reduce CPU heat %2"
+msgstr ""
+
+#: ../inc/prefs.inc:167
+#, php-format
+msgid "% of CPU time"
+msgstr ""
+
+#: ../inc/prefs.inc:175 ../inc/prefs.inc:189
+msgid "Disk: use at most"
+msgstr ""
+
+#: ../inc/prefs.inc:177 ../inc/prefs.inc:186
+msgid "GB"
+msgstr ""
+
+#: ../inc/prefs.inc:180
+msgid "Disk: leave free at least %1 Values smaller than %2 are ignored %3"
+msgstr ""
+
+#: ../inc/prefs.inc:191 ../inc/prefs.inc:201 ../inc/prefs.inc:206
+#: ../inc/prefs.inc:211
+#, php-format
+msgid "% of total"
+msgstr ""
+
+#: ../inc/prefs.inc:194
+msgid "Tasks checkpoint to disk at most every"
+msgstr ""
+
+#: ../inc/prefs.inc:196
+msgid "seconds"
+msgstr ""
+
+#: ../inc/prefs.inc:199
+msgid "Swap space: use at most"
+msgstr ""
+
+#: ../inc/prefs.inc:204
+msgid "Memory: when computer is in use, use at most"
+msgstr ""
+
+#: ../inc/prefs.inc:209
+msgid "Memory: when computer is not in use, use at most"
+msgstr ""
+
+#: ../inc/prefs.inc:218
+msgid "Maintain enough tasks to keep busy for at least%1(max 10 days).%2"
+msgstr ""
+
+#: ../inc/prefs.inc:223 ../inc/prefs.inc:228 ../inc/prefs.inc:270
+#: ../inc/util.inc:274
+msgid "days"
+msgstr ""
+
+#: ../inc/prefs.inc:226
+msgid "... and up to an additional"
+msgstr ""
+
+#: ../inc/prefs.inc:232
+msgid ""
+"Confirm before connecting to Internet? %1 Matters only if you have a modem, "
+"ISDN or VPN connection %2"
+msgstr ""
+
+#: ../inc/prefs.inc:241
+msgid ""
+"Disconnect when done? %1 Matters only if you have a modem, ISDN or VPN "
+"connection %2"
+msgstr ""
+
+#: ../inc/prefs.inc:249
+msgid "Maximum download rate:"
+msgstr ""
+
+#: ../inc/prefs.inc:251 ../inc/prefs.inc:256
+msgid "Kbytes/sec"
+msgstr ""
+
+#: ../inc/prefs.inc:254
+msgid "Maximum upload rate:"
+msgstr ""
+
+#: ../inc/prefs.inc:259
+msgid "Use network only between the hours of"
+msgstr ""
+
+#: ../inc/prefs.inc:263
+msgid "Transfer at most %1 Enforced by version 6.10.46+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:269
+msgid "Mbytes every"
+msgstr ""
+
+#: ../inc/prefs.inc:274
+msgid ""
+"Skip image file verification? %1 Check this ONLY if your Internet provider "
+"modifies image files (UMTS does this, for example). %2 Skipping verification "
+"reduces the security of BOINC. %3"
+msgstr ""
+
+#: ../inc/prefs.inc:287
+msgid ""
+"Resource share %1 Determines the proportion of your computer's resources "
+"allocated to this project. Example: if you participate in two BOINC projects "
+"with resource shares of 100 and 200, the first will get 1/3 of your "
+"resources and the second will get 2/3. %2"
+msgstr ""
+
+#: ../inc/prefs.inc:298
+msgid "Accelerate GPU tasks by dedicating a CPU to each one?"
+msgstr ""
+
+#: ../inc/prefs.inc:308
+msgid "Use CPU %1 Enforced by version 6.10+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:320
+msgid "Use ATI GPU %1 Enforced by version 6.10+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:332
+msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:344
+msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:358
+msgid ""
+"Run test applications? %1 This helps us develop applications, but may cause "
+"jobs to fail on your computer %2"
+msgstr ""
+
+#: ../inc/prefs.inc:367
+msgid ""
+"Emails will be sent from %1; make sure your spam filter accepts this address."
+msgstr ""
+
+#: ../inc/prefs.inc:374
+msgid "Is it OK for %1 and your team (if any) to email you?"
+msgstr ""
+
+#: ../inc/prefs.inc:380
+msgid "Should %1 show your computers on its web site?"
+msgstr ""
+
+#: ../inc/prefs.inc:387
+msgid "Disk and memory usage"
+msgstr ""
+
+#: ../inc/prefs.inc:388
+msgid "Processor usage"
+msgstr ""
+
+#: ../inc/prefs.inc:389
+msgid "Network usage"
+msgstr ""
+
+#: ../inc/prefs.inc:392
+msgid ""
+"These preferences apply to all the BOINC projects in which you participate."
+msgstr ""
+
+#: ../inc/prefs.inc:395
+msgid ""
+"%1Unable to update preferences.%2 The values marked in red below were out of "
+"range or not numeric."
+msgstr ""
+
+#: ../inc/prefs.inc:445
+msgid "bad venue: %1"
+msgstr ""
+
+#: ../inc/prefs.inc:451
+msgid "bad subset: %1"
+msgstr ""
+
+#: ../inc/prefs.inc:671 ../inc/prefs.inc:674 ../inc/prefs.inc:1025
+#: ../inc/prefs_util.inc:93 ../project.sample/project_specific_prefs.inc:85
+msgid "yes"
+msgstr ""
+
+#: ../inc/prefs.inc:671 ../inc/prefs.inc:674 ../inc/prefs.inc:1027
+#: ../inc/prefs_util.inc:93 ../project.sample/project_specific_prefs.inc:87
+msgid "no"
+msgstr ""
+
+#: ../inc/prefs.inc:679 ../user/forum_search.php:53
+msgid "no limit"
+msgstr ""
+
+#: ../inc/prefs.inc:704 ../user/team_admins.php:79
+msgid "Add"
+msgstr ""
+
+#: ../inc/prefs.inc:706 ../inc/prefs.inc:834
+#: ../user/edit_forum_preferences_form.php:160 ../user/team_admins.php:34
+msgid "Remove"
+msgstr ""
+
+#: ../inc/prefs.inc:812 ../user/explain_state.php:94
+msgid "Computing"
+msgstr ""
+
+#: ../inc/prefs.inc:823
+msgid "Separate preferences for %1"
+msgstr ""
+
+#: ../inc/prefs.inc:833 ../inc/prefs.inc:914
+msgid "Edit preferences"
+msgstr ""
+
+#: ../inc/prefs.inc:839
+msgid "Add separate preferences for %1"
+msgstr ""
+
+#: ../inc/prefs.inc:847 ../inc/prefs.inc:895
+msgid "(Switch View)"
+msgstr ""
+
+#: ../inc/prefs.inc:849 ../inc/prefs.inc:898
+msgid "Combined preferences"
+msgstr ""
+
+#: ../inc/prefs.inc:854
+msgid "Project specific settings"
+msgstr ""
+
+#: ../inc/prefs.inc:862 ../inc/prefs.inc:907
+msgid "Primary (default) preferences"
+msgstr ""
+
+#: ../inc/prefs.inc:871 ../user/add_venue.php:39 ../user/add_venue.php:63
+#: ../user/prefs_edit.php:40 ../user/prefs_edit.php:64
+#: ../user/prefs_edit.php:92
+msgid "Edit %1 preferences"
+msgstr ""
+
+#: ../inc/prefs.inc:885
+msgid "These apply to all BOINC projects in which you participate."
+msgstr ""
+
+#: ../inc/prefs.inc:887
+msgid ""
+"On computers participating in multiple projects, the most recently modified "
+"preferences will be used."
+msgstr ""
+
+#: ../inc/prefs.inc:889
+msgid "These preferences do not apply to Android devices."
+msgstr ""
+
+#: ../inc/prefs.inc:892
+msgid "Preferences last modified:"
+msgstr ""
+
+#: ../inc/prefs.inc:944
+msgid "Add preferences"
+msgstr ""
+
+#: ../inc/prefs.inc:948
+msgid "Update preferences"
+msgstr ""
+
+#: ../inc/prefs.inc:1036 ../inc/prefs.inc:1045
+msgid "Default computer location"
+msgstr ""
+
+#: ../inc/prefs_util.inc:305 ../inc/prefs_util.inc:315
+msgid "and"
+msgstr ""
+
+#: ../inc/profile.inc:86
+msgid ""
+"Your profile will be made visible to other people as soon as it has been "
+"approved by the project. This may take up to a few days."
+msgstr ""
+
+#: ../inc/profile.inc:92
+msgid ""
+"Your profile has been marked as unacceptable. It is not visible to other "
+"people. Please change it."
+msgstr ""
+
+#: ../inc/profile.inc:172 ../user/friend.php:105 ../user/friend.php:172
+msgid "Database error"
+msgstr ""
+
+#: ../inc/profile.inc:193
+msgid ""
+"To prevent spam, profiles of users with an average credit of less than %1 "
+"are displayed only to logged-in users. We apologize for this inconvenience."
+msgstr ""
+
+#: ../inc/profile.inc:197
+msgid "User is banished"
+msgstr ""
+
+#: ../inc/profile.inc:211
+msgid "No profile exists for that user ID."
+msgstr ""
+
+#: ../inc/profile.inc:219 ../user/create_profile.php:313
+msgid "Edit your profile"
+msgstr ""
+
+#: ../inc/profile.inc:262
+msgid "Your feedback on this profile"
+msgstr ""
+
+#: ../inc/profile.inc:264
+msgid "Recommend this profile for User of the Day:"
+msgstr ""
+
+#: ../inc/profile.inc:265
+msgid "I %1like%2 this profile"
+msgstr ""
+
+#: ../inc/profile.inc:268
+msgid "Alert administrators to an offensive profile:"
+msgstr ""
+
+#: ../inc/profile.inc:269
+msgid "I %1do not like%2 this profile"
+msgstr ""
+
+#: ../inc/result.inc:35
+msgid "Anonymous platform"
+msgstr ""
+
+#: ../inc/result.inc:53 ../user/host_app_versions.php:26
+msgid "NVIDIA GPU"
+msgstr ""
+
+#: ../inc/result.inc:55 ../user/host_app_versions.php:27
+msgid "ATI GPU"
+msgstr ""
+
+#: ../inc/result.inc:57 ../user/host_app_versions.php:28
+msgid "Intel GPU"
+msgstr ""
+
+#: ../inc/result.inc:65
+msgid "Not in DB"
+msgstr ""
+
+#: ../inc/result.inc:91
+msgid "pending"
+msgstr ""
+
+#: ../inc/result.inc:114 ../user/forum_search.php:60
+msgid "All"
+msgstr ""
+
+#: ../inc/result.inc:115 ../inc/result.inc:176 ../inc/result.inc:223
+msgid "In progress"
+msgstr ""
+
+#: ../inc/result.inc:116
+msgid "Validation pending"
+msgstr ""
+
+#: ../inc/result.inc:117
+msgid "Validation inconclusive"
+msgstr ""
+
+#: ../inc/result.inc:118 ../inc/result.inc:268
+msgid "Valid"
+msgstr ""
+
+#: ../inc/result.inc:119 ../inc/result.inc:271
+msgid "Invalid"
+msgstr ""
+
+#: ../inc/result.inc:120 ../inc/result.inc:209
+msgid "Error"
+msgstr ""
+
+#: ../inc/result.inc:174 ../inc/result.inc:221 ../user/explain_state.php:34
+msgid "Inactive"
+msgstr ""
+
+#: ../inc/result.inc:175 ../inc/result.inc:222 ../user/explain_state.php:37
+msgid "Unsent"
+msgstr ""
+
+#: ../inc/result.inc:181
+msgid "Completed, waiting for validation"
+msgstr ""
+
+#: ../inc/result.inc:182
+msgid "Completed and validated"
+msgstr ""
+
+#: ../inc/result.inc:183
+msgid "Completed, marked as invalid"
+msgstr ""
+
+#: ../inc/result.inc:184
+msgid "Completed, can't validate"
+msgstr ""
+
+#: ../inc/result.inc:185
+msgid "Completed, validation inconclusive"
+msgstr ""
+
+#: ../inc/result.inc:186
+msgid "Completed, too late to validate"
+msgstr ""
+
+#: ../inc/result.inc:188
+msgid "Completed"
+msgstr ""
+
+#: ../inc/result.inc:189 ../inc/result.inc:233 ../user/explain_state.php:62
+msgid "Couldn't send"
+msgstr ""
+
+#: ../inc/result.inc:194 ../inc/result.inc:257
+msgid "Cancelled by server"
+msgstr ""
+
+#: ../inc/result.inc:199
+msgid "Not started by deadline - canceled"
+msgstr ""
+
+#: ../inc/result.inc:202
+msgid "Error while downloading"
+msgstr ""
+
+#: ../inc/result.inc:204
+msgid "Error while computing"
+msgstr ""
+
+#: ../inc/result.inc:205
+msgid "Error while uploading"
+msgstr ""
+
+#: ../inc/result.inc:206 ../inc/result.inc:259
+msgid "Aborted by user"
+msgstr ""
+
+#: ../inc/result.inc:207 ../inc/result.inc:260
+msgid "Upload failed"
+msgstr ""
+
+#: ../inc/result.inc:210
+msgid "Timed out - no response"
+msgstr ""
+
+#: ../inc/result.inc:211 ../inc/result.inc:240 ../user/explain_state.php:71
+msgid "Didn't need"
+msgstr ""
+
+#: ../inc/result.inc:212 ../inc/result.inc:241 ../user/explain_state.php:74
+msgid "Validate error"
+msgstr ""
+
+#: ../inc/result.inc:213 ../inc/result.inc:242
+msgid "Abandoned"
+msgstr ""
+
+#: ../inc/result.inc:224 ../user/explain_state.php:43
+msgid "Over"
+msgstr ""
+
+#: ../inc/result.inc:232 ../user/explain_state.php:59
+msgid "Success"
+msgstr ""
+
+#: ../inc/result.inc:236
+msgid "Computation error"
+msgstr ""
+
+#: ../inc/result.inc:238
+msgid "Redundant result"
+msgstr ""
+
+#: ../inc/result.inc:239 ../user/explain_state.php:68
+msgid "No reply"
+msgstr ""
+
+#: ../inc/result.inc:249 ../user/explain_state.php:85
+msgid "New"
+msgstr ""
+
+#: ../inc/result.inc:250 ../user/explain_state.php:91
+msgid "Downloading"
+msgstr ""
+
+#: ../inc/result.inc:251
+msgid "Processing"
+msgstr ""
+
+#: ../inc/result.inc:252
+msgid "Compute error"
+msgstr ""
+
+#: ../inc/result.inc:253 ../user/explain_state.php:97
+msgid "Uploading"
+msgstr ""
+
+#: ../inc/result.inc:254 ../user/explain_state.php:88
+msgid "Done"
+msgstr ""
+
+#: ../inc/result.inc:267
+msgid "Initial"
+msgstr ""
+
+#: ../inc/result.inc:273
+msgid "Not necessary"
+msgstr ""
+
+#: ../inc/result.inc:274
+msgid "Workunit error - check skipped"
+msgstr ""
+
+#: ../inc/result.inc:275
+msgid "Checked, but no consensus yet"
+msgstr ""
+
+#: ../inc/result.inc:276
+msgid "Task was reported too late to validate"
+msgstr ""
+
+#: ../inc/result.inc:302
+msgid "Couldn't send result"
+msgstr ""
+
+#: ../inc/result.inc:306
+msgid "Too many errors (may have bug)"
+msgstr ""
+
+#: ../inc/result.inc:310
+msgid "Too many results (may be nondeterministic)"
+msgstr ""
+
+#: ../inc/result.inc:314
+msgid "Too many total results"
+msgstr ""
+
+#: ../inc/result.inc:318
+msgid "WU cancelled"
+msgstr ""
+
+#: ../inc/result.inc:322
+msgid "Unrecognized Error: %1"
+msgstr ""
+
+#: ../inc/result.inc:349
+msgid "Task name"
+msgstr ""
+
+#: ../inc/result.inc:349 ../inc/result.inc:354 ../inc/result.inc:357
+#: ../inc/result.inc:360
+msgid "click for details"
+msgstr ""
+
+#: ../inc/result.inc:349
+msgid "Show IDs"
+msgstr ""
+
+#: ../inc/result.inc:354
+msgid "Show names"
+msgstr ""
+
+#: ../inc/result.inc:357
+msgid "Task"
+msgstr ""
+
+#: ../inc/result.inc:360
+msgid "Work unit"
+msgstr ""
+
+#: ../inc/result.inc:369
+msgid "Computer"
+msgstr ""
+
+#: ../inc/result.inc:372 ../inc/result.inc:631
+msgid "Sent"
+msgstr ""
+
+#: ../inc/result.inc:373
+msgid "Time reported<br />or deadline"
+msgstr ""
+
+#: ../inc/result.inc:374
+msgid "explain"
+msgstr ""
+
+#: ../inc/result.inc:376 ../user/server_status.php:241
+msgid "Status"
+msgstr ""
+
+#: ../inc/result.inc:377
+msgid "Run time<br />(sec)"
+msgstr ""
+
+#: ../inc/result.inc:378
+msgid "CPU time<br />(sec)"
+msgstr ""
+
+#: ../inc/result.inc:379 ../inc/result.inc:642
+msgid "Credit"
+msgstr ""
+
+#: ../inc/result.inc:380 ../inc/result.inc:724
+msgid "Application"
+msgstr ""
+
+#: ../inc/result.inc:629
+msgid "Workunit"
+msgstr ""
+
+#: ../inc/result.inc:632
+msgid "Received"
+msgstr ""
+
+#: ../inc/result.inc:633
+msgid "Server state"
+msgstr ""
+
+#: ../inc/result.inc:634
+msgid "Outcome"
+msgstr ""
+
+#: ../inc/result.inc:635
+msgid "Client state"
+msgstr ""
+
+#: ../inc/result.inc:636
+msgid "Exit status"
+msgstr ""
+
+#: ../inc/result.inc:638
+msgid "Report deadline"
+msgstr ""
+
+#: ../inc/result.inc:639
+msgid "Run time"
+msgstr ""
+
+#: ../inc/result.inc:640
+msgid "CPU time"
+msgstr ""
+
+#: ../inc/result.inc:641
+msgid "Validate state"
+msgstr ""
+
+#: ../inc/result.inc:643
+msgid "Application version"
+msgstr ""
+
+#: ../inc/result.inc:656
+msgid "Output files"
+msgstr ""
+
+#: ../inc/result.inc:659
+msgid "Stderr output"
+msgstr ""
+
+#: ../inc/result.inc:706
+msgid "State"
+msgstr ""
+
+#: ../inc/result.inc:747
+msgid "Task name:"
+msgstr ""
+
+#: ../inc/team.inc:40
+msgid "Search criteria (use one or more)"
+msgstr ""
+
+#: ../inc/team.inc:41
+msgid "Key words"
+msgstr ""
+
+#: ../inc/team.inc:41
+msgid "Find teams with these words in their names or descriptions"
+msgstr ""
+
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
+#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
+#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
+#: ../user/team_search.php:72 ../user/top_users.php:63
+#: ../user/user_search.php:53 ../user/user_search.php:140
+msgid "Country"
+msgstr ""
+
+#: ../inc/team.inc:49 ../inc/team.inc:453
+msgid "Type of team"
+msgstr ""
+
+#: ../inc/team.inc:51
+msgid "Show only active teams"
+msgstr ""
+
+#: ../inc/team.inc:52 ../user/profile_menu.php:76 ../user/user_search.php:70
+msgid "Search"
+msgstr ""
+
+#: ../inc/team.inc:61
+msgid "Requested by you, and founder response deadline has passed."
+msgstr ""
+
+#: ../inc/team.inc:63
+msgid "Complete foundership transfer"
+msgstr ""
+
+#: ../inc/team.inc:67
+msgid "Requested by you"
+msgstr ""
+
+#: ../inc/team.inc:67
+msgid "founder response deadline is %1"
+msgstr ""
+
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
+msgid "None"
+msgstr ""
+
+#: ../inc/team.inc:74
+msgid "Initiate request"
+msgstr ""
+
+#: ../inc/team.inc:77
+msgid "Deferred"
+msgstr ""
+
+#: ../inc/team.inc:87
+msgid "Team info"
+msgstr ""
+
+#: ../inc/team.inc:89 ../user/team_forum.php:70 ../user/team_search.php:69
+msgid "Description"
+msgstr ""
+
+#: ../inc/team.inc:97
+msgid "Web site"
+msgstr ""
+
+#: ../inc/team.inc:120
+msgid "Cross-project stats"
+msgstr ""
+
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
+msgid "Type"
+msgstr ""
+
+#: ../inc/team.inc:127 ../user/team_manage.php:63
+msgid "Message board"
+msgstr ""
+
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
+msgid "Threads"
+msgstr ""
+
+#: ../inc/team.inc:136
+msgid "Join this team"
+msgstr ""
+
+#: ../inc/team.inc:137
+msgid ""
+"Note: if 'OK to email' is set in your project preferences, joining a team "
+"gives its founder access to your email address."
+msgstr ""
+
+#: ../inc/team.inc:140
+msgid "Not accepting new members"
+msgstr ""
+
+#: ../inc/team.inc:147
+msgid "Foundership change requested"
+msgstr ""
+
+#: ../inc/team.inc:148
+msgid "Respond by %1"
+msgstr ""
+
+#: ../inc/team.inc:152
+msgid "Team foundership change"
+msgstr ""
+
+#: ../inc/team.inc:156 ../inc/team.inc:359
+msgid "Members"
+msgstr ""
+
+#: ../inc/team.inc:157 ../inc/team.inc:254
+msgid "Founder"
+msgstr ""
+
+#: ../inc/team.inc:169
+msgid "Admins"
+msgstr ""
+
+#: ../inc/team.inc:184
+msgid "New members in last day"
+msgstr ""
+
+#: ../inc/team.inc:185
+msgid "Total members"
+msgstr ""
+
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
+msgid "view"
+msgstr ""
+
+#: ../inc/team.inc:186
+msgid "Active members"
+msgstr ""
+
+#: ../inc/team.inc:187
+msgid "Members with credit"
+msgstr ""
+
+#: ../inc/team.inc:256
+msgid "Admin"
+msgstr ""
+
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
+#: ../user/top_hosts.php:93 ../user/top_teams.php:121
+#: ../user/top_users.php:127
+msgid "Previous %1"
+msgstr ""
+
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
+#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
+#: ../user/top_teams.php:126 ../user/top_users.php:132
+msgid "Next %1"
+msgstr ""
+
+#: ../inc/team.inc:289
+msgid "No such team."
+msgstr ""
+
+#: ../inc/team.inc:302
+msgid "This operation requires foundership."
+msgstr ""
+
+#: ../inc/team.inc:326
+msgid "This operation requires team admin privileges"
+msgstr ""
+
+#: ../inc/team.inc:422
+msgid ""
+"WARNING: this is a BOINC-wide team. If you make changes here, they will soon "
+"be overwritten. Edit the %1BOINC-wide team%2 instead."
+msgstr ""
+
+#: ../inc/team.inc:428
+msgid ""
+"%1Privacy note%2: if you create a team, your project preferences (resource "
+"share, graphics preferences) will be visible to the public."
+msgstr ""
+
+#: ../inc/team.inc:432
+msgid "Team name, text version"
+msgstr ""
+
+#: ../inc/team.inc:433
+msgid "Don't use HTML tags."
+msgstr ""
+
+#: ../inc/team.inc:436
+msgid "Team name, HTML version"
+msgstr ""
+
+#: ../inc/team.inc:438 ../inc/team.inc:448
+msgid "You may use %1limited HTML tags%2."
+msgstr ""
+
+#: ../inc/team.inc:439
+msgid "If you don't know HTML, leave this box blank."
+msgstr ""
+
+#: ../inc/team.inc:442
+msgid "URL of team web page, if any"
+msgstr ""
+
+#: ../inc/team.inc:442
+msgid "without \"http://\""
+msgstr ""
+
+#: ../inc/team.inc:443
+msgid "This URL will be linked to from the team's page on this site."
+msgstr ""
+
+#: ../inc/team.inc:446
+msgid "Description of team"
+msgstr ""
+
+#: ../inc/team.inc:462
+msgid "Accept new members?"
+msgstr ""
+
+#: ../inc/uotd.inc:28
+msgid "User profile"
+msgstr ""
+
+#: ../inc/user.inc:119
+msgid "Projects in which you are participating"
+msgstr ""
+
+#: ../inc/user.inc:121
+msgid "Projects in which %1 is participating"
+msgstr ""
+
+#: ../inc/user.inc:125
+msgid "Project"
+msgstr ""
+
+#: ../inc/user.inc:125
+msgid "Click for user page"
+msgstr ""
+
+#: ../inc/user.inc:125
+msgid "Since"
+msgstr ""
+
+#: ../inc/user.inc:148
+msgid "Computing and credit"
+msgstr ""
+
+#: ../inc/user.inc:151
+msgid "Computers on this account"
+msgstr ""
+
+#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
+#: ../user/view_profile.php:64
+msgid "View"
+msgstr ""
+
+#: ../inc/user.inc:161
+msgid "Cross-project ID"
+msgstr ""
+
+#: ../inc/user.inc:162
+msgid "Cross-project statistics"
+msgstr ""
+
+#: ../inc/user.inc:163
+msgid "Account"
+msgstr ""
+
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
+msgid "Team"
+msgstr ""
+
+#: ../inc/user.inc:167
+msgid "Cross-project"
+msgstr ""
+
+#: ../inc/user.inc:168 ../user/bs_sample_index.php:54
+msgid "Certificate"
+msgstr ""
+
+#: ../inc/user.inc:169
+msgid "Stats on your cell phone"
+msgstr ""
+
+#: ../inc/user.inc:183
+msgid "Unknown notification type: %1"
+msgstr ""
+
+#: ../inc/user.inc:198
+msgid "Account information"
+msgstr ""
+
+#: ../inc/user.inc:200 ../user/edit_passwd_form.php:45
+#: ../user/get_passwd.php:40 ../user/team_email_list.php:64
+msgid "Email address"
+msgstr ""
+
+#: ../inc/user.inc:203 ../inc/user.inc:322
+msgid "URL"
+msgstr ""
+
+#: ../inc/user.inc:206
+msgid "Postal code"
+msgstr ""
+
+#: ../inc/user.inc:207 ../inc/user.inc:316
+msgid "%1 member since"
+msgstr ""
+
+#: ../inc/user.inc:209
+msgid "Change"
+msgstr ""
+
+#: ../inc/user.inc:209
+msgid "email address"
+msgstr ""
+
+#: ../inc/user.inc:210
+msgid "password"
+msgstr ""
+
+#: ../inc/user.inc:211
+msgid "other account info"
+msgstr ""
+
+#: ../inc/user.inc:213 ../inc/user.inc:315
+msgid "User ID"
+msgstr ""
+
+#: ../inc/user.inc:213
+msgid "Used in community functions"
+msgstr ""
+
+#: ../inc/user.inc:216 ../user/weak_auth.php:25
+msgid "Account keys"
+msgstr ""
+
+#: ../inc/user.inc:221
+msgid "Preferences"
+msgstr ""
+
+#: ../inc/user.inc:224
+msgid "When and how BOINC uses your computer"
+msgstr ""
+
+#: ../inc/user.inc:225
+msgid "Computing preferences"
+msgstr ""
+
+#: ../inc/user.inc:228
+msgid "Message boards and private messages"
+msgstr ""
+
+#: ../inc/user.inc:229 ../user/edit_forum_preferences_form.php:31
+msgid "Community preferences"
+msgstr ""
+
+#: ../inc/user.inc:232
+msgid "Preferences for this project"
+msgstr ""
+
+#: ../inc/user.inc:233 ../user/prefs.php:29
+msgid "%1 preferences"
+msgstr ""
+
+#: ../inc/user.inc:239 ../user/bs_sample_index.php:59
+#: ../user/sample_index.php:125
+msgid "Community"
+msgstr ""
+
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
+msgid "Delete"
+msgstr ""
+
+#: ../inc/user.inc:245
+msgid "Create"
+msgstr ""
+
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
+msgid "Profile"
+msgstr ""
+
+#: ../inc/user.inc:250 ../inc/user.inc:375
+msgid "%1 posts"
+msgstr ""
+
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
+msgid "Notifications"
+msgstr ""
+
+#: ../inc/user.inc:269
+msgid "Quit team"
+msgstr ""
+
+#: ../inc/user.inc:271 ../inc/user.inc:288
+msgid "Administer"
+msgstr ""
+
+#: ../inc/user.inc:277 ../inc/user.inc:290
+msgid "(foundership change request pending)"
+msgstr ""
+
+#: ../inc/user.inc:279
+msgid "Member of team"
+msgstr ""
+
+#: ../inc/user.inc:281
+msgid "find a team"
+msgstr ""
+
+#: ../inc/user.inc:292
+msgid "Founder but not member of"
+msgstr ""
+
+#: ../inc/user.inc:298
+msgid "Find friends"
+msgstr ""
+
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
+msgid "Friends"
+msgstr ""
+
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
+msgid "Computers"
+msgstr ""
+
+#: ../inc/user.inc:338
+msgid "Donor"
+msgstr ""
+
+#: ../inc/user.inc:378
+msgid "Contact"
+msgstr ""
+
+#: ../inc/user.inc:381
+msgid "This person is a friend"
+msgstr ""
+
+#: ../inc/user.inc:382 ../user/friend.php:238
+msgid "Cancel friendship"
+msgstr ""
+
+#: ../inc/user.inc:385 ../user/friend.php:37
+msgid "Request pending"
+msgstr ""
+
+#: ../inc/user.inc:387
+msgid "Add as friend"
+msgstr ""
+
+#: ../inc/user.inc:446
+msgid "user name cannot have leading or trailing white space"
+msgstr ""
+
+#: ../inc/user.inc:450
+msgid "user name must be nonempty"
+msgstr ""
+
+#: ../inc/user.inc:454
+msgid "user name may not contain HTML tags"
+msgstr ""
+
+#: ../inc/util.inc:131
+msgid "log out"
+msgstr ""
+
+#: ../inc/util.inc:133
+msgid "log in"
+msgstr ""
+
+#: ../inc/util.inc:204 ../user/login_form.php:30 ../user/login_form.php:66
+msgid "Log in"
+msgstr ""
+
+#: ../inc/util.inc:205 ../user/create_account_form.php:40
+msgid "Create an account"
+msgstr ""
+
+#: ../inc/util.inc:206
+msgid "Server status page"
+msgstr ""
+
+#: ../inc/util.inc:248
+msgid ""
+"A database error occurred while handling your request; please try again "
+"later."
+msgstr ""
+
+#: ../inc/util.inc:257
+msgid "Unable to handle request"
+msgstr ""
+
+#: ../inc/util.inc:277
+msgid "hours"
+msgstr ""
+
+#: ../inc/util.inc:280
+msgid "min"
+msgstr ""
+
+#: ../inc/util.inc:283
+msgid "sec"
+msgstr ""
+
+#: ../inc/util.inc:444
+msgid "Link has timed out. Please click Back, refresh the page, and try again."
+msgstr ""
+
+#: ../inc/util.inc:513
+msgid "View the profile of %1"
+msgstr ""
+
+#: ../inc/util.inc:569
+msgid "Use BBCode tags to format your text"
+msgstr ""
+
+#: ../inc/util.inc:796
+msgid "Project down for maintenance"
+msgstr ""
+
+#: ../inc/util.inc:799
+msgid "%1 is temporarily shut down for maintenance. Please try again later."
+msgstr ""
+
+#: ../inc/util.inc:817
+msgid "Unable to connect to database - please try again later"
+msgstr ""
+
+#: ../inc/util.inc:821
+msgid "Unable to select database - please try again later"
+msgstr ""
+
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
+msgid "Stay logged in on this computer"
+msgstr ""
+
+#: ../user/account_finish.php:34
+msgid "Finish account setup"
+msgstr ""
+
+#: ../user/account_finish.php:41 ../user/create_account_form.php:79
+msgid "Identifies you on our web site. Use your real name or a nickname."
+msgstr ""
+
+#: ../user/account_finish.php:45 ../user/create_account_form.php:98
+msgid "Select the country you want to represent, if any."
+msgstr ""
+
+#: ../user/account_finish.php:51 ../user/create_account_form.php:104
+msgid "Postal or ZIP Code"
+msgstr ""
+
+#: ../user/account_finish.php:51 ../user/create_account_form.php:104
+msgid "Optional"
+msgstr ""
+
+#: ../user/account_finish_action.php:27
+msgid "You must supply a name for your account"
+msgstr ""
+
+#: ../user/account_finish_action.php:30
+msgid "HTML tags not allowed in name"
+msgstr ""
+
+#: ../user/add_venue.php:81
+msgid "Add %1 preferences for %2"
+msgstr ""
+
+#: ../user/apps.php:32 ../user/bs_sample_index.php:55
+#: ../user/sample_index.php:120
+msgid "Applications"
+msgstr ""
+
+#: ../user/apps.php:33
+msgid ""
+"%1 currently has the following applications. When you participate in %1, "
+"work for one or more of these applications will be assigned to your "
+"computer. The current version of the application will be downloaded to your "
+"computer. This happens automatically; you don't have to do anything."
+msgstr ""
+
+#: ../user/apps.php:50
+msgid "Platform"
+msgstr ""
+
+#: ../user/apps.php:51
+msgid "Version"
+msgstr ""
+
+#: ../user/apps.php:52
+msgid "Installation time"
+msgstr ""
+
+#: ../user/bbcode.php:23
+msgid "BBCode tags"
+msgstr ""
+
+#: ../user/bbcode.php:25
+msgid ""
+"BBCode tags let you format text in your profile and message-board postings.\n"
+"It's similar to HTML, but simpler. The tags start with a [ (where you would\n"
+"have used %1 in HTML) and end with ] (where you would have used %2 in\n"
+"HTML)."
+msgstr ""
+
+#: ../user/bbcode.php:31
+msgid "Examples"
+msgstr ""
+
+#: ../user/bbcode.php:32
+msgid "Bold"
+msgstr ""
+
+#: ../user/bbcode.php:33
+msgid "Italic"
+msgstr ""
+
+#: ../user/bbcode.php:34
+msgid "Underline"
+msgstr ""
+
+#: ../user/bbcode.php:35
+msgid "Superscript"
+msgstr ""
+
+#: ../user/bbcode.php:36
+msgid "Big text"
+msgstr ""
+
+#: ../user/bbcode.php:37
+msgid "Red text"
+msgstr ""
+
+#: ../user/bbcode.php:38
+msgid "link to website"
+msgstr ""
+
+#: ../user/bbcode.php:39
+msgid "Quoted text"
+msgstr ""
+
+#: ../user/bbcode.php:39
+msgid "use for quoted blocks of text"
+msgstr ""
+
+#: ../user/bbcode.php:40
+msgid "use to display an image"
+msgstr ""
+
+#: ../user/bbcode.php:41
+msgid "Code snippet here"
+msgstr ""
+
+#: ../user/bbcode.php:41
+msgid "use to display some code"
+msgstr ""
+
+#: ../user/bbcode.php:42
+msgid "Pre-formatted text"
+msgstr ""
+
+#: ../user/bbcode.php:42
+msgid "use to display pre-formatted (usually monospaced) text"
+msgstr ""
+
+#: ../user/bbcode.php:43
+msgid "Item 1"
+msgstr ""
+
+#: ../user/bbcode.php:43
+msgid "Item2"
+msgstr ""
+
+#: ../user/bbcode.php:43
+msgid "Item 2"
+msgstr ""
+
+#: ../user/bbcode.php:45
+msgid "use to link to Trac ticket on BOINC website"
+msgstr ""
+
+#: ../user/bbcode.php:47
+msgid "use to link to Trac Wiki on BOINC website"
+msgstr ""
+
+#: ../user/bbcode.php:49
+msgid "use to link to SVN changeset on BOINC website"
+msgstr ""
+
+#: ../user/bbcode.php:53
+msgid ""
+"If you don't close a tag or don't specify a parameter correctly,\n"
+"the raw tag itself will display instead of the formatted text."
+msgstr ""
+
+#: ../user/bs_sample_index.php:44
+msgid "Participants"
+msgstr ""
+
+#: ../user/bs_sample_index.php:46
+msgid "Do work"
+msgstr ""
+
+#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
+#: ../user/home.php:49 ../project.sample/project.inc:43
+msgid "Your account"
+msgstr ""
+
+#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
+msgid "view stats, modify preferences"
+msgstr ""
+
+#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
+#: ../user/team.php:25
+msgid "Teams"
+msgstr ""
+
+#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
+msgid "create or join a team"
+msgstr ""
+
+#: ../user/bs_sample_index.php:51 ../user/sample_index.php:191
+msgid "User of the day"
+msgstr ""
+
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
+msgid "Server status"
+msgstr ""
+
+#: ../user/bs_sample_index.php:60 ../user/profile_menu.php:32
+#: ../user/sample_index.php:127
+msgid "Profiles"
+msgstr ""
+
+#: ../user/bs_sample_index.php:61
+msgid "User search"
+msgstr ""
+
+#: ../user/bs_sample_index.php:64
+msgid "Statistics"
+msgstr ""
+
+#: ../user/bs_sample_index.php:65 ../user/stats.php:30
+#: ../user/top_users.php:116
+msgid "Top participants"
+msgstr ""
+
+#: ../user/bs_sample_index.php:66 ../user/stats.php:31
+msgid "Top computers"
+msgstr ""
+
+#: ../user/bs_sample_index.php:67 ../user/stats.php:32 ../user/team.php:46
+msgid "Top teams"
+msgstr ""
+
+#: ../user/bs_sample_index.php:68 ../user/gpu_list.php:182
+#: ../user/stats.php:33
+msgid "Top GPU models"
+msgstr ""
+
+#: ../user/bs_sample_index.php:70
+msgid "Languages"
+msgstr ""
+
+#: ../user/bs_sample_index.php:149 ../user/info.php:24
+#: ../user/sample_index.php:79
+msgid "Read our rules and policies"
+msgstr ""
+
+#: ../user/create_account_action.php:26
+msgid "Can't create account"
+msgstr ""
+
+#: ../user/create_account_action.php:29
+msgid "Click your browser's <b>Back</b> button to try again."
+msgstr ""
+
+#: ../user/create_account_action.php:47
+msgid "Your reCAPTCHA response was not correct. Please try again."
+msgstr ""
+
+#: ../user/create_account_action.php:70
+msgid "You must supply an invitation code to create an account."
+msgstr ""
+
+#: ../user/create_account_action.php:73
+msgid "The invitation code you gave is not valid."
+msgstr ""
+
+#: ../user/create_account_action.php:84
+msgid ""
+"Invalid email address: you must enter a valid address of the form name at domain"
+msgstr ""
+
+#: ../user/create_account_action.php:88
+msgid "There's already an account with that email address."
+msgstr ""
+
+#: ../user/create_account_action.php:94 ../user/edit_passwd_action.php:33
+msgid "New passwords are different"
+msgstr ""
+
+#: ../user/create_account_action.php:101 ../user/edit_passwd_action.php:41
+msgid "Passwords may only include ASCII characters."
+msgstr ""
+
+#: ../user/create_account_action.php:106 ../user/edit_passwd_action.php:45
+msgid "New password is too short: minimum password length is %1 characters."
+msgstr ""
+
+#: ../user/create_account_action.php:127
+msgid "Couldn't create account"
+msgstr ""
+
+#: ../user/create_account_form.php:44
+msgid ""
+"NOTE: If you use the BOINC Manager, don't use this form. Just run BOINC, "
+"select Add Project, and enter an email address and password."
+msgstr ""
+
+#: ../user/create_account_form.php:61
+msgid ""
+"This account will belong to the team %1 and will have the project "
+"preferences of its founder."
+msgstr ""
+
+#: ../user/create_account_form.php:73
+msgid "Invitation Code"
+msgstr ""
+
+#: ../user/create_account_form.php:73
+msgid "A valid invitation code is required to create an account."
+msgstr ""
+
+#: ../user/create_account_form.php:83
+msgid "Email Address"
+msgstr ""
+
+#: ../user/create_account_form.php:83
+msgid "Must be a valid address of the form 'name at domain'."
+msgstr ""
+
+#: ../user/create_account_form.php:92 ../user/edit_email_form.php:47
+msgid "Password"
+msgstr ""
+
+#: ../user/create_account_form.php:93
+msgid "Must be at least %1 characters"
+msgstr ""
+
+#: ../user/create_account_form.php:96
+msgid "Confirm password"
+msgstr ""
+
+#: ../user/create_account_form.php:113
+msgid "Please enter the words shown in the image"
+msgstr ""
+
+#: ../user/create_account_form.php:119
+msgid "Create account"
+msgstr ""
+
+#: ../user/create_profile.php:50
+msgid "Picture"
+msgstr ""
+
+#: ../user/create_profile.php:64
+msgid "%1 Your profile picture is shown to the left."
+msgstr ""
+
+#: ../user/create_profile.php:66
+msgid ""
+"To replace it, click the \"Browse\" button and select a JPEG or PNG file (%1 "
+"or less)."
+msgstr ""
+
+#: ../user/create_profile.php:69
+msgid "To remove it from your profile, check this box:"
+msgstr ""
+
+#: ../user/create_profile.php:77
+msgid ""
+"If you would like include a picture with your profile, click the \"Browse\" "
+"button and select a JPEG or PNG file. Please select images of %1 or less."
+msgstr ""
+
+#: ../user/create_profile.php:89
+msgid "Language"
+msgstr ""
+
+#: ../user/create_profile.php:92
+msgid "Select the language in which your profile is written:"
+msgstr ""
+
+#: ../user/create_profile.php:104
+msgid "Submit profile"
+msgstr ""
+
+#: ../user/create_profile.php:110
+msgid "Please enter the words shown in the image."
+msgstr ""
+
+#: ../user/create_profile.php:115
+msgid "Create/edit profile"
+msgstr ""
+
+#: ../user/create_profile.php:137
+msgid "The format of your uploaded image is not supported."
+msgstr ""
+
+#: ../user/create_profile.php:166
+msgid ""
+"Your %1profile%2 lets you share your opinions and background with the %3 "
+"community."
+msgstr ""
+
+#: ../user/create_profile.php:213
+msgid "Your ReCaptcha response was not correct. Please try again."
+msgstr ""
+
+#: ../user/create_profile.php:222
+msgid ""
+"Your first response was flagged as spam by the Akismet anti-spam system. "
+"Please modify your text and try again."
+msgstr ""
+
+#: ../user/create_profile.php:230
+msgid ""
+"Your second response was flagged as spam by the Akismet anti-spam system. "
+"Please modify your text and try again."
+msgstr ""
+
+#: ../user/create_profile.php:246
+msgid "Your profile submission was empty."
+msgstr ""
+
+#: ../user/create_profile.php:285
+msgid "Could not update the profile: database error"
+msgstr ""
+
+#: ../user/create_profile.php:297
+msgid "Could not create the profile: database error"
+msgstr ""
+
+#: ../user/create_profile.php:302
+msgid "Profile saved"
+msgstr ""
+
+#: ../user/create_profile.php:304
+msgid ""
+"Congratulations! Your profile was successfully entered into our database."
+msgstr ""
+
+#: ../user/create_profile.php:306
+msgid "%1View your profile%2"
+msgstr ""
+
+#: ../user/create_profile.php:315
+msgid "Create a profile"
+msgstr ""
+
+#: ../user/create_profile.php:343
+msgid ""
+"To prevent spam, an average credit of %1 or greater is required to create or "
+"edit a profile. We apologize for this inconvenience."
+msgstr ""
+
+#: ../user/delete_account.php:57
+msgid "Couldn't delete account"
+msgstr ""
+
+#: ../user/delete_account.php:59
+msgid "Account deleted"
+msgstr ""
+
+#: ../user/delete_account.php:60
+msgid "Your account has been deleted."
+msgstr ""
+
+#: ../user/delete_account.php:64
+msgid "Confirm delete account"
+msgstr ""
+
+#: ../user/delete_account.php:67
+msgid ""
+"Deleting your account will remove all of your\n"
+"personal information from our servers,\n"
+"including your profile and message-board posts.\n"
+"No jobs will be issued to any computers attached\n"
+"to this account."
+msgstr ""
+
+#: ../user/delete_account.php:73
+msgid ""
+"This cannot be undone.\n"
+"Once your account has been deleted, you cannot get it back."
+msgstr ""
+
+#: ../user/delete_account.php:76
+msgid "Are you sure you want to delete your account?"
+msgstr ""
+
+#: ../user/delete_account.php:79 ../user/delete_profile.php:52
+#: ../user/donations.php:322 ../user/donations.php:326 ../user/friend.php:238
+#: ../user/prefs_remove.php:52 ../user/user_search.php:59
+#: ../user/user_search.php:64
+msgid "Yes"
+msgstr ""
+
+#: ../user/delete_account.php:79
+msgid "Delete this account"
+msgstr ""
+
+#: ../user/delete_account.php:80 ../user/delete_profile.php:53
+#: ../user/friend.php:239 ../user/user_search.php:58
+#: ../user/user_search.php:63
+msgid "No"
+msgstr ""
+
+#: ../user/delete_account.php:80
+msgid "Do not delete this account"
+msgstr ""
+
+#: ../user/delete_profile.php:30
+msgid "couldn't delete profile - please try again later"
+msgstr ""
+
+#: ../user/delete_profile.php:33
+msgid "Delete Confirmation"
+msgstr ""
+
+#: ../user/delete_profile.php:35
+msgid "Your profile has been deleted."
+msgstr ""
+
+#: ../user/delete_profile.php:40
+msgid "Profile delete confirmation"
+msgstr ""
+
+#: ../user/delete_profile.php:43
+msgid "Are you sure?"
+msgstr ""
+
+#: ../user/delete_profile.php:44
+msgid ""
+"Deleted profiles are gone forever and cannot be recovered --\n"
+"you will have to start from scratch\n"
+"if you want another profile in the future."
+msgstr ""
+
+#: ../user/delete_profile.php:48
+msgid ""
+"If you're sure, click 'Yes'\n"
+"to remove your profile from our database."
+msgstr ""
+
+#: ../user/delete_profile.php:52
+msgid "Delete my profile"
+msgstr ""
+
+#: ../user/delete_profile.php:53
+msgid "Do not delete my profile"
+msgstr ""
+
+#: ../user/donated.php:25
+msgid "PayPal - Transaction Completed"
+msgstr ""
+
+#: ../user/donated.php:28
+msgid "Thank you for donating!"
+msgstr ""
+
+#: ../user/donated.php:29
+msgid "Your donation for has been completed."
+msgstr ""
+
+#: ../user/donated.php:30
+msgid ""
+"Your donation will be added to the progress bar after confirmation by PayPal."
+msgstr ""
+
+#: ../user/donated.php:32
+msgid "You have canceled your donation."
+msgstr ""
+
+#: ../user/donations.php:24
+msgid "This project is not accepting donations."
+msgstr ""
+
+#: ../user/donations.php:34
+msgid "%1 donations"
+msgstr ""
+
+#: ../user/donations.php:39
+msgid ""
+"This project is accepting donations via\n"
+"%1."
+msgstr ""
+
+#: ../user/donations.php:42
+msgid ""
+"To donate, fill in the amount you want to donate using the field below.\n"
+" PayPal is accepting multiple currencies\n"
+" (Canadian Dollars, Euros, Pounds Sterling, U.S. Dollars,\n"
+" Yen, Australian Dollars, New Zealand Dollars,\n"
+" Swiss Francs, Hong Kong Dollars, Singapore Dollars, Swedish Kronor,\n"
+" Danish Kroner, Polish Zloty, Norwegian Kroner,\n"
+" Hungarian Forint, Czech Koruna).\n"
+" You can use included currency converter\n"
+" to see the donation amount equivalent in different currencies\n"
+" (please note that the rates are only estimates\n"
+" and the actual amount may differ)."
+msgstr ""
+
+#: ../user/donations.php:316
+msgid "Amount you would like to donate"
+msgstr ""
+
+#: ../user/donations.php:317
+msgid "Estimated value in"
+msgstr ""
+
+#: ../user/donations.php:320 ../user/donations.php:324
+msgid "Anonymous donation"
+msgstr ""
+
+#: ../user/donations.php:320
+msgid ""
+"Select this if you dont want your name and account number displayed in\n"
+"donator lists.<br>If not checked, you will be recorded as user ID %1"
+msgstr ""
+
+#: ../user/donations.php:324
+msgid "To assign the donation with your user ID, please log in."
+msgstr ""
+
+#: ../user/donations.php:328
+msgid "Proceed"
+msgstr ""
+
+#: ../user/donations.php:329
+msgid "Donations are accepted through"
+msgstr ""
+
+#: ../user/download_network.php:25
+msgid "Download BOINC add-on software"
+msgstr ""
+
+#: ../user/download_network.php:28
+msgid "You can download applications in several categories."
+msgstr ""
+
+#: ../user/download_network.php:31
+msgid ""
+"These applications are not endorsed by %1 and you use them at your own risk."
+msgstr ""
+
+#: ../user/download_network.php:33
+msgid ""
+"We do not provide instructions for installing these applications.\n"
+"However, the author may have provided some help on installing or "
+"uninstalling the application. \n"
+"If this is not enough you should contact the author."
+msgstr ""
+
+#: ../user/download_network.php:36
+msgid "Instructions for installing and running BOINC are %1here%2."
+msgstr ""
+
+#: ../user/download_network.php:38
+msgid "This list is managed centrally at %1the BOINC website%2."
+msgstr ""
+
+#: ../user/edit_email_action.php:31
+msgid "Change email address of account"
+msgstr ""
+
+#: ../user/edit_email_action.php:34 ../user/edit_email_action.php:36
+msgid "New email address '%1' is invalid."
+msgstr ""
+
+#: ../user/edit_email_action.php:38
+msgid "New email address is same as existing address. Nothing is changed."
+msgstr ""
+
+#: ../user/edit_email_action.php:42
+msgid "There's already an account with that email address"
+msgstr ""
+
+#: ../user/edit_email_action.php:54
+msgid "Invalid password."
+msgstr ""
+
+#: ../user/edit_email_action.php:62
+msgid "The email address of your account is now %1."
+msgstr ""
+
+#: ../user/edit_email_action.php:64
+msgid "Please %1validate this email address%2."
+msgstr ""
+
+#: ../user/edit_email_action.php:67
+msgid ""
+"We can't update your email address due to a database problem. Please try "
+"again later."
+msgstr ""
+
+#: ../user/edit_email_form.php:27 ../user/edit_email_form.php:51
+msgid "Change email address"
+msgstr ""
+
+#: ../user/edit_email_form.php:36
+msgid "Change the email address of your account"
+msgstr ""
+
+#: ../user/edit_email_form.php:37
+msgid "New email address"
+msgstr ""
+
+#: ../user/edit_email_form.php:38
+msgid "Must be a valid address of the form 'name at domain'"
+msgstr ""
+
+#: ../user/edit_email_form.php:48
+msgid "No password?"
+msgstr ""
+
+#: ../user/edit_forum_preferences_action.php:33
+msgid "Confirm reset"
+msgstr ""
+
+#: ../user/edit_forum_preferences_action.php:34
+msgid ""
+"This action will erase any changes you have made in your community "
+"preferences. To cancel, click your browser's Back button."
+msgstr ""
+
+#: ../user/edit_forum_preferences_action.php:38
+msgid "Reset preferences"
+msgstr ""
+
+#: ../user/edit_forum_preferences_action.php:88
+msgid "Error: Not the right kind of file, only PNG and JPEG are supported."
+msgstr ""
+
+#: ../user/edit_forum_preferences_action.php:114
+msgid "Your signature was too long, please keep it less than 250 characters."
+msgstr ""
+
+#: ../user/edit_forum_preferences_action.php:132
+#: ../user/edit_forum_preferences_action.php:146
+msgid "No such user: %1"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:56
+msgid ""
+"How should we notify you of new private messages, friend requests, posts in "
+"subscribed threads, and other events?"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:57
+msgid "On my Account page (no email)"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:58
+msgid "Immediately, by email"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:59
+msgid "In a single daily email"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:75
+msgid "Message-board identity"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:76
+msgid "Avatar"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:77
+msgid "An image representing you on the message boards."
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:78
+msgid "Format: JPG or PNG. Size: at most 4 KB, 100x100 pixels"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:80
+msgid "Don't use an avatar"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:82
+msgid "Use a Globally Recognized Avatar provided by %1"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:84
+msgid "Use this uploaded avatar:"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:87
+msgid "Avatar preview"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:87
+msgid "This is how your avatar will look"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:96
+msgid "Signature for message board posts"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:99
+msgid ""
+"Check out %1various free services%2\n"
+"<br> providing dynamic 'signature images'\n"
+"<br> showing your latest credit info, project news, etc."
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:104
+msgid "characters remaining"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:105
+msgid "Attach signature by default"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:108
+msgid "Signature preview"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:109
+msgid "This is how your signature will look in the forums"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:127
+msgid "Message display"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:129
+msgid "What to display"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:130
+msgid "Hide avatar images"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:131
+msgid "Hide signatures"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:132
+msgid "Show images as links"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:133
+msgid "Open links in new window/tab"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:134
+msgid "Highlight special users"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:135
+msgid "Display this many messages per page"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:139
+msgid "How to sort"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:140
+msgid "Threads:"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:140
+msgid "Posts:"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:141
+msgid "Jump to first new post in thread automatically"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:142
+msgid "Don't move sticky posts to top"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:148
+msgid "Message filtering"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:164
+msgid "Filtered users"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:165
+msgid "Ignore message board posts and private messages from these users."
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:167
+msgid "User ID (For instance: 123456789)"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:168 ../user/pm.php:251
+msgid "Add user to filter"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:173
+msgid "Click here to update preferences"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:175
+#: ../user/edit_forum_preferences_form.php:177
+msgid "Reset"
+msgstr ""
+
+#: ../user/edit_forum_preferences_form.php:176
+msgid "Or click here to reset preferences to the defaults"
+msgstr ""
+
+#: ../user/edit_passwd_action.php:50
+msgid "Invalid account key"
+msgstr ""
+
+#: ../user/edit_passwd_action.php:55
+msgid "No account with that email address was found"
+msgstr ""
+
+#: ../user/edit_passwd_action.php:59
+msgid "Invalid password"
+msgstr ""
+
+#: ../user/edit_passwd_action.php:63 ../user/edit_passwd_form.php:25
+#: ../user/edit_passwd_form.php:55
+msgid "Change password"
+msgstr ""
+
+#: ../user/edit_passwd_action.php:67
+msgid "Your password has been changed."
+msgstr ""
+
+#: ../user/edit_passwd_action.php:69
+msgid ""
+"We can't update your password due to a database problem. Please try again "
+"later."
+msgstr ""
+
+#: ../user/edit_passwd_form.php:39
+msgid "You can identify yourself using either"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:41
+msgid "your email address and old password"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:42
+msgid "your account key"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:46
+msgid "Current password"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:48
+msgid "<b>OR</b>: Account key"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:49
+msgid "Get account key by email"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:53
+msgid "New password"
+msgstr ""
+
+#: ../user/edit_passwd_form.php:54
+msgid "New password, again"
+msgstr ""
+
+#: ../user/edit_user_info_action.php:31
+msgid "HTML tags are not allowed in your name."
+msgstr ""
+
+#: ../user/edit_user_info_action.php:34
+msgid "You must supply a name for your account."
+msgstr ""
+
+#: ../user/edit_user_info_action.php:58
+msgid "Couldn't update user info."
+msgstr ""
+
+#: ../user/edit_user_info_form.php:27
+msgid "Edit account information"
+msgstr ""
+
+#: ../user/edit_user_info_form.php:32
+msgid "Name %1 real name or nickname%2"
+msgstr ""
+
+#: ../user/edit_user_info_form.php:35
+msgid "URL %1 of your web page; optional%2"
+msgstr ""
+
+#: ../user/edit_user_info_form.php:43
+msgid "Postal (ZIP) code %1 Optional%2"
+msgstr ""
+
+#: ../user/edit_user_info_form.php:47
+msgid "Update info"
+msgstr ""
+
+#: ../user/explain_state.php:27
+msgid "Server states"
+msgstr ""
+
+#: ../user/explain_state.php:30
+msgid ""
+"A tasks's <b>server state</b> indicates whether the task has been sent to a "
+"computer, and if so whether the computer has finished it. Possible values "
+"are:"
+msgstr ""
+
+#: ../user/explain_state.php:35
+msgid ""
+"The task is not ready to send (for example, because its input files are "
+"unavailable)"
+msgstr ""
+
+#: ../user/explain_state.php:38
+msgid "The task is ready to send, but hasn't been sent yet."
+msgstr ""
+
+#: ../user/explain_state.php:40
+msgid "In Progress"
+msgstr ""
+
+#: ../user/explain_state.php:41
+msgid "The task has been sent; waiting for completion."
+msgstr ""
+
+#: ../user/explain_state.php:44
+msgid ""
+"The task has been sent to a computer and either it has timed out or the "
+"computer has reported its completion."
+msgstr ""
+
+#: ../user/explain_state.php:49
+msgid "Outcomes"
+msgstr ""
+
+#: ../user/explain_state.php:52
+msgid ""
+"A tasks's <b>outcome</b> is defined if its server state is <b>over</b>. "
+"Possible values are:"
+msgstr ""
+
+#: ../user/explain_state.php:57
+msgid ""
+"The task was sent to a computer, but the computer has not yet completed the "
+"work and reported the outcome."
+msgstr ""
+
+#: ../user/explain_state.php:60
+msgid "A computer completed and reported the task successfully."
+msgstr ""
+
+#: ../user/explain_state.php:63
+msgid ""
+"The server wasn't able to send the task to a computer (perhaps because its "
+"resource requirements were too large)"
+msgstr ""
+
+#: ../user/explain_state.php:65
+msgid "Client error"
+msgstr ""
+
+#: ../user/explain_state.php:66
+msgid "The task was sent to a computer and an error occurred."
+msgstr ""
+
+#: ../user/explain_state.php:69
+msgid ""
+"The task was sent to a computer and no reply was received within the time "
+"limit."
+msgstr ""
+
+#: ../user/explain_state.php:72
+msgid ""
+"The task wasn't sent to a computer because enough other tasks were completed "
+"for this workunit."
+msgstr ""
+
+#: ../user/explain_state.php:75
+msgid ""
+"The task was reported but could not be validated, typically because the "
+"output files were lost on the server."
+msgstr ""
+
+#: ../user/explain_state.php:80
+msgid "Client states"
+msgstr ""
+
+#: ../user/explain_state.php:81
+msgid ""
+"A result's <b>client state</b> indicates the stage of processing at which an "
+"error occurred."
+msgstr ""
+
+#: ../user/explain_state.php:86
+msgid "The computer has not yet completed the task."
+msgstr ""
+
+#: ../user/explain_state.php:89
+msgid "The computer completed the task successfully."
+msgstr ""
+
+#: ../user/explain_state.php:92
+msgid "The computer couldn't download the application or input files."
+msgstr ""
+
+#: ../user/explain_state.php:95
+msgid "An error occurred during computation."
+msgstr ""
+
+#: ../user/explain_state.php:98
+msgid "The computer couldn't upload the output files."
+msgstr ""
+
+#: ../user/explain_state.php:103
+msgid "Time reported and deadline"
+msgstr ""
+
+#: ../user/explain_state.php:106
+msgid ""
+"A task's <b>Time reported or deadline</b> field depends on whether the task "
+"has been reported yet:"
+msgstr ""
+
+#: ../user/explain_state.php:110
+msgid "Already reported"
+msgstr ""
+
+#: ../user/explain_state.php:110
+msgid "The date/time it was reported"
+msgstr ""
+
+#: ../user/explain_state.php:111
+msgid "Not reported yet, deadline in the future"
+msgstr ""
+
+#: ../user/explain_state.php:112
+msgid "Deadline, shown in green."
+msgstr ""
+
+#: ../user/explain_state.php:114
+msgid "Not reported yet, deadline in the past"
+msgstr ""
+
+#: ../user/explain_state.php:115
+msgid "Deadline, shown in red."
+msgstr ""
+
+#: ../user/explain_state.php:120
+msgid "Unknown field"
+msgstr ""
+
+#: ../user/ffmail_action.php:47
+msgid "Email preview"
+msgstr ""
+
+#: ../user/ffmail_action.php:48
+msgid "Your email will appear as follows:"
+msgstr ""
+
+#: ../user/ffmail_action.php:57
+msgid "Send email"
+msgstr ""
+
+#: ../user/ffmail_action.php:59
+msgid "Use your browser's back button to return to message form"
+msgstr ""
+
+#: ../user/ffmail_action.php:63
+msgid "Sending emails"
+msgstr ""
+
+#: ../user/ffmail_action.php:84
+msgid "email sent successfully to %1"
+msgstr ""
+
+#: ../user/ffmail_action.php:86
+msgid "failed to send email to %1: %2"
+msgstr ""
+
+#: ../user/ffmail_action.php:92
+msgid "Thanks for telling your friends about %1"
+msgstr ""
+
+#: ../user/ffmail_action.php:94
+msgid ""
+"You forgot to enter your friends' names and/or email addresses; Please %"
+"1return to the form%2 and enter them."
+msgstr ""
+
+#: ../user/ffmail_form.php:30
+msgid ""
+"This project hasn't created an email message - please notify its "
+"administrators"
+msgstr ""
+
+#: ../user/ffmail_form.php:33
+msgid "Tell your friends about %1"
+msgstr ""
+
+#: ../user/ffmail_form.php:37
+msgid "Help us by telling your friends, family and coworkers about %1"
+msgstr ""
+
+#: ../user/ffmail_form.php:39
+msgid ""
+"Fill in this form with the names and email addresses of people you think "
+"might be interested in %1. We'll send them an email in your name, and you "
+"can add your own message if you like."
+msgstr ""
+
+#: ../user/ffmail_form.php:42
+msgid "Your name:"
+msgstr ""
+
+#: ../user/ffmail_form.php:42
+msgid "Your email address:"
+msgstr ""
+
+#: ../user/ffmail_form.php:48
+msgid "Friend's name:"
+msgstr ""
+
+#: ../user/ffmail_form.php:48
+msgid "Friend's email address:"
+msgstr ""
+
+#: ../user/ffmail_form.php:56
+msgid "Additional message (optional)"
+msgstr ""
+
+#: ../user/ffmail_form.php:59
+msgid "Send"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:35
+#: ../user/forum_banishment_vote_action.php:33
+msgid "You are not authorized to banish users."
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:41 ../user/forum_banishment_vote.php:46
+msgid "Banishment Vote"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:50
+msgid "No user with this ID found."
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:54 ../user/forum_moderate_post.php:76
+msgid "User is already banished"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:59 ../user/forum_moderate_post.php:79
+msgid ""
+"Are you sure you want to banish %1?<br/>This will prevent %1 from posting "
+"for chosen time period.<br/>It should be done only if %1 has consistently "
+"exhibited trollish behavior."
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:61
+msgid ""
+"Select the reason category, optionally write a longer description of why the "
+"user should be banished."
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:62 ../user/forum_moderate_thread.php:50
+msgid "Category"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:64
+#: ../user/forum_banishment_vote_action.php:57
+#: ../user/forum_moderate_post.php:55 ../user/forum_moderate_thread.php:52
+msgid "Obscene"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:65
+#: ../user/forum_banishment_vote_action.php:59
+#: ../user/forum_moderate_post.php:56 ../user/forum_moderate_thread.php:53
+msgid "Flame/Hate mail"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:66
+#: ../user/forum_banishment_vote_action.php:61
+#: ../user/forum_moderate_post.php:59
+msgid "User Request"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:67
+#: ../user/forum_banishment_vote_action.php:63
+#: ../user/forum_moderate_post.php:60 ../user/forum_moderate_thread.php:55
+msgid "Other"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:69 ../user/forum_moderate_post.php:53
+#: ../user/forum_moderate_thread.php:85
+msgid "Reason"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:69 ../user/forum_moderate_thread.php:85
+msgid "Mailed if nonempty"
+msgstr ""
+
+#: ../user/forum_banishment_vote.php:74
+msgid "Proceed with vote"
+msgstr ""
+
+#: ../user/forum_banishment_vote_action.php:39
+#: ../user/forum_moderate_post_action.php:63
+msgid "You must specify an action..."
+msgstr ""
+
+#: ../user/forum_edit.php:41
+msgid ""
+"You can no longer edit this post.<br/>Posts can only be edited at most %1 "
+"minutes after they have been created."
+msgstr ""
+
+#: ../user/forum_edit.php:47
+msgid "You are not authorized to edit this post."
+msgstr ""
+
+#: ../user/forum_edit.php:86 ../user/forum_search.php:72
+msgid "Forum"
+msgstr ""
+
+#: ../user/forum_edit.php:110
+msgid "Edit your message"
+msgstr ""
+
+#: ../user/forum_edit.php:115 ../user/forum_edit.php:120
+#: ../user/forum_post.php:109 ../user/forum_post.php:111
+#: ../user/team_forum.php:69
+msgid "Title"
+msgstr ""
+
+#: ../user/forum_edit.php:144 ../user/forum_post.php:129
+msgid "Add my signature to this post"
+msgstr ""
+
+#: ../user/forum_forum.php:41
+msgid "Not visible to you"
+msgstr ""
+
+#: ../user/forum_forum.php:80
+msgid "Team message board for %1"
+msgstr ""
+
+#: ../user/forum_forum.php:96
+msgid "New thread"
+msgstr ""
+
+#: ../user/forum_forum.php:96
+msgid "Add a new thread to this forum"
+msgstr ""
+
+#: ../user/forum_forum.php:116
+msgid "This message board is available as an %1RSS feed%2"
+msgstr ""
+
+#: ../user/forum_forum.php:174
+msgid "This thread is hidden"
+msgstr ""
+
+#: ../user/forum_forum.php:178
+msgid "This thread is sticky and locked, and you haven't read it yet"
+msgstr ""
+
+#: ../user/forum_forum.php:178
+msgid "sticky/locked/unread"
+msgstr ""
+
+#: ../user/forum_forum.php:180
+msgid "This thread is sticky and you haven't read it yet"
+msgstr ""
+
+#: ../user/forum_forum.php:180
+msgid "sticky/unread"
+msgstr ""
+
+#: ../user/forum_forum.php:184
+msgid "You haven't read this thread yet, and it's locked"
+msgstr ""
+
+#: ../user/forum_forum.php:184
+msgid "unread/locked"
+msgstr ""
+
+#: ../user/forum_forum.php:186
+msgid "You haven't read this thread yet"
+msgstr ""
+
+#: ../user/forum_forum.php:192
+msgid "This thread is sticky and locked"
+msgstr ""
+
+#: ../user/forum_forum.php:192
+msgid "sticky/locked"
+msgstr ""
+
+#: ../user/forum_forum.php:194
+msgid "This thread is sticky"
+msgstr ""
+
+#: ../user/forum_forum.php:194
+msgid "sticky"
+msgstr ""
+
+#: ../user/forum_forum.php:198
+msgid "This thread is locked"
+msgstr ""
+
+#: ../user/forum_forum.php:198
+msgid "locked"
+msgstr ""
+
+#: ../user/forum_forum.php:200
+msgid "You read this thread"
+msgstr ""
+
+#: ../user/forum_forum.php:200
+msgid "read"
+msgstr ""
+
+#: ../user/forum_help_desk.php:27
+msgid "Questions and answers"
+msgstr ""
+
+#: ../user/forum_help_desk.php:30
+msgid ""
+"Talk live via Skype with a volunteer, in any of several languages. Go to %"
+"1BOINC Online Help%2."
+msgstr ""
+
+#: ../user/forum_help_desk.php:44 ../user/forum_index.php:92
+msgid "Topic"
+msgstr ""
+
+#: ../user/forum_help_desk.php:45
+msgid "Questions"
+msgstr ""
+
+#: ../user/forum_index.php:53 ../user/team_forum.php:68
+msgid "Discussion among members of %1"
+msgstr ""
+
+#: ../user/forum_index.php:69
+msgid "%1 Message boards"
+msgstr ""
+
+#: ../user/forum_index.php:78
+msgid ""
+"If you have a question or problem, please use the %1Questions & Answers%2 "
+"section of the message boards."
+msgstr ""
+
+#: ../user/forum_index.php:123
+msgid "Subscribed threads"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:43
+msgid "Moderate post"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:52
+msgid "Hide post"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:57 ../user/forum_moderate_thread.php:54
+msgid "Commercial spam"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:58
+msgid "Doublepost"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:63
+msgid "Move post"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:65
+msgid "Destination thread ID:"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:78
+msgid "Banish user"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:80
+msgid "Ban duration"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:81
+msgid "4 hours"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:82 ../user/forum_search.php:45
+msgid "1 day"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:83
+msgid "1 week"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:84
+msgid "2 weeks"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:85
+msgid "1 month"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:86
+msgid "Forever"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:96
+msgid "Optional explanation %1 This is included in email to user.%2"
+msgstr ""
+
+#: ../user/forum_moderate_post.php:101 ../user/forum_moderate_thread.php:91
+#: ../user/forum_post.php:130 ../user/forum_report_post.php:85
+#: ../user/forum_rss.php:55 ../user/friend.php:81 ../user/get_passwd.php:41
+#: ../user/get_passwd.php:75
+msgid "OK"
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:57
+msgid "You are not authorized to moderate this post."
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:85
+msgid "Can't move to different category type"
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:89
+msgid "Can't move to different category"
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:110
+msgid "Not authorized to banish users"
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:126
+msgid "Banishment"
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:128
+msgid "User %1 has been banished."
+msgstr ""
+
+#: ../user/forum_moderate_post_action.php:131
+msgid "Action failed: possible database problem"
+msgstr ""
+
+#: ../user/forum_moderate_thread.php:33
+msgid "not authorized"
+msgstr ""
+
+#: ../user/forum_moderate_thread.php:36
+msgid "Moderate thread '%1'"
+msgstr ""
+
+#: ../user/forum_moderate_thread.php:48
+msgid ""
+"Select the reason category, or write a longer description of why you're "
+"hiding or locking the thread; then press OK."
+msgstr ""
+
+#: ../user/forum_moderate_thread.php:72
+msgid "Current forum"
+msgstr ""
+
+#: ../user/forum_moderate_thread.php:73
+msgid "Destination forum"
+msgstr ""
+
+#: ../user/forum_moderate_thread.php:77
+msgid "New title:"
+msgstr ""
+
+#: ../user/forum_post.php:40
+msgid ""
+"Only project admins may create a thread here. However, you may reply to "
+"existing threads."
+msgstr ""
+
+#: ../user/forum_post.php:60
+msgid ""
+"Your message was flagged as spam by the Akismet anti-spam system. Please "
+"modify your text and try again."
+msgstr ""
+
+#: ../user/forum_post.php:70
+msgid "Create new thread"
+msgstr ""
+
+#: ../user/forum_post.php:100
+msgid "Create a new thread"
+msgstr ""
+
+#: ../user/forum_post.php:105
+msgid "Remember to add a title"
+msgstr ""
+
+#: ../user/forum_post.php:127
+msgid "Show this item as a Notice in the BOINC Manager"
+msgstr ""
+
+#: ../user/forum_post.php:127
+msgid "Do so only for items likely to be of interest to all volunteers."
+msgstr ""
+
+#: ../user/forum_rate.php:26
+msgid "Rating offline"
+msgstr ""
+
+#: ../user/forum_rate.php:27
+msgid "This function is turned off by the project"
+msgstr ""
+
+#: ../user/forum_rate.php:58
+msgid "You need more average or total credit to rate a post."
+msgstr ""
+
+#: ../user/forum_rate.php:62
+msgid "You have already rated this post."
+msgstr ""
+
+#: ../user/forum_rate.php:62 ../user/forum_rate.php:78
+#: ../user/forum_rate.php:83 ../user/forum_report_post.php:69
+#: ../user/forum_report_post.php:94 ../user/forum_subscribe.php:54
+#: ../user/forum_subscribe.php:69 ../user/forum_thread_status.php:51
+msgid "Return to thread"
+msgstr ""
+
+#: ../user/forum_rate.php:72
+msgid "Input Recorded"
+msgstr ""
+
+#: ../user/forum_rate.php:73
+msgid "Your input has been recorded. Thanks for your help."
+msgstr ""
+
+#: ../user/forum_rate.php:75
+msgid "Vote Registered"
+msgstr ""
+
+#: ../user/forum_rate.php:76
+msgid "Your rating has been recorded. Thanks for your input."
+msgstr ""
+
+#: ../user/forum_rate.php:80
+msgid "Vote Submission Problem"
+msgstr ""
+
+#: ../user/forum_reply.php:73
+msgid ""
+"Your post has been flagged as spam by the Akismet anti-spam system. Please "
+"modify your text and try again."
+msgstr ""
+
+#: ../user/forum_reply.php:88 ../user/forum_thread.php:158
+#: ../user/forum_thread.php:274
+msgid "Post to thread"
+msgstr ""
+
+#: ../user/forum_reply.php:137
+msgid "Message:"
+msgstr ""
+
+#: ../user/forum_reply.php:140
+msgid "reply to %1Message ID%2:"
+msgstr ""
+
+#: ../user/forum_reply.php:166
+msgid "Post reply"
+msgstr ""
+
+#: ../user/forum_reply.php:169
+msgid "Add my signature to this reply"
+msgstr ""
+
+#: ../user/forum_report_post.php:45
+msgid "You need more average or total credit to report a post."
+msgstr ""
+
+#: ../user/forum_report_post.php:65
+msgid "Report Registered"
+msgstr ""
+
+#: ../user/forum_report_post.php:66
+msgid "Your report has been recorded. Thanks for your input."
+msgstr ""
+
+#: ../user/forum_report_post.php:67
+msgid ""
+"A moderator will now look at your report and decide what will happen - this "
+"may take a little while, so please be patient"
+msgstr ""
+
+#: ../user/forum_report_post.php:71
+msgid "Report a forum post"
+msgstr ""
+
+#: ../user/forum_report_post.php:73
+msgid ""
+"Before reporting this post, consider using the +/- rating system instead. If "
+"enough users rate a post negatively it will eventually be hidden.<br />You "
+"can find the rating system at the bottom of the post."
+msgstr ""
+
+#: ../user/forum_report_post.php:80
+msgid "Report post"
+msgstr ""
+
+#: ../user/forum_report_post.php:81
+msgid ""
+"Why do you find the post offensive: %1Please include enough information so "
+"that a person that\n"
+"has not yet read the thread will quickly be able to identify the issue.%2"
+msgstr ""
+
+#: ../user/forum_report_post.php:90
+msgid "Report not registered"
+msgstr ""
+
+#: ../user/forum_report_post.php:91
+msgid "Your report could not be recorded. Please wait a while and try again."
+msgstr ""
+
+#: ../user/forum_report_post.php:92
+msgid ""
+"If this is not a temporary error, please report it to the project developers."
+msgstr ""
+
+#: ../user/forum_rss.php:41
+msgid "%1 RSS feed"
+msgstr ""
+
+#: ../user/forum_rss.php:42
+msgid "This message board is available as an RSS feed."
+msgstr ""
+
+#: ../user/forum_rss.php:43
+msgid "Options:"
+msgstr ""
+
+#: ../user/forum_rss.php:47
+msgid "Include only posts by user ID %1 (default: all users)."
+msgstr ""
+
+#: ../user/forum_rss.php:49
+msgid "Include only posts from the last %1 days (default: 30)."
+msgstr ""
+
+#: ../user/forum_rss.php:51
+msgid "Truncate posts: %1 (Include only first 265 characters of each post)"
+msgstr ""
+
+#: ../user/forum_rss.php:53
+msgid "Threads only: %1 (Include only the first post of every thread)"
+msgstr ""
+
+#: ../user/forum_search.php:27
+msgid "Forum search"
+msgstr ""
+
+#: ../user/forum_search.php:31
+msgid "Search query"
+msgstr ""
+
+#: ../user/forum_search.php:32
+msgid "Search for keywords:"
+msgstr ""
+
+#: ../user/forum_search.php:33
+msgid "Posts that contain all the specified words will be displayed"
+msgstr ""
+
+#: ../user/forum_search.php:35
+msgid "For example: \"screensaver freeze\""
+msgstr ""
+
+#: ../user/forum_search.php:36
+msgid "Search for author ID:"
+msgstr ""
+
+#: ../user/forum_search.php:37
+msgid "Only posts by this author will be displayed"
+msgstr ""
+
+#: ../user/forum_search.php:39
+msgid "For example: \"43214\""
+msgstr ""
+
+#: ../user/forum_search.php:41
+msgid "Search options"
+msgstr ""
+
+#: ../user/forum_search.php:42
+msgid "Search limits"
+msgstr ""
+
+#: ../user/forum_search.php:43
+msgid "Search at most this many days back in time"
+msgstr ""
+
+#: ../user/forum_search.php:50 ../user/forum_search.php:51
+msgid "%1 months"
+msgstr ""
+
+#: ../user/forum_search.php:52
+msgid "1 year"
+msgstr ""
+
+#: ../user/forum_search.php:73
+msgid "Only display posts from this forum"
+msgstr ""
+
+#: ../user/forum_search.php:84
+msgid "Sort by"
+msgstr ""
+
+#: ../user/forum_search.php:88
+msgid "Start the search"
+msgstr ""
+
+#: ../user/forum_search_action.php:141
+msgid "Forum search results"
+msgstr ""
+
+#: ../user/forum_search_action.php:174
+msgid "Thread titles matching your query:"
+msgstr ""
+
+#: ../user/forum_search_action.php:194
+msgid "Messages matching your query:"
+msgstr ""
+
+#: ../user/forum_search_action.php:217
+msgid ""
+"Sorry, couldn't find anything matching your search query. You can try to "
+"broaden your search by using less words (or less specific words)."
+msgstr ""
+
+#: ../user/forum_search_action.php:219
+msgid "You can also %1try the same search on Google.%2"
+msgstr ""
+
+#: ../user/forum_search_action.php:224
+msgid "Perform another search"
+msgstr ""
+
+#: ../user/forum_subscribe.php:46
+msgid "Subscription successful"
+msgstr ""
+
+#: ../user/forum_subscribe.php:49
+msgid ""
+"You are now subscribed to %1. You will be notified whenever there is a new "
+"post."
+msgstr ""
+
+#: ../user/forum_subscribe.php:51
+msgid "Subscription failed"
+msgstr ""
+
+#: ../user/forum_subscribe.php:52
+msgid ""
+"We are currently unable to subscribe you to %1. Please try again later.."
+msgstr ""
+
+#: ../user/forum_subscribe.php:61
+msgid "Unsubscription successful"
+msgstr ""
+
+#: ../user/forum_subscribe.php:64
+msgid ""
+"You are no longer subscribed to %1. You will no longer receive notifications "
+"for this thread."
+msgstr ""
+
+#: ../user/forum_subscribe.php:66
+msgid "Unsubscription failed"
+msgstr ""
+
+#: ../user/forum_subscribe.php:67
+msgid ""
+"We are currently unable to unsubscribe you from %1. Please try again later.."
+msgstr ""
+
+#: ../user/forum_subscribe.php:74
+msgid "Unknown subscription action"
+msgstr ""
+
+#: ../user/forum_thread.php:61
+msgid "This forum is not visible to you."
+msgstr ""
+
+#: ../user/forum_thread.php:69
+msgid "This thread has been hidden by moderators."
+msgstr ""
+
+#: ../user/forum_thread.php:128
+msgid "My question was answered"
+msgstr ""
+
+#: ../user/forum_thread.php:129
+msgid "Click here if your question has been adequately answered"
+msgstr ""
+
+#: ../user/forum_thread.php:137
+msgid "I've also got this question"
+msgstr ""
+
+#: ../user/forum_thread.php:159 ../user/forum_thread.php:275
+msgid "Add a new message to this thread"
+msgstr ""
+
+#: ../user/forum_thread.php:171
+msgid "Unsubscribe"
+msgstr ""
+
+#: ../user/forum_thread.php:172
+msgid "You are subscribed to this thread. Click here to unsubscribe."
+msgstr ""
+
+#: ../user/forum_thread.php:178
+msgid "Subscribe"
+msgstr ""
+
+#: ../user/forum_thread.php:179
+msgid "Click to get email when there are new posts in this thread"
+msgstr ""
+
+#: ../user/forum_thread.php:190
+msgid "Unhide this thread"
+msgstr ""
+
+#: ../user/forum_thread.php:196
+msgid "Hide this thread"
+msgstr ""
+
+#: ../user/forum_thread.php:202
+msgid "Make unsticky"
+msgstr ""
+
+#: ../user/forum_thread.php:203
+msgid "Make this thread not sticky"
+msgstr ""
+
+#: ../user/forum_thread.php:208
+msgid "Make sticky"
+msgstr ""
+
+#: ../user/forum_thread.php:209
+msgid "Make this thread sticky"
+msgstr ""
+
+#: ../user/forum_thread.php:215
+msgid "Unlock"
+msgstr ""
+
+#: ../user/forum_thread.php:216
+msgid "Unlock this thread"
+msgstr ""
+
+#: ../user/forum_thread.php:221
+msgid "Lock"
+msgstr ""
+
+#: ../user/forum_thread.php:222
+msgid "Lock this thread"
+msgstr ""
+
+#: ../user/forum_thread.php:229
+msgid "Move this thread to a different forum"
+msgstr ""
+
+#: ../user/forum_thread.php:234
+msgid "Edit title"
+msgstr ""
+
+#: ../user/forum_thread.php:235
+msgid "Edit thread title"
+msgstr ""
+
+#: ../user/forum_thread.php:245
+msgid "Export as Notice"
+msgstr ""
+
+#: ../user/forum_thread.php:251
+msgid "Don't export"
+msgstr ""
+
+#: ../user/forum_thread.php:252
+msgid "Don't export this news item as a Notice"
+msgstr ""
+
+#: ../user/forum_thread.php:260 ../user/forum_thread.php:262
+msgid "Sort"
+msgstr ""
+
+#: ../user/forum_thread_status.php:49
+msgid "Thread status updated"
+msgstr ""
+
+#: ../user/forum_thread_status.php:50
+msgid "The status has been updated."
+msgstr ""
+
+#: ../user/forum_user_posts.php:73
+msgid "Posts by %1"
+msgstr ""
+
+#: ../user/friend.php:33
+msgid "Already friends"
+msgstr ""
+
+#: ../user/friend.php:39
+msgid "You requested friendship with %1 on %2."
+msgstr ""
+
+#: ../user/friend.php:41
+msgid "This request is still pending confirmation."
+msgstr ""
+
+#: ../user/friend.php:52
+msgid "%1 is not accepting friendship requests from you"
+msgstr ""
+
+#: ../user/friend.php:61
+msgid "You can't be friends with yourself"
+msgstr ""
+
+#: ../user/friend.php:69
+msgid "Add friend"
+msgstr ""
+
+#: ../user/friend.php:74
+msgid ""
+"You have asked to add %1 as a friend. We will notify %1 and will ask him/her "
+"to confirm that you are friends."
+msgstr ""
+
+#: ../user/friend.php:77
+msgid "Add an optional message here:"
+msgstr ""
+
+#: ../user/friend.php:115
+msgid "Friend request sent"
+msgstr ""
+
+#: ../user/friend.php:116
+msgid "We have notified %1 of your request."
+msgstr ""
+
+#: ../user/friend.php:126
+msgid "Please log in as %1"
+msgstr ""
+
+#: ../user/friend.php:127
+msgid "You must log in as %1 to view this friend request"
+msgstr ""
+
+#: ../user/friend.php:138
+msgid "Friend request"
+msgstr ""
+
+#: ../user/friend.php:141
+msgid "%1 has requested friendship with you."
+msgstr ""
+
+#: ../user/friend.php:143
+msgid "%1 says: %2"
+msgstr ""
+
+#: ../user/friend.php:146
+msgid "Accept friendship"
+msgstr ""
+
+#: ../user/friend.php:146
+msgid "Click accept if %1 is in fact a friend"
+msgstr ""
+
+#: ../user/friend.php:147
+msgid "Decline"
+msgstr ""
+
+#: ../user/friend.php:147
+msgid "Click decline if %1 is not a friend"
+msgstr ""
+
+#: ../user/friend.php:186
+msgid "Friendship confirmed"
+msgstr ""
+
+#: ../user/friend.php:187
+msgid "Your friendship with %1 has been confirmed."
+msgstr ""
+
+#: ../user/friend.php:205
+msgid "Friendship declined"
+msgstr ""
+
+#: ../user/friend.php:206
+msgid "You have declined friendship with %1"
+msgstr ""
+
+#: ../user/friend.php:221
+msgid "Notification not found"
+msgstr ""
+
+#: ../user/friend.php:223
+msgid "Friend confirmed"
+msgstr ""
+
+#: ../user/friend.php:224
+msgid "You are now friends with %1."
+msgstr ""
+
+#: ../user/friend.php:232
+msgid "Cancel friendship?"
+msgstr ""
+
+#: ../user/friend.php:234
+msgid "Are you sure you want to cancel your friendship with %1?"
+msgstr ""
+
+#: ../user/friend.php:239
+msgid "Stay friends"
+msgstr ""
+
+#: ../user/friend.php:249
+msgid "Friendship cancelled"
+msgstr ""
+
+#: ../user/friend.php:250
+msgid "Your friendship with %1 has been cancelled."
+msgstr ""
+
+#: ../user/get_passwd.php:25
+msgid "Forgot your account info?"
+msgstr ""
+
+#: ../user/get_passwd.php:28
+msgid ""
+"1) If you know your account's email address, and you can receive email there:"
+msgstr ""
+
+#: ../user/get_passwd.php:29
+msgid ""
+"Enter the email address below, and click OK. You will be sent email "
+"instructions for resetting your password."
+msgstr ""
+
+#: ../user/get_passwd.php:46
+msgid ""
+"2) If you forgot your account's email address, or you can't receive email "
+"there:"
+msgstr ""
+
+#: ../user/get_passwd.php:47
+msgid ""
+"If you have run BOINC under this account, you can still access it. Here's "
+"how:"
+msgstr ""
+
+#: ../user/get_passwd.php:50
+msgid ""
+"Go to the BOINC data directory on your computer (its location is written to "
+"the Event Log at startup)."
+msgstr ""
+
+#: ../user/get_passwd.php:51
+msgid "Find your account file for this project; it will be named <b>%1</b>."
+msgstr ""
+
+#: ../user/get_passwd.php:52
+msgid "Open the file in a text editor like Notepad. You'll see something like"
+msgstr ""
+
+#: ../user/get_passwd.php:62
+msgid "Select and Copy the string between %1 and %2 (%3 in the above example)."
+msgstr ""
+
+#: ../user/get_passwd.php:64
+msgid "Paste the string into the field below, and click OK."
+msgstr ""
+
+#: ../user/get_passwd.php:65
+msgid ""
+"You will now be logged in to your account; update the email and password of "
+"your account."
+msgstr ""
+
+#: ../user/get_passwd.php:71
+msgid "Log in with authenticator"
+msgstr ""
+
+#: ../user/gpu_list.php:126 ../user/gpu_list.php:152
+msgid "No GPU tasks reported"
+msgstr ""
+
+#: ../user/gpu_list.php:183
+msgid ""
+"The following lists show the most productive GPU models on different "
+"platforms. Relative speeds are shown in parentheses."
+msgstr ""
+
+#: ../user/home.php:42
+msgid "Welcome to %1"
+msgstr ""
+
+#: ../user/home.php:43
+msgid "View and edit your account preferences using the links below."
+msgstr ""
+
+#: ../user/home.php:46
+msgid "If you have not already done so, %1download BOINC client software%2."
+msgstr ""
+
+#: ../user/host_app_versions.php:37
+msgid "Anonymous platform, missing app"
+msgstr ""
+
+#: ../user/host_app_versions.php:40
+msgid "anonymous platform"
+msgstr ""
+
+#: ../user/host_app_versions.php:43
+msgid "Missing app version"
+msgstr ""
+
+#: ../user/host_app_versions.php:45
+msgid "Missing app"
+msgstr ""
+
+#: ../user/host_app_versions.php:47
+msgid "Missing platform"
+msgstr ""
+
+#: ../user/host_app_versions.php:56
+msgid "Number of tasks completed"
+msgstr ""
+
+#: ../user/host_app_versions.php:57
+msgid "Max tasks per day"
+msgstr ""
+
+#: ../user/host_app_versions.php:58
+msgid "Number of tasks today"
+msgstr ""
+
+#: ../user/host_app_versions.php:59
+msgid "Consecutive valid tasks"
+msgstr ""
+
+#: ../user/host_app_versions.php:63
+msgid "Average processing rate"
+msgstr ""
+
+#: ../user/host_app_versions.php:72
+msgid "Application details for host %1"
+msgstr ""
+
+#: ../user/host_delete.php:31
+msgid "We have no record of that computer."
+msgstr ""
+
+#: ../user/host_delete.php:38
+msgid ""
+"You can not delete our record of this computer because our database still "
+"contains work for it. You must wait a few days until the work for this "
+"computer has been deleted from the project database."
+msgstr ""
+
+#: ../user/host_delete.php:40
+msgid "Delete record of computer"
+msgstr ""
+
+#: ../user/host_delete.php:41
+msgid "Record deleted."
+msgstr ""
+
+#: ../user/host_delete.php:42 ../user/host_edit_action.php:65
+msgid "Return to list of your computers"
+msgstr ""
+
+#: ../user/host_edit_action.php:39
+msgid "Merge computer records"
+msgstr ""
+
+#: ../user/host_edit_form.php:35
+msgid "Merge computers"
+msgstr ""
+
+#: ../user/host_edit_form.php:38
+msgid ""
+"Sometimes BOINC assigns separate identities to the same computer by mistake. "
+"You can correct this by merging old identities with the newest one."
+msgstr ""
+
+#: ../user/host_edit_form.php:56
+msgid "No hosts are eligible for merging with this one."
+msgstr ""
+
+#: ../user/host_edit_form.php:58 ../user/host_edit_form.php:114
+msgid "Show details"
+msgstr ""
+
+#: ../user/host_edit_form.php:66
+msgid ""
+"Check the computers that are the same as %1 (created %2, computer ID %3):"
+msgstr ""
+
+#: ../user/host_edit_form.php:70 ../user/workunit.php:39
+msgid "name"
+msgstr ""
+
+#: ../user/host_edit_form.php:70 ../user/workunit.php:41
+msgid "created"
+msgstr ""
+
+#: ../user/host_edit_form.php:70
+msgid "computer ID"
+msgstr ""
+
+#: ../user/host_edit_form.php:77
+msgid "no hostname"
+msgstr ""
+
+#: ../user/host_edit_form.php:109
+msgid "Merge hosts"
+msgstr ""
+
+#: ../user/host_update_credit.php:28
+msgid "Updating computer credit"
+msgstr ""
+
+#: ../user/host_venue_action.php:41
+msgid "Host venue updated"
+msgstr ""
+
+#: ../user/host_venue_action.php:43
+msgid "none"
+msgstr ""
+
+#: ../user/host_venue_action.php:46
+msgid "The venue of this host has been set to %1."
+msgstr ""
+
+#: ../user/host_venue_action.php:48
+msgid ""
+"This change will take effect the next time the host communicates with this "
+"project."
+msgstr ""
+
+#: ../user/host_venue_action.php:50
+msgid "Return to host page"
+msgstr ""
+
+#: ../user/hosts_user.php:53
+msgid "Computers belonging to %1"
+msgstr ""
+
+#: ../user/hosts_user.php:55
+msgid "Computers hidden"
+msgstr ""
+
+#: ../user/hosts_user.php:56
+msgid ""
+"This user has chosen not to show information about his or her computers."
+msgstr ""
+
+#: ../user/hosts_user.php:64
+msgid "Your computers"
+msgstr ""
+
+#: ../user/html.php:23
+msgid "Allowed HTML tags"
+msgstr ""
+
+#: ../user/html.php:25
+msgid "The following HTML tags are allowed in team descriptions:"
+msgstr ""
+
+#: ../user/html.php:27
+msgid "bold"
+msgstr ""
+
+#: ../user/html.php:28
+msgid "italics"
+msgstr ""
+
+#: ../user/html.php:29
+msgid "hyperlink"
+msgstr ""
+
+#: ../user/html.php:30
+msgid "paragraph"
+msgstr ""
+
+#: ../user/html.php:31
+msgid "break"
+msgstr ""
+
+#: ../user/html.php:32
+msgid "preformatted"
+msgstr ""
+
+#: ../user/html.php:33
+msgid ""
+"image; height cannot exceed 450 pixels. Please do not link to images without "
+"permission of the web site where the image is hosted."
+msgstr ""
+
+#: ../user/html.php:35
+msgid "You can also use ampersand notation for special characters."
+msgstr ""
+
+#: ../user/info.php:35
+msgid "Run %1 only on authorized computers"
+msgstr ""
+
+#: ../user/info.php:36
+msgid ""
+"Run %1 only on computers that you own, or for which you have obtained the "
+"owner's permission. Some companies and schools have policies that prohibit "
+"using their computers for projects such as %1."
+msgstr ""
+
+#: ../user/info.php:38
+msgid "How %1 will use your computer"
+msgstr ""
+
+#: ../user/info.php:39
+msgid ""
+"When you run %1 on your computer, it will use part of the computer's CPU "
+"power, disk space, and network bandwidth. You can control how much of your "
+"resources are used by %1, and when it uses them."
+msgstr ""
+
+#: ../user/info.php:40
+msgid ""
+"The work done by your computer contributes to the goals of %1, as described "
+"on its web site. The application programs may change from time to time."
+msgstr ""
+
+#: ../user/info.php:42
+msgid "Privacy policy"
+msgstr ""
+
+#: ../user/info.php:43
+msgid ""
+"Your account on %1 is identified by a name that you choose. This name may be "
+"shown on the %1 web site, along with a summary of the work your computer has "
+"done for %1. If you want to be anonymous, choose a name that doesn't reveal "
+"your identity."
+msgstr ""
+
+#: ../user/info.php:44
+msgid ""
+"If you participate in %1, information about your computer (such as its "
+"processor type, amount of memory, etc.) will be recorded by %1 and used to "
+"decide what type of work to assign to your computer. This information will "
+"also be shown on %1's web site. Nothing that reveals your computer's "
+"location (e.g. its domain name or network address) will be shown."
+msgstr ""
+
+#: ../user/info.php:45
+msgid ""
+"To participate in %1, you must give an address where you receive email. This "
+"address will not be shown on the %1 web site or shared with organizations. %"
+"1 may send you periodic newsletters; however, you can opt out at any time."
+msgstr ""
+
+#: ../user/info.php:46
+msgid ""
+"Private messages sent on the %1 web site are visible only to the sender and "
+"recipient. %1 does not examine or police the content of private messages. "
+"If you receive unwanted private messages from another %1 user, you may add "
+"them to your %2message filter%3. This will prevent you from seeing any "
+"public or private messages from that user."
+msgstr ""
+
+#: ../user/info.php:47
+msgid ""
+"If you use our web site forums you must follow the %2posting guidelines%3. "
+"Messages posted to the %1 forums are visible to everyone, including non-"
+"members. By posting to the forums, you are granting irrevocable license for "
+"anyone to view and copy your posts."
+msgstr ""
+
+#: ../user/info.php:48
+msgid "Is it safe to run %1?"
+msgstr ""
+
+#: ../user/info.php:49
+msgid ""
+"Any time you download a program through the Internet you are taking a "
+"chance: the program might have dangerous errors, or the download server "
+"might have been hacked. %1 has made efforts to minimize these risks. We have "
+"tested our applications carefully. Our servers are behind a firewall and are "
+"configured for high security. To ensure the integrity of program downloads, "
+"all executable files are digitally signed on a secure computer not connected "
+"to the Internet."
+msgstr ""
+
+#: ../user/info.php:50
+msgid ""
+"The applications run by %1 may cause some computers to overheat. If this "
+"happens, stop running %1 or use a %2utility program%3 that limits CPU usage."
+msgstr ""
+
+#: ../user/info.php:51
+msgid ""
+"%1 was developed by %2. BOINC was developed at the University of California."
+msgstr ""
+
+#: ../user/info.php:53
+msgid "Liability"
+msgstr ""
+
+#: ../user/info.php:54
+msgid ""
+"%1 and %2 assume no liability for damage to your computer, loss of data, or "
+"any other event or condition that may occur as a result of participating in %"
+"1."
+msgstr ""
+
+#: ../user/info.php:56
+msgid "Other BOINC projects"
+msgstr ""
+
+#: ../user/info.php:57
+msgid ""
+"Other projects use the same platform, BOINC, as %1. You may want to consider "
+"participating in one or more of these projects. By doing so, your computer "
+"will do useful work even when %1 has no work available for it."
+msgstr ""
+
+#: ../user/info.php:58
+msgid ""
+"These other projects are not associated with %1, and we cannot vouch for "
+"their security practices or the nature of their research. Join them at your "
+"own risk."
+msgstr ""
+
+#: ../user/language_select.php:47
+msgid "Language selection"
+msgstr ""
+
+#: ../user/language_select.php:73
+msgid ""
+"This web site is available in several languages. The currently selected "
+"language is %1."
+msgstr ""
+
+#: ../user/language_select.php:78
+msgid ""
+"Normally the choice of language is determined by your browser's language "
+"setting, which is: %1. You can change this setting using:"
+msgstr ""
+
+#: ../user/language_select.php:83
+msgid "Firefox: Tools/Options/General"
+msgstr ""
+
+#: ../user/language_select.php:85
+msgid "Microsoft IE: Tools/Internet Options/Languages"
+msgstr ""
+
+#: ../user/language_select.php:89
+msgid ""
+"Or you can select a language by clicking on one of the links. This will "
+"send your browser a cookie; make sure your browser accepts cookies from our "
+"domain."
+msgstr ""
+
+#: ../user/language_select.php:95
+msgid "Language name (click to select)"
+msgstr ""
+
+#: ../user/language_select.php:97
+msgid "Use browser language setting"
+msgstr ""
+
+#: ../user/language_select.php:113
+msgid ""
+"Translations are done by volunteers. If your native language is not here, %"
+"1you can provide a translation%2."
+msgstr ""
+
+#: ../user/login_form.php:45
+msgid "Email address:"
+msgstr ""
+
+#: ../user/login_form.php:45
+msgid "forgot email address?"
+msgstr ""
+
+#: ../user/login_form.php:48
+msgid "Password:"
+msgstr ""
+
+#: ../user/login_form.php:48
+msgid "forgot password?"
+msgstr ""
+
+#: ../user/login_form.php:51
+msgid "Stay logged in"
+msgstr ""
+
+#: ../user/login_form.php:62
+msgid "or %1create an account%2."
+msgstr ""
+
+#: ../user/merge_by_name.php:31
+msgid "Processing %1"
+msgstr ""
+
+#: ../user/merge_by_name.php:43
+msgid "Merged %1 into %2"
+msgstr ""
+
+#: ../user/merge_by_name.php:72
+msgid "Return to the list of your computers"
+msgstr ""
+
+#: ../user/merge_by_name.php:76
+msgid ""
+"This operation merges computers based on their domain name.\n"
+" <p>\n"
+" For each domain name, it will merge all older computers\n"
+" having that name with the newest computer having that name.\n"
+" Incompatible computers will not be merged.\n"
+" <p>"
+msgstr ""
+
+#: ../user/merge_by_name.php:82
+msgid "Go ahead and do this"
+msgstr ""
+
+#: ../user/merge_by_name.php:83
+msgid "Return to the list of computers"
+msgstr ""
+
+#: ../user/moderation.php:26
+msgid ""
+"\n"
+"To maximize discussion and flow of information,\n"
+"our message boards are moderated.\n"
+"Message board postings are subject to the following posting rules:\n"
+msgstr ""
+
+#: ../user/moderation.php:30
+msgid ""
+"\n"
+"<p>\n"
+"Moderators may delete posts that violate any of these rules.\n"
+"The authors of deleted posts will be notified via email.\n"
+"Gross offenders may have their ability to post messages temporarily revoked\n"
+"(though to prevent abuse only project administrators have the ability to do "
+"so).\n"
+"Additional kinds of bad behavior (\"bugging\" posts to trap the\n"
+"IP addresses of other participants, excessive thread creation to spam\n"
+"the forums, etc.), while not listed in the formal rules, may still\n"
+"lead to similar penalties.\n"
+"<p>\n"
+"If you think a post violates any of the posting rules,\n"
+"click the red X on the post and fill out the form;\n"
+"moderators will be notified of your complaint.\n"
+"Please use this button only for clear violations - not\n"
+"personal disputes.\n"
+"<p>\n"
+"We try to be as fair as we can when moderating,\n"
+"but in a large community of users, with many different viewpoints,\n"
+"there will always be some people that will not be happy\n"
+"with our moderation decisions.\n"
+"While we regret that this happens,\n"
+"please realize that we cannot suit all of the people all of the time\n"
+"and have to make decisions based on our resources and\n"
+"what is best for the forum overall.\n"
+"Please don't discuss our moderation policy on the forums. We aren't\n"
+"a social engineering project nor are we in the business of creating\n"
+"a perfectly fair system. So such discussions tend to be counterproductive\n"
+"and potentially incendiary. If you have a legitimate claim,\n"
+"send email to the address below.\n"
+"<p>\n"
+"This moderation policy is set by the %1 project.\n"
+"If you have comments about the policy, email %2.\n"
+"\n"
+msgstr ""
+
+#: ../user/pending.php:66
+msgid "Pending credit"
+msgstr ""
+
+#: ../user/pending.php:68
+msgid "Result ID"
+msgstr ""
+
+#: ../user/pending.php:68
+msgid "Workunit ID"
+msgstr ""
+
+#: ../user/pending.php:68
+msgid "Host ID"
+msgstr ""
+
+#: ../user/pending.php:68
+msgid "Claimed credit"
+msgstr ""
+
+#: ../user/pending.php:81
+msgid "Pending credit: %1"
+msgstr ""
+
+#: ../user/pm.php:32
+msgid "Block messages from this user"
+msgstr ""
+
+#: ../user/pm.php:32
+msgid "Block user"
+msgstr ""
+
+#: ../user/pm.php:73
+msgid "Your message has been sent."
+msgstr ""
+
+#: ../user/pm.php:83
+msgid "You have no private messages."
+msgstr ""
+
+#: ../user/pm.php:90
+msgid "Sender and date"
+msgstr ""
+
+#: ../user/pm.php:106
+msgid "Reply to this message"
+msgstr ""
+
+#: ../user/pm.php:107
+msgid "Delete this message"
+msgstr ""
+
+#: ../user/pm.php:112
+msgid "Select all"
+msgstr ""
+
+#: ../user/pm.php:114
+msgid "Unselect all"
+msgstr ""
+
+#: ../user/pm.php:117
+msgid "Delete selected messages"
+msgstr ""
+
+#: ../user/pm.php:140
+msgid "Sender"
+msgstr ""
+
+#: ../user/pm.php:143
+msgid "Date"
+msgstr ""
+
+#: ../user/pm.php:185
+msgid "You need to fill all fields to send a private message"
+msgstr ""
+
+#: ../user/pm.php:188
+msgid ""
+"Your message was flagged as spam\n"
+" by the Akismet anti-spam system.\n"
+" Please modify your text and try again."
+msgstr ""
+
+#: ../user/pm.php:205
+msgid "Could not find user with id %1"
+msgstr ""
+
+#: ../user/pm.php:210
+msgid "Could not find user with username %1"
+msgstr ""
+
+#: ../user/pm.php:212
+msgid "%1 is not a unique username; you will have to use user ID"
+msgstr ""
+
+#: ../user/pm.php:217
+msgid "User %1 (ID: %2) is not accepting private messages from you."
+msgstr ""
+
+#: ../user/pm.php:240 ../user/view_profile.php:26
+msgid "No such user"
+msgstr ""
+
+#: ../user/pm.php:242
+msgid "Really block %1?"
+msgstr ""
+
+#: ../user/pm.php:243
+msgid ""
+"Are you really sure you want to block user %1 from sending you private "
+"messages?"
+msgstr ""
+
+#: ../user/pm.php:244
+msgid "Please note that you can only block a limited amount of users."
+msgstr ""
+
+#: ../user/pm.php:245
+msgid ""
+"Once the user has been blocked you can unblock it using forum preferences "
+"page."
+msgstr ""
+
+#: ../user/pm.php:252
+msgid "No, cancel"
+msgstr ""
+
+#: ../user/pm.php:260 ../user/team_admins.php:98
+msgid "no such user"
+msgstr ""
+
+#: ../user/pm.php:263
+msgid "User %1 blocked"
+msgstr ""
+
+#: ../user/pm.php:265
+msgid "User %1 has been blocked from sending you private messages."
+msgstr ""
+
+#: ../user/pm.php:266
+msgid "To unblock, visit %1message board preferences%2"
+msgstr ""
+
+#: ../user/pm.php:302
+msgid "Unknown action"
+msgstr ""
+
+#: ../user/prefs.php:32
+msgid ""
+"Your preferences have been updated, and\n"
+" will take effect when your computer communicates with %1\n"
+" or you issue the %2Update%3 command from the BOINC Manager."
+msgstr ""
+
+#: ../user/prefs.php:41
+msgid ""
+"Your preferences have been reset to the defaults, and\n"
+" will take effect when your computer communicates with %1\n"
+" or you issue the %2Update%3 command from the BOINC Manager."
+msgstr ""
+
+#: ../user/prefs_edit.php:65 ../user/prefs_edit.php:93
+msgid "%1 for %2"
+msgstr ""
+
+#: ../user/prefs_edit.php:110
+msgid "Back to preferences"
+msgstr ""
+
+#: ../user/prefs_remove.php:45
+msgid "Confirm delete preferences"
+msgstr ""
+
+#: ../user/prefs_remove.php:48
+msgid "Are you sure you want to delete your separate %1 preferences for %2?"
+msgstr ""
+
+#: ../user/prefs_remove.php:52
+msgid "Remove preferences"
+msgstr ""
+
+#: ../user/prefs_remove.php:54
+msgid "Cancel"
+msgstr ""
+
+#: ../user/profile_menu.php:35
+msgid ""
+"%1Profiles%2 let individuals share backgrounds and opinions with the %3 "
+"community."
+msgstr ""
+
+#: ../user/profile_menu.php:36
+msgid ""
+"Explore the diversity of your fellow volunteers, and contribute your own "
+"views for others to enjoy."
+msgstr ""
+
+#: ../user/profile_menu.php:37
+msgid ""
+"If you haven't already, you can %1create your own user profile%2 for others "
+"to see!"
+msgstr ""
+
+#: ../user/profile_menu.php:42
+msgid "User of the Day"
+msgstr ""
+
+#: ../user/profile_menu.php:57
+msgid "User Profile Explorer"
+msgstr ""
+
+#: ../user/profile_menu.php:60
+msgid "View the %1User Picture Gallery%2."
+msgstr ""
+
+#: ../user/profile_menu.php:61
+msgid "Browse profiles %1by country%2."
+msgstr ""
+
+#: ../user/profile_menu.php:62
+msgid ""
+"Browse profiles %1at random%2, %3at random with pictures%2, or %4at random "
+"without pictures%2."
+msgstr ""
+
+#: ../user/profile_menu.php:66
+msgid "Alphabetical profile listings:"
+msgstr ""
+
+#: ../user/profile_menu.php:72
+msgid "Search profile text"
+msgstr ""
+
+#: ../user/profile_menu.php:98
+msgid "No profiles"
+msgstr ""
+
+#: ../user/profile_menu.php:99
+msgid "No profiles matched your query."
+msgstr ""
+
+#: ../user/profile_rate.php:29
+msgid "Invalid vote type:"
+msgstr ""
+
+#: ../user/profile_rate.php:34
+msgid "Vote Recorded"
+msgstr ""
+
+#: ../user/profile_rate.php:38
+msgid "Thank you"
+msgstr ""
+
+#: ../user/profile_rate.php:41
+msgid "Your recommendation has been recorded."
+msgstr ""
+
+#: ../user/profile_rate.php:43
+msgid "Your vote to reject this profile has been recorded."
+msgstr ""
+
+#: ../user/profile_rate.php:46
+msgid "Return to profile."
+msgstr ""
+
+#: ../user/profile_search_action.php:36
+msgid "Profiles containing '%1'"
+msgstr ""
+
+#: ../user/profile_search_action.php:40
+msgid "User name"
+msgstr ""
+
+#: ../user/profile_search_action.php:41
+msgid "Joined project"
+msgstr ""
+
+#: ../user/profile_search_action.php:44
+msgid "Recent credit"
+msgstr ""
+
+#: ../user/profile_search_action.php:54
+msgid "No profiles found containing '%1'"
+msgstr ""
+
+#: ../user/result.php:35
+msgid "Task %1"
+msgstr ""
+
+#: ../user/results.php:29
+msgid "This feature is turned off temporarily"
+msgstr ""
+
+#: ../user/results.php:56
+msgid "No computer with ID %1 found"
+msgstr ""
+
+#: ../user/results.php:63
+msgid "No access"
+msgstr ""
+
+#: ../user/results.php:69
+msgid "Missing user ID or host ID"
+msgstr ""
+
+#: ../user/results.php:107
+msgid "No tasks to display"
+msgstr ""
+
+#: ../user/server_status.php:97
+msgid "Running"
+msgstr ""
+
+#: ../user/server_status.php:100
+msgid "Not Running"
+msgstr ""
+
+#: ../user/server_status.php:103
+msgid "Disabled"
+msgstr ""
+
+#: ../user/server_status.php:231
+msgid "Project status"
+msgstr ""
+
+#: ../user/server_status.php:233
+msgid "Server software version: %1"
+msgstr ""
+
+#: ../user/server_status.php:241
+msgid "Program"
+msgstr ""
+
+#: ../user/server_status.php:241
+msgid "Host"
+msgstr ""
+
+#: ../user/server_status.php:252
+msgid "data-driven web pages"
+msgstr ""
+
+#: ../user/server_status.php:258
+msgid "upload/download server"
+msgstr ""
+
+#: ../user/server_status.php:261
+msgid "scheduler"
+msgstr ""
+
+#: ../user/server_status.php:294
+msgid "Running:"
+msgstr ""
+
+#: ../user/server_status.php:295
+msgid "Program is operating normally"
+msgstr ""
+
+#: ../user/server_status.php:296
+msgid "Not Running:"
+msgstr ""
+
+#: ../user/server_status.php:297
+msgid "Program failed or the project is down"
+msgstr ""
+
+#: ../user/server_status.php:298
+msgid "Disabled:"
+msgstr ""
+
+#: ../user/server_status.php:299
+msgid "Program is disabled"
+msgstr ""
+
+#: ../user/server_status.php:303
+msgid "Computing status"
+msgstr ""
+
+#: ../user/server_status.php:309
+msgid "The database server is not accessible"
+msgstr ""
+
+#: ../user/server_status.php:326
+msgid "Tasks ready to send"
+msgstr ""
+
+#: ../user/server_status.php:331 ../user/workunit.php:55
+msgid "Tasks in progress"
+msgstr ""
+
+#: ../user/server_status.php:336
+msgid "Workunits waiting for validation"
+msgstr ""
+
+#: ../user/server_status.php:341
+msgid "Workunits waiting for assimilation"
+msgstr ""
+
+#: ../user/server_status.php:346
+msgid "Workunits waiting for file deletion"
+msgstr ""
+
+#: ../user/server_status.php:351
+msgid "Tasks waiting for file deletion"
+msgstr ""
+
+#: ../user/server_status.php:367
+msgid "Transitioner backlog (hours)"
+msgstr ""
+
+#: ../user/server_status.php:374
+msgid "Users"
+msgstr ""
+
+#: ../user/server_status.php:377 ../user/server_status.php:395
+msgid "with recent credit"
+msgstr ""
+
+#: ../user/server_status.php:382 ../user/server_status.php:400
+msgid "with credit"
+msgstr ""
+
+#: ../user/server_status.php:387 ../user/server_status.php:405
+msgid "registered in past 24 hours"
+msgstr ""
+
+#: ../user/server_status.php:411
+msgid "current GigaFLOPs"
+msgstr ""
+
+#: ../user/server_status.php:420
+msgid "Tasks by application"
+msgstr ""
+
+#: ../user/server_status.php:423 ../user/workunit.php:40
+msgid "application"
+msgstr ""
+
+#: ../user/server_status.php:424
+msgid "unsent"
+msgstr ""
+
+#: ../user/server_status.php:425
+msgid "in progress"
+msgstr ""
+
+#: ../user/server_status.php:426
+msgid "avg runtime of last 100 results in h (min-max)"
+msgstr ""
+
+#: ../user/server_status.php:427
+msgid "users in last 24h"
+msgstr ""
+
+#: ../user/show_host_detail.php:40
+msgid "Computer %1"
+msgstr ""
+
+#: ../user/stats.php:21
+msgid "Statistics and leaderboards"
+msgstr ""
+
+#: ../user/stats.php:28
+msgid "Statistics for %1"
+msgstr ""
+
+#: ../user/stats.php:37
+msgid ""
+"More detailed statistics for %1 and other BOINC-based projects are available "
+"at several web sites:"
+msgstr ""
+
+#: ../user/stats.php:40
+msgid ""
+"You can also get your current statistics in the form of a \"signature image"
+"\":"
+msgstr ""
+
+#: ../user/stats.php:43
+msgid ""
+"Additionally you can get your individual statistics summed across all BOINC "
+"projects from several sites; see your %1home page%2."
+msgstr ""
+
+#: ../user/team.php:27
+msgid "%1 participants may form %2teams%3."
+msgstr ""
+
+#: ../user/team.php:29
+msgid ""
+"You may belong to only one team. You can join or quit a team at any time."
+msgstr ""
+
+#: ../user/team.php:31
+msgid "Each team has a %1founder%2 who may:"
+msgstr ""
+
+#: ../user/team.php:33
+msgid "access team members' email addresses"
+msgstr ""
+
+#: ../user/team.php:34
+msgid "edit the team's name and description"
+msgstr ""
+
+#: ../user/team.php:35
+msgid "add or remove team admins"
+msgstr ""
+
+#: ../user/team.php:36
+msgid "remove members from the team"
+msgstr ""
+
+#: ../user/team.php:37
+msgid "disband a team if it has no members"
+msgstr ""
+
+#: ../user/team.php:40
+msgid "To join a team, visit its team page and click %1Join this team%2."
+msgstr ""
+
+#: ../user/team.php:41 ../user/team_search.php:180
+msgid "Find a team"
+msgstr ""
+
+#: ../user/team.php:48
+msgid "All teams"
+msgstr ""
+
+#: ../user/team.php:52
+msgid "%1 teams"
+msgstr ""
+
+#: ../user/team.php:58
+msgid "Create a new team"
+msgstr ""
+
+#: ../user/team.php:59
+msgid ""
+"If you cannot find a team that is right for you, you can %1create a team%2."
+msgstr ""
+
+#: ../user/team_admins.php:34
+msgid "Remove Team Admin status from this member"
+msgstr ""
+
+#: ../user/team_admins.php:40 ../user/team_admins.php:51
+msgid "Add or remove Team Admins"
+msgstr ""
+
+#: ../user/team_admins.php:41
+msgid "You can select team members as 'Team Admins'. Team Admins can:"
+msgstr ""
+
+#: ../user/team_admins.php:43
+msgid "Edit team information (name, URL, description, country)"
+msgstr ""
+
+#: ../user/team_admins.php:44
+msgid "View the team's join/quit history"
+msgstr ""
+
+#: ../user/team_admins.php:45
+msgid ""
+"Moderate the team forum, if any (admins get email notification of moderation "
+"events and red X reports)"
+msgstr ""
+
+#: ../user/team_admins.php:47
+msgid "Team Admins cannot:"
+msgstr ""
+
+#: ../user/team_admins.php:49
+msgid "Change the team founder"
+msgstr ""
+
+#: ../user/team_admins.php:50 ../user/team_manage.php:54
+msgid "Remove members"
+msgstr ""
+
+#: ../user/team_admins.php:53
+msgid "If a Team Admin quits the team, they cease to be a Team Admin."
+msgstr ""
+
+#: ../user/team_admins.php:54
+msgid ""
+"We recommend that you select only people you know and trust very well as "
+"Team Admins."
+msgstr ""
+
+#: ../user/team_admins.php:59
+msgid "There are currently no Team Admins"
+msgstr ""
+
+#: ../user/team_admins.php:61
+msgid "Current Team Admins"
+msgstr ""
+
+#: ../user/team_admins.php:62
+msgid "Became Team Admin on"
+msgstr ""
+
+#: ../user/team_admins.php:77
+msgid "Add Team Admin"
+msgstr ""
+
+#: ../user/team_admins.php:78
+msgid "Email address of team member:"
+msgstr ""
+
+#: ../user/team_admins.php:90
+msgid "failed to remove admin"
+msgstr ""
+
+#: ../user/team_admins.php:99
+msgid "User is not member of team"
+msgstr ""
+
+#: ../user/team_admins.php:101
+msgid "%1 is already an admin of %2"
+msgstr ""
+
+#: ../user/team_admins.php:105
+msgid "Couldn't add admin"
+msgstr ""
+
+#: ../user/team_admins.php:111 ../user/team_manage.php:85
+#: ../user/team_quit_form.php:28 ../user/team_remove_inactive_action.php:28
+msgid "No such team"
+msgstr ""
+
+#: ../user/team_change_founder_action.php:30
+#: ../user/team_change_founder_form.php:33 ../user/team_display.php:67
+#: ../user/team_edit_action.php:30 ../user/team_edit_form.php:29
+#: ../user/team_email_list.php:55
+msgid "no such team"
+msgstr ""
+
+#: ../user/team_change_founder_action.php:38
+msgid "User is not a member of %1"
+msgstr ""
+
+#: ../user/team_change_founder_action.php:41
+msgid "Changing founder of %1"
+msgstr ""
+
+#: ../user/team_change_founder_action.php:43
+msgid "%1 is now founder of %2"
+msgstr ""
+
+#: ../user/team_change_founder_form.php:37
+msgid "Change founder of %1"
+msgstr ""
+
+#: ../user/team_change_founder_form.php:43
+msgid ""
+"Team member %1 requested this team's foundership on %2, but left the team, "
+"thus canceling the request."
+msgstr ""
+
+#: ../user/team_change_founder_form.php:49
+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 ""
+
+#: ../user/team_change_founder_form.php:55
+msgid "decline request"
+msgstr ""
+
+#: ../user/team_change_founder_form.php:58
+msgid ""
+"If you don't decline the request by %1, %2 will have the option of assuming "
+"team foundership.<br /><br />\n"
+" To accept the request, assign foundership to %3 using the "
+"form below."
+msgstr ""
+
+#: ../user/team_change_founder_form.php:66
+msgid "No transfer request is pending."
+msgstr ""
+
+#: ../user/team_change_founder_form.php:69
+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 ""
+
+#: ../user/team_change_founder_form.php:76
+msgid "New founder?"
+msgstr ""
+
+#: ../user/team_change_founder_form.php:105 ../user/team_manage.php:56
+msgid "Change founder"
+msgstr ""
+
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
+#: ../user/team_create_action.php:29
+msgid "You must choose a non-blank team name"
+msgstr ""
+
+#: ../user/team_create_action.php:34
+msgid "A team named %1 already exists - try another name"
+msgstr ""
+
+#: ../user/team_create_action.php:54
+msgid "Could not create team - please try later."
+msgstr ""
+
+#: ../user/team_create_form.php:27 ../user/team_create_form.php:32
+msgid "Create a team"
+msgstr ""
+
+#: ../user/team_create_form.php:30
+msgid ""
+"You belong to %1. You must %2quit this team%3 before creating a new one."
+msgstr ""
+
+#: ../user/team_delta.php:65
+msgid "Not founder or admin"
+msgstr ""
+
+#: ../user/team_delta.php:72
+msgid "Team history for %1"
+msgstr ""
+
+#: ../user/team_delta.php:75
+msgid "When"
+msgstr ""
+
+#: ../user/team_delta.php:76
+msgid "User"
+msgstr ""
+
+#: ../user/team_delta.php:77
+msgid "Action"
+msgstr ""
+
+#: ../user/team_delta.php:78
+msgid "Total credit at time of action"
+msgstr ""
+
+#: ../user/team_edit_action.php:53
+msgid "bad country"
+msgstr ""
+
+#: ../user/team_edit_action.php:59
+msgid "The name '%1' is being used by another team."
+msgstr ""
+
+#: ../user/team_edit_action.php:62
+msgid "Must specify team name"
+msgstr ""
+
+#: ../user/team_edit_action.php:90
+msgid "Could not update team - please try again later."
+msgstr ""
+
+#: ../user/team_edit_form.php:33
+msgid "Edit %1"
+msgstr ""
+
+#: ../user/team_edit_form.php:34
+msgid "Update team info"
+msgstr ""
+
+#: ../user/team_email_list.php:61
+msgid "%1 Email List"
+msgstr ""
+
+#: ../user/team_email_list.php:63
+msgid "Member list of %1"
+msgstr ""
+
+#: ../user/team_email_list.php:78
+msgid "Show as plain text"
+msgstr ""
+
+#: ../user/team_forum.php:28 ../user/team_forum.php:39
+msgid "Create Message Board"
+msgstr ""
+
+#: ../user/team_forum.php:29
+msgid "You may create a message board for use by %1."
+msgstr ""
+
+#: ../user/team_forum.php:31
+msgid "Only team members will be able to post."
+msgstr ""
+
+#: ../user/team_forum.php:32
+msgid "At your option, only members will be able to read."
+msgstr ""
+
+#: ../user/team_forum.php:33
+msgid "You and your Team Admins will have moderator privileges."
+msgstr ""
+
+#: ../user/team_forum.php:40
+msgid "Create a message board for %1"
+msgstr ""
+
+#: ../user/team_forum.php:48
+msgid "Team already has a message board"
+msgstr ""
+
+#: ../user/team_forum.php:59
+msgid "Team Message Board"
+msgstr ""
+
+#: ../user/team_forum.php:71
+msgid "Minimum time between posts (seconds)"
+msgstr ""
+
+#: ../user/team_forum.php:74
+msgid "Minimum total credit to post"
+msgstr ""
+
+#: ../user/team_forum.php:77
+msgid "Minimum average credit to post"
+msgstr ""
+
+#: ../user/team_forum.php:80
+msgid "Submit"
+msgstr ""
+
+#: ../user/team_forum.php:89
+msgid "Remove your team's message board."
+msgstr ""
+
+#: ../user/team_forum.php:97
+msgid "Really remove message board?"
+msgstr ""
+
+#: ../user/team_forum.php:98
+msgid ""
+"Are you sure you want to remove your team's message board? All threads and "
+"posts will be permanently removed. (You may, however, create a new message "
+"board later)."
+msgstr ""
+
+#: ../user/team_forum.php:100
+msgid "Yes - remove message board"
+msgstr ""
+
+#: ../user/team_forum.php:121
+msgid "Message board removed"
+msgstr ""
+
+#: ../user/team_forum.php:124
+msgid ""
+"Your team's message board has been removed. You may now %1create a new one%2."
+msgstr ""
+
+#: ../user/team_forum.php:143
+msgid "Team Message Board Updated"
+msgstr ""
+
+#: ../user/team_forum.php:144
+msgid "Update successful"
+msgstr ""
+
+#: ../user/team_forum.php:147
+msgid "Update failed"
+msgstr ""
+
+#: ../user/team_forum.php:154
+msgid "Team has no forum"
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:36
+msgid "You must be a member of a team to access this page."
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:90
+msgid "Requesting foundership of %1"
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:98
+msgid ""
+"The current founder has been notified of your request by email and private "
+"message.<br /><br />\n"
+" If the founder does not respond within 60 days you "
+"will be allowed to become the founder."
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:102
+#: ../user/team_founder_transfer_action.php:113
+msgid "Foundership request not allowed now"
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:109
+msgid "Assumed foundership of %1"
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:111
+msgid ""
+"Congratulations, you are now the founder of team %1. Go to %2Your Account "
+"page%3 to find the Team Admin options."
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:120
+msgid "Decline founder change request"
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:127
+msgid "The foundership request from %1 has been declined."
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:130
+msgid "There were no foundership requests."
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:134
+msgid "undefined action %1"
+msgstr ""
+
+#: ../user/team_founder_transfer_action.php:137
+#: ../user/team_founder_transfer_form.php:83
+msgid "Return to team page"
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:28
+msgid "You need to be a member of a team to access this page."
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:31
+msgid "Request foundership of %1"
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:38
+msgid "You are now founder of team %1."
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:44
+msgid "You requested the foundership of %1 on %2."
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:47
+msgid ""
+"60 days have elapsed since your request, and the founder has not responded. "
+"You may now assume foundership by clicking here:"
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:50
+msgid "Assume foundership"
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:54
+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 ""
+
+#: ../user/team_founder_transfer_form.php:60
+msgid ""
+"If the team founder is not active and you want to assume the role of "
+"founder, click the button below. The current founder will be sent an email "
+"detailing your request, and will be able to transfer foundership to you or "
+"to decline your request. If the founder does not respond in 60 days, you "
+"will be allowed to become the founder.<br /><br />\n"
+" Are you sure you want to request foundership?"
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:65
+msgid "Request foundership"
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:74
+msgid "Founder change has already been requested by %1 on %2."
+msgstr ""
+
+#: ../user/team_founder_transfer_form.php:77
+msgid ""
+"A foundership change was requested during the last 90 days, so new requests "
+"are not allowed. Please try again later."
+msgstr ""
+
+#: ../user/team_join.php:32 ../user/team_join_action.php:32
+#: ../user/team_join_form.php:29
+msgid "The team %1 is not joinable."
+msgstr ""
+
+#: ../user/team_join.php:35 ../user/team_join_action.php:35
+msgid "Already a member"
+msgstr ""
+
+#: ../user/team_join.php:36 ../user/team_join_action.php:36
+msgid "You are already a member of %1."
+msgstr ""
+
+#: ../user/team_join.php:42 ../user/team_join_action.php:43
+msgid "Couldn't join team - please try again later."
+msgstr ""
+
+#: ../user/team_join_action.php:40
+msgid "Joined %1"
+msgstr ""
+
+#: ../user/team_join_action.php:41
+msgid "You have joined %1."
+msgstr ""
+
+#: ../user/team_join_form.php:32
+msgid "Join %1"
+msgstr ""
+
+#: ../user/team_join_form.php:33
+msgid "Please note:"
+msgstr ""
+
+#: ../user/team_join_form.php:35
+msgid "Joining a team gives its founder access to your email address."
+msgstr ""
+
+#: ../user/team_join_form.php:36
+msgid "Joining a team does not affect your account's credit."
+msgstr ""
+
+#: ../user/team_join_form.php:43
+msgid "Join team"
+msgstr ""
+
+#: ../user/team_lookup.php:84
+msgid "Search Results"
+msgstr ""
+
+#: ../user/team_lookup.php:86
+msgid "Search results for '%1'"
+msgstr ""
+
+#: ../user/team_lookup.php:88
+msgid "You may view these teams' members, statistics, and information."
+msgstr ""
+
+#: ../user/team_lookup.php:98
+msgid "More than 100 teams match your search. The first 100 are shown."
+msgstr ""
+
+#: ../user/team_lookup.php:104
+msgid ""
+"End of results. %1 If you cannot find the team you are looking for, you may %"
+"2create a team%3 yourself."
+msgstr ""
+
+#: ../user/team_manage.php:26
+msgid "Team administration for %1"
+msgstr ""
+
+#: ../user/team_manage.php:29
+msgid "Edit team info"
+msgstr ""
+
+#: ../user/team_manage.php:30
+msgid "Change team name, URL, description, type, or country"
+msgstr ""
+
+#: ../user/team_manage.php:32
+msgid "Member list:"
+msgstr ""
+
+#: ../user/team_manage.php:33 ../user/team_manage.php:37
+msgid "HTML"
+msgstr ""
+
+#: ../user/team_manage.php:34
+msgid "text"
+msgstr ""
+
+#: ../user/team_manage.php:35
+msgid "View member names and email addresses"
+msgstr ""
+
+#: ../user/team_manage.php:36
+msgid "View change history:"
+msgstr ""
+
+#: ../user/team_manage.php:38
+msgid "XML"
+msgstr ""
+
+#: ../user/team_manage.php:39
+msgid "See when members joined or quit this team"
+msgstr ""
+
+#: ../user/team_manage.php:50
+msgid "Respond to foundership request."
+msgstr ""
+
+#: ../user/team_manage.php:50
+msgid "If you don't respond by %1, %2 may assume foundership of this team."
+msgstr ""
+
+#: ../user/team_manage.php:55
+msgid "Remove inactive or unwanted members from this team"
+msgstr ""
+
+#: ../user/team_manage.php:57
+msgid "Transfer foundership to another member"
+msgstr ""
+
+#: ../user/team_manage.php:58
+msgid "Add/remove Team Admins"
+msgstr ""
+
+#: ../user/team_manage.php:59
+msgid "Give selected team members Team Admin privileges"
+msgstr ""
+
+#: ../user/team_manage.php:61
+msgid "Remove team"
+msgstr ""
+
+#: ../user/team_manage.php:62
+msgid "Allowed only if team has no members"
+msgstr ""
+
+#: ../user/team_manage.php:64
+msgid "Create or manage a team message board"
+msgstr ""
+
+#: ../user/team_manage.php:71
+msgid ""
+"To have this team created on all BOINC projects (current and future) you can "
+"make it into a %1BOINC-wide team%2."
+msgstr ""
+
+#: ../user/team_manage.php:73
+msgid ""
+"Team admins are encouraged to join and participate in the Google %1boinc-"
+"team-founders%2 group."
+msgstr ""
+
+#: ../user/team_manage.php:75
+msgid ""
+"Other resources for BOINC team admins are available from a third-party site, "
+"%1www.boincteams.com%2."
+msgstr ""
+
+#: ../user/team_manage.php:91
+msgid "Can't delete non-empty team"
+msgstr ""
+
+#: ../user/team_manage.php:95
+msgid "Team %1 deleted"
+msgstr ""
+
+#: ../user/team_members.php:36
+msgid "Limit exceeded: Can only display the first 1000 members."
+msgstr ""
+
+#: ../user/team_members.php:49
+msgid "Members of %1"
+msgstr ""
+
+#: ../user/team_quit_action.php:32
+msgid "Unable to quit team"
+msgstr ""
+
+#: ../user/team_quit_action.php:33
+msgid "Team doesn't exist, or you don't belong to it."
+msgstr ""
+
+#: ../user/team_quit_form.php:31
+msgid "Quit %1"
+msgstr ""
+
+#: ../user/team_quit_form.php:32
+msgid ""
+"<strong>Please note before quitting a team:</strong>\n"
+" <ul>\n"
+" <li>If you quit a team, you may rejoin later, or join any other "
+"team you desire\n"
+" <li>Quitting a team does not affect your personal credit statistics "
+"in any way.\n"
+" </ul>"
+msgstr ""
+
+#: ../user/team_quit_form.php:40
+msgid "Quit Team"
+msgstr ""
+
+#: ../user/team_remove_inactive_action.php:31
+msgid "Removing users from %1"
+msgstr ""
+
+#: ../user/team_remove_inactive_action.php:39
+msgid "%1 is not a member of %2"
+msgstr ""
+
+#: ../user/team_remove_inactive_action.php:42
+msgid "%1 has been removed"
+msgstr ""
+
+#: ../user/team_remove_inactive_form.php:32
+msgid "Remove members from %1"
+msgstr ""
+
+#: ../user/team_remove_inactive_form.php:39
+msgid "Remove?"
+msgstr ""
+
+#: ../user/team_remove_inactive_form.php:40
+msgid "Name (ID)"
+msgstr ""
+
+#: ../user/team_remove_inactive_form.php:65
+msgid "No members are eligible for removal."
+msgstr ""
+
+#: ../user/team_remove_inactive_form.php:68
+msgid "Remove users"
+msgstr ""
+
+#: ../user/team_search.php:68
+msgid "Team name"
+msgstr ""
+
+#: ../user/team_search.php:92
+msgid "Team search results"
+msgstr ""
+
+#: ../user/team_search.php:94
+msgid "No teams were found matching your criteria. Try another search."
+msgstr ""
+
+#: ../user/team_search.php:96
+msgid "Or you can %1create a new team%2."
+msgstr ""
+
+#: ../user/team_search.php:100
+msgid ""
+"The following teams match one or more of your search criteria.\n"
+" To join a team, click its name to go to the team page,\n"
+" then click %1Join this team%2."
+msgstr ""
+
+#: ../user/team_search.php:107
+msgid "Change your search"
+msgstr ""
+
+#: ../user/team_search.php:181
+msgid ""
+"You can team up with other people with similar interests, or from the same "
+"country, company, or school."
+msgstr ""
+
+#: ../user/team_search.php:183
+msgid "Use this form to find teams that might be right for you."
+msgstr ""
+
+#: ../user/team_search.php:188
+msgid "%1I'm not interested%2 in joining a team right now."
+msgstr ""
+
+#: ../user/top_hosts.php:67 ../user/top_teams.php:100
+#: ../user/top_users.php:112
+msgid "Limit exceeded - Sorry, first %1 items only"
+msgstr ""
+
+#: ../user/top_hosts.php:82
+msgid "Top hosts"
+msgstr ""
+
+#: ../user/top_teams.php:105
+msgid "Top %1 teams"
+msgstr ""
+
+#: ../user/top_teams.php:108
+msgid "There are no %1 teams"
+msgstr ""
+
+#: ../user/top_users.php:64
+msgid "Participant since"
+msgstr ""
+
+#: ../user/uotd.php:29
+msgid "No user of the day has been chosen."
+msgstr ""
+
+#: ../user/uotd.php:33
+msgid "User of the Day for %1: %2"
+msgstr ""
+
+#: ../user/user_search.php:51
+msgid "Filters"
+msgstr ""
+
+#: ../user/user_search.php:52
+msgid "User name starts with"
+msgstr ""
+
+#: ../user/user_search.php:53
+msgid "Any"
+msgstr ""
+
+#: ../user/user_search.php:56
+msgid "With profile?"
+msgstr ""
+
+#: ../user/user_search.php:57 ../user/user_search.php:62
+msgid "Either"
+msgstr ""
+
+#: ../user/user_search.php:61
+msgid "On a team?"
+msgstr ""
+
+#: ../user/user_search.php:66
+msgid "Ordering"
+msgstr ""
+
+#: ../user/user_search.php:67
+msgid "Decreasing sign-up time"
+msgstr ""
+
+#: ../user/user_search.php:68
+msgid "Decreasing average credit"
+msgstr ""
+
+#: ../user/user_search.php:69
+msgid "Decreasing total credit"
+msgstr ""
+
+#: ../user/user_search.php:100
+msgid "search string must be at least 3 characters"
+msgstr ""
+
+#: ../user/user_search.php:133
+msgid "User search results"
+msgstr ""
+
+#: ../user/user_search.php:140
+msgid "Joined"
+msgstr ""
+
+#: ../user/user_search.php:148
+msgid "No users match your search criteria."
+msgstr ""
+
+#: ../user/userw.php:35
+msgid "User not found!"
+msgstr ""
+
+#: ../user/userw.php:44
+msgid "Account Data<br/>for %1<br/>Time:"
+msgstr ""
+
+#: ../user/userw.php:47
+msgid "Team:"
+msgstr ""
+
+#: ../user/userw.php:48
+msgid "Team TotCred:"
+msgstr ""
+
+#: ../user/userw.php:49
+msgid "Team AvgCred:"
+msgstr ""
+
+#: ../user/userw.php:51
+msgid "Team: None"
+msgstr ""
+
+#: ../user/validate_email_addr.php:30
+msgid "Validate BOINC email address"
+msgstr ""
+
+#: ../user/validate_email_addr.php:31
+msgid ""
+"Please visit the following link to validate the email address of your %1 "
+"account:"
+msgstr ""
+
+#: ../user/validate_email_addr.php:34
+msgid "Validate email sent"
+msgstr ""
+
+#: ../user/validate_email_addr.php:35
+msgid ""
+"An email has been sent to %1. Visit the link it contains to validate your "
+"email address."
+msgstr ""
+
+#: ../user/validate_email_addr.php:44
+msgid "No such user."
+msgstr ""
+
+#: ../user/validate_email_addr.php:49
+msgid "Error in URL data - can't validate email address"
+msgstr ""
+
+#: ../user/validate_email_addr.php:54
+msgid "Database update failed - please try again later."
+msgstr ""
+
+#: ../user/validate_email_addr.php:57
+msgid "Validate email address"
+msgstr ""
+
+#: ../user/validate_email_addr.php:58
+msgid "The email address of your account has been validated."
+msgstr ""
+
+#: ../user/view_profile.php:36
+msgid "This user has no profile"
+msgstr ""
+
+#: ../user/view_profile.php:54
+msgid "Profile: %1"
+msgstr ""
+
+#: ../user/view_profile.php:63
+msgid "Account data"
+msgstr ""
+
+#: ../user/weak_auth.php:52
+msgid ""
+"You can access your account either by using your email address and "
+"password,\n"
+" or by using an assigned 'account key'.\n"
+" Your account key is:"
+msgstr ""
+
+#: ../user/weak_auth.php:57
+msgid "This key can be used to:"
+msgstr ""
+
+#: ../user/weak_auth.php:59
+msgid "log in to your account on the web"
+msgstr ""
+
+#: ../user/weak_auth.php:61
+msgid ""
+"to attach a computer to your account without using the BOINC Manager.\n"
+" To do so, install BOINC,\n"
+" create a file named %1 in the BOINC\n"
+" data directory, and set its contents to:"
+msgstr ""
+
+#: ../user/weak_auth.php:73
+msgid "Weak account key"
+msgstr ""
+
+#: ../user/weak_auth.php:74
+msgid ""
+"Your 'weak account key' can be used to attach computers to your account\n"
+" as described above, but cannot be used to log in to your account or "
+"change it in any way.\n"
+" If you want to attach untrusted or insecure computers to your account,\n"
+" do so using your weak account key.\n"
+" Your weak account key is:"
+msgstr ""
+
+#: ../user/weak_auth.php:81
+msgid ""
+"If you change your password, your weak account key changes, and your "
+"previous weak account key becomes invalid."
+msgstr ""
+
+#: ../user/workunit.php:32
+msgid "can't find workunit"
+msgstr ""
+
+#: ../user/workunit.php:35
+msgid "Workunit %1"
+msgstr ""
+
+#: ../user/workunit.php:43
+msgid "canonical result"
+msgstr ""
+
+#: ../user/workunit.php:46
+msgid "granted credit"
+msgstr ""
+
+#: ../user/workunit.php:55
+msgid "suppressed pending completion"
+msgstr ""
+
+#: ../user/workunit.php:58
+msgid "minimum quorum"
+msgstr ""
+
+#: ../user/workunit.php:59
+msgid "initial replication"
+msgstr ""
+
+#: ../user/workunit.php:60
+msgid "max # of error/total/success tasks"
+msgstr ""
+
+#: ../user/workunit.php:64
+msgid "errors"
+msgstr ""
+
+#: ../user/workunit.php:67
+msgid "validation"
+msgstr ""
+
+#: ../user/workunit.php:67
+msgid "Pending"
+msgstr ""
+
+#: ../project.sample/project.inc:43
+msgid "Main page"
+msgstr ""
+
+#: ../project.sample/project.inc:45
+msgid "Copyright"
+msgstr ""
+
+#: ../project.sample/project.inc:48
+msgid "Generated"
+msgstr ""
+
+#: ../project.sample/project.inc:79
+msgid "Your personal background."
+msgstr ""
+
+#: ../project.sample/project.inc:83
+msgid ""
+"Tell us about yourself. You could tell us where you're from, your age, "
+"occupation, hobbies, or anything else about yourself."
+msgstr ""
+
+#: ../project.sample/project.inc:87
+msgid "Your opinions about %1"
+msgstr ""
+
+#: ../project.sample/project.inc:91
+msgid ""
+"Tell us your thoughts about %1<ol>\n"
+" <li>Why do you run %1?\n"
+" <li>What are your views about the project?\n"
+" <li>Any suggestions?\n"
+" </ol>"
+msgstr ""
+
+#: ../project.sample/project_specific_prefs.inc:47
+msgid "Color scheme for graphics"
+msgstr ""
+
+#: ../project.sample/project_specific_prefs.inc:48
+msgid "Maximum CPU % for graphics%10 ... 100%2"
+msgstr ""
+
+#: ../project.sample/project_specific_prefs.inc:49
+msgid "Run only the selected applications"
+msgstr ""
+
+#: ../project.sample/project_specific_prefs.inc:50
+msgid ""
+"If no work for selected applications is available, accept work from other "
+"applications?"
+msgstr ""
+
+#: ../project.sample/project_specific_prefs.inc:91
+msgid "(all applications)"
+msgstr ""
diff --git a/locale/ms/BOINC-Setup.po b/locale/ms/BOINC-Setup.po
new file mode 100644
index 0000000..3c31664
--- /dev/null
+++ b/locale/ms/BOINC-Setup.po
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.10.0\n"
+
+#: Installer.cpp:124
+#, c-format
+msgid "Sorry, this version of %s requires system 10.5 or higher."
+msgstr ""
+
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
+msgid "Yes"
+msgstr ""
+
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
+msgid "No"
+msgstr ""
+
+#: PostInstall.cpp:133
+msgid "Should BOINC run even when no user is logged in?"
+msgstr ""
+
+#: PostInstall.cpp:1416
+#, c-format
+msgid ""
+"Users who are permitted to administer this computer will automatically be "
+"allowed to run and control %s.\n"
+"\n"
+"Do you also want non-administrative users to be able to run and control %s "
+"on this Mac?"
+msgstr ""
+
+#: PostInstall.cpp:1444
+#, c-format
+msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
+msgstr ""
+
+#: uninstall.cpp:82
+msgid "OK"
+msgstr ""
+
+#: uninstall.cpp:136
+msgid "Permission error after relaunch"
+msgstr ""
+
+#: uninstall.cpp:141
+msgid ""
+"Removal may take several minutes.\n"
+"Please be patient."
+msgstr ""
+
+#: uninstall.cpp:156
+#, c-format
+msgid ""
+"Are you sure you want to completely remove %s from your computer?\n"
+"\n"
+"This will remove the executables but will not touch %s data files."
+msgstr ""
+
+#: uninstall.cpp:163
+#, c-format
+msgid "Canceled: %s has not been touched."
+msgstr ""
+
+#: uninstall.cpp:174
+#, c-format
+msgid "An error occurred: error code %d"
+msgstr ""
+
+#: uninstall.cpp:230
+msgid "name of user"
+msgstr ""
+
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
+#, c-format
+msgid ""
+"Removal completed.\n"
+"\n"
+" You may want to remove the following remaining items using the Finder: \n"
+"the directory \"%s\"\n"
+"\n"
+"for each user, the file\n"
+"\"%s\"."
+msgstr ""
+
+#: uninstall.cpp:840
+#, c-format
+msgid ""
+"Enter your administrator password to completely remove %s from you "
+"computer.\n"
+"\n"
+msgstr ""
+
+#: uninstall.cpp:1616
+msgid "Cancel"
+msgstr ""
+
+#: uninstall.cpp:1617
+msgid "Continue..."
+msgstr ""
diff --git a/locale/ms/BOINC-Web.po b/locale/ms/BOINC-Web.po
new file mode 100644
index 0000000..9430f5a
--- /dev/null
+++ b/locale/ms/BOINC-Web.po
@@ -0,0 +1,1073 @@
+# BOINC web translation
+# Copyright (C) 2008-2009 University of California
+# This file is distributed under the same license as BOINC.
+# FileID : $Id$
+# Lee Hanxue <leehanxue at gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-04-30 00:14+0800\n"
+"Last-Translator: Lee Hanxue <leehanxue at gmail.com>\n"
+"Language-Team: None\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: docutil.php:21
+msgid "Search"
+msgstr "Carian"
+
+#: docutil.php:103
+msgid "Return to BOINC main page"
+msgstr "Kembali ke laman web utama BOINC"
+
+#: docutil.php:114
+#, php-format
+msgid "This page is %stranslatable%s."
+msgstr "Laman ini %sboleh diterjemah%s."
+
+#: download.php:39
+msgid ""
+"We recommend that you also install VirtualBox, so your computer can work on "
+"science projects that require it."
+msgstr ""
+"Kami mengesyor anda untuk memasang VirtualBox supaya komputer anda boleh "
+"digunakan oleh projek-projek sains yang memerlukannya."
+
+#: download.php:41
+msgid "Learn more about VirtualBox."
+msgstr "Mengetahui lebih lanjut tentang VirtualBox."
+
+#: download.php:51
+msgid "Download BOINC + VirtualBox"
+msgstr "Muat turun BOINC + VirtualBox"
+
+#: download.php:54 download.php:69
+#, php-format
+msgid "for %s"
+msgstr "untuk %s"
+
+#: download.php:57 download.php:72
+#, php-format
+msgid "BOINC version %s"
+msgstr "BOINC versi %s"
+
+#: download.php:59
+#, php-format
+msgid "VirtualBox version %s"
+msgstr "VirtualBox versi %s"
+
+#: download.php:67
+msgid "Download BOINC"
+msgstr "Muat turun BOINC"
+
+#: download.php:123
+msgid ""
+"BOINC is a program that lets you donate your idle computer time to science "
+"projects like SETI at home, Climateprediction.net, Rosetta at home, World "
+"Community Grid, and many others."
+msgstr ""
+"BOINC adalah perisian yang membolehkan anda menderma masa melahu (lapang) "
+"komputer kepada projek-projek sains seperti SETI at home, "
+"Climateprediction.net, Rosetta at home, World Community Grid dan lain-lain."
+
+#: download.php:125
+msgid ""
+"After installing BOINC on your computer, you can connect it to as many of "
+"these projects as you like."
+msgstr ""
+"Selepas memasang BOINC di komputer, anda boleh menghubungkannya kepada "
+"seberapa projek berikut yang anda mahu."
+
+#: download.php:127
+msgid ""
+"You may run this software on a computer only if you own the computer or have "
+"the permission of its owner."
+msgstr ""
+"Anda hanya boleh beroperasi perisian ini di komputer hanya jika anda "
+"memilikinya, atau mempunyai kebenaran daripada pemilik komputer."
+
+#: download.php:132
+msgid ""
+"We recommend that you download BOINC from the Google Play Store or Amazon "
+"Appstore, not from here."
+msgstr ""
+"Kami mengesyor anda muat turun BOINC daripada Google Play Store atau Amazon "
+"Appstore, bukannya daripada sini."
+
+#: download.php:167
+msgid "System requirements"
+msgstr "Keperluan sistem"
+
+#: download.php:168
+msgid "Release notes"
+msgstr "Nota keluaran"
+
+#: download.php:169 index.php:86
+msgid "Help"
+msgstr "Bantuan"
+
+#: download.php:170
+msgid "All versions"
+msgstr "Semua versi"
+
+#: download.php:171
+msgid "Version history"
+msgstr "Sejarah versi"
+
+#: download.php:172
+msgid "GPU computing"
+msgstr "Computing GPU"
+
+#: download.php:190
+msgid "BOINC: compute for science"
+msgstr "BOINC: perkiraan untuk sains"
+
+#: help.php:12
+#, php-format
+msgid ""
+"BOINC Online Help lets you talk one-on-one with experienced BOINC users, who "
+"can: %s answer questions about BOINC and volunteer computing; %s walk you "
+"through the process of installing and using BOINC; %s troubleshoot any "
+"problems you might have."
+msgstr ""
+"Bantuan online BOINC membolehkan anda bercakap satu-persatu dengan pengguna "
+"BOINC berpengalaman, yang boleh: %s menjawab soalan-soalan tentang BOINC dan "
+"pengkomputeran sukarelawan; %s membimbing anda melalui proses pemasangan "
+"serta penggunaan BOINC; %s menyelesaikan sebarang masalah yang anda mungkin "
+"hadapi."
+
+#: help.php:21
+#, php-format
+msgid ""
+"BOINC Online Help is based on %sSkype%s, an Internet-based telephone system. "
+"Skype is free (both the software and the calls). If you don't already have "
+"Skype, please %sdownload and install it now%s. When you're finished, return "
+"to this page."
+msgstr ""
+"Bantuan online BOINC berdasarkan %sSkype%s, satu sistem telefon berinternet. "
+"Skype adalah percuma (perisian serta panggilan). Jika anda belum ada Skype, "
+"sila %smuat turun dan pasangkannya sekarang%s. Setelah selesai, kembali ke "
+"laman ini."
+
+#: help.php:28
+msgid ""
+"The best way to get help is by voice, for which you need either built-in "
+"microphone and speakers or an external headset for your computer. You can "
+"also use Skype's text-based chat system or regular email (if you don't have "
+"Skype) to communicate with Help Volunteers."
+msgstr ""
+"Cara terbaik mendapat pertolongan adalah melalui panggilan, dimana anda "
+"memerlukan mikrofon bina dalam dan speaker ataupun headset luaran untuk "
+"komputer anda. Anda juga boleh menggunakan sistem chat berasaskan teks atau "
+"emel (jika anda tiada Skype) untuk berhubung dengan Sukarelawan Bantuan."
+
+#: help.php:31
+msgid ""
+"Volunteers speaking several languages are available. Please select a "
+"language:"
+msgstr ""
+"Sukarelawan yang bertutur pelbagai bahasa boleh didapati. Sila pilih bahasa:"
+
+#: help.php:47
+msgid "Be a Help Volunteer"
+msgstr "Jadilah Bantuan Sukarelawan"
+
+#: help.php:50
+#, php-format
+msgid ""
+"If you're an experienced BOINC user, we encourage you to %sbecome a Help "
+"Volunteer%s. It's a great way to help the cause of scientific research and "
+"volunteer computing - and it's fun!"
+msgstr ""
+"Jika anda pengguna BOINC yang berpengalaman, kami menggalakkan anda %menjadi "
+"Sukarelawan Bantuan%s. Ini merupakan cara baik untuk mendorong penyelidikan "
+"saintifik dan perkomputeran sukarelawan - lagipun ia menyeronokkan!"
+
+#: help.php:56
+#, php-format
+msgid ""
+"If you're already a Help Volunteer: to edit your settings, %sclick here%s."
+msgstr ""
+"Jika anda adalah Sukarelawan Bantuan: %sklik disini%s untuk kemas kini "
+"tetapan anda."
+
+#: help_funcs.php:107
+msgid ""
+"BOINC helpers are unpaid volunteers. Their advice is not endorsed by BOINC "
+"or the University of California."
+msgstr ""
+"Pembantu BOINC merupakan sukarelawan tanpa gaji. Nasihat mereka tidak "
+"disahkan oleh BOINC ataupun University of California."
+
+#: help_funcs.php:110
+msgid "%1Never%2 give email address or password information to BOINC helpers."
+msgstr ""
+"%1Jangan sesekali%2 memberi alamat emel atau kata laluan kepada pembantu "
+"BOINC."
+
+#: index.php:24
+msgid "Computing power"
+msgstr "Kuasa pengkomputeran"
+
+#: index.php:26
+msgid "Top 100 volunteers"
+msgstr "100 sukarelawan teratas"
+
+#: index.php:27
+msgid "Statistics"
+msgstr "Statistik"
+
+#: index.php:55
+msgid "Active:"
+msgstr "Aktif:"
+
+#: index.php:55
+msgid "volunteers,"
+msgstr "sukarelawan,"
+
+#: index.php:55
+msgid "computers.\n"
+msgstr "komputer-komputer.\n"
+
+#: index.php:56
+msgid "24-hour average:"
+msgstr "Purata 24-jam:"
+
+#: index.php:56
+msgid "PetaFLOPS."
+msgstr "PetaFLOPS."
+
+#: index.php:68
+msgid "News"
+msgstr "Berita"
+
+#: index.php:83
+msgid "Volunteer"
+msgstr "Sukarelawan"
+
+#: index.php:85
+msgid "Download"
+msgstr "Muat Turun"
+
+#: index.php:87 index.php:120 index.php:171
+msgid "Documentation"
+msgstr "Dokumentasi"
+
+#: index.php:88
+msgid "Add-ons"
+msgstr "Tambahan"
+
+#: index.php:89
+msgid "Links"
+msgstr "Pautan"
+
+#: index.php:94
+msgid ""
+"Use the idle time on your computer (Windows, Mac, Linux, or Android) to cure "
+"diseases, study global warming, discover pulsars, and do many other types of "
+"scientific research. It's safe, secure, and easy:"
+msgstr ""
+"Guna masa melahu komputer anda (Windows, Mac, Linux atau Android) untuk "
+"menyembuhkan penyakit, mendalami global warming, meneroka pulsar, dan "
+"penyelidikan sains yang lain. Ia selamat, dan senang:"
+
+#: index.php:96
+msgid "Choose projects"
+msgstr "Pilih Projek"
+
+#: index.php:97
+msgid "Download BOINC software"
+msgstr "Muat turun perisian BOINC"
+
+#: index.php:98
+msgid "Enter an email address and password."
+msgstr "Sila isi alamat emel dan kata laluan."
+
+#: index.php:102
+#, php-format
+msgid ""
+"Or, if you run several projects, try an %saccount manager%s such as %"
+"sGridRepublic%s or %sBAM!%s. "
+msgstr ""
+"Ataupun, jika anda beroperasi beberapa projek, cuba satu %spengurus akaun%s "
+"seperti %sGridRepublic%s atau %sBAM!%s."
+
+#: index.php:118
+msgid "Compute with BOINC"
+msgstr "Perkomputeran dengan BOINC"
+
+#: index.php:121
+msgid "Software updates"
+msgstr "Kemaskini Perisian"
+
+#: index.php:128
+msgid ""
+"%1Scientists%2: use BOINC to create a %3volunteer computing project%4 giving "
+"you the computing power of thousands of CPUs."
+msgstr ""
+"%1Para saintis%2: gunakan BOINC untuk mewujudkan %3projek perkomputeran "
+"sukarelawan%4 memberikan anda kuasa perkomputeran beribu-ribu CPU."
+
+#: index.php:132
+msgid ""
+"%1Universities%2: use BOINC to create a %3Virtual Campus Supercomputing "
+"Center%4."
+msgstr ""
+"%1Universiti-universiti%2: gunakan BOINC untuk mewujudkan %3Virtual Campus "
+"Supercomputing Center%4."
+
+#: index.php:137
+msgid "%1Companies%2: use BOINC for %3desktop Grid computing%4."
+msgstr ""
+"%1Syarikat-syarikat%2: gunakan BOINC untuk %3Perkomputeran Grid desktop%4."
+
+#: index.php:149
+msgid "The BOINC project"
+msgstr "Projek BOINC"
+
+#: index.php:155
+msgid "Message boards"
+msgstr "Papan Mesej"
+
+#: index.php:156
+msgid "Email lists"
+msgstr "Senarai emel"
+
+#: index.php:157
+msgid "Personnel and contributors"
+msgstr "Kakitangan dan penyumbang"
+
+#: index.php:158
+msgid "Events"
+msgstr "Acara"
+
+#: index.php:159
+msgid "Papers and talks"
+msgstr "Kertas penyelidikan dan ceramah"
+
+#: index.php:160
+msgid "Research projects"
+msgstr "Projek penyelidikan"
+
+#: index.php:161
+msgid "Logos and graphics"
+msgstr "Logo dan grafik"
+
+#: index.php:162
+msgid "and"
+msgstr "dan"
+
+#: index.php:166
+msgid "Help wanted"
+msgstr "Bantuan diperlukan"
+
+#: index.php:168
+msgid "Programming"
+msgstr "Pengaturcaraan"
+
+#: index.php:169
+msgid "Translation"
+msgstr "Terjemahan"
+
+#: index.php:170
+msgid "Testing"
+msgstr "Ujian"
+
+#: index.php:172
+msgid "Publicity"
+msgstr "Seranta"
+
+#: index.php:174
+msgid "Software development"
+msgstr "Pembangunan Perisian"
+
+#: index.php:175
+msgid "APIs for add-on software"
+msgstr "API untuk perisian tambahan"
+
+#: index.php:217
+#, php-format
+msgid ""
+"Open-source software for %svolunteer computing%s and %sgrid computing%s."
+msgstr ""
+"Perisian sumber terbuka untuk %sperkomputeran sukarelawan%s dan %"
+"sperkomputeran grid%s."
+
+#: index.php:230
+msgid "BOINC is based at The University of California, Berkeley"
+msgstr "BOINC berpusat di The University of California, Berkeley"
+
+#: projects.inc:14
+msgid "Distributed sensing"
+msgstr "Distributed sensing"
+
+#: projects.inc:19
+msgid "Stanford University"
+msgstr "Stanford University"
+
+#: projects.inc:20
+msgid "Seismology"
+msgstr "Bidang seismologi"
+
+#: projects.inc:21
+msgid ""
+"The Quake-Catcher Network is developing the world's largest seismic network "
+"using sensors attached to Internet-connected computers. You must buy a "
+"sensor to participate."
+msgstr ""
+"The Quake-Catcher Network sedang membina rangkaian seismik terbesar sedunia "
+"menggunakan sensor yang dilampirkan kepada komputer berinternet. Anda mesti "
+"membeli sensor untuk menyerta."
+
+#: projects.inc:27
+msgid "BOINC Poland Foundation"
+msgstr "Yayasan BOINC Poland"
+
+#: projects.inc:28
+msgid "Environmental research"
+msgstr "Penyelidikan alam sekitar"
+
+#: projects.inc:29
+msgid ""
+"This project is creating a free and continuously updated map of radiation "
+"levels by using sensors connected to volunteers' computers. You must buy a "
+"sensor to participate."
+msgstr ""
+"Projek ini mewujudkan peta tahap radiasi sentiasa kemas kini dengan "
+"menggunakan sensor yang disambungkan kepada komputer sukarelawan. Anda mesti "
+"membeli sensor untuk menyerta."
+
+#: projects.inc:33
+msgid ""
+"To participate in these projects you must buy a sensor and attach it to your "
+"computer."
+msgstr ""
+"Anda mesti membeli sensor dan menyambungkannya kepada komputer anda jikalau "
+"anda ingin meyertai projek-projek ini."
+
+#: projects.inc:37
+msgid "Cognitive science and artifical intelligence"
+msgstr "Sains kognitif artificial intelligence"
+
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
+msgid "Private"
+msgstr "Peribadi"
+
+#: projects.inc:61
+msgid "Artificial intelligence"
+msgstr ""
+
+#: projects.inc:62
+msgid ""
+"Parse and convert semantic nets for use in FreeHAL, an artificial "
+"intelligence that uses semantic networks, stemmers, part of speech "
+"databases, and part of speech taggers in order to imitate human behavior in "
+"conversations."
+msgstr ""
+"Rangkaian semantik penghuraian dan pengubahan untuk digunakan di FreeHAL, "
+"artificial intelligence yang menggunakan rangkaian semantik, stemmers, "
+"sebahagian daripada pangkalan data pertuturan, dan sebahagian daripada "
+"speech taggers untuk meniru tingkah laku perbualan manusia."
+
+#: projects.inc:69
+msgid "Biology and Medicine"
+msgstr "Biologi dan Perubatan"
+
+#: projects.inc:82
+msgid "University College Dublin"
+msgstr "University College Dublin"
+
+#: projects.inc:83
+msgid "Antimalarial drug discovery"
+msgstr "Penyelidikan ubat anti malaria"
+
+#: projects.inc:84
+msgid ""
+"The parasite that causes malaria continues to evolve resistance to available "
+"medication. We therefore urgently need to discover new drugs to replace "
+"existing drugs. Importantly, these new drugs need to target NEW proteins in "
+"the parasite. The FightMalaria at Home project is aimed at finding these new "
+"targets."
+msgstr ""
+"\n"
+"Parasit yang menyebabkan malaria berevolusi rintangan ke atas ubat-ubat "
+"sedia ada. Kami perlu segera meneroka ubat-ubat baru untuk menggantikan "
+"ubat-ubat sedia ada. Lebih penting lagi, ubat-ubat baru mesti ada sasaran "
+"protein-protein baru di dalam parasit. Projek FightMalaria at Home bertujuan "
+"mencari sasaran-sasaran baru ini. "
+
+#: projects.inc:90
+msgid "University of Karlsruhe (Germany)"
+msgstr "University of Karlsruhe (Jerman)"
+
+#: projects.inc:91
+msgid "Protein structure prediction"
+msgstr "Ramalan struktur protein"
+
+#: projects.inc:92
+msgid ""
+"POEM at HOME uses a computational approach to predict the biologically active "
+"structure of proteins, to understand the signal-processing mechanisms when "
+"the proteins interact with one another, to understand diseases related to "
+"protein malfunction or aggregation, and to develop new drugs on the basis of "
+"the three-dimensions structure of biologically important proteins."
+msgstr ""
+"POEM at HOME menggunakan kaedah perkomputeran untuk meramal struktur aktif "
+"biologi protein, memahami mekanisme isyarat pemprosesan ketika protein "
+"berinteraksi antara satu sama lain, memahami penyakit-penyakit yang "
+"berkaitan dengan kerosakan atau pengumpulan protein, dan untuk menyelidiki "
+"uabat-ubat baru berdasarkan struktur tiga dimensi protein-protein yang "
+"penting daripada segi biologi."
+
+#: projects.inc:98
+msgid "University of Delaware"
+msgstr "University of Delaware"
+
+#: projects.inc:99
+msgid "Study of protein - ligand interactions"
+msgstr "Pemahaman protein - interaksi ligand"
+
+#: projects.inc:100
+msgid ""
+"Docking at Home has both bioscience and computer science goals. The project "
+"aims to further knowledge of the atomic details of protein-ligand "
+"interactions and, by doing so, will search for insights into the discovery "
+"of novel pharmaceuticals."
+msgstr ""
+"Docking at Home mempunyai matlamat biosains dan sains komputer. Projek ini "
+"bertujuan mendalami butiran atom interaksi protein-ligand, dengan berbuat "
+"demikian dapat mendapat pengertian untuk penemuan baru farmaseutikal."
+
+#: projects.inc:114
+msgid "Barcelona Biomedical Research Park (PRBB)"
+msgstr "Barcelona Biomedical Research Park (PRBB)"
+
+#: projects.inc:115
+msgid "Molecular simulations of proteins"
+msgstr "Simulasi molekul protein"
+
+#: projects.inc:116
+msgid ""
+"GPUGrid.net opens novel computational scenarios by the first full-atom "
+"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
+"New biomedical applications suddenly become possible giving a new role to "
+"computational biology for biomedical research."
+msgstr ""
+"GPUGrid.net mewujudkan senario perkomputeran baru oleh kod full-atom "
+"molecular dinamik pertama (CellMD) yang dioptimum khas untuk GPU NVIDIA. "
+"Perisian bioperubatan baru menjadi nyata, mewujudkan peranan baru kepada "
+"perkomputeran biologi untuk penyelidikan bioperubatan."
+
+#: projects.inc:122
+msgid "Technion, Israel"
+msgstr "Technion, Israel"
+
+#: projects.inc:123
+msgid "Genetic linkage analysis"
+msgstr "Analisis hubungan genetik"
+
+#: projects.inc:124
+msgid ""
+"Superlink at Technion helps geneticists all over the world find disease-"
+"provoking genes causing some types of diabetes, hypertension (high blood "
+"pressure), cancer, schizophrenia and many others."
+msgstr ""
+"Superlink at Technion membantu pakar genetik di seluruh dunia mencari gen "
+"penimbul penyakit yang menyebabkan sesetengah kencing manis, tekanan darah "
+"tinggi, kanser, skizofrenia dan lain-lain."
+
+#: projects.inc:138
+msgid ""
+"University of Maryland Center for Bioinformatics and Computational Biology"
+msgstr ""
+"University of Maryland Center for Bioinformatics and Computational Biology"
+
+#: projects.inc:139
+msgid "Life science research"
+msgstr "Penyelidikan sains kehidupan"
+
+#: projects.inc:140
+msgid ""
+"The Lattice Project supplies computing power to scientists at the University "
+"of Maryland studying evolutionary relationships based on DNA sequence data; "
+"bacterial, plasmid, and virus protein sequences; and biological diversity in "
+"nature reserves. "
+msgstr ""
+"Projek Lattice menyumbangkan kuasa perkomputeran kepada ahli-ahli sains di "
+"University of Maryland yang mengaji hubungan evolusi berdasarkan pada data "
+"jujukan DNA; keragaman flora dan fauna di simpanan alam semula jadi."
+
+#: projects.inc:146
+msgid "The Swiss Tropical Institute"
+msgstr "The Swiss Tropical Institute"
+
+#: projects.inc:147
+msgid "Epidemiology"
+msgstr "Epidemiologi"
+
+#: projects.inc:148
+msgid ""
+"Simulation models of the transmission dynamics and health effects of malaria "
+"are an important tool for malaria control. They can be used to determine "
+"optimal strategies for delivering mosquito nets, chemotherapy, or new "
+"vaccines which are currently under development and testing. Such modeling "
+"is extremely computer intensive, requiring simulations of large human "
+"populations with a diverse set of parameters related to biological and "
+"social factors that influence the distribution of the disease. "
+msgstr ""
+"Model simulasi dinamik jangkitan dan kesan kesihatan malaria adalah kaedah "
+"penting untuk mengawal malaria. Model simulasi boleh digunakan untuk "
+"menentukan strategi yang optimum untuk menghantar kelambu, kemoterapi, atau "
+"vaksin baru yang sedang diselidiki dan diuji. Pemodelan begini menggunakan "
+"komputer secara intensif, memerlukan simulasi populasi manusia yang besar "
+"dengan pelbagai set parameter yang berkaitan dengan faktor-faktor biologi "
+"dan sosial yang mempengaruhi taburan penyakit ini. "
+
+#: projects.inc:170
+msgid "University of Washington"
+msgstr "University of Washington"
+
+#: projects.inc:171 projects.inc:179
+msgid "Biology"
+msgstr "Biologi"
+
+#: projects.inc:172
+msgid ""
+"Determine the 3-dimensional shapes of proteins in research that may "
+"ultimately lead to finding cures for some major human diseases. By running "
+"Rosetta at home you will help us speed up and extend our research in ways we "
+"couldn't possibly attempt without your help. You will also be helping our "
+"efforts at designing new proteins to fight diseases such as HIV, Malaria, "
+"Cancer, and Alzheimer's"
+msgstr ""
+"Tentukan bentuk-bentuk protein 3-dimensi yang diselidiki, yang boleh "
+"akhirnya berhasil mencari penawar untuk beberapa penyakit serius. Dengan "
+"beroperasi Rosetta at home, anda membantu mempercepatkan dan melanjutkan "
+"penyelidikan kami dengan kaedah yang kami tidak mungkin cuba tanpa sumbangan "
+"anda. Anda juga membantu kami mereka bentuk protein-protein baru untuk "
+"melawan penyakit seperti HIV, Malaria, Kanser dan penyakit Alzheimer"
+
+#: projects.inc:178
+msgid "University of Vienna"
+msgstr "University of Vienna"
+
+#: projects.inc:180
+msgid ""
+"Calculate similarities between proteins. SIMAP provides a public database of "
+"the resulting data, which plays a key role in many bioinformatics research "
+"projects."
+msgstr ""
+"Kira persamaan di antara protein. SIMAP memaparkan pangkalan data awam hasil "
+"data, yang memainkan peranan penting dalam projek-projek penyelidikan "
+"bioinformatik."
+
+#: projects.inc:186
+msgid "Earth Sciences"
+msgstr "Sains Bumi"
+
+#: projects.inc:198
+msgid "Oxford University"
+msgstr "Oxford University"
+
+#: projects.inc:199
+msgid "Climate study"
+msgstr "Kajian iklim"
+
+#: projects.inc:200
+msgid ""
+"Investigate the approximations that have to be made in state-of-the-art "
+"climate models. By running the model thousands of times we hope to find out "
+"how the model responds to slight tweaks to these approximations - slight "
+"enough to not make the approximations any less realistic. This will allow us "
+"to improve our understanding of how sensitive our models are to small "
+"changes and also to things like changes in carbon dioxide and the sulphur "
+"cycle. This will allow us to explore how climate may change in the next "
+"century under a wide range of different scenarios."
+msgstr ""
+
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Sains Fizikal"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+"Pada masa ini kami sedang mengira reka bentuk optimum suatu struktur yang "
+"dipanggil 52 bar truss"
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
+msgid "Astronomy"
+msgstr "Astronomi"
+
+#: projects.inc:225
+msgid ""
+"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
+"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
+"Universe. We will measure physical parameters (such as stellar mass surface "
+"density, star formation rate surface density, attenuation, and first-order "
+"star formation history) on a resolved pixel-by-pixel basis using spectral "
+"energy distribution (SED) fitting techniques in a distributed computing mode."
+msgstr ""
+
+#: projects.inc:247
+msgid "University of Texas at Austin"
+msgstr "University of Texas at Austin"
+
+#: projects.inc:248 projects.inc:279
+msgid "Chemistry"
+msgstr "Kimia"
+
+#: projects.inc:249
+msgid ""
+"A common problem in theoretical chemistry, condensed matter physics and "
+"materials science is the calculation of the time evolution of an atomic "
+"scale system where, for example, chemical reactions and/or diffusion occur. "
+"Generally the events of interest are quite rare (many orders of magnitude "
+"slower than the vibrational movements of the atoms), and therefore direct "
+"simulations, tracking every movement of the atoms, would take thousands of "
+"years of computer calculations on the fastest present day computer before a "
+"single event of interest can be expected to occur. Our research group is "
+"interested in calculating the long time dynamics of systems."
+msgstr ""
+
+#: projects.inc:262
+msgid "University of Illinois at Urbana-Champaign"
+msgstr "University of Illinois at Urbana-Champaign"
+
+#: projects.inc:264
+msgid ""
+"The goal of Cosmology at Home is to search for the model that best describes "
+"our Universe and to find the range of models that agree with the available "
+"astronomical particle physics data."
+msgstr ""
+"Cosmology at Home bertujuan mencari model terbaik yang menggambarkan Alam "
+"Semesta kita, dan mencari lingkungan model yang bersetuju degan data fizik "
+"partikel astronomi sedia ada."
+
+#: projects.inc:270
+msgid "Rensselaer Polytechnic Institute"
+msgstr "Rensselaer Polytechnic Institute"
+
+#: projects.inc:272
+msgid ""
+"The goal of Milkyway at Home is to create a highly accurate three dimensional "
+"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
+"Survey."
+msgstr ""
+"Matlamat Milkyway at Home adalah untuk mewujudkan model tiga dimensi galaksi "
+"Bima Sakti yang sangat tepat dengan menggunakan data yang dikumpul oleh "
+"Kajian Sloan Digital Sky."
+
+#: projects.inc:278
+msgid "Leiden University, The Netherlands"
+msgstr "Leiden University, The Netherlands"
+
+#: projects.inc:280
+msgid ""
+"Surface science calculations using Classical Dynamics. Leiden Classical "
+"allows volunteers, students and other scientist to submit their personal "
+"calculations to the grid. Each user has his own personal queue for Classical "
+"Dynamics jobs. In this way students have used the grid to simulate liquid "
+"argon, or to test the validity of the ideal gas law by actually doing the "
+"simulations through the grid."
+msgstr ""
+
+#: projects.inc:294
+msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
+msgstr "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
+
+#: projects.inc:295
+msgid "Astrophysics"
+msgstr "Astrofizik"
+
+#: projects.inc:296
+msgid ""
+"Search for spinning neutron stars (also called pulsars) using data from the "
+"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
+"observatory. Einstein at Home is a World Year of Physics 2005 project "
+"supported by the American Physical Society (APS) and by a number of "
+"international organizations."
+msgstr ""
+
+#: projects.inc:310 projects.inc:318
+msgid "CERN (European Organization for Nuclear Research)"
+msgstr "CERN (European Organization for Nuclear Research)"
+
+#: projects.inc:311 projects.inc:319
+msgid "Physics"
+msgstr "Fizik"
+
+#: projects.inc:312
+msgid ""
+"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
+"European Organization for Nuclear Research, the world's largest particle "
+"physics laboratory. It is the most powerful instrument ever built to "
+"investigate on particles proprieties. LHC at home runs simulations to improve "
+"the design of LHC and its detectors."
+msgstr ""
+
+#: projects.inc:320
+msgid ""
+"This project uses CERN-developed virtual machine technology for full-fledged "
+"LHC event physics simulation on volunteer computers. Requires that you "
+"install VirtualBox on your computer"
+msgstr ""
+"Projek ini menggunakan teknologi alam maya yang dimajukan oleh CERN untuk "
+"simulasi fizik peristiwa LHC sepenuhnya di komputer sukarelawan. Anda perlu "
+"memasang VirtualBox di komputer anda"
+
+#: projects.inc:326
+msgid "University of California, Berkeley"
+msgstr "University of California, Berkeley"
+
+#: projects.inc:327
+msgid "Astrophysics, astrobiology"
+msgstr "Astrofizik, astrobiologi"
+
+#: projects.inc:328
+msgid ""
+"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
+"goal is to detect intelligent life outside Earth. One approach, known as "
+"radio SETI, uses radio telescopes to listen for narrow-bandwidth radio "
+"signals from space. Such signals are not known to occur naturally, so a "
+"detection would provide evidence of extraterrestrial technology."
+msgstr ""
+
+#: projects.inc:342
+msgid "Bielefeld University of Applied Sciences"
+msgstr "Bielefeld University of Applied Sciences"
+
+#: projects.inc:343
+msgid "Chemical engineering and nanotechnology"
+msgstr "Kejuruteraan kimia dan nanoteknologi"
+
+#: projects.inc:344
+msgid ""
+"The study of molecular magnets and controlled nanoscale magnetism. These "
+"magnetic molecules may be used to develop tiny magnetic switches, with "
+"applications in medicine (such as local tumor chemotherapy) and "
+"biotechnology."
+msgstr ""
+
+#: projects.inc:351
+msgid "Multiple applications"
+msgstr "Pelbagai aplikasi"
+
+#: projects.inc:356
+msgid "Chinese Academy of Sciences"
+msgstr "Chinese Academy of Sciences"
+
+#: projects.inc:357
+msgid "Physics, biochemistry, and others"
+msgstr "Fizik, biokimi dan lain-lain"
+
+#: projects.inc:358
+msgid ""
+"The objective of CAS at home is to encourage and assist scientists in China to "
+"adopt the technologies of volunteer computing and volunteer thinking for "
+"their research."
+msgstr ""
+
+#: projects.inc:365
+msgid "Mathematics, physics, evolution"
+msgstr "Matematik, fizik, evolusi"
+
+#: projects.inc:366
+msgid ""
+"Yoyo at home is an adapter between BOINC and several existing volunteer "
+"computing projects: ECM, Muon, Evolution at home, and distributed.net"
+msgstr ""
+"Yoyo at home adalah penyesuai di antara BOINC dan beberapa projek perkomputeran "
+"sukarelawan sedia ada: ECM, Muon, Evolution at home, dan distributed.net"
+
+#: projects.inc:371 projects.inc:527
+msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
+msgstr "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
+
+#: projects.inc:372
+msgid "European research projects"
+msgstr "Projek-projek penyelidikan Eropah"
+
+#: projects.inc:373
+msgid ""
+"The EDGeS at Home Beta project integrates volunteer computing into the service "
+"grid network of Europe by allowing service grids to send workunits to be "
+"processed by the volunteers of this project. The scientific projects covered "
+"by the project include math, physics, biology, etc."
+msgstr ""
+
+#: projects.inc:379
+msgid "Spanish universities and research centers"
+msgstr "University dan pusat penyelidikan Sepanyol"
+
+#: projects.inc:380
+msgid "Various Spanish research projects"
+msgstr "Pelbagai projek penyelidikan Sepanyol"
+
+#: projects.inc:381
+msgid "Research in physics, material science, and biomedicine"
+msgstr "Penyelidikan fizik, sains bahan dan bioper"
+
+#: projects.inc:387
+msgid "IBM Corporate Citizenship"
+msgstr "IBM Corporate Citizenship"
+
+#: projects.inc:388
+msgid "Medical, environmental and other humanitarian research"
+msgstr "Penyelidikan perubatan, alam sekitar dan kemanusiaan"
+
+#: projects.inc:389
+msgid ""
+"To further critical non-profit research on some of humanity's most pressing "
+"problems by creating the world's largest volunteer computing grid. Research "
+"includes HIV-AIDS, cancer, tropical and neglected diseases, solar energy, "
+"clean water and many more."
+msgstr ""
+
+#: projects.inc:395
+msgid "Mathematics, computing, and games"
+msgstr "Matematik, perkomputeran dan permainan"
+
+#: projects.inc:401
+msgid "Computer Science"
+msgstr "Sains komputer"
+
+#: projects.inc:409
+msgid "Mathematics, Physics, Artificial Intelligence"
+msgstr "Matematik, Fizik, Kercerdesan Buatan"
+
+#: projects.inc:410
+msgid "Simulation of quantum computing; Goldbach's conjecture."
+msgstr "Simulasi perkomputeran kuantum; Konjektur Goldbach."
+
+#: projects.inc:450 projects.inc:458
+msgid "Cryptography"
+msgstr "Kriptografi"
+
+#: projects.inc:459
+msgid ""
+"Attempt to decode 3 original Enigma messages. The signals were intercepted "
+"in the North Atlantic in 1942 and are believed to be unbroken."
+msgstr ""
+"Percubaan untuk memecah kod 3 mesej Enigma asal. Isyarat dipintas di "
+"Atlantik Utara di 1942 dan dipercayai belum dipecah."
+
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
+msgid "Mathematics"
+msgstr "Matematik"
+
+#: projects.inc:466
+msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
+msgstr ""
+"Mendakami Konjektur Collatz, satu konjektur matematik yang belum dapat "
+"diselesaikan"
+
+#: projects.inc:471
+msgid "California State University Fullerton"
+msgstr "California State University Fullerton"
+
+#: projects.inc:472
+msgid "Factorization of large integers"
+msgstr ""
+"\n"
+"Pemfaktoran integer besar"
+
+#: projects.inc:473
+msgid ""
+"NFS at Home is a research project that uses Internet-connected computers to do "
+"the lattice sieving step in the Number Field Sieve factorization of large "
+"integers. As a young school student, you gained your first experience at "
+"breaking an integer into prime factors, such as 15 = 3 * 5 or 35 = 5 * 7. "
+"NFS at Home is a continuation of that experience, only with integers that are "
+"hundreds of digits long."
+msgstr ""
+
+#: projects.inc:479
+msgid ""
+"Vilnius Gediminas Technical University and Kaunas University of Technology "
+"(Lithuania)"
+msgstr ""
+"Vilnius Gediminas Technical University and Kaunas University of Technology "
+"(Lithuania)"
+
+#: projects.inc:480
+msgid "Software testing"
+msgstr ""
+"\n"
+"Pengujian perisian"
+
+#: projects.inc:481
+msgid ""
+"The aim of this project is to provide a powerful distributed computing "
+"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
+"well as others Lithuanian academic institutions. Current applications "
+"involve the study of Monte-Carlo based software testing."
+msgstr ""
+
+#: projects.inc:503
+msgid "Mathematical Institute of Leiden University / Kennislink"
+msgstr "Mathematical Institute of Leiden University / Kennislink"
+
+#: projects.inc:505
+msgid ""
+"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
+"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
+"product of the distinct prime factors of n. The ABC conjecture says that "
+"there are only finitely many a,b,c such that log(c)/log(rad(abc)) > h for "
+"any real h > 1. The ABC conjecture is currently one of the greatest open "
+"problems in mathematics. If it is proven to be true, a lot of other open "
+"problems can be answered directly from it."
+msgstr ""
+
+#: projects.inc:513
+msgid ""
+"Primegrid has multiple projects searching for different forms of very large "
+"prime numbers, including searching for the largest known prime number."
+msgstr ""
+"Primegrid mempunyai pelbagai projek yang mencari pelbagai bentuk nombor "
+"perdana yang sangat besar, termasuk mencari nombor perdana paling besar yang "
+"diketahui."
+
+#: projects.inc:519
+msgid "Hochschule RheinMain University of Applied Sciences"
+msgstr "Hochschule RheinMain University of Applied Sciences"
+
+#: projects.inc:521
+msgid ""
+"Search for counterexamples to two conjectures related to the identification "
+"of prime numbers"
+msgstr ""
+"Mencari contoh balas dua konjektur yang berkenaan dengan pengenalpastian "
+"nombor perdana"
+
+#: projects.inc:529
+msgid ""
+"Find all the generalized binary number systems (in which bases are matrices "
+"and digits are vectors) up to dimension 11."
+msgstr ""
+"Cari semua sistem nombor binari umum (di mana nombor asas adalah matriks dan "
+"digit adalah vektor) sehingga 11 dimensi."
+
+#: ../html/inc/news.inc:40
+msgid "Comment"
+msgstr "Komen"
+
+#: ../html/inc/news.inc:111
+#, php-format
+msgid "News is available as an %sRSS feed%s"
+msgstr "Berita boleh didapati sebagai %ssuapan RSS%s"
diff --git a/locale/nb/BOINC-Manager.mo b/locale/nb/BOINC-Manager.mo
index 17803bd..9a1ef2f 100644
Binary files a/locale/nb/BOINC-Manager.mo and b/locale/nb/BOINC-Manager.mo differ
diff --git a/locale/nb/BOINC-Manager.po b/locale/nb/BOINC-Manager.po
index 019a08f..9a6ba41 100644
--- a/locale/nb/BOINC-Manager.po
+++ b/locale/nb/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2012-09-16 13:49+0000\n"
"Last-Translator: Kenneth <kenneth at skjold.biz>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -214,339 +214,339 @@ msgstr "Koblet til"
msgid "Disconnected"
msgstr "Koblet fra"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Steng %s vinduet"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Steng vindu"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Avslutt %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Varslinger\t Ctrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Vis varslinger"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Prosjekter\t Ctrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Vis prosjekter"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Oppgaver\t Ctrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Vis oppgaver"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Over&føringer\t Ctrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Vis overføringer"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistikk\t Ctrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Vis statistikk"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Diskbruk\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Vis diskbruk"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Enkel &visning\t Ctrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Vis det enkle grafiske grensesnittet."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Legg til prosjekt eller kontobehandler..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "Meld deg på noen eller alle 30+ prosjektene i mange forskningsområder"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Synkroniser med %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Hent gjeldende innstillinger fra %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Legg til et prosjekt..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Legg til et prosjekt"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "S&topp bruken av %s"
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Fjern denne datamaskinen fra kontrollen til kontobehandler."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Alternativer..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Konfigurer visningsvalg og mellomtjenerinnstillinger"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Beregningsinnstillinger..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Konfigurer beregningsinnstillinger"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "Alltid &kjør"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Tillat arbeid uavhengig av innstillinger"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Kjør basert på &innstillinger"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Tillat arbeid ifølge innstillinger"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Hvilemodus"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Stopp arbeid uansett innstillinger"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Alltid bruk grafikkprosessor"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Tillat arbeid med grafikkprosessor uavhengig av innstillinger"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Bruk grafikkprosessor basert på innstillinger"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Tillat arbeid med grafikkprosessor ifølge innstillinger"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Sett grafikkprosessor i hvilemodus"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Stopp arbeid med grafikkprosessor uavhengig av innstillinger"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Nettverksaktivitet alltid tilgjengelig"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Tillat nettverksaktivitet uavhengig av innstillinger"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Nettverkaktivitet basert på innstillinger"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Tillat nettverksaktivitet ifølge innstillinger"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Nettverksaktivitet satt i hvilemodus"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Stopp nettverksaktiviteten til BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Koble til en annen datamaskin som kjører %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Velg datamaskin..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Slå av tilkoblede klienter..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Slå av klienten som er tilkoblet nå"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Kjør &ytelsestest for prosessoren"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Kjører BOINCs ytelsestest for prosessoren"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Gjør nettverkskommunikasjon"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Gjør alle ventende nettverkskommunikasjoner"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "Les konfigurasjonsfil"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Les lokal preferansefil"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Les preferanser fra global_prefs_override.xml"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Start et annet eksempel av %s"
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Start en annen %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Hendelseslogg...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Vis diagnosebeskjeder."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &hjelp"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Vis informasjon om %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s hjelp"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Vis informasjon om %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, fuzzy
msgid "%s &web site"
msgstr "%s &nettside"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Vis informasjon om BOINC og %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Om %s"
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informasjon om lisenser og opphavsrett."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Fil"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Vis"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Verktøy"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Aktivitet"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "A&vansert"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Hjelp"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Stopp bruken av %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -561,12 +561,12 @@ msgstr ""
"\n"
"Vil du stoppe å bruke %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Steng nåværende klient..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -575,27 +575,27 @@ msgstr ""
"%s vil stenge nåværende klient\n"
"og spørre deg om en annen tjener å koble til."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s har lagt til %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Kobler til %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Koblet til %s (%s)"
@@ -630,26 +630,26 @@ msgstr ""
"annet passord enn det du skrev.\n"
"Besøk prosjektets nettside og følg instruksjonene."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Kommuniserer med BOINC klient. Vennligst vent.."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Avslutt %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "A&vslutt %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Kommuniserer"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Avbryt"
@@ -805,7 +805,7 @@ msgstr "%s er koblet fra internett."
msgid "%s failed to disconnected from the Internet."
msgstr "%s kunne ikke koble fra internett."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -826,7 +826,7 @@ msgstr ""
" - kontakt administratoren for å legge deg til 'boinc_master'\n"
" brukergruppe."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -835,16 +835,16 @@ msgstr ""
"%s eieskap eller rettigheter er ikke satt ordentlig, installer %s på nytt.\n"
"(Feilkode %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr "ved "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -852,68 +852,68 @@ msgstr ""
"Omstart kreves for å kjøre BOINC ordentlig.\n"
"Vennligst start datamaskinen om igjen."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC behandler"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINCbehandleren var automatisk startet av operativsystemet"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Start BOINC så bare systemkurvikonet er synlig"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Mappe som inneholder BOINCklientens programfil"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINCs datamappe"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Vertsnavn eller IP adresse"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC portnummer"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Passord"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Start BOINC med disse valgfrie argumentene"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "Deaktiver BOINC sikkerhet brukere og rettigheter"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"sett skin feilsøkingsmodus for å aktivere skin behandlerens feilbeskjeder."
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "Flere eksemplarer av BOINC behandleren er tillatt"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Ikke brukt: løsning for bug i XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Automatisk gjenkjenning)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Ukjent)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Brukerdefinert)"
@@ -940,7 +940,7 @@ msgid "E&xit"
msgstr "Av%slutt"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Gjennoppta"
@@ -1099,74 +1099,74 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "ugyldig flyttall "
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "Ugyldig tid, formatet er TT:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "Ugyldig tids intervall, formatet er TT:MM-TT:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "ugyldig inndata verdi oppdaget"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Validerings feil"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Legg til programmer"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' er ikke en kjørbar applikasjon."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Navn på program å legge til?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Applikasjon navn må slutte med \"%s\""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Bekreftelse"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Innstillinger"
@@ -1178,11 +1178,11 @@ msgid ""
"Click Clear to restore web-based settings (except exclusive apps)."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Fjern"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr ""
@@ -1202,7 +1202,7 @@ msgstr "disk og minne bruk"
msgid "exclusive applications"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1215,7 +1215,7 @@ msgid "close the dialog without saving"
msgstr "lukk vinduet uten å lagre"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Hjelp"
@@ -1265,7 +1265,7 @@ msgid ""
msgstr ""
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minutter"
@@ -1281,7 +1281,7 @@ msgstr "suspender arbeid hvis prosessor bruken overstiger dette nivået"
msgid "percent (0 means no restriction)"
msgstr "prosent (0 betyr ingen begrensning)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Hver dag mellom"
@@ -1289,8 +1289,8 @@ msgstr "Hver dag mellom"
msgid "start work at this time"
msgstr "start arbeid klokken"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "og"
@@ -1298,43 +1298,43 @@ msgstr "og"
msgid "stop work at this time"
msgstr "stopp arbeid klokken"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(ingen begrensning hvis lik)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Mandag"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Tirsdag"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Onsdag"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Torsdag"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Fredag"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Lørdag"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Søndag"
@@ -1355,9 +1355,9 @@ msgstr ""
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr ""
@@ -1366,264 +1366,264 @@ msgstr ""
msgid "% CPU time"
msgstr "% CPU tid"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Generelle alternativer"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Maksimum nedlastingshastighet"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBytes/sek."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Maksimum opplastingshastighet"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "hver"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dager"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Tilkoblings alternativer"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Nettverksbruk tillatt"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Disk bruk"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes diskplass"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes diskplass ledig"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% av total diskplass"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "sekunder"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Minnebruk"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% når datamaskinen er i bruk"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
#, fuzzy, no-c-format
msgid "% when computer is idle"
msgstr "% når datamaskinen er i bruk"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Fjern"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Hendelse logg"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Prosjekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Tid"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Melding"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
#, fuzzy
msgid "&Show only this project"
msgstr "Vis bare dette prosjektet"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
#, fuzzy
msgid "Copy &All"
msgstr "Kopier alt"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
#, fuzzy
msgid "Copy all the messages to the clipboard."
msgstr "Kopier alle meldinger til utklippstavle..."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "Kopier valgte"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
msgstr ""
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
msgstr ""
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Lukk"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Få hjelp med %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "Vis alle meldinger"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Vis meldinger for alle prosjekter"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Bare vis meldinger for valgte prosjekt"
@@ -1664,7 +1664,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr ""
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Avbryt"
@@ -1672,226 +1672,226 @@ msgstr "&Avbryt"
msgid "Don't show this dialog again."
msgstr ""
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "Ikke hent CPU oppgaver"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Prosjekt innstilling "
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "Kontostyring nettside"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
#, fuzzy
msgid "Project has no apps for "
msgstr "Prosjektets nettsider"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr ""
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr ""
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Egenskaper for prosjekt"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Generelle"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Hoved URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Brukernavn"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Team navn"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr ""
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr ""
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr ""
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr ""
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Datamaskin ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Ikke CPU intensiv"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "ja"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Suspendert via GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "nei"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Ikke anmod om mer arbeid"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr ""
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr ""
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "forvalg"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr ""
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr ""
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr ""
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr ""
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Bruker"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Vert"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr ""
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr ""
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr ""
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Egenskaper for oppgave"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Applikasjon"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Arbeidsenhet navn"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr ""
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Tilstand"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Mottatt"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Rapporterings frist"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Resurser"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "CPU tid ved siste sjekkpunkt"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU tid"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr ""
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr ""
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr ""
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Virtuell minne størrelse"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr ""
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Katalog"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Prosess ID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Lokal:"
@@ -1979,7 +1979,7 @@ msgstr ""
msgid "User Name:"
msgstr "Brukernavn:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Passord:"
@@ -2039,19 +2039,19 @@ msgstr ""
"Standardspråk for %s er forandret, for at forandringene skal vises må du "
"starte om %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Velg datamaskin"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr ""
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Vertsnavn:"
@@ -2243,209 +2243,209 @@ msgstr "Forskning"
msgid "Learn about the projects hosted at World Community Grid"
msgstr ""
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Starter klient"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Kobler til klient"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Henter systemstatus; vennligst vent..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "Applikasjon"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "på batterier"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "datamaskinen er i bruk"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "bruker anmodning"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "tid på dag"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU ytelses test er startet "
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "trenger diskplass - sjekk innstillinger"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "datamaskinen er ikke i bruk"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "starter opp"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr ""
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU er opptatt"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr ""
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "ukjent grunn"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU mangler."
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Ny"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Nedlasting feilet"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Laster ned"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (suspendert - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Prosjektet suspendert av bruker"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Oppgave suspendert av bruker"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Suspendert - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr " (suspendert - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Venter på minne"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Venter på delt minne"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Kjører, høy prioritet"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Kjører"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (ikke-CPU-intensiv)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Venter på å kjøre"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Klar til å starte"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
#, fuzzy
msgid " (Waiting for network access)"
msgstr "Venter på minne"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Databehandling feilet"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Opplasting feilet"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Laster opp"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Avbrutt av bruker"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Avbrutt av prosjektet"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Avbrutt: ikke startet innen tidsfristen"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Avbrutt"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr ""
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Klar til å rapportere"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Feil: ugyldig tilstand '%d'"
@@ -2500,64 +2500,64 @@ msgstr "Sjekk brukernavn og passord, og prøv igjen."
msgid "Check the email address and password, and try again."
msgstr "Sjekk e-post adresse og passord, og prøv igjen."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "mer..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Velg et prosjekt"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "For å velge et prosjekt, klikk på navnet eller skriv inn URL nedenfor."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "Prosjekter"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "Nettsted"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
#, fuzzy
msgid "Project URL:"
msgstr "Prosjekt &URL:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr ""
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
"Du har allerede lagt til dette prosjektet. Vennligst velg et annet prosjekt."
@@ -2566,11 +2566,11 @@ msgstr ""
msgid "Communicating with project."
msgstr "Kommuniserer med prosjektet."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr ""
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "En intern tjener feil har oppstått."
@@ -2679,7 +2679,7 @@ msgid "I agree to the terms of use."
msgstr ""
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr ""
#: UnavailablePage.cpp:183
@@ -2770,7 +2770,7 @@ msgstr "'%s' inneholder ikke et gyldig vert navn."
msgid "'%s' does not contain a valid path."
msgstr "'%s' inneholder ikke en gyldig sti."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr ""
@@ -2823,7 +2823,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "Det er ingen meldinger."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Meldinger"
@@ -2838,7 +2838,7 @@ msgid ""
msgstr ""
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3079,135 +3079,135 @@ msgstr "ledig:"
msgid "used by other programs: "
msgstr "i bruk av ande progrmmer:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Bruker total"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Bruker gjennomsnitt"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Vert total"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Vert gjennomsnitt"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Siste oppdatering: %.0f dager siden"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Vis bruker total"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr ""
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Vis bruker gjennomsnitt"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr ""
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Vis vert total"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr ""
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Vis vert gjennomsnitt"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr ""
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Forrige prosjekt"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr ""
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Neste prosjekt >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr ""
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Skjul prosjekt liste"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr ""
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr ""
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Et prosjekt"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr ""
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Alle prosjekt (separat)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr ""
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Alle prosjekt (sammen)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr ""
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Alle prosjekt (sum)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr ""
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistikk "
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr ""
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Vis prosjekt liste"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr ""
@@ -3371,10 +3371,6 @@ msgstr ""
msgid "Deadline"
msgstr ""
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr ""
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Oppgaver"
@@ -3504,41 +3500,41 @@ msgstr ""
msgid "Question"
msgstr "Spørsmål"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Avansert visning...\t Ctrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Vis det grafisk avanserte brukergrensesnittet."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "forvalg"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
@@ -3561,117 +3557,119 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr ""
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr ""
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Ikke bruk mer enn:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "av diskplass"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "av prosessoren"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr ""
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr ""
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr ""
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Kjør alltid)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "Vil du virkelig fjerne alle lokale innstillinger ?"
@@ -3730,117 +3728,117 @@ msgid ""
"(Progress: %.1lf%%, Status: %s)"
msgstr ""
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Du har ingen prosjekt. Vennligst legg til et prosjekt."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Ikke tilgjengelig"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "Oppgaver"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr ""
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr ""
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr ""
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr ""
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Applikasjon: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Applikasjon: Ikke tilgjengelig"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Ikke tilgjengelig"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr ""
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Status: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr ""
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Laster ned arbeid fra tjeneren."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Prosessering suspendert: Kjører på batterier."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Prosessering suspendert:Bruker aktiv."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Prosessering suspendert: Bruker har satt prosessering på pause."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Prosessering suspendert: Tid på dag."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Prosessering suspendert: Ytelsestest kjører."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Prosessering suspendert."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Venter på kontakt med prosjekt tjener."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr ""
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Ingen arbeid tilgjengelig for prosessering"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr ""
@@ -3882,6 +3880,12 @@ msgstr "Vis alle"
msgid "Quit %s"
msgstr "Avslutt %s"
+#~ msgid "Workunit name"
+#~ msgstr "Arbeidsenhet navn"
+
+#~ msgid "invalid float"
+#~ msgstr "ugyldig flyttall "
+
#, fuzzy
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Vis det grafisk avanserte brukergrensesnittet."
diff --git a/locale/nb/BOINC-Project-Generic.po b/locale/nb/BOINC-Project-Generic.po
index 1a89d01..ced9db5 100644
--- a/locale/nb/BOINC-Project-Generic.po
+++ b/locale/nb/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC-prject-generic\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2012-09-16 13:49+0000\n"
"Last-Translator: Kenneth <kenneth at skjold.biz>\n"
"Language-Team: Hjelp andre <kenneth at skjold.biz>\n"
@@ -188,7 +188,7 @@ msgstr "Søk i forumene"
msgid "Advanced search"
msgstr "Avansert søk"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Private meldinger"
@@ -198,8 +198,8 @@ msgstr "Private meldinger"
msgid "Questions and Answers"
msgstr "Spørsmål og svar"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -272,7 +272,7 @@ msgstr "ulest"
msgid "Message %1"
msgstr "Melding"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "skjult"
@@ -478,7 +478,7 @@ msgstr ""
msgid "Thread"
msgstr "Tråd"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Innlegg"
@@ -487,7 +487,7 @@ msgstr "Innlegg"
msgid "Views"
msgstr "Visninger"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Siste innlegg"
@@ -528,7 +528,7 @@ msgid "Home"
msgstr "Hjem"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Arbeid"
@@ -594,9 +594,9 @@ msgid "Created"
msgstr "Opprettet"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -774,7 +774,7 @@ msgstr "Siste kontakt"
msgid "Computer info"
msgstr "Datamaskin informasjon"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Plassering"
@@ -783,9 +783,9 @@ msgstr "Plassering"
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -873,8 +873,8 @@ msgstr "Bare datamaskiner som har vært aktiv de siste 30 dager"
msgid "Computer ID"
msgstr "Datamaskin ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -910,7 +910,7 @@ msgstr "Innboks"
msgid "Write"
msgstr "Skriv"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Send en privat melding"
@@ -1644,7 +1644,7 @@ msgstr ""
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
@@ -1741,9 +1741,9 @@ msgstr "Nøkkelord"
msgid "Find teams with these words in their names or descriptions"
msgstr "Finn team med disse ordene i navnet eller i beskrivelsen."
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1751,7 +1751,7 @@ msgstr "Finn team med disse ordene i navnet eller i beskrivelsen."
msgid "Country"
msgstr "Land"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Type team"
@@ -1779,8 +1779,8 @@ msgstr "Anmodet av deg"
msgid "founder response deadline is %1"
msgstr "grunnleggers svarfrist er %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Ingen"
@@ -1804,27 +1804,27 @@ msgstr "Beskrivelse"
msgid "Web site"
msgstr "Nettside"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Kryss-prosjekt statistikk"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Type"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Meldingstavle"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Tråder"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Bli med i dette teamet "
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1833,79 +1833,79 @@ msgstr ""
"grunnleggeren av et team få tilgang til din epost adresse hvis du blir "
"medlem."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Aksepterer ikke nye medlemmer"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Endring av grunnlegger er anmodet"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Respons av %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Team grunnlegger endring"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Medlemmer"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Grunnlegger"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administratorer"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nye medlemmer, siste dag"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Medlemmer totalt"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "visning"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktive medlemmer"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Medlemmer med kreditt"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrator"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Neste %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Ingen slikt team."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Denne handlingen krever grunnlegger rolle."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Denne handlingen krever team administrator rettigheter"
@@ -1915,7 +1915,7 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1923,47 +1923,47 @@ msgstr ""
"%1Personvern notat%2: hvis du lager et team, vil dine prosjekt preferanser "
"(resurs deling, grafikk preferanser) være synlig for alle."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Team navn, tekst versjon"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ikke bruk HTML tags."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Team navn, HTML versjon"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Du kan bruke %1begrensede HTML tags%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Hvis du ikke kan HTML, la denne boksen være blank."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL til Teamets nettside, hvis det er en nettside"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "uten \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Denne URL'en vil bli linket til, fra teamsiden på dette nettstedet."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Beskrivelse av teamet"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1996,7 +1996,7 @@ msgid "Computers on this account"
msgstr "Datamaskiner på denne kontoen"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Vis"
@@ -2013,8 +2013,8 @@ msgstr "Kryss-prosjekt statistikk"
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Team"
@@ -2044,7 +2044,7 @@ msgstr "Konto informasjon"
msgid "Email address"
msgstr "Epost adresse"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2052,7 +2052,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postnummer"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 medlem siden"
@@ -2072,7 +2072,7 @@ msgstr "passord"
msgid "other account info"
msgstr "annen konto informasjon"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Bruker ID"
@@ -2118,96 +2118,96 @@ msgstr "%1 preferanser"
msgid "Community"
msgstr "Fellesskap"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Slett"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Lag"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 innlegg"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Varsler"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Forlat team"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrer"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(anmodning om grunnlegger endring forestående)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Medlem av team"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "Finn et team"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Grunnlegger men ikke medlem av"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Finn venner"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Venner"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Datamaskiner"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Giver"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Denne personen er en venn"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Kanslere vennskap "
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Anmodning forestående"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Legg til som venn"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2283,7 +2283,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2487,7 +2487,7 @@ msgstr ""
msgid "User of the day"
msgstr "Dagens Bruker"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr ""
@@ -5451,138 +5451,138 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Programmer"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Usent"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "I prosess"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5831,6 +5831,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Du må velge et ikke-blankt team navn"
diff --git a/locale/nb/BOINC-Setup.mo b/locale/nb/BOINC-Setup.mo
index a0732f2..ed20377 100644
Binary files a/locale/nb/BOINC-Setup.mo and b/locale/nb/BOINC-Setup.mo differ
diff --git a/locale/nb/BOINC-Setup.po b/locale/nb/BOINC-Setup.po
index 747f9d9..96a1114 100644
--- a/locale/nb/BOINC-Setup.po
+++ b/locale/nb/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/nb/BOINC-Web.mo b/locale/nb/BOINC-Web.mo
index ee026a7..36dd478 100644
Binary files a/locale/nb/BOINC-Web.mo and b/locale/nb/BOINC-Web.mo differ
diff --git a/locale/nb/BOINC-Web.po b/locale/nb/BOINC-Web.po
index 51dde10..6673334 100644
--- a/locale/nb/BOINC-Web.po
+++ b/locale/nb/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2012-09-16 13:49+0200\n"
"Last-Translator: Kenneth <kenneth at skjold.biz>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -403,17 +403,17 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
#, fuzzy
msgid "Private"
msgstr "privat"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Kunstig intelligens "
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -421,19 +421,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologi og medisin "
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -442,15 +442,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "University of Karlsruhe (Tyskland)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -459,15 +459,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "University of Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -475,15 +475,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Barcelona Biomedical Research Park (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -491,31 +491,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -523,15 +523,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -542,15 +542,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "University of Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologi"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -560,30 +560,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "University of Vienna"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Oxford University"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Klima studie"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -595,17 +595,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-# 75%
-#: projects.inc:196
-#, fuzzy
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomi/Fysikk/Kjemi"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomi"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -615,15 +623,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "University of Texas at Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Kjemi"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -636,33 +644,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -672,15 +680,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -689,15 +697,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (European Organization for Nuclear Research)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fysikk"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -706,22 +714,22 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "University of California, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -730,15 +738,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -746,44 +754,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr ""
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -791,27 +799,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr ""
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -819,50 +827,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -872,17 +880,17 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr ""
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -890,11 +898,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -905,23 +913,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -936,6 +944,11 @@ msgstr ""
msgid "News is available as an %sRSS feed%s"
msgstr ""
+# 75%
+#, fuzzy
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomi/Fysikk/Kjemi"
+
#~ msgid "private"
#~ msgstr "privat"
diff --git a/locale/nl/BOINC-Android.po b/locale/nl/BOINC-Android.po
index 842598d..888ba2b 100644
--- a/locale/nl/BOINC-Android.po
+++ b/locale/nl/BOINC-Android.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2014-01-05 17:50+0000\n"
+"PO-Revision-Date: 2014-01-17 18:16+0000\n"
"Last-Translator: Rene <oskamjr at ziggo.nl>\n"
"Language-Team: nl <LL at li.org>\n"
"Language: nl\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
-"X-POOTLE-MTIME: 1388944257.0\n"
+"X-POOTLE-MTIME: 1389982574.0\n"
#. app global
msgctxt "app_name"
@@ -767,7 +767,7 @@ msgstr "Taaknaam:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr "Verstreken tijd: "
+msgstr "Verstreken tijd:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
diff --git a/locale/nl/BOINC-Manager.mo b/locale/nl/BOINC-Manager.mo
index aa27843..9aa35bf 100644
Binary files a/locale/nl/BOINC-Manager.mo and b/locale/nl/BOINC-Manager.mo differ
diff --git a/locale/nl/BOINC-Manager.po b/locale/nl/BOINC-Manager.po
index 7cb419c..74d696b 100644
--- a/locale/nl/BOINC-Manager.po
+++ b/locale/nl/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-12-18 19:34+0000\n"
+"POT-Creation-Date: 2014-01-13 00:00-0800\n"
+"PO-Revision-Date: 2014-01-17 18:17+0000\n"
"Last-Translator: Rene <oskamjr at ziggo.nl>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: nl\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1387395241.0\n"
+"X-POOTLE-MTIME: 1389982668.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -212,338 +212,338 @@ msgstr "Verbonden"
msgid "Disconnected"
msgstr "Verbinding verbroken"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Sluit het %s venster"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Sluit Venster"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "%s afsluiten"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Berichten\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Berichten weergeven"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projecten\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Projecten weergeven"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Werk\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Werk weergeven"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Over&dracht\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Overdracht weergeven"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistieken\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Statistieken weergeven"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Schijf&gebruik\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Schijfgebruik weergeven"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Een&voudige weergave...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Overschakelen naar de eenvoudige BOINC weergave."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Project of account manager toevoegen..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "Doe mee met één of meerdere verschillende wetenschappelijke projecten"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "%s Bijwerken"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Haal de huidige instellingen op van %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "Project toevoegen..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Een project toevoegen"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&Stop gebruik van %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Stopt het beheer van deze computer m.b.v. een accountmanager."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opties..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Configureer weergave opties en proxy instellingen"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Verwerkings voorkeuren..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configureer de verwerkings voorkeuren"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "We&rk altijd actief"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Werk actief ongeacht de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Werk actief o&p basis van voorkeuren"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Werk actief op basis van de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "Werk onderbreken"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Stop al het werk ongeacht de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "GPU altijd gebruiken"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "GPU actief ongeacht de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "GPU actief o&p basis van voorkeuren"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "GPU actief op basis van de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Onderbreek GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "GPU inactief ongeacht de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "&Netwerkverbinding altijd beschikbaar"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Netwerkverbinding actief ongeacht de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Netwerkverbinding &op basis van voorkeuren"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Netwerkverbinding actief op basis van de persoonlijke voorkeuren"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Netwerkverbinding opgeschort"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Stop de netwerk activiteiten van BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Maak een verbinding met een andere %s computer"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Selecteer computer..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Huidige client afsluiten..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Sluit de huidig verbonden client af"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "CPU &benchmark starten"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Voert de BOINC CPU benchmark uit"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Opnieuw verbinden"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Werk de projecten bij, rapporteer gereed werk, etc"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Configuratie inlezen"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Configuratie inlezen vanuit de cc_config.xml en app_config.xml bestanden"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Lokale voorkeur inlezen"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Lokale voorkeur inlezen vanuit global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Start nog een sessie van %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Een extra %s opstarten"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Logboek...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Diagnostische berichten van de cliënt weergeven."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &help"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Bekijk informatie over het gebruik van de %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s help"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Bekijk informatie over het gebruik van de %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr "%s &website"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Bekijk informatie over BOINC en de %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "Over de %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informatie inzake licentieverlening en auteursrecht."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Bestand"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Weergave"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Projectbeheer"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "P&restaties"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Geavanceerd"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Help"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Stop het gebruik van %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -558,12 +558,12 @@ msgstr ""
"\n"
"Wil je %s verwijderen?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - De huidige client afsluiten..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -572,27 +572,27 @@ msgstr ""
"%s gaat de huidige client afsluiten en je vragen\n"
"naar een 'host' om een andere verbinding te maken."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1738 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1747
#, c-format
msgid "%s has successfully added %s"
msgstr "%s heeft met succes %s toegevoegd"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1886
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1890
#, c-format
msgid "Connecting to %s"
msgstr "Bezig te verbinden met %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "Connected to %s (%s)"
msgstr "Verbonden met %s (%s)"
@@ -629,26 +629,26 @@ msgstr ""
"\n"
"Bezoek a.u.b. de website van het project en volg de instructies."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Aan het communiceren met de BOINC client. Even geduld ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "%s &Sluiten"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "%s &Afsluiten"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Communicatie"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
msgid "Cancel"
msgstr "Annuleren"
@@ -805,7 +805,7 @@ msgstr "%s heeft de internet verbinding verbroken."
msgid "%s failed to disconnected from the Internet."
msgstr "%s kon de internet verbinding niet verbreken."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -826,7 +826,7 @@ msgstr ""
" - neem contact op met de beheerder om je aan de 'boinc_master'\n"
" gebruikersgroep toe te voegen."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -836,16 +836,16 @@ msgstr ""
"s.\n"
"(Foutcode: %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " op "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -853,69 +853,69 @@ msgstr ""
"Er is een herstart nodig om BOINC goed te kunnen uitvoeren.Herstart a.u.b. "
"je computer om het opnieuw te proberen."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:568
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Manager is automatisch opgestart door het besturingssysteem"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:570
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Start BOINC zodat deze alleen zichtbaar is in het systeemvak"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:572
msgid "Directory containing the BOINC Client executable"
msgstr "Map waar de BOINC client zich bevindt"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:573
msgid "BOINC data directory"
msgstr "BOINC data map"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:575
msgid "Host name or IP address"
msgstr "Computer naam of IP adres"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:576
msgid "GUI RPC port number"
msgstr "GUI RPC poortnummer"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:577
msgid "Password"
msgstr "Wachtwoord"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:578
msgid "Startup BOINC with these optional arguments"
msgstr "Start BOINC op met deze opties"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:579
msgid "disable BOINC security users and permissions"
msgstr "schakel de BOINC toegangs- en gebruikersrechten uit"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:580
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"schakel de skin-debugger modus in om fout berichten mogelijk te maken van de "
"skin-manager"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:581
msgid "multiple instances of BOINC Manager allowed"
msgstr "meerdere gelijktijdige sessies van BOINC-Manager mogelijk"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:583
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Niet gebruikt: vanwege fout in Xcode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:801
msgid "(Automatic Detection)"
msgstr "(Automatische Detectie)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:802
msgid "(Unknown)"
msgstr "(Onbekend)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:803
msgid "(User Defined)"
msgstr "(Gedefineerd door gebruiker)"
@@ -942,7 +942,7 @@ msgid "E&xit"
msgstr "Afsluiten"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Hervatten"
@@ -1105,60 +1105,60 @@ msgstr "Berkeley Open Infrastructure for Network Computing"
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "ongeldige waarde gevonden"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "ongeldig nummer"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "ongeldige tijd, opbouw moet zijn UU:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "ongeldige tijds interval, opbouw moet zijn UU:MM-UU:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "ongeldige waarde gevonden"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Geldigheids Fout"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Toe te voegen programma"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' is geen uitvoerbaar bestand."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Exclusief Programma Toevoegen"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Programma naam?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Voeg exclusief programma toe"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Programma naam moet eindigen op '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' staat al in de lijst."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1166,7 +1166,7 @@ msgstr ""
"Weet je zeker dat je de lokale voorkeuren wilt wissen?\n"
"(Dit heeft geen gevolgen voor de exclusieve programma's)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1035
msgid "Confirmation"
msgstr "Bevestiging"
@@ -1222,7 +1222,7 @@ msgid "close the dialog without saving"
msgstr "sluit het venster zonder op te slaan"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:444
msgid "Help"
msgstr "Help"
@@ -1292,7 +1292,7 @@ msgstr "onderbreek het werk als het processor gebruik boven deze waarde komt"
msgid "percent (0 means no restriction)"
msgstr "procent (geen beperking indien 0)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Elke dag tussen"
@@ -1300,7 +1300,7 @@ msgstr "Elke dag tussen"
msgid "start work at this time"
msgstr "start het werk op dit tijdstip"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
msgid "and"
msgstr "en"
@@ -1309,43 +1309,43 @@ msgstr "en"
msgid "stop work at this time"
msgstr "stop het werk op dit tijdstip"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(geen beperkingen indien gelijk)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Alleen op deze dag(en):"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "vink aan om de tijdlimiet voor deze dag in te stellen"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Maandag"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Dinsdag"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Woensdag"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Donderdag"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Vrijdag"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Zaterdag"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Zondag"
@@ -1366,9 +1366,9 @@ msgstr "Gebruik maximaal"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% van de processoren (0 betekent geen beperking)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "gebruik maximaal"
@@ -1377,74 +1377,74 @@ msgstr "gebruik maximaal"
msgid "% CPU time"
msgstr "% CPU tijd"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Algemene opties"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Maximale download waarde"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBytes/sec."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Maximale upload waarde"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Maximale overdacht"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "elke"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dagen"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Minimale werk buffer"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Probeer genoeg taken binnen te halen om deze hoeveelheid dagen te "
"overbruggen"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Maximale aanvullende werk buffer"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "In aanvulling, maximaal taken voor deze hoeveelheid dagen"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Sla bestands verificatie over"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "vink dit aan als je provider bestands indelingen aanpast"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Verbindings opties"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Bevestiging bij het openen van de internet verbinding"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1452,11 +1452,11 @@ msgstr ""
"indien aangevinkt verschijnt er een bevestigings venster voor de verbinding "
"gemaakt wordt"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Verbinding verbreken indien gereed"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1464,111 +1464,111 @@ msgstr ""
"indien aangevinkt wordt de verbinding verbroken als BOINC\n"
"gereed is met bijwerken (van toepassing bij inbel verbinding)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Netwerk beperkingen"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "begintijd netwerk gebruik"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "eindtijd netwerk gebruik"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Schijfgebruik"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "maximaal schijfgebruik door BOINC (in Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes schijfruimte"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Laat minstens"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC moet minimaal deze hoeveelheid ruimte vrij laten (in Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes aan schijfruimte vrij"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC mag maximaal dit percentage van de schijf gebruiken"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% van totaal schijfgebuik"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Controlepunt van werk op schijf opslaan elke"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "seconden"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% van virtueel geheugen"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Geheugengebruik"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% als de computer in gebruik is"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% als de computer niet in gebruik is"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Programma's in het geheugen houden indien gepauzeerd"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "indien aangevinkt worden programma's in het geheugen gehouden"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Pauzeer de processor en het netwerkgebruik als de volgende programma's "
"actief zijn:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Toevoegen..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Voeg een programma toe aan de lijst"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Verwijderen"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Verwijder een programma van de lijst"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Voor geavanceerde opties, raadpleeg het "
@@ -1578,7 +1578,7 @@ msgid "%s - Event Log"
msgstr "%s - Gebeurtenissen Logboek"
#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Project"
@@ -1629,7 +1629,7 @@ msgstr ""
msgid "&Close"
msgstr "Sluiten"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:447
#, c-format
msgid "Get help with %s"
msgstr "Hulp krijgen bij %s"
@@ -1703,223 +1703,223 @@ msgstr "&Annuleren"
msgid "Don't show this dialog again."
msgstr "Laat dit venster niet meer zien."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Download geen taken voor "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Project voorkeuren"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Accountmanager voorkeuren"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Projectapplicaties niet beschikbaar voor "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Clientspecifieke configuratie omvat geen "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " werkverzoek uitgesteld voor"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " werkverzoek interval"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Project eigenschappen van "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Algemeen"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Gebruikersnaam"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Team naam"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Gedeelde bronnen"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Taakverdeling uitgesteld voor"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Bestand downloaden uitgesteld voor"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Bestand uploaden uitgesteld voor"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Computer ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Niet CPU intensief"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "Ja"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Opgeschort via GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "Nee"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Niet om nieuw werk vragen"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Bijwerk verzoek wordt uitgevoerd"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Trickle-up in behandeling"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Locatie hostcomputer"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "standaardwaarde"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Toegevoegd d.m.v. account manager"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Verwijderen als werk gereed is"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Beeindigd"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Punten"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Gebruiker"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Host"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Taakverdeling"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Prioriteit voor taakverdeling"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Factor voor tijdscorrectie"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Eigenschappen van taak "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Programma"
-#: DlgItemProperties.cpp:325
+#: DlgItemProperties.cpp:329
msgid "Workunit name"
msgstr "Bestandsnaam"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Status"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Ontvangen"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Rapporteren voor"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Bronnen"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Geschatte berekenings-grootte"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Processortijd tijdens laatste checkpoint"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Processor tijd"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Verstreken tijd"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Geschatte resterende tijd"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Voortgang"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Grootte virtueel geheugen"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Grootte van taak"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Map"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Proces ID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:431 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Lokaal: "
@@ -2275,23 +2275,23 @@ msgstr "Onderzoek"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Bekijk de projecten die door 'World Community Grid' ondersteund worden"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Cliënt opstarten"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Cliënt wordt verbonden"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Systeem gegevens aan het opvragen; even geduld a.u.b..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Missende applicatie"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2299,184 +2299,184 @@ msgstr ""
"Download en installeer a.u.b. de CoRD applicatie van "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "op accu"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "computer is in gebruik"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "op verzoek van gebruiker"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "tijdstip"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "CPU benchmark loopt"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "schijfruimte nodig - controleer voorkeuren"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "computer is niet in gebruik"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "bezig met opstarten"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "een exclusieve taak loopt"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU is bezet"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "bandbreedte netwerk overschreden"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "op verzoek van het besturings-systeem"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "reden onbekend"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "Ontbrekende GPU, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nieuw"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Downloaden mislukt"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Bezig met downloaden"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (opgeschort - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Project opgeschort door gebruiker"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Werk opgeschort door gebruiker"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Opgeschort - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU opgeschort - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Wacht op het geheugen"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Wacht op gedeeld geheugen"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Bezig met uitvoeren, hoge prioriteit"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Bezig met uitvoeren"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (niet CPU intensief)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Gepauzeerd"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Staat in de wacht"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Taakverdeling wacht: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Taakverdeling wacht)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Wacht op netwerk toegang)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Berekenings fout"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Uploaden mislukt"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Bezig met uploaden"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Afgebroken door gebruiker"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Afgebroken door project"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Afgebroken: niet gestart voor deadline"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Afgebroken: schijf limiet bereikt"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Afgebroken: tijd limiet bereikt"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Afgebroken: geheugen limiet bereikt"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Afgebroken"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Bevestigd"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Staat klaar om te rapporteren"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Fout: ongeldige status '%d'"
@@ -2535,51 +2535,51 @@ msgstr "Controleer het email adres en het wachtwoord en probeer opnieuw."
msgid "more..."
msgstr "meer..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Alles"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Kies een project"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "Klik op de naam om een project te kiezen of vul onder het URL in."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Categorie:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projecten:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Project details"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Onderzoeks-gebied:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organisatie:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Website:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Ondersteunde systemen:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Project URL:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2587,7 +2587,7 @@ msgstr ""
"Dit project heeft mogelijk geen werk voor jouw type computer. Weet je zeker "
"dat je verder wilt gaan?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Je hebt dit project reeds toegevoegd. Kies a.u.b. een ander project."
@@ -2798,7 +2798,7 @@ msgstr "'%s' bezit geen geldige host naam."
msgid "'%s' does not contain a valid path."
msgstr "'%s' bezit geen geldige bestands lokatie."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Opdrachten"
@@ -2851,7 +2851,7 @@ msgstr "Berichten ophalen; even geduld..."
msgid "There are no notices at this time."
msgstr "Op dit moment zijn er geen mededelingen."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Berichten"
@@ -2868,7 +2868,7 @@ msgstr ""
"mogelijk nieuw werk."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3104,135 +3104,135 @@ msgstr "vrij: "
msgid "used by other programs: "
msgstr "gebruikt door anderen: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Gebruikers Totaal"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Gebruikers Gemiddelde"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Computer Totaal"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Computer Gemiddelde"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Laatste update: %.0f dagen geleden"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Gebruikers totaal"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Gebruikers totaal bekijken"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Gebruikers gemiddelde"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Gebruikers gemiddelde bekijken"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Computer totaal"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Computer totaal bekijken"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Computer gemiddelde"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Computer gemiddelde bekijken"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< Vorige &project"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Bekijk de statistieken van het vorige project"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "Volge&nde project >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Bekijk de statistieken van het volgende project"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Verberg project lijst"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Gebruik volledige ruimte voor grafieken"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Weergave modus"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Enkel project"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Bekijk de grafiek van het geselecteerde project"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Alle projecten (apart)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Bekijk alle projecten, per project een aparte grafiek"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Alle projecten (samen)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Bekijk alle projecten samen gebracht in één grafiek"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Alle projecten (som)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Bekijk alle projecten opgeteld in één grafiek"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistieken"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Grafieken aan het bijwerken..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Laat project lijst zien"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Beperk ruimte voor grafieken"
@@ -3558,40 +3558,40 @@ msgstr "Weet je zeker dat je wilt annuleren?"
msgid "Question"
msgstr "Vraag"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Geavanceerd...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Overschakelen naar de geavanceerde weergave."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Skin"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Selecteer de wijze van weergave."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Standaardwaarde"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Berekeningen pauzeren"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Berekeningen hervatten"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Open een venster om berichten van BOINC projecten te bekijken"
@@ -3782,116 +3782,116 @@ msgstr ""
"Weet je zeker dat je de taak '%s' wilt annuleren?\n"
"(Voortgang: %.1lf%%s, Status: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Geen projecten aanwezig. Voeg a.u.b. een project toe."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Niet beschikbaar"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Taken:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Kies de te beheren taak"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Van:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Voortgang van deze taak"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Taak specifieke instructies"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Toon toepassings instructies voor deze taak in een pop-up menu"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Programma: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Programma: Niet beschikbaar"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Niet beschikbaar"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Verstreken: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Nog te gaan (geschat): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Status: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Status aan het opvragen."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Werk wordt gedownload."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Werk opgeschort: Computer op accu."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Werk opgeschort: Gebruiker actief."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Werk opgeschort: Gepauzeerd door gebruiker."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Werk opgeschort: Tijds-instellingen."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Werk opgeschort: Benchmark loopt."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Werk opgeschort."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Wacht op project server verbinding."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Status aan het opvragen"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Geen werk aanwezig"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Client verbinding niet aanwezig"
@@ -3933,6 +3933,9 @@ msgstr "Alles Weergeven"
msgid "Quit %s"
msgstr "%s Sluiten"
+#~ msgid "invalid float"
+#~ msgstr "ongeldige waarde gevonden"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Overschakelen naar de geavanceerde (toegankelijke) weergave."
diff --git a/locale/nl/BOINC-Project-Generic.po b/locale/nl/BOINC-Project-Generic.po
index 5c56b71..5dff162 100644
--- a/locale/nl/BOINC-Project-Generic.po
+++ b/locale/nl/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-12-18 19:29+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-17 18:18+0000\n"
"Last-Translator: Rene <oskamjr at ziggo.nl>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: nl\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1387394972.0\n"
+"X-POOTLE-MTIME: 1389982727.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Nederlands"
@@ -194,7 +194,7 @@ msgstr "Zoek in het forum"
msgid "Advanced search"
msgstr "Uitgebreid zoeken"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Privé berichten"
@@ -204,8 +204,8 @@ msgstr "Privé berichten"
msgid "Questions and Answers"
msgstr "Vraag en Antwoord"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -271,7 +271,7 @@ msgstr "Ongelezen"
msgid "Message %1"
msgstr "Bericht %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "verborgen"
@@ -482,7 +482,7 @@ msgstr "Berichten plaatsen in verborgen onderwerp niet mogelijk."
msgid "Thread"
msgstr "Onderwerp"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Reacties"
@@ -491,7 +491,7 @@ msgstr "Reacties"
msgid "Views"
msgstr "Bekeken"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Laatste reactie"
@@ -529,7 +529,7 @@ msgid "Home"
msgstr "Thuis pagina"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Werk"
@@ -595,9 +595,9 @@ msgid "Created"
msgstr "Aangemaakt"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -775,7 +775,7 @@ msgstr "Laatste contact"
msgid "Computer info"
msgstr "Computer informatie"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Rang"
@@ -784,9 +784,9 @@ msgstr "Rang"
msgid "Avg. credit"
msgstr "Punten gemiddelde"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -874,8 +874,8 @@ msgstr "Alleen actieve computers in de laatste 30 dagen"
msgid "Computer ID"
msgstr "Computer ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -911,7 +911,7 @@ msgstr "Postvak In"
msgid "Write"
msgstr "Schrijven"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Verstuur privé bericht"
@@ -1678,7 +1678,7 @@ msgstr "Rapportage tijd<br />of deadline"
msgid "explain"
msgstr "verklaring"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1770,9 +1770,9 @@ msgstr "Steekwoorden"
msgid "Find teams with these words in their names or descriptions"
msgstr "Zoek teams met deze woorden in hun naam of beschrijving"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1780,7 +1780,7 @@ msgstr "Zoek teams met deze woorden in hun naam of beschrijving"
msgid "Country"
msgstr "Land"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Soort team"
@@ -1809,8 +1809,8 @@ msgstr "Op eigen verzoek"
msgid "founder response deadline is %1"
msgstr "Deadline voor oprichter verloopt op %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Geen"
@@ -1834,27 +1834,27 @@ msgstr "Beschrijving"
msgid "Web site"
msgstr "Website"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Cross-project statistieken"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Soort"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Onderwerpen"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Sluit je aan bij dit team"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1863,79 +1863,79 @@ msgstr ""
"email adres bekend worden bij de team oprichter, indien je jezelf bij een "
"team opgeeft."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Er is op dit moment een ledenstop"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Oprichters wissel aangevraagd"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Reageren voor %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Team oprichter wisselen"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Leden"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Oprichter"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administrator"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nieuwe leden"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Totaal aantal leden"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "bekijk"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Actieve leden"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Leden met punten"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrator"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Vorige %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Volgende %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Team niet gevonden."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Deze actie vereist oprichters rechten."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Deze actie vereist administrator rechten"
@@ -1948,7 +1948,7 @@ msgstr ""
"aanbrengt, worden ze snel overschreven. Pas daarom het %1BOINC-wide team%2 "
"zelf aan."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1956,47 +1956,47 @@ msgstr ""
"%1Let op%2: Als je een team opricht worden je project voorkeuren (gedeelde "
"bronnen, grafische voorkeuren) zichtbaar voor iedereen."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Naam van team, tekst versie"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Gebruik geen HTML codes."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Naam van team, HTML versie"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "%1HTML codes beperkt%2 toegestaan."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Indien je geen HTML kennis hebt, a.u.b. leeg laten."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL van team webpagina, indien aanwezig"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "zonder \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Dit URL zal geplaatst worden op de team pagina hier op de site."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Beschrijving van team"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Accepteer nieuwe leden?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Gebruikers profiel"
@@ -2029,7 +2029,7 @@ msgid "Computers on this account"
msgstr "Computers op dit account"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Bekijk"
@@ -2046,8 +2046,8 @@ msgstr "Cross-project statistieken"
msgid "Account"
msgstr "Account"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Team"
@@ -2076,7 +2076,7 @@ msgstr "Account informatie"
msgid "Email address"
msgstr "Email adres"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2084,7 +2084,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Postcode"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 lid sinds"
@@ -2104,7 +2104,7 @@ msgstr "wachtwoord"
msgid "other account info"
msgstr "ander account informatie"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Gebruikers ID"
@@ -2149,96 +2149,96 @@ msgstr "%1 voorkeuren"
msgid "Community"
msgstr "Gemeenschap"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Verwijder"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Aanmaken"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profiel"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 berichten"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Aankondiging"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Verlaat team"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrator"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(oprichters wissel in aanvraag)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Lid van team"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "vind een team"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Oprichter maar geen lid van"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Vind vrienden"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Vrienden"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Computers"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donateur"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contact"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Dit persoon is een vriend"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Beëindig vriendschap"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "In aanvraag"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Voeg toe als vriend"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "gebruikersnaam mag niet starten of eindigen met een spatie"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "gebruikersnaam mag niet leeg zijn"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "gebruikersnaam mag geen HTML tags bevatten"
@@ -2317,7 +2317,7 @@ msgstr "Verbinden met database mislukt - probeer het later a.u.b. opnieuw"
msgid "Unable to select database - please try again later"
msgstr "Selecteren van database mislukt - probeer het later a.u.b. opnieuw"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Blijf ingelogd op deze computer"
@@ -2522,7 +2522,7 @@ msgstr "vorm of neem deel aan een team"
msgid "User of the day"
msgstr "Gebruiker van de dag"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Server status"
@@ -5662,135 +5662,135 @@ msgstr "Niet actief"
msgid "Disabled"
msgstr "Uitgezet"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Project status"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Server software versie: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programma"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Host computer"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "data-afhankelijke web pagina's"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "upload/download server"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "taakverdeler"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Actief:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Programma functioneert normaal"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Niet actief:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programma of project functioneert niet goed"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Uitgezet:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Programma is stopgezet"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Berekenings status"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "De database server is tijdelijk onbereikbaar"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Taken gereed om te verzenden"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Taken in uitvoering"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Werkeenheden in afwachting van validatie"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Werkeenheden in aanmaak"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Werkeenheden in afwachting van verwijdering"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Taken in afwachting van verwijdering"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Achterstand bestandsoverdracht (uren)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Gebruikers"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "met recentelijke punten"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "met punten"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "geregistreerd in de afgelopen 24 uur"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "huidig aantal GigaFLOPs"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Taken per applicatie"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "applicatie"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "niet verzonden"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "in uitvoering"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "gem. looptijd van de laatste 100 resultaten in u (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "gebruikers in laatste 24u"
@@ -6068,6 +6068,10 @@ msgstr "Nieuwe oprichter?"
msgid "Change founder"
msgstr "Oprichter wijzigen"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Er zijn geen gebruikers om het team naar te verplaatsen."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Je moet een naam invullen voor je team"
diff --git a/locale/pl/BOINC-Android.po b/locale/pl/BOINC-Android.po
index 56a9642..9c875a6 100644
--- a/locale/pl/BOINC-Android.po
+++ b/locale/pl/BOINC-Android.po
@@ -16,8 +16,9 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1389982574.0\n"
#. app global
msgctxt "app_name"
@@ -53,7 +54,7 @@ msgstr "Projectspecifieke URL invoeren"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Account manager toevoegen"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
@@ -152,9 +153,10 @@ msgctxt "attachproject_login_button_login"
msgid "Sign in"
msgstr "Aanmelden"
+#, fuzzy
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr "Wachtwoord vergeten?"
+msgstr "Wachtwoord Vergeten"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
@@ -200,15 +202,15 @@ msgstr "Aanmaken"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Account manager toevoegen"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Gebruiker:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
@@ -220,7 +222,7 @@ msgstr "... Herhalen:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Toevoegen"
#. error strings
msgctxt "attachproject_error_wrong_name"
@@ -241,7 +243,7 @@ msgstr "Wachtwoorden zijn niet identiek"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Vul a.u.b. URL in"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
@@ -285,7 +287,7 @@ msgstr "Aanmaken van een account is voor dit project niet mogelijk"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "Ongeldig URL"
#. working activity
msgctxt "attachproject_working_back_button"
@@ -334,16 +336,16 @@ msgstr "Aanmelden"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Account manager toevoegen"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Bijwerken"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Tik hier om een project te kiezen."
msgctxt "main_error"
msgid "Whooops"
@@ -384,7 +386,7 @@ msgstr "Voorkeursinstellingen"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Berichten"
msgctxt "tab_desc"
msgid "Navigation"
@@ -395,9 +397,10 @@ msgctxt "status_running"
msgid "Computing"
msgstr "Berekenen"
+#, fuzzy
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr "Dank u voor uw deelname"
+msgstr "Dank u voor uw deelname."
msgctxt "status_paused"
msgid "Suspended"
@@ -418,6 +421,7 @@ msgstr "Onderbroken"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
msgstr ""
+"Klik op afspelen om de netwerkactiviteit en de berekeningen te hervatten."
#, fuzzy
msgctxt "status_launching"
@@ -467,7 +471,7 @@ msgstr "Netwerk"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Energie"
msgctxt "prefs_category_cpu"
msgid "CPU"
@@ -487,11 +491,11 @@ msgstr "Foutoplossing"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
+msgstr "Toon geavanceerde voorkeuren en instellingen..."
msgctxt "prefs_run_on_battery_header"
msgid "Compute on Battery"
-msgstr ""
+msgstr "Rekenen op Batterij"
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
@@ -500,6 +504,8 @@ msgstr "Min. batterijniveau"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC pauzeert de berekening wanneer de batterijlading onder een gegeven "
+"niveau zakt."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
@@ -510,6 +516,8 @@ msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC stopt met bereken boven de aangegeven batterij temperatuur. Het is "
+"niet aanbevolen om deze waarde te wijzigen."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
@@ -525,19 +533,19 @@ msgstr "Min. reserve opslagruimte"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
+msgstr "Hoeveel van de opslagruimte moet er minimaal vrij blijven?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Dagelijkse overdracht limiet"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Beperkt het dagelijkse dataverkeer van BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Taken alleen bijwerken via WiFi"
msgctxt "prefs_autostart_header"
msgid "Autostart"
@@ -545,23 +553,23 @@ msgstr "Autostart"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Laat bericht zien indien opgeschort"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Gebruikte CPU cores"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Beperkt het aantal gebruikte CPU cores voor BOINC berekeningen."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Pauzeer bij CPU gebruik van meer dan"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
-msgstr ""
+msgstr "Bepaalt wanneer BOINC pauzeert bij CPU gebruik door andere apps."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
@@ -569,7 +577,7 @@ msgstr "CPU limiet"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Beperkt de CPU tijd gebruikt door BOINC voor berekeningen."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
@@ -577,19 +585,19 @@ msgstr "Geheugen limiet"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Beperkt de gebruikte hoeveelheid geheugen gebruikt door taken."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC Client log tekens"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "GUI log level"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Specificeert uitgebreidheid van GUI log berichten."
msgctxt "prefs_unit_mb"
msgid "MB"
@@ -621,9 +629,10 @@ msgctxt "projects_icon"
msgid "Project icon"
msgstr "Project icoon"
+#, fuzzy
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr "Punten"
+msgstr "Punten:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
@@ -640,40 +649,40 @@ msgstr "Onderbroken door gebruiker"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Krijgt geen nieuwe taken"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Project beëindigd - OK om te verwijderen "
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "Wordt verwijderd als taken klaar zijn"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Bijwerkverzoek in behandeling"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Bijwerkverzoek is bezig"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Trickle up bericht in behandeling"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Communicatie gepland over:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Project opdrachten:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Bezoek website"
msgctxt "projects_control_update"
msgid "Update"
@@ -701,19 +710,19 @@ msgstr "Nieuwe taken toestaan"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Resetten"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Accountmanager opdrachten:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Bijwerken"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Uitzetten"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
@@ -722,11 +731,11 @@ msgstr "Project verwijderen?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Weet je zeker dat je"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "uit BOINC wilt verwijderen?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
@@ -734,36 +743,37 @@ msgstr "Verwijderen"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Project resetten"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Weet je zeker dat je"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Resetten"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Accountmanager uitzetten"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Weet je zeker dat je wilt stoppen met het gebruik van"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Uitzetten"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
msgstr "Taaknaam:"
+#, fuzzy
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr "Verstreken tijd: "
+msgstr "Verstreken tijd:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
@@ -789,9 +799,10 @@ msgctxt "tasks_result_compute_error"
msgid "computation error"
msgstr "verwerkingsfout"
+#, fuzzy
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr "uploaden..."
+msgstr "uploaden"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
@@ -817,13 +828,15 @@ msgctxt "tasks_active_suspended"
msgid "suspended"
msgstr "onderbroken"
+#, fuzzy
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr "onderbreken..."
+msgstr "onderbreken"
+#, fuzzy
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr "onderbreken..."
+msgstr "onderbreken"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
@@ -901,7 +914,7 @@ msgstr "Bestand:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Opnieuw verzenden"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
@@ -918,7 +931,7 @@ msgstr "Afbreken"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Berichten inlezen..."
#. eventlog tab strings
msgctxt "eventlog_loading"
@@ -956,121 +969,121 @@ msgstr "Gebruiker is actief."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Niet binnen berekenings-tijdsbestek."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC benchmarkt je apparaat…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Geen vrije schijfruimte over."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Geplande CPU beperking."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Geen recente gebruikers activiteit."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Initialiseren vertraagd."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Er wordt een exclusieve app uitgevoerd."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Apparaat is bezig met andere apps."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC transfer limiet is bereikt."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Gestopt door Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Niet verbonden met WiFi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
+msgstr "Batterij moet opgeladen worden om berekeningen te hervatten."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Berekeningen worden hervat op batterij niveau van"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "huidig"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Wacht op afkoelen batterij"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Berekeningen hervatten..."
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "handmatig."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Op verzoek van gebruiker"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Om werk te verkrijgen"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Om taken te rapporteren"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Om trickle-up berichten te verzenden"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Op verzoek van accountmanager"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Project instellen"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Op verzoek van project"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Onbekende reden"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Ververs"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Verzend als email"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Naar klembord kopiëren"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Gebeurtenis Log"
msgctxt "menu_exit"
msgid "Exit BOINC"
@@ -1095,7 +1108,7 @@ msgstr "Help"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Terug"
msgctxt "about_title"
msgid "About"
diff --git a/locale/pl/BOINC-Manager.mo b/locale/pl/BOINC-Manager.mo
index 49403ab..35289f7 100644
Binary files a/locale/pl/BOINC-Manager.mo and b/locale/pl/BOINC-Manager.mo differ
diff --git a/locale/pl/BOINC-Manager.po b/locale/pl/BOINC-Manager.po
index cbc9bde..5447db0 100644
--- a/locale/pl/BOINC-Manager.po
+++ b/locale/pl/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-01-20 16:11+0000\n"
"Last-Translator: Pawel <pawel.pbm at gmail.com>\n"
"Language-Team: Ruch Oporu Sekcja Badawcza <marekz at irc.pl>\n"
@@ -216,350 +216,350 @@ msgstr "Połączony"
msgid "Disconnected"
msgstr "Rozłączony"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Zamknij okno %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Zamknij okno"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Zamknij %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Powiadomienia\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Pokaż powiadomienia"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projekty\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Pokaż projekty"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Zadania\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Pokaż zadania"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Przesyła&nie\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Pokaż przesyłane dane"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statystyki\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Pokaż statystyki"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Użycie dysku\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Pokaż użycie dysku"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Widok uproszczony...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Przełącz do widoku uproszczonego."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Dodaj projekt lub menadżera kont..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "Uczestnicz w którymś z ponad 30 projektów w wielu dziedzinach nauki"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Zsynchronizuj z %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Pobierz aktualne ustawienia z %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Dodaj projekt..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Dodaj projekt"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&Przestań używać %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Usuń ten komputer z menadżera kont."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Ustawienia..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Konfiguracja opcji wyglądu i ustawień serwera proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Preferencje przetwarzania..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Konfiguracja opcji przetwarzania"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Uruchamiaj zawsze"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr ""
"Przetwarzanie danych bez względu na ograniczenia wynikające z preferencji"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Uruchamiaj zgodnie z &preferencjami"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr ""
"Przetwarzanie danych zgodnie z ograniczeniami wynikającymi z preferencji"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Wstrzymaj"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Wstrzymanie przetwarzania danych"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Zawsze używaj karty graficznej"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr ""
"Przetwarzanie danych przy użyciu karty graficznej bez względu na "
"ograniczenia wynikające z preferencji"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Używaj karty graficznej zgodnie z preferencjami"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr ""
"Przetwarzanie danych z użyciem karty graficznej zgodnie z ograniczeniami "
"wynikającymi z preferencji"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Wstrzymaj używanie karty graficznej"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr ""
"Wstrzymanie przetwarzania danych przez kartę graficzną bez względu na "
"ustawienia preferencji"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "&Sieć zawsze dostępna"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr ""
"Sieć zawsze dostępna bez względu na ograniczenia wynikające z preferencji"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Dostęp do sieci zgodnie z &preferencjami"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Sieć dostępna zgodnie z ograniczeniami wynikającymi z preferencji."
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Zablokuj dostęp do sieci"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Wstrzymaj wykorzystanie sieci przez BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Połącz z innym komputerem używającym %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Wybierz komputer..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Zamknij podłączonego klienta..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Zamyka obecnie podłączonego klienta BOINC"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Uruchom miernik &wydajności procesora"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Uruchomienie miernika wydajności procesora"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Ponów próby połączeń"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Ponów komunikację sieciową"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "Wczytaj plik konfiguracyjny"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Wczytaj plik preferencji lokalnych"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr ""
"Wczytywanie konfiguracji zawartej w pliku preferencji lokalnych "
"global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Uruchom kolejną instancję %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Uruchom kolejnego %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Dziennik zdarzeń...\t Ctrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Pokaż informacje diagnostyczne."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s - pomoc on-line"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Pokaż informacje on-line na temat %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s - pomoc on-line"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Pokaż informacje on-line na temat %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, fuzzy
msgid "%s &web site"
msgstr "&Strona główna projektu %s"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Pokaż informacje o BOINC oraz %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&O %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informacje dotyczące licencji oraz praw autorskich."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Plik"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Widok"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Opcje"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Aktywność"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Zaawansowane"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Pomoc"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Przestań używać %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -574,12 +574,12 @@ msgstr ""
"\n"
"Czy chcesz przestać używać %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Zamknij obecnie używanego klienta..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -588,28 +588,28 @@ msgstr ""
"%s zamknie obecnie podłączonego klienta,\n"
"i zapyta o nowego hosta do którego ma się podłączyć."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
#, c-format, c-format
msgid "%s has successfully added %s"
msgstr "%s został pomyślnie dołączony do %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Łączenie z %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Połączony z %s (%s)"
@@ -646,26 +646,26 @@ msgstr ""
"\n"
"Odwiedź stronę projektu i postępuj zgodnie z podanymi tam instrukcjami."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Nawiązywanie połączenia z klientem BOINC. Proszę czekać..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "Opuść %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "Zamknij %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Komunikacja"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Anuluj"
@@ -830,7 +830,7 @@ msgstr "%s rozłączył się z internetem."
msgid "%s failed to disconnected from the Internet."
msgstr "%s nie mógł rozłączyć się z internetem."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -851,7 +851,7 @@ msgstr ""
"- skontaktuj się z administratorem aby dodał cię do\n"
"użytkowników grupy 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -861,16 +861,16 @@ msgstr ""
"przeinstalować %s.\n"
"(Kod błędu %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " w "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -878,69 +878,69 @@ msgstr ""
"Aby BOINC działał poprawnie wymagane jest ponowne uruchomienie komputera.\n"
"Wykonaj restart i spróbuj ponownie."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Menadżer BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Menadżer BOINC został uruchomiony automatycznie przez system operacyjny"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Uruchom BOINC tak, aby widoczna była tylko ikona w zasobniku systemowym"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Katalog zawierający plik wykonywalny klienta BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Katalog danych BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Nazwa hosta lub adres IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Numer portu RPC GUI"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Hasło"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Uruchom BOINC z dodatkowymi argumentami"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "zablokuj użytkowników oraz uprawnienia BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"ustaw tryb debugowania skórek aby odblokować komunikaty błędów menadżera "
"skórek"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "zezwolono na wiele instancji Menedżera BOINC"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Nie wykorzystywane: workaround dla błędu w XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Wykrywanie automatyczne)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Nieznany)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Użytkownika)"
@@ -967,7 +967,7 @@ msgid "E&xit"
msgstr "&Zamknij"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Wznów"
@@ -1127,64 +1127,64 @@ msgstr ""
"Otwarta Platforma Obliczeń Rozproszonych BOINC"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "nieprawidłowa wartość float"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "nieprawidłowy czas, prawidłowy format to HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "nieprawidłowy zakres czasu, prawidłowy format to HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "wykryto wprowadzenie nieprawidłowej wartości"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Błąd walidacji"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Aplikacje do dodania"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' nie jest aplikacją wykonywalną."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Dodaj aplikację z wyłącznością"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Nazwa aplikacji do dodania"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Dodaj aplikację z wyłącznością"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Nazwa aplikacji musi kończyć się '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' jest już na liście."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1192,11 +1192,11 @@ msgstr ""
"Czy na pewno chcesz wyczyścić lokalne preferencje?\n"
"(Nie będzie to miało wpływu na aplikacje z wyłącznością.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Potwierdzenie"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferencje"
@@ -1212,11 +1212,11 @@ msgstr ""
"Naciśnij Wyczyść aby przywrócić preferencje z serwera (z wyjątkiem aplikacji "
"z wyłącznością)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Wyczyść"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "Wyczyść lokalne preferencje i zamknij okno"
@@ -1236,7 +1236,7 @@ msgstr "Użycie dysku oraz pamięci"
msgid "exclusive applications"
msgstr "Aplikacje z wyłącznością"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1249,7 +1249,7 @@ msgid "close the dialog without saving"
msgstr "Zamknij okno bez zapisywania wartości"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Pomoc"
@@ -1305,7 +1305,7 @@ msgstr ""
"ilości minut"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minut(y)"
@@ -1322,7 +1322,7 @@ msgstr ""
msgid "percent (0 means no restriction)"
msgstr "procent (0 oznacza brak ograniczeń)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Każdego dnia pomiędzy godzinami"
@@ -1330,8 +1330,8 @@ msgstr "Każdego dnia pomiędzy godzinami"
msgid "start work at this time"
msgstr "początek przetwarzania"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "a"
@@ -1339,43 +1339,43 @@ msgstr "a"
msgid "stop work at this time"
msgstr "koniec przetwarzania"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(równe wartości oznaczają brak ograniczeń)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Dodatkowe warunki dla dni tygodnia:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "Zaznacz aby podać godziny dla tego dnia tygodnia"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Poniedziałek"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Wtorek"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Środa"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Czwartek"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Piątek"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sobota"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Niedziela"
@@ -1396,9 +1396,9 @@ msgstr "W systemach wieloprocesorowych, używaj nie więcej niż"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Używaj nie więcej niż"
@@ -1407,44 +1407,44 @@ msgstr "Używaj nie więcej niż"
msgid "% CPU time"
msgstr "% mocy obliczeniowej procesora"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Opcje ogólne"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Maks. szybkość pobierania"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KB/s"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Maks. szybkość wysyłania"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Przesyłaj maksymalnie"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MB"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "co"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dni"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Minimalny zapas zadań na"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Spróbuj zapewnić odpowiednią ilość zadań aby pracować przez wskazaną liczbę "
@@ -1452,33 +1452,33 @@ msgstr ""
# 80%
# 100%
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Maksymalny zapas zadań na"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Zapewnij odpowiednią ilość zadań maksymalnie na wskazaną liczbę dni"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Pomiń weryfikację za pomocą obrazka"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"Zaznacz jeżeli twój dostawca internetu może modyfikować pliki graficzne w "
"trakcie transferu"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Opcje połączenia"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Potwierdź przed połączeniem z internetem"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1486,11 +1486,11 @@ msgstr ""
"W przypadku zaznaczenia, przed każdorazowym połączeniem z internetem, będzie "
"wyświetlane zapytanie"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Rozłącz z siecią po zakończeniu"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1499,153 +1499,153 @@ msgstr ""
"używania\n"
"(opcja użyteczna tylko dla połączeń modemowych)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Dostęp do sieci dozwolony"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "początek dostępności sieci"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "koniec dostępności sieci"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Użycie dysku"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "Maksymalny obszar dysku dostępny dla BOINC (w GB)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "gigabajtów dysku"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Pozostaw co najmniej"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"BOINC pozostawi co najmniej wskazaną wolną ilość miejsca na dysku (w "
"gigabajtach)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "gigabajtów wolnego obszaru dysku"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "Maksymalny procent obszaru dysku, dostępny dla BOINC"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% obszaru całego dysku"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Zapisywanie na dysku co "
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "sekund"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% pliku wymiany (partycji swap)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Użycie pamięci"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% kiedy komputer jest w użyciu"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% kiedy komputer nie jest w użyciu"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Pozostaw aplikacje w pamięci, kiedy są zatrzymane"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
"W przypadku zaznaczenia, dane zatrzymanych aplikacji pozostaną w pamięci"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Zatrzymaj wykorzystanie procesora i sieci, kiedy uruchomione są poniższe "
"aplikacje:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Dodaj..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Dodaj aplikację do listy"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Usuń"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Usuń aplikację z listy"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Dla zaawansowanych opcji zapoznaj się z"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Dziennik zdarzeń"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Czas"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Wiadomość"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Pokaż tylko ten projekt"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Kopiuj &wszystko"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopiuje wszystkie wiadomości do schowka."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "&Kopiuj wybrane"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1653,7 +1653,7 @@ msgstr ""
"Kopiuje wybrane wiadomości do schowka. Możesz wybrać kilka wiadomości, "
"używając klawiszy Shift lub Command podczas klikania na wiadomości."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1661,24 +1661,24 @@ msgstr ""
"Kopiuje wybrane wiadomości do schowka. Możesz wybrać kilka wiadomości, "
"używając klawiszy Shift lub Ctrl podczas klikania na wiadomości."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Zamknij"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Uzyskaj pomoc dla %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "&Pokaż wszystkie wiadomości"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Pokazuje wiadomości dotyczące wszystkich projektów"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Pokazuje wiadomości związane tylko z wybranym projektem"
@@ -1733,7 +1733,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Zapamiętaj tę decyzję i nie pokazuj tego okna w przyszłości."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Anuluj"
@@ -1741,225 +1741,225 @@ msgstr "&Anuluj"
msgid "Don't show this dialog again."
msgstr "Nie pokazuj tego okna w przyszłości."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Nie pobieraj zadań przez "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Preferencje projektu"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Preferencje menadżera kont"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Projekt nie posiada aplikacji dla "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Konfiguracja klienta wyklucza"
# 88%
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr "pobieranie zadań opóźnione o "
# 90%
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr "odstęp opóźnienia pobierania zadań"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Właściwości projektu "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Ogólne"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Główny adres URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nazwa użytkownika"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nazwa zespołu"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Przydział zasobów"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Wywołanie serwera projektu opóźnione o "
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Pobieranie pliku wstrzymane na"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Wysyłanie pliku wstrzymane na"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Identyfikator komputera"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Niewykorzystujący aktywnie procesora"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "tak"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Wstrzymany za pośrednictwem interfejsu graficznego"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "nie"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Nie pobieraj nowych zadań"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Trwa nawiązywanie połączenia z serwerem projektu"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Wysłane miniwiadomości"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Lokalizacja komputera"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "domyślna"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Dodane przez mendażera kont"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Usuwa po zakończeniu zadania"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Zakończony"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Punktacja"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Użytkownik"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Komputer"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Planowanie"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Planowanie priorytetu"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Korekcja czasu przetwarzania"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Właściwości zadania "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplikacja"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nazwa pliku z danymi"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nazwa"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Stan"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Odebrane"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Termin zaraportowania"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Zasoby"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Szacowany czas przetwarzania"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Czas przetwarzania dla ostatniego punktu kontrolnego"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Czas pracy"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Czas pracy"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Szacowany pozostały czas"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Część wykonana"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Rozmiar pamięci wirtualnej"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Rozmiar zestawu"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Katalog"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "Identyfikator procesu"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Lokalny: "
@@ -2047,7 +2047,7 @@ msgstr "Pozostaw puste jeśli nie wymagane"
msgid "User Name:"
msgstr "Login:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Hasło:"
@@ -2104,12 +2104,12 @@ msgid ""
"effect, you must restart the %s."
msgstr ""
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Wybierz komputer"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2118,7 +2118,7 @@ msgstr ""
"Inna instancja %s już działa na tym komputerze.\n"
"Wybierz klienta do monitorowania."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nazwa komputera:"
@@ -2310,208 +2310,208 @@ msgstr "Badania"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Dowiedz się więcej o projektach funkcjonujących na World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Uruchamianie klienta"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Łączenie z klientem"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Sprawdzanie stan systemu; proszę czekać..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Brakująca aplikacja"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
"Pobierz i zainstaluj aplikację CoRD ze strony http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "zasilanie z baterii"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "komputer jest w użyciu"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "żądanie użytkownika"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "pora dnia"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Testowanie procesora w trakcie"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "potrzeba przestrzeni dyskowej - sprawdź preferencje"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "komputer nie jest w użyciu"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "uruchamianie"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "uruchomiona jest aplikacja z priorytetem wyłączności"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "procesor jest zajęty"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "przekroczono limit przesyłanych danych"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "na żądanie systemu operacyjnego"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "przyczyna nieznana"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "Brak dostępnego GPU, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nowy"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Pobieranie nie powiodło się"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Pobieranie"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (wstrzymany - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projekt wstrzymany przez użytkownika"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Zadanie wstrzymane przez użytkownika"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Wstrzymany - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr " (wstrzymany - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Brak dostępnej pamięci RAM"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Oczekiwanie na zwolnienie współdzielonej pamięci RAM"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Przetwarzany, wysoki priorytet"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Przetwarzany"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (nie wykorzystujący intensywnie CPU)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Oczekujący na uruchomienie"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Gotowy do uruchomienia"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr "(Oczekiwanie: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(Oczekiwanie)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr "(Oczekiwanie na dostęp do sieci)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Błąd przetwarzania"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Wysyłanie nie powiodło się"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Wysyłanie"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Przerwany przez użytkownika"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Przerwany przez serwer projektu"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Przerwany: nie uruchomiono przed terminem"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Przerwany"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Zaraportowany"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Gotowy do zaraportowania"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Błąd: niepoprawny status '%d'"
@@ -2565,56 +2565,56 @@ msgstr "Sprawdź login oraz hasło i spróbuj ponownie."
msgid "Check the email address and password, and try again."
msgstr "Sprawdź adres e-mail oraz hasło i spróbuj ponownie."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "więcej..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Wszystkie"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Wybierz projekt"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Aby wybrać projekt kliknij jego nazwę albo wpisz jego adres URL poniżej."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategorie:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projekty:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Szczegóły projektu"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Obszar badań:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organizacja:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Strona:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Obsługiwane systemy:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Adres projektu:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2622,7 +2622,7 @@ msgstr ""
"Projekt może nie dysponować zadaniami odpowiednimi dla twojego komputera. "
"Czy na pewno chcesz kontynuować?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Jesteś już przyłączony do tego projektu. Wybierz inny projekt."
@@ -2630,11 +2630,11 @@ msgstr "Jesteś już przyłączony do tego projektu. Wybierz inny projekt."
msgid "Communicating with project."
msgstr "Trwa wymiana informacji z serwerem."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Wymagane pliki nie zostały odnalezione na serwerze."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Wystąpił wewnętrzny błąd serwera."
@@ -2743,7 +2743,8 @@ msgid "I agree to the terms of use."
msgstr "Zgadzam się z zasadami użytkowania."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+#, fuzzy
+msgid "I do not agree to the terms of use."
msgstr "Nie zgadzam się z zasadami użytkowania."
#: UnavailablePage.cpp:183
@@ -2833,7 +2834,7 @@ msgstr "'%s' nie zawiera poprawnej nazwy hosta."
msgid "'%s' does not contain a valid path."
msgstr "'%s' nie zawiera poprawnej ścieżki."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Polecenia"
@@ -2886,7 +2887,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "Aktualnie nie ma żadnych powiadomień."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Powiadomienia"
@@ -2903,7 +2904,7 @@ msgstr ""
"i wyniki dla danego projektu."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3141,135 +3142,135 @@ msgstr "wolna przestrzeń: "
msgid "used by other programs: "
msgstr "przestrzeń używana przez inne aplikacje: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Całkowite statystyki uczestnika"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Średnie statystyki uczestnika"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Całkowite statystyki komputera"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Średnie statystyki komputera"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Ostatnia aktualizacja: %.0f dni temu"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Całkowite wyniki uczestnika"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Pokazuje całkowite statystyki uczestnika"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Pokazuje średnie wyniki uczestnika"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Pokazuje bieżące statystyki uczestnika"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Pokazuje całkowite wyniki komputera"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Pokazuje całkowite statystyki komputera."
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Pokazuje średnie wyniki komputera"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Pokazuje średnie statystyki komputera"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Poprzedni projekt"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Pokazuje wykres dla poprzedniego projektu"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Następny projekt >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Pokazuje wykres dla następnego projektu"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Ukryj listę projektów"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Wykorzystuje całą powierzchnię na wykres"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Rodzaj widoku"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Pojedynczy projekt"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Pokazuje wykres dla wybranego projektu"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Wszystkie projekty (osobno)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Pokazuje wykresy dla wszystkich projektów, jeden wykres na projekt"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Wszystkie projekty (razem)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Pokazuje wspólny wykres dla wszystkich projektów"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Wszystkie projekty (łącznie)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Pokazuje wspólny z sumą wszystkich projektów"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statystyki"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Aktualizacja wykresów..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Pokaż listę projeków"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Wykorzystuje mniejszą przestrzeń dla projektów"
@@ -3437,10 +3438,6 @@ msgstr "Pozostało (szacowane)"
msgid "Deadline"
msgstr "Termin"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nazwa"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Zadania"
@@ -3581,40 +3578,40 @@ msgstr "Czy na pewno chcesz anulować?"
msgid "Question"
msgstr "Pytanie"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Widok zaawansowany...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Przełącza do widoku zaawansowanego."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Skórka"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Wybierz wygląd interfejsu."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Domyślna"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Wstrzymaj przetwarzanie"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Wznów przetwarzanie"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Otwiera okno z powiadomieniami z serwera lub z BOINC"
@@ -3637,117 +3634,121 @@ msgid "Click OK to set preferences."
msgstr "Naciśnij OK aby zapisać preferencje."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Naciśnij Wyczyść aby przywrócić preferencje z serwera."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
+#, fuzzy
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr "Dla dodatkowych ustawień wybierze preferencje przetwarzania w "
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "widoku zaawansowanym."
-
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Przetwarzaj dane tylko pomiędzy:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Łącz się z internetem tylko pomiędzy:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Używaj nie więcej niż:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "przestrzeni dysku"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "mocy obliczeniowej procesora"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Przetwarzanie danych podczas zasilania z baterii?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Przetwarzanie danych tylko po bezczynności przez:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+#, fuzzy
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Wyczyść lokalne preferencje i zamknij okno"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Zawsze"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (uruchamiaj zawsze)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Czy na pewno chcesz usunąć wszystkie preferencje lokalne?\n"
@@ -3808,117 +3809,117 @@ msgstr ""
"Czy jesteś pewien, że chcesz przerwać zadanie '%s'?\n"
"(Postęp: %.1lf%%, Status: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Nie uczestniczysz w żadnym projekcie. Przyłącz się do któregoś z nich."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Niedostępne"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Zadania:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Wybierz zadanie"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Z:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Postęp tego zadania"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Polecenia zadania"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Pokazuje menu z poleceniami dla tego zadania"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, c-format, c-format
msgid "Application: %s"
msgstr "Aplikacja: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Aplikacja: niedostępne"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Niedostępne"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Upłynęło: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Pozostało (szacowane): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Status: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Sprawdzanie bieżącego statusu."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Pobieranie danych z serwera."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Przetwarzanie wstrzymane: zasilanie z baterii."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Przetwarzanie wstrzymane: komputer w użyciu."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Przetwarzanie wstrzymane: użytkownik wstrzymał zadanie."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Przetwarzanie wstrzymane: warunek dla pory dnia."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Przetwarzanie wstrzymane: pomiar wydajności komputera."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Przetwarzanie wstrzymane."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Oczekiwanie na połączenie z serwerem projektu."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Sprawdzanie bieżącego statusu"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Brak dostępnych danych do przetwarzania"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Nie można się połączyć z klientem BOINC"
@@ -3961,6 +3962,24 @@ msgstr "Pokaż wszystkie"
msgid "Quit %s"
msgstr "Zakończ %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Nie zgadzam się z zasadami użytkowania."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Naciśnij Wyczyść aby przywrócić preferencje z serwera."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Dla dodatkowych ustawień wybierze preferencje przetwarzania w "
+
+#~ msgid "the Advanced View."
+#~ msgstr "widoku zaawansowanym."
+
+#~ msgid "Workunit name"
+#~ msgstr "Nazwa pliku z danymi"
+
+#~ msgid "invalid float"
+#~ msgstr "nieprawidłowa wartość float"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Pokaż zaawansowany interfejs graficzny."
diff --git a/locale/pl/BOINC-Project-Generic.po b/locale/pl/BOINC-Project-Generic.po
index 2d99dde..c546307 100644
--- a/locale/pl/BOINC-Project-Generic.po
+++ b/locale/pl/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-01-20 16:11+0200\n"
"Last-Translator: Pawel <pawel.pbm at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -197,7 +197,7 @@ msgstr "Zaawansowane wyszukiwanie"
# #######################################
# Private messages
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Prywatne wiadomości"
@@ -207,8 +207,8 @@ msgstr "Prywatne wiadomości"
msgid "Questions and Answers"
msgstr "Pytania i odpowiedzi"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -278,7 +278,7 @@ msgstr "Nieprzeczytana"
msgid "Message %1"
msgstr "Wiadomość %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "ukryte"
@@ -494,7 +494,7 @@ msgstr "Wątek"
# #######################################
# Forum
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Posty"
@@ -503,7 +503,7 @@ msgstr "Posty"
msgid "Views"
msgstr "Wyświetleń"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Ostatni post"
@@ -541,7 +541,7 @@ msgid "Home"
msgstr "Dom"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Praca"
@@ -607,9 +607,9 @@ msgid "Created"
msgstr "Stworzony"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -789,7 +789,7 @@ msgstr "Ostatni kontakt"
msgid "Computer info"
msgstr "Informacje o komputerze"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Pozycja"
@@ -798,9 +798,9 @@ msgstr "Pozycja"
msgid "Avg. credit"
msgstr "Śr. punktów"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -888,8 +888,8 @@ msgstr "Tylko komputery aktywne w ciągu ostatnich 30 dni"
msgid "Computer ID"
msgstr "ID komputera"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -925,7 +925,7 @@ msgstr "Odebrane"
msgid "Write"
msgstr "Napisz"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Wyślij prywatną wiadomość"
@@ -1702,7 +1702,7 @@ msgstr "Czas zgłoszenia<br />lub termin"
msgid "explain"
msgstr "wyjaśnij"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1798,9 +1798,9 @@ msgstr "Słowa kluczowe"
msgid "Find teams with these words in their names or descriptions"
msgstr "Znajdź zespoły z tymi słowami w nazwie lub opisie"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1808,7 +1808,7 @@ msgstr "Znajdź zespoły z tymi słowami w nazwie lub opisie"
msgid "Country"
msgstr "Kraj"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Typ zespołu"
@@ -1836,8 +1836,8 @@ msgstr "Zażądane przez Ciebie"
msgid "founder response deadline is %1"
msgstr "czas na odpowiedź założyciela to %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Żadna"
@@ -1861,27 +1861,27 @@ msgstr "Opis"
msgid "Web site"
msgstr "Strona internetowa"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Statystyki międzyprojektowe"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Typ"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Forum dyskusyjne"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Tematy"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Dołącz do tego zespołu"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1890,79 +1890,79 @@ msgstr ""
"projektu, gdy dołączysz do zespołu jego założyciel otrzyma także dostęp do "
"twojego adresu e-mail."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nie przyjmuje nowych członków"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Zażądano zmiany założyciela"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Odpowiedź od %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Zmiana założyciela zespołu"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Członkowie"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Założyciel"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administratorzy"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Nowi członkowie w ostatnim dniu"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "W sumie członków"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "zobacz"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktywni członkowie"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Członkowie z punktami"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrator"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Poprzedni %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Następny %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Nie ma takiego zespołu."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Operacja wymaga przywilejów założyciela zespołu."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Operacja wymaga przywilejów administratora zespołu."
@@ -1974,7 +1974,7 @@ msgstr ""
"Uwaga: to jest zespół międzyprojektowy. Jeśli dokonasz zmian tutaj, zostaną "
"one nadpisane. Dokonaj zmian w %1ustawieniach międzyprojektowych%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1983,47 +1983,47 @@ msgstr ""
"ustawienia projektu (ustawienia przydziału zasobów i grafiki) będą widoczne "
"publicznie."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nazwa zespołu, wersja tekstowa"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nie używaj znaczników HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nazwa zespołu, wersja HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Możesz używać jedynie %1wybranych znaczników HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Jeżeli nie znasz języka HTML zostaw to pole puste."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Adres URL strony zespołu, jeśli jakąś posiada"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "bez \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Ten adres będzie podany na stronie zespołu."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Opis zespołu"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Akceptuj nowych członków?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil użytkownika"
@@ -2056,7 +2056,7 @@ msgid "Computers on this account"
msgstr "Komputery na tym koncie"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Zobacz"
@@ -2073,8 +2073,8 @@ msgstr "Statystyki międzyprojektowe"
msgid "Account"
msgstr "Konto"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Zespół"
@@ -2103,7 +2103,7 @@ msgstr "Dane konta"
msgid "Email address"
msgstr "Adres email"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "Strona internetowa"
@@ -2111,7 +2111,7 @@ msgstr "Strona internetowa"
msgid "Postal code"
msgstr "Kod pocztowy"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "Uczestnik %1 od"
@@ -2131,7 +2131,7 @@ msgstr "hasło"
msgid "other account info"
msgstr "pozostałe dane konta"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Identyfikator uczestnika"
@@ -2178,96 +2178,96 @@ msgstr "Ustawienia %1"
msgid "Community"
msgstr "Społeczność"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Usuń"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Stwórz"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 postów"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Powiadomienia"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Opuść zespół"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administruj"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(zażądano zmiany założyciela)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Członek zespołu"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "znajdź zespół"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Założyciel, ale nie członek"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Znajdź przyjaciół"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Przyjaciele"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Komputery"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Ofiarodawca"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ta osoba jest przyjacielem"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Anuluj przyjaźń"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Oczekujące zaproszenie"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Dodaj jako przyjaciela"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2348,7 +2348,7 @@ msgstr "Nie można połączyć się z bazą danych - spróbuj ponownie później
msgid "Unable to select database - please try again later"
msgstr "Nie udało się wybrać bazy danych - spróbuj ponownie później"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Pozostań zalogowany z tego komputera"
@@ -2561,7 +2561,7 @@ msgid "User of the day"
msgstr "Uczestnik dnia"
# 92%
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Statusy serwera"
@@ -5631,142 +5631,142 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
# #######################################
# Apps page (apps.php)
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
#, fuzzy
msgid "application"
msgstr "Aplikacje"
# 83%
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Niewysłany"
# 90%
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "W trakcie"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -6017,6 +6017,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/pl/BOINC-Setup.mo b/locale/pl/BOINC-Setup.mo
index 85d4cd2..290c75a 100644
Binary files a/locale/pl/BOINC-Setup.mo and b/locale/pl/BOINC-Setup.mo differ
diff --git a/locale/pl/BOINC-Setup.po b/locale/pl/BOINC-Setup.po
index 23f29bb..d89fe4a 100644
--- a/locale/pl/BOINC-Setup.po
+++ b/locale/pl/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/pl/BOINC-Web.mo b/locale/pl/BOINC-Web.mo
index 2386061..44d08eb 100644
Binary files a/locale/pl/BOINC-Web.mo and b/locale/pl/BOINC-Web.mo differ
diff --git a/locale/pl/BOINC-Web.po b/locale/pl/BOINC-Web.po
index 0168439..856598a 100644
--- a/locale/pl/BOINC-Web.po
+++ b/locale/pl/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-01-20 16:11+0200\n"
"Last-Translator: Pawel <pawel.pbm at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -445,16 +445,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Kognitywistyka i sztuczna inteligencja"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Prywatny"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Sztuczna inteligencja"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -465,19 +465,19 @@ msgstr ""
"inteligencja, która używa sieci semantycznych, przeszukuje bazy części mowy "
"i tagi części mowy w celu naśladowania ludzkich zachowań w rozmowach."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologia i Medycyna"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -486,15 +486,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Uniwersytet w Karlsruhe (Niemcy)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Przewidywanie struktury białek"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -509,15 +509,15 @@ msgstr ""
"nowych leków na podstawie trójwymiarowej struktury białek biologicznie "
"ważnych."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Uniwersytet w Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Badanie białek - oddziaływanie cząsteczek"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -528,15 +528,15 @@ msgstr ""
"jest pogłębienie wiedzy na temat atomowych szczegółów oddziaływania białko-"
"cząstka, a przez to świeżego spojrzenia na odkrywanie nowych leków."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Barcelona Biomedical Research Park (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Symulacje molekularne białek"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -548,15 +548,15 @@ msgstr ""
"procesorach graficznych NVIDIA. Nowe aplikacje biomedyczne, dają możliwość "
"nadania nowej roli biologii obliczeniowej dla badań biomedycznych."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Izrael"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Analiza połączeń genetycznych"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -566,16 +566,16 @@ msgstr ""
"geny powodujące pewne typy cukrzycy, nadciśnienie (wysokie ciśnienie krwi), "
"raka, schizofrenii i wielu innych."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Centrum Bioinformatyki i Biologii Obliczeniowej Uniwersytetu w Maryland"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Badania związane z naukami przyrodniczymi"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -587,15 +587,15 @@ msgstr ""
"sekwencji DNA; sekwencji białek bakterii, plazmidu i wirusów, a także "
"różnorodności biologicznej w rezerwatach przyrody."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Swiss Tropical Institute"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologia"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -614,15 +614,15 @@ msgstr ""
"biologicznych i społecznych, które mają wpływ na rozprzestrzenianie się "
"choroby."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "University of Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologia"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -638,11 +638,11 @@ msgstr ""
"zaprojektowaniu nowych białek, które pomogą walczyć z chorobami takimi jak "
"HIV, Malaria, rak i Alzheimer."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Uniwersytet Wiedeński"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -652,19 +652,19 @@ msgstr ""
"otrzymanych wyników, która odgrywa kluczową rolę w wielu projektach "
"badawczych bioinformatyki."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Nauki o Ziemi"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Uniwersytet Oksfordzki"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Badania klimatu"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -676,17 +676,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-# 75%
-#: projects.inc:196
-#, fuzzy
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomia/Fizyka/Chemia"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomia"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -696,15 +704,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Uniwersytet Teksański w Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Chemia"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -726,12 +734,12 @@ msgstr ""
"dynamiki systemów."
# 95%
-#: projects.inc:240
+#: projects.inc:262
#, fuzzy
msgid "University of Illinois at Urbana-Champaign"
msgstr "Uniwersytet Illinois w Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -741,11 +749,11 @@ msgstr ""
"Wszechświat oraz znalezienie gamy modeli, które zgadzają się z dostępnymi "
"danymi astronomicznymi fizyki cząstek."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Rensselaer Polytechnic Institute"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -755,11 +763,11 @@ msgstr ""
"Drogi Mlecznej korzystając z danych zebranych przez Sloan Digital Sky "
"Survey."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Uniwersytet w Lejdzie, Holandia"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -769,15 +777,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Uniwersytet Wisconsin - Milwaukee, Instytut Maxa Plancka"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofizyka"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -791,15 +799,15 @@ msgstr ""
"Fizyki 2005 wspieranym przez American Physical Society (APS) oraz przez "
"wiele organizacji międzynarodowych."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Europejska Organizacja Badań Jądrowych)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fizyka"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -813,22 +821,22 @@ msgstr ""
"kiedykolwiek zbudowano w celu badania właściwości cząstek. LHC at home "
"prowadzi symulacje w celu poprawienia konstrukcji LHC i jego detektorów."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Uniwersytet Kalifornijski w Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofizyka, astrobiologia"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -843,15 +851,15 @@ msgstr ""
"występują naturalnie, tak więc wykrycie ich dostarczy dowodu istnienia "
"pozaziemskich technologii."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Uniwersytet Nauk Stosowanych w Bielefeld"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Inżynieria chemiczna i nanotechnologia"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -859,19 +867,19 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Wiele aplikacji"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Chińska Akademia Nauk"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Fizyka, biochemia i inne"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -881,11 +889,11 @@ msgstr ""
"stosowania technologii obliczeń komputerowych i ochotników naukowych w "
"swoich badaniach."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matematyka, fizyka, ewolucja"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -893,15 +901,15 @@ msgstr ""
"Yoyo at home jest łącznikiem między BOINC i kilkoma istniejącymi projektami "
"komputerowymi wolontariuszy: ECM, Muon, Evolution at home, and distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI Laboratorium Równoległych i Rozproszonych Systemów (Węgry)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Europejskie projekty badawcze"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -909,27 +917,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Hiszpańskie uniwersytety i centra badawcze"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Różne Hiszpańskie projekty badawcze"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Badania w dziedzinie fizyki, nauki o materiałach i biomedycyny"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -937,27 +945,27 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matematyka, informatyka i gry"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Kryptografia"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -966,24 +974,24 @@ msgstr ""
"zostały przechwycone w na północnym Atlantyku w 1942 roku i nie zostały "
"jeszcze złamane."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matematyka"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "Badania Problemu Collatza - nierozstrzygniętego problemu w matematyce"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "California State University Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Rozkład na czynniki dużych liczb całkowitych"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -999,7 +1007,7 @@ msgstr ""
"NFS at Home to kontynuacja tego doświadczenia przeprowadzana na liczbach "
"składających się z setek cyfr."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1007,11 +1015,11 @@ msgstr ""
"Wileński Uniwersytet Techniczny im. Giedymina i Uniwersytet Techniczny w "
"Kownie (Litwa)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Testowanie oprogramowania"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1019,11 +1027,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Instytut Matematyki Uniwersytetu w Lejdzie / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1034,17 +1042,17 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Hochschule RheinMain University of Applied Sciences"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1052,7 +1060,7 @@ msgstr ""
"Szukanie kontrprzykładów do dwóch hipotez dotyczących identyfikacji liczb "
"pierwszych"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1067,6 +1075,11 @@ msgstr ""
msgid "News is available as an %sRSS feed%s"
msgstr ""
+# 75%
+#, fuzzy
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomia/Fizyka/Chemia"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s dla %s (%s MB)"
diff --git a/locale/pt_BR/BOINC-Android.po b/locale/pt_BR/BOINC-Android.po
index 1fae3e4..41455f8 100644
--- a/locale/pt_BR/BOINC-Android.po
+++ b/locale/pt_BR/BOINC-Android.po
@@ -2,152 +2,155 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2013-10-23 02:42+0000\n"
+"Last-Translator: paladini <fnpaladini at gmail.com>\n"
"Language-Team: pt_BR <LL at li.org>\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1382496175.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "Bezig met laden! Even geduld..."
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "Kies een project:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "Project toevoegen via URL"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "Projectspecifieke URL invoeren:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "Project toevoegen"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Projectspecifieke URL invoeren"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Account manager toevoegen"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "Geen internetverbinding"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Verbinding maken met projectspecifieke server..."
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Project logo."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Vakgebied:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Specifiek vakgebied:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "Omschrijving:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Start:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "Website:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
+msgid "This project supports Android devices"
msgstr ""
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
+msgid "This project does not support Android devices"
msgstr ""
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Gebruiksvoorwaarden voor"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Het aanmaken van een account bij dit project impliceert acceptatie van de "
+"gebruiksvoorwaarden zoals hierboven beschreven."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Aanmeldgegevens van bestaand account gebruiken"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "E-mailadres:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "Naam:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Wachtwoord:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Nieuw bij"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Een account aanmaken voor deelname:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Bezoek projectspecifieke website om een account aan te maken:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Het aanmaken van een account is op dit moment niet mogelijk!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "Aanmaken"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "Aanmelden"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
@@ -155,240 +158,242 @@ msgstr ""
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Verbinding met het project mislukt!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Bijgevoegd"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Account-registratie voor"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "Project:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "E-mailadres:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "Naam:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "Team:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Wachtwoord:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "... Herhalen:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "Aanmaken"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Account manager toevoegen"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Gebruiker:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "Wachtwoord:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "... Herhalen:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Toevoegen"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "Gebruiker niet gevonden"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "Het wachtwoord is te kort"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "Verbinding mislukt"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "Wachtwoorden zijn niet identiek"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Vul a.u.b. URL in"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "Voer uw e-mailadres in"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "Voer een wachtwoord in"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "Voer gebruikersnaam in"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "mislukt"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Gebruikersnaam geweigerd"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "E-mailadres is al in gebruik"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "Project is offline"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "E-mailadres geweigerd"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Wachtwoord geweigerd"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "Aanmaken van een account is voor dit project niet mogelijk"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "Ongeldig URL"
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "Vorige"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "Voltooien"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "Geslaagd"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "Mislukt"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "..."
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "Verbinden"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "Account verifiëren"
msgctxt "attachproject_working_register"
msgid "Register account"
-msgstr ""
+msgstr "Account registreren"
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "Aanmelden"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Account manager toevoegen"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Bijwerken"
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
+msgid "Tab here to choose a project."
msgstr ""
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "Oeps"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"...dit hoort niet te gebeuren!\n"
+"Klik op het icoontje om het opneuw te proberen."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "BOINC-icoon"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Status"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "Projecten"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "Taken"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "Overdrachten"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "Voorkeursinstellingen"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "Berichten"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "Navigatie"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "Berekenen"
msgctxt "status_running_long"
msgid "Thank you for participating."
@@ -396,23 +401,24 @@ msgstr ""
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "Onderbroken"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Niets te doen"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Wachten op taaktoewijzing..."
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "Onderbroken"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
msgstr ""
+"Klik op afspelen om de netwerkactiviteit en de berekeningen te hervatten."
msgctxt "status_launching"
msgid "Starting…"
@@ -420,220 +426,204 @@ msgstr ""
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Kies een project om aan deel te nemen."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Bezig met afsluiten…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Bezig met benchmark..."
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "project afbeelding"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Voorkeuren inlezen..."
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Opslaan"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Voer nieuwe waarde in:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "Selecteer:"
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Algemeen"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Netwerk"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Energie"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "Processor"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Opslag"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Geheugen"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Foutoplossing"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
-
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
+msgstr "Toon geavanceerde voorkeuren en instellingen..."
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
-
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
msgstr ""
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Min. batterijniveau"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC pauzeert de berekening wanneer de batterijlading onder een gegeven "
+"niveau zakt."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Max. batterij temperatuur"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC stopt met bereken boven de aangegeven batterij temperatuur. Het is "
+"niet aanbevolen om deze waarde te wijzigen."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "Max. gebruikte opslagruimte"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr ""
+msgstr "Welk percentage opslagruimte mag BOINC gebruiken op dit apparaat?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "Min. reserve opslagruimte"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
+msgstr "Hoeveel van de opslagruimte moet er minimaal vrij blijven?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Dagelijkse overdracht limiet"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Beperkt het dagelijkse dataverkeer van BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Taken alleen bijwerken via WiFi"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Autostart"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Laat bericht zien indien opgeschort"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Gebruikte CPU cores"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "Beperkt het aantal gebruikte CPU cores voor BOINC berekeningen."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Pauzeer bij CPU gebruik van meer dan"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
-msgstr ""
+msgstr "Bepaalt wanneer BOINC pauzeert bij CPU gebruik door andere apps."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "CPU limiet"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Beperkt de CPU tijd gebruikt door BOINC voor berekeningen."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "Geheugen limiet"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Beperkt de gebruikte hoeveelheid geheugen gebruikt door taken."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC Client log tekens"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "GUI log level"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Specificeert uitgebreidheid van GUI log berichten."
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "Projecten inlezen..."
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Project toevoegen"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Project icoon"
msgctxt "projects_credits_header"
msgid "Credit:"
@@ -641,167 +631,167 @@ msgstr ""
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(op dit apparaat)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(totaal)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Onderbroken door gebruiker"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Krijgt geen nieuwe taken"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Project beëindigd - OK om te verwijderen "
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "Wordt verwijderd als taken klaar zijn"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Bijwerkverzoek in behandeling"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Bijwerkverzoek is bezig"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Trickle up bericht in behandeling"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Communicatie gepland over:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Project opdrachten:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Bezoek website"
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Bijwerken"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Verwijderen"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Pauzeren"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Hervatten"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Geen nieuwe taken"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Nieuwe taken toestaan"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Resetten"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Accountmanager opdrachten:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Bijwerken"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Uitzetten"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Project verwijderen?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Weet je zeker dat je"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "uit BOINC wilt verwijderen?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Verwijderen"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Project resetten"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Weet je zeker dat je"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Resetten"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Accountmanager uitzetten"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Weet je zeker dat je wilt stoppen met het gebruik van"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Uitzetten"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Taaknaam:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Verstreken tijd: "
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(onderbroken)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Deadline:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "nieuw"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "wacht op downloaden"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "downloaden voltooid"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "verwerkingsfout"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
@@ -809,27 +799,27 @@ msgstr ""
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "uploaden voltooid"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "afgebroken"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "uploaden mislukt"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "voltooid"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "loopt"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "onderbroken"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
@@ -841,295 +831,296 @@ msgstr ""
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "onderbroken"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "project onderbroken"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "klaar om te rapporteren"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Taak afbreken?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Taak afbreken:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Afbreken"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Annuleren"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Bevestigingsdialoog"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Overdracht inlezen..."
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Upload"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Download"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "opnieuw over"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "mislukt"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "onderbroken"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "actief"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "in behandeling"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "project wachttijd"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Bestand:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Opnieuw verzenden"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Overdracht afbreken?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "Bestand afbreken:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Afbreken"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Berichten inlezen..."
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Log berichten laden..."
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Berichten van Cliënt"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "GUI berichten"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Log naar klembord gekopieerd."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Logberichten voor BOINC op Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Bewerking onderbroken."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "Verbind het apparaat met een oplader om verder te gaan."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "Gebruiker is actief."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Niet binnen berekenings-tijdsbestek."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC benchmarkt je apparaat…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Geen vrije schijfruimte over."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Geplande CPU beperking."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Geen recente gebruikers activiteit."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Initialiseren vertraagd."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Er wordt een exclusieve app uitgevoerd."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Apparaat is bezig met andere apps."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC transfer limiet is bereikt."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Gestopt door Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Niet verbonden met WiFi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
+msgstr "Batterij moet opgeladen worden om berekeningen te hervatten."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Berekeningen worden hervat op batterij niveau van"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "huidig"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Wacht op afkoelen batterij"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Berekeningen hervatten..."
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "handmatig."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Op verzoek van gebruiker"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Om werk te verkrijgen"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Om taken te rapporteren"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Om trickle-up berichten te verzenden"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Op verzoek van accountmanager"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Project instellen"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Op verzoek van project"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Onbekende reden"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Ververs"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Verzend als email"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Naar klembord kopiëren"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Gebeurtenis Log"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "BOINC afsluiten"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Onderbreek"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Hervatten"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "Over"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Help"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Terug"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "Over"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Versie"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "Berkeley Open Infrastructure for Network Computing"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-
+"© 2003–2013 University of California, Berkeley.\n"
+"All Rights Reserved."
diff --git a/locale/pt_BR/BOINC-Manager.mo b/locale/pt_BR/BOINC-Manager.mo
index 005af0e..efd5f96 100644
Binary files a/locale/pt_BR/BOINC-Manager.mo and b/locale/pt_BR/BOINC-Manager.mo differ
diff --git a/locale/pt_BR/BOINC-Manager.po b/locale/pt_BR/BOINC-Manager.po
index 4ab2922..943a9f2 100644
--- a/locale/pt_BR/BOINC-Manager.po
+++ b/locale/pt_BR/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2012-12-10 19:50+0200\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -214,342 +214,342 @@ msgstr "Conectado"
msgid "Disconnected"
msgstr "Desconectado"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Fechar a janela %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Fechar Janela"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Sair %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Avisos\t Ctrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Exibir avisos"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projetos\t Ctrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Exibir projetos"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Tarefas\t Ctrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Exibir tarefas"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Trans&ferências\t Ctrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Exibir transferências"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Estatísticas\t Ctrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Exibir estatísticas"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Utilização de disco\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Exibir utilização de disco"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Visão Simples...\t Ctrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Exibir a interface gráfica simples."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Adicionar projeto ou gerenciador de contas..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "Voluntários para um ou todos os 30+ projetos em muitas áreas da ciência"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sincronizar com %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Obter configurações atuais de %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Adicionar projeto..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Adicionar projeto"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "In&terromper uso de %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Remover este computador do controle do gerenciador de contas."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr ""
# "proxy" is a known and very used word among computer users on Brazil. I believe translating it will be unbecome and may even confuse users.
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
#, fuzzy
msgid "Configure display options and proxy settings"
msgstr "Configurar opções GUI e de proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Preferências de computação..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configurar preferências de computação"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Executar sempre"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Permitir trabalho não obstante preferências"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Executar baseado em &preferências"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Permitir trabalho conforme preferências"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Suspender"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Interromper trabalho não obstante preferências"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Usar GPU sempre"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Permitir trabalho de GPU não obstante preferências"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Usar GPU baseado em preferências"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Permitir trabalho de GPU conforme preferências"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Suspender GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Interromper trabalho de GPU não obstante preferências"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Atividade de rede sempre disponível"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Permitir atividade de rede não obstante preferências"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Atividade de rede baseada em preferências"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Permitir atividade de rede conforme preferências"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Atividade de rede suspensa"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Interromper atividade de rede do BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Conectar a outro computador executando %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Selecionar computador..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Finalizar cliente conectado..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Finalizar o cliente conectado atual"
# "benchmark" is a known and very used word among computer users on Brazil. It can be translated as "avaliação de desempenho", but I preferred leaving "benchmarks" just for using the same letter &b...
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Executar &benchmarks de CPU"
# "benchmarks" is a known and very used word among computer users on Brazil. It can be translated as "avaliação de desempenho", but I preferred not translating it for convention.
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Executa benchmarks de CPU do BOINC"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Efetuar comunicação de rede"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Efetuar todas as comunicações de rede pendentes"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "Ler arquivo de configuração"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Ler arquivo de preferências locais"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Ler preferências de global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr ""
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr ""
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr ""
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Exibir mensagens de diagnóstico."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &ajuda"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Mostrar informações sobre %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s ajuda"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Mostrar informações sobre o %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Mostrar informações sobre BOINC e %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Sobre %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informações de licenciamento e direitos autorais."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Arquivo"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Ver"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Ferramentas"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Atividade"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "A&vançado"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Ajuda"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr ""
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
#, fuzzy, c-format
msgid ""
@@ -565,12 +565,12 @@ msgstr ""
"\n"
"Deseja desligar-se de %s ?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Finalizar o cliente atual..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -579,28 +579,28 @@ msgstr ""
"%s finalizará o cliente atual\n"
"e o indagará para outra máquina a se conectar."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
#, fuzzy, c-format
msgid "%s has successfully added %s"
msgstr "%s foi incorporado com sucesso a %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Conectando a %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Conectado a %s (%s)"
@@ -637,26 +637,26 @@ msgstr ""
"\n"
"Por favor, visite a página do projeto na internet e siga as instruções."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Comunicando-se com o cliente BOINC. Por favor, aguarde..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Sair %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "S&air %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Comunicação"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Cancelar"
@@ -819,7 +819,7 @@ msgstr "%s desconectou-se da Internet com sucesso."
msgid "%s failed to disconnected from the Internet."
msgstr "%s falhou ao desconectar-se da Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
#, fuzzy, c-format
msgid ""
@@ -841,7 +841,7 @@ msgstr ""
"- contate seu administrador para adicioná-lo ao grupo de usuários\n"
"'mestre_boinc'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
#, fuzzy, c-format
msgid ""
@@ -852,16 +852,16 @@ msgstr ""
"favor, reinstale o BOINC.\n"
"(Código do erro %d)"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ""
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -869,72 +869,72 @@ msgstr ""
"É necessário reiniciar para execução correta do BOINC.\n"
"Por favor, reinicie seu computador e tente novamente."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Gerenciador BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr ""
"Gerenciador BOINC foi inicializado pelo sistema operacional automaticamente"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Inicializa o BOINC tão somente o ícone na bandeja do sistema seja visível"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Diretório contendo o executável do Cliente BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "diretório de dados do BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr ""
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr ""
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
#, fuzzy
msgid "Password"
msgstr "Senha:"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Inicie o BOINC com esses argumentos opcionais"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "desativar usuários e permissões de segurança do BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"definir modo depuração de aparência para ativar mensagens de erro do "
"gerenciador de aparência"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr ""
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Detecção Automática)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Desconhecido)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Definido pelo Usuário)"
@@ -961,7 +961,7 @@ msgid "E&xit"
msgstr "S&air"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr ""
@@ -1119,75 +1119,74 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Infraestrutura Aberta para Computação em Rede Berkeley"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "%OK"
-# float is a variable type in computer programming. It is a known and very used word among computer programmers on Brazil. I believe nobody or only a few people uses it in its translated form; there is no good translation for it in this context. Therefore, translating it may be unbecoming.
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "float inválido"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "tempo inválido, o formato é HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "intervalo de tempo inválido, o formato é HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "detectado valor de entrada inválido"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Erro de Validação"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr ""
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr ""
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr ""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Confirmação"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferências"
@@ -1204,11 +1203,11 @@ msgstr ""
"Clique em Limpar para restaurar configurações baseadas na internet."
# "Clear" can be translated into "Limpar" or "Apagar". Both terms have almost the same meaning. In some contexts "Apagar" fits better, and in other contexts "Limpar" fits better. Since I do not know what context the word will be used, I translated "Clear" as "Limpar".
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Limpar"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "limpar todas as preferências locais e fechar caixa de diálogo"
@@ -1228,7 +1227,7 @@ msgstr "utilização de memória e disco"
msgid "exclusive applications"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1241,7 +1240,7 @@ msgid "close the dialog without saving"
msgstr "fechar caixa de diálogo sem salvar"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Ajuda"
@@ -1299,7 +1298,7 @@ msgstr ""
"número de minutos"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minutos"
@@ -1315,7 +1314,7 @@ msgstr "suspende o trabalho se a utilização do processador exceder este nível
msgid "percent (0 means no restriction)"
msgstr "porcento (0 significa nenhuma restrição)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Todos os dias entre os horários de"
@@ -1323,8 +1322,8 @@ msgstr "Todos os dias entre os horários de"
msgid "start work at this time"
msgstr "inicia o trabalho neste horário"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "e"
@@ -1332,43 +1331,43 @@ msgstr "e"
msgid "stop work at this time"
msgstr "interrompe o trabalho neste horário"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(sem restrição se iguais)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Dia semanal dominante:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "selecione esta caixa para especificar horário para este dia da semana"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Segunda-feira"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Terça-feira"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Quarta-feira"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Quinta-feira"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Sexta-feira"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sábado"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Domingo"
@@ -1389,9 +1388,9 @@ msgstr "Em sistemas multiprocessados, usar ao máximo"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Usar ao máximo"
@@ -1400,78 +1399,78 @@ msgstr "Usar ao máximo"
msgid "% CPU time"
msgstr "% de tempo da CPU"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Opções gerais"
# "download" is a known and very used word among computer users on Brazil, and has no good translation in this context. Translating it may be unbecoming.
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Taxa máxima de download"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBytes/s."
# "upload" is a known and very used term among computer users on Brazil. There is no good translation for it on this context.
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Taxa máxima de upload"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Transferir ao máximo"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "a cada"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dias"
# "buffer" is a known and very used word among computer users on Brazil. There is no good translation for it.
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
#, fuzzy
msgid "Minimum work buffer"
msgstr "Buffer de trabalho adicional"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
# "buffer" is a known and very used word among computer users on Brazil. There is no good translation for it.
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
#, fuzzy
msgid "Max additional work buffer"
msgstr "Buffer de trabalho adicional"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Omitir verificação de arquivos de imagens"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "selecione isso se seu provedor de Internet modifica arquivos de imagens"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Opções de conexão"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Confirmar antes de conectar-se à internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1479,11 +1478,11 @@ msgstr ""
"se selecionado, uma caixa de texto de confirmação será exibida antes de "
"tentar conectar-se à Internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Desconectar quando pronto"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1491,154 +1490,154 @@ msgstr ""
"se selecionado, o BOINC irá desligar quando finalizar o uso de rede\n"
"(relevante somente para conexão discada)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Uso de rede permitido"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "horário de início do uso de rede"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "horário de término do uso de rede"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Utilização de disco"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "o máximo uso de disco pelo BOINC (em Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes de espaço em disco"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Deixar ao menos"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"BOINC deixa ao menos esta quantidade de espaço livre em disco (em Gibabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes de espaço livre em disco"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC usa ao máximo esta porcentagem do espaço total em disco"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% do espaço total em disco"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
#, fuzzy
msgid "Tasks checkpoint to disk at most every"
msgstr "Tarefas verificam disco ao máximo a cada"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "segundos"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% do arquivo de página (espaço de troca)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Utilização de memória"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% quando o computador está em uso"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% quando o computador está ocioso"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Deixar aplicações em memória enquanto suspensas"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "se selecionado, unidades de trabalho suspensas são deixadas em memória"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Registro de Eventos"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projeto"
# "Time" can be translated in several ways. At this context (I know where it will be placed), "Momento" fits very well.
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Momento"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Mensagem"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
#, fuzzy
msgid "&Show only this project"
msgstr "Mostrar somente este projeto"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
#, fuzzy
msgid "Copy &All"
msgstr "Copiar Tudo"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Copiar todas as mensagens para a área de transferência."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "Copiar Seleção"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1647,7 +1646,7 @@ msgstr ""
"selecionar múltiplas mensagens mantendo shift pressionado ou tecla de "
"comando enquanto clica nas mensagens."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1656,25 +1655,25 @@ msgstr ""
"selecionar múltiplas mensagens mantendo pressionado shift ou tecla de "
"controle enquanto clica nas mensagens."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Fechar"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr ""
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "Mostrar todas as mensagens"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Mostrar mensagens de todos os projetos"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Mostrar somente mensagens do projeto selecionado"
@@ -1722,7 +1721,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Lembrar esta decisão e não mostrar esta caixa de diálogo."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Cancelar"
@@ -1730,229 +1729,229 @@ msgstr "&Cancelar"
msgid "Don't show this dialog again."
msgstr "Não mostrar esta caixa de diálogo novamente."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "Não buscar tarefas de CPU"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Preferência do projeto"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "Página do gerenciador de contas na internet"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr ""
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
#, fuzzy
msgid " work fetch deferred for"
msgstr "Busca de trabalho de CPU diferido por"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
#, fuzzy
msgid " work fetch deferral interval"
msgstr "Intervalo de diferimento de busca de trabalho de CPU"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Propriedades do projeto"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Geral"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL mestre"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nome do usuário"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nome do time"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Compartilhamento de recursos"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Escalonador RPC diferido para"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Download de arquivos diferido para"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Upload de arquivos diferido para"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID do computador"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Não-intensivo de CPU"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "sim"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Suspenso via GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "não"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Não solicitar mais trabalho"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Chamada do escalonador em progresso"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr ""
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
#, fuzzy
msgid "default"
msgstr "&Definir Padrão"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Adicionado via gerenciador de contas"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Remover quando tarefas concluídas"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Finalizado"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Crédito"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Usuário"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Máquina"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Escalonamento"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
#, fuzzy
msgid "Scheduling priority"
msgstr "Prioridade de escalonamento da CPU"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Fator de correção de duração"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Propriedades da tarefa"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplicação"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nome da unidade de trabalho"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr ""
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Estado"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Recebido(s)"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Prazo de relatório"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Recursos"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Tempo de CPU no último ponto de verificação"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Tempo de CPU"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Tempo decorrido"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Tempo restante estimado"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Fração concluída"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Tamanho de memória virtual"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Tamanho do conjunto de trabalho"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Diretório"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID do processo"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local:"
@@ -2046,7 +2045,7 @@ msgstr "Deixar estes em branco se desnecessários"
msgid "User Name:"
msgstr "Nome do Usuário:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Senha:"
@@ -2113,19 +2112,19 @@ msgstr ""
"O idioma padrão de %s foi alterado. Você deve reinicializar o %s para que "
"esta alteração tenha efeito."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Selecione o Computador"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr ""
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nome de máquina:"
@@ -2326,210 +2325,210 @@ msgstr ""
msgid "Learn about the projects hosted at World Community Grid"
msgstr ""
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr ""
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
#, fuzzy
msgid "Connecting to client"
msgstr "Reconectando ao cliente."
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr ""
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "Aplicação"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr ""
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
#, fuzzy
msgid "computer is in use"
msgstr "Enquanto o computador estiver em uso"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr ""
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr ""
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr ""
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr ""
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
#, fuzzy
msgid "computer is not in use"
msgstr "Enquanto o computador estiver em uso"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr ""
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr ""
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr ""
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr ""
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
#, fuzzy
msgid "unknown reason"
msgstr "(Desconhecido)"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr ""
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr ""
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr ""
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr ""
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr ""
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr ""
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr ""
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr ""
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr ""
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr ""
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr ""
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr ""
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr ""
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr ""
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr ""
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr ""
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr ""
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr ""
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr ""
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr ""
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr ""
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr ""
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr ""
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr ""
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr ""
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr ""
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr ""
@@ -2577,66 +2576,66 @@ msgstr ""
msgid "Check the email address and password, and try again."
msgstr ""
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr ""
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr ""
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
#, fuzzy
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Para selecionar um gerenciador de contas, clique em seu nome ou \n"
"digite seu URL abaixo."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "Projeto"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "Páginas de internet"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr ""
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr ""
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
@@ -2645,11 +2644,11 @@ msgstr ""
msgid "Communicating with project."
msgstr "Comunicando-se com servidor."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr ""
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
#, fuzzy
msgid "An internal server error has occurred."
msgstr "Ocorreu um erro interno no servidor.\n"
@@ -2735,7 +2734,7 @@ msgid "I agree to the terms of use."
msgstr ""
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr ""
#: UnavailablePage.cpp:183
@@ -2813,7 +2812,7 @@ msgstr ""
msgid "'%s' does not contain a valid path."
msgstr ""
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr ""
@@ -2873,7 +2872,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "Existem novos avisos - clique para visualizar."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr ""
@@ -2888,7 +2887,7 @@ msgid ""
msgstr ""
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
#, fuzzy
@@ -3126,135 +3125,135 @@ msgstr ""
msgid "used by other programs: "
msgstr ""
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr ""
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr ""
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr ""
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr ""
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr ""
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr ""
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr ""
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr ""
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr ""
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr ""
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr ""
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr ""
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr ""
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr ""
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr ""
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr ""
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr ""
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr ""
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr ""
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr ""
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr ""
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr ""
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr ""
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr ""
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr ""
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr ""
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr ""
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr ""
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr ""
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr ""
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr ""
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr ""
@@ -3419,10 +3418,6 @@ msgstr ""
msgid "Deadline"
msgstr ""
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr ""
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr ""
@@ -3550,42 +3545,42 @@ msgstr ""
msgid "Question"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
#, fuzzy
msgid "Display the advanced graphical interface."
msgstr "Exibir a interface gráfica simples."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "&Definir Padrão"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
@@ -3608,118 +3603,120 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr ""
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr ""
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr ""
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr ""
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
#, fuzzy
msgid "of the processor"
msgstr "% de processadores"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr ""
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr ""
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr ""
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr ""
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr ""
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr ""
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr ""
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr ""
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr ""
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr ""
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "Deseja realmente apagar todas as preferências locais ?"
@@ -3780,117 +3777,117 @@ msgid ""
"(Progress: %.1lf%%, Status: %s)"
msgstr ""
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr ""
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr ""
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr ""
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr ""
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr ""
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr ""
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr ""
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, fuzzy, c-format
msgid "Application: %s"
msgstr "Aplicação"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr ""
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr ""
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr ""
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr ""
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr ""
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr ""
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr ""
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr ""
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr ""
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr ""
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr ""
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr ""
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr ""
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr ""
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr ""
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr ""
@@ -3933,6 +3930,13 @@ msgstr ""
msgid "Quit %s"
msgstr "&Sair %s"
+#~ msgid "Workunit name"
+#~ msgstr "Nome da unidade de trabalho"
+
+# float is a variable type in computer programming. It is a known and very used word among computer programmers on Brazil. I believe nobody or only a few people uses it in its translated form; there is no good translation for it in this context. Therefore, translating it may be unbecoming.
+#~ msgid "invalid float"
+#~ msgstr "float inválido"
+
#, fuzzy
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Exibir a interface gráfica simples."
diff --git a/locale/pt_BR/BOINC-Project-Generic.po b/locale/pt_BR/BOINC-Project-Generic.po
index e62654e..e26f73c 100644
--- a/locale/pt_BR/BOINC-Project-Generic.po
+++ b/locale/pt_BR/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -185,7 +185,7 @@ msgstr ""
msgid "Advanced search"
msgstr ""
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr ""
@@ -195,8 +195,8 @@ msgstr ""
msgid "Questions and Answers"
msgstr ""
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -262,7 +262,7 @@ msgstr ""
msgid "Message %1"
msgstr ""
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr ""
@@ -449,7 +449,7 @@ msgstr ""
msgid "Thread"
msgstr ""
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr ""
@@ -458,7 +458,7 @@ msgstr ""
msgid "Views"
msgstr ""
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr ""
@@ -496,7 +496,7 @@ msgid "Home"
msgstr ""
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr ""
@@ -562,9 +562,9 @@ msgid "Created"
msgstr ""
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -740,7 +740,7 @@ msgstr ""
msgid "Computer info"
msgstr ""
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr ""
@@ -749,9 +749,9 @@ msgstr ""
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -839,8 +839,8 @@ msgstr ""
msgid "Computer ID"
msgstr ""
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -876,7 +876,7 @@ msgstr ""
msgid "Write"
msgstr ""
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr ""
@@ -1601,7 +1601,7 @@ msgstr ""
msgid "explain"
msgstr ""
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
@@ -1693,9 +1693,9 @@ msgstr ""
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1703,7 +1703,7 @@ msgstr ""
msgid "Country"
msgstr ""
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr ""
@@ -1731,8 +1731,8 @@ msgstr ""
msgid "founder response deadline is %1"
msgstr ""
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr ""
@@ -1756,105 +1756,105 @@ msgstr ""
msgid "Web site"
msgstr ""
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr ""
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr ""
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr ""
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr ""
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr ""
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr ""
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr ""
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr ""
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr ""
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr ""
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr ""
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr ""
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr ""
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr ""
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr ""
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr ""
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr ""
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr ""
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr ""
@@ -1864,53 +1864,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr ""
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr ""
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr ""
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr ""
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr ""
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr ""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr ""
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
@@ -1943,7 +1943,7 @@ msgid "Computers on this account"
msgstr ""
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr ""
@@ -1960,8 +1960,8 @@ msgstr ""
msgid "Account"
msgstr ""
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr ""
@@ -1990,7 +1990,7 @@ msgstr ""
msgid "Email address"
msgstr ""
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr ""
@@ -1998,7 +1998,7 @@ msgstr ""
msgid "Postal code"
msgstr ""
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr ""
@@ -2018,7 +2018,7 @@ msgstr ""
msgid "other account info"
msgstr ""
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr ""
@@ -2063,96 +2063,96 @@ msgstr ""
msgid "Community"
msgstr ""
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr ""
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr ""
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr ""
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr ""
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr ""
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr ""
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr ""
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr ""
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr ""
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr ""
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr ""
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr ""
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr ""
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr ""
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr ""
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr ""
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr ""
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr ""
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr ""
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr ""
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2226,7 +2226,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2419,7 +2419,7 @@ msgstr ""
msgid "User of the day"
msgstr ""
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr ""
@@ -5224,135 +5224,135 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr ""
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr ""
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr ""
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5598,6 +5598,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
diff --git a/locale/pt_BR/BOINC-Setup.mo b/locale/pt_BR/BOINC-Setup.mo
index f0dc562..f37004e 100644
Binary files a/locale/pt_BR/BOINC-Setup.mo and b/locale/pt_BR/BOINC-Setup.mo differ
diff --git a/locale/pt_BR/BOINC-Setup.po b/locale/pt_BR/BOINC-Setup.po
index 9006066..39f68e6 100644
--- a/locale/pt_BR/BOINC-Setup.po
+++ b/locale/pt_BR/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/pt_BR/BOINC-Web.mo b/locale/pt_BR/BOINC-Web.mo
index e061f80..9ada32f 100644
Binary files a/locale/pt_BR/BOINC-Web.mo and b/locale/pt_BR/BOINC-Web.mo differ
diff --git a/locale/pt_BR/BOINC-Web.po b/locale/pt_BR/BOINC-Web.po
index 3f2d734..96f9b9e 100644
--- a/locale/pt_BR/BOINC-Web.po
+++ b/locale/pt_BR/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2006-09-18 17:43-0300\n"
"Last-Translator: alcirsp <alcirsp at user.com.br>\n"
"Language-Team: \n"
@@ -404,16 +404,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr ""
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -421,19 +421,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -442,15 +442,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -459,15 +459,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -475,15 +475,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -491,31 +491,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr ""
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -523,15 +523,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -542,15 +542,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr ""
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -560,30 +560,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr ""
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -595,15 +595,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -613,15 +623,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr ""
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -634,33 +644,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -670,15 +680,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -687,15 +697,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -704,22 +714,22 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr ""
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -728,15 +738,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -744,44 +754,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr ""
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -789,27 +799,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr ""
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -817,50 +827,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -870,17 +880,17 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr ""
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -888,11 +898,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -903,23 +913,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
diff --git a/locale/pt_PT/BOINC-Android.po b/locale/pt_PT/BOINC-Android.po
index 843ba75..bfebe37 100644
--- a/locale/pt_PT/BOINC-Android.po
+++ b/locale/pt_PT/BOINC-Android.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2014-01-03 15:31+0000\n"
+"PO-Revision-Date: 2014-02-28 12:17+0000\n"
"Last-Translator: Miguel Filipe Paulino de Sousa <Miguel.veig at gmail.com>\n"
"Language-Team: pt_PT <LL at li.org>\n"
"Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
-"X-POOTLE-MTIME: 1388763092.0\n"
+"X-POOTLE-MTIME: 1393589836.0\n"
#. app global
msgctxt "app_name"
@@ -41,7 +41,7 @@ msgstr "Adicionar projecto por URL"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr "Insira URL do projecto:"
+msgstr "Inserir URL do projecto:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
@@ -57,7 +57,7 @@ msgstr "Adicionar gestor de conta"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr "Sem conexão de Internet"
+msgstr "Sem ligação à Internet"
#. project login
msgctxt "attachproject_login_loading"
@@ -82,7 +82,7 @@ msgstr "Descrição:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr "Página principal:"
+msgstr "Página Inicial:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
@@ -102,22 +102,23 @@ msgstr "Este projecto não suporta dispositivos com Android"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr "Termos de uso para"
+msgstr "Termos de utilização para"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
-"Ao criar uma conta neste projecto, aceita os termos de uso acima descritos."
+"Ao criar uma conta com este projecto, está a aceitar os termos de utilização "
+"descritos em baixo."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr "Entrar com uma conta já existente"
+msgstr "Entrar com uma conta existente"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr "e-Mail:"
+msgstr "E-mail:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
@@ -133,7 +134,7 @@ msgstr "Novo a"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr "Registar uma conta para participar:"
+msgstr "Registe uma conta para participar:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
@@ -157,7 +158,7 @@ msgstr "Esqueceu a Palavra-passe"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr "Contacto ao projecto falhou!"
+msgstr "A comunicação com o projecto falhou!"
msgctxt "attachproject_login_attached"
msgid "Attached"
@@ -174,7 +175,7 @@ msgstr "Projecto:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr "e-Mail:"
+msgstr "E-mail:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
@@ -190,7 +191,7 @@ msgstr "Palavra-passe:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr "... Escreva novamente:"
+msgstr "... Insira novamente:"
msgctxt "attachproject_registration_button"
msgid "Create"
@@ -215,7 +216,7 @@ msgstr "Palavra-passe:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr "... Escreva novamente:"
+msgstr "... Insira novamente:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
@@ -232,7 +233,7 @@ msgstr "Palavra-passe demasiado curta"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr "Falha de conexão"
+msgstr "Falha de conecção"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
@@ -244,7 +245,7 @@ msgstr "Por favor insira o URL"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr "Por favor insira o endereço de e-Mail"
+msgstr "Por favor insira o endereço de e-mail"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
@@ -260,11 +261,11 @@ msgstr "falhou"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr "Nome de utilizador não aceite"
+msgstr "Nome de utilizador recusado"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr "Endereço de e-Mail já em uso"
+msgstr "Endereço de e-mail já em uso"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
@@ -272,15 +273,15 @@ msgstr "O projecto está offline"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr "Endereço de e-Mail não aceite"
+msgstr "Endereço de e-mail recusado"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr "Palavra-passe não aceite"
+msgstr "Palavra-passe recusada"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr "A criação de contas está desabilitada para este projecto"
+msgstr "A criação de contas está desabilitada neste projecto"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
@@ -346,7 +347,7 @@ msgstr "Carregue aqui para escolher um projecto."
msgctxt "main_error"
msgid "Whooops"
-msgstr "Whooops"
+msgstr "Oooooops"
msgctxt "main_error_long"
msgid ""
@@ -412,11 +413,12 @@ msgstr "A aguardar tarefas..."
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr "Suspenso"
+msgstr "Suspensa"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr "Carregue no play para resumir a actividade de rede e computação."
+msgstr ""
+"Carregue no botão play para resumir a computação e a actividade de rede."
msgctxt "status_launching"
msgid "Starting…"
@@ -424,15 +426,15 @@ msgstr "A começar..."
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr "Escolha um projecto para participar."
+msgstr "Escolha o projecto em que participar."
msgctxt "status_closing"
msgid "Closing…"
-msgstr "A fechar..."
+msgstr "A fechar…"
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr "A executar testes de performance..."
+msgstr "A realizar testes de performance..."
msgctxt "status_image_description"
msgid "project image"
@@ -445,7 +447,7 @@ msgstr "A ler preferências..."
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr "Salvar"
+msgstr "Guardar"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
@@ -453,7 +455,7 @@ msgstr "Insira novo valor:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr "Seleccione:"
+msgstr "Seleccionar:"
msgctxt "prefs_category_general"
msgid "General"
@@ -465,7 +467,7 @@ msgstr "Rede"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr "Alimentação"
+msgstr "Energia"
msgctxt "prefs_category_cpu"
msgid "CPU"
@@ -473,7 +475,7 @@ msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr "Armazenamento"
+msgstr "Espaço de Armazenamento"
msgctxt "prefs_category_memory"
msgid "Memory"
@@ -485,7 +487,7 @@ msgstr "Debug"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr "Mostrar preferências avançadas e controlos..."
+msgstr "Mostrar preferências e controlos avançados..."
msgctxt "prefs_run_on_battery_header"
msgid "Compute on Battery"
@@ -497,29 +499,31 @@ msgstr "Nível de bateria minímo"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
-msgstr "O BOINC suspende a computação abaixo do nível de bateria definido."
+msgstr ""
+"O BOINC suspende a computação quando o nivel de bateria for inferior ao "
+"definido."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr "Temperatura máxima da bateria"
+msgstr "Temperatura máxima de bateria"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
-"O BOINC suspende a computação abaixo da temperatura da bateria definida. Não "
-"é recomendada a alteração deste valor."
+"O BOINC suspende a computação quando a temperatura da bateria é superior à "
+"definida. Não é recomendado que altere este valor."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr "Espaço de armazenamento máximo"
+msgstr "Espaço de armazenamento máximo utilizado"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
msgstr ""
-"Qual a percentagem de espaço de armazenamento no seu dispositivo que é "
-"permitida que o BOINC use?"
+"Qual a percentagem de espaço de armazenamento permitida a ser utilizada pelo "
+"BOINC?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
@@ -527,55 +531,55 @@ msgstr "Espaço de armazenamento minímo"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
-"Qual a capacidade de espaço de armazenamento no seu dispositivo que deve "
-"ficar livre?"
+msgstr "Quanto espaço livre do seu dispositivo deve ficar livre?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr "Transferência diária limite"
+msgstr "Limite de transferências diárias"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr "Limita o tráfico diário causado pelo BOINC."
+msgstr "Limite de tráfego de dados causados pelo BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr "Transferir tarefas em WiFi apenas"
+msgstr "Transferir tarefas em Wi-Fi apenas"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr "Começo Automático"
+msgstr "Início automático"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr "Mostrar notificação quando suspenso"
+msgstr "Mostrar notificações quando suspenso"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr "Cores de CPU usados"
+msgstr "Número de cores utilizados pelo CPU"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr "Limita o número de cores de CPU que o BOINC usa para computação."
+msgstr ""
+"Limite de cores usados pelo CPU que são utilizados para a computação no "
+"BOINC."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr "Pausa no CPU quando a utilização for acima de"
+msgstr "Pausar o CPU quando a sua utilização for acima de"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
msgstr ""
"Determina quando o BOINC pausa a computação, devido ao uso de outras "
-"aplicações no CPU."
+"aplicações em uso pelo CPU."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr "Limite do CPU"
+msgstr "Limite de CPU"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr "Limita o tempo de CPU que o BOINC usa para computação."
+msgstr "Limite de tempo de CPU que o BOINC usa para computação."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
@@ -583,7 +587,7 @@ msgstr "Limite de RAM"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr "Limita a quantidade de RAM que é permitida que as tarefas ocupem."
+msgstr "Limite de memória RAM que pode ser utilizada pelas tarefas."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
@@ -591,11 +595,11 @@ msgstr "Bandeiras de log do cliente BOINC"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr "Nível de log da GUI"
+msgstr "Nível dos logs da GUI"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr "Especifica a verbosidade das mensagens de log da GUI."
+msgstr "Especifica a verbosidade das mensagens de log da GUI"
msgctxt "prefs_unit_mb"
msgid "MB"
@@ -612,12 +616,12 @@ msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr "ºC"
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr "A ler projectos..."
+msgstr "A rever projectos..."
msgctxt "projects_add"
msgid "Add project"
@@ -642,15 +646,15 @@ msgstr "(total)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr "Supenso pelo utilizador"
+msgstr "Suspenso pelo utilizador"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr "Não ir buscar novas tarefas"
+msgstr "Não obter novas tarefas"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr "Projecto terminado - OK para remover"
+msgstr "Projecto terminou - OK para remover "
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
@@ -658,11 +662,11 @@ msgstr "Irá remover quando as tarefas terminarem"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr "Solicitação agendada pendente"
+msgstr "Solicitação de agendamento pendente"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr "Solicitação agendada em progresso"
+msgstr "Solicitação de agendamento em progresso"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
@@ -679,7 +683,7 @@ msgstr "Comandos do projecto:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr "Visitar website"
+msgstr "Visitar o website"
msgctxt "projects_control_update"
msgid "Update"
@@ -699,7 +703,7 @@ msgstr "Resumir"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr "Cancelar novas tarefas"
+msgstr "Não obter novas tarefas"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
@@ -744,7 +748,7 @@ msgstr "Fazer reset ao projecto"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr "Tem a certeza que quer fazer reset"
+msgstr "Tem a certeza que quer fazer o reset"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
@@ -756,7 +760,7 @@ msgstr "Desabilitar gestor de conta"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr "Tem a certeza que quer parar de usar o"
+msgstr "Tem a certeza que quer parar de utilizar"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
@@ -765,11 +769,11 @@ msgstr "Desabilitar"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr "Nome da Tarefa:"
+msgstr "Nome da tarefa:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr "Tempo decorrido:"
+msgstr "Tempo decorrido: "
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
@@ -777,7 +781,7 @@ msgstr "(suspenso)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr "Data Limite:"
+msgstr "Data limite:"
msgctxt "tasks_result_new"
msgid "new"
@@ -785,7 +789,7 @@ msgstr "novo"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr "à espera de transferir"
+msgstr "à espera da transferência"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
@@ -821,7 +825,7 @@ msgstr "em execução"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr "suspenso"
+msgstr "suspensas"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
@@ -833,7 +837,7 @@ msgstr "a suspender"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr "suspenso"
+msgstr "suspensas"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
@@ -846,11 +850,11 @@ msgstr "pronto para reportar"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr "Abortar tarefa?"
+msgstr "Cancelar tarefa?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr "Abortar tarefa:"
+msgstr "Cancelar tarefa:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
@@ -867,7 +871,7 @@ msgstr "Diálogo de confirmação"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr "A ler transferências..."
+msgstr "A carregar transferências..."
msgctxt "trans_upload"
msgid "Upload"
@@ -875,7 +879,7 @@ msgstr "Upload"
msgctxt "trans_download"
msgid "Download"
-msgstr "Transferir"
+msgstr "Tranferir"
msgctxt "trans_retryin"
msgid "retry in"
@@ -883,7 +887,7 @@ msgstr "tentar novamente em"
msgctxt "trans_failed"
msgid "failed"
-msgstr "falhou"
+msgstr "falhado"
msgctxt "trans_suspended"
msgid "suspended"
@@ -899,7 +903,7 @@ msgstr "pendente"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr "projecto em backoff"
+msgstr "projecto backoff"
msgctxt "trans_header_name"
msgid "File:"
@@ -907,15 +911,15 @@ msgstr "Ficheiro:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr "Tentar transferências novamente"
+msgstr "Tentar novamente transferências"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr "Abortar transferência?"
+msgstr "Cancelar transferência?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr "Abortar Ficheiro:"
+msgstr "Cancelar Ficheiro:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
@@ -937,15 +941,15 @@ msgstr "Mensagens do Cliente"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr "Mensagens da GUI"
+msgstr "Mensagens da GUI "
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr "Log copiado para a área de transferência."
+msgstr "Log copiado para a àrea de transferência."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr "Log de Eventos para o BOINC no Android:"
+msgstr "Log de eventos para o BOINC em Android:"
#. suspend reasons
msgctxt "suspend_unknown"
@@ -954,27 +958,27 @@ msgstr "Computação suspensa."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr "Conecte o seu dispositivo a um carregador para continuar a computação."
+msgstr "Ligue o seu dispositivo à carga para continuar a computação."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr "O utilizador está activo"
+msgstr "O utilizador está activo."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr "Fora da janela de tempo para a computação."
+msgstr "Computação fora da janela de tempo limite."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr "O BOINC está a executar testes de performance no seu dispositivo..."
+msgstr "O BOINC está a executar os testes de performance do seu dispositivo…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr "Sem espaço em disco."
+msgstr "Sem espaço disponível em disco."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr "Estrangulamento de CPU agendado."
+msgstr "Estrangulamento do CPU agendado."
msgctxt "suspend_noinput"
msgid "No recent user activity."
@@ -990,11 +994,11 @@ msgstr "Uma aplicação exclusiva está em execução."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr "O seu dispositivo está ocupado com outras aplicações"
+msgstr "O seu dispositivo está ocupado com outras aplicações."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr "O BOINC atingiu a transferência de rede diária limite."
+msgstr "O BOINC atingiu o limite de transferências na rede."
msgctxt "suspend_os"
msgid "Stopped by Android."
@@ -1002,16 +1006,15 @@ msgstr "Parado pelo Android."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr "Não conectado a um WiFi."
+msgstr "Não conectado ao Wi-Fi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
-"A bateria precisa de ser carregada antes que a computação seja resumida."
+msgstr "A bateria precisa de carga antes de poder resumir a computação."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr "A computação será resumida quando a carga da bateria chegar a"
+msgstr "A computação irá resumir quando a carga da bateria atingir"
msgctxt "suspend_battery_charging_current"
msgid "currently"
@@ -1019,11 +1022,11 @@ msgstr "actualmente"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr "À espera que a bateria arrefeça"
+msgstr "A aguardar que a bateria arrefeça"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr "A resumir a computação..."
+msgstr "A resumir computação..."
msgctxt "suspend_network_user_req"
msgid "manually."
@@ -1032,11 +1035,11 @@ msgstr "manualmente."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr "Requisitado pelo utilizador"
+msgstr "Solicitado pelo utilizador"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr "Ir buscar trabalho"
+msgstr "Pesquisar trabalhos"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
@@ -1048,7 +1051,7 @@ msgstr "Enviar mensagem de aviso"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr "Requisitado pelo gestor de conta"
+msgstr "Solicitado pelo gestor de conta"
msgctxt "rpcreason_init"
msgid "Project initialization"
@@ -1056,7 +1059,7 @@ msgstr "Inicialização do projecto"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr "Requisitado pelo projecto"
+msgstr "Solicitado pelo projecto"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
@@ -1069,11 +1072,11 @@ msgstr "Recarregar"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr "Enviar como e-mail"
+msgstr "Enviar como E-mail"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr "Copiar para a Àrea de Transferência"
+msgstr "Copiar para Área de Transferência"
msgctxt "menu_eventlog"
msgid "Event Log"
@@ -1093,7 +1096,7 @@ msgstr "Resumir"
msgctxt "menu_about"
msgid "About"
-msgstr "Acerca de"
+msgstr "Acerca"
msgctxt "menu_help"
msgid "Help"
@@ -1106,7 +1109,7 @@ msgstr "Regressar"
msgctxt "about_title"
msgid "About"
-msgstr "Acerca de"
+msgstr "Acerca"
msgctxt "about_name"
msgid "BOINC"
@@ -1118,15 +1121,15 @@ msgstr "Versão"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr "Infraestrutura Aberta Berkeley para a Rede de Computação"
+msgstr "Infraestrutura aberta Berkeley para a Rede de Computação"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-"© 2003-2013 Universidade da Califórnia, Berkeley.\n"
-"Todos os Direitos Reservados."
+"© 2003–2013 Universidade de Berkeley, Califórnia.\n"
+"Todos os direitos reservados."
#, fuzzy
#~ msgctxt "main_noproject_warning"
diff --git a/locale/pt_PT/BOINC-Manager.mo b/locale/pt_PT/BOINC-Manager.mo
index a353bb1..71272ed 100644
Binary files a/locale/pt_PT/BOINC-Manager.mo and b/locale/pt_PT/BOINC-Manager.mo differ
diff --git a/locale/pt_PT/BOINC-Manager.po b/locale/pt_PT/BOINC-Manager.po
index e43699c..c9af664 100644
--- a/locale/pt_PT/BOINC-Manager.po
+++ b/locale/pt_PT/BOINC-Manager.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.05\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-20 12:09+0000\n"
-"Last-Translator: Miguel Filipe Paulino de Sousa <Miguel.veig at gmail.com>\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-06 16:59+0000\n"
+"Last-Translator: Anonymous Pootle User\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: pt_PT\n"
"MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1384949376.0\n"
+"X-POOTLE-MTIME: 1391705981.0\n"
#: AccountInfoPage.cpp:387
#, c-format
@@ -211,340 +211,340 @@ msgstr "Conectado"
msgid "Disconnected"
msgstr "Desconectado"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Fechar a janela do %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Fechar a Janela"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Sair do %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Notícias\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
-msgstr "Mostrar notícias"
+msgstr "Mostra as notícias"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projectos\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
-msgstr "Mostrar projectos"
+msgstr "Mostra os projectos"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Tarefas\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
-msgstr "Mostrar tarefas"
+msgstr "Mostra as tarefas"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Trans&ferências\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
-msgstr "Mostrar transferências"
+msgstr "Mostra as transferências"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Estatísticas\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
-msgstr "Mostrar estatísticas"
+msgstr "Mostra as estatísticas"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Utilização do disco\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
-msgstr "Mostrar utilização do disco"
+msgstr "Mostra a utilização em disco"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Vista Simplificada ...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
-msgstr "Mostrar a interface gráfica simplificada."
+msgstr "Mostra a interface gráfica simplificada."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Adicionar projecto ou gestor de conta..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Voluntarie-se para um ou alguns dos mais de 30 projectos, em várias áreas da "
"ciência"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
-msgstr "&Sincronizar com %s"
+msgstr "&Sincronizar com o %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Obter as configurações actuais a partir de %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Adicionar projecto..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Adicionar um projecto"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "&Parar de utilizar o %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Remover este computador do controlo do gestor de conta."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opções..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Configurar opções de visualização e configurações de proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Preferências de computação..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configurar preferências de computação"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Executar sempre"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Permitir execução de trabalho, independentemente das preferências"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Executar com base nas &preferências"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Permitir execução de trabalho de acordo com as preferências"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Suspender"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Parar execução de trabalho independentemente das preferências"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Utilizar a GPU sempre"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Permitir a execução da GPU, independentemente das preferências"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Utilizar a GPU com base nas preferências"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Permitir a execução da GPU de acordo com as preferências"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Suspender a GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Parar a execução da GPU, independentemente das preferências"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Actividade de rede sempre disponível"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Permitir actividade de rede, independentemente das preferências"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Actividade de rede com base nas preferências"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Permitir actividade de rede de acordo com as preferências"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Actividade de rede suspensa"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Parar actividade de rede do BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
-msgstr "Ligar-se a outro computador executando %s"
+msgstr "Liga-se a outro computador que esteja a executar o %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Seleccionar computador..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Desligar cliente ligado..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
-msgstr "Desligar o cliente actualmente ligado"
+msgstr "Desliga o cliente que está actualmente ligado"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
-msgstr "Realizar &testes de perfomance do CPU"
+msgstr "Executar &testes de perfomance do CPU"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
-msgstr "Realiza testes de perfomance do CPU no BOINC"
+msgstr "Executa testes de perfomance do BOINC para o CPU"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
-msgstr "Realiza comunicação com a rede"
+msgstr "Realizar comunicação com a rede"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Realiza toda a comunicação pendente com a rede"
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Ler ficheiros de configuração"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Ler informações de configuração em cc_config.mxl e quaisquer ficheiros em "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Ler ficheiro de preferências locais"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
-msgstr "Ler preferências em global_prefs_override.xml."
+msgstr "Ler preferências em global_prefs_override.xml"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
-msgstr "Lançar outra instância do %s..."
+msgstr "Iniciar outra instância do %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
-msgstr "Lançar outra %s"
+msgstr "Inicia outro %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Registo de Eventos...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
-msgstr "Mostrar mensagens de diagnóstico."
+msgstr "Mostra as mensagens de diagnóstico."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &ajuda"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
-msgstr "Mostrar informações acerca de %s"
+msgstr "Mostra informações sobre o %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s ajuda"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
-msgstr "Mostrar informações acerca de %s"
+msgstr "Mostra informações sobre o %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
-msgstr "%s &website"
+msgstr "%s &Website"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
-msgstr "Mostrar informações acerca do BOINC e %s"
+msgstr "Mostra informações sobre o BOINC e o %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Acerca de %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Licenciamento e informações sobre direitos de autor."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Ficheiro"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Visualizar"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Ferramentas"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Actividade"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "A&vançado"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Ajuda"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Para de usar %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -559,12 +559,12 @@ msgstr ""
"\n"
"Quer parar de utilizar o %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Desligar o cliente actual..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -573,27 +573,27 @@ msgstr ""
"%s vai desligar o cliente ligado actualmente\n"
"e ser-lhe-á solicitado para que se ligue a outro anfitrião."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s foi adicionado com sucesso %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "A ligar a %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Ligado a %s (%s)"
@@ -630,26 +630,26 @@ msgstr ""
"\n"
"Por favor, visite o website do projecto e siga as instruções lá indicadas."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "A comunicar com o cliente BOINC. Por favor aguarde..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Desistir %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "S&air %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Comunicação"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Cancelar"
@@ -809,7 +809,7 @@ msgstr "%s desconectou-se com sucesso da Internet."
msgid "%s failed to disconnected from the Internet."
msgstr "%s falhou ao disconectar-se da Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -830,7 +830,7 @@ msgstr ""
" - contacte o seu administrador para o adicionar ao grupo de utilizadores\n"
" 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -840,16 +840,16 @@ msgstr ""
"s.\n"
"(Código de erro %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " em"
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -858,70 +858,70 @@ msgstr ""
"correctamente.\n"
"Por favor, reinicie o seu computador e tente novamente."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "Gestor do BOINC"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "O Gestor do BOINC foi iniciado pelo sistema operativo automaticamente"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Iniciar o BOINC de modo a que o ícone seja visível apenas na barra de "
"tarefas"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Directório contendo o executável do Cliente BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Directório de dados do BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Nome de anfitrião ou endereço IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Número da porta do GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Palavra-passe"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Iniciar o BOINC com estes argumentos opcionais"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "desabilitar os utilizadores de segurança e as permissões do BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"iniciar o modo de depuração para habilitar o gestor de mensagens de erro"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "multiplas instâncias do Gestor do BOINC permitidas"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Não usado: solução para o bug no XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Detecção Automática)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Desconhecido)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Definido pelo Utilizador)"
@@ -948,7 +948,7 @@ msgid "E&xit"
msgstr "S&air"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Resumir"
@@ -1107,64 +1107,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Infraestrutura aberta Berkeley para a Rede de Computação"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "erro de vírgula flutuante"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "número inválido"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "formato de tempo inválido, o formato é HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "formato de tempo inválido, o formato é HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "valor inválido de entrada detectado"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Erro de Validação"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Aplicações a adicionar"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' não é uma aplicação executável."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Adicionar Aplicação Exclusiva"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Nome da aplicação a adicionar?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Adicionar aplicação exclusiva"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Os nomes das aplicações têm de terminar com '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' já está na lista."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1172,11 +1172,11 @@ msgstr ""
"Quer mesmo limpar todas as preferências locais?\n"
"(As aplicações exclusivas não serão afectadas.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Confirmação"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferências"
@@ -1192,11 +1192,11 @@ msgstr ""
"Carregue em Limpar para restaurar as definições web (excepto aplicações "
"exclusivas)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Limpar"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "limpar todas as preferências locais e fechar a caixa de diálogo"
@@ -1216,7 +1216,7 @@ msgstr "utilização de disco e memória"
msgid "exclusive applications"
msgstr "aplicações exclusivas"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1229,13 +1229,13 @@ msgid "close the dialog without saving"
msgstr "fechar caixa de diálogo sem salvar"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Ajuda"
#: DlgAdvPreferencesBase.cpp:113
msgid "shows the preferences web page"
-msgstr "mostrar página web das preferências"
+msgstr "mostra a página web das preferências"
#: DlgAdvPreferencesBase.cpp:135
msgid "Computing allowed"
@@ -1287,7 +1287,7 @@ msgstr ""
"este número de minutos"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minutos"
@@ -1303,7 +1303,7 @@ msgstr "suspender trabalho se a utilização do processador exceder este nivel"
msgid "percent (0 means no restriction)"
msgstr "percentagem (0 significa sem restrições)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Todos os dias entre as horas"
@@ -1311,8 +1311,8 @@ msgstr "Todos os dias entre as horas"
msgid "start work at this time"
msgstr "iniciar trabalho a esta hora"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "e"
@@ -1320,43 +1320,43 @@ msgstr "e"
msgid "stop work at this time"
msgstr "parar trabalho a esta hora"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(sem restrições se ambos os campos forem iguais)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Escolha manual dos dias de semana:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "assinale para especificar as horas para este dia de semana"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Segunda"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Terça"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Quarta"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Quinta"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Sexta"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sábado"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Domingo"
@@ -1377,9 +1377,9 @@ msgstr "Em sistemas de processador múltiplo, usar no máximo"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% dos processadores (0 significa ignorar esta configuração)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Usar no máximo"
@@ -1388,73 +1388,73 @@ msgstr "Usar no máximo"
msgid "% CPU time"
msgstr "% tempo de CPU"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Opções gerais"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Taxa máxima de transferência"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBytes/seg."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Taxa máxima de upload"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Transferir no máximo"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "a cada"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dias"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Trabalho minímo de buffer "
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "Tentar manter tarefas suficientes para manter ocupado por estes dias"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Trabalho adicional máximo de buffer"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Em adição, manter tarefas suficientes para pelo menos estes dias"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Saltar verificação do ficheiro de imagem"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"assinale aqui se o seu provedor de Internet modifica os ficheiros de imagem"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Opções de conexão"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Confirmar antes de se conectar à internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1462,11 +1462,11 @@ msgstr ""
"se assinalado, uma caixa de confirmação aparecerá antes de se tentar "
"conectar à Internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Disconectar quando terminado"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1474,152 +1474,152 @@ msgstr ""
"se assinalado, o BOINC desliga quando o uso de rede estiver realizado\n"
"(apenas relevante para conexões dial-up)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Utilização de rede permitida"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "hora de início da utilização de rede"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "hora de paragem da utilização de rede"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Utilização do disco"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "máximo de utilização do disco usado pelo BOINC (em Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes de espaço em disco"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Deixar pelo menos"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"O BOINC deixa pelo menos este montante de espaço livre em disco (em "
"Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes de espaço em disco livre"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "O BOINC utiliza no máximo esta percentagem de espaço total em disco"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% de espaço total em disco"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Checkpoints das tarefas em disco no máximo a cada"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "segundos"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% de paginação (espaço temporário)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Utilização da memória"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% quando o computador está em utilização"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% quando o computador está inactivo"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Deixar aplicações em memória enquanto suspensas"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "se assinalado, unidades de trabalho suspensas são deixadas em memória"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Suspende processador e utilização da rede quando estas aplicações estiverem "
"a correr:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Adicionar..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Adicionar uma aplicação a esta lista"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Remover"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Remove uma aplicação desta lista"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Para opções avançadas, seguir estas instruções: "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Registo de Eventos"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projecto"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Tempo"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Mensagem"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Mostrar apenas este projecto"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Copiar &Todos"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Copiar todas as mensagens para a área de transferência."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Copiar &Seleccionado"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1628,7 +1628,7 @@ msgstr ""
"seleccionar múltiplas mensagens pressionando o shift enquanto carrega nas "
"mensagens."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1637,24 +1637,24 @@ msgstr ""
"seleccionar múltiplas mensagens pressionando o shift ou a tecla Ctrl "
"enquanto carrega nas mensagens."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Fechar"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
-msgstr "Obter ajuda com %s"
+msgstr "Obter ajuda com o %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Mostrar todas as &mensagens"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Mostrar mensagens para todos os projectos"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Mostrar apenas as mensagens para o projecto seleccionado"
@@ -1707,7 +1707,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Lembrar desta decisão e não mostrar esta caixa de diálogo."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Cancelar"
@@ -1715,223 +1715,223 @@ msgstr "&Cancelar"
msgid "Don't show this dialog again."
msgstr "Não mostrar esta caixa de diálogo outra vez."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Não obter tarefas por"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Preferências do projecto"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Preferências do gestor de conta"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "O projecto não tem aplicações por"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Configurações do cliente exclui"
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " obtenção de trabalho suspenso por"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " intervalo de suspensão de obtenção de trabalho"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Propriedades do projecto"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Geral"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL Master"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nome de utilizador"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nome da equipa"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Quota de recursos"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Agendamento RPC deferido por"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Transferência dos ficheiros deferidos por"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Uploads dos ficheiros deferidos por"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID do Computador"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "CPU não intensivo"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "sim"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Suspenso através da GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "não"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Não solicitar mais trabalhos "
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Agendamento de tarefas em progresso"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Avisos pendentes"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Localização do anfitrião"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "padrão"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Adicionado através do gestor de conta"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Remover quando as tarefas concluirem"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Terminado"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Créditos"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Utilizador"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Anfitrião"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "A agendar"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Prioridade de agendamento "
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Duração do factor de correcção"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Propriedades da tarefa"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplicação"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nome da unidade de trabalho"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nome"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Estado"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Recebido"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Reportar data limite de entrega"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Recursos"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Tamanho estimado de computação"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Tempo de CPU no ultimo checkpoint"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Tempo de CPU"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Tempo decorrido"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Tempo restante previsto"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Fracção feita"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Tamanho da memória virtual"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Tamanho previsto do trabalho"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Directoria"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID do Processo"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local:"
@@ -2019,7 +2019,7 @@ msgstr "Deixar em branco se desnecessário"
msgid "User Name:"
msgstr "Nome de Utilizador:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Palavra-passe:"
@@ -2078,12 +2078,12 @@ msgstr ""
"O idioma %s's foi alterado. Para que esta alteração tenha efeito, tem de "
"reiniciar o %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Seleccione Computador"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2092,7 +2092,7 @@ msgstr ""
"Outra instância do %s já está a em execução \n"
"neste computador. Por favor, seleccione o cliente a monitorizar."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nome do anfitrião:"
@@ -2287,23 +2287,23 @@ msgstr "Pesquisa"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Aprender acerca dos projectos alojados em World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "A iniciar cliente"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "A conectar-se ao cliente"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "A recuperar o estado do sistema; por favor aguarde..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Aplicação em falta"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2311,183 +2311,183 @@ msgstr ""
"Por favor, transfira e instale a aplicação CoRD de "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "em bateria"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "computador em utilização"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "solicitação do utilizador"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "hora do dia"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Testes de performance do CPU em progresso"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "espaço em disco necessário - verifique preferências"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "computador não está em utilização"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "a iniciar"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "uma aplicação exclusiva está em execução"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "O CPU está ocupado"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "limite de largura de banda excedido"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "solicitado pelo sistema operativo"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "razão desconhecida"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU não detectado,"
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Novo"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Transferência falhada"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Fazendo a transferência"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr "(suspenso - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Projecto suspenso pelo utilizador"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Tarefa suspensa pelo utilizador"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Suspenso - "
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU suspensa - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "A aguardar por memória"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "A aguardar por memória partilhada"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Executando com prioridade elevada"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Executando"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (CPU não intensivo)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "A aguardar a execução"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Pronto para começar"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Agendamento em espera:"
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(Agendamento em espera)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (A aguardar acesso à rede)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Erro de computação"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Upload falhado"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "A fazer o Upload"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Abortado pelo utilizador"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Abortado pelo projecto"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Abortado: não iniciado devido à data limite excedida"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Abortado: limite em disco excedido"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Abortado: limite de tempo excedido"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Abortado: limite em memória excedido"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Abortado"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Reconhecido"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Pronto para reportar"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Erro: estado inválido '%d'"
@@ -2542,55 +2542,55 @@ msgstr "Verifique o nome de utilizador e palavra-passe e tente novamente."
msgid "Check the email address and password, and try again."
msgstr "Verifique o endereço de e-mail e palavra-passe e tente novamente."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "mais..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Todos"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Escolha o projecto"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "Para escolher o projecto, carregue nele ou escreva o URL em baixo."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Categorias:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projectos:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Detalhes do projecto"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Área de pesquisa:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organização:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Website:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Sistemas suportados:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL do Projecto:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2598,7 +2598,7 @@ msgstr ""
"Este projecto pode não ter trabalhos para o seu tipo de computador. Quer "
"adicioná-lo de qualquer maneira?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Já adicionou este projecto. Por favor escolha um projecto diferente."
@@ -2606,11 +2606,11 @@ msgstr "Já adicionou este projecto. Por favor escolha um projecto diferente."
msgid "Communicating with project."
msgstr "A comunicar com o projecto."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Ficheiros necessários não encontrados no servidor."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Ocorreu um erro interno no servidor."
@@ -2719,8 +2719,8 @@ msgid "I agree to the terms of use."
msgstr "Eu concordo com os termos de uso."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "Eu não concordo com os termos de uso."
+msgid "I do not agree to the terms of use."
+msgstr "Eu não concordo com os termos de utilização."
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2810,7 +2810,7 @@ msgstr "'%s' não contém um nome de anfitrião válido."
msgid "'%s' does not contain a valid path."
msgstr "'%s' não contém um caminho válido."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Comandos"
@@ -2863,7 +2863,7 @@ msgstr "A pesquisar noitícias; por favor aguarde..."
msgid "There are no notices at this time."
msgstr "Não existem notícias nesta altura."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Notícias"
@@ -2880,7 +2880,7 @@ msgstr ""
"ultimas preferências e possivelmente mais tarefas."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3118,135 +3118,135 @@ msgstr "livre: "
msgid "used by other programs: "
msgstr "utilizado por outros programas: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Totais do Utilizador"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Médias do Utilizador"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Totais do Anfitrião"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Médias do Anfitrião"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Última actualização: %.0f dias atrás"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Mostrar totais do utilizador"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Mostrar créditos totais do utilizador"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Mostrar médias do utilizador"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Mostrar médias de créditos do utilizador"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Mostrar totais do anfitrião"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Mostrar créditos totais do anfitrião"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Mostrar médias do anfitrião"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Mostrar médias de créditos do anfitrião"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Projecto anterior"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Mostrar gráfico do projecto anterior"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Próximo projecto >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Mostrar gráfico do próximo projecto"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Ocultar lista de projectos"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Utilizar área completa para os gráficos"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Modo de visualização"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Um projecto"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Mostrar um gráfico com o projecto seleccionado"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Todos os projectos (separados)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Mostrar todos os projectos, um gráfico por projecto"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Todos os projectos (juntos)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Mostrar um gráfico com todos os projectos"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Todos os projectos (somados)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Mostrar um gráfico com a soma de todos os projectos"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Estatísticas"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "A actualizar gráficos..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Mostrar lista de projectos"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Usar área mais pequena para os gráficos"
@@ -3414,10 +3414,6 @@ msgstr "Restante (estimado)"
msgid "Deadline"
msgstr "Data Limite"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nome"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Tarefas"
@@ -3494,10 +3490,10 @@ msgid ""
"listed on or managed via %s."
msgstr ""
"Se possível, adicione projectos no\n"
-"%s website.\n"
+"website do %s.\n"
"\n"
"Projectos adicionados através do assistente não serão\n"
-"listados ou geridos através do %s."
+"listados ou geridos pelo %s."
#: WelcomePage.cpp:313
msgid ""
@@ -3572,40 +3568,40 @@ msgstr "Quer mesmo cancelar?"
msgid "Question"
msgstr "Questão"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Vista Avançada...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Mostra o interface gráfico avançado."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Máscara"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Selecciona a aparência do interface de utilizador."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Padrão"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Suspende a Computação"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Resume a Computação"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Abre uma janela para ver as notícias dos projectos ou do BOINC"
@@ -3627,117 +3623,125 @@ msgid "Click OK to set preferences."
msgstr "Carregue em OK para definir as preferências."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Carregue em Limpar para restaurar as definições web."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Carregue em Limpar para restaurar as configurações definidas na web para "
+"todas as preferência abaixo"
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Para configurações adicionais, seleccione Preferências de Computação na"
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "Vista Avançada."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"Para definições adicionais, seleccione Preferências de Computação na Vista "
+"Avançada"
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Executar trabalho apenas entre:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Conectar-se à internet apenas entre:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Usar não mais do que:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "de espaço em disco"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "do processador"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Executar trabalho se ligado apenas à bateria?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Executar trabalho depois de inactivo por:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+"Desmarcar todas as preferências locais listadas acima e fechar a caixa de "
+"diálogo"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "A qualquer altura"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Executar Sempre)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Quer mesmo limpar todas as preferências locais?\n"
@@ -3796,116 +3800,116 @@ msgstr ""
"Tem a certeza que quer cancelar esta tarefa '%s'?\n"
"(Progresso: %.1lf%%, Estado: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Não tem nenhuns projectos. Por favor adicione um Projecto."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Indisponível"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Tarefas:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Seleccione uma tarefa para aceder"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "De:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Progresso destas tarefas"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Comandos das Tarefas"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Abrir um menu de comandos para aplicar a esta tarefa"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Aplicação: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Aplicação: Indisponível"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Indisponível"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Decorrido: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Restante (estimado): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Estado: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "A rever o estado actual."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "A realizar transferência de trabalho do servidor."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Processamento Suspenso: A executar em Bateria."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Processamento Suspenso: Utilizador Activo."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Processamento Suspenso: O utilizador parou o processamento."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Processamento Suspenso: Hora do Dia."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Processamento Suspenso: A Executar Testes de Performance."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Processamento Suspenso."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "A aguardar contacto dos servidores do projecto."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "A rever estado actual"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Sem trabalhos disponíveis para processar"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Incapaz de se conectar ao core do cliente"
@@ -3947,6 +3951,24 @@ msgstr "Mostrar Todos"
msgid "Quit %s"
msgstr "Sair %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Eu não concordo com os termos de uso."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Carregue em Limpar para restaurar as definições web."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Para configurações adicionais, seleccione Preferências de Computação na"
+
+#~ msgid "the Advanced View."
+#~ msgstr "Vista Avançada."
+
+#~ msgid "Workunit name"
+#~ msgstr "Nome da unidade de trabalho"
+
+#~ msgid "invalid float"
+#~ msgstr "erro de vírgula flutuante"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Mostra o interface gráfico avançado (acessível)."
diff --git a/locale/pt_PT/BOINC-Project-Generic.po b/locale/pt_PT/BOINC-Project-Generic.po
index 91af06e..b1a5499 100644
--- a/locale/pt_PT/BOINC-Project-Generic.po
+++ b/locale/pt_PT/BOINC-Project-Generic.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.03\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-27 11:23+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-30 11:35+0000\n"
"Last-Translator: Miguel Filipe Paulino de Sousa <Miguel.veig at gmail.com>\n"
"Language-Team: Portuguese <LL at li.org>\n"
"Language: pt_PT\n"
@@ -16,7 +16,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385551424.0\n"
+"X-POOTLE-MTIME: 1391081718.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Português"
@@ -189,7 +189,7 @@ msgstr "Pesquisar fóruns"
msgid "Advanced search"
msgstr "Pesquisa avançada"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Mensagens privadas"
@@ -199,8 +199,8 @@ msgstr "Mensagens privadas"
msgid "Questions and Answers"
msgstr "Perguntas e Respostas"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -266,7 +266,7 @@ msgstr "Não lidas"
msgid "Message %1"
msgstr "Mensagem %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "oculto"
@@ -477,7 +477,7 @@ msgstr "Não pode postar num tópico oculto."
msgid "Thread"
msgstr "Tópico"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Posts"
@@ -486,7 +486,7 @@ msgstr "Posts"
msgid "Views"
msgstr "Vistas"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Último post"
@@ -524,7 +524,7 @@ msgid "Home"
msgstr "Casa"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Trabalho"
@@ -590,9 +590,9 @@ msgid "Created"
msgstr "Criado"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -770,7 +770,7 @@ msgstr "Último contacto"
msgid "Computer info"
msgstr "Informações do computador"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Classificação"
@@ -779,9 +779,9 @@ msgstr "Classificação"
msgid "Avg. credit"
msgstr "Média de créditos"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -869,8 +869,8 @@ msgstr "Apenas os computadores activos nos últimos 30 dias"
msgid "Computer ID"
msgstr "ID do computador"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -906,7 +906,7 @@ msgstr "Caixa de entrada"
msgid "Write"
msgstr "Escrever"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Mandar mensagem privada"
@@ -1675,7 +1675,7 @@ msgstr "Tempo reportado<br />ou prazo limite "
msgid "explain"
msgstr "explique"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Estado"
@@ -1767,9 +1767,9 @@ msgstr "Palavras chave"
msgid "Find teams with these words in their names or descriptions"
msgstr "Pesquisar por equipas com estas palavras nos seus nomes ou descrições"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1777,7 +1777,7 @@ msgstr "Pesquisar por equipas com estas palavras nos seus nomes ou descrições"
msgid "Country"
msgstr "País"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tipo de equipa"
@@ -1805,8 +1805,8 @@ msgstr "Solicitado por si"
msgid "founder response deadline is %1"
msgstr "o tempo de resposta limite do fundador é %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Nenhum"
@@ -1830,27 +1830,27 @@ msgstr "Descrição"
msgid "Web site"
msgstr "Website"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Cruzar estatísticas do projecto"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tipo"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Fórum"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Tópicos"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Juntar-se a esta equipa"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1858,79 +1858,79 @@ msgstr ""
"Nota: Se o 'OK para o email' está definido nas preferências do projecto, "
"juntar-se a uma equipa dá ao fundador acesso ao seu endereço de email."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Não aceita novos membros"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Mudança de liderança pedida"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Responder por %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Mudança de liderança da equipa"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Membros"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fundador"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administradores"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Novos membros no último dia"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Total de membros"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "ver"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Membros activos"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Membros com créditos"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrador"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Anterior %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Próximo %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Não existe essa equipa."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Esta operação requer privilégios de líder."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Esta operação requer privilégios de administrador da equipa"
@@ -1943,7 +1943,7 @@ msgstr ""
"brevemente serão re-escritas. Edite a %1equipa ampla do BOINC%2 em "
"alternativa."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1951,47 +1951,47 @@ msgstr ""
"%1Nota privada%2: se criar uma equipa, as preferências do projecto (partilha "
"de recursos, preferências gráficas) ficarão visíveis ao público."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nome da equipa, versão do texto"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Não use tags HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nome da equipa, versão de HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Pode usar %1tags limitadas HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Se não sabe o que é HTML, deixe esta caixa em branco."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL da página web da equipa, se existir"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "sem \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Este URL será linkado para a página da equipa neste site."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Descrição da equipa"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Aceitar novos membros?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Perfil do utilizador"
@@ -2024,7 +2024,7 @@ msgid "Computers on this account"
msgstr "Computadores nesta conta"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Ver"
@@ -2041,8 +2041,8 @@ msgstr "Estatísticas de projectos cruzados"
msgid "Account"
msgstr "Conta"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Equipa"
@@ -2071,7 +2071,7 @@ msgstr "Informações da conta"
msgid "Email address"
msgstr "Endereço de e-mail"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2079,7 +2079,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Código postal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 membro desde"
@@ -2099,7 +2099,7 @@ msgstr "palavra-passe"
msgid "other account info"
msgstr "outras informações da conta"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID do utilizador"
@@ -2145,96 +2145,96 @@ msgstr "%1 preferências"
msgid "Community"
msgstr "Comunidade"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Eliminar"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Criar"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Perfil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 posts"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Notificações"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Sair da equipa"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrar"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(solicitação de mudança de liderança pendente)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Membro da equipa"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "encontrar uma equipa"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fundador, mas não membro de"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Encontrar amigos"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Amigos"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Computadores"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Doador"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contactar"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Esta pessoa é amiga"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Cancelar amizade"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Pedido pendente"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Adicionar como amigo"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "o nome de utilizador não pode estar vazio ou conter espaços em branco"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "o nome de utilizador tem de ser preenchido"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "o nome de utilizador não pode conter tags HTML"
@@ -2315,7 +2315,7 @@ msgid "Unable to select database - please try again later"
msgstr ""
"Não foi possivel seleccionar a base de dados - por favor, tente mais tarde"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Manter-se logado neste computador"
@@ -2520,7 +2520,7 @@ msgstr "criar ou juntar-se a uma equipa"
msgid "User of the day"
msgstr "Utilizador do dia"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Estado do servidor"
@@ -5650,135 +5650,135 @@ msgstr "Não em execução"
msgid "Disabled"
msgstr "Desabilitado"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Estado do projecto"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Versão de software do Servidor: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Programa"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Anfitrião"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "paginas web data-driven"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "servidor de upload/download"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "agendador"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Em execução:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Programa operando normalmente"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Não em execução:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "O programa falhou ou está em baixo"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Desabilitado:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "O programa está desabilitado"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Estado da computação"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "O servidor da base de dados não está acessível"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Tarefas prontas para enviar"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Tarefas em progresso"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Unidades de trabalho à espera de serem validadas"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Unidades de trabalho à espera de serem assimiladas"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Unidades de trabalho à espera de serem apagadas"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Tarefas à espera de serem apagadas"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Transitioner backlog (horas)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Utilizadores"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "com crédito recente"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "com crédito"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "registados nas ultimas 24 horas"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOPs actualmente"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Tarefas por aplicação"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplicação"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "não enviado"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "em progresso"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "média de tempo decorrido nos utlimos 100 resultados em h (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "utilizadores nas ultimas 24h"
@@ -6056,6 +6056,10 @@ msgstr "Novo fundador?"
msgid "Change founder"
msgstr "Mudar fundador"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Não existem utilizadores para transferir de equipa."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Não pode escolher um nome de equipa em branco"
diff --git a/locale/pt_PT/BOINC-Setup.mo b/locale/pt_PT/BOINC-Setup.mo
index 74ba7e2..b5d724c 100644
Binary files a/locale/pt_PT/BOINC-Setup.mo and b/locale/pt_PT/BOINC-Setup.mo differ
diff --git a/locale/pt_PT/BOINC-Setup.po b/locale/pt_PT/BOINC-Setup.po
index 2b0081c..c80b7c1 100644
--- a/locale/pt_PT/BOINC-Setup.po
+++ b/locale/pt_PT/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC 7.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-11-19 12:01+0000\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-01-30 11:34+0000\n"
"Last-Translator: Miguel Filipe Paulino de Sousa <Miguel.veig at gmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: pt_PT\n"
@@ -19,7 +19,7 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1384862491.0\n"
+"X-POOTLE-MTIME: 1391081656.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
@@ -28,11 +28,11 @@ msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
"Pedimos desculpa, mas esta versão do %s requer o sistema 10.5 ou superior."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Sim"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Não"
@@ -62,15 +62,15 @@ msgstr ""
"Quer definir o %s como protecção de ecrã para todos os %s utilizadores neste "
"Mac?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Erro de permissão depois do re-lançamento"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -78,7 +78,7 @@ msgstr ""
"A eliminação pode levar vários minutos.\n"
"Por favor aguarde."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -89,21 +89,29 @@ msgstr ""
"\n"
"Serão eliminados os ficheiros executáveis mas não os %s ficheiros de dados."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Cancelado: %s não foi alterado. "
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Ocorreu um erro: código de erro %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "nome do utilizador"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"Também quer remover o VirtualBox do seu computador?\n"
+"(O VirtualBox foi instalado juntamente com o BOINC)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -122,7 +130,7 @@ msgstr ""
"para cada utilizador, o ficheiro\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -133,11 +141,11 @@ msgstr ""
"totalidade do seu computador.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Cancelar"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Continuar..."
diff --git a/locale/pt_PT/BOINC-Web.mo b/locale/pt_PT/BOINC-Web.mo
index 1e447ea..8734afa 100644
Binary files a/locale/pt_PT/BOINC-Web.mo and b/locale/pt_PT/BOINC-Web.mo differ
diff --git a/locale/pt_PT/BOINC-Web.po b/locale/pt_PT/BOINC-Web.po
index 5f43fa0..f60cc4a 100644
--- a/locale/pt_PT/BOINC-Web.po
+++ b/locale/pt_PT/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 1.05\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-11-19 11:56+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-28 10:42+0000\n"
"Last-Translator: Miguel Filipe Paulino de Sousa <Miguel.veig at gmail.com>\n"
"Language-Team: \n"
"Language: pt_PT\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: doc\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1384862176.0\n"
+"X-POOTLE-MTIME: 1393584152.0\n"
"X-Poedit-KeywordsList: tra\n"
#: docutil.php:21
@@ -461,16 +461,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Ciência cognitiva e inteligência artificial"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Privado"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Inteligência Artificial"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -482,19 +482,19 @@ msgstr ""
"dados de classes gramaticais e marcadores de classes gramaticais para imitar "
"o comportamento humano em conversas."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologia e Medicina"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Colégio Universitário de Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Descoberta de medicamentos para a Malária"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -508,15 +508,15 @@ msgstr ""
"novos medicamentos precisam de se focar nas NOVAS proteínas no parasita. O "
"objectivo do projecto FightMalaria at Home é encontrar estes novos alvos."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Universidade de Karlsruhe (Alemanha)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Predição de estruturas proteicas"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -531,15 +531,15 @@ msgstr ""
"proteínas e, para desenvolver novos medicamentos com base na estrutura tri-"
"dimencional de proteínas biologicamente importantes."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Universidade de Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Estudo das proteínas - interacções de ligação"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -551,15 +551,15 @@ msgstr ""
"sobre as interacções ligando-proteicos procurando descobrir novos "
"medicamentos."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Parque de Pesquisa Biomédico de Barcelona"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Simulações moleculares de proteinas"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -572,15 +572,15 @@ msgstr ""
"possiveis, podendo criar um novo papel na biologia computacional para a "
"pesquisa biomédica."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Análise de ligações genéticas"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -590,18 +590,18 @@ msgstr ""
"que provocam doenças e que causam alguns tipos de diabetes, hipertensão "
"arterial (pressão arterial alta), cancro, esquizofrenia e muitos outros."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
"Centro de BioInformáticas e Biologia Computacional na Universidade de "
"Maryland"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Investigação da ciência da vida"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -613,15 +613,15 @@ msgstr ""
"do ADN; bacteriana: plasmídeo, e sequências das proteínas de vírus e a "
"diversidade biológica nas reservas naturais."
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Instituto Tropical da Suiça (The Swiss TPH)"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologia"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -640,15 +640,15 @@ msgstr ""
"diversa de parâmetros relacionados com os fatores biológicos e sociais que "
"influenciam a distribuição da doença. "
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Universidade de Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologia"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -665,11 +665,11 @@ msgstr ""
"empenho na elaboração de novas proteínas para combater doenças tais como o "
"VIH, Malaria, Cancro e Alzheimer."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Universidade de Viena"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -679,19 +679,19 @@ msgstr ""
"pública dos dados resultantes, que tem um papel importante em muitos "
"projectos de investigação da Bioinformática."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Ciências do Planeta Terra"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Universidade de Oxford"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Estudo do clima"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -711,15 +711,27 @@ msgstr ""
"enxofre. Isto irá permitir-nos explorar como o clima pode mudar no próximo "
"século sob uma ampla gama de diferentes cenários."
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomia, Fisícas e Quimíca"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Ciência Física"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Engenharia Mecânica"
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+"No momento presente, estamos a calcular a configuração mais optimizada para "
+"uma estrutura truss 52"
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomia"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -735,15 +747,15 @@ msgstr ""
"formação das estrelas) numa base de pixel a pixel, usando técnicas de "
"montagem de computação distribuida em energia espectral (SED)."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Universidade do Texas em Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Química"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -766,11 +778,11 @@ msgstr ""
"grupo de pesquisa está interessado em calcular a dinâmica de sistemas de "
"tempo."
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Universidade de Ilinois em Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -780,11 +792,11 @@ msgstr ""
"descreva o nosso Universo e encontrar uma série de modelos que correspondam "
"aos dados físicos disponíveis das partículas astronómicas."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Instituto Politécnico Rensselaer (RPI)"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -794,11 +806,11 @@ msgstr ""
"preciso da galáxia Via Láctea, usando dados recolhidos pela Sonda Sloan "
"Digital Sky."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Universidade de Leiden, Holanda"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -814,15 +826,15 @@ msgstr ""
"alunos têm utilizado a rede para simular argôn líquido, ou para testar a "
"validade da lei do gás ideal fazendo as simulações na rede."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Universidade de Wisconsin - Milwaukee, Instituto Max Planck"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofísica"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -836,15 +848,15 @@ msgstr ""
"de 2005 apoiado pela Sociedade Americana de Física (APS) e por um número de "
"organizações internacionais."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Organização Europeia para a Investigação Nuclear)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Física"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -858,7 +870,7 @@ msgstr ""
"para investigar as propriedades de partículas. O LHC at home corre simulações "
"para melhorar o design do LHC e os seus detectores."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -868,15 +880,15 @@ msgstr ""
"para as simulações da LHC de eventos fisícos que atingiram um estado de "
"maturação. Requer que instale a VirtualBox no seu computador."
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Universidade da California, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofísica, astrobiologia"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -891,15 +903,15 @@ msgstr ""
"naturalmente e, como tal a sua detecção providenciaria evidências de "
"tecnologia extraterrestre."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Universidade Bielefeld de Ciências Aplicadas"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Engenharia química e nanotecnologia"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -911,19 +923,19 @@ msgstr ""
"switchs magnéticos, com aplicações em medicina (como a quimioterapia em "
"tumores localizados) e biotecnologia."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Várias aplicações"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Academia Chinesa de Ciências"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Física, bioquímica e outros"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -933,11 +945,11 @@ msgstr ""
"adoptarem as tecnologias de computação voluntária e pensamento voluntário "
"para as pesquisas dos mesmos."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matemática, física, evolução"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -945,15 +957,15 @@ msgstr ""
"O Yoyo at home é um intermediário entre o BOINC e vários projetos de computação "
"existentes: ECM, Muon, Evolution at home e distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI - Laboratório de Sistemas Distribuídos e Paralelos (Hungria)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Projectos de Investigação Europeus"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -966,27 +978,27 @@ msgstr ""
"projecto. Os projectos científicos cobertos, incluem matemática, física, "
"biologia, etc."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Universidades Espanholas e Centros de Investigação"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Vários projectos de investigação Espanhóis"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Pesquisa em física, material científico e biomedicina"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "Cidadania Corporativa IBM"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Pesquisa médica, ambiental e outras pesquisas humanitárias"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -998,27 +1010,27 @@ msgstr ""
"mundo. A pesquisa inclui o HIV-AIDS, cancro e doenças tropicais "
"negligenciadas, energia solar, água potável e muitos mais."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matemáticas, computação e jogos"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Ciência da Computação"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Matemáticas, Fisícas, Inteligência Artificial"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Simulação de computação quântica; conjectura de Goldbach."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Criptografia"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1027,25 +1039,25 @@ msgstr ""
"foram interceptados no Atlântico Norte em 1942 e acredita-se que sejam "
"impossíveis de descodificar."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matemáticas"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
"Estudo da Conjectura Collatz, uma conjectura não resolvida nas matemáticas"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Universidade Estatal da Califórnia, Fullerton (CSUF)"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Factorização de grandes integrais"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1061,7 +1073,7 @@ msgstr ""
"uma continuação dessa experiência, apenas com números inteiros que são "
"centenas de dígitos."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1069,11 +1081,11 @@ msgstr ""
"Universidade Técnica Vilnius Gediminas (VGTU) e Universidade de Tecnologia "
"do Kaunas (Lituânia)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Testes do programa"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1086,11 +1098,11 @@ msgstr ""
"As aplicações actuais envolvem o estudo de Monte-Carlo baseado no teste de "
"programa."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Instituto Matemático da Universidade de Leiden / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1108,7 +1120,7 @@ msgstr ""
"abertos em matemática. Se for provado ser verdadeiro, outros tantos "
"problemas em aberto podem ser respondidos diretamente através deste."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1117,11 +1129,11 @@ msgstr ""
"números primos muito grandes, incluindo a pesquisa para o maior número primo "
"conhecido."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Universidade Hochschule RheinMai de Ciências Aplicadas"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1129,7 +1141,7 @@ msgstr ""
"Procura de contra-exemplos para duas conjecturas relacionadas com a "
"identificação de números primos"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1146,6 +1158,9 @@ msgstr "Comentar"
msgid "News is available as an %sRSS feed%s"
msgstr "Notícias disponíveis como um %sFeed RSS%s"
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomia, Fisícas e Quimíca"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s para %s (%s MB)"
diff --git a/locale/ro/BOINC-Android.po b/locale/ro/BOINC-Android.po
index 19f8cc6..78e436f 100644
--- a/locale/ro/BOINC-Android.po
+++ b/locale/ro/BOINC-Android.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-10-30 05:35+0000\n"
+"PO-Revision-Date: 2014-01-08 05:33+0000\n"
"Last-Translator: Marius <marius.sirbu at outlook.com>\n"
"Language-Team: ro <LL at li.org>\n"
"Language: ro\n"
@@ -15,9 +15,10 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2)\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"20)) ? 1 : 2);;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1389159218.0\n"
#. app global
msgctxt "app_name"
@@ -191,7 +192,7 @@ msgstr "Parolă:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr "... Reintroduceţi:"
+msgstr "… Reintroduceţi:"
msgctxt "attachproject_registration_button"
msgid "Create"
@@ -216,7 +217,7 @@ msgstr "Parolă:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr "... Reintroduceţi:"
+msgstr "… Reintroduceţi:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
@@ -343,7 +344,7 @@ msgstr "Sincronizează"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Apăsaţi aici pentru a alege un proiect."
msgctxt "main_error"
msgid "Whooops"
diff --git a/locale/ro/BOINC-Manager.mo b/locale/ro/BOINC-Manager.mo
index 978da50..4f38fbc 100644
Binary files a/locale/ro/BOINC-Manager.mo and b/locale/ro/BOINC-Manager.mo differ
diff --git a/locale/ro/BOINC-Manager.po b/locale/ro/BOINC-Manager.po
index 716bb10..9dfd856 100644
--- a/locale/ro/BOINC-Manager.po
+++ b/locale/ro/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 4.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-18 18:45+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-03 15:01+0000\n"
"Last-Translator: Marius <marius.sirbu at outlook.com>\n"
"Language-Team: BOINC Development Team <rwalton at ssl.berkeley.edu>\n"
"Language: ro\n"
@@ -24,7 +24,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1384800344.0\n"
+"X-POOTLE-MTIME: 1391439700.0\n"
#: AccountInfoPage.cpp:387
#, c-format
@@ -212,340 +212,340 @@ msgstr "Conectat"
msgid "Disconnected"
msgstr "Deconectat"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Închide fereastra %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "În&chide Fereastră"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Închide %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "A&nunţuri\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Arată anunţuri"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Proiecte\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Arată proiecte"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Task-uri\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Arată task-uri"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Trans&feruri\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Arată transferuri"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistici\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Arată statistici"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Utilizare &disc\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Arată utilizare disc"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Vizualizare Simplă...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Arată interfaţa grafică simplă."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Adaugă proiect sau manager de cont..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Oferiţi-vă voluntar pentru unul sau toate din cele mai mult de 30 de "
"proiecte în multe zone ale ştiinţei"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sincronizează cu %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Preia setările curente de la %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Adaugă proiect..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Adaugă un proiect"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "Opreş&te utilizarea %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Elimină acest calculator de sub controlul managerului de cont."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Opţiuni..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Configurează opţiunile de afişare şi setările proxy"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Preferinţe calcul..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Configurează preferinţele de calcul"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Rulează continuu"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Rulează indiferent de preferinţe"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Rulează conform &preferinţelor"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Rulează conform preferinţelor"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Suspendă"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Opreşte lucrul indiferent de preferinţe"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Foloseşte GPU tot timpul"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Permite lucrul GPU indiferent de preferinţe"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Foloseşte GPU bazat pe preferinţe"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Permite lucrul GPU conform preferinţe"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Suspendă GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Opreşte lucrul GPU indiferent de preferinţe"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Acces la reţea disponibil permanent"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Acces la reţea indiferent de preferinţe"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Acces la reţea conform preferinţelor"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Permite accesul la reţea conform preferinţelor"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Accesul la reţea suspendat"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Opreşte activitatea de reţea a BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Conectare la alt calculator care rulează %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Selectează calculator..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Opreşte clienul conectat..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Opreşte clienul curent conectat"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Rulează &benchmark CPU"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Rulează benchmark CPU BOINC"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Realizează comunicaţia prin reţea"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Realizează comunicaţiile prin reţea în aşteptare"
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Citeşte fişierele de configurare"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Citeşte informaţiile de configurare din fişierele cc_config.xml şi "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Citeşte fişierul local de preferinţe"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Citeşte preferinţele din global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Lansează o altă instanţă de %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Lansează un alt %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Log Evenimente...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Afişează mesajele de diagnostic."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "&Ajutor %s"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Arată informaţii despre %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&Ajutor %s"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Arată informaţii despre %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr "%s &website"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Afişează informaţii despre BOINC şi %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Despre %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informaţii despre licenţă şi drepturi de autor."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Fişier"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Vizualizare"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Unelte"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Activitate"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "A&vansat"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Ajutor"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Opreşte utilizarea %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -560,12 +560,12 @@ msgstr ""
"\n"
"Doriţi să nu mai folosiţi %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Închide clientul curent..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -574,27 +574,27 @@ msgstr ""
"%s va opri clientul curent\n"
"şi vă va cere o altă gazdă la care să se conecteze."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s a adăugat cu succes %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "In curs de conectare la %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Conectat la %s (%s)"
@@ -631,26 +631,26 @@ msgstr ""
"\n"
"Va rugăm accesaţi web site-ul proiectului si urmaţi instrucţiunile de acolo."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Se comunică cu clientul BOINC. Vă rugăm aşteptaţi ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Închide %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "I&eşire %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Comunicaţie"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Anulează"
@@ -809,7 +809,7 @@ msgstr "%s s-a deconectat cu succes de la Internet."
msgid "%s failed to disconnected from the Internet."
msgstr "%s nu a reuşit să se deconecteze de la Internet."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -830,7 +830,7 @@ msgstr ""
" - contactaţi administratorul pentru a vă adăuga în grupul de utilizatori\n"
" 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -840,16 +840,16 @@ msgstr ""
"reinstalaţi %s.\n"
"(Cod eroare %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " la "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -858,69 +858,69 @@ msgstr ""
"corespunzător.\n"
"Vă rugăm reporniţi calculatorul şi încercaţi din nou."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "Managerul BOINC a fost pornit automat de către sistemul de operare"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Rulează BOINC numai în System Tray"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Directorul care conţine executabilul Clientului BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Director date BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Nume gazdă sau adresă IP"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "număr port GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Parola"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Porneşte BOINC cu aceste argumente opţionale"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "dezactivează utilizatorii şi permisiunile de securitate BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"setează skin în modul de depanare pentru a activa mesajele de eroare ale "
"managerului de skin-uri"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "sunt permise mai multe insanţe ale Managerului BOINC"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Nefolosit: soluţie temporară pentru bug în XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Detectare Automata)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Necunoscut)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Definit de utilizator)"
@@ -947,7 +947,7 @@ msgid "E&xit"
msgstr "I&eşire"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Reluare"
@@ -1107,64 +1107,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&OK"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "număr real invalid"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "număr invalid"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "timp invalid, formatul este HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "interval timp invalid, formatul este HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "valoare introdusă invalidă detectată"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Eroare Validare"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Aplicaţii de adăugat"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' nu este o aplicaţie executabilă."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Adaugă Aplicaţie Exclusivă"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Numele aplicaţiei de adăugat?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Adaugă aplicaţie exclusiva"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Numele aplicaţiilor trebuie să se termine cu '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' este deja în listă."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1172,11 +1172,11 @@ msgstr ""
"Sunteţi sigur că doriţi să ştergeţi toate preferinţele locale?\n"
"(Acest lucru nu va afecta aplicaţiile exclusive.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Confirmare"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Preferinţe"
@@ -1192,11 +1192,11 @@ msgstr ""
"Apăsaţi Şterge pentru a restaura setările de pe web (excepţie aplicaţiile "
"exclusive)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Şterge"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "şterge toate preferinţele locale şi închide dialogul"
@@ -1216,7 +1216,7 @@ msgstr "utilizare disc şi memorie"
msgid "exclusive applications"
msgstr "aplicaţii exclusive"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "OK"
@@ -1229,7 +1229,7 @@ msgid "close the dialog without saving"
msgstr "închide dialogul fără a salva"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Ajutor"
@@ -1285,7 +1285,7 @@ msgstr ""
"lucrează numai după ce calculatorul nu a fost folosit acest număr de minute"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minute"
@@ -1301,7 +1301,7 @@ msgstr "suspendaţi lucrul dacă utilizarea procesorului depăşeşte acest nive
msgid "percent (0 means no restriction)"
msgstr "procent (0 înseamnă fără restricţii)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "În fiecare zi între orele"
@@ -1309,8 +1309,8 @@ msgstr "În fiecare zi între orele"
msgid "start work at this time"
msgstr "începe lucrul la această oră"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "şi"
@@ -1318,43 +1318,43 @@ msgstr "şi"
msgid "stop work at this time"
msgstr "opreşte lucrul la această oră"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(fără restricţii dacă egale)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Modificări ziua săptămânii:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "bifaţi căsuţa pentru a specifica orele pentru această zi a săptămânii"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Luni"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Marţi"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Miercuri"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Joi"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Vineri"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Sâmbătă"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Duminică"
@@ -1375,9 +1375,9 @@ msgstr "Pe sisteme multiprocesor, foloseşte maxim"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% din procesoare (0 înseamnă să se ignore această setare)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Foloseşte cel mult"
@@ -1386,74 +1386,74 @@ msgstr "Foloseşte cel mult"
msgid "% CPU time"
msgstr "% timp CPU"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Opţiuni generale"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Viteza maximă de descărcare"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBytes/sec."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Viteza maximă de încărcare"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Transferă cel mult"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "fiecare"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "zile"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Rezervă lucru minimă"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Încearcă să menţină suficiente task-uri pentru a fi ocupat pentru atâtea "
"zile"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Rezervă lucru adiţională maximă"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "În plus, menţine suficiente tasl-uri pentru pâna la atâtea zile"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Sări peste verificarea fişierelor imagine"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "bifează daca furnizorul de Internet modifică fişierele imagine"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Opţiuni conectare"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Confirmare înainte de conectarea la internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1461,11 +1461,11 @@ msgstr ""
"dacă este bifat, un dialog de confirmare va fi afişat înainte de a se "
"încerca o conexiune la Internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Deconectează la finalizare"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1474,151 +1474,151 @@ msgstr ""
"finalizată\n"
"(relevant doar pentru conexiune dialup)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Acces reţea permis"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "acces reţea de la ora"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "acces reţea până la ora"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Utilizare disc"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "spaţiul maxim pe disc folosit de BOINC (în Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Gigabytes spaţiu disc"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Lasă cel puţin"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"BOINC lasă cel puţin această cantitate de spaţiu pe dic liberă (în "
"Gigabytes)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabytes spaţiu liber disc"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC foloseşte cel mult acest procent din spaţiul total pe disc"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% din total spaţiu disc"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Task-urile crează punct de control pe disc cel mult la fiecare"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "secunde"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% of page file (spaţiu swap)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Utilizare memorie"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% când calculatorul este folosit"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% când calculatorul nu este folosit"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Lasă aplicaţiile în memorie când sunt suspendate"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "dacă este bifat, unităţile de lucru sunt păstrate în memorie"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Suspendă folosirea procesorului şi a reţelei când rulează aceste aplicaţii:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Adaugă..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Adaugă o aplicaţie la această listă"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Şterge"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Şterge o aplicaţie din această listă"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Pentru opţiuni avansate, consultaţi "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Jurnal Evenimente"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Proiect"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Timp"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Mesaj"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Arată doar acest proiect"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Copi&ază Tot"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Copiază toate mesajele in clipboard."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Copiază &Selectate"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1627,7 +1627,7 @@ msgstr ""
"prin apăsarea si menţinerea tastelor shift sau control în timp ce selectaţi "
"cu mouse-ul mesajele."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1636,24 +1636,24 @@ msgstr ""
"prin apăsarea si menţinerea tastelor shift sau control în timp ce selectaţi "
"cu mouse-ul mesajele."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Închide"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Ajutor cu %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Arată toate &mesajele"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Arată mesaje de la toate proiectele"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Arată doar mesajele pentru proiectul selectat"
@@ -1706,7 +1706,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Ţine minte această decizie şi nu mai arăta acest dialog."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Renunţă"
@@ -1714,223 +1714,223 @@ msgstr "&Renunţă"
msgid "Don't show this dialog again."
msgstr "Nu arăta acest dialog din nou."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Nu vor fi luate task-uri noi pentru "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Preferinţe proiect"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Preferinţe manager de cont"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Proiectul nu are aplicaţii pentru "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Configurarea client exclude "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " preluarea de lucru amânată pentru"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " interval amânare preluare lucru"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Proprietăţi ale proiectului "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "General"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "URL Principal"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Nume utilizator"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Nume echipă"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Resurse partajate"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "RPC Planificator amânat pentru"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Descărcările de fişiere amânate pentru"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Încărcările de fişiere amânate pentru"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID calculator"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "CPU neintensiv"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "da"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Suspendat din GUI"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "nu"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Nu cere mai mult de lucru"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Apel planificator în curs"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Trickle-up în aşteptare"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Locaţie gazdă"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "implicit"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Adăugat prin manager de cont"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Şterge când task-urile sunt gata"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Finalizat"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Credit"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Utilizator"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Gazdă"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Planificare"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Prioritate planificare"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Factor corecţie durată"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Propietăţi ale task-ului "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplicaţia"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Nume unitate de lucru"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Nume"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Stare"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Primit"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Ultima zi pentru raport"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Resurse"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Volum calcul estimat"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Timp CPU la ultimul punct de control"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Timp CPU"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Timp scurs"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Timp rămas estimat"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Proporţie finalizat"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Dimensiune memorie virtuală"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Dimensiune memorie de lucru"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Director"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID Proces"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Local: "
@@ -2018,7 +2018,7 @@ msgstr "Nu completaţi dacă nu e necesar"
msgid "User Name:"
msgstr "Nume utilizator:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Parola:"
@@ -2077,12 +2077,12 @@ msgstr ""
"Setările de limbă ale %s au fost modificate. Pentru ca acestea să aibă "
"efect, trebuie să reponiţi %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Selectează Calculator"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2091,7 +2091,7 @@ msgstr ""
"O altă instanţă de %s rulează deja \n"
"pe acest calculator. Vă rugăm selectaţi un client pentru monitorizare."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Nume host:"
@@ -2290,23 +2290,23 @@ msgstr "Cercetare"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Învăţaţi despre proecte găzduite de World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Se porneşte client"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Se conectează la client"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Recuperare informaţii despre starea sistemului; va rugam asteptaţi..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Aplicaţie lipsă"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2314,184 +2314,184 @@ msgstr ""
"Vă rugăm descărcaţi şi instalaţi aplicaţia CoRD de la "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "pe baterii"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "calculatorul este folosit"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "cerere utilizator"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "timpul zilei"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Benchmarks CPU în curs"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "este nevoie de spaţiu pe disc - verificaţi preferinţele"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "calculatorul nu este folosit"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "porneşte"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "rulează o aplicaţie exclusivă"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU este ocupat"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "limita lăţime bandă reţea depăşită"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "cerut de sistemul de operare"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "motiv necunoscut"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU lipsă, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Nou"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Download-ul a eşuat"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "In curs de download"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (suspendat - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Proiect suspendat de utilizator"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Task suspendat de utilizator"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Suspendat - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU Suspendat - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "În aşteptare de memorie"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "În aşteptare de memorie partajată"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Rulează, prioritate mare"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Rulează"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (CPU-neintensiv)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Aşteaptă să ruleze"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Gata de start"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Aşteptare planificator: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Aşteptare planificator)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (În aşteptare de acces la reţea)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Eroare de calcul"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Upload-ul a eşuat"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "In curs de upload"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Abandonat de utilizator"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Abandonat de proiect"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Abandonat: nu a fost pornit până la termenul limită"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Abandonat: limita de spaţiu pe disc depăşită"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Abandonat: limita de timp de rulare depăşită"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Abandonat: limita de memorie depăşită"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Abandonat"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Acreditat"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Gata de raport"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Eroare: stare nevalidă cu codul '%d'"
@@ -2546,56 +2546,56 @@ msgstr "Verificaţi numele de utilizator şi parola şi încercaţi din nou."
msgid "Check the email address and password, and try again."
msgstr "Verificaţi adresa de email şi parola şi încercaţi din nou."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "mai mult..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Tot"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Alege un proiect"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Pentru a alege un proiect, selectaţi numele sau introduceţi URL-ul mai jos."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Categorii:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Proiecte:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Detalii proiect"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Zona de cercetare:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organizaţie:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Site web:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Sisteme suportate:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL proiect:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2603,7 +2603,7 @@ msgstr ""
"Acest proiect s-ar putea să nu aibă de lucru pentru tipul dumneavoastră de "
"calculator. Doriţi să-l adăugaţi oricum?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Aţi adăugat deja acest proiect. Vă rugăm alegeţi un alt proiect."
@@ -2611,11 +2611,11 @@ msgstr "Aţi adăugat deja acest proiect. Vă rugăm alegeţi un alt proiect."
msgid "Communicating with project."
msgstr "Se comunică cu proiectul."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Fişierele necesare nu s-au găsit pe server."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "A apărut o eroare internă server."
@@ -2724,7 +2724,7 @@ msgid "I agree to the terms of use."
msgstr "Sunt de acord cu condiţiile de utilizare."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "Nu sunt de acord cu condiţiile de utilizare."
#: UnavailablePage.cpp:183
@@ -2814,7 +2814,7 @@ msgstr "'%s' nu conţine un nume de host valid."
msgid "'%s' does not contain a valid path."
msgstr "'%s' nu conţine o cale de căutare validă."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Comenzi"
@@ -2867,7 +2867,7 @@ msgstr "Se primesc anunţuri, vă rugăm aşteptaţi..."
msgid "There are no notices at this time."
msgstr "Nu există anunţuri noi în acest moment."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Anunţuri"
@@ -2884,7 +2884,7 @@ msgstr ""
"preferinţele si, eventual, cere alte task-uri."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3124,135 +3124,135 @@ msgstr "liber: "
msgid "used by other programs: "
msgstr "folosit de alte programe: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Total utilizator"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Media utilizator"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Total host"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Media host"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Ultima actualizare: acum %.0f zile"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Afişează total utilizator"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Afişează credit total pentru utilizator"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Afisează media utilizator"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Afişează credit mediu pentru utilizator"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Afişează total host"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Afişează credit total pentru gazdă"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Afişează media pentru host"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Afişează credit mediu pentru gazdă"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< Proiectul &precedent"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Arată graficul pentru proiectul precedent"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Următorul proiect >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Arată graficul pentru proiectul următor"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Ascunde lista proiecte"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Foloseşte întreaga suprafaţă pentru grafice"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Mod vizualizare"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Un proiect"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Arată un grafic cu proiectul selectat"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Toate proiectele (separat)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Arată toate proiectele, un grafic pe proiect"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Toate proiectele (împreună)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Arată un grafic cu toate proiectele"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Toate proiectele (sumă)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Arată un singur grafic cu suma proiectelor"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistici"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Actualizare grafice..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Afişează lista de proiecte"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Foloseşte o suprafaţă mai mică pentru grafice"
@@ -3420,10 +3420,6 @@ msgstr "Rămas (estimat)"
msgid "Deadline"
msgstr "Timp limită"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Nume"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Sarcini"
@@ -3576,40 +3572,40 @@ msgstr "Sunteţi sigur că doriţi să abandonaţi?"
msgid "Question"
msgstr "Întrebare"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Vizualizare Avansată...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Afişează interfaţa grafică avansată."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Skin"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Selectaţi aspectul interfeţei utilizator."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Implicit"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Suspendă Calculele"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Reia Calculele"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Deschide o fereastră pentru a vedea anunţurile de la proiecte sau BOINC"
@@ -3631,117 +3627,123 @@ msgid "Click OK to set preferences."
msgstr "Selectaţi OK pentru a seta preferinţele."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Apăsaţi Şterge pentru a restaura setările de pe web."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Apăsaţi Ştergere pentru a restaura setările de pe web pentru toate "
+"preferinţele listate mai jos."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Pentru setări adiţionale, selectaţi Preferinţe Calcul in "
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "Vizualizarea Avansată."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"Pentru setări adiţionale, selectaţi Preferinţe Calcul în Vizualizarea "
+"Avanasată."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Lucrează doar între:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Se conectează la internet doar între:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Nu folosi mai mult de:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "spaţiu pe disc"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "din procesor"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Lucrează când este pe baterii?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Lucrează când este nefolosit pentru:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Şterge toate preferinţele locale listate deasupra şi închide dialogul"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Oricând"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Rulează Permanent)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Sunteţi sigur că doriţi să ştergeţi preferinţele locale?\n"
@@ -3801,117 +3803,117 @@ msgstr ""
"Sunteţi sigur că doriţi să renunţaţi la acest task '%s'?\n"
"(Progres: %.1lf%%, Stare: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Nu aveţi nici un proiect. Vă rugăm Adăugaţi un Proiect."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Indisponibil"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Task-uri:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Selectaţi un task pentru a accesa"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "De la:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Progresul acestui task"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Comenzi Task"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Deschideţi un meniu de comenzi care se pot aplica acestui task"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Aplicaţia: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Aplicaţie: Indisponibil"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Indisponibil"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Scurs: %s"
# 84%
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Rămas (estimat): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Stare: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Se primeşte starea curentă."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Se descarcă de lucru de la server."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Procesare Suspendată: Se Rulează Pe Baterii."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Procesare Suspendată: Utilizator Activ."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Procesare Suspendată: Utilizatorul a oprit procesarea."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Procesare Suspendată: Ora."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Procesare Suspendată: Rulează Benchmarks."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Procesare Suspendată."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "În aşteptarea contactării serverelor de proiect."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Se primeşte starea curentă"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Nu există lucru disponibil pentru procesare"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Nu s-a putut conecta la nucleul clientului"
@@ -3953,6 +3955,24 @@ msgstr "Arată Tot"
msgid "Quit %s"
msgstr "Închide %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Nu sunt de acord cu condiţiile de utilizare."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Apăsaţi Şterge pentru a restaura setările de pe web."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Pentru setări adiţionale, selectaţi Preferinţe Calcul in "
+
+#~ msgid "the Advanced View."
+#~ msgstr "Vizualizarea Avansată."
+
+#~ msgid "Workunit name"
+#~ msgstr "Nume unitate de lucru"
+
+#~ msgid "invalid float"
+#~ msgstr "număr real invalid"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Afişează interfaţa grafică avansată (accesibilă)."
diff --git a/locale/ro/BOINC-Project-Generic.po b/locale/ro/BOINC-Project-Generic.po
index 1d6b151..5ae0d04 100644
--- a/locale/ro/BOINC-Project-Generic.po
+++ b/locale/ro/BOINC-Project-Generic.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-26 07:26+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-24 07:17+0000\n"
"Last-Translator: Marius <marius.sirbu at outlook.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: ro\n"
@@ -18,7 +18,7 @@ msgstr ""
"20)) ? 1 : 2);;\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385450819.0\n"
+"X-POOTLE-MTIME: 1393226265.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Română"
@@ -191,7 +191,7 @@ msgstr "Căutare în forumuri"
msgid "Advanced search"
msgstr "Căutare avansată"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Mesaje private"
@@ -201,8 +201,8 @@ msgstr "Mesaje private"
msgid "Questions and Answers"
msgstr "Întrebări şi Răspunsuri"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "Necitit"
msgid "Message %1"
msgstr "Mesaj %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "ascuns"
@@ -460,7 +460,7 @@ msgstr "Nu se poate posta într-un fir ascuns."
msgid "Thread"
msgstr "Fir"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Postări"
@@ -469,7 +469,7 @@ msgstr "Postări"
msgid "Views"
msgstr "Vizualizări"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Ultima postare"
@@ -507,7 +507,7 @@ msgid "Home"
msgstr "Acasă"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Serviciu"
@@ -573,9 +573,9 @@ msgid "Created"
msgstr "Creat"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -751,7 +751,7 @@ msgstr "Ultimul contact"
msgid "Computer info"
msgstr "Informaţii calculator"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Loc"
@@ -760,9 +760,9 @@ msgstr "Loc"
msgid "Avg. credit"
msgstr "Credit mediu"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -850,8 +850,8 @@ msgstr "Doar calculatoare active în ultimele 30 de zile"
msgid "Computer ID"
msgstr "ID calculator"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -888,7 +888,7 @@ msgid "Write"
msgstr "Scrie"
# 80%
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Trimite mesaj privat"
@@ -1652,7 +1652,7 @@ msgstr "Timp raportat<br/>sau timp limită"
msgid "explain"
msgstr "explică"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Stare"
@@ -1744,9 +1744,9 @@ msgstr "Cuvinte cheie"
msgid "Find teams with these words in their names or descriptions"
msgstr "Caută echipe cu aceste cuvinte în nume sau descriere"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1754,7 +1754,7 @@ msgstr "Caută echipe cu aceste cuvinte în nume sau descriere"
msgid "Country"
msgstr "Ţara"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tip echipă"
@@ -1782,8 +1782,8 @@ msgstr "Solicitat de dumneavoastră"
msgid "founder response deadline is %1"
msgstr "timp limită răspuns fondator este %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Nimic"
@@ -1807,105 +1807,105 @@ msgstr "Descriere"
msgid "Web site"
msgstr "Site web"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Statistici multi-proiect"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tip"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Panou de mesaje"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Fire"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Alăturați-vă acestei echipe"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Nu acceptă noi membri"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Răspunde până la %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Membrii"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Fondator"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Administratori"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Membrii noi în ultima zi"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Număr total membrii"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "vizualizare"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Membrii activi"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Membrii cu credit"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Administrator"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Precedenţii %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Următorii %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Nu există echipa."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Această operaţiune necesită privilegii de administrator echipă"
@@ -1915,53 +1915,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Nume echipă, versiune text"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Nu folosiţi tag-uri HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Nume echipă, versiune HTML"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Puteţi folosi %1un număr limitat de tag-uri HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Dacă nu ştiţi HTML, lăsaţi această căsuţă liberă."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL al paginii web a echipei, dacă există"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "fără \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Descrierea echipei"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Acceptă noi membrii?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil utilizator"
@@ -1994,7 +1994,7 @@ msgid "Computers on this account"
msgstr "Calculatoare în acest cont"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Vizualizări"
@@ -2011,8 +2011,8 @@ msgstr "Statistici multi-proiect"
msgid "Account"
msgstr "Cont"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Echipă"
@@ -2041,7 +2041,7 @@ msgstr "Informaţii cont"
msgid "Email address"
msgstr "Adresă email"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2049,7 +2049,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Cod poştal"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 membru din"
@@ -2069,7 +2069,7 @@ msgstr "parolă"
msgid "other account info"
msgstr "alte informaţii cont"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID utilizator"
@@ -2114,96 +2114,96 @@ msgstr "Preferinţe %1"
msgid "Community"
msgstr "Comunitate"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Şterge"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Crează"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 postări"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Anunţuri"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Părăseşte echipa"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administrează"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr ""
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Membru al echipei"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "găseşte o echipă"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Fondator dar nu membru al"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Caută prieteni"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Prieteni"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Calculatoare"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donator"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Contact"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Această persoană este un prieten"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Anulează prietenie"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Cerere în aşteptare"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Adaugă prieten"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "numele de utilizator nu poate avea spaţii la început sau la sfârşit"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "numele de utilizator nu trebuie să fie gol"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "numele de utilizator nu poate conţine tag-uri HTML"
@@ -2280,7 +2280,7 @@ msgstr "Nu s-a putut conecta la baza de date - vă rugăm încercaţi mai târzi
msgid "Unable to select database - please try again later"
msgstr "Nu s-a putut selecta baza de date - vă rugăm încercaţi mai târziu"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Rămâneţi autentificat pe acest calculator"
@@ -2473,7 +2473,7 @@ msgstr "creaţi sau intraţi într-o echipă"
msgid "User of the day"
msgstr "Utilizatorul zilei"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Stare server"
@@ -3135,7 +3135,7 @@ msgstr ""
#: ../user/edit_forum_preferences_form.php:134
msgid "Highlight special users"
-msgstr ""
+msgstr "Evidenţiază utilizatorii speciali"
#: ../user/edit_forum_preferences_form.php:135
msgid "Display this many messages per page"
@@ -3492,7 +3492,7 @@ msgstr ""
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
-msgstr ""
+msgstr "Spune prietenilor tăi despre %1"
#: ../user/ffmail_form.php:37
msgid "Help us by telling your friends, family and coworkers about %1"
@@ -3515,11 +3515,11 @@ msgstr "Adresa dumneavoastră de email:"
#: ../user/ffmail_form.php:48
msgid "Friend's name:"
-msgstr ""
+msgstr "Numele prietenului:"
#: ../user/ffmail_form.php:48
msgid "Friend's email address:"
-msgstr ""
+msgstr "Adresa de email a prietenului:"
#: ../user/ffmail_form.php:56
msgid "Additional message (optional)"
@@ -3635,7 +3635,7 @@ msgstr "Adaugă semnătura mea la acest răspuns"
#: ../user/forum_forum.php:41
msgid "Not visible to you"
-msgstr ""
+msgstr "Nu este vizibil pentru dumneavoastră"
#: ../user/forum_forum.php:80
msgid "Team message board for %1"
@@ -3679,7 +3679,7 @@ msgstr ""
#: ../user/forum_forum.php:184
msgid "unread/locked"
-msgstr ""
+msgstr "necitit/blocat"
# 81%
#: ../user/forum_forum.php:186
@@ -3738,7 +3738,7 @@ msgstr "Întrebări"
#: ../user/forum_index.php:53 ../user/team_forum.php:68
msgid "Discussion among members of %1"
-msgstr ""
+msgstr "Discuţie între membrii %1"
#: ../user/forum_index.php:69
msgid "%1 Message boards"
@@ -3764,7 +3764,7 @@ msgstr ""
#: ../user/forum_moderate_post.php:57 ../user/forum_moderate_thread.php:54
msgid "Commercial spam"
-msgstr ""
+msgstr "Spam comercial"
#: ../user/forum_moderate_post.php:58
msgid "Doublepost"
@@ -3969,7 +3969,7 @@ msgstr "Mesaj:"
#: ../user/forum_reply.php:140
msgid "reply to %1Message ID%2:"
-msgstr ""
+msgstr "răspunde la %1ID Mesaj%2:"
#: ../user/forum_reply.php:166
msgid "Post reply"
@@ -5305,7 +5305,7 @@ msgstr ""
#: ../user/results.php:56
msgid "No computer with ID %1 found"
-msgstr ""
+msgstr "Nu s-a găsit un calcultor cu ID %1"
#: ../user/results.php:63
msgid "No access"
@@ -5331,135 +5331,135 @@ msgstr "Nu Rulează"
msgid "Disabled"
msgstr "Dezactivat"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Stare proiect"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Versiune program server: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Program"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Gazdă"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "planificator"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Rulează:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Programul rulează normal"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Nu Rulează:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Dezactivat:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Programul este dezactivat"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Stare calcule"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Serverul de baze de date nu este accesibil"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Task-uri gata de trimis"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Task-uri în curs"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Unităţi de lucru aşteptând validarea"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Unităţi de lucru aşteptând asimilarea"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Unităţi de lucru aşteptând ştergerea"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Task-uri aşteptând ştergerea"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Utilizatori"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "cu credit recent"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "cu credit"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "înregistraţi în ultimele 24 de ore"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "GigaFLOP curent"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Task-uri după aplicaţie"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplicaţie"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "netrimise"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "în curs"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "timp mediu de rulare al utimelor 100 de rezultate în ore (min-max)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "utilizatori în ultimele 24h"
@@ -5715,6 +5715,10 @@ msgstr "Fondator nou?"
msgid "Change founder"
msgstr "Schimbă fondator"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Trebuie să alegeţi un nume de echipă care să nu fie gol"
@@ -6056,6 +6060,8 @@ msgstr ""
#: ../user/team_lookup.php:98
msgid "More than 100 teams match your search. The first 100 are shown."
msgstr ""
+"Mai mult de 100 de echipe se potrivesc căutării. Doar primele 100 sunt "
+"afişate."
#: ../user/team_lookup.php:104
msgid ""
@@ -6227,7 +6233,7 @@ msgstr "Nume (ID)"
#: ../user/team_remove_inactive_form.php:65
msgid "No members are eligible for removal."
-msgstr ""
+msgstr "Nu există membri care să poată fi şterşi."
#: ../user/team_remove_inactive_form.php:68
msgid "Remove users"
@@ -6244,10 +6250,11 @@ msgstr "Reultate căutare echipă"
#: ../user/team_search.php:94
msgid "No teams were found matching your criteria. Try another search."
msgstr ""
+"Nicio echipă gasită folosind criteriul de căutare. Încercaţi o altă căutare."
#: ../user/team_search.php:96
msgid "Or you can %1create a new team%2."
-msgstr ""
+msgstr "Sau puteţi %1crea o nouă echipă%2."
#: ../user/team_search.php:100
msgid ""
diff --git a/locale/ro/BOINC-Setup.mo b/locale/ro/BOINC-Setup.mo
index fdaac49..e9bd4ce 100644
Binary files a/locale/ro/BOINC-Setup.mo and b/locale/ro/BOINC-Setup.mo differ
diff --git a/locale/ro/BOINC-Setup.po b/locale/ro/BOINC-Setup.po
index cfb23d8..cd3e337 100644
--- a/locale/ro/BOINC-Setup.po
+++ b/locale/ro/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-11-18 18:37+0000\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-03 14:58+0000\n"
"Last-Translator: Marius <marius.sirbu at outlook.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: ro\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1384799834.0\n"
+"X-POOTLE-MTIME: 1391439498.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
@@ -30,11 +30,11 @@ msgstr ""
"Ne pare rău, această versiune de %s necesită versiune de sistem 10.5 sau mai "
"mare."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Da"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Nu"
@@ -64,15 +64,15 @@ msgstr ""
"Doriţi să setaţi %s ca screensaver pentru toţi %s utilizatorii de pe acest "
"Mac?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "OK"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Eroare permisiuni după relansare"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -80,7 +80,7 @@ msgstr ""
"Ştergerea poate dura câteva minute.\n"
"Vă rugăm aşteptaţi."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -92,21 +92,29 @@ msgstr ""
"\n"
"Vor fi şterse executabilele dar nu vor fi atinse fişierele de date %s."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Anulat: %s nu a fost atins."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "A apărut o eroare: cod eroare %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "nume al utilizatorului"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"Doriţi să ştergeţi şi VirtualBox de pe calculatorul dumneavoastră?\n"
+"(VirtualBox a fost instalat împreună cu BOINC.)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -125,7 +133,7 @@ msgstr ""
"pentru fiecare utilizator, fişierul\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -136,11 +144,11 @@ msgstr ""
"calculatorul dumneavoastră.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Anulează"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Continuă..."
diff --git a/locale/ro/BOINC-Web.mo b/locale/ro/BOINC-Web.mo
index ba525d8..3d03daa 100644
Binary files a/locale/ro/BOINC-Web.mo and b/locale/ro/BOINC-Web.mo differ
diff --git a/locale/ro/BOINC-Web.po b/locale/ro/BOINC-Web.po
index 5dd8dca..144c61b 100644
--- a/locale/ro/BOINC-Web.po
+++ b/locale/ro/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-11-22 14:00+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-03 14:59+0000\n"
"Last-Translator: Marius <marius.sirbu at outlook.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: ro\n"
@@ -21,7 +21,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: doc\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1385128845.0\n"
+"X-POOTLE-MTIME: 1391439569.0\n"
"X-Poedit-KeywordsList: tra\n"
#: docutil.php:21
@@ -460,16 +460,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Ştiinţe cognitive şi inteligenţă artificială"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Privat"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Inteligenţă artificială"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -481,19 +481,19 @@ msgstr ""
"din baze de date de vorbire şi părţi de etichetatoare de vorbire pentru a "
"imita comportamentul uman în conversaţii."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biologie şi Medicină"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Colegiul Universitar Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Descoperirea medicamentului antimalarie"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -508,15 +508,15 @@ msgstr ""
"parazit. Proiectul FightMalaria at Home este orientat pentru găsirea acestor "
"noi ţinte."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Universitatea Karlsruhe (Germania)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Predicţia structurii proteinelor"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -531,15 +531,15 @@ msgstr ""
"pentru a dezvolta noi medicamente pe baza structurii tridimensionale a "
"proteinelor importante biologic."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Universitatea Delaware"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Studiul proteinelor - interacţiuni ligand"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -551,15 +551,15 @@ msgstr ""
"lianţilor proteinelor şi astfel capătă o mai bună cunoaştere pentru "
"descoperirea unor farmaceutice inovatoare."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Parcul de Cercetare Biomedicala Barcelona (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Simulări moleculare ale proteinelor"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -571,15 +571,15 @@ msgstr ""
"NVIDIA. Noi aplicaţii biomedicale au devenit dintr-o dată posibile dând un "
"nou rol biologiei computaţionale în cercetarea biomedicală."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, Israel"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Analiza legăturilor genetice"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -589,18 +589,18 @@ msgstr ""
"provocatoare de boli care cauzează anumite tipuri de diabet, hipertensiune "
"(tensiune mare), cancer, schizofrenie şi multe altele."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
"Universitatea Maryland Centrul pentru Bioinformatica şi Biologie "
"Computaţională"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Cercetări ştiinţa vieţii"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -612,15 +612,15 @@ msgstr ""
"din secvenţa ADN; secvenţe proteice bacteriene, plasmid şi viruşi; şi "
"diversitatea biologică în rezervele naturale. "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Institutul Tropical Elveţian"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiologie"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -639,15 +639,15 @@ msgstr ""
"parametri referitori la factori sociali şi biologici care influenţează "
"distribuţia bolii. "
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Universitatea Washington"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biologie"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -663,11 +663,11 @@ msgstr ""
"dumneavoastră. Ne veţi ajuta şi în eforturile noastre de a dezvolta noi "
"proteine pentru a lupta cu boli ca HIV, Malarie, Cancer şi Alzheimer"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Universitatea Viena"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -677,19 +677,19 @@ msgstr ""
"cu datele rezultate, care joacă un rol cheie în multe proiecte de cercetare "
"bioinformatică."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Ştiinţele Pământului"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Universitatea Oxford"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Studiu climatologic"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -710,15 +710,25 @@ msgstr ""
"explorăm modificările climatice posibile în următorul secol într-o mare "
"varietate de scenarii diferite."
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomie, Fizică şi Chimie"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Ştiinţă Fizică"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Inginerie mecanică"
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomie"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -735,15 +745,15 @@ msgstr ""
"pixel folosind distribuţia energiei spectrale (SED) cu tehnici de calcul "
"distribuit."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Universitatea Texas din Austin"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Chimie"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -766,11 +776,11 @@ msgstr ""
"nostru de cercetare este interesat să calculeze dinamica de lungă durată a "
"sistemelor."
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Universitatea Illinois din Urbana-Champaign"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -780,11 +790,11 @@ msgstr ""
"Universul nostru şi de a găsi o gamă de modele în concordanţă cu datele "
"disponibile cu privire la fizica particulelor astronomice."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Institutul Politehnic Rensselaer"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -794,11 +804,11 @@ msgstr ""
"acurateţe al galaxiei Calea Lactee folosind date colectate de Sloan Digital "
"Sky Survey."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Universitatea Leiden, Olanda"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -814,15 +824,15 @@ msgstr ""
"a simula argon lichid sau pentru a test validitatea legii gazului ideal prin "
"realizarea simulărilor prin reţea."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Universitatea Wisconsin - Milwaukee, Institutul Max Planck"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofizică"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -836,15 +846,15 @@ msgstr ""
"2005 suportat de Societatea Americană de Fizică (APS) şi de un număr de "
"organizaţii internaţionale."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Organizaţia Europeană pentru Cercetări Nucleare)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fizică"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -858,7 +868,7 @@ msgstr ""
"vreodată pentru a investiga proprietăţile particulelor. LHC at home rulează "
"simulări pentru a îmbunătăţii designul LHC şi al detectorilor săi."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -869,15 +879,15 @@ msgstr ""
"voluntarilor. Necesită să instalaţi VirtualBox pe calculatorul "
"dumneavoastră"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Universitatea California, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofizică, astrobiologie"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -892,15 +902,15 @@ msgstr ""
"cunsoscute că nu pot apare natural, deci detecţia ar însemna dovada că "
"există tehnologie extraterestră."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Universitatea de Ştiinţe Aplicate Bielefeld"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Inginerie chimică şi nanotehnologie"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -912,19 +922,19 @@ msgstr ""
"magnetice cu aplicabilitate în medicină (cum ar fi chemoterapie locală a "
"tumorilor) şi biotehnologie."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Aplicaţii multiple"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Academia de Ştiinţe Chineză"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Fizică, biochimie şi altele"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -934,11 +944,11 @@ msgstr ""
"pentru a adopta tehnologille de calcul distribuit voluntar şi gândire "
"voluntară pentru cercetările lor."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matematică, fizică, evoluţie"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -946,15 +956,15 @@ msgstr ""
"Yoyo at home este un adaptor între BOINC şi alte proiecte de calcule voluntare: "
"ECM, Muon, Evolution at home şi distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "Laboratorul de Sisteme Paralele şi Distribuite MTA-SZTAKI (Ungaria)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Proiecte de cercetare Europene"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -967,27 +977,27 @@ msgstr ""
"ştiinţiice acoperite de acest proiect includ matematica, fizica, biologia, "
"etc."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Universităţi şi centre de cercetare Spaniole"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Diverse proiecte de cercetare Spaniole"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Cercetări în fizică, ştiinţa materialelor şi biomedicină"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Corporate Citizenship"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Cercetări medicale, de mediu şi alte cercetări umanitare"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -999,27 +1009,27 @@ msgstr ""
"Cercetările includ HIV-SIDA, cancer, boli tropicale şi neglijate, energia "
"solară, apa curată şi multe altele."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matematică, calcule şi jocuri"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Informatică"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Matematică, Fizica, Inteligenţă Artificială"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Simularea calculelor cuantice; presupunerea lui Goldbach."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Criptografie"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1027,24 +1037,24 @@ msgstr ""
"Încearcă sa decodeze 3 mesaje originale Enigma. Semnalele au fost "
"interceptate în Atlanticul de Nord în 1942 şi se presupune că sunt nesparte."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matematică"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "Studiul Presupunerii Collatz , o presupunere nerezolvată în matematică"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Universitatea de Stat California Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Factorizarea întregilor mari"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1060,7 +1070,7 @@ msgstr ""
"7. NFS at Home este o continuare a acestei experien'e, doar că întregii sunt "
"lungi de sute de cifre."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1068,11 +1078,11 @@ msgstr ""
"Universitatea Tehnică Vilnius Gediminas şi Universitatea Tehnologică Kaunas "
"(Lituania)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Testare programe"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1084,11 +1094,11 @@ msgstr ""
"Gediminas (VGTU) ca şi altor instituţii academice Lituaniene. Aplicaţiile "
"curente se ocupă de studiul testării software bazate pe Monte-Carlo."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Institutul de Matematică al Universităţii Leiden / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1106,7 +1116,7 @@ msgstr ""
"mari probleme din matematică. Dacă se dovedeşte adevărată, o mulţime de alte "
"probleme deschise pot fi rezolvate direct din ea."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1114,11 +1124,11 @@ msgstr ""
"Primegrid are mai multe proiecte care caută diferite forme a unor numere "
"prime foarte mari, inclusiv căutarea celui mai mare număr prim cunoscut."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Universitatea de Ştiinţe Aplicate Hochschule RheinMain"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1126,7 +1136,7 @@ msgstr ""
"Căutarea unor contraexemple a două presupuneri legate de identificarea "
"numerelor prime"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1143,6 +1153,9 @@ msgstr "Comentariu"
msgid "News is available as an %sRSS feed%s"
msgstr "Ştirile sun disponibile ca un %sfeed RSS%s"
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomie, Fizică şi Chimie"
+
#~ msgid "Download BOINC + Virtualbox"
#~ msgstr "Descărcaţi BOINC + Virtualbox"
diff --git a/locale/ru/BOINC-Android.po b/locale/ru/BOINC-Android.po
index 0d754b0..75f946a 100644
--- a/locale/ru/BOINC-Android.po
+++ b/locale/ru/BOINC-Android.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-11-09 08:40+0000\n"
+"PO-Revision-Date: 2014-02-02 15:08+0000\n"
"Last-Translator: Nikolay Saharov <saharovna at gmail.com>\n"
"Language-Team: ru <LL at li.org>\n"
"Language: ru\n"
@@ -15,9 +15,10 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\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: Translate Toolkit 1.10.0\n"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1391353715.0\n"
#. app global
msgctxt "app_name"
@@ -343,7 +344,7 @@ msgstr "Синхронизировать"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Нажмите здесь для выбора проекта."
msgctxt "main_error"
msgid "Whooops"
@@ -1096,7 +1097,7 @@ msgstr "Возобновить"
msgctxt "menu_about"
msgid "About"
-msgstr "О"
+msgstr "О программе"
msgctxt "menu_help"
msgid "Help"
@@ -1109,7 +1110,7 @@ msgstr "Вернуться"
msgctxt "about_title"
msgid "About"
-msgstr "О"
+msgstr "О программе"
msgctxt "about_name"
msgid "BOINC"
diff --git a/locale/sk/BOINC-Android.po b/locale/sk/BOINC-Android.po
index af765f8..a03e03e 100644
--- a/locale/sk/BOINC-Android.po
+++ b/locale/sk/BOINC-Android.po
@@ -2,25 +2,27 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2014-04-06 00:49+0000\n"
+"Last-Translator: aceman <acelists at atlas.sk>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1396745386.0\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
@@ -47,11 +49,11 @@ msgstr ""
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "Пожалуйста, введите URL проекта"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "Добавить менеджер проектов"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
@@ -60,27 +62,28 @@ msgstr ""
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "Соединение с сервером проекта…"
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "Логотип проекта."
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "Основная область:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "Специализация:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
msgstr ""
+# Это типа институт/университет, который владеет проектом
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "Владелец:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
@@ -88,33 +91,35 @@ msgstr ""
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "Android:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
-msgstr ""
+msgid "This project supports Android devices"
+msgstr "Этот проект поддерживает Android-устройства"
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
-msgstr ""
+msgid "This project does not support Android devices"
+msgstr "Этот проект не поддерживает устройства на базе Android"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "Условия использования для"
msgctxt "attachproject_login_accept_terms_of_use"
msgid ""
"By creating an account with this project, you accept the terms of use as "
"shown above."
msgstr ""
+"Создавая учётную запись в этом проекте, вы принимаете условия использования, "
+"которые показаны выше."
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "Войти с существующей учётной записью"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "Электронная почта:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
@@ -126,19 +131,19 @@ msgstr ""
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "Впервые в"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "Зарегистрировать учётную запись для участия:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "Посетить веб-сайт проекта для создания учётной записи:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "Проект в данный момент не позволяет создавать новые учётные записи!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
@@ -150,20 +155,20 @@ msgstr ""
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "Восстановить пароль"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "Сбой при установке связи с проектом!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "Подключен"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "Регистрация учётной записи для"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
@@ -171,7 +176,7 @@ msgstr ""
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "Электронная почта:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
@@ -187,7 +192,7 @@ msgstr ""
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Повторите:"
msgctxt "attachproject_registration_button"
msgid "Create"
@@ -196,15 +201,15 @@ msgstr ""
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "Добавить менеджер проектов"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "Пользователь:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
@@ -212,11 +217,11 @@ msgstr ""
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… Повторите:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "Добавить"
#. error strings
msgctxt "attachproject_error_wrong_name"
@@ -237,7 +242,7 @@ msgstr ""
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "Введите URL"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
@@ -257,31 +262,31 @@ msgstr ""
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "Имя пользователя не принято"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "Адрес электронной почты уже используется"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "Проект выключен"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "Адрес электронной почты не принят"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "Пароль не принят"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "Создание учётной записи в данном проекте отключено"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "Неправильный адрес (URL)"
#. working activity
msgctxt "attachproject_working_back_button"
@@ -302,15 +307,15 @@ msgstr ""
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "…"
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
@@ -330,16 +335,16 @@ msgstr ""
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "Добавить менеджер проектов"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "Синхронизировать"
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
-msgstr ""
+msgid "Tab here to choose a project."
+msgstr "Нажмите здесь для выбора проекта."
msgctxt "main_error"
msgid "Whooops"
@@ -350,15 +355,17 @@ msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"…этого не должно было произойти!\n"
+"Нажмите на значок BOINC, чтобы попробовать ещё раз."
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "Значок BOINC"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "Статус"
msgctxt "tab_projects"
msgid "Projects"
@@ -391,7 +398,7 @@ msgstr ""
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "Спасибо за участие."
msgctxt "status_paused"
msgid "Suspended"
@@ -399,11 +406,11 @@ msgstr ""
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "Нечего делать"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "Ожидание заданий…"
msgctxt "status_computing_disabled"
msgid "Suspended"
@@ -411,7 +418,7 @@ msgstr ""
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "Нажмите кнопку Play для возобновления расчётов и передачи данных."
msgctxt "status_launching"
msgid "Starting…"
@@ -419,716 +426,771 @@ msgstr ""
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "Выбрать проект для участия."
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "Закрытие…"
+#, fuzzy
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "Тестирование производительности…"
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "изображение проекта"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "Чтение настроек…"
+#, fuzzy
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "Сохранить"
+#, fuzzy
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "Введите новое значение:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "Выбрать:"
+#, fuzzy
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "Основные"
+#, fuzzy
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "Сеть"
+#, fuzzy
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "Питание"
+#, fuzzy
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "Процессор"
+#, fuzzy
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "Диск"
+#, fuzzy
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "Память"
+#, fuzzy
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "Отладка"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
-
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
+msgstr "Показать дополнительные настройки и элементы управления…"
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
-
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
-
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
-msgstr ""
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
+msgstr "Выполнять расчёты при работе от батареи"
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "Мин. уровень заряда батареи"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
msgstr ""
+"BOINC приостановит расчёты, когда заряд батареи будет ниже указанного "
+"уровня."
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "Макс. температура батареи"
msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
msgstr ""
+"BOINC приостановит расчёты, когда температура батареи превысит указанный "
+"уровень. Не рекомендуется менять это значение."
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "Макс. используемое пространство памяти"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
msgstr ""
+"Сколько процентов от общего объёма памяти вашего устройства BOINC может "
+"использовать?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "Мин. свободное пространство"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
+msgstr "Какой объём памяти вашего устройства должен оставаться свободным?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "Ежедневный предел передачи"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "Ограничивает ежедневный трафик данных, вызванный BOINC."
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "Передавать задания только по WiFi"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "Автозапуск"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "Показывать уведомление, когда приостановлен"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "Используемые ядра процессора"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
msgstr ""
+"Ограничивает количество ядер процессора, которые использует BOINC для "
+"расчётов."
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "Пауза при использовании процессора выше"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
msgstr ""
+"Определяет, когда BOINC останавливает расчёты из-за использования процессора "
+"другими приложениями."
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "Предельное время процессора"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "Ограничивает время процессора, которое использует BOINC для расчётов."
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "Ограничение ОЗУ"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "Ограничивает объём ОЗУ, который задания могут занимать."
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "Флаги журнала клиента BOINC"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "Уровень журнала GUI"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "Задает уровень детализации сообщений журнала GUI."
+#, fuzzy
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "МБ"
+#, fuzzy
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "ГБ"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "Чтение проектов…"
+#, fuzzy
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "Добавить проект"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "Значок проекта"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "Очки:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(на этом устройстве)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(всего)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "Приостановлен пользователем"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "Не запрашивать новые задания"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "Проект завершён - ОК для удаления"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "Будет удалён после завершения заданий"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "Запрос информации у планировщика"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "Производится запрос информации у планировщика"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "Ожидание промежуточной отправки"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "Связь по расписанию:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "Команды проекта:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "Посетить веб-сайт"
+#, fuzzy
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "Обновить"
+#, fuzzy
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "Удалить"
+#, fuzzy
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "Приостановить"
+#, fuzzy
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "Возобновить"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "Не запрашивать задания"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "Получать новые задания"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "Сбросить"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "Команды менеджера проектов:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "Синхронизировать"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "Отключить"
#. project confirm dialog
+#, fuzzy
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "Удалить проект?"
+#, fuzzy
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "Вы действительно хотите удалить"
+#, fuzzy
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "из BOINC?"
+#, fuzzy
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "Удалить"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "Перезапустить проект"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "Вы действительно хотите перезапустить"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "Сбросить"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "Отключить менеджер проектов"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "Вы уверены, что хотите прекратить использование"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "Отключить"
#. tasks tab strings
+#, fuzzy
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "Название задания:"
+#, fuzzy
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "Затрачено времени:"
+#, fuzzy
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(приостановлено)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "Крайний срок:"
+#, fuzzy
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "новый"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "ожидание загрузки"
+#, fuzzy
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "загрузка завершена"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "ошибка расчётов"
+#, fuzzy
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "отправка"
+#, fuzzy
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "отправка завершена"
+#, fuzzy
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "прервано"
+#, fuzzy
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "сбой при отправке"
+#, fuzzy
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "готово"
+#, fuzzy
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "выполняется"
+#, fuzzy
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "приостановлено"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "приостанавливается"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "приостанавливается"
+#, fuzzy
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "приостановлено"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "проект приостановлен"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "готово для подтверждения"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "Прервать задание?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "Прервать задание:"
+#, fuzzy
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Прервать"
+#, fuzzy
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "Отмена"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "Диалог подтверждения"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "Чтение списка передач…"
+#, fuzzy
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "Отправка"
+#, fuzzy
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "Загрузка"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "повтор через"
+#, fuzzy
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "неудача"
+#, fuzzy
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr "приостановлено"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "активна"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "ожидает"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "запрос к проекту отложен на"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "Файл:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "Повторить передачи"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "Прервать передачу?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "Прервать файл:"
+#, fuzzy
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "Прервать"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "Чтение уведомлений…"
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "Загрузка сообщений журнала…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "Сообщения клиента"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "Сообщения GUI"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "Журнал скопирован в буфер обмена."
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "Журнал событий для BOINC на Android:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "Расчёты приостановлены."
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
msgstr ""
+"Подключите ваше устройство к зарядному устройству для продолжения расчётов."
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "Пользователь работает."
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "Закончилось выделенное время для расчётов."
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC измеряет производительность вашего устройства…"
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "Закончилось свободное место на диске."
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "Запланированное ограничение нагрузки процессора."
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "Нет активности пользователя за последнее время."
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "Инициализация отложена."
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "Выполняется привилегированное приложение."
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "Ваше устройство занято другими приложениями."
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC достиг ограничения передачи данных по сети."
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "Android остановил."
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "Нет подключения к WiFi."
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
+msgstr "Необходимо подзарядить батарею для продолжения расчётов."
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "Расчёты возобновятся, когда заряд батареи достигнет"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "в данный момент"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "Ожидание охлаждения батареи"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "Возобновление расчётов…"
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "вручную."
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "Запрошено пользователем"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "Запросить задания"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "Сообщить о завершённых заданиях"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "Отправить промежуточное сообщение"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "Запрошено менеджером проектов"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "Инициализация проекта"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "Запрошено проектом"
+#, fuzzy
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "Неизвестная причина"
#. menu
+#, fuzzy
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "Обновить"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "Отправить письмом"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "Копировать в буфер обмена"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "Журнал событий"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "Выйти из BOINC"
+#, fuzzy
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "Приостановить"
+#, fuzzy
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "Возобновить"
+#, fuzzy
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "О программе"
+#, fuzzy
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "Справка"
#. about dialog
+#, fuzzy
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "Вернуться"
+#, fuzzy
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "О программе"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
+#, fuzzy
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "Версия"
+#, fuzzy
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
msgstr ""
+"BOINC - Berkeley Open Infrastructure for Network Computing\n"
+"Открытая Инфраструктура для Распределенных Вычислений университета Беркли"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
+"© 2003-2013 Калифорнийский университет, Беркли.\n"
+"Все права защищены."
+
+#, fuzzy
+#~ msgctxt "main_noproject_warning"
+#~ msgid "Tap here to choose a project."
+#~ msgstr "Нажмите здесь для выбора проекта."
+#, fuzzy
+#~ msgctxt "prefs_power_source_usb"
+#~ msgid "USB connection"
+#~ msgstr "Нет подключения к Интернету"
diff --git a/locale/sk/BOINC-Manager.mo b/locale/sk/BOINC-Manager.mo
index 762afea..ae9bfa0 100644
Binary files a/locale/sk/BOINC-Manager.mo and b/locale/sk/BOINC-Manager.mo differ
diff --git a/locale/sk/BOINC-Manager.po b/locale/sk/BOINC-Manager.po
index 08fcdf0..a21cf40 100644
--- a/locale/sk/BOINC-Manager.po
+++ b/locale/sk/BOINC-Manager.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: BOINC Manager 5.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-15 22:26-0700\n"
-"PO-Revision-Date: 2013-11-12 23:08+0000\n"
+"PO-Revision-Date: 2014-03-17 21:31+0000\n"
"Last-Translator: aceman <acelists at atlas.sk>\n"
"Language-Team: BOINC SK\n"
"Language: sk\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1384297687.0\n"
+"X-POOTLE-MTIME: 1395091864.0\n"
#: AccountInfoPage.cpp:387
#, c-format
@@ -3803,7 +3803,8 @@ msgstr "Toto okno nastavuje preferencie len pre tento počítač."
#: sg_DlgPreferences.cpp:287
msgid "Click OK to set preferences."
-msgstr "Kliknite OK pre uloženie preferencií."
+msgstr ""
+"Kliknite Vymazať pre obnovenie preferencií uvedených nižšie na stav z webu."
#: sg_DlgPreferences.cpp:292
msgid "Click Clear to restore web-based settings."
diff --git a/locale/sl/BOINC-Android.po b/locale/sl/BOINC-Android.po
index 23beed1..9a0db97 100644
--- a/locale/sl/BOINC-Android.po
+++ b/locale/sl/BOINC-Android.po
@@ -18,7 +18,7 @@ msgstr ""
"n%100==4 ? 2 : 3)\n"
"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
-"X-POOTLE-MTIME: 1386194841.0\n"
+"X-POOTLE-MTIME: 1388701690.0\n"
#. app global
msgctxt "app_name"
@@ -93,6 +93,7 @@ msgctxt "attachproject_login_header_description"
msgid "Description:"
msgstr "Описание:"
+# Это типа институт/университет, который владеет проектом
#, fuzzy
msgctxt "attachproject_login_header_home"
msgid "Home:"
@@ -236,30 +237,34 @@ msgid "Create"
msgstr "Создать"
#. account manager
+#, fuzzy
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr "Adaugă manager de cont"
+msgstr "Добавить менеджер проектов"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
msgstr "URL"
+#, fuzzy
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr "Utilizator:"
+msgstr "Пользователь:"
#, fuzzy
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
msgstr "Heslo:"
+#, fuzzy
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr "... Reintroduceţi:"
+msgstr "… Повторите:"
+#, fuzzy
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr "Adaugă"
+msgstr "Добавить"
#. error strings
#, fuzzy
@@ -282,9 +287,10 @@ msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
msgstr "Пароли не совпадают"
+#, fuzzy
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr "Introduceți URL"
+msgstr "Введите URL"
#, fuzzy
msgctxt "attachproject_error_no_email"
@@ -330,9 +336,10 @@ msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
msgstr "Создание учётной записи в данном проекте отключено"
+#, fuzzy
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr "URL invalid"
+msgstr "Неправильный адрес (URL)"
#. working activity
#, fuzzy
@@ -387,22 +394,25 @@ msgctxt "attachproject_working_login"
msgid "Log in"
msgstr "Prihlásiť sa"
+#, fuzzy
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr "Adaugă manager de cont"
+msgstr "Добавить менеджер проектов"
+#, fuzzy
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr "Sincronizează"
+msgstr "Синхронизировать"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
msgstr ""
+#, fuzzy
msgctxt "main_error"
msgid "Whooops"
-msgstr "Упс"
+msgstr "Ups"
msgctxt "main_error_long"
msgid ""
@@ -762,9 +772,10 @@ msgctxt "projects_control_dialog_title"
msgid "Project commands:"
msgstr "Команды проекта:"
+#, fuzzy
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr "Vizitați pagina web"
+msgstr "Посетить веб-сайт"
#, fuzzy
msgctxt "projects_control_update"
@@ -798,17 +809,20 @@ msgctxt "projects_control_reset"
msgid "Reset"
msgstr "Сбросить"
+#, fuzzy
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr "Comenzi manager de cont:"
+msgstr "Команды менеджера проектов:"
+#, fuzzy
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr "Sincronizează"
+msgstr "Синхронизировать"
+#, fuzzy
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr "Dezactivează"
+msgstr "Отключить"
#. project confirm dialog
#, fuzzy
@@ -843,17 +857,20 @@ msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
msgstr "Сбросить"
+#, fuzzy
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr "Dezactivează manager de cont"
+msgstr "Отключить менеджер проектов"
+#, fuzzy
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr "Sunteţi sigur că doriţi să nu mai folosiţi"
+msgstr "Вы уверены, что хотите прекратить использование"
+#, fuzzy
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr "Dezactivează"
+msgstr "Отключить"
#. tasks tab strings
#, fuzzy
@@ -1017,9 +1034,10 @@ msgctxt "trans_header_name"
msgid "File:"
msgstr "Файл:"
+#, fuzzy
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr "Reîncearcă transferuri"
+msgstr "Повторить передачи"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
@@ -1035,9 +1053,10 @@ msgid "Abort"
msgstr "Prerušiť"
#. notices tab strings
+#, fuzzy
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr "Se citesc atenţionările..."
+msgstr "Чтение уведомлений…"
#. eventlog tab strings
msgctxt "eventlog_loading"
diff --git a/locale/sl/BOINC-Manager.mo b/locale/sl/BOINC-Manager.mo
index b1442a2..e522d6e 100644
Binary files a/locale/sl/BOINC-Manager.mo and b/locale/sl/BOINC-Manager.mo differ
diff --git a/locale/sl/BOINC-Manager.po b/locale/sl/BOINC-Manager.po
index 6cc185f..de644c4 100644
--- a/locale/sl/BOINC-Manager.po
+++ b/locale/sl/BOINC-Manager.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
"PO-Revision-Date: 2013-06-05 20:02+0200\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -215,343 +215,343 @@ msgstr "Povezan"
msgid "Disconnected"
msgstr "Odklopljen"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Zapri okno %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Zapri okno"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Zapusti %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Obvestila\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Prikaži obvestila"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projekti\tCtrl-Shitf+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Prikaži projekte"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Opravila\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Prikaži opravila"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "P&renosi\tCtrl-Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Prikaži prenose"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Statistika\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Prikaži statistiko"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "Poraba &diska\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Prikaži porabo diska"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Preprosti &pogled...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Prikaži preprost uporabniški vmesnik."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "Dodaj &projekt ali upravitelja računov..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Bodite prostovoljec za kateregakoli ali vse izmed več kot 30 projektov na "
"več znanstvenih področjih"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Sinhroniziraj s %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Dobi trenutne nastavitve od %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "Dodaj &projekt..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Dodaj projekt"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "Nehaj&te uporabljati %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Odstrani ta računalnik iz nadzora upravitelja računov."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "M&ožnosti"
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
#, fuzzy
msgid "Configure display options and proxy settings"
msgstr ""
"Nastavi možnosti grafičnega uporabniškega vmesnika in nastavitve "
"posredniškega strežnika (proxy)"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Nastavitve računanja..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Nastavi nastavitve računanja"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Poganjaj vedno"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Dovoli delo, ne glede na nastavitve"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Poganjaj glede na &nastavitve"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Dovoli delo glede na vaše nastavitve"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "Na ča&kanje"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Ustavi delo ne glede na nastavitve"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Vedno uporabi grafični procesor"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Dovoli delo grafičnega procesorja, ne glede na nastavitve"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Uporabi grafični procesor, glede na nastavitve"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Dovoli delo grafičnega procesorja glede na nastavitve"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Daj grafični procesor na čakanje"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Ustavi delo grafičnega procesorja, ne glede na nastavitve"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Mrežna aktivnost je vedno na voljo"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Dovoli mrežno aktivnost ne glede na nastavitve"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Mrežna aktivnost temelječa na nastavitvah"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Dovoli mrežno aktivnost glede na nastavitve"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Mrežna aktivnost na čakanju"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Ustavi mrežno aktivnost BOINC"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Poveži se na drug računalnik, ki poganja %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Izberi računalnik..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Izklopi povezanega odjemalca..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Izklopi trentuno povezanega odjemalca"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Poženi meritev &hitrost procesorja"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Požene BOINC meritve hitrosti procesorja"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Izvedi komunikacijo po mreži"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Izvedi vso čakajočo komunikacijo po mreži"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
#, fuzzy
msgid "Read config files"
msgstr "Preberi konfiguracijsko datoteko"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Preberi lokalno datoteko z nastavitvami"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Preberi nastavitve iz global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr ""
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr ""
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr ""
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Prikaži diagnostična sporočila."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &pomoč"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Prikaži informacije o %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s pomoč"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Prikaži informacije o %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr ""
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Prikaži informacije o BOINC in %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&O %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Informacije o licencah in avtorskih pravicah."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Datoteka"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Pogled"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Orodja"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Aktivnost"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "Nap&redno"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "Po&moč"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr ""
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
#, fuzzy, c-format
msgid ""
@@ -567,12 +567,12 @@ msgstr ""
"\n"
"Ali se želite odklopiti od %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Zaustavi trenutnega odjemalca..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -581,28 +581,28 @@ msgstr ""
"%s bo zaustavil trenutnega odjemalca\n"
"in vas povprašal po drugem gostitelju, na katerega naj se poveže."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
#, fuzzy, c-format
msgid "%s has successfully added %s"
msgstr "%s se je uspešno pripel(-a) na %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Povezujem se na %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Povezan na %s (%s)"
@@ -639,26 +639,26 @@ msgstr ""
"\n"
"Prosim, obiščite spletno stran projekta in sledite tamkajšnjim navodilom."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Komuniciram z BOINC odjemalcem. Prosim, počakajte ..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "Za&pusti %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "Za&pusti %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Komunikacija"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Prekliči"
@@ -818,7 +818,7 @@ msgstr "%s se je uspešno odklopil z interneta."
msgid "%s failed to disconnected from the Internet."
msgstr "%s se ni uspel odklopiti z interneta."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
#, fuzzy, c-format
msgid ""
@@ -840,7 +840,7 @@ msgstr ""
" - kontaktirajte vašega sistemskega skrbnika, da vas doda v\n"
" uporabniško skupino \"boinc_master\"."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
#, fuzzy, c-format
msgid ""
@@ -851,16 +851,16 @@ msgstr ""
"namestite BOINC.\n"
"(Koda napake %d)"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -868,71 +868,71 @@ msgstr ""
"Ponovni zagon je potreben, da bo lahko BOINC pravilno tekel.\n"
"Prosim, ponovno zaženite vaš računalnik in poskusite znova."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Upravitelj"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Upravitelj je bil samodejno pognan s strani operacijskega sistema"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
"Poženi BOINC ob zagonu, tako da je vidna samo ikona v sistemskem pladnju."
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Imenik, ki vsebuje program BOINC Odjemalec."
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC podatkovni imenik"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr ""
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr ""
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
#, fuzzy
msgid "Password"
msgstr "Geslo:"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Ob zagonu poženi BOINC s temi opcijskimi argumenti."
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "onemogoči BOINC varnostne uporabnike in dovoljenja"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"nastavi razhroščevalni način preobleke, da omogočite sporočila o napakah "
"upravitelja preoblek"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr ""
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(samodejna prepoznava)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(neznano)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(določeno s strani uporabnika)"
@@ -959,7 +959,7 @@ msgid "E&xit"
msgstr "Iz&hod"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Nadaljuj"
@@ -1118,74 +1118,74 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Berkeleyeva odprta infrastruktura za mrežno računanje"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&V redu"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "napačno število s plavajočo vejico"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr ""
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "napačen čas, format je HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "napačen časovni interval, format je HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "zaznana je bila napačna vhodna vrednost"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Napaka pri validaciji"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr ""
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr ""
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr ""
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr ""
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Potrditev"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Nastavitve"
@@ -1201,11 +1201,11 @@ msgstr ""
"Kliknite V redu, da nastavite nastavitve.\n"
"Kliknite Počisti, da obnovite nastavitve temelječe na spletu."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Počisti"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "počisti vse lokalne nastavitve in zapri ta dialog"
@@ -1225,7 +1225,7 @@ msgstr "poraba diska in pomnilnika"
msgid "exclusive applications"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "V redu"
@@ -1238,7 +1238,7 @@ msgid "close the dialog without saving"
msgstr "zapri ta dialog brez shranjevanja"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Pomoč"
@@ -1294,7 +1294,7 @@ msgid ""
msgstr "opravljaj delo samo, kadar niste uporabljali računalnik že toliko minut"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "minut"
@@ -1310,7 +1310,7 @@ msgstr "prekine delo, če uporaba procesorja preseže ta nivo"
msgid "percent (0 means no restriction)"
msgstr "odstotkov (0 pomeni brez omejitev)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Vsak dan med urami"
@@ -1318,8 +1318,8 @@ msgstr "Vsak dan med urami"
msgid "start work at this time"
msgstr "prični z delom ob tem času"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "in"
@@ -1327,43 +1327,43 @@ msgstr "in"
msgid "stop work at this time"
msgstr "zaključi z delom ob tem času"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(če sta enaka, ni omejitve)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Dan-v-tednu povozi nastavitve:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "kliknite tu, da podate ure za ta dan v tednu"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "ponedeljek"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "torek"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "sreda"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "četrtek"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "petek"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "sobota"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "nedelja"
@@ -1384,9 +1384,9 @@ msgstr "Na večprocesorskih sistemih uporabi največ"
msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Uporabi največ"
@@ -1395,74 +1395,74 @@ msgstr "Uporabi največ"
msgid "% CPU time"
msgstr "% procesorskega časa"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Splošne možnosti"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Največja hitrost prejemanja"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBajtov/sekundo"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Največja hitrost pošiljanja"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Prenesi največ"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbajtov"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "vsakih"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "dni"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
#, fuzzy
msgid "Minimum work buffer"
msgstr "Dodatni delovni medpomnilnik"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
#, fuzzy
msgid "Max additional work buffer"
msgstr "Dodatni delovni medpomnilnik"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Preskoči preverjanje slikovne datoteke"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "obkljukajte to, če vaš ponudnik interneta spreminja slikovne datoteke"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Možnosti povezave"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Zahtevaj potrditev pred povezavo na internet"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1470,11 +1470,11 @@ msgstr ""
"če je obkljukano, bo prikazan potrditveni dialog pred poskusom povezave na "
"internet"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Odklopi, ko je končano"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1483,151 +1483,151 @@ msgstr ""
"končano\n"
"(smiselno le za klicne povezave)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Dovoljena uporaba mreže"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "začetna ura uporabe mreže"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "končna ura uporabe mreže"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Poraba diska"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "največji dovoljeni prostor za uporabo s strani BOINC (v gigabajtih)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Prostor na disku v gigabajtih"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Pusti vsaj"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC naj pusti prosto vsaj to količino diska (v gigabajtih)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Gigabajtov prostega prostora na disku"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC naj uporablja največ ta odstotek prostora na disku"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% skupnega prostora na disku"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Opravila nastavijo kontrolno točko na disk največ na vsakih"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "sekund"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% izmenjevalne datoteke (navidezni pomnilnik)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Poraba pomnilnika"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "%, ko je računalnik v uporabi"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "%, ko je računalnik nedejaven"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Pusti aplikacije v pomnilniku med tem, ko so na čakanju"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "če je obkljukano, bodo delovne enote na čakanju ostale v pomnilniku"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Odstrani"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Dnevnik dogodkov"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Projekt"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Čas"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Sporočilo"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
#, fuzzy
msgid "&Show only this project"
msgstr "Prikaži samo ta projekt"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
#, fuzzy
msgid "Copy &All"
msgstr "Kopiraj vse"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Kopiraj vsa sporočila na odložišče."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
#, fuzzy
msgid "Copy &Selected"
msgstr "Kopiraj izbrano"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1635,7 +1635,7 @@ msgstr ""
"Kopiraj označena sporočila na odložišče. Označite lahko več sporočil s tem, "
"da držite pritisnjeno shift ali ctrl tipko med klikanjem na sporočila."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1643,25 +1643,25 @@ msgstr ""
"Kopiraj označena sporočila na odložišče. Označite lahko več sporočil s tem, "
"da držite pritisnjeno shift ali ctrl tipko med klikanjem na sporočila."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Zapri"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr ""
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
#, fuzzy
msgid "Show all &messages"
msgstr "Prikaži vsa sporočila"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Prikaži sporočila za vse projekte"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Prikaži samo sporočila za izbrani projekt"
@@ -1709,7 +1709,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Zapomni si to odločitev in ne prikaži tega dialoga."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Prekliči"
@@ -1717,231 +1717,231 @@ msgstr "&Prekliči"
msgid "Don't show this dialog again."
msgstr "Ne prikaži znova tega dialoga."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
#, fuzzy
msgid "Don't fetch tasks for "
msgstr "Ne potegni novih opravil za procesor"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Nastavitve projekta"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
#, fuzzy
msgid "Account manager preference"
msgstr "Spletna stran upravitelja računov"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
#, fuzzy
msgid "Project has no apps for "
msgstr "Spletna stran projekta"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
#, fuzzy
msgid " work fetch deferred for"
msgstr "Prevzemanje dela za procesor odloženo za"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
#, fuzzy
msgid " work fetch deferral interval"
msgstr "Odložitveni interval prevzemanja dela za procesor"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Lastnosti projekta"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Splošno"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Glavni URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Uporabniško ime"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Ime ekipe"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Delitev sredstev"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "RPC razvrščevalnika odložena za"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Prejemanje datotek odloženo za"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Nalaganje datotek odloženo za"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "ID računalnika"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Ne procesorsko intenzivno"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "da"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Na čakanju prek uporabniškega vmesnika"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "ne"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Ne zahtevaj več dela"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Poteka klic razvrščevalnika"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
#, fuzzy
msgid "Host location"
msgstr "Testno obvestilo"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
#, fuzzy
msgid "default"
msgstr "&Nastavi privzeto"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Dodano prek upravitelja računov"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Odstrani, ko bodo opravila opravljena"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Končano"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Točke"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Uporabnik"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Gostitelj"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Razvrščanje"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
#, fuzzy
msgid "Scheduling priority"
msgstr "Prioriteta razvrščanja procesorja"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Korekcijski faktor trajanja"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Lastnosti opravila"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Aplikacija"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Ime delovne enote"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Ime"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Stanje"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Prejeto"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Rok za poročilo"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Viri"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Procesorski čas ob zadnji kontrolni točki"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Procesorski čas"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Pretečeni čas"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Ocena preostalega časa"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Opravljeni del"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Velikost navideznega pomnilnika"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Velikost delovne množice"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Imenik"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID procesa"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Lokalno: "
@@ -2032,7 +2032,7 @@ msgstr "Pusti prazno, če ni potrebno"
msgid "User Name:"
msgstr "Uporabniško ime:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Geslo:"
@@ -2095,19 +2095,19 @@ msgstr ""
"Privzeti jezik za %s je bil spremenjen, da to začne veljati morate ponovno "
"zagnati %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Izberi računalnik"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr ""
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Ime gostitelja:"
@@ -2298,210 +2298,210 @@ msgstr "Raziskave"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Izvejte o projektih, ki gostujejo na World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Zaganjam odjemalca"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
#, fuzzy
msgid "Connecting to client"
msgstr "Ponovno se povezujem na odjemalca."
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Pridobivam stanje sistema; prosim, počakajte..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
#, fuzzy
msgid "Missing application"
msgstr "Aplikacija"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr ""
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "na baterijah"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "medtem, ko je računalnik v uporabi"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "uporabniška zahteva"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "čas dneva"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "Potekajo meritve hitrosti procesorja"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "potrebujem prostor na disku - preverite nastavitve"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "računalnik ni v uporabi"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "zaganjam"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "teče eksluzivna aplikacija"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "procesor je zaseden"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "presežena omejitev pasovne širine mreze"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "neznan razlog"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "Manjka grafični procesor, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Novo"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Prejemanje ni uspelo"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Prejemam"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr "(na čakanju - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Na čakanju"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Na čakanje"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Na čakanju - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
#, fuzzy
msgid "GPU suspended - "
msgstr "(na čakanju - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Čaka na pomnilnik"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Čaka na deljeni pomnilnik"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Se izvaja, visoka prioriteta"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Se izvaja"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (ne-procesorsko-intenzitvno)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Čaka na izvajanje"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Pripravljen začeti"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
#, fuzzy
msgid " (Waiting for network access)"
msgstr "Čaka na pomnilnik"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Napaka pri računanju"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Pošiljanje ni uspelo"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Pošilja se"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Opuščeno s strani uporabnika"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Opuščeno s strani projekta"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Opuščeno: ni se pričelo do roka"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Opuščeno"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Potrjeno"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Pripravljen poročati"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Napaka: neveljavno stanje '%d'"
@@ -2556,59 +2556,59 @@ msgstr "Preverite uporabniško ime in geslo ter poskusite znova."
msgid "Check the email address and password, and try again."
msgstr "Preverite naslov elektronske pošte in geslo ter poskusite znova."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "več..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Izberite projekt"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Da izberete projekt, kliknite na njegovo ime ali spodaj napišite njegov URL."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
#, fuzzy
msgid "Projects:"
msgstr "Projekti"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
#, fuzzy
msgid "Web site:"
msgstr "Spletne strani"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
#, fuzzy
msgid "Project URL:"
msgstr "&URL projekta:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
#, fuzzy
msgid ""
"This project may not have work for your type of computer. Do you want to "
@@ -2617,7 +2617,7 @@ msgstr ""
"Ta projekt morda nima dela za vaš tip računalnika. Ali ste prepričani, da "
"želite nadaljevati?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
#, fuzzy
msgid "You already added this project. Please choose a different project."
msgstr "Na ta projekt ste že pripeti. Prosim, izberite drug projekt."
@@ -2626,11 +2626,11 @@ msgstr "Na ta projekt ste že pripeti. Prosim, izberite drug projekt."
msgid "Communicating with project."
msgstr "Komuniciram s projektom."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Zahtevane datoteke na strežniku niso bile najdene."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Pripetila se je notranja napaka strežnika."
@@ -2739,8 +2739,8 @@ msgid "I agree to the terms of use."
msgstr "Strinjam se s pogoji uporabe."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "Ne strinjam se s pogoji uporabe."
+msgid "I do not agree to the terms of use."
+msgstr ""
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2831,7 +2831,7 @@ msgstr "'%s' ne vsebuje veljavnega imena gostitelja."
msgid "'%s' does not contain a valid path."
msgstr "'%s' ne vsebuje veljavne poti."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Možnosti"
@@ -2885,7 +2885,7 @@ msgstr ""
msgid "There are no notices at this time."
msgstr "Nova sporočila - kliknite za ogled."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Obvestila"
@@ -2902,7 +2902,7 @@ msgstr ""
"najnovejše nastavitve in morda dobi več opravil."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3146,137 +3146,137 @@ msgstr "prosto: "
msgid "used by other programs: "
msgstr "uporabljajo drugi programi: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Skupaj od uporabnika"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Uporabnikovo povprečje"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Skupaj gostiteljev"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Gostiteljev v povprečju"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Zadnja posodobitev: pred %.0f dnevi"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Uporabnik skupno"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Prikaži vse uporabnikove točke"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Uporabnik povprečno"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Prikaži povprečje točk za uporabnika"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Gostitelj skupno"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Prikaži skupno točk za gostitelja"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Gostitelj povprečno"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Prikaži povprečje točk za gostitelja"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Predhodni projekt"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Prikaži graf za predhodni projekt"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Naslednji projekt >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Prikaži graf za naslednji projekt"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr ""
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr ""
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Način pogleda"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "En projekt"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Prikaži en graf z izbranim projektom"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr ""
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Prikaži vse projekte, en graf na projekt"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr ""
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Prikaži en graf z vsemi projekti"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
#, fuzzy
msgid "All projects (sum)"
msgstr "Vsi projekti (vsota)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
#, fuzzy
msgid "Show one chart with sum of projects"
msgstr "Prikaži en graf z vsemi projekti"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Statistika"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Posodobljam grafe..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr ""
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr ""
@@ -3447,10 +3447,6 @@ msgstr "Preostaja"
msgid "Deadline"
msgstr "Rok"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Ime"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Opravila"
@@ -3592,42 +3588,42 @@ msgstr "Res želite preklicati?"
msgid "Question"
msgstr "Vprašanje"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Napredni pogled...\\Ctrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
#, fuzzy
msgid "Display the advanced graphical interface."
msgstr "Prikaži preprost uporabniški vmesnik."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Preobleka"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr ""
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
#, fuzzy
msgid "Default"
msgstr "&Nastavi privzeto"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr ""
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr ""
@@ -3650,117 +3646,119 @@ msgid "Click OK to set preferences."
msgstr ""
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr ""
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Opravljaj delo le med:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Poveži se na internet samo med:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Ne uporabi več kot:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "prostora na disku"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "procesorskega časa"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Opravljati delo med delovanjem na baterije?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Opravljati delo, ko je neaktiven že:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Kdajkoli"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Vedno naj teče)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
#, fuzzy
msgid "Do you really want to clear all local preferences?\n"
msgstr "Res želite počistiti vse lokalne nastavitve?"
@@ -3823,121 +3821,121 @@ msgstr ""
"Ali ste prepričani, da želite opustiti to opravilo '%s'?\n"
"(Napredek: %s %%, Status: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Nimate projektov. Prosimo dodajte projekt."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr ""
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
#, fuzzy
msgid "Tasks:"
msgstr "Opravila"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr ""
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
#, fuzzy
msgid "From:"
msgstr "Od"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr ""
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr ""
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
#, fuzzy, c-format
msgid "Application: %s"
msgstr "Aplikacija: "
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr ""
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr ""
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr ""
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr ""
# 84%
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
#, fuzzy, c-format
msgid "Remaining (estimated): %s"
msgstr "Preostaja"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr ""
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Pridobivam trenutni status."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Prejemam delo s strežnika."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Obdelava na čakanju: Teče na baterijah."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Obdelava na čakanju: Uporabnik aktiven."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Obdelava na čakanju: Na željo uporabnika."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Obdelava na čakanju: Čas dneva."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Obdelava na čakanju: Potekajo meritve hitrosti."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Obdelava na čakanju."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Čakam, da kontaktiram strežnike projektov."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Pridobivam trenutni status"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Na voljo ni dela za obdelati."
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Ne morem se povezati na odjemalca jedra"
@@ -3981,6 +3979,15 @@ msgstr ""
msgid "Quit %s"
msgstr "Za&pusti %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Ne strinjam se s pogoji uporabe."
+
+#~ msgid "Workunit name"
+#~ msgstr "Ime delovne enote"
+
+#~ msgid "invalid float"
+#~ msgstr "napačno število s plavajočo vejico"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Prikaži napredni (dostopen) grafični vmesnik."
diff --git a/locale/sl/BOINC-Project-Generic.po b/locale/sl/BOINC-Project-Generic.po
index ac42a4e..1017ed9 100644
--- a/locale/sl/BOINC-Project-Generic.po
+++ b/locale/sl/BOINC-Project-Generic.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"PO-Revision-Date: 2013-06-05 20:02+0200\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -188,7 +188,7 @@ msgstr "Išči po forumih"
msgid "Advanced search"
msgstr "Napredno iskanje"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Zasebna sporočila"
@@ -198,8 +198,8 @@ msgstr "Zasebna sporočila"
msgid "Questions and Answers"
msgstr "Vprašanja in odgovori"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -273,7 +273,7 @@ msgstr "neprebrano"
msgid "Message %1"
msgstr "Sporočilo"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "skrito"
@@ -481,7 +481,7 @@ msgstr ""
msgid "Thread"
msgstr "Tema"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Objave"
@@ -490,7 +490,7 @@ msgstr "Objave"
msgid "Views"
msgstr "Pogledi"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Zadnja objava"
@@ -533,7 +533,7 @@ msgid "Home"
msgstr "Doma"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "V službi"
@@ -599,9 +599,9 @@ msgid "Created"
msgstr "Ustvarjeno"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -778,7 +778,7 @@ msgstr "Zadnji kontakt"
msgid "Computer info"
msgstr "Informacije o računalniku"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Uvrstitev"
@@ -787,9 +787,9 @@ msgstr "Uvrstitev"
msgid "Avg. credit"
msgstr "Povprečno točk"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -877,8 +877,8 @@ msgstr "Samo računalnike, aktivne v zadnjih 30 dneh"
msgid "Computer ID"
msgstr "ID računalnika"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -914,7 +914,7 @@ msgstr "Nabiralnik"
msgid "Write"
msgstr "Napiši"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Pošlji zasebno sporočilo"
@@ -1684,7 +1684,7 @@ msgstr "Čas objave<br /> ali rok"
msgid "explain"
msgstr "pojasni"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Status"
@@ -1777,9 +1777,9 @@ msgstr "Ključne besede"
msgid "Find teams with these words in their names or descriptions"
msgstr "Poišči ekipe s temi besedami v njihovem imenu ali opisu"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1787,7 +1787,7 @@ msgstr "Poišči ekipe s temi besedami v njihovem imenu ali opisu"
msgid "Country"
msgstr "Država"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Tip ekipe"
@@ -1815,8 +1815,8 @@ msgstr "Zahtevali ste vi"
msgid "founder response deadline is %1"
msgstr "rok za ustanoviteljev odgovor je %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "brez"
@@ -1840,27 +1840,27 @@ msgstr "Opis"
msgid "Web site"
msgstr "Spletna stran"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Medprojektna statistika"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tip"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Razpravljalnica"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Teme"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Pridruži se tej ekipi"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1869,79 +1869,79 @@ msgstr ""
"projekta, ob pridružitvi ekipi daje njenemu ustanovitelju dostop do naslova "
"vaše elektronske pošte."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Ne sprejema novih članov"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Zahtevana sprememba ustanoviteljstva"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Odgovori z %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Sprememba ustanoviteljstva ekipe"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Člani"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Ustanovitelj"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Skrbniki"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Novi člani v zadnjem dnevu"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Skupaj članov"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "poglej"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktivni člani"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Člani s točkami"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Skrbnik"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Predhodnih %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Naslednjih %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Ekipa ne obstaja."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Ta operacija zahteva ustanoviteljstvo."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Ta operacija zahteva skrbniške pravice za ekipo"
@@ -1953,7 +1953,7 @@ msgstr ""
"OPOZORILO: to je ekipa vsega BOINC. Če tu napravite spreembe, bodo hitro "
"prepisane. Namesto tega uredite %1ekipo vsega BOINC%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1961,47 +1961,47 @@ msgstr ""
"%1Opomba o zasebnosti%2: če ustvarite ekipo, bodo vaše nastavitve projekta "
"(delitev virov, grafične nastavitve) vidne javnosti."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Ime ekipe, tekstovna različica"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Ne uporabljajte HTML oznak."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Ime ekipe, HTML različica"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Lahko uporabljajte %1omejen nabor HTML oznak%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Če ne znate HTML, pustite ta okvir prazen."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "URL spletne strani ekipe, če obstaja"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "brez \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Na spletni strani ekipe bo povezava s tem URL."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Opis ekipe"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Sprejeti nove člane?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Profil uporabnika"
@@ -2034,7 +2034,7 @@ msgid "Computers on this account"
msgstr "Računalniki tega računa"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Pogled"
@@ -2051,8 +2051,8 @@ msgstr "Medprojektna statistika"
msgid "Account"
msgstr "Račun"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Ekipa"
@@ -2081,7 +2081,7 @@ msgstr "Informacije o računu"
msgid "Email address"
msgstr "Naslov elektronske pošte"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2089,7 +2089,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Poštna številka"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 član od"
@@ -2109,7 +2109,7 @@ msgstr "geslo"
msgid "other account info"
msgstr "druge informacije o računu"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID uporabnika"
@@ -2154,96 +2154,96 @@ msgstr "%1 nastavitve"
msgid "Community"
msgstr "Skupnost"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Briši"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Ustvari"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "Objave %1"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Obvestila"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Zapusti ekipo"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Administriraj"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(čakajoča zahteva po spremembi ustanoviteljstva)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Član ekipe"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "poišči ekipo"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Ustanovitelj, vendar ne član"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Poišči prijatelje"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Prijatelji"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Računalniki"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Donator"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Kontakt"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ta oseba je prijatelj"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Prekliči prijateljstvo"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Čakajoča prošnja"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Dodaj kot prijatelja"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr ""
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr ""
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr ""
@@ -2321,7 +2321,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Ostanite prijavljeni na tem računalniku"
@@ -2529,7 +2529,7 @@ msgstr ""
msgid "User of the day"
msgstr "Uporabnik dneva"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
#, fuzzy
msgid "Server status"
msgstr "Stanje strežnika"
@@ -5641,138 +5641,138 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Opravila v izvajanju"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
#, fuzzy
msgid "Users"
msgstr "Uporabnik"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "aplikacija"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
#, fuzzy
msgid "unsent"
msgstr "Neposlano"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
#, fuzzy
msgid "in progress"
msgstr "V teku"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -6045,6 +6045,10 @@ msgstr "Nov ustanovitelj?"
msgid "Change founder"
msgstr "Spremeni ustanovitelja"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Izbrati morate ime ekipe, ki ni prazno"
diff --git a/locale/sl/BOINC-Setup.mo b/locale/sl/BOINC-Setup.mo
index 7dc1be3..d9771d4 100644
Binary files a/locale/sl/BOINC-Setup.mo and b/locale/sl/BOINC-Setup.mo differ
diff --git a/locale/sl/BOINC-Setup.po b/locale/sl/BOINC-Setup.po
index b23e838..1dbfc30 100644
--- a/locale/sl/BOINC-Setup.po
+++ b/locale/sl/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -25,11 +25,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
@@ -52,21 +52,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +74,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +106,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +114,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/sl/BOINC-Web.mo b/locale/sl/BOINC-Web.mo
index 6333641..599bb2e 100644
Binary files a/locale/sl/BOINC-Web.mo and b/locale/sl/BOINC-Web.mo differ
diff --git a/locale/sl/BOINC-Web.po b/locale/sl/BOINC-Web.po
index ad0f180..6c0a477 100644
--- a/locale/sl/BOINC-Web.po
+++ b/locale/sl/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-06-05 20:02+0200\n"
"Last-Translator: Anonymous Pootle User\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -435,16 +435,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr ""
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -452,19 +452,19 @@ msgid ""
"conversations."
msgstr ""
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr ""
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -473,15 +473,15 @@ msgid ""
"targets."
msgstr ""
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -490,15 +490,15 @@ msgid ""
"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr ""
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -506,15 +506,15 @@ msgid ""
"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -522,31 +522,31 @@ msgid ""
"computational biology for biomedical research."
msgstr ""
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr ""
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr ""
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -554,15 +554,15 @@ msgid ""
"nature reserves. "
msgstr ""
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr ""
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -573,15 +573,15 @@ msgid ""
"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr ""
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr ""
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -591,30 +591,30 @@ msgid ""
"Cancer, and Alzheimer's"
msgstr ""
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr ""
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr ""
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr ""
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr ""
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr ""
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -626,15 +626,25 @@ msgid ""
"century under a wide range of different scenarios."
msgstr ""
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr ""
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -644,15 +654,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr ""
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr ""
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -665,33 +675,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr ""
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -701,15 +711,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr ""
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -718,15 +728,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr ""
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -735,23 +745,23 @@ msgid ""
"the design of LHC and its detectors."
msgstr ""
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
#, fuzzy
msgid "University of California, Berkeley"
msgstr "BOINC se nahaja na University of California, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr ""
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -760,15 +770,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -776,45 +786,45 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr ""
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr ""
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr ""
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr ""
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr ""
-#: projects.inc:350
+#: projects.inc:372
#, fuzzy
msgid "European research projects"
msgstr "Raziskovalni projekti"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -822,28 +832,28 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr ""
-#: projects.inc:358
+#: projects.inc:380
#, fuzzy
msgid "Various Spanish research projects"
msgstr "Raziskovalni projekti"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr ""
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr ""
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr ""
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -851,50 +861,50 @@ msgid ""
"clean water and many more."
msgstr ""
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr ""
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr ""
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr ""
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr ""
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr ""
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr ""
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -904,18 +914,18 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr ""
-#: projects.inc:458
+#: projects.inc:480
#, fuzzy
msgid "Software testing"
msgstr "Posodobitve programske opreme"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -923,11 +933,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -938,23 +948,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
diff --git a/locale/templates/BOINC-Android.pot b/locale/templates/BOINC-Android.pot
index b03434a..4df3236 100644
--- a/locale/templates/BOINC-Android.pot
+++ b/locale/templates/BOINC-Android.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2013-08-29 15:37-0700\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -49,6 +49,10 @@ msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
msgstr ""
+msgctxt "attachproject_list_acctmgr_button"
+msgid "Add account manager"
+msgstr ""
+
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
msgstr ""
@@ -189,6 +193,31 @@ msgctxt "attachproject_registration_button"
msgid "Create"
msgstr ""
+#. account manager
+msgctxt "attachproject_acctmgr_header"
+msgid "Add account manager"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_url"
+msgid "URL"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_name"
+msgid "User:"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_pwd"
+msgid "Password:"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_header_pwd_confirm"
+msgid "… Retype:"
+msgstr ""
+
+msgctxt "attachproject_acctmgr_button"
+msgid "Add"
+msgstr ""
+
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
@@ -206,6 +235,10 @@ msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
msgstr ""
+msgctxt "attachproject_error_no_url"
+msgid "Please enter URL"
+msgstr ""
+
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
msgstr ""
@@ -246,6 +279,10 @@ msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
msgstr ""
+msgctxt "attachproject_error_invalid_url"
+msgid "Invalid URL"
+msgstr ""
+
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
@@ -291,6 +328,14 @@ msgctxt "attachproject_working_login"
msgid "Log in"
msgstr ""
+msgctxt "attachproject_working_acctmgr"
+msgid "Add account manager"
+msgstr ""
+
+msgctxt "attachproject_working_acctmgr_sync"
+msgid "Synchronize"
+msgstr ""
+
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
@@ -331,6 +376,10 @@ msgctxt "tab_preferences"
msgid "Preferences"
msgstr ""
+msgctxt "tab_notices"
+msgid "Notices"
+msgstr ""
+
msgctxt "tab_desc"
msgid "Navigation"
msgstr ""
@@ -615,6 +664,10 @@ msgctxt "projects_control_dialog_title"
msgid "Project commands:"
msgstr ""
+msgctxt "projects_control_visit_website"
+msgid "Visit website"
+msgstr ""
+
msgctxt "projects_control_update"
msgid "Update"
msgstr ""
@@ -643,6 +696,18 @@ msgctxt "projects_control_reset"
msgid "Reset"
msgstr ""
+msgctxt "projects_control_dialog_title_acctmgr"
+msgid "Account manager commands:"
+msgstr ""
+
+msgctxt "projects_control_sync_acctmgr"
+msgid "Synchronize"
+msgstr ""
+
+msgctxt "projects_control_remove_acctmgr"
+msgid "Disable"
+msgstr ""
+
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
@@ -672,6 +737,18 @@ msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
msgstr ""
+msgctxt "projects_confirm_remove_acctmgr_title"
+msgid "Disable account manager"
+msgstr ""
+
+msgctxt "projects_confirm_remove_acctmgr_message"
+msgid "Are you sure you want to stop using"
+msgstr ""
+
+msgctxt "projects_confirm_remove_acctmgr_confirm"
+msgid "Disable"
+msgstr ""
+
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
@@ -815,6 +892,10 @@ msgctxt "trans_header_name"
msgid "File:"
msgstr ""
+msgctxt "trans_control_retry"
+msgid "Retry transfers"
+msgstr ""
+
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
msgstr ""
@@ -827,6 +908,11 @@ msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
msgstr ""
+#. notices tab strings
+msgctxt "notices_loading"
+msgid "Reading notices…"
+msgstr ""
+
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
diff --git a/locale/templates/BOINC-Client.pot b/locale/templates/BOINC-Client.pot
index 10c7616..03bd291 100644
--- a/locale/templates/BOINC-Client.pot
+++ b/locale/templates/BOINC-Client.pot
@@ -8,77 +8,76 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-05 10:24-0700\n"
+"POT-Creation-Date: 2013-10-15 22:25-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: acct_mgr.cpp:448 acct_mgr.cpp:457
+#: acct_mgr.cpp:450 acct_mgr.cpp:459
msgid "Message from account manager"
msgstr ""
-#: client_msgs.cpp:85
+#: client_msgs.cpp:81
msgid "Message from server"
msgstr ""
-#: client_state.cpp:246
+#: client_state.cpp:258
msgid ""
"Some tasks need more memory than allowed by your preferences. Please check "
"the preferences."
msgstr ""
-#: client_state.cpp:501
+#: client_state.cpp:520
msgid "Couldn't write state file; check directory permissions"
msgstr ""
-#: cs_cmdline.cpp:299
+#: cs_cmdline.cpp:303
msgid "The HTTP_PROXY environment variable must specify an HTTP proxy"
msgstr ""
-#: cs_scheduler.cpp:575
+#: cs_scheduler.cpp:613
#, c-format
msgid ""
"You used the wrong URL for this project. When convenient, remove this "
"project, then add %s"
msgstr ""
-#: cs_statefile.cpp:829 ../sched/sched_types.cpp:259
+#: cs_statefile.cpp:828 ../sched/sched_types.cpp:259
msgid "Syntax error in app_info.xml"
msgstr ""
-#: cs_statefile.cpp:869
+#: cs_statefile.cpp:868
msgid "File referenced in app_info.xml does not exist: "
msgstr ""
-#: current_version.cpp:90
+#: current_version.cpp:91
msgid "A new version of BOINC is available."
msgstr ""
-#: current_version.cpp:94
+#: current_version.cpp:94 current_version.cpp:102
msgid "Download"
msgstr ""
-#: log_flags.cpp:259 log_flags.cpp:436
+#: log_flags.cpp:269 log_flags.cpp:449
msgid "Unexpected text in cc_config.xml"
msgstr ""
-#: log_flags.cpp:410 log_flags.cpp:462
+#: log_flags.cpp:423 log_flags.cpp:475
msgid "Unrecognized tag in cc_config.xml"
msgstr ""
-#: log_flags.cpp:427
+#: log_flags.cpp:440
msgid "Missing start tag in cc_config.xml"
msgstr ""
-#: log_flags.cpp:452
+#: log_flags.cpp:465
msgid "Error in cc_config.xml options"
msgstr ""
-#: log_flags.cpp:470
+#: log_flags.cpp:483
msgid "Missing end tag in cc_config.xml"
msgstr ""
diff --git a/locale/templates/BOINC-Manager.pot b/locale/templates/BOINC-Manager.pot
index 35edf4b..741d33f 100644
--- a/locale/templates/BOINC-Manager.pot
+++ b/locale/templates/BOINC-Manager.pot
@@ -3,56 +3,49 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
#
+#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: BOINC Client 7.2.x\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-18 11:32-0500\n"
-"PO-Revision-Date: 2013-06-18 11:33-0500\n"
-"Last-Translator: Rom Walton <rwalton at ssl.berkeley.edu>\n"
-"Language-Team: BOINC Development Team <boinc_dev at ssl.berkeley.edu>\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: English\n"
-"X-Poedit-Country: UNITED STATES\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-Poedit-SearchPath-0: clientgui\n"
-"X-Poedit-SearchPath-1: clientgui/msw\n"
-"X-Poedit-SearchPath-2: clientgui/gtk\n"
-"X-Poedit-SearchPath-3: clientgui/mac\n"
-
-#: clientgui/AccountInfoPage.cpp:387
+
+#: AccountInfoPage.cpp:387
#, c-format
msgid "Identify your account at %s"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:393
+#: AccountInfoPage.cpp:393
msgid ""
"Please enter your account information\n"
"(to create an account, visit the project's web site)"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:397
+#: AccountInfoPage.cpp:397
msgid ""
"This project is not currently accepting new accounts.\n"
"You can add it only if you already have an account."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:401
+#: AccountInfoPage.cpp:401
msgid "Are you already running this project?"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:405
+#: AccountInfoPage.cpp:405
msgid "&No, new user"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:408
+#: AccountInfoPage.cpp:408
msgid "&Yes, existing user"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:413
+#: AccountInfoPage.cpp:413
msgid ""
"We were not able to set up your account information\n"
"automatically.\n"
@@ -62,472 +55,466 @@ msgid ""
"password fields."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:416
+#: AccountInfoPage.cpp:416
msgid "Find login information"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:436
-#: clientgui/AccountInfoPage.cpp:668
+#: AccountInfoPage.cpp:436 AccountInfoPage.cpp:641
msgid "&Password:"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:443
-#: clientgui/AccountInfoPage.cpp:692
+#: AccountInfoPage.cpp:443 AccountInfoPage.cpp:665
msgid "Choose a &password:"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:446
+#: AccountInfoPage.cpp:446
msgid "C&onfirm password:"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:453
+#: AccountInfoPage.cpp:453
#, c-format
msgid "Are you already running %s?"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:482
+#: AccountInfoPage.cpp:482
msgid "&Username:"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:508
+#: AccountInfoPage.cpp:508
msgid "&Email address:"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:515
+#: AccountInfoPage.cpp:515
#, c-format
msgid "minimum length %d"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:522
+#: AccountInfoPage.cpp:522
msgid "Forgot your password?"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:529
+#: AccountInfoPage.cpp:529
msgid ""
"If you have not yet registered with this account manager,\n"
"please do so before proceeding. Click on the link below\n"
"to register or to retrieve a forgotten password."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:532
-msgid "Account manager website"
+#: AccountInfoPage.cpp:532
+msgid "Account manager web site"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:574
+#: AccountInfoPage.cpp:574 WelcomePage.cpp:348
msgid "Add project"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:576
+#: AccountInfoPage.cpp:576
msgid "Update account manager"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:578
+#: AccountInfoPage.cpp:578 WelcomePage.cpp:307 WelcomePage.cpp:321
msgid "Use account manager"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:587
-msgid "The minimum username length for this project is 1. Please enter a different username."
+#: AccountInfoPage.cpp:585
+msgid "Please enter a user name."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:592
-msgid "The minimum username length for this account manager is 1. Please enter a different username."
+#: AccountInfoPage.cpp:587
+msgid "Please enter an email address."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:598
-msgid "The minimum email address length for this project is 1. Please enter a different email address."
+#: AccountInfoPage.cpp:597
+#, c-format
+msgid "Please enter a password of at least %d characters."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:603
-msgid "The minimum email address length for this account manager is 1. Please enter a different email address."
+#: AccountInfoPage.cpp:607
+msgid ""
+"The password and confirmation password do not match. Please type them again."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:616
-#, c-format
-msgid "The minimum password length for this project is %d. Please enter a different password."
+#: AccountManagerInfoPage.cpp:272
+msgid "Choose an account manager"
msgstr ""
-#: clientgui/AccountInfoPage.cpp:622
-#, c-format
-msgid "The minimum password length for this account manager is %d. Please enter a different password."
+#: AccountManagerInfoPage.cpp:275
+msgid ""
+"To choose an account manager, click its name or \n"
+"type its URL below."
msgstr ""
-#: clientgui/AccountInfoPage.cpp:634
-msgid "The password and confirmation password do not match. Please type them again."
+#: AccountManagerInfoPage.cpp:279
+msgid "Account manager details:"
msgstr ""
-#: clientgui/AccountManagerInfoPage.cpp:248
-msgid "Choose an account manager"
+#: AccountManagerInfoPage.cpp:283
+msgid "Account manager &URL:"
msgstr ""
-#: clientgui/AccountManagerInfoPage.cpp:251
-msgid ""
-"To choose an account manager, click its name or \n"
-"type its URL below."
+#: AccountManagerInfoPage.cpp:287
+msgid "Open web page"
msgstr ""
-#: clientgui/AccountManagerInfoPage.cpp:254
-msgid "Account Manager &URL:"
+#: AccountManagerInfoPage.cpp:290
+msgid "Visit this account manager's web site"
msgstr ""
-#: clientgui/AccountManagerProcessingPage.cpp:188
-#: clientgui/AccountManagerPropertiesPage.cpp:194
+#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
msgid "Communicating with %s."
msgstr ""
-#: clientgui/AccountManagerProcessingPage.cpp:195
-#: clientgui/AccountManagerPropertiesPage.cpp:201
+#: AccountManagerProcessingPage.cpp:194 AccountManagerPropertiesPage.cpp:200
msgid "Communicating with server."
msgstr ""
-#: clientgui/AccountManagerProcessingPage.cpp:200
-#: clientgui/AccountManagerPropertiesPage.cpp:206
+#: AccountManagerProcessingPage.cpp:199 AccountManagerPropertiesPage.cpp:205
msgid "Please wait..."
msgstr ""
-#: clientgui/AccountManagerProcessingPage.cpp:327
+#: AccountManagerProcessingPage.cpp:326
msgid "An internal server error has occurred.\n"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:95
+#: AdvancedFrame.cpp:95
msgid "Connected"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:103
+#: AdvancedFrame.cpp:103
msgid "Disconnected"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:315
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:318
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:329
-#: clientgui/AdvancedFrame.cpp:336
-#: clientgui/AdvancedFrame.cpp:343
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:358
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:359
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:364
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:365
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:370
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:371
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:376
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:377
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:382
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:383
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:388
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:389
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:396
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:411
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:412
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:416
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:430
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:431
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:434
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:445
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:446
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:450
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:451
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:459
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:460
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:464
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:465
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:470
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:495
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:496
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:500
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:501
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:506
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:530
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:531
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:535
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:536
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:541
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:551
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:556
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:561
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:562
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:566
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:567
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:572
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:577
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:582
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:587
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:601
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:602
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:612
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:618
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:630
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:636
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:648
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
-msgid "%s &website"
+msgid "%s &web site"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:654
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:666
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:672
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:679
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:683
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:687
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:691
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:695
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:699
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
+#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1178
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1183
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -537,48 +524,48 @@ msgid ""
"Do you want to stop using %s?"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1381
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1390
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
"and prompt you for another host to connect to."
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1709
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1718
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1860
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1864
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr ""
-#: clientgui/AdvancedFrame.cpp:1867
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr ""
-#: clientgui/AlreadyExistsPage.cpp:184
+#: AlreadyExistsPage.cpp:184
msgid "Username already in use"
msgstr ""
-#: clientgui/AlreadyExistsPage.cpp:187
+#: AlreadyExistsPage.cpp:187
msgid ""
"An account with that username already exists and has a\n"
"different password than the one you entered.\n"
@@ -586,11 +573,11 @@ msgid ""
"Please visit the project's web site and follow the instructions there."
msgstr ""
-#: clientgui/AlreadyExistsPage.cpp:191
+#: AlreadyExistsPage.cpp:191
msgid "Email address already in use"
msgstr ""
-#: clientgui/AlreadyExistsPage.cpp:194
+#: AlreadyExistsPage.cpp:194
msgid ""
"An account with that email address already exists and has a\n"
"different password than the one you entered.\n"
@@ -598,159 +585,162 @@ msgid ""
"Please visit the project's web site and follow the instructions there."
msgstr ""
-#: clientgui/AsyncRPC.cpp:1238
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr ""
-#: clientgui/AsyncRPC.cpp:1241
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr ""
-#: clientgui/AsyncRPC.cpp:1243
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr ""
-#: clientgui/AsyncRPC.cpp:1247
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr ""
-#: clientgui/AsyncRPC.cpp:1263
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:505
+#: BOINCBaseFrame.cpp:505
#, c-format
msgid "%s - Connection Error"
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:514
+#: BOINCBaseFrame.cpp:514
msgid ""
"You currently are not authorized to manage the client.\n"
-"Please contact your administrator to add you to the 'boinc_users' local user group."
+"Please contact your administrator to add you to the 'boinc_users' local user "
+"group."
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:523
+#: BOINCBaseFrame.cpp:523
msgid ""
"Authorization failed connecting to running client.\n"
"Make sure you start this program in the same directory as the client."
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:525
+#: BOINCBaseFrame.cpp:525
msgid "Authorization failed connecting to running client."
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:533
+#: BOINCBaseFrame.cpp:533
msgid "The password you have provided is incorrect, please try again."
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:577
+#: BOINCBaseFrame.cpp:577
#, c-format
msgid "%s - Connection Failed"
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:586
+#: BOINCBaseFrame.cpp:586
#, c-format
msgid ""
"%s is not able to connect to a %s client.\n"
"Would you like to try to connect again?"
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:622
+#: BOINCBaseFrame.cpp:622
#, c-format
msgid "%s - Daemon Start Failed"
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:632
+#: BOINCBaseFrame.cpp:632
#, c-format
msgid ""
"%s is not able to start a %s client.\n"
-"Please launch the Control Panel->Administative Tools->Services applet and start the BOINC service."
+"Please launch the Control Panel->Administative Tools->Services applet and "
+"start the BOINC service."
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:638
+#: BOINCBaseFrame.cpp:638
#, c-format
msgid ""
"%s is not able to start a %s client.\n"
"Please start the daemon and try again."
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:689
+#: BOINCBaseFrame.cpp:689
#, c-format
msgid "%s - Connection Status"
msgstr ""
-#: clientgui/BOINCBaseFrame.cpp:700
+#: BOINCBaseFrame.cpp:700
#, c-format
msgid ""
"%s is not currently connected to a %s client.\n"
-"Please use the 'Advanced\\Select Computer...' menu option to connect up to a %s client.\n"
+"Please use the 'Advanced\\Select Computer...' menu option to connect up to a "
+"%s client.\n"
"To connect up to your local computer please use 'localhost' as the host name."
msgstr ""
-#: clientgui/BOINCBaseView.cpp:774
+#: BOINCBaseView.cpp:779
msgid "Project web pages"
msgstr ""
-#: clientgui/BOINCClientManager.cpp:573
+#: BOINCClientManager.cpp:575
#, c-format
msgid "%s - Unexpected Exit"
msgstr ""
-#: clientgui/BOINCClientManager.cpp:583
+#: BOINCClientManager.cpp:585
#, c-format
msgid ""
"The %s client has exited unexpectedly 3 times within the last %d minutes.\n"
"Would you like to restart it again?"
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:61
+#: BOINCDialupManager.cpp:61
#, c-format
msgid "%s - Network Status"
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:241
+#: BOINCDialupManager.cpp:241
#, c-format
msgid ""
"%s needs to connect to the Internet.\n"
"May it do so now?"
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:254
+#: BOINCDialupManager.cpp:254
#, c-format
msgid "%s is connecting to the Internet."
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:303
+#: BOINCDialupManager.cpp:303
#, c-format
msgid "%s has successfully connected to the Internet."
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:331
+#: BOINCDialupManager.cpp:331
#, c-format
msgid "%s failed to connect to the Internet."
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:372
+#: BOINCDialupManager.cpp:372
#, c-format
msgid ""
"%s has detected it is now connected to the Internet.\n"
"Updating all projects and retrying all transfers."
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:417
+#: BOINCDialupManager.cpp:417
#, c-format
msgid "%s has successfully disconnected from the Internet."
msgstr ""
-#: clientgui/BOINCDialupManager.cpp:433
+#: BOINCDialupManager.cpp:433
#, c-format
msgid "%s failed to disconnected from the Internet."
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:345
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -763,811 +753,794 @@ msgid ""
" user group."
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:351
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
"(Error code %d"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:357
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:360
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:393
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:394
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:561
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:563
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:565
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:566
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:568
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:569
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:571
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:573
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:576
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:794
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:795
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr ""
-#: clientgui/BOINCGUIApp.cpp:796
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:511
+#: BOINCTaskBar.cpp:508
#, c-format
msgid "Open %s Web..."
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:518
+#: BOINCTaskBar.cpp:515
#, c-format
msgid "Open %s..."
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:525
-#: clientgui/BOINCTaskBar.cpp:621
-#: clientgui/BOINCTaskBar.cpp:629
+#: BOINCTaskBar.cpp:522 BOINCTaskBar.cpp:619 BOINCTaskBar.cpp:627
msgid "Snooze"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:527
-#: clientgui/BOINCTaskBar.cpp:648
-#: clientgui/BOINCTaskBar.cpp:656
+#: BOINCTaskBar.cpp:524 BOINCTaskBar.cpp:646 BOINCTaskBar.cpp:654
msgid "Snooze GPU"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:543
+#: BOINCTaskBar.cpp:542
msgid "E&xit"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:614
+#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
+#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:641
+#: BOINCTaskBar.cpp:639
msgid "Resume GPU"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:715
+#: BOINCTaskBar.cpp:713
msgid "Computing is enabled"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:718
+#: BOINCTaskBar.cpp:717
msgid "Computing is suspended - "
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:728
+#: BOINCTaskBar.cpp:727
msgid "GPU computing is enabled"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:731
+#: BOINCTaskBar.cpp:730
msgid "GPU computing is suspended - "
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:740
+#: BOINCTaskBar.cpp:739
msgid "Network is enabled"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:743
+#: BOINCTaskBar.cpp:742
msgid "Network is suspended - "
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:751
+#: BOINCTaskBar.cpp:750
msgid "Reconnecting to client."
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:753
+#: BOINCTaskBar.cpp:752
msgid "Not connected to a client."
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:806
+#: BOINCTaskBar.cpp:805
#, c-format
msgid "%s Notices"
msgstr ""
-#: clientgui/BOINCTaskBar.cpp:812
+#: BOINCTaskBar.cpp:811
msgid "There are new notices - click to view."
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:199
+#: CompletionErrorPage.cpp:199
msgid "Failed to add project"
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:204
+#: CompletionErrorPage.cpp:204
msgid "Failed to update account manager"
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:208
+#: CompletionErrorPage.cpp:208
msgid "Failed to remove account manager"
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:212
+#: CompletionErrorPage.cpp:212
msgid "Failed to add account manager"
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:221
+#: CompletionErrorPage.cpp:221
msgid ""
-"An error has occurred;\n"
-"check the Event Log for details.\n"
+"Please try again later.\n"
"\n"
"Click Finish to close."
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:225
-#: clientgui/CompletionPage.cpp:222
-#: clientgui/CompletionPage.cpp:242
-#: clientgui/CompletionPage.cpp:273
+#: CompletionErrorPage.cpp:225 CompletionPage.cpp:222 CompletionPage.cpp:242
+#: CompletionPage.cpp:273
msgid "Click Finish to close."
msgstr ""
-#: clientgui/CompletionErrorPage.cpp:234
+#: CompletionErrorPage.cpp:234
msgid "Messages from server:"
msgstr ""
-#: clientgui/CompletionPage.cpp:207
+#: CompletionPage.cpp:207
msgid "Project added"
msgstr ""
-#: clientgui/CompletionPage.cpp:213
+#: CompletionPage.cpp:213
msgid "This project has been successfully added."
msgstr ""
-#: clientgui/CompletionPage.cpp:218
+#: CompletionPage.cpp:218
msgid ""
"When you click Finish, your web browser will go to a page where\n"
"you can set your account name and preferences."
msgstr ""
-#: clientgui/CompletionPage.cpp:232
+#: CompletionPage.cpp:232
#, c-format
msgid "Update from %s completed."
msgstr ""
-#: clientgui/CompletionPage.cpp:236
+#: CompletionPage.cpp:236
msgid "Update completed."
msgstr ""
-#: clientgui/CompletionPage.cpp:247
+#: CompletionPage.cpp:247
msgid "Now using account manager"
msgstr ""
-#: clientgui/CompletionPage.cpp:252
+#: CompletionPage.cpp:252
#, c-format
msgid "Welcome to %s!"
msgstr ""
-#: clientgui/CompletionPage.cpp:263
+#: CompletionPage.cpp:263
#, c-format
msgid "You are now using %s to manage accounts."
msgstr ""
-#: clientgui/CompletionPage.cpp:267
+#: CompletionPage.cpp:267
msgid "You are now using this account manager."
msgstr ""
-#: clientgui/DlgAbout.cpp:113
+#: DlgAbout.cpp:113 mac/Mac_GUI.cpp:96
#, c-format
msgid "About %s"
msgstr ""
-#: clientgui/DlgAbout.cpp:172
+#: DlgAbout.cpp:172
msgid "Version:"
msgstr ""
-#: clientgui/DlgAbout.cpp:180
+#: DlgAbout.cpp:180
msgid "wxWidgets Version:"
msgstr ""
-#: clientgui/DlgAbout.cpp:188
+#: DlgAbout.cpp:188
msgid "Copyright:"
msgstr ""
-#: clientgui/DlgAbout.cpp:192
+#: DlgAbout.cpp:192
msgid ""
"(C) 2003-2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-#: clientgui/DlgAbout.cpp:196
+#: DlgAbout.cpp:196
msgid "Berkeley Open Infrastructure for Network Computing"
msgstr ""
-#: clientgui/DlgAbout.cpp:208
-#: clientgui/DlgExitMessage.cpp:173
-#: clientgui/DlgGenericMessage.cpp:120
-#: clientgui/DlgOptions.cpp:396
-#: clientgui/DlgSelectComputer.cpp:162
+#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:542
-msgid "invalid float"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:797
-#: clientgui/DlgAdvPreferences.cpp:803
-#: clientgui/DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:827
-#: clientgui/DlgAdvPreferences.cpp:874
-#: clientgui/DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
msgstr ""
-#: clientgui/DlgAdvPreferences.cpp:990
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:46
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:62
+#: DlgAdvPreferencesBase.cpp:62
msgid ""
"This dialog controls preferences for this computer only.\n"
"Click OK to set preferences.\n"
"Click Clear to restore web-based settings (except exclusive apps)."
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:65
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:66
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:81
+#: DlgAdvPreferencesBase.cpp:81
msgid "processor usage"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:84
+#: DlgAdvPreferencesBase.cpp:84
msgid "network usage"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:87
+#: DlgAdvPreferencesBase.cpp:87
msgid "disk and memory usage"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:90
+#: DlgAdvPreferencesBase.cpp:90
msgid "exclusive applications"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:102
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:103
+#: DlgAdvPreferencesBase.cpp:103
msgid "save all values and close the dialog"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:108
+#: DlgAdvPreferencesBase.cpp:108
msgid "close the dialog without saving"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:112
+#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:113
+#: DlgAdvPreferencesBase.cpp:113
msgid "shows the preferences web page"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:135
+#: DlgAdvPreferencesBase.cpp:135
msgid "Computing allowed"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:139
+#: DlgAdvPreferencesBase.cpp:139
msgid "While computer is on batteries"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:142
-msgid "check this if you want this computer to do work while it runs on batteries"
+#: DlgAdvPreferencesBase.cpp:142
+msgid ""
+"check this if you want this computer to do work while it runs on batteries"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:148
+#: DlgAdvPreferencesBase.cpp:148
msgid "While computer is in use"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:151
-msgid "check this if you want this computer to do work even when you're using it"
+#: DlgAdvPreferencesBase.cpp:151
+msgid ""
+"check this if you want this computer to do work even when you're using it"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:157
+#: DlgAdvPreferencesBase.cpp:157
msgid "Use GPU while computer is in use"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:160
-msgid "check this if you want your GPU to do work even when you're using the computer"
+#: DlgAdvPreferencesBase.cpp:160
+msgid ""
+"check this if you want your GPU to do work even when you're using the "
+"computer"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:172
+#: DlgAdvPreferencesBase.cpp:172
msgid "Only after computer has been idle for"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:182
-msgid "do work only after you haven't used the computer for this number of minutes"
+#: DlgAdvPreferencesBase.cpp:182
+msgid ""
+"do work only after you haven't used the computer for this number of minutes"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:187
-#: clientgui/DlgAdvPreferencesBase.cpp:336
+#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:206
+#: DlgAdvPreferencesBase.cpp:206
msgid "While processor usage is less than"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:216
+#: DlgAdvPreferencesBase.cpp:216
msgid "suspend work if processor usage exceeds this level"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:221
+#: DlgAdvPreferencesBase.cpp:221
msgid "percent (0 means no restriction)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:235
-#: clientgui/DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:239
+#: DlgAdvPreferencesBase.cpp:239
msgid "start work at this time"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:243
-#: clientgui/DlgAdvPreferencesBase.cpp:503
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:247
+#: DlgAdvPreferencesBase.cpp:247
msgid "stop work at this time"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:251
-#: clientgui/DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:256
-#: clientgui/DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:261
-#: clientgui/DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:267
-#: clientgui/DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:274
-#: clientgui/DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:281
-#: clientgui/DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:288
-#: clientgui/DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:295
-#: clientgui/DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:302
-#: clientgui/DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:309
-#: clientgui/DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:323
+#: DlgAdvPreferencesBase.cpp:323
msgid "Other options"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:330
+#: DlgAdvPreferencesBase.cpp:330
msgid "Switch between applications every"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:339
+#: DlgAdvPreferencesBase.cpp:339
msgid "On multiprocessor systems, use at most"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:346
+#: DlgAdvPreferencesBase.cpp:346
#, no-c-format
-msgid "% of the processors"
+msgid "% of the processors (0 means ignore this setting)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:349
-#: clientgui/DlgAdvPreferencesBase.cpp:604
-#: clientgui/DlgAdvPreferencesBase.cpp:626
-#: clientgui/DlgAdvPreferencesBase.cpp:647
-#: clientgui/DlgAdvPreferencesBase.cpp:668
-#: clientgui/DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:356
+#: DlgAdvPreferencesBase.cpp:356
#, no-c-format
msgid "% CPU time"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:391
-#: clientgui/DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:420
-#: clientgui/DlgAdvPreferencesBase.cpp:443
-#: clientgui/DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:479
-msgid "if checked, a confirmation dialog will be displayed before trying to connect to the Internet"
+#: DlgAdvPreferencesBase.cpp:480
+msgid ""
+"if checked, a confirmation dialog will be displayed before trying to connect "
+"to the Internet"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:597
-#: clientgui/DlgItemProperties.cpp:226
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:712
-msgid "Suspend processor and network usage when these applications are running:"
+#: DlgAdvPreferencesBase.cpp:713
+msgid ""
+"Suspend processor and network usage when these applications are running:"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:727
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
+#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr ""
-#: clientgui/DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr ""
-#: clientgui/DlgEventLog.cpp:217
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr ""
-#: clientgui/DlgEventLog.cpp:230
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
+#: ViewWork.cpp:232
msgid "Project"
msgstr ""
-#: clientgui/DlgEventLog.cpp:231
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr ""
-#: clientgui/DlgEventLog.cpp:232
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr ""
-#: clientgui/DlgEventLog.cpp:287
-#: clientgui/DlgEventLog.cpp:351
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr ""
-#: clientgui/DlgEventLog.cpp:291
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr ""
-#: clientgui/DlgEventLog.cpp:293
-#: clientgui/DlgEventLog.cpp:297
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr ""
-#: clientgui/DlgEventLog.cpp:302
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr ""
-#: clientgui/DlgEventLog.cpp:305
-#: clientgui/DlgEventLog.cpp:313
-msgid "Copy the selected messages to the clipboard. You can select multiple messages by holding down the shift or command key while clicking on messages."
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
+msgid ""
+"Copy the selected messages to the clipboard. You can select multiple "
+"messages by holding down the shift or command key while clicking on messages."
msgstr ""
-#: clientgui/DlgEventLog.cpp:307
-#: clientgui/DlgEventLog.cpp:315
-msgid "Copy the selected messages to the clipboard. You can select multiple messages by holding down the shift or control key while clicking on messages."
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
+msgid ""
+"Copy the selected messages to the clipboard. You can select multiple "
+"messages by holding down the shift or control key while clicking on messages."
msgstr ""
-#: clientgui/DlgEventLog.cpp:322
-#: clientgui/DlgItemProperties.cpp:66
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr ""
-#: clientgui/DlgEventLog.cpp:331
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr ""
-#: clientgui/DlgEventLog.cpp:345
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr ""
-#: clientgui/DlgEventLog.cpp:346
-#: clientgui/DlgEventLog.cpp:348
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr ""
-#: clientgui/DlgEventLog.cpp:352
-#: clientgui/DlgEventLog.cpp:354
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr ""
-#: clientgui/DlgExitMessage.cpp:82
+#: DlgExitMessage.cpp:82
#, c-format
msgid "%s - Exit Confirmation"
msgstr ""
-#: clientgui/DlgExitMessage.cpp:130
+#: DlgExitMessage.cpp:130
#, c-format
msgid ""
"You have requested to exit the %s,\n"
@@ -1578,7 +1551,7 @@ msgid ""
"choose from the following options:"
msgstr ""
-#: clientgui/DlgExitMessage.cpp:135
+#: DlgExitMessage.cpp:135
#, c-format
msgid ""
"This will shut down %s and its tasks until either the\n"
@@ -1589,838 +1562,814 @@ msgid ""
"tasks at the times you selected in your preferences."
msgstr ""
-#: clientgui/DlgExitMessage.cpp:153
+#: DlgExitMessage.cpp:153
#, c-format
msgid "Stop running tasks when exiting the %s"
msgstr ""
-#: clientgui/DlgExitMessage.cpp:165
+#: DlgExitMessage.cpp:165
msgid "Remember this decision and do not show this dialog."
msgstr ""
-#: clientgui/DlgExitMessage.cpp:178
-#: clientgui/DlgGenericMessage.cpp:125
-#: clientgui/DlgOptions.cpp:401
-#: clientgui/DlgSelectComputer.cpp:167
+#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr ""
-#: clientgui/DlgGenericMessage.cpp:112
+#: DlgGenericMessage.cpp:112
msgid "Don't show this dialog again."
msgstr ""
-#: clientgui/DlgItemProperties.cpp:163
-#: clientgui/DlgItemProperties.cpp:166
-#: clientgui/DlgItemProperties.cpp:169
-#: clientgui/DlgItemProperties.cpp:172
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr ""
-#: clientgui/DlgItemProperties.cpp:163
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:166
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:169
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr ""
-#: clientgui/DlgItemProperties.cpp:172
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr ""
-#: clientgui/DlgItemProperties.cpp:176
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:208
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr ""
-#: clientgui/DlgItemProperties.cpp:212
-#: clientgui/DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:213
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:218
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:221
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:224
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:227
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:229
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:229
-#: clientgui/DlgItemProperties.cpp:231
-#: clientgui/DlgItemProperties.cpp:232
-#: clientgui/DlgItemProperties.cpp:234
-#: clientgui/DlgItemProperties.cpp:237
-#: clientgui/DlgItemProperties.cpp:246
-#: clientgui/DlgItemProperties.cpp:249
-#: clientgui/DlgItemProperties.cpp:252
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:231
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:231
-#: clientgui/DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:234
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:237
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:240
-#: clientgui/DlgItemProperties.cpp:242
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:242
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:246
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:249
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:252
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:254
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:262
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:271
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:297
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:311
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr ""
-#: clientgui/DlgItemProperties.cpp:323
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:324
-msgid "Workunit name"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:325
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:328
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:331
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:333
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:336
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:339
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:340
-#: clientgui/DlgItemProperties.cpp:355
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:342
-#: clientgui/DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:344
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:349
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:352
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr ""
-#: clientgui/DlgItemProperties.cpp:426
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr ""
-#: clientgui/DlgOptions.cpp:129
-#: clientgui/DlgOptions.cpp:135
+#: DlgOptions.cpp:129 DlgOptions.cpp:135
msgid "Options"
msgstr ""
-#: clientgui/DlgOptions.cpp:175
+#: DlgOptions.cpp:175
msgid "Language:"
msgstr ""
-#: clientgui/DlgOptions.cpp:182
+#: DlgOptions.cpp:182
msgid "What language should BOINC use?"
msgstr ""
-#: clientgui/DlgOptions.cpp:186
+#: DlgOptions.cpp:186
msgid "Notice reminder interval:"
msgstr ""
-#: clientgui/DlgOptions.cpp:193
+#: DlgOptions.cpp:193
msgid "How often should BOINC remind you of new notices?"
msgstr ""
-#: clientgui/DlgOptions.cpp:198
+#: DlgOptions.cpp:198
msgid "Run Manager at login?"
msgstr ""
-#: clientgui/DlgOptions.cpp:204
+#: DlgOptions.cpp:204
msgid "Run the BOINC Manager when you log on."
msgstr ""
-#: clientgui/DlgOptions.cpp:209
+#: DlgOptions.cpp:209
msgid "Enable Manager exit dialog?"
msgstr ""
-#: clientgui/DlgOptions.cpp:215
+#: DlgOptions.cpp:215
msgid "Display the exit dialog when shutting down the Manager."
msgstr ""
-#: clientgui/DlgOptions.cpp:226
+#: DlgOptions.cpp:226
msgid "Dial-up and Virtual Private Network settings"
msgstr ""
-#: clientgui/DlgOptions.cpp:240
+#: DlgOptions.cpp:240
msgid "&Set Default"
msgstr ""
-#: clientgui/DlgOptions.cpp:245
+#: DlgOptions.cpp:245
msgid "&Clear Default"
msgstr ""
-#: clientgui/DlgOptions.cpp:252
+#: DlgOptions.cpp:252
msgid "Default Connection:"
msgstr ""
-#: clientgui/DlgOptions.cpp:259
+#: DlgOptions.cpp:259
msgid "Connections"
msgstr ""
-#: clientgui/DlgOptions.cpp:268
+#: DlgOptions.cpp:268
msgid "Connect via HTTP proxy server"
msgstr ""
-#: clientgui/DlgOptions.cpp:272
+#: DlgOptions.cpp:272
msgid "HTTP Proxy Server Configuration"
msgstr ""
-#: clientgui/DlgOptions.cpp:280
-#: clientgui/DlgOptions.cpp:344
+#: DlgOptions.cpp:280 DlgOptions.cpp:344
msgid "Address:"
msgstr ""
-#: clientgui/DlgOptions.cpp:288
-#: clientgui/DlgOptions.cpp:352
+#: DlgOptions.cpp:288 DlgOptions.cpp:352 ProxyPage.cpp:340 ProxyPage.cpp:360
msgid "Port:"
msgstr ""
-#: clientgui/DlgOptions.cpp:296
-#: clientgui/DlgOptions.cpp:360
+#: DlgOptions.cpp:296 DlgOptions.cpp:360
msgid "Don't use proxy for:"
msgstr ""
-#: clientgui/DlgOptions.cpp:303
-#: clientgui/DlgOptions.cpp:367
+#: DlgOptions.cpp:303 DlgOptions.cpp:367
msgid "Leave these blank if not needed"
msgstr ""
-#: clientgui/DlgOptions.cpp:309
-#: clientgui/DlgOptions.cpp:373
+#: DlgOptions.cpp:309 DlgOptions.cpp:373 ProxyPage.cpp:343 ProxyPage.cpp:363
msgid "User Name:"
msgstr ""
-#: clientgui/DlgOptions.cpp:317
-#: clientgui/DlgOptions.cpp:381
-#: clientgui/DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
+#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr ""
-#: clientgui/DlgOptions.cpp:324
+#: DlgOptions.cpp:324
msgid "HTTP Proxy"
msgstr ""
-#: clientgui/DlgOptions.cpp:332
+#: DlgOptions.cpp:332
msgid "Connect via SOCKS proxy server"
msgstr ""
-#: clientgui/DlgOptions.cpp:336
+#: DlgOptions.cpp:336
msgid "SOCKS Proxy Server Configuration"
msgstr ""
-#: clientgui/DlgOptions.cpp:388
+#: DlgOptions.cpp:388
msgid "SOCKS Proxy"
msgstr ""
-#: clientgui/DlgOptions.cpp:586
+#: DlgOptions.cpp:586
msgid "always"
msgstr ""
-#: clientgui/DlgOptions.cpp:587
+#: DlgOptions.cpp:587
msgid "1 hour"
msgstr ""
-#: clientgui/DlgOptions.cpp:588
+#: DlgOptions.cpp:588
msgid "6 hours"
msgstr ""
-#: clientgui/DlgOptions.cpp:589
+#: DlgOptions.cpp:589
msgid "1 day"
msgstr ""
-#: clientgui/DlgOptions.cpp:590
+#: DlgOptions.cpp:590
msgid "1 week"
msgstr ""
-#: clientgui/DlgOptions.cpp:591
+#: DlgOptions.cpp:591
msgid "never"
msgstr ""
-#: clientgui/DlgOptions.cpp:688
+#: DlgOptions.cpp:688
#, c-format
msgid "%s - Language Selection"
msgstr ""
-#: clientgui/DlgOptions.cpp:695
+#: DlgOptions.cpp:695
#, c-format
-msgid "The %s's language has been changed. In order for this change to take effect, you must restart the %s."
+msgid ""
+"The %s's language has been changed. In order for this change to take "
+"effect, you must restart the %s."
msgstr ""
-#: clientgui/DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr ""
-#: clientgui/DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr ""
-#: clientgui/DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr ""
-#: clientgui/Localization.cpp:31
-#: clientgui/Localization.cpp:69
+#: Localization.cpp:31 Localization.cpp:69
msgid "Message boards"
msgstr ""
-#: clientgui/Localization.cpp:33
+#: Localization.cpp:33
msgid "Correspond with other users on the SETI at home message boards"
msgstr ""
-#: clientgui/Localization.cpp:37
+#: Localization.cpp:37
msgid "Ask questions and report problems"
msgstr ""
-#: clientgui/Localization.cpp:39
-#: clientgui/Localization.cpp:81
-#: clientgui/Localization.cpp:111
-#: clientgui/Localization.cpp:129
+#: Localization.cpp:39 Localization.cpp:81 Localization.cpp:111
+#: Localization.cpp:129
msgid "Your account"
msgstr ""
-#: clientgui/Localization.cpp:41
-#: clientgui/Localization.cpp:87
-#: clientgui/Localization.cpp:113
+#: Localization.cpp:41 Localization.cpp:87 Localization.cpp:113
msgid "View your account information and credit totals"
msgstr ""
-#: clientgui/Localization.cpp:43
+#: Localization.cpp:43
msgid "Your preferences"
msgstr ""
-#: clientgui/Localization.cpp:45
+#: Localization.cpp:45
msgid "View and modify your SETI at home account profile and preferences"
msgstr ""
-#: clientgui/Localization.cpp:47
-#: clientgui/Localization.cpp:89
+#: Localization.cpp:47 Localization.cpp:89
msgid "Your results"
msgstr ""
-#: clientgui/Localization.cpp:49
-#: clientgui/Localization.cpp:91
+#: Localization.cpp:49 Localization.cpp:91
msgid "View your last week (or more) of computational results and work"
msgstr ""
-#: clientgui/Localization.cpp:51
-#: clientgui/Localization.cpp:93
+#: Localization.cpp:51 Localization.cpp:93
msgid "Your computers"
msgstr ""
-#: clientgui/Localization.cpp:53
+#: Localization.cpp:53
msgid "View a listing of all the computers on which you are running SETI at Home"
msgstr ""
-#: clientgui/Localization.cpp:55
-#: clientgui/Localization.cpp:97
+#: Localization.cpp:55 Localization.cpp:97
msgid "Your team"
msgstr ""
-#: clientgui/Localization.cpp:57
-#: clientgui/Localization.cpp:99
+#: Localization.cpp:57 Localization.cpp:99
msgid "View information about your team"
msgstr ""
-#: clientgui/Localization.cpp:61
+#: Localization.cpp:61
msgid "Common questions"
msgstr ""
-#: clientgui/Localization.cpp:63
+#: Localization.cpp:63
msgid "Read the Einstein at Home Frequently Asked Question list"
msgstr ""
-#: clientgui/Localization.cpp:65
+#: Localization.cpp:65
msgid "Screensaver info"
msgstr ""
-#: clientgui/Localization.cpp:67
+#: Localization.cpp:67
msgid "Read a detailed description of the Einstein at Home screensaver"
msgstr ""
-#: clientgui/Localization.cpp:71
-msgid "Correspond with admins and other users on the Einstein at Home message boards"
+#: Localization.cpp:71
+msgid ""
+"Correspond with admins and other users on the Einstein at Home message boards"
msgstr ""
-#: clientgui/Localization.cpp:73
+#: Localization.cpp:73
msgid "Einstein status"
msgstr ""
-#: clientgui/Localization.cpp:75
+#: Localization.cpp:75
msgid "Current status of the Einstein at Home server"
msgstr ""
-#: clientgui/Localization.cpp:77
+#: Localization.cpp:77
msgid "Report problems"
msgstr ""
-#: clientgui/Localization.cpp:79
+#: Localization.cpp:79
msgid "A link to the Einstein at Home problems and bug reports message board"
msgstr ""
-#: clientgui/Localization.cpp:83
+#: Localization.cpp:83
msgid "View and modify your Einstein at Home account profile and preferences"
msgstr ""
-#: clientgui/Localization.cpp:85
+#: Localization.cpp:85
msgid "Account summary"
msgstr ""
-#: clientgui/Localization.cpp:95
-msgid "View a listing of all the computers on which you are running Einstein at Home"
+#: Localization.cpp:95
+msgid ""
+"View a listing of all the computers on which you are running Einstein at Home"
msgstr ""
-#: clientgui/Localization.cpp:101
+#: Localization.cpp:101
msgid "LIGO project"
msgstr ""
-#: clientgui/Localization.cpp:103
-msgid "The home page of the Laser Interferometer Gravitational-wave Observatory (LIGO) project"
+#: Localization.cpp:103
+msgid ""
+"The home page of the Laser Interferometer Gravitational-wave Observatory "
+"(LIGO) project"
msgstr ""
-#: clientgui/Localization.cpp:105
+#: Localization.cpp:105
msgid "GEO-600 project"
msgstr ""
-#: clientgui/Localization.cpp:107
+#: Localization.cpp:107
msgid "The home page of the GEO-600 project"
msgstr ""
-#: clientgui/Localization.cpp:115
-#: clientgui/Localization.cpp:133
+#: Localization.cpp:115 Localization.cpp:133 ViewProjects.cpp:221
+#: ViewStatistics.cpp:465
msgid "Team"
msgstr ""
-#: clientgui/Localization.cpp:117
+#: Localization.cpp:117
msgid "Info about your Team"
msgstr ""
-#: clientgui/Localization.cpp:123
+#: Localization.cpp:123
msgid "Get help for climateprediction.net"
msgstr ""
-#: clientgui/Localization.cpp:125
+#: Localization.cpp:125
msgid "News"
msgstr ""
-#: clientgui/Localization.cpp:127
+#: Localization.cpp:127
msgid "climateprediction.net News"
msgstr ""
-#: clientgui/Localization.cpp:131
+#: Localization.cpp:131
msgid "View your account information, credits, and trickles"
msgstr ""
-#: clientgui/Localization.cpp:135
+#: Localization.cpp:135
msgid "Info about your team"
msgstr ""
-#: clientgui/Localization.cpp:141
+#: Localization.cpp:141
msgid "Search for help in our help system"
msgstr ""
-#: clientgui/Localization.cpp:143
+#: Localization.cpp:143
msgid "Global Statistics"
msgstr ""
-#: clientgui/Localization.cpp:145
+#: Localization.cpp:145
msgid "Summary statistics for World Community Grid"
msgstr ""
-#: clientgui/Localization.cpp:147
+#: Localization.cpp:147
msgid "My Grid"
msgstr ""
-#: clientgui/Localization.cpp:149
+#: Localization.cpp:149
msgid "Your statistics and settings"
msgstr ""
-#: clientgui/Localization.cpp:151
+#: Localization.cpp:151
msgid "Device Profiles"
msgstr ""
-#: clientgui/Localization.cpp:153
+#: Localization.cpp:153
msgid "Update your device settings"
msgstr ""
-#: clientgui/Localization.cpp:155
+#: Localization.cpp:155
msgid "Research"
msgstr ""
-#: clientgui/Localization.cpp:157
+#: Localization.cpp:157
msgid "Learn about the projects hosted at World Community Grid"
msgstr ""
-#: clientgui/MainDocument.cpp:586
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr ""
-#: clientgui/MainDocument.cpp:594
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr ""
-#: clientgui/MainDocument.cpp:1183
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr ""
-#: clientgui/MainDocument.cpp:1804
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr ""
-#: clientgui/MainDocument.cpp:1805
-msgid "Please download and install the CoRD application from http://cord.sourceforge.net"
+#: MainDocument.cpp:1817
+msgid ""
+"Please download and install the CoRD application from http://cord."
+"sourceforge.net"
msgstr ""
-#: clientgui/MainDocument.cpp:2418
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr ""
-#: clientgui/MainDocument.cpp:2419
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr ""
-#: clientgui/MainDocument.cpp:2420
+#: MainDocument.cpp:2434
msgid "user request"
msgstr ""
-#: clientgui/MainDocument.cpp:2421
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr ""
-#: clientgui/MainDocument.cpp:2422
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr ""
-#: clientgui/MainDocument.cpp:2423
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr ""
-#: clientgui/MainDocument.cpp:2424
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr ""
-#: clientgui/MainDocument.cpp:2425
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr ""
-#: clientgui/MainDocument.cpp:2426
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr ""
-#: clientgui/MainDocument.cpp:2427
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr ""
-#: clientgui/MainDocument.cpp:2428
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr ""
-#: clientgui/MainDocument.cpp:2429
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr ""
-#: clientgui/MainDocument.cpp:2431
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr ""
-#: clientgui/MainDocument.cpp:2453
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr ""
-#: clientgui/MainDocument.cpp:2460
+#: MainDocument.cpp:2474
msgid "New"
msgstr ""
-#: clientgui/MainDocument.cpp:2464
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr ""
-#: clientgui/MainDocument.cpp:2466
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr ""
-#: clientgui/MainDocument.cpp:2468
-#: clientgui/MainDocument.cpp:2538
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr ""
-#: clientgui/MainDocument.cpp:2476
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr ""
-#: clientgui/MainDocument.cpp:2478
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr ""
-#: clientgui/MainDocument.cpp:2480
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr ""
-#: clientgui/MainDocument.cpp:2486
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr ""
-#: clientgui/MainDocument.cpp:2493
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr ""
-#: clientgui/MainDocument.cpp:2495
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr ""
-#: clientgui/MainDocument.cpp:2498
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr ""
-#: clientgui/MainDocument.cpp:2500
+#: MainDocument.cpp:2514
msgid "Running"
msgstr ""
-#: clientgui/MainDocument.cpp:2503
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr ""
-#: clientgui/MainDocument.cpp:2506
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr ""
-#: clientgui/MainDocument.cpp:2508
-#: clientgui/MainDocument.cpp:2514
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr ""
-#: clientgui/MainDocument.cpp:2518
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr ""
-#: clientgui/MainDocument.cpp:2522
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr ""
-#: clientgui/MainDocument.cpp:2526
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr ""
-#: clientgui/MainDocument.cpp:2530
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr ""
-#: clientgui/MainDocument.cpp:2534
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr ""
-#: clientgui/MainDocument.cpp:2536
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr ""
-#: clientgui/MainDocument.cpp:2547
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr ""
-#: clientgui/MainDocument.cpp:2550
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr ""
-#: clientgui/MainDocument.cpp:2553
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr ""
-#: clientgui/MainDocument.cpp:2556
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr ""
-#: clientgui/MainDocument.cpp:2559
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr ""
-#: clientgui/MainDocument.cpp:2562
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr ""
-#: clientgui/MainDocument.cpp:2565
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr ""
-#: clientgui/MainDocument.cpp:2570
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr ""
-#: clientgui/MainDocument.cpp:2572
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr ""
-#: clientgui/MainDocument.cpp:2574
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr ""
-#: clientgui/NoInternetConnectionPage.cpp:179
+#: NoInternetConnectionPage.cpp:179
msgid "No Internet connection"
msgstr ""
-#: clientgui/NoInternetConnectionPage.cpp:182
+#: NoInternetConnectionPage.cpp:182
msgid "Please connect to the Internet and try again."
msgstr ""
-#: clientgui/NotDetectedPage.cpp:181
+#: NotDetectedPage.cpp:181
msgid "Project not found"
msgstr ""
-#: clientgui/NotDetectedPage.cpp:184
+#: NotDetectedPage.cpp:184
msgid ""
"The URL you supplied is not that of a BOINC-based project.\n"
"\n"
"Please check the URL and try again."
msgstr ""
-#: clientgui/NotDetectedPage.cpp:188
+#: NotDetectedPage.cpp:188
msgid "Account manager not found"
msgstr ""
-#: clientgui/NotDetectedPage.cpp:191
+#: NotDetectedPage.cpp:191
msgid ""
"The URL you supplied is not that of a BOINC-based account\n"
"manager.\n"
@@ -2428,135 +2377,99 @@ msgid ""
"Please check the URL and try again."
msgstr ""
-#: clientgui/NotFoundPage.cpp:181
+#: NotFoundPage.cpp:181
msgid "Login Failed."
msgstr ""
-#: clientgui/NotFoundPage.cpp:185
+#: NotFoundPage.cpp:185
msgid "Check the username and password, and try again."
msgstr ""
-#: clientgui/NotFoundPage.cpp:189
+#: NotFoundPage.cpp:189
msgid "Check the email address and password, and try again."
msgstr ""
-#: clientgui/NoticeListCtrl.cpp:63
-msgid "Notice List"
-msgstr ""
-
-#: clientgui/NoticeListCtrl.cpp:183
-#, c-format
-msgid "%s; received on %s"
-msgstr ""
-
-#: clientgui/NoticeListCtrl.cpp:185
-#, c-format
-msgid "%s; received from %s; on %s"
-msgstr ""
-
-#: clientgui/NoticeListCtrl.cpp:282
-#: clientgui/ProjectListCtrl.cpp:282
-msgid "Click"
-msgstr ""
-
-#: clientgui/NoticeListCtrl.cpp:565
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:451
-#: clientgui/ProjectInfoPage.cpp:739
-#: clientgui/ProjectInfoPage.cpp:743
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:582
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:586
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:590
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:594
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:598
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:602
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:606
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:610
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:614
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:618
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:787
-msgid "This project may not have work for your type of computer. Do you want to add it anyway?"
+#: ProjectInfoPage.cpp:826
+msgid ""
+"This project may not have work for your type of computer. Do you want to "
+"add it anyway?"
msgstr ""
-#: clientgui/ProjectInfoPage.cpp:811
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr ""
-#: clientgui/ProjectListCtrl.cpp:66
-msgid "Project List"
-msgstr ""
-
-#: clientgui/ProjectListCtrl.cpp:507
-msgid "Nvidia GPU Supported"
-msgstr ""
-
-#: clientgui/ProjectListCtrl.cpp:509
-msgid "ATI GPU Supported"
-msgstr ""
-
-#: clientgui/ProjectListCtrl.cpp:511
-msgid "Project Website"
-msgstr ""
-
-#: clientgui/ProjectProcessingPage.cpp:321
+#: ProjectProcessingPage.cpp:321
msgid "Communicating with project."
msgstr ""
-#: clientgui/ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr ""
-#: clientgui/ProjectProcessingPage.cpp:510
-#: clientgui/ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr ""
-#: clientgui/ProjectPropertiesPage.cpp:334
+#: ProjectPropertiesPage.cpp:334
msgid ""
"Communicating with project\n"
"Please wait..."
msgstr ""
-#: clientgui/ProxyInfoPage.cpp:195
+#: ProxyInfoPage.cpp:195
msgid "Network communication failure"
msgstr ""
-#: clientgui/ProxyInfoPage.cpp:199
+#: ProxyInfoPage.cpp:199
msgid ""
"The World Community Grid - BOINC software failed to communicate\n"
"over the Internet. The most likely reasons are:\n"
@@ -2573,7 +2486,7 @@ msgid ""
"Click Next to configure BOINC's proxy settings."
msgstr ""
-#: clientgui/ProxyInfoPage.cpp:203
+#: ProxyInfoPage.cpp:203
msgid ""
"BOINC failed to communicate on the Internet.\n"
"The most likely reasons are:\n"
@@ -2590,1179 +2503,611 @@ msgid ""
"Click Next to configure BOINC's proxy settings."
msgstr ""
-#: clientgui/ProxyPage.cpp:331
+#: ProxyPage.cpp:331
msgid "Proxy configuration"
msgstr ""
-#: clientgui/ProxyPage.cpp:334
+#: ProxyPage.cpp:334
msgid "HTTP proxy"
msgstr ""
-#: clientgui/ProxyPage.cpp:337
-#: clientgui/ProxyPage.cpp:357
+#: ProxyPage.cpp:337 ProxyPage.cpp:357
msgid "Server:"
msgstr ""
-#: clientgui/ProxyPage.cpp:350
+#: ProxyPage.cpp:350
msgid "Autodetect"
msgstr ""
-#: clientgui/ProxyPage.cpp:354
+#: ProxyPage.cpp:354
msgid "SOCKS proxy"
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:136
-#: clientgui/sg_BoincSimpleGUI.cpp:119
-msgid "Advanced View...\tCtrl+Shift+A"
+#: TermsOfUsePage.cpp:218
+msgid "Terms of Use"
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:137
-msgid "Display the advanced graphical interface."
+#: TermsOfUsePage.cpp:222
+msgid "Please read the following terms of use:"
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:144
-msgid "Skin"
+#: TermsOfUsePage.cpp:231
+msgid "I agree to the terms of use."
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:146
-msgid "Select the appearance of the user interface."
+#: TermsOfUsePage.cpp:237
+msgid "I do not agree to the terms of use."
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:193
-#: clientgui/sg_BoincSimpleGUI.cpp:147
-#, c-format
-msgid "&%s"
+#: UnavailablePage.cpp:183
+msgid "Project temporarily unavailable"
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:369
-msgid "Default"
+#: UnavailablePage.cpp:186
+msgid ""
+"The project is temporarily unavailable.\n"
+"\n"
+"Please try again later."
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:737
-msgid "Suspend"
+#: UnavailablePage.cpp:190
+msgid "Account manager temporarily unavailable"
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:739
-msgid "Suspend Computing"
+#: UnavailablePage.cpp:193
+msgid ""
+"The account manager is temporarily unavailable.\n"
+"\n"
+"Please try again later."
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:740
-msgid "Resume Computing"
+#: ValidateAccountKey.cpp:68
+msgid "Please specify an account key to continue."
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:756
-msgid "Notices"
+#: ValidateAccountKey.cpp:71
+msgid "Invalid Account Key; please enter a valid Account Key"
msgstr ""
-#: clientgui/sg_BoincSimpleFrame.cpp:757
-msgid "Open a window to view notices from projects or BOINC"
+#: ValidateAccountKey.cpp:82 ValidateEmailAddress.cpp:86
+msgid "Validation conflict"
msgstr ""
-#: clientgui/sg_BoincSimpleGUI.cpp:120
-msgid "Display the advanced (accessible) graphical interface."
+#: ValidateEmailAddress.cpp:72
+msgid "Please specify an email address"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:288
-msgid "Retrieving current status."
+#: ValidateEmailAddress.cpp:75
+msgid "Invalid email address; please enter a valid email address"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:291
-msgid "You don't have any projects. Please Add a Project."
+#: ValidateURL.cpp:69
+msgid "Missing URL"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:294
-msgid "Downloading work from the server."
+#: ValidateURL.cpp:70
+msgid ""
+"Please specify a URL.\n"
+"For example:\n"
+"http://www.example.com/"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:299
-msgid "Processing Suspended: Running On Batteries."
+#: ValidateURL.cpp:83 ValidateURL.cpp:87 ValidateURL.cpp:91
+#: ValidateURL.cpp:103 ValidateURL.cpp:107 ValidateURL.cpp:110
+msgid "Invalid URL"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:301
-msgid "Processing Suspended: User Active."
+#: ValidateURL.cpp:84 ValidateURL.cpp:88 ValidateURL.cpp:92
+msgid ""
+"Please specify a valid URL.\n"
+"For example:\n"
+"http://boincproject.example.com"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:303
-msgid "Processing Suspended: User paused processing."
+#: ValidateURL.cpp:104 ValidateURL.cpp:108
+#, c-format
+msgid "'%s' does not contain a valid host name."
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:305
-msgid "Processing Suspended: Time of Day."
+#: ValidateURL.cpp:111
+#, c-format
+msgid "'%s' does not contain a valid path."
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:307
-msgid "Processing Suspended: Benchmarks Running."
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
+#: ViewTransfers.cpp:160 ViewWork.cpp:183
+msgid "Commands"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:309
-msgid "Processing Suspended."
+#: ViewMessages.cpp:88
+msgid "Copy all messages"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:313
-msgid "Waiting to contact project servers."
+#: ViewMessages.cpp:95
+msgid "Copy selected messages"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:317
-#: clientgui/sg_ClientStateIndicator.cpp:325
-msgid "Retrieving current status"
+#: ViewMessages.cpp:106 ViewMessages.cpp:502
+msgid "Show only this project"
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:320
-msgid "No work available to process"
+#: ViewMessages.cpp:107 ViewMessages.cpp:503
+msgid "Show only the messages for the selected project."
msgstr ""
-#: clientgui/sg_ClientStateIndicator.cpp:322
-msgid "Unable to connect to the core client"
+#: ViewMessages.cpp:164
+msgid "Messages"
msgstr ""
-#: clientgui/sg_DlgMessages.cpp:130
-msgid "One or more items failed to load from the Internet."
+#: ViewMessages.cpp:187
+msgid "Copying all messages to the clipboard..."
msgstr ""
-#: clientgui/sg_DlgMessages.cpp:138
-msgid "Retry now"
+#: ViewMessages.cpp:223
+msgid "Copying selected messages to the clipboard..."
msgstr ""
-#: clientgui/sg_DlgMessages.cpp:164
-msgid "Close"
+#: ViewMessages.cpp:286
+msgid "Filtering messages..."
msgstr ""
-#: clientgui/sg_DlgMessages.cpp:171
-msgid "Fetching notices; please wait..."
+#: ViewMessages.cpp:494
+msgid "Show all messages"
msgstr ""
-#: clientgui/sg_DlgMessages.cpp:178
-msgid "There are no notices at this time."
+#: ViewMessages.cpp:495
+msgid "Show messages for all projects."
msgstr ""
-#: clientgui/sg_DlgMessages.cpp:463
-#, c-format
-msgid "%s - Notices"
+#: ViewNotices.cpp:58 sg_DlgMessages.cpp:124
+msgid "Fetching notices; please wait..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:94
-msgid "100 MB"
+#: ViewNotices.cpp:65 sg_DlgMessages.cpp:132
+msgid "There are no notices at this time."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:95
-msgid "200 MB"
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
+msgid "Notices"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:96
-msgid "500 MB"
+#: ViewProjects.cpp:174 sg_ProjectCommandPopup.cpp:61
+msgid "Update"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:97
-msgid "1 GB"
+#: ViewProjects.cpp:175 sg_ProjectCommandPopup.cpp:62
+msgid ""
+"Report all completed tasks, get latest credit, get latest preferences, and "
+"possibly get more tasks."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:98
-msgid "2 GB"
+#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
+#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
+#: sg_TaskCommandPopup.cpp:106
+msgid "Suspend"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:99
-msgid "5 GB"
+#: ViewProjects.cpp:182 ViewProjects.cpp:722 sg_ProjectCommandPopup.cpp:68
+#: sg_ProjectCommandPopup.cpp:114
+msgid "Suspend tasks for this project."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:100
-msgid "10 GB"
+#: ViewProjects.cpp:188 ViewProjects.cpp:741 sg_ProjectCommandPopup.cpp:73
+#: sg_ProjectCommandPopup.cpp:121
+msgid "No new tasks"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:101
-msgid "20 GB"
+#: ViewProjects.cpp:189 sg_ProjectCommandPopup.cpp:74
+msgid "Don't get new tasks for this project."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:102
-msgid "50 GB"
+#: ViewProjects.cpp:195 sg_ProjectCommandPopup.cpp:79
+msgid "Reset project"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:103
-msgid "100 GB"
+#: ViewProjects.cpp:196 sg_ProjectCommandPopup.cpp:80
+msgid ""
+"Delete all files and tasks associated with this project, and get new tasks. "
+"You can update the project first to report any completed tasks."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:134
-msgid "10%"
+#: ViewProjects.cpp:203 sg_ProjectCommandPopup.cpp:86
+msgid ""
+"Remove this project. Tasks in progress will be lost (use 'Update' first to "
+"report any completed tasks)."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:135
-msgid "20%"
+#: ViewProjects.cpp:209 ViewWork.cpp:222 sg_ProjectCommandPopup.cpp:91
+#: sg_TaskCommandPopup.cpp:78
+msgid "Properties"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:136
-msgid "30%"
+#: ViewProjects.cpp:210 sg_ProjectCommandPopup.cpp:92
+msgid "Show project details."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:137
-msgid "40%"
+#: ViewProjects.cpp:220 ViewStatistics.cpp:450
+msgid "Account"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:138
-msgid "50%"
+#: ViewProjects.cpp:222
+msgid "Work done"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:139
-msgid "60%"
+#: ViewProjects.cpp:223
+msgid "Avg. work done"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:140
-msgid "70%"
+#: ViewProjects.cpp:225 ViewTransfers.cpp:188 ViewWork.cpp:234
+msgid "Status"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:141
-msgid "80%"
+#: ViewProjects.cpp:250
+msgid "Projects"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:142
-msgid "90%"
+#: ViewProjects.cpp:302
+msgid "Updating project..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:143
-msgid "100%"
+#: ViewProjects.cpp:344
+msgid "Resuming project..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:168
-msgid "1"
+#: ViewProjects.cpp:348
+msgid "Suspending project..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:169
-msgid "3"
+#: ViewProjects.cpp:385
+msgid "Telling project to allow additional task downloads..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:170
-msgid "5"
+#: ViewProjects.cpp:389
+msgid "Telling project to not fetch any additional tasks..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:171
-msgid "10"
+#: ViewProjects.cpp:425
+msgid "Resetting project..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:172
-msgid "15"
+#: ViewProjects.cpp:438 sg_ProjectCommandPopup.cpp:214
+#, c-format
+msgid "Are you sure you want to reset project '%s'?"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:173
-msgid "30"
+#: ViewProjects.cpp:444 sg_ProjectCommandPopup.cpp:220
+msgid "Reset Project"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:174
-msgid "60"
+#: ViewProjects.cpp:483
+msgid "Removing project..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:282
-msgid "This dialog controls preferences for this computer only."
+#: ViewProjects.cpp:496 sg_ProjectCommandPopup.cpp:251
+#, c-format
+msgid "Are you sure you want to remove project '%s'?"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:287
-msgid "Click OK to set preferences."
+#: ViewProjects.cpp:502 sg_ProjectCommandPopup.cpp:257
+msgid "Remove Project"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:292
-msgid "Click Clear to restore web-based settings."
+#: ViewProjects.cpp:543 ViewWork.cpp:599
+msgid "Launching browser..."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:299
-msgid "For additional settings, select Computing Preferences in "
+#: ViewProjects.cpp:718 sg_ProjectCommandPopup.cpp:111
+msgid "Resume tasks for this project."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:304
-msgid "the Advanced View."
+#: ViewProjects.cpp:737 sg_ProjectCommandPopup.cpp:118
+msgid "Allow new tasks"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:332
-msgid "Do work only between:"
+#: ViewProjects.cpp:737 sg_ProjectCommandPopup.cpp:119
+msgid "Allow fetching new tasks for this project."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:354
-msgid "Connect to internet only between:"
+#: ViewProjects.cpp:741 sg_ProjectCommandPopup.cpp:122
+msgid "Don't fetch new tasks for this project."
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:376
-#: clientgui/sg_DlgPreferences.cpp:393
-msgid "Use no more than:"
+#: ViewProjects.cpp:1058
+msgid "Requested by user"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:389
-msgid "of disk space"
+#: ViewProjects.cpp:1059
+msgid "To fetch work"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:406
-msgid "of the processor"
+#: ViewProjects.cpp:1060
+msgid "To report completed tasks"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:410
-msgid "Do work while on battery?"
+#: ViewProjects.cpp:1061
+msgid "To send trickle-up message"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:423
-msgid "Do work after idle for:"
+#: ViewProjects.cpp:1062
+msgid "Requested by account manager"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:621
-#: clientgui/sg_DlgPreferences.cpp:624
-#: clientgui/sg_DlgPreferences.cpp:683
-#: clientgui/sg_DlgPreferences.cpp:687
-#: clientgui/sg_DlgPreferences.cpp:699
-#: clientgui/sg_DlgPreferences.cpp:703
-#: clientgui/sg_DlgPreferences.cpp:846
-#: clientgui/sg_DlgPreferences.cpp:857
-msgid "Anytime"
+#: ViewProjects.cpp:1063
+msgid "Project initialization"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:719
-#, c-format
-msgid "%d MB"
+#: ViewProjects.cpp:1064
+msgid "Requested by project"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:721
-#, c-format
-msgid "%4.2f GB"
+#: ViewProjects.cpp:1065
+msgid "Unknown reason"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:762
-#, c-format
-msgid "%d%%"
+#: ViewProjects.cpp:1079
+msgid "Suspended by user"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:798
-msgid "0 (Run Always)"
+#: ViewProjects.cpp:1082
+msgid "Won't get new tasks"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:801
-#, c-format
-msgid "%d"
+#: ViewProjects.cpp:1085
+msgid "Project ended - OK to remove"
msgstr ""
-#: clientgui/sg_DlgPreferences.cpp:1031
-msgid "Do you really want to clear all local preferences?\n"
+#: ViewProjects.cpp:1088
+msgid "Will remove when tasks done"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:90
-msgid "Paused: Other work running"
+#: ViewProjects.cpp:1091
+msgid "Scheduler request pending"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:92
-msgid "Paused: User initiated. Click 'Resume' to continue"
+#: ViewProjects.cpp:1097
+msgid "Scheduler request in progress"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:94
-msgid "Paused: User active"
+#: ViewProjects.cpp:1100
+msgid "Trickle up message pending"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:96
-msgid "Paused: Computer on battery"
+#: ViewProjects.cpp:1106
+msgid "Communication deferred "
msgstr ""
-#: clientgui/sg_ImageButton.cpp:98
-msgid "Paused: Time of Day"
+#: ViewResources.cpp:62
+msgid "Total disk usage"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:100
-msgid "Paused: Benchmarks running"
+#: ViewResources.cpp:83
+msgid "Disk usage by BOINC projects"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:102
-msgid "Paused"
+#: ViewResources.cpp:116
+msgid "Disk"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:104
-msgid "Paused: Application start delayed"
+#: ViewResources.cpp:249
+msgid "no projects: 0 bytes used"
msgstr ""
-#: clientgui/sg_ImageButton.cpp:132
-msgid "Click to show project graphics"
+#: ViewResources.cpp:286
+msgid "used by BOINC: "
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:61
-msgid "Update"
+#: ViewResources.cpp:296
+msgid "free, available to BOINC: "
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:62
-msgid "Report all completed tasks, get latest credit, get latest preferences, and possibly get more tasks."
+#: ViewResources.cpp:306
+msgid "free, not available to BOINC: "
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:68
-#: clientgui/sg_ProjectCommandPopup.cpp:114
-msgid "Suspend tasks for this project."
+#: ViewResources.cpp:316
+msgid "free: "
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:73
-#: clientgui/sg_ProjectCommandPopup.cpp:121
-msgid "No new tasks"
+#: ViewResources.cpp:326
+msgid "used by other programs: "
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:74
-msgid "Don't get new tasks for this project."
+#: ViewStatistics.cpp:1205
+msgid "User Total"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:79
-msgid "Reset project"
+#: ViewStatistics.cpp:1206
+msgid "User Average"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:80
-msgid "Delete all files and tasks associated with this project, and get new tasks. You can update the project first to report any completed tasks."
+#: ViewStatistics.cpp:1207
+msgid "Host Total"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:86
-msgid "Remove this project. Tasks in progress will be lost (use 'Update' first to report any completed tasks)."
+#: ViewStatistics.cpp:1208
+msgid "Host Average"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:91
-#: clientgui/sg_TaskCommandPopup.cpp:78
-msgid "Properties"
+#: ViewStatistics.cpp:1355
+#, c-format
+msgid "Last update: %.0f days ago"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:92
-msgid "Show project details."
+#: ViewStatistics.cpp:1982
+msgid "Show user total"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:111
-msgid "Resume tasks for this project."
+#: ViewStatistics.cpp:1983
+msgid "Show total credit for user"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:118
-msgid "Allow new tasks"
+#: ViewStatistics.cpp:1989
+msgid "Show user average"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:119
-msgid "Allow fetching new tasks for this project."
+#: ViewStatistics.cpp:1990
+msgid "Show average credit for user"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:122
-msgid "Don't fetch new tasks for this project."
+#: ViewStatistics.cpp:1996
+msgid "Show host total"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:214
-#, c-format
-msgid "Are you sure you want to reset project '%s'?"
+#: ViewStatistics.cpp:1997
+msgid "Show total credit for host"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:220
-msgid "Reset Project"
+#: ViewStatistics.cpp:2003
+msgid "Show host average"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:251
-#: clientgui/sg_StatImageLoader.cpp:192
-#, c-format
-msgid "Are you sure you want to remove project '%s'?"
+#: ViewStatistics.cpp:2004
+msgid "Show average credit for host"
msgstr ""
-#: clientgui/sg_ProjectCommandPopup.cpp:257
-#: clientgui/sg_StatImageLoader.cpp:138
-#: clientgui/sg_StatImageLoader.cpp:198
-msgid "Remove Project"
+#: ViewStatistics.cpp:2013
+msgid "< &Previous project"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:72
-msgid "Add Project"
+#: ViewStatistics.cpp:2014
+msgid "Show chart for previous project"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:73
-msgid "Synchronize"
+#: ViewStatistics.cpp:2019
+msgid "&Next project >"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:74
-msgid "Work done for this project"
+#: ViewStatistics.cpp:2020
+msgid "Show chart for next project"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:77
-#: clientgui/sg_ProjectsComponent.cpp:123
-msgid "Synchronize projects with account manager system"
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
+msgid "Hide project list"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:124
-msgid "Select a project to access with the controls below"
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
+msgid "Use entire area for graphs"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:145
-msgid "Project Web Pages"
+#: ViewStatistics.cpp:2032
+msgid "Mode view"
msgstr ""
-#: clientgui/sg_ProjectPanel.cpp:149
-msgid "Project Commands"
-msgstr ""
-
-#: clientgui/sg_ProjectPanel.cpp:267
-#, c-format
-msgid "Pop up a menu of websites for project %s"
-msgstr ""
-
-#: clientgui/sg_ProjectPanel.cpp:269
-#, c-format
-msgid "Pop up a menu of commands to apply to project %s"
-msgstr ""
-
-#: clientgui/sg_ProjectsComponent.cpp:196
-#: clientgui/sg_ProjectsComponent.cpp:207
-msgid "Open a window to view messages"
-msgstr ""
-
-#: clientgui/sg_ProjectsComponent.cpp:225
-msgid "Stop all activity"
-msgstr ""
-
-#: clientgui/sg_ProjectsComponent.cpp:237
-msgid "Resume activity"
-msgstr ""
-
-#: clientgui/sg_ProjectsComponent.cpp:254
-msgid "Open a window to set your preferences"
-msgstr ""
-
-#: clientgui/sg_ProjectsComponent.cpp:271
-msgid "Switch to the BOINC advanced view"
-msgstr ""
-
-#: clientgui/sg_ProjectsComponent.cpp:298
-msgid "My Projects:"
-msgstr ""
-
-#: clientgui/sg_StatImageLoader.cpp:101
-#, c-format
-msgid "%s. Work done by %s: %0.2f"
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:60
-#: clientgui/sg_ViewTabPage.cpp:424
-msgid "Show graphics"
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:61
-msgid "Show application graphics in a window."
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:67
-msgid "Suspend this task."
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:72
-msgid "Abort"
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:73
-msgid "Abandon this task. You will get no credit for it."
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:79
-msgid "Show task details."
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:103
-msgid "Resume work for this task."
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:107
-msgid "Suspend work for this task."
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:251
-#, c-format
-msgid ""
-"Are you sure you want to abort this task '%s'?\n"
-"(Progress: %.1lf%%, Status: %s)"
-msgstr ""
-
-#: clientgui/sg_TaskCommandPopup.cpp:256
-msgid "Abort task"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:449
-msgid "Not available"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:460
-msgid "Tasks:"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:466
-msgid "Select a task to access"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:477
-msgid "From:"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:531
-msgid "This task's progress"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:549
-msgid "Task Commands"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:550
-msgid "Pop up a menu of commands to apply to this task"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:685
-#, c-format
-msgid "Application: %s"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:708
-#, c-format
-msgid "%.3f%%"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:716
-msgid "Application: Not available"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:816
-msgid "Not Available"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:831
-#, c-format
-msgid "Elapsed: %s"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:845
-#, c-format
-msgid "Remaining (estimated): %s"
-msgstr ""
-
-#: clientgui/sg_TaskPanel.cpp:860
-#, c-format
-msgid "Status: %s"
-msgstr ""
-
-#: clientgui/sg_ViewTabPage.cpp:140
-#: clientgui/sg_ViewTabPage.cpp:280
-#, c-format
-msgid "%.1lf"
-msgstr ""
-
-#: clientgui/sg_ViewTabPage.cpp:409
-#, c-format
-msgid "%d hr %d min %d sec"
-msgstr ""
-
-#: clientgui/sg_ViewTabPage.cpp:423
-msgid "Are you sure you want to display graphics on a remote machine?"
-msgstr ""
-
-#: clientgui/sg_ViewTabPage.cpp:446
-msgid "Application: "
-msgstr ""
-
-#: clientgui/sg_ViewTabPage.cpp:449
-#: clientgui/sg_ViewTabPage.cpp:453
-msgid "Time Remaining: "
-msgstr ""
-
-#: clientgui/sg_ViewTabPage.cpp:452
-msgid "Elapsed Time: "
-msgstr ""
-
-#: clientgui/TermsOfUsePage.cpp:218
-msgid "Terms of Use"
-msgstr ""
-
-#: clientgui/TermsOfUsePage.cpp:222
-msgid "Please read the following terms of use:"
-msgstr ""
-
-#: clientgui/TermsOfUsePage.cpp:231
-msgid "I agree to the terms of use."
-msgstr ""
-
-#: clientgui/TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr ""
-
-#: clientgui/UnavailablePage.cpp:183
-msgid "Project temporarily unavailable"
-msgstr ""
-
-#: clientgui/UnavailablePage.cpp:186
-msgid ""
-"The project is temporarily unavailable.\n"
-"\n"
-"Please try again later."
-msgstr ""
-
-#: clientgui/UnavailablePage.cpp:190
-msgid "Account manager temporarily unavailable"
-msgstr ""
-
-#: clientgui/UnavailablePage.cpp:193
-msgid ""
-"The account manager is temporarily unavailable.\n"
-"\n"
-"Please try again later."
-msgstr ""
-
-#: clientgui/ValidateAccountKey.cpp:68
-msgid "Please specify an account key to continue."
-msgstr ""
-
-#: clientgui/ValidateAccountKey.cpp:71
-msgid "Invalid Account Key; please enter a valid Account Key"
-msgstr ""
-
-#: clientgui/ValidateAccountKey.cpp:82
-#: clientgui/ValidateEmailAddress.cpp:86
-msgid "Validation conflict"
-msgstr ""
-
-#: clientgui/ValidateEmailAddress.cpp:72
-msgid "Please specify an email address"
-msgstr ""
-
-#: clientgui/ValidateEmailAddress.cpp:75
-msgid "Invalid email address; please enter a valid email address"
-msgstr ""
-
-#: clientgui/ValidateURL.cpp:69
-msgid "Missing URL"
-msgstr ""
-
-#: clientgui/ValidateURL.cpp:70
-msgid ""
-"Please specify a URL.\n"
-"For example:\n"
-"http://www.example.com/"
-msgstr ""
-
-#: clientgui/ValidateURL.cpp:83
-#: clientgui/ValidateURL.cpp:87
-#: clientgui/ValidateURL.cpp:91
-#: clientgui/ValidateURL.cpp:103
-#: clientgui/ValidateURL.cpp:107
-#: clientgui/ValidateURL.cpp:110
-msgid "Invalid URL"
-msgstr ""
-
-#: clientgui/ValidateURL.cpp:84
-#: clientgui/ValidateURL.cpp:88
-#: clientgui/ValidateURL.cpp:92
-msgid ""
-"Please specify a valid URL.\n"
-"For example:\n"
-"http://boincproject.example.com"
-msgstr ""
-
-#: clientgui/ValidateURL.cpp:104
-#: clientgui/ValidateURL.cpp:108
-#, c-format
-msgid "'%s' does not contain a valid host name."
-msgstr ""
-
-#: clientgui/ValidateURL.cpp:111
-#, c-format
-msgid "'%s' does not contain a valid path."
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:84
-#: clientgui/ViewProjects.cpp:169
-#: clientgui/ViewStatistics.cpp:1965
-#: clientgui/ViewTransfers.cpp:159
-#: clientgui/ViewWork.cpp:182
-msgid "Commands"
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:88
-msgid "Copy all messages"
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:95
-msgid "Copy selected messages"
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:106
-#: clientgui/ViewMessages.cpp:502
-msgid "Show only this project"
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:107
-#: clientgui/ViewMessages.cpp:503
-msgid "Show only the messages for the selected project."
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:164
-msgid "Messages"
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:187
-msgid "Copying all messages to the clipboard..."
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:223
-msgid "Copying selected messages to the clipboard..."
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:286
-msgid "Filtering messages..."
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:494
-msgid "Show all messages"
-msgstr ""
-
-#: clientgui/ViewMessages.cpp:495
-msgid "Show messages for all projects."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:219
-#: clientgui/ViewStatistics.cpp:442
-msgid "Account"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:221
-msgid "Work done"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:222
-msgid "Avg. work done"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:224
-#: clientgui/ViewTransfers.cpp:187
-#: clientgui/ViewWork.cpp:233
-msgid "Status"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:249
-msgid "Projects"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:301
-msgid "Updating project..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:343
-msgid "Resuming project..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:347
-msgid "Suspending project..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:384
-msgid "Telling project to allow additional task downloads..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:388
-msgid "Telling project to not fetch any additional tasks..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:424
-msgid "Resetting project..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:482
-msgid "Removing project..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:542
-#: clientgui/ViewWork.cpp:598
-msgid "Launching browser..."
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1048
-msgid "Requested by user"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1049
-msgid "To fetch work"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1050
-msgid "To report completed tasks"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1051
-msgid "To send trickle-up message"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1052
-msgid "Requested by account manager"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1053
-msgid "Project initialization"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1054
-msgid "Requested by project"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1055
-msgid "Unknown reason"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1069
-msgid "Suspended by user"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1072
-msgid "Won't get new tasks"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1075
-msgid "Project ended - OK to remove"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1078
-msgid "Will remove when tasks done"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1081
-msgid "Scheduler request pending"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1087
-msgid "Scheduler request in progress"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1090
-msgid "Trickle up message pending"
-msgstr ""
-
-#: clientgui/ViewProjects.cpp:1096
-msgid "Communication deferred "
-msgstr ""
-
-#: clientgui/ViewResources.cpp:62
-msgid "Total disk usage"
-msgstr ""
-
-#: clientgui/ViewResources.cpp:83
-msgid "Disk usage by BOINC projects"
-msgstr ""
-
-#: clientgui/ViewResources.cpp:116
-msgid "Disk"
-msgstr ""
-
-#: clientgui/ViewResources.cpp:249
-msgid "no projects: 0 bytes used"
-msgstr ""
-
-#: clientgui/ViewResources.cpp:286
-msgid "used by BOINC: "
-msgstr ""
-
-#: clientgui/ViewResources.cpp:296
-msgid "free, available to BOINC: "
-msgstr ""
-
-#: clientgui/ViewResources.cpp:306
-msgid "free, not available to BOINC: "
-msgstr ""
-
-#: clientgui/ViewResources.cpp:316
-msgid "free: "
-msgstr ""
-
-#: clientgui/ViewResources.cpp:326
-msgid "used by other programs: "
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1195
-msgid "User Total"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1196
-msgid "User Average"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1197
-msgid "Host Total"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1198
-msgid "Host Average"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1345
-#, c-format
-msgid "Last update: %.0f days ago"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1969
-msgid "Show user total"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1970
-msgid "Show total credit for user"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1976
-msgid "Show user average"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1977
-msgid "Show average credit for user"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1983
-msgid "Show host total"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1984
-msgid "Show total credit for host"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1990
-msgid "Show host average"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:1991
-msgid "Show average credit for host"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2000
-msgid "< &Previous project"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2001
-msgid "Show chart for previous project"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2006
-msgid "&Next project >"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2007
-msgid "Show chart for next project"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2013
-#: clientgui/ViewStatistics.cpp:2410
-msgid "Hide project list"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2014
-#: clientgui/ViewStatistics.cpp:2410
-msgid "Use entire area for graphs"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2019
-msgid "Mode view"
-msgstr ""
-
-#: clientgui/ViewStatistics.cpp:2023
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2024
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2031
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2037
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2038
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2044
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2045
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2073
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2097
-#: clientgui/ViewStatistics.cpp:2118
-#: clientgui/ViewStatistics.cpp:2139
-#: clientgui/ViewStatistics.cpp:2161
-#: clientgui/ViewStatistics.cpp:2182
-#: clientgui/ViewStatistics.cpp:2203
-#: clientgui/ViewStatistics.cpp:2224
-#: clientgui/ViewStatistics.cpp:2245
-#: clientgui/ViewStatistics.cpp:2266
-#: clientgui/ViewStatistics.cpp:2290
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr ""
-#: clientgui/ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr ""
-#: clientgui/ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr ""
-#: clientgui/ViewTransfers.cpp:163
+#: ViewTransfers.cpp:164
msgid "Retry Now"
msgstr ""
-#: clientgui/ViewTransfers.cpp:164
+#: ViewTransfers.cpp:165
msgid "Retry the file transfer now"
msgstr ""
-#: clientgui/ViewTransfers.cpp:170
+#: ViewTransfers.cpp:171
msgid "Abort Transfer"
msgstr ""
-#: clientgui/ViewTransfers.cpp:171
+#: ViewTransfers.cpp:172
msgid "Abort this file transfer. You won't get credit for the task."
msgstr ""
-#: clientgui/ViewTransfers.cpp:182
+#: ViewTransfers.cpp:183
msgid "File"
msgstr ""
-#: clientgui/ViewTransfers.cpp:183
-#: clientgui/ViewWork.cpp:232
+#: ViewTransfers.cpp:184 ViewWork.cpp:233
msgid "Progress"
msgstr ""
-#: clientgui/ViewTransfers.cpp:184
+#: ViewTransfers.cpp:185
msgid "Size"
msgstr ""
-#: clientgui/ViewTransfers.cpp:185
+#: ViewTransfers.cpp:186
msgid "Elapsed Time"
msgstr ""
-#: clientgui/ViewTransfers.cpp:186
+#: ViewTransfers.cpp:187
msgid "Speed"
msgstr ""
-#: clientgui/ViewTransfers.cpp:212
+#: ViewTransfers.cpp:213
msgid "Transfers"
msgstr ""
-#: clientgui/ViewTransfers.cpp:279
+#: ViewTransfers.cpp:280
msgid "Network activity is suspended - "
msgstr ""
-#: clientgui/ViewTransfers.cpp:281
+#: ViewTransfers.cpp:282
msgid ""
".\n"
"You can enable it using the Activity menu."
msgstr ""
-#: clientgui/ViewTransfers.cpp:284
+#: ViewTransfers.cpp:285
msgid "BOINC"
msgstr ""
-#: clientgui/ViewTransfers.cpp:291
+#: ViewTransfers.cpp:292
msgid "Retrying transfer now..."
msgstr ""
-#: clientgui/ViewTransfers.cpp:329
+#: ViewTransfers.cpp:330
msgid "Aborting transfer..."
msgstr ""
-#: clientgui/ViewTransfers.cpp:342
+#: ViewTransfers.cpp:343
#, c-format
msgid ""
"Are you sure you want to abort this file transfer '%s'?\n"
@@ -3770,137 +3115,159 @@ msgid ""
"will not receive credit for it."
msgstr ""
-#: clientgui/ViewTransfers.cpp:348
+#: ViewTransfers.cpp:349
msgid "Abort File Transfer"
msgstr ""
-#: clientgui/ViewTransfers.cpp:769
+#: ViewTransfers.cpp:780
msgid "Upload"
msgstr ""
-#: clientgui/ViewTransfers.cpp:769
+#: ViewTransfers.cpp:780
msgid "Download"
msgstr ""
-#: clientgui/ViewTransfers.cpp:773
+#: ViewTransfers.cpp:784
msgid "retry in "
msgstr ""
-#: clientgui/ViewTransfers.cpp:775
+#: ViewTransfers.cpp:786
msgid "failed"
msgstr ""
-#: clientgui/ViewTransfers.cpp:778
+#: ViewTransfers.cpp:789
msgid "suspended"
msgstr ""
-#: clientgui/ViewTransfers.cpp:783
+#: ViewTransfers.cpp:794
msgid "active"
msgstr ""
-#: clientgui/ViewTransfers.cpp:785
+#: ViewTransfers.cpp:796
msgid "pending"
msgstr ""
-#: clientgui/ViewTransfers.cpp:792
+#: ViewTransfers.cpp:803
msgid " (project backoff: "
msgstr ""
-#: clientgui/ViewWork.cpp:186
-#: clientgui/ViewWork.cpp:766
+#: ViewWork.cpp:187 ViewWork.cpp:777
msgid "Show active tasks"
msgstr ""
-#: clientgui/ViewWork.cpp:187
-#: clientgui/ViewWork.cpp:767
+#: ViewWork.cpp:188 ViewWork.cpp:778
msgid "Show only active tasks."
msgstr ""
-#: clientgui/ViewWork.cpp:200
+#: ViewWork.cpp:194 sg_TaskCommandPopup.cpp:60
+msgid "Show graphics"
+msgstr ""
+
+#: ViewWork.cpp:195 sg_TaskCommandPopup.cpp:61
+msgid "Show application graphics in a window."
+msgstr ""
+
+#: ViewWork.cpp:201
msgid "Show VM Console"
msgstr ""
-#: clientgui/ViewWork.cpp:201
+#: ViewWork.cpp:202
msgid "Show VM Console in a window."
msgstr ""
-#: clientgui/ViewWork.cpp:208
+#: ViewWork.cpp:209
msgid "Suspend work for this result."
msgstr ""
-#: clientgui/ViewWork.cpp:215
+#: ViewWork.cpp:215 sg_TaskCommandPopup.cpp:72
+msgid "Abort"
+msgstr ""
+
+#: ViewWork.cpp:216
msgid "Abandon work on the result. You will get no credit for it."
msgstr ""
-#: clientgui/ViewWork.cpp:234
+#: ViewWork.cpp:223 sg_TaskCommandPopup.cpp:79
+msgid "Show task details."
+msgstr ""
+
+#: ViewWork.cpp:235
msgid "Elapsed"
msgstr ""
-#: clientgui/ViewWork.cpp:235
+#: ViewWork.cpp:236
msgid "Remaining (estimated)"
msgstr ""
-#: clientgui/ViewWork.cpp:236
+#: ViewWork.cpp:237
msgid "Deadline"
msgstr ""
-#: clientgui/ViewWork.cpp:238
-msgid "Name"
-msgstr ""
-
-#: clientgui/ViewWork.cpp:263
+#: ViewWork.cpp:264
msgid "Tasks"
msgstr ""
-#: clientgui/ViewWork.cpp:356
+#: ViewWork.cpp:357
msgid "Resuming task..."
msgstr ""
-#: clientgui/ViewWork.cpp:359
+#: ViewWork.cpp:360
msgid "Suspending task..."
msgstr ""
-#: clientgui/ViewWork.cpp:388
+#: ViewWork.cpp:389
msgid "Showing graphics for task..."
msgstr ""
-#: clientgui/ViewWork.cpp:425
+#: ViewWork.cpp:426
msgid "Showing VM console for task..."
msgstr ""
-#: clientgui/ViewWork.cpp:478
+#: ViewWork.cpp:479
#, c-format
msgid ""
"Are you sure you want to abort this task '%s'?\n"
"(Progress: %s, Status: %s)"
msgstr ""
-#: clientgui/ViewWork.cpp:484
+#: ViewWork.cpp:485
#, c-format
msgid "Are you sure you want to abort these %d tasks?"
msgstr ""
-#: clientgui/ViewWork.cpp:498
+#: ViewWork.cpp:490 sg_TaskCommandPopup.cpp:256
+msgid "Abort task"
+msgstr ""
+
+#: ViewWork.cpp:499
msgid "Aborting task..."
msgstr ""
-#: clientgui/ViewWork.cpp:760
+#: ViewWork.cpp:771
msgid "Show all tasks"
msgstr ""
-#: clientgui/ViewWork.cpp:761
+#: ViewWork.cpp:772
msgid "Show all tasks."
msgstr ""
-#: clientgui/WelcomePage.cpp:284
+#: ViewWork.cpp:796 sg_TaskCommandPopup.cpp:103
+msgid "Resume work for this task."
+msgstr ""
+
+#: ViewWork.cpp:802 sg_TaskCommandPopup.cpp:107
+msgid "Suspend work for this task."
+msgstr ""
+
+#: WelcomePage.cpp:284
msgid "Add project or account manager"
msgstr ""
-#: clientgui/WelcomePage.cpp:288
+#: WelcomePage.cpp:288
msgid "Add project or use BOINC Account Manager"
msgstr ""
-#: clientgui/WelcomePage.cpp:297
+#: WelcomePage.cpp:297
#, c-format
msgid ""
"If possible, add projects at the\n"
@@ -3910,7 +3277,7 @@ msgid ""
"listed on or managed via %s."
msgstr ""
-#: clientgui/WelcomePage.cpp:313
+#: WelcomePage.cpp:313
msgid ""
"There are over 30 BOINC-based projects\n"
"doing research in many areas of science,\n"
@@ -3919,201 +3286,420 @@ msgid ""
"or use an 'Account Manager' web site to select projects."
msgstr ""
-#: clientgui/WelcomePage.cpp:325
+#: WelcomePage.cpp:325
msgid ""
-"You have chosen to add a new volunteer computing project or change which projects\n"
+"You have chosen to add a new volunteer computing project or change which "
+"projects\n"
"you contribute to.\n"
"\n"
-"Some of these projects are run and managed by World Community Grid, while others\n"
-"are run and managed by other researchers or organizations. The BOINC software\n"
+"Some of these projects are run and managed by World Community Grid, while "
+"others\n"
+"are run and managed by other researchers or organizations. The BOINC "
+"software\n"
"can divide your spare processing power among any combination of projects.\n"
"\n"
-"Alternatively, if you have registered with a BOINC Account Manager, you can use\n"
+"Alternatively, if you have registered with a BOINC Account Manager, you can "
+"use\n"
"this to choose which projects to support.\n"
"\n"
"Please choose which type of change you would like to make:\n"
msgstr ""
-#: clientgui/WelcomePage.cpp:339
+#: WelcomePage.cpp:339
msgid "Use a BOINC Account Manager"
msgstr ""
-#: clientgui/WelcomePage.cpp:352
+#: WelcomePage.cpp:352
msgid "To continue, click Next."
msgstr ""
-#: clientgui/WelcomePage.cpp:358
+#: WelcomePage.cpp:358
msgid "Add or change your World Community Grid projects"
msgstr ""
-#: clientgui/WelcomePage.cpp:361
+#: WelcomePage.cpp:361
msgid "Add projects run by other researchers or organizations"
msgstr ""
-#: clientgui/WizardAttach.cpp:634
+#: WizardAttach.cpp:634
msgid "Do you really want to cancel?"
msgstr ""
-#: clientgui/WizardAttach.cpp:635
+#: WizardAttach.cpp:635
msgid "Question"
msgstr ""
-#: clientgui/wizardex.cpp:377
-#: clientgui/wizardex.cpp:553
-msgid "&Next >"
+#: sg_BoincSimpleFrame.cpp:149
+msgid "Advanced View...\tCtrl+Shift+A"
msgstr ""
-#: clientgui/wizardex.cpp:383
-msgid "< &Back"
+#: sg_BoincSimpleFrame.cpp:150
+msgid "Display the advanced graphical interface."
msgstr ""
-#: clientgui/wizardex.cpp:553
-msgid "&Finish"
+#: sg_BoincSimpleFrame.cpp:157
+msgid "Skin"
msgstr ""
-#: clientgui/common/wxFlatNotebook.cpp:182
-#, c-format
-msgid "New page inserted. Index = %i"
+#: sg_BoincSimpleFrame.cpp:159
+msgid "Select the appearance of the user interface."
msgstr ""
-#: clientgui/common/wxFlatNotebook.cpp:187
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
-msgid "New page appended. Index = %i"
+msgid "&%s"
msgstr ""
-#: clientgui/common/wxFlatNotebook.cpp:2047
-#, c-format
-msgid "Old Page Index = %i"
+#: sg_BoincSimpleFrame.cpp:390
+msgid "Default"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:759
+msgid "Suspend Computing"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:760
+msgid "Resume Computing"
+msgstr ""
+
+#: sg_BoincSimpleFrame.cpp:777
+msgid "Open a window to view notices from projects or BOINC"
+msgstr ""
+
+#: sg_DlgMessages.cpp:146
+msgid "Close"
msgstr ""
-#: clientgui/common/wxFlatNotebook.cpp:2052
+#: sg_DlgMessages.cpp:389
#, c-format
-msgid "OnDropTarget: index by HitTest = %i"
+msgid "%s - Notices"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:268
+msgid "This dialog controls preferences for this computer only."
+msgstr ""
+
+#: sg_DlgPreferences.cpp:273
+msgid "Click OK to set preferences."
msgstr ""
-#: clientgui/common/wxPieCtrl.cpp:63
-msgid "Pie Ctrl"
+#: sg_DlgPreferences.cpp:278
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:257
-msgid "for accessibility support, please select advanced from the view menu or type command shift a"
+#: sg_DlgPreferences.cpp:285
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:302
-msgid "This panel contains graphs showing user totals for projects"
+#: sg_DlgPreferences.cpp:313
+msgid "Do work only between:"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:726
-msgid "list headers"
+#: sg_DlgPreferences.cpp:335
+msgid "Connect to internet only between:"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:732
-msgid "list of events"
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
+msgid "Use no more than:"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:734
-msgid "list of events is empty"
+#: sg_DlgPreferences.cpp:370
+msgid "of disk space"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:739
-#, c-format
-msgid "list of %s"
+#: sg_DlgPreferences.cpp:387
+msgid "of the processor"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:391
+msgid "Do work while on battery?"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:404
+msgid "Do work after idle for:"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
+msgid "Anytime"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:638
+msgid "100 MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:639
+msgid "200 MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:640
+msgid "500 MB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:641
+msgid "1 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:642
+msgid "2 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:643
+msgid "5 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:644
+msgid "10 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:645
+msgid "20 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:646
+msgid "50 GB"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:647
+msgid "100 GB"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:741
+#: sg_DlgPreferences.cpp:717
#, c-format
-msgid "list of %s is empty"
+msgid "%d MB"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:843
+#: sg_DlgPreferences.cpp:719
#, c-format
-msgid "; current sort column %d of %d; descending order; "
+msgid "%4.2f GB"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:845
+#: sg_DlgPreferences.cpp:760
#, c-format
-msgid "; current sort column %d of %d; ascending order; "
+msgid "%d%%"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:796
+msgid "0 (Run Always)"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:848
+#: sg_DlgPreferences.cpp:799
#, c-format
-msgid "; column %d of %d; "
+msgid "%d"
+msgstr ""
+
+#: sg_DlgPreferences.cpp:1029
+msgid "Do you really want to clear all local preferences?\n"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:72
+msgid "Add Project"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:73
+msgid "Synchronize"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:74
+msgid "Work done for this project"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:77
+msgid "Synchronize projects with account manager system"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:124
+msgid "Select a project to access with the controls below"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:145
+msgid "Project Web Pages"
+msgstr ""
+
+#: sg_ProjectPanel.cpp:149
+msgid "Project Commands"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:855
-msgid "list is empty"
+#: sg_ProjectPanel.cpp:267
+#, c-format
+msgid "Pop up a menu of web sites for project %s"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:858
-#: clientgui/mac/MacAccessiblity.cpp:870
+#: sg_ProjectPanel.cpp:269
#, c-format
-msgid "; row %d; "
+msgid "Pop up a menu of commands to apply to project %s"
+msgstr ""
+
+#: sg_TaskCommandPopup.cpp:67
+msgid "Suspend this task."
+msgstr ""
+
+#: sg_TaskCommandPopup.cpp:73
+msgid "Abandon this task. You will get no credit for it."
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:862
+#: sg_TaskCommandPopup.cpp:251
#, c-format
-msgid "; selected row %d of %d; "
+msgid ""
+"Are you sure you want to abort this task '%s'?\n"
+"(Progress: %.1lf%%, Status: %s)"
+msgstr ""
+
+#: sg_TaskPanel.cpp:464
+msgid "You don't have any projects. Please Add a Project."
+msgstr ""
+
+#: sg_TaskPanel.cpp:465
+msgid "Not available"
+msgstr ""
+
+#: sg_TaskPanel.cpp:476
+msgid "Tasks:"
+msgstr ""
+
+#: sg_TaskPanel.cpp:482
+msgid "Select a task to access"
+msgstr ""
+
+#: sg_TaskPanel.cpp:493
+msgid "From:"
+msgstr ""
+
+#: sg_TaskPanel.cpp:547
+msgid "This task's progress"
+msgstr ""
+
+#: sg_TaskPanel.cpp:565
+msgid "Task Commands"
+msgstr ""
+
+#: sg_TaskPanel.cpp:566
+msgid "Pop up a menu of commands to apply to this task"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:864
+#: sg_TaskPanel.cpp:701
#, c-format
-msgid "; selected row %d ; "
+msgid "Application: %s"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:868
+#: sg_TaskPanel.cpp:724
#, c-format
-msgid "; row %d of %d; "
+msgid "%.3f%%"
+msgstr ""
+
+#: sg_TaskPanel.cpp:732
+msgid "Application: Not available"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:881
-msgid "blank"
+#: sg_TaskPanel.cpp:832
+msgid "Not Available"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:1523
-msgid "list of projects or account managers"
+#: sg_TaskPanel.cpp:847
+#, c-format
+msgid "Elapsed: %s"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:1575
+#: sg_TaskPanel.cpp:861
#, c-format
-msgid "selected row %d of %d; "
+msgid "Remaining (estimated): %s"
msgstr ""
-#: clientgui/mac/MacAccessiblity.cpp:1577
+#: sg_TaskPanel.cpp:876
#, c-format
-msgid "row %d of %d; "
+msgid "Status: %s"
+msgstr ""
+
+#: sg_TaskPanel.cpp:1223
+msgid "Retrieving current status."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1229
+msgid "Downloading work from the server."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1234
+msgid "Processing Suspended: Running On Batteries."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1236
+msgid "Processing Suspended: User Active."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1238
+msgid "Processing Suspended: User paused processing."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1240
+msgid "Processing Suspended: Time of Day."
msgstr ""
-#: clientgui/mac/Mac_GUI.cpp:109
+#: sg_TaskPanel.cpp:1242
+msgid "Processing Suspended: Benchmarks Running."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1244
+msgid "Processing Suspended."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1248
+msgid "Waiting to contact project servers."
+msgstr ""
+
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
+msgid "Retrieving current status"
+msgstr ""
+
+#: sg_TaskPanel.cpp:1256
+msgid "No work available to process"
+msgstr ""
+
+#: sg_TaskPanel.cpp:1258
+msgid "Unable to connect to the core client"
+msgstr ""
+
+#: wizardex.cpp:377 wizardex.cpp:553
+msgid "&Next >"
+msgstr ""
+
+#: wizardex.cpp:383
+msgid "< &Back"
+msgstr ""
+
+#: wizardex.cpp:553
+msgid "&Finish"
+msgstr ""
+
+#: mac/Mac_GUI.cpp:110
msgid "Preferences…"
msgstr ""
-#: clientgui/mac/Mac_GUI.cpp:121
+#: mac/Mac_GUI.cpp:122
msgid "Services"
msgstr ""
-#: clientgui/mac/Mac_GUI.cpp:143
+#: mac/Mac_GUI.cpp:144
#, c-format
msgid "Hide %s"
msgstr ""
-#: clientgui/mac/Mac_GUI.cpp:157
+#: mac/Mac_GUI.cpp:158
msgid "Hide Others"
msgstr ""
-#: clientgui/mac/Mac_GUI.cpp:171
+#: mac/Mac_GUI.cpp:172
msgid "Show All"
msgstr ""
-#: clientgui/mac/Mac_GUI.cpp:185
+#: mac/Mac_GUI.cpp:186
#, c-format
msgid "Quit %s"
msgstr ""
-
-#: clientgui/DlgAdvPreferences.h:30
-msgid "specify work start and stop hours in format HH:MM-HH:MM"
-msgstr ""
-
-#: clientgui/DlgAdvPreferences.h:31
-msgid "specify network usage start and stop hours in format HH:MM-HH:MM"
-msgstr ""
-
diff --git a/locale/templates/BOINC-Project-Generic.pot b/locale/templates/BOINC-Project-Generic.pot
index 1524e2c..07fb363 100644
--- a/locale/templates/BOINC-Project-Generic.pot
+++ b/locale/templates/BOINC-Project-Generic.pot
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC $Id$\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2012-11-13 16:40 PST\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
"Last-Translator: Generated automatically from source files\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -68,7 +68,7 @@ msgid ""
"Font color: [color=red]text[/color] Tip: you can also use color=#FF0000"
msgstr ""
-#: ../inc/bbcode_html.inc:44 ../inc/bbcode_html.inc:59 ../inc/prefs.inc:624
+#: ../inc/bbcode_html.inc:44 ../inc/bbcode_html.inc:59 ../inc/prefs.inc:638
msgid "Default"
msgstr ""
@@ -189,14 +189,15 @@ msgstr ""
msgid "Private messages"
msgstr ""
-#: ../inc/forum.inc:151 ../user/forum_forum.php:71
-#: ../user/sample_index.php:119
+#: ../inc/forum.inc:151 ../user/bs_sample_index.php:63
+#: ../user/forum_forum.php:71 ../user/sample_index.php:130
msgid "Questions and Answers"
msgstr ""
#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
-#: ../inc/user.inc:375 ../user/forum_forum.php:73 ../user/sample_index.php:118
-#: ../project.sample/project.inc:47
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
+#: ../user/forum_forum.php:73 ../user/sample_index.php:129
+#: ../project.sample/project.inc:43
msgid "Message boards"
msgstr ""
@@ -204,15 +205,15 @@ msgstr ""
msgid "%1 message board"
msgstr ""
-#: ../inc/forum.inc:245 ../inc/result.inc:681
+#: ../inc/forum.inc:245 ../inc/result.inc:695
msgid "Previous"
msgstr ""
-#: ../inc/forum.inc:283 ../inc/result.inc:690
+#: ../inc/forum.inc:283 ../inc/result.inc:704
msgid "Next"
msgstr ""
-#: ../inc/forum.inc:412 ../inc/forum.inc:1174 ../user/forum_forum.php:137
+#: ../inc/forum.inc:412 ../inc/forum.inc:1175 ../user/forum_forum.php:137
#: ../user/forum_reply.php:120 ../user/forum_report_post.php:76
msgid "Author"
msgstr ""
@@ -248,109 +249,109 @@ msgstr ""
msgid "RAC: %1"
msgstr ""
-#: ../inc/forum.inc:619
+#: ../inc/forum.inc:620
msgid "You haven't read this message yet"
msgstr ""
-#: ../inc/forum.inc:619
+#: ../inc/forum.inc:620
msgid "Unread"
msgstr ""
-#: ../inc/forum.inc:622 ../inc/forum.inc:627 ../inc/forum.inc:726
+#: ../inc/forum.inc:623 ../inc/forum.inc:628 ../inc/forum.inc:727
msgid "Message %1"
msgstr ""
-#: ../inc/forum.inc:623 ../inc/user.inc:329 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr ""
-#: ../inc/forum.inc:624
+#: ../inc/forum.inc:625
msgid "Posted: %1"
msgstr ""
-#: ../inc/forum.inc:627
+#: ../inc/forum.inc:628
msgid " - in response to "
msgstr ""
-#: ../inc/forum.inc:630 ../inc/prefs.inc:690 ../inc/prefs.inc:692
+#: ../inc/forum.inc:631 ../inc/prefs.inc:705 ../inc/prefs.inc:707
msgid "Edit"
msgstr ""
-#: ../inc/forum.inc:630
+#: ../inc/forum.inc:631
msgid "Edit this message"
msgstr ""
-#: ../inc/forum.inc:636
+#: ../inc/forum.inc:637
msgid "Last modified: %1"
msgstr ""
-#: ../inc/forum.inc:639
+#: ../inc/forum.inc:640
msgid ""
-"This post is not shown because the sender is on your 'ignore' list. Click "
-"%1here%2 to view this post"
+"This post is not shown because the sender is on your 'ignore' list. Click %"
+"1here%2 to view this post"
msgstr ""
-#: ../inc/forum.inc:667 ../inc/forum.inc:678
+#: ../inc/forum.inc:668 ../inc/forum.inc:679
msgid "Report this post as offensive"
msgstr ""
-#: ../inc/forum.inc:667 ../inc/forum.inc:678
+#: ../inc/forum.inc:668 ../inc/forum.inc:679
msgid "Report as offensive"
msgstr ""
-#: ../inc/forum.inc:671
+#: ../inc/forum.inc:672
msgid "Rating: %1"
msgstr ""
-#: ../inc/forum.inc:671
+#: ../inc/forum.inc:672
msgid "rate: "
msgstr ""
-#: ../inc/forum.inc:674
+#: ../inc/forum.inc:675
msgid "Click if you like this message"
msgstr ""
-#: ../inc/forum.inc:674
+#: ../inc/forum.inc:675
msgid "Rate +"
msgstr ""
-#: ../inc/forum.inc:676
+#: ../inc/forum.inc:677
msgid "Click if you don't like this message"
msgstr ""
-#: ../inc/forum.inc:676
+#: ../inc/forum.inc:677
msgid "Rate -"
msgstr ""
-#: ../inc/forum.inc:684 ../user/pm.php:106 ../user/pm.php:146
+#: ../inc/forum.inc:685 ../user/pm.php:106 ../user/pm.php:146
msgid "Reply"
msgstr ""
-#: ../inc/forum.inc:684
+#: ../inc/forum.inc:685
msgid "Post a reply to this message"
msgstr ""
-#: ../inc/forum.inc:686
+#: ../inc/forum.inc:687
msgid "Quote"
msgstr ""
-#: ../inc/forum.inc:686
+#: ../inc/forum.inc:687
msgid "Post a reply by quoting this message"
msgstr ""
-#: ../inc/forum.inc:707
+#: ../inc/forum.inc:708
msgid "Hidden by a moderator"
msgstr ""
-#: ../inc/forum.inc:728
+#: ../inc/forum.inc:729
msgid "Posted %1 by %2"
msgstr ""
-#: ../inc/forum.inc:746
+#: ../inc/forum.inc:747
msgid "You may not post or rate messages until %1"
msgstr ""
-#: ../inc/forum.inc:757
+#: ../inc/forum.inc:758
msgid ""
"\n"
" <ul>\n"
@@ -368,116 +369,116 @@ msgid ""
" "
msgstr ""
-#: ../inc/forum.inc:779
+#: ../inc/forum.inc:780
msgid "Rules:"
msgstr ""
-#: ../inc/forum.inc:780
+#: ../inc/forum.inc:781
msgid "More info"
msgstr ""
-#: ../inc/forum.inc:1054 ../user/forum_thread.php:187
+#: ../inc/forum.inc:1055 ../user/forum_thread.php:189
msgid "Unhide"
msgstr ""
-#: ../inc/forum.inc:1054
+#: ../inc/forum.inc:1055
msgid "Unhide this post"
msgstr ""
-#: ../inc/forum.inc:1056 ../user/forum_thread.php:193
+#: ../inc/forum.inc:1057 ../user/forum_thread.php:195
msgid "Hide"
msgstr ""
-#: ../inc/forum.inc:1056
+#: ../inc/forum.inc:1057
msgid "Hide this post"
msgstr ""
-#: ../inc/forum.inc:1061 ../user/forum_thread.php:226
+#: ../inc/forum.inc:1062 ../user/forum_thread.php:228
msgid "Move"
msgstr ""
-#: ../inc/forum.inc:1061
+#: ../inc/forum.inc:1062
msgid "Move post to a different thread"
msgstr ""
-#: ../inc/forum.inc:1066
+#: ../inc/forum.inc:1067
msgid "Banish author"
msgstr ""
-#: ../inc/forum.inc:1073
+#: ../inc/forum.inc:1074
msgid "Vote to banish author"
msgstr ""
-#: ../inc/forum.inc:1077
+#: ../inc/forum.inc:1078
msgid "Vote not to banish author"
msgstr ""
-#: ../inc/forum.inc:1082
+#: ../inc/forum.inc:1083
msgid "Start vote to banish author"
msgstr ""
-#: ../inc/forum.inc:1115
+#: ../inc/forum.inc:1116
msgid "Only team members can post to the team message board"
msgstr ""
-#: ../inc/forum.inc:1125
+#: ../inc/forum.inc:1126
msgid ""
"In order to create a new thread in %1 you must have a certain amount of "
"credit. This is to prevent and protect against abuse of the system."
msgstr ""
-#: ../inc/forum.inc:1132
+#: ../inc/forum.inc:1133
msgid ""
"You cannot create any more threads right now. Please wait a while before "
"trying again. This delay has been enforced to protect against abuse of the "
"system."
msgstr ""
-#: ../inc/forum.inc:1139
+#: ../inc/forum.inc:1140
msgid ""
"This thread is locked. Only forum moderators and administrators are allowed "
"to post there."
msgstr ""
-#: ../inc/forum.inc:1144
+#: ../inc/forum.inc:1145
msgid "Can't post to a hidden thread."
msgstr ""
-#: ../inc/forum.inc:1172
+#: ../inc/forum.inc:1173
msgid "Thread"
msgstr ""
-#: ../inc/forum.inc:1173 ../inc/team.inc:120 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr ""
-#: ../inc/forum.inc:1175 ../user/forum_forum.php:138
+#: ../inc/forum.inc:1176 ../user/forum_forum.php:138
msgid "Views"
msgstr ""
-#: ../inc/forum.inc:1176 ../inc/team.inc:120 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr ""
-#: ../inc/forum.inc:1234
+#: ../inc/forum.inc:1235
msgid "New posts in the thread %1"
msgstr ""
-#: ../inc/forum.inc:1239
+#: ../inc/forum.inc:1240
msgid "New posts in subscribed thread"
msgstr ""
-#: ../inc/forum.inc:1240
+#: ../inc/forum.inc:1241
msgid "There are new posts in the thread '%1'"
msgstr ""
-#: ../inc/forum.inc:1250
+#: ../inc/forum.inc:1251
msgid "Mark all threads as read"
msgstr ""
-#: ../inc/forum.inc:1251
+#: ../inc/forum.inc:1252
msgid "Mark all threads in all message boards as read."
msgstr ""
@@ -489,81 +490,80 @@ msgstr ""
msgid "Unavailable"
msgstr ""
-#: ../inc/host.inc:55 ../inc/prefs.inc:625 ../inc/prefs.inc:1030
+#: ../inc/host.inc:56 ../inc/prefs.inc:639 ../inc/prefs.inc:1048
msgid "Home"
msgstr ""
-#: ../inc/host.inc:56 ../inc/prefs.inc:627 ../inc/prefs.inc:1031
-#: ../user/server_status.php:319
+#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
+#: ../user/server_status.php:314
msgid "Work"
msgstr ""
-#: ../inc/host.inc:57 ../inc/prefs.inc:626 ../inc/prefs.inc:1032
+#: ../inc/host.inc:58 ../inc/prefs.inc:640 ../inc/prefs.inc:1050
msgid "School"
msgstr ""
-#: ../inc/host.inc:59 ../user/edit_forum_preferences_form.php:172
+#: ../inc/host.inc:59
+msgid "Mobile"
+msgstr ""
+
+#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
msgid "Update"
msgstr ""
-#: ../inc/host.inc:83
+#: ../inc/host.inc:85
msgid "Computer information"
msgstr ""
-#: ../inc/host.inc:87 ../inc/host.inc:92
+#: ../inc/host.inc:89 ../inc/host.inc:94
msgid "IP address"
msgstr ""
-#: ../inc/host.inc:87
+#: ../inc/host.inc:89
msgid "(same the last %1 times)"
msgstr ""
-#: ../inc/host.inc:89
+#: ../inc/host.inc:91
msgid "External IP address"
msgstr ""
-#: ../inc/host.inc:92
+#: ../inc/host.inc:94
msgid "Show IP address"
msgstr ""
-#: ../inc/host.inc:94
+#: ../inc/host.inc:96
msgid "Domain name"
msgstr ""
-#: ../inc/host.inc:97
-msgid "Local Standard Time"
+#: ../inc/host.inc:98
+msgid "Product name"
msgstr ""
-#: ../inc/host.inc:97
-msgid "UTC %1 hours"
+#: ../inc/host.inc:102
+msgid "Local Standard Time"
msgstr ""
-#: ../inc/host.inc:98 ../inc/host.inc:645 ../inc/result.inc:614
-#: ../inc/team.inc:202 ../inc/team.inc:350 ../inc/user.inc:200
-#: ../user/account_finish.php:41 ../user/create_account_form.php:87
-#: ../user/team_admins.php:62 ../user/team_change_founder_form.php:77
-#: ../user/team_email_list.php:64 ../user/top_users.php:49
-#: ../user/user_search.php:139
-msgid "Name"
+#: ../inc/host.inc:102
+msgid "UTC %1 hours"
msgstr ""
-#: ../inc/host.inc:102 ../inc/host.inc:104 ../inc/host.inc:216
+#: ../inc/host.inc:106 ../inc/host.inc:108 ../inc/host.inc:222
msgid "Owner"
msgstr ""
-#: ../inc/host.inc:104 ../inc/host.inc:333
+#: ../inc/host.inc:108 ../inc/host.inc:355
msgid "Anonymous"
msgstr ""
-#: ../inc/host.inc:108 ../inc/result.inc:616
+#: ../inc/host.inc:112 ../inc/result.inc:630
msgid "Created"
msgstr ""
-#: ../inc/host.inc:109 ../inc/host.inc:220 ../inc/host.inc:225
-#: ../inc/host.inc:654 ../inc/team.inc:94 ../inc/team.inc:207
-#: ../inc/team.inc:212 ../inc/team.inc:214 ../inc/team.inc:356
-#: ../inc/team.inc:361 ../inc/user.inc:122 ../inc/user.inc:136
+#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -571,281 +571,293 @@ msgstr ""
msgid "Total credit"
msgstr ""
-#: ../inc/host.inc:110 ../inc/user.inc:122 ../user/team_search.php:70
+#: ../inc/host.inc:114 ../inc/user.inc:125 ../user/team_search.php:70
#: ../user/user_search.php:139
msgid "Average credit"
msgstr ""
-#: ../inc/host.inc:112
+#: ../inc/host.inc:116
msgid "Cross project credit"
msgstr ""
-#: ../inc/host.inc:114
+#: ../inc/host.inc:118
msgid "CPU type"
msgstr ""
-#: ../inc/host.inc:115
+#: ../inc/host.inc:119
msgid "Number of processors"
msgstr ""
-#: ../inc/host.inc:117
+#: ../inc/host.inc:121
msgid "Coprocessors"
msgstr ""
-#: ../inc/host.inc:119 ../inc/host.inc:660
+#: ../inc/host.inc:123 ../inc/host.inc:687
msgid "Operating System"
msgstr ""
-#: ../inc/host.inc:122 ../inc/host.inc:229
+#: ../inc/host.inc:126 ../inc/host.inc:235
msgid "BOINC version"
msgstr ""
-#: ../inc/host.inc:126
+#: ../inc/host.inc:130
msgid "Memory"
msgstr ""
-#: ../inc/host.inc:126 ../inc/host.inc:134
+#: ../inc/host.inc:130 ../inc/host.inc:140
msgid "%1 MB"
msgstr ""
-#: ../inc/host.inc:129
+#: ../inc/host.inc:134
msgid "Cache"
msgstr ""
-#: ../inc/host.inc:129
+#: ../inc/host.inc:134
msgid "%1 KB"
msgstr ""
-#: ../inc/host.inc:134
+#: ../inc/host.inc:140
msgid "Swap space"
msgstr ""
-#: ../inc/host.inc:137
+#: ../inc/host.inc:143
msgid "Total disk space"
msgstr ""
-#: ../inc/host.inc:137 ../inc/host.inc:140
+#: ../inc/host.inc:143 ../inc/host.inc:146
msgid "%1 GB"
msgstr ""
-#: ../inc/host.inc:140
+#: ../inc/host.inc:146
msgid "Free Disk Space"
msgstr ""
-#: ../inc/host.inc:144
+#: ../inc/host.inc:150
msgid "Measured floating point speed"
msgstr ""
-#: ../inc/host.inc:144 ../inc/host.inc:147
+#: ../inc/host.inc:150 ../inc/host.inc:153
msgid "%1 million ops/sec"
msgstr ""
-#: ../inc/host.inc:147
+#: ../inc/host.inc:153
msgid "Measured integer speed"
msgstr ""
-#: ../inc/host.inc:151 ../inc/host.inc:153
+#: ../inc/host.inc:157 ../inc/host.inc:159
msgid "Average upload rate"
msgstr ""
-#: ../inc/host.inc:151 ../inc/host.inc:158
+#: ../inc/host.inc:157 ../inc/host.inc:164
msgid "%1 KB/sec"
msgstr ""
-#: ../inc/host.inc:153 ../inc/host.inc:160 ../inc/result.inc:207
-#: ../inc/result.inc:217 ../inc/result.inc:235 ../inc/result.inc:253
-#: ../inc/result.inc:269 ../user/explain_state.php:56
-#: ../user/host_app_versions.php:29
+#: ../inc/host.inc:159 ../inc/host.inc:166 ../inc/result.inc:216
+#: ../inc/result.inc:226 ../inc/result.inc:244 ../inc/result.inc:262
+#: ../inc/result.inc:278 ../user/explain_state.php:56
+#: ../user/host_app_versions.php:30
msgid "Unknown"
msgstr ""
-#: ../inc/host.inc:158 ../inc/host.inc:160
+#: ../inc/host.inc:164 ../inc/host.inc:166
msgid "Average download rate"
msgstr ""
-#: ../inc/host.inc:163 ../user/host_app_versions.php:64
+#: ../inc/host.inc:169 ../user/host_app_versions.php:65
msgid "Average turnaround time"
msgstr ""
-#: ../inc/host.inc:163 ../user/forum_search.php:46 ../user/forum_search.php:47
+#: ../inc/host.inc:169 ../user/forum_search.php:46 ../user/forum_search.php:47
#: ../user/forum_search.php:48 ../user/forum_search.php:49
msgid "%1 days"
msgstr ""
-#: ../inc/host.inc:164
+#: ../inc/host.inc:170
msgid "Application details"
msgstr ""
-#: ../inc/host.inc:165
+#: ../inc/host.inc:171
msgid "Show"
msgstr ""
-#: ../inc/host.inc:175 ../inc/host.inc:317 ../inc/user.inc:153
+#: ../inc/host.inc:181 ../inc/host.inc:336 ../inc/user.inc:152
msgid "Tasks"
msgstr ""
-#: ../inc/host.inc:179 ../inc/host.inc:200
+#: ../inc/host.inc:185 ../inc/host.inc:206
msgid "Number of times client has contacted server"
msgstr ""
-#: ../inc/host.inc:180
+#: ../inc/host.inc:186
msgid "Last time contacted server"
msgstr ""
-#: ../inc/host.inc:181
+#: ../inc/host.inc:187
#, php-format
msgid "% of time BOINC is running"
msgstr ""
-#: ../inc/host.inc:183
+#: ../inc/host.inc:189
#, php-format
msgid "While BOINC running, % of time host has an Internet connection"
msgstr ""
-#: ../inc/host.inc:185
+#: ../inc/host.inc:191
#, php-format
msgid "While BOINC running, % of time work is allowed"
msgstr ""
-#: ../inc/host.inc:187
+#: ../inc/host.inc:193
msgid "Average CPU efficiency"
msgstr ""
-#: ../inc/host.inc:190
+#: ../inc/host.inc:196
msgid "Task duration correction factor"
msgstr ""
-#: ../inc/host.inc:192 ../inc/host.inc:647
+#: ../inc/host.inc:198 ../inc/host.inc:674
msgid "Location"
msgstr ""
-#: ../inc/host.inc:194
+#: ../inc/host.inc:200
msgid "Delete this computer"
msgstr ""
-#: ../inc/host.inc:198
+#: ../inc/host.inc:204
msgid "Merge duplicate records of this computer"
msgstr ""
-#: ../inc/host.inc:198
+#: ../inc/host.inc:204
msgid "Merge"
msgstr ""
-#: ../inc/host.inc:201 ../inc/host.inc:662
+#: ../inc/host.inc:207 ../inc/host.inc:689
msgid "Last contact"
msgstr ""
-#: ../inc/host.inc:214
+#: ../inc/host.inc:220
msgid "Computer info"
msgstr ""
-#: ../inc/host.inc:215 ../inc/host.inc:649 ../inc/team.inc:349
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr ""
-#: ../inc/host.inc:219 ../inc/host.inc:652
+#: ../inc/host.inc:225 ../inc/host.inc:679
msgid "Avg. credit"
msgstr ""
-#: ../inc/host.inc:224 ../inc/team.inc:95 ../inc/team.inc:208
-#: ../inc/team.inc:217 ../inc/team.inc:219 ../inc/team.inc:355
-#: ../inc/team.inc:360 ../inc/user.inc:137
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
msgid "Recent average credit"
msgstr ""
-#: ../inc/host.inc:230 ../inc/host.inc:657 ../inc/result.inc:47
+#: ../inc/host.inc:236 ../inc/host.inc:684 ../inc/result.inc:51
#: ../user/host_app_versions.php:25
msgid "CPU"
msgstr ""
-#: ../inc/host.inc:231 ../inc/host.inc:658
+#: ../inc/host.inc:237 ../inc/host.inc:685
msgid "GPU"
msgstr ""
-#: ../inc/host.inc:232
+#: ../inc/host.inc:238
msgid "Operating system"
msgstr ""
-#: ../inc/host.inc:296
+#: ../inc/host.inc:315
msgid "(%1 processors)"
msgstr ""
-#: ../inc/host.inc:316
+#: ../inc/host.inc:335
msgid "Details"
msgstr ""
-#: ../inc/host.inc:321
+#: ../inc/host.inc:340
msgid "Cross-project stats:"
msgstr ""
-#: ../inc/host.inc:493
+#: ../inc/host.inc:515
msgid "Host %1 has overlapping lifetime:"
msgstr ""
-#: ../inc/host.inc:500
+#: ../inc/host.inc:522
msgid "Host %1 has an incompatible OS:"
msgstr ""
-#: ../inc/host.inc:506
+#: ../inc/host.inc:528
msgid "Host %1 has an incompatible CPU:"
msgstr ""
-#: ../inc/host.inc:573
+#: ../inc/host.inc:595
msgid "same host"
msgstr ""
-#: ../inc/host.inc:576
+#: ../inc/host.inc:598
msgid "Can't merge host %1 into %2 - they're incompatible"
msgstr ""
-#: ../inc/host.inc:579
+#: ../inc/host.inc:601
msgid "Merging host %1 into host %2"
msgstr ""
-#: ../inc/host.inc:596
+#: ../inc/host.inc:618
msgid "Couldn't update credit of new computer"
msgstr ""
-#: ../inc/host.inc:600
+#: ../inc/host.inc:622
msgid "Couldn't update results"
msgstr ""
-#: ../inc/host.inc:605
+#: ../inc/host.inc:627
msgid "Couldn't retire old computer"
msgstr ""
-#: ../inc/host.inc:607
+#: ../inc/host.inc:629
msgid "Retired old computer %1"
msgstr ""
-#: ../inc/host.inc:630 ../inc/host.inc:633
+#: ../inc/host.inc:652 ../inc/host.inc:655
msgid "Show:"
msgstr ""
-#: ../inc/host.inc:630 ../inc/host.inc:633
+#: ../inc/host.inc:652 ../inc/host.inc:655
msgid "All computers"
msgstr ""
-#: ../inc/host.inc:630 ../inc/host.inc:633
+#: ../inc/host.inc:652 ../inc/host.inc:655
msgid "Only computers active in past 30 days"
msgstr ""
-#: ../inc/host.inc:642 ../inc/result.inc:623
+#: ../inc/host.inc:666 ../inc/result.inc:637
msgid "Computer ID"
msgstr ""
-#: ../inc/host.inc:655
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../user/create_account_form.php:79 ../user/team_admins.php:62
+#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
+#: ../user/top_users.php:49 ../user/user_search.php:139
+msgid "Name"
+msgstr ""
+
+#: ../inc/host.inc:682
msgid "BOINC<br>version"
msgstr ""
-#: ../inc/host.inc:711 ../user/merge_by_name.php:67
+#: ../inc/host.inc:745 ../user/merge_by_name.php:65
msgid "Merge computers by name"
msgstr ""
+#: ../inc/language_names.inc:61
+msgid "Browser default"
+msgstr ""
+
#: ../inc/news.inc:40
msgid "Comment"
msgstr ""
@@ -868,7 +880,7 @@ msgid "Send private message"
msgstr ""
#: ../inc/pm.inc:35 ../inc/pm.inc:37 ../inc/pm.inc:89
-#: ../user/ffmail_form.php:59 ../user/forum_edit.php:99
+#: ../user/ffmail_form.php:58 ../user/forum_edit.php:99
#: ../user/forum_edit.php:101 ../user/forum_edit.php:145
#: ../user/forum_post.php:61 ../user/forum_post.php:87
#: ../user/forum_post.php:89 ../user/forum_post.php:130
@@ -927,176 +939,176 @@ msgstr ""
msgid "Private message"
msgstr ""
-#: ../inc/prefs.inc:76
+#: ../inc/prefs.inc:77
msgid ""
"Suspend work while computer is on battery power? %1 Matters only for "
"portable computers %2"
msgstr ""
-#: ../inc/prefs.inc:84
+#: ../inc/prefs.inc:85
msgid "Suspend work while computer is in use?"
msgstr ""
-#: ../inc/prefs.inc:90
+#: ../inc/prefs.inc:91
msgid ""
"Suspend GPU work while computer is in use? %1 Enforced by version 6.6.21+ %2"
msgstr ""
-#: ../inc/prefs.inc:98
+#: ../inc/prefs.inc:99
msgid "'In use' means mouse/keyboard activity in last"
msgstr ""
-#: ../inc/prefs.inc:100 ../inc/prefs.inc:109 ../inc/prefs.inc:143
+#: ../inc/prefs.inc:101 ../inc/prefs.inc:110 ../inc/prefs.inc:144
msgid "minutes"
msgstr ""
-#: ../inc/prefs.inc:104
+#: ../inc/prefs.inc:105
msgid ""
"Suspend work if no mouse/keyboard activity in last %1 Needed to enter low-"
"power mode on some computers %2"
msgstr ""
-#: ../inc/prefs.inc:113
+#: ../inc/prefs.inc:114
msgid ""
"Suspend work when non-BOINC CPU usage is above %1 0 means no "
"restriction<br>Enforced by version 6.10.30+ %2"
msgstr ""
-#: ../inc/prefs.inc:121
+#: ../inc/prefs.inc:122
msgid "Do work only between the hours of %1 No restriction if equal %2"
msgstr ""
-#: ../inc/prefs.inc:129
+#: ../inc/prefs.inc:130
msgid ""
"Leave tasks in memory while suspended? %1 Suspended tasks will consume swap "
"space if 'yes' %2"
msgstr ""
-#: ../inc/prefs.inc:138
+#: ../inc/prefs.inc:139
msgid "Switch between tasks every %1 Recommended: 60 minutes %2"
msgstr ""
-#: ../inc/prefs.inc:146
+#: ../inc/prefs.inc:147
msgid "On multiprocessors, use at most"
msgstr ""
-#: ../inc/prefs.inc:148
+#: ../inc/prefs.inc:149
msgid "processors"
msgstr ""
-#: ../inc/prefs.inc:152
+#: ../inc/prefs.inc:153
msgid "On multiprocessors, use at most %1 Enforced by version 6.1+ %2"
msgstr ""
-#: ../inc/prefs.inc:157
+#: ../inc/prefs.inc:158
#, php-format
msgid "% of the processors"
msgstr ""
-#: ../inc/prefs.inc:161
+#: ../inc/prefs.inc:162
msgid "Use at most %1 Can be used to reduce CPU heat %2"
msgstr ""
-#: ../inc/prefs.inc:166
+#: ../inc/prefs.inc:167
#, php-format
msgid "% of CPU time"
msgstr ""
-#: ../inc/prefs.inc:174 ../inc/prefs.inc:188
+#: ../inc/prefs.inc:175 ../inc/prefs.inc:189
msgid "Disk: use at most"
msgstr ""
-#: ../inc/prefs.inc:176 ../inc/prefs.inc:185
+#: ../inc/prefs.inc:177 ../inc/prefs.inc:186
msgid "GB"
msgstr ""
-#: ../inc/prefs.inc:179
+#: ../inc/prefs.inc:180
msgid "Disk: leave free at least %1 Values smaller than %2 are ignored %3"
msgstr ""
-#: ../inc/prefs.inc:190 ../inc/prefs.inc:200 ../inc/prefs.inc:205
-#: ../inc/prefs.inc:210
+#: ../inc/prefs.inc:191 ../inc/prefs.inc:201 ../inc/prefs.inc:206
+#: ../inc/prefs.inc:211
#, php-format
msgid "% of total"
msgstr ""
-#: ../inc/prefs.inc:193
+#: ../inc/prefs.inc:194
msgid "Tasks checkpoint to disk at most every"
msgstr ""
-#: ../inc/prefs.inc:195
+#: ../inc/prefs.inc:196
msgid "seconds"
msgstr ""
-#: ../inc/prefs.inc:198
+#: ../inc/prefs.inc:199
msgid "Swap space: use at most"
msgstr ""
-#: ../inc/prefs.inc:203
+#: ../inc/prefs.inc:204
msgid "Memory: when computer is in use, use at most"
msgstr ""
-#: ../inc/prefs.inc:208
+#: ../inc/prefs.inc:209
msgid "Memory: when computer is not in use, use at most"
msgstr ""
-#: ../inc/prefs.inc:217
+#: ../inc/prefs.inc:218
msgid "Maintain enough tasks to keep busy for at least%1(max 10 days).%2"
msgstr ""
-#: ../inc/prefs.inc:222 ../inc/prefs.inc:227 ../inc/prefs.inc:269
-#: ../inc/util.inc:264
+#: ../inc/prefs.inc:223 ../inc/prefs.inc:228 ../inc/prefs.inc:270
+#: ../inc/util.inc:274
msgid "days"
msgstr ""
-#: ../inc/prefs.inc:225
+#: ../inc/prefs.inc:226
msgid "... and up to an additional"
msgstr ""
-#: ../inc/prefs.inc:231
+#: ../inc/prefs.inc:232
msgid ""
"Confirm before connecting to Internet? %1 Matters only if you have a modem, "
"ISDN or VPN connection %2"
msgstr ""
-#: ../inc/prefs.inc:240
+#: ../inc/prefs.inc:241
msgid ""
"Disconnect when done? %1 Matters only if you have a modem, ISDN or VPN "
"connection %2"
msgstr ""
-#: ../inc/prefs.inc:248
+#: ../inc/prefs.inc:249
msgid "Maximum download rate:"
msgstr ""
-#: ../inc/prefs.inc:250 ../inc/prefs.inc:255
+#: ../inc/prefs.inc:251 ../inc/prefs.inc:256
msgid "Kbytes/sec"
msgstr ""
-#: ../inc/prefs.inc:253
+#: ../inc/prefs.inc:254
msgid "Maximum upload rate:"
msgstr ""
-#: ../inc/prefs.inc:258
+#: ../inc/prefs.inc:259
msgid "Use network only between the hours of"
msgstr ""
-#: ../inc/prefs.inc:262
+#: ../inc/prefs.inc:263
msgid "Transfer at most %1 Enforced by version 6.10.46+ %2"
msgstr ""
-#: ../inc/prefs.inc:268
+#: ../inc/prefs.inc:269
msgid "Mbytes every"
msgstr ""
-#: ../inc/prefs.inc:273
+#: ../inc/prefs.inc:274
msgid ""
"Skip image file verification? %1 Check this ONLY if your Internet provider "
"modifies image files (UMTS does this, for example). %2 Skipping verification "
"reduces the security of BOINC. %3"
msgstr ""
-#: ../inc/prefs.inc:286
+#: ../inc/prefs.inc:287
msgid ""
"Resource share %1 Determines the proportion of your computer's resources "
"allocated to this project. Example: if you participate in two BOINC projects "
@@ -1104,153 +1116,164 @@ msgid ""
"resources and the second will get 2/3. %2"
msgstr ""
-#: ../inc/prefs.inc:297
+#: ../inc/prefs.inc:298
msgid "Accelerate GPU tasks by dedicating a CPU to each one?"
msgstr ""
-#: ../inc/prefs.inc:307
+#: ../inc/prefs.inc:308
msgid "Use CPU %1 Enforced by version 6.10+ %2"
msgstr ""
-#: ../inc/prefs.inc:319
+#: ../inc/prefs.inc:320
msgid "Use ATI GPU %1 Enforced by version 6.10+ %2"
msgstr ""
-#: ../inc/prefs.inc:331
+#: ../inc/prefs.inc:332
msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
msgstr ""
-#: ../inc/prefs.inc:345
+#: ../inc/prefs.inc:344
+msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
+msgstr ""
+
+#: ../inc/prefs.inc:358
msgid ""
"Run test applications? %1 This helps us develop applications, but may cause "
"jobs to fail on your computer %2"
msgstr ""
-#: ../inc/prefs.inc:354
+#: ../inc/prefs.inc:367
msgid ""
"Emails will be sent from %1; make sure your spam filter accepts this address."
msgstr ""
-#: ../inc/prefs.inc:361
+#: ../inc/prefs.inc:374
msgid "Is it OK for %1 and your team (if any) to email you?"
msgstr ""
-#: ../inc/prefs.inc:367
+#: ../inc/prefs.inc:380
msgid "Should %1 show your computers on its web site?"
msgstr ""
-#: ../inc/prefs.inc:374
+#: ../inc/prefs.inc:387
msgid "Disk and memory usage"
msgstr ""
-#: ../inc/prefs.inc:375
+#: ../inc/prefs.inc:388
msgid "Processor usage"
msgstr ""
-#: ../inc/prefs.inc:376
+#: ../inc/prefs.inc:389
msgid "Network usage"
msgstr ""
-#: ../inc/prefs.inc:379
+#: ../inc/prefs.inc:392
msgid ""
"These preferences apply to all the BOINC projects in which you participate."
msgstr ""
-#: ../inc/prefs.inc:382
+#: ../inc/prefs.inc:395
msgid ""
"%1Unable to update preferences.%2 The values marked in red below were out of "
"range or not numeric."
msgstr ""
-#: ../inc/prefs.inc:431
+#: ../inc/prefs.inc:445
msgid "bad venue: %1"
msgstr ""
-#: ../inc/prefs.inc:437
+#: ../inc/prefs.inc:451
msgid "bad subset: %1"
msgstr ""
-#: ../inc/prefs.inc:656 ../inc/prefs.inc:659 ../inc/prefs.inc:1007
+#: ../inc/prefs.inc:671 ../inc/prefs.inc:674 ../inc/prefs.inc:1025
#: ../inc/prefs_util.inc:93 ../project.sample/project_specific_prefs.inc:85
msgid "yes"
msgstr ""
-#: ../inc/prefs.inc:656 ../inc/prefs.inc:659 ../inc/prefs.inc:1009
+#: ../inc/prefs.inc:671 ../inc/prefs.inc:674 ../inc/prefs.inc:1027
#: ../inc/prefs_util.inc:93 ../project.sample/project_specific_prefs.inc:87
msgid "no"
msgstr ""
-#: ../inc/prefs.inc:664 ../user/forum_search.php:53
+#: ../inc/prefs.inc:679 ../user/forum_search.php:53
msgid "no limit"
msgstr ""
-#: ../inc/prefs.inc:689 ../user/team_admins.php:79
+#: ../inc/prefs.inc:704 ../user/team_admins.php:79
msgid "Add"
msgstr ""
-#: ../inc/prefs.inc:691 ../inc/prefs.inc:819
+#: ../inc/prefs.inc:706 ../inc/prefs.inc:834
#: ../user/edit_forum_preferences_form.php:160 ../user/team_admins.php:34
msgid "Remove"
msgstr ""
-#: ../inc/prefs.inc:797 ../user/explain_state.php:94
+#: ../inc/prefs.inc:812 ../user/explain_state.php:94
msgid "Computing"
msgstr ""
-#: ../inc/prefs.inc:808
+#: ../inc/prefs.inc:823
msgid "Separate preferences for %1"
msgstr ""
-#: ../inc/prefs.inc:818 ../inc/prefs.inc:896
+#: ../inc/prefs.inc:833 ../inc/prefs.inc:914
msgid "Edit preferences"
msgstr ""
-#: ../inc/prefs.inc:824
+#: ../inc/prefs.inc:839
msgid "Add separate preferences for %1"
msgstr ""
-#: ../inc/prefs.inc:832 ../inc/prefs.inc:877
+#: ../inc/prefs.inc:847 ../inc/prefs.inc:895
msgid "(Switch View)"
msgstr ""
-#: ../inc/prefs.inc:834 ../inc/prefs.inc:880
+#: ../inc/prefs.inc:849 ../inc/prefs.inc:898
msgid "Combined preferences"
msgstr ""
-#: ../inc/prefs.inc:839
+#: ../inc/prefs.inc:854
msgid "Project specific settings"
msgstr ""
-#: ../inc/prefs.inc:847 ../inc/prefs.inc:889
+#: ../inc/prefs.inc:862 ../inc/prefs.inc:907
msgid "Primary (default) preferences"
msgstr ""
-#: ../inc/prefs.inc:856 ../user/add_venue.php:43 ../user/add_venue.php:67
+#: ../inc/prefs.inc:871 ../user/add_venue.php:39 ../user/add_venue.php:63
#: ../user/prefs_edit.php:40 ../user/prefs_edit.php:64
#: ../user/prefs_edit.php:92
msgid "Edit %1 preferences"
msgstr ""
-#: ../inc/prefs.inc:870
+#: ../inc/prefs.inc:885
+msgid "These apply to all BOINC projects in which you participate."
+msgstr ""
+
+#: ../inc/prefs.inc:887
msgid ""
-"These apply to all BOINC projects in which you participate.<br>\n"
-" On computers participating in multiple projects, the most "
-"recently modified preferences will be used."
+"On computers participating in multiple projects, the most recently modified "
+"preferences will be used."
msgstr ""
-#: ../inc/prefs.inc:874
+#: ../inc/prefs.inc:889
+msgid "These preferences do not apply to Android devices."
+msgstr ""
+
+#: ../inc/prefs.inc:892
msgid "Preferences last modified:"
msgstr ""
-#: ../inc/prefs.inc:926
+#: ../inc/prefs.inc:944
msgid "Add preferences"
msgstr ""
-#: ../inc/prefs.inc:930
+#: ../inc/prefs.inc:948
msgid "Update preferences"
msgstr ""
-#: ../inc/prefs.inc:1018 ../inc/prefs.inc:1027
+#: ../inc/prefs.inc:1036 ../inc/prefs.inc:1045
msgid "Default computer location"
msgstr ""
@@ -1274,763 +1297,768 @@ msgstr ""
msgid "Database error"
msgstr ""
-#: ../inc/profile.inc:192
+#: ../inc/profile.inc:193
msgid ""
"To prevent spam, profiles of users with an average credit of less than %1 "
"are displayed only to logged-in users. We apologize for this inconvenience."
msgstr ""
-#: ../inc/profile.inc:196
+#: ../inc/profile.inc:197
msgid "User is banished"
msgstr ""
-#: ../inc/profile.inc:210
+#: ../inc/profile.inc:211
msgid "No profile exists for that user ID."
msgstr ""
-#: ../inc/profile.inc:218 ../user/create_profile.php:313
+#: ../inc/profile.inc:219 ../user/create_profile.php:313
msgid "Edit your profile"
msgstr ""
-#: ../inc/profile.inc:261
+#: ../inc/profile.inc:262
msgid "Your feedback on this profile"
msgstr ""
-#: ../inc/profile.inc:263
+#: ../inc/profile.inc:264
msgid "Recommend this profile for User of the Day:"
msgstr ""
-#: ../inc/profile.inc:264
+#: ../inc/profile.inc:265
msgid "I %1like%2 this profile"
msgstr ""
-#: ../inc/profile.inc:267
+#: ../inc/profile.inc:268
msgid "Alert administrators to an offensive profile:"
msgstr ""
-#: ../inc/profile.inc:268
+#: ../inc/profile.inc:269
msgid "I %1do not like%2 this profile"
msgstr ""
-#: ../inc/result.inc:34
+#: ../inc/result.inc:35
msgid "Anonymous platform"
msgstr ""
-#: ../inc/result.inc:48
+#: ../inc/result.inc:53 ../user/host_app_versions.php:26
msgid "NVIDIA GPU"
msgstr ""
-#: ../inc/result.inc:49 ../user/host_app_versions.php:27
+#: ../inc/result.inc:55 ../user/host_app_versions.php:27
msgid "ATI GPU"
msgstr ""
-#: ../inc/result.inc:56
+#: ../inc/result.inc:57 ../user/host_app_versions.php:28
+msgid "Intel GPU"
+msgstr ""
+
+#: ../inc/result.inc:65
msgid "Not in DB"
msgstr ""
-#: ../inc/result.inc:82
+#: ../inc/result.inc:91
msgid "pending"
msgstr ""
-#: ../inc/result.inc:105 ../user/forum_search.php:60
+#: ../inc/result.inc:114 ../user/forum_search.php:60
msgid "All"
msgstr ""
-#: ../inc/result.inc:106 ../inc/result.inc:167 ../inc/result.inc:214
+#: ../inc/result.inc:115 ../inc/result.inc:176 ../inc/result.inc:223
msgid "In progress"
msgstr ""
-#: ../inc/result.inc:107
+#: ../inc/result.inc:116
msgid "Validation pending"
msgstr ""
-#: ../inc/result.inc:108
+#: ../inc/result.inc:117
msgid "Validation inconclusive"
msgstr ""
-#: ../inc/result.inc:109 ../inc/result.inc:259
+#: ../inc/result.inc:118 ../inc/result.inc:268
msgid "Valid"
msgstr ""
-#: ../inc/result.inc:110 ../inc/result.inc:262
+#: ../inc/result.inc:119 ../inc/result.inc:271
msgid "Invalid"
msgstr ""
-#: ../inc/result.inc:111 ../inc/result.inc:200
+#: ../inc/result.inc:120 ../inc/result.inc:209
msgid "Error"
msgstr ""
-#: ../inc/result.inc:165 ../inc/result.inc:212 ../user/explain_state.php:34
+#: ../inc/result.inc:174 ../inc/result.inc:221 ../user/explain_state.php:34
msgid "Inactive"
msgstr ""
-#: ../inc/result.inc:166 ../inc/result.inc:213 ../user/explain_state.php:37
+#: ../inc/result.inc:175 ../inc/result.inc:222 ../user/explain_state.php:37
msgid "Unsent"
msgstr ""
-#: ../inc/result.inc:172
+#: ../inc/result.inc:181
msgid "Completed, waiting for validation"
msgstr ""
-#: ../inc/result.inc:173
+#: ../inc/result.inc:182
msgid "Completed and validated"
msgstr ""
-#: ../inc/result.inc:174
+#: ../inc/result.inc:183
msgid "Completed, marked as invalid"
msgstr ""
-#: ../inc/result.inc:175
+#: ../inc/result.inc:184
msgid "Completed, can't validate"
msgstr ""
-#: ../inc/result.inc:176
+#: ../inc/result.inc:185
msgid "Completed, validation inconclusive"
msgstr ""
-#: ../inc/result.inc:177
+#: ../inc/result.inc:186
msgid "Completed, too late to validate"
msgstr ""
-#: ../inc/result.inc:179
+#: ../inc/result.inc:188
msgid "Completed"
msgstr ""
-#: ../inc/result.inc:180 ../inc/result.inc:224 ../user/explain_state.php:62
+#: ../inc/result.inc:189 ../inc/result.inc:233 ../user/explain_state.php:62
msgid "Couldn't send"
msgstr ""
-#: ../inc/result.inc:185 ../inc/result.inc:248
+#: ../inc/result.inc:194 ../inc/result.inc:257
msgid "Cancelled by server"
msgstr ""
-#: ../inc/result.inc:190
+#: ../inc/result.inc:199
msgid "Not started by deadline - canceled"
msgstr ""
-#: ../inc/result.inc:193
+#: ../inc/result.inc:202
msgid "Error while downloading"
msgstr ""
-#: ../inc/result.inc:195
+#: ../inc/result.inc:204
msgid "Error while computing"
msgstr ""
-#: ../inc/result.inc:196
+#: ../inc/result.inc:205
msgid "Error while uploading"
msgstr ""
-#: ../inc/result.inc:197 ../inc/result.inc:250
+#: ../inc/result.inc:206 ../inc/result.inc:259
msgid "Aborted by user"
msgstr ""
-#: ../inc/result.inc:198 ../inc/result.inc:251
+#: ../inc/result.inc:207 ../inc/result.inc:260
msgid "Upload failed"
msgstr ""
-#: ../inc/result.inc:201
+#: ../inc/result.inc:210
msgid "Timed out - no response"
msgstr ""
-#: ../inc/result.inc:202 ../inc/result.inc:231 ../user/explain_state.php:71
+#: ../inc/result.inc:211 ../inc/result.inc:240 ../user/explain_state.php:71
msgid "Didn't need"
msgstr ""
-#: ../inc/result.inc:203 ../inc/result.inc:232 ../user/explain_state.php:74
+#: ../inc/result.inc:212 ../inc/result.inc:241 ../user/explain_state.php:74
msgid "Validate error"
msgstr ""
-#: ../inc/result.inc:204 ../inc/result.inc:233
+#: ../inc/result.inc:213 ../inc/result.inc:242
msgid "Abandoned"
msgstr ""
-#: ../inc/result.inc:215 ../user/explain_state.php:43
+#: ../inc/result.inc:224 ../user/explain_state.php:43
msgid "Over"
msgstr ""
-#: ../inc/result.inc:223 ../user/explain_state.php:59
+#: ../inc/result.inc:232 ../user/explain_state.php:59
msgid "Success"
msgstr ""
-#: ../inc/result.inc:227
+#: ../inc/result.inc:236
msgid "Computation error"
msgstr ""
-#: ../inc/result.inc:229
+#: ../inc/result.inc:238
msgid "Redundant result"
msgstr ""
-#: ../inc/result.inc:230 ../user/explain_state.php:68
+#: ../inc/result.inc:239 ../user/explain_state.php:68
msgid "No reply"
msgstr ""
-#: ../inc/result.inc:240 ../user/explain_state.php:85
+#: ../inc/result.inc:249 ../user/explain_state.php:85
msgid "New"
msgstr ""
-#: ../inc/result.inc:241 ../user/explain_state.php:91
+#: ../inc/result.inc:250 ../user/explain_state.php:91
msgid "Downloading"
msgstr ""
-#: ../inc/result.inc:242
+#: ../inc/result.inc:251
msgid "Processing"
msgstr ""
-#: ../inc/result.inc:243
+#: ../inc/result.inc:252
msgid "Compute error"
msgstr ""
-#: ../inc/result.inc:244 ../user/explain_state.php:97
+#: ../inc/result.inc:253 ../user/explain_state.php:97
msgid "Uploading"
msgstr ""
-#: ../inc/result.inc:245 ../user/explain_state.php:88
+#: ../inc/result.inc:254 ../user/explain_state.php:88
msgid "Done"
msgstr ""
-#: ../inc/result.inc:258
+#: ../inc/result.inc:267
msgid "Initial"
msgstr ""
-#: ../inc/result.inc:264
+#: ../inc/result.inc:273
msgid "Not necessary"
msgstr ""
-#: ../inc/result.inc:265
+#: ../inc/result.inc:274
msgid "Workunit error - check skipped"
msgstr ""
-#: ../inc/result.inc:266
+#: ../inc/result.inc:275
msgid "Checked, but no consensus yet"
msgstr ""
-#: ../inc/result.inc:267
+#: ../inc/result.inc:276
msgid "Task was reported too late to validate"
msgstr ""
-#: ../inc/result.inc:293
+#: ../inc/result.inc:302
msgid "Couldn't send result"
msgstr ""
-#: ../inc/result.inc:297
+#: ../inc/result.inc:306
msgid "Too many errors (may have bug)"
msgstr ""
-#: ../inc/result.inc:301
+#: ../inc/result.inc:310
msgid "Too many results (may be nondeterministic)"
msgstr ""
-#: ../inc/result.inc:305
+#: ../inc/result.inc:314
msgid "Too many total results"
msgstr ""
-#: ../inc/result.inc:309
+#: ../inc/result.inc:318
msgid "WU cancelled"
msgstr ""
-#: ../inc/result.inc:313
+#: ../inc/result.inc:322
msgid "Unrecognized Error: %1"
msgstr ""
-#: ../inc/result.inc:340
+#: ../inc/result.inc:349
msgid "Task name"
msgstr ""
-#: ../inc/result.inc:340 ../inc/result.inc:345 ../inc/result.inc:348
-#: ../inc/result.inc:351
+#: ../inc/result.inc:349 ../inc/result.inc:354 ../inc/result.inc:357
+#: ../inc/result.inc:360
msgid "click for details"
msgstr ""
-#: ../inc/result.inc:340
+#: ../inc/result.inc:349
msgid "Show IDs"
msgstr ""
-#: ../inc/result.inc:345
+#: ../inc/result.inc:354
msgid "Show names"
msgstr ""
-#: ../inc/result.inc:348
+#: ../inc/result.inc:357
msgid "Task"
msgstr ""
-#: ../inc/result.inc:351
+#: ../inc/result.inc:360
msgid "Work unit"
msgstr ""
-#: ../inc/result.inc:354
+#: ../inc/result.inc:369
msgid "Computer"
msgstr ""
-#: ../inc/result.inc:357 ../inc/result.inc:617
+#: ../inc/result.inc:372 ../inc/result.inc:631
msgid "Sent"
msgstr ""
-#: ../inc/result.inc:358
+#: ../inc/result.inc:373
msgid "Time reported<br />or deadline"
msgstr ""
-#: ../inc/result.inc:359
+#: ../inc/result.inc:374
msgid "explain"
msgstr ""
-#: ../inc/result.inc:361 ../user/server_status.php:246
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr ""
-#: ../inc/result.inc:362
+#: ../inc/result.inc:377
msgid "Run time<br />(sec)"
msgstr ""
-#: ../inc/result.inc:363
+#: ../inc/result.inc:378
msgid "CPU time<br />(sec)"
msgstr ""
-#: ../inc/result.inc:364 ../inc/result.inc:628
+#: ../inc/result.inc:379 ../inc/result.inc:642
msgid "Credit"
msgstr ""
-#: ../inc/result.inc:365 ../inc/result.inc:710
+#: ../inc/result.inc:380 ../inc/result.inc:724
msgid "Application"
msgstr ""
-#: ../inc/result.inc:615
+#: ../inc/result.inc:629
msgid "Workunit"
msgstr ""
-#: ../inc/result.inc:618
+#: ../inc/result.inc:632
msgid "Received"
msgstr ""
-#: ../inc/result.inc:619
+#: ../inc/result.inc:633
msgid "Server state"
msgstr ""
-#: ../inc/result.inc:620
+#: ../inc/result.inc:634
msgid "Outcome"
msgstr ""
-#: ../inc/result.inc:621
+#: ../inc/result.inc:635
msgid "Client state"
msgstr ""
-#: ../inc/result.inc:622
+#: ../inc/result.inc:636
msgid "Exit status"
msgstr ""
-#: ../inc/result.inc:624
+#: ../inc/result.inc:638
msgid "Report deadline"
msgstr ""
-#: ../inc/result.inc:625
+#: ../inc/result.inc:639
msgid "Run time"
msgstr ""
-#: ../inc/result.inc:626
+#: ../inc/result.inc:640
msgid "CPU time"
msgstr ""
-#: ../inc/result.inc:627
+#: ../inc/result.inc:641
msgid "Validate state"
msgstr ""
-#: ../inc/result.inc:629
+#: ../inc/result.inc:643
msgid "Application version"
msgstr ""
-#: ../inc/result.inc:642
+#: ../inc/result.inc:656
msgid "Output files"
msgstr ""
-#: ../inc/result.inc:645
+#: ../inc/result.inc:659
msgid "Stderr output"
msgstr ""
-#: ../inc/result.inc:692
+#: ../inc/result.inc:706
msgid "State"
msgstr ""
-#: ../inc/team.inc:33
+#: ../inc/result.inc:747
+msgid "Task name:"
+msgstr ""
+
+#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
msgstr ""
-#: ../inc/team.inc:34
+#: ../inc/team.inc:41
msgid "Key words"
msgstr ""
-#: ../inc/team.inc:34
+#: ../inc/team.inc:41
msgid "Find teams with these words in their names or descriptions"
msgstr ""
-#: ../inc/team.inc:36 ../inc/team.inc:114 ../inc/team.inc:225
-#: ../inc/team.inc:365 ../inc/team.inc:449 ../inc/user.inc:206
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
#: ../inc/user.inc:317 ../user/account_finish.php:45
-#: ../user/create_account_form.php:106 ../user/edit_user_info_form.php:40
+#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
#: ../user/user_search.php:53 ../user/user_search.php:140
msgid "Country"
msgstr ""
-#: ../inc/team.inc:42 ../inc/team.inc:447
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr ""
-#: ../inc/team.inc:44
+#: ../inc/team.inc:51
msgid "Show only active teams"
msgstr ""
-#: ../inc/team.inc:45 ../user/profile_menu.php:77 ../user/user_search.php:70
+#: ../inc/team.inc:52 ../user/profile_menu.php:76 ../user/user_search.php:70
msgid "Search"
msgstr ""
-#: ../inc/team.inc:54
+#: ../inc/team.inc:61
msgid "Requested by you, and founder response deadline has passed."
msgstr ""
-#: ../inc/team.inc:56
+#: ../inc/team.inc:63
msgid "Complete foundership transfer"
msgstr ""
-#: ../inc/team.inc:60
+#: ../inc/team.inc:67
msgid "Requested by you"
msgstr ""
-#: ../inc/team.inc:60
+#: ../inc/team.inc:67
msgid "founder response deadline is %1"
msgstr ""
-#: ../inc/team.inc:65 ../inc/team.inc:549 ../inc/user.inc:281
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
#: ../inc/user.inc:371
msgid "None"
msgstr ""
-#: ../inc/team.inc:67
+#: ../inc/team.inc:74
msgid "Initiate request"
msgstr ""
-#: ../inc/team.inc:70
+#: ../inc/team.inc:77
msgid "Deferred"
msgstr ""
-#: ../inc/team.inc:80
+#: ../inc/team.inc:87
msgid "Team info"
msgstr ""
-#: ../inc/team.inc:82 ../user/team_forum.php:70 ../user/team_search.php:69
+#: ../inc/team.inc:89 ../user/team_forum.php:70 ../user/team_search.php:69
msgid "Description"
msgstr ""
-#: ../inc/team.inc:90
+#: ../inc/team.inc:97
msgid "Web site"
msgstr ""
-#: ../inc/team.inc:112
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr ""
-#: ../inc/team.inc:115 ../inc/team.inc:366 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr ""
-#: ../inc/team.inc:119 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr ""
-#: ../inc/team.inc:120 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr ""
-#: ../inc/team.inc:128
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr ""
-#: ../inc/team.inc:129
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr ""
-#: ../inc/team.inc:132
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr ""
-#: ../inc/team.inc:139
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr ""
-#: ../inc/team.inc:140
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr ""
-#: ../inc/team.inc:144
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr ""
-#: ../inc/team.inc:148 ../inc/team.inc:351
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr ""
-#: ../inc/team.inc:149 ../inc/team.inc:246
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr ""
-#: ../inc/team.inc:161
+#: ../inc/team.inc:169
msgid "Admins"
msgstr ""
-#: ../inc/team.inc:176
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr ""
-#: ../inc/team.inc:177
+#: ../inc/team.inc:185
msgid "Total members"
msgstr ""
-#: ../inc/team.inc:177 ../inc/team.inc:178 ../inc/team.inc:179
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr ""
-#: ../inc/team.inc:178
+#: ../inc/team.inc:186
msgid "Active members"
msgstr ""
-#: ../inc/team.inc:179
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr ""
-#: ../inc/team.inc:248
+#: ../inc/team.inc:256
msgid "Admin"
msgstr ""
-#: ../inc/team.inc:269 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr ""
-#: ../inc/team.inc:273 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr ""
-#: ../inc/team.inc:281
+#: ../inc/team.inc:289
msgid "No such team."
msgstr ""
-#: ../inc/team.inc:294
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr ""
-#: ../inc/team.inc:318
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr ""
-#: ../inc/team.inc:415
+#: ../inc/team.inc:422
msgid ""
"WARNING: this is a BOINC-wide team. If you make changes here, they will soon "
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr ""
-#: ../inc/team.inc:422
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr ""
-#: ../inc/team.inc:426
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr ""
-#: ../inc/team.inc:427
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr ""
-#: ../inc/team.inc:430
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr ""
-#: ../inc/team.inc:432 ../inc/team.inc:442
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr ""
-#: ../inc/team.inc:433
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr ""
-#: ../inc/team.inc:436
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr ""
-#: ../inc/team.inc:436
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr ""
-#: ../inc/team.inc:437
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr ""
-#: ../inc/team.inc:440
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr ""
-#: ../inc/team.inc:456
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr ""
-#: ../inc/uotd.inc:27
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr ""
-#: ../inc/user.inc:116
+#: ../inc/user.inc:119
msgid "Projects in which you are participating"
msgstr ""
-#: ../inc/user.inc:118
+#: ../inc/user.inc:121
msgid "Projects in which %1 is participating"
msgstr ""
-#: ../inc/user.inc:122
+#: ../inc/user.inc:125
msgid "Project"
msgstr ""
-#: ../inc/user.inc:122
+#: ../inc/user.inc:125
msgid "Click for user page"
msgstr ""
-#: ../inc/user.inc:122
+#: ../inc/user.inc:125
msgid "Since"
msgstr ""
-#: ../inc/user.inc:146
+#: ../inc/user.inc:148
msgid "Computing and credit"
msgstr ""
-#: ../inc/user.inc:150 ../user/pending.php:64
-msgid "Pending credit"
+#: ../inc/user.inc:151
+msgid "Computers on this account"
msgstr ""
-#: ../inc/user.inc:150 ../inc/user.inc:152 ../inc/user.inc:153
-#: ../inc/user.inc:218 ../inc/user.inc:243 ../inc/user.inc:327
-#: ../inc/user.inc:402 ../user/view_profile.php:64
+#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
+#: ../user/view_profile.php:64
msgid "View"
msgstr ""
-#: ../inc/user.inc:152
-msgid "Computers on this account"
-msgstr ""
-
-#: ../inc/user.inc:162
+#: ../inc/user.inc:161
msgid "Cross-project ID"
msgstr ""
-#: ../inc/user.inc:163
+#: ../inc/user.inc:162
msgid "Cross-project statistics"
msgstr ""
-#: ../inc/user.inc:164
+#: ../inc/user.inc:163
msgid "Account"
msgstr ""
-#: ../inc/user.inc:166 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr ""
-#: ../inc/user.inc:168
+#: ../inc/user.inc:167
msgid "Cross-project"
msgstr ""
-#: ../inc/user.inc:169
+#: ../inc/user.inc:168 ../user/bs_sample_index.php:54
msgid "Certificate"
msgstr ""
-#: ../inc/user.inc:170
+#: ../inc/user.inc:169
msgid "Stats on your cell phone"
msgstr ""
-#: ../inc/user.inc:184
+#: ../inc/user.inc:183
msgid "Unknown notification type: %1"
msgstr ""
-#: ../inc/user.inc:199
+#: ../inc/user.inc:198
msgid "Account information"
msgstr ""
-#: ../inc/user.inc:201 ../user/edit_passwd_form.php:48
+#: ../inc/user.inc:200 ../user/edit_passwd_form.php:45
#: ../user/get_passwd.php:40 ../user/team_email_list.php:64
msgid "Email address"
msgstr ""
-#: ../inc/user.inc:204 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr ""
-#: ../inc/user.inc:207
+#: ../inc/user.inc:206
msgid "Postal code"
msgstr ""
-#: ../inc/user.inc:208 ../inc/user.inc:316
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr ""
-#: ../inc/user.inc:210
+#: ../inc/user.inc:209
msgid "Change"
msgstr ""
-#: ../inc/user.inc:210
+#: ../inc/user.inc:209
msgid "email address"
msgstr ""
-#: ../inc/user.inc:211
+#: ../inc/user.inc:210
msgid "password"
msgstr ""
-#: ../inc/user.inc:212
+#: ../inc/user.inc:211
msgid "other account info"
msgstr ""
-#: ../inc/user.inc:214 ../inc/user.inc:315
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr ""
-#: ../inc/user.inc:214
+#: ../inc/user.inc:213
msgid "Used in community functions"
msgstr ""
-#: ../inc/user.inc:217 ../user/weak_auth.php:25
+#: ../inc/user.inc:216 ../user/weak_auth.php:25
msgid "Account keys"
msgstr ""
-#: ../inc/user.inc:222
+#: ../inc/user.inc:221
msgid "Preferences"
msgstr ""
-#: ../inc/user.inc:225
+#: ../inc/user.inc:224
msgid "When and how BOINC uses your computer"
msgstr ""
-#: ../inc/user.inc:226
+#: ../inc/user.inc:225
msgid "Computing preferences"
msgstr ""
-#: ../inc/user.inc:229
+#: ../inc/user.inc:228
msgid "Message boards and private messages"
msgstr ""
-#: ../inc/user.inc:230 ../user/edit_forum_preferences_form.php:31
+#: ../inc/user.inc:229 ../user/edit_forum_preferences_form.php:31
msgid "Community preferences"
msgstr ""
-#: ../inc/user.inc:233
+#: ../inc/user.inc:232
msgid "Preferences for this project"
msgstr ""
-#: ../inc/user.inc:234 ../user/prefs.php:32
+#: ../inc/user.inc:233 ../user/prefs.php:29
msgid "%1 preferences"
msgstr ""
-#: ../inc/user.inc:240 ../user/sample_index.php:114
+#: ../inc/user.inc:239 ../user/bs_sample_index.php:59
+#: ../user/sample_index.php:125
msgid "Community"
msgstr ""
@@ -2042,7 +2070,7 @@ msgstr ""
msgid "Create"
msgstr ""
-#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:504
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr ""
@@ -2087,11 +2115,11 @@ msgstr ""
msgid "Friends"
msgstr ""
-#: ../inc/user.inc:327 ../inc/user.inc:329 ../user/server_status.php:396
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr ""
-#: ../inc/user.inc:336
+#: ../inc/user.inc:338
msgid "Donor"
msgstr ""
@@ -2127,81 +2155,77 @@ msgstr ""
msgid "user name may not contain HTML tags"
msgstr ""
-#: ../inc/util.inc:122
+#: ../inc/util.inc:131
msgid "log out"
msgstr ""
-#: ../inc/util.inc:124
+#: ../inc/util.inc:133
msgid "log in"
msgstr ""
-#: ../inc/util.inc:194 ../user/login_form.php:37 ../user/login_form.php:62
+#: ../inc/util.inc:204 ../user/login_form.php:30 ../user/login_form.php:66
msgid "Log in"
msgstr ""
-#: ../inc/util.inc:195 ../user/create_account_form.php:38
+#: ../inc/util.inc:205 ../user/create_account_form.php:40
msgid "Create an account"
msgstr ""
-#: ../inc/util.inc:196
+#: ../inc/util.inc:206
msgid "Server status page"
msgstr ""
-#: ../inc/util.inc:238
+#: ../inc/util.inc:248
msgid ""
"A database error occurred while handling your request; please try again "
"later."
msgstr ""
-#: ../inc/util.inc:247
+#: ../inc/util.inc:257
msgid "Unable to handle request"
msgstr ""
-#: ../inc/util.inc:267
+#: ../inc/util.inc:277
msgid "hours"
msgstr ""
-#: ../inc/util.inc:270
+#: ../inc/util.inc:280
msgid "min"
msgstr ""
-#: ../inc/util.inc:273
+#: ../inc/util.inc:283
msgid "sec"
msgstr ""
-#: ../inc/util.inc:434
+#: ../inc/util.inc:444
msgid "Link has timed out. Please click Back, refresh the page, and try again."
msgstr ""
-#: ../inc/util.inc:503
+#: ../inc/util.inc:513
msgid "View the profile of %1"
msgstr ""
-#: ../inc/util.inc:559
+#: ../inc/util.inc:569
msgid "Use BBCode tags to format your text"
msgstr ""
-#: ../inc/util.inc:770
+#: ../inc/util.inc:796
msgid "Project down for maintenance"
msgstr ""
-#: ../inc/util.inc:773
+#: ../inc/util.inc:799
msgid "%1 is temporarily shut down for maintenance. Please try again later."
msgstr ""
-#: ../inc/util.inc:791
+#: ../inc/util.inc:817
msgid "Unable to connect to database - please try again later"
msgstr ""
-#: ../inc/util.inc:792
-msgid "Error:"
-msgstr ""
-
-#: ../inc/util.inc:796
+#: ../inc/util.inc:821
msgid "Unable to select database - please try again later"
msgstr ""
-#: ../inc/util_ops.inc:129 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr ""
@@ -2209,19 +2233,19 @@ msgstr ""
msgid "Finish account setup"
msgstr ""
-#: ../user/account_finish.php:41 ../user/create_account_form.php:87
+#: ../user/account_finish.php:41 ../user/create_account_form.php:79
msgid "Identifies you on our web site. Use your real name or a nickname."
msgstr ""
-#: ../user/account_finish.php:45 ../user/create_account_form.php:106
+#: ../user/account_finish.php:45 ../user/create_account_form.php:98
msgid "Select the country you want to represent, if any."
msgstr ""
-#: ../user/account_finish.php:51 ../user/create_account_form.php:112
+#: ../user/account_finish.php:51 ../user/create_account_form.php:104
msgid "Postal or ZIP Code"
msgstr ""
-#: ../user/account_finish.php:51 ../user/create_account_form.php:112
+#: ../user/account_finish.php:51 ../user/create_account_form.php:104
msgid "Optional"
msgstr ""
@@ -2233,11 +2257,12 @@ msgstr ""
msgid "HTML tags not allowed in name"
msgstr ""
-#: ../user/add_venue.php:85
+#: ../user/add_venue.php:81
msgid "Add %1 preferences for %2"
msgstr ""
-#: ../user/apps.php:32 ../user/sample_index.php:109
+#: ../user/apps.php:32 ../user/bs_sample_index.php:55
+#: ../user/sample_index.php:120
msgid "Applications"
msgstr ""
@@ -2249,15 +2274,15 @@ msgid ""
"computer. This happens automatically; you don't have to do anything."
msgstr ""
-#: ../user/apps.php:49
+#: ../user/apps.php:50
msgid "Platform"
msgstr ""
-#: ../user/apps.php:50
+#: ../user/apps.php:51
msgid "Version"
msgstr ""
-#: ../user/apps.php:51
+#: ../user/apps.php:52
msgid "Installation time"
msgstr ""
@@ -2363,111 +2388,170 @@ msgid ""
"the raw tag itself will display instead of the formatted text."
msgstr ""
-#: ../user/create_account_action.php:26
-msgid "Can't create account"
+#: ../user/bs_sample_index.php:44
+msgid "Participants"
msgstr ""
-#: ../user/create_account_action.php:29
-msgid "Click your browser's <b>Back</b> button to try again."
+#: ../user/bs_sample_index.php:46
+msgid "Do work"
msgstr ""
-#: ../user/create_account_action.php:38 ../user/create_account_action.php:40
-#: ../user/create_account_form.php:43
-msgid "Account creation is disabled"
+#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
+#: ../user/home.php:49 ../project.sample/project.inc:43
+msgid "Your account"
msgstr ""
-#: ../user/create_account_action.php:41
-msgid ""
-"Sorry, this project has disabled the creation of new accounts.\n"
-"Please try again later."
+#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
+msgid "view stats, modify preferences"
+msgstr ""
+
+#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
+#: ../user/team.php:25
+msgid "Teams"
+msgstr ""
+
+#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
+msgid "create or join a team"
+msgstr ""
+
+#: ../user/bs_sample_index.php:51 ../user/sample_index.php:191
+msgid "User of the day"
+msgstr ""
+
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
+msgid "Server status"
+msgstr ""
+
+#: ../user/bs_sample_index.php:60 ../user/profile_menu.php:32
+#: ../user/sample_index.php:127
+msgid "Profiles"
+msgstr ""
+
+#: ../user/bs_sample_index.php:61
+msgid "User search"
+msgstr ""
+
+#: ../user/bs_sample_index.php:64
+msgid "Statistics"
+msgstr ""
+
+#: ../user/bs_sample_index.php:65 ../user/stats.php:30
+#: ../user/top_users.php:116
+msgid "Top participants"
+msgstr ""
+
+#: ../user/bs_sample_index.php:66 ../user/stats.php:31
+msgid "Top computers"
+msgstr ""
+
+#: ../user/bs_sample_index.php:67 ../user/stats.php:32 ../user/team.php:46
+msgid "Top teams"
+msgstr ""
+
+#: ../user/bs_sample_index.php:68 ../user/gpu_list.php:182
+#: ../user/stats.php:33
+msgid "Top GPU models"
+msgstr ""
+
+#: ../user/bs_sample_index.php:70
+msgid "Languages"
msgstr ""
-#: ../user/create_account_action.php:53
+#: ../user/bs_sample_index.php:149 ../user/info.php:24
+#: ../user/sample_index.php:79
+msgid "Read our rules and policies"
+msgstr ""
+
+#: ../user/create_account_action.php:26
+msgid "Can't create account"
+msgstr ""
+
+#: ../user/create_account_action.php:29
+msgid "Click your browser's <b>Back</b> button to try again."
+msgstr ""
+
+#: ../user/create_account_action.php:47
msgid "Your reCAPTCHA response was not correct. Please try again."
msgstr ""
-#: ../user/create_account_action.php:77
+#: ../user/create_account_action.php:70
msgid "You must supply an invitation code to create an account."
msgstr ""
-#: ../user/create_account_action.php:80
+#: ../user/create_account_action.php:73
msgid "The invitation code you gave is not valid."
msgstr ""
-#: ../user/create_account_action.php:91
+#: ../user/create_account_action.php:84
msgid ""
"Invalid email address: you must enter a valid address of the form name at domain"
msgstr ""
-#: ../user/create_account_action.php:95
+#: ../user/create_account_action.php:88
msgid "There's already an account with that email address."
msgstr ""
-#: ../user/create_account_action.php:101 ../user/edit_passwd_action.php:33
+#: ../user/create_account_action.php:94 ../user/edit_passwd_action.php:33
msgid "New passwords are different"
msgstr ""
-#: ../user/create_account_action.php:108 ../user/edit_passwd_action.php:41
+#: ../user/create_account_action.php:101 ../user/edit_passwd_action.php:41
msgid "Passwords may only include ASCII characters."
msgstr ""
-#: ../user/create_account_action.php:113 ../user/edit_passwd_action.php:45
+#: ../user/create_account_action.php:106 ../user/edit_passwd_action.php:45
msgid "New password is too short: minimum password length is %1 characters."
msgstr ""
-#: ../user/create_account_action.php:134
+#: ../user/create_account_action.php:127
msgid "Couldn't create account"
msgstr ""
#: ../user/create_account_form.php:44
-msgid "Account creation is currently disabled. Please try again later."
-msgstr ""
-
-#: ../user/create_account_form.php:53
msgid ""
"NOTE: If you use the BOINC Manager, don't use this form. Just run BOINC, "
"select Add Project, and enter an email address and password."
msgstr ""
-#: ../user/create_account_form.php:69
+#: ../user/create_account_form.php:61
msgid ""
"This account will belong to the team %1 and will have the project "
"preferences of its founder."
msgstr ""
-#: ../user/create_account_form.php:81
+#: ../user/create_account_form.php:73
msgid "Invitation Code"
msgstr ""
-#: ../user/create_account_form.php:81
+#: ../user/create_account_form.php:73
msgid "A valid invitation code is required to create an account."
msgstr ""
-#: ../user/create_account_form.php:91
+#: ../user/create_account_form.php:83
msgid "Email Address"
msgstr ""
-#: ../user/create_account_form.php:91
+#: ../user/create_account_form.php:83
msgid "Must be a valid address of the form 'name at domain'."
msgstr ""
-#: ../user/create_account_form.php:100 ../user/edit_email_form.php:48
+#: ../user/create_account_form.php:92 ../user/edit_email_form.php:47
msgid "Password"
msgstr ""
-#: ../user/create_account_form.php:101
+#: ../user/create_account_form.php:93
msgid "Must be at least %1 characters"
msgstr ""
-#: ../user/create_account_form.php:104
+#: ../user/create_account_form.php:96
msgid "Confirm password"
msgstr ""
-#: ../user/create_account_form.php:121
+#: ../user/create_account_form.php:113
msgid "Please enter the words shown in the image"
msgstr ""
-#: ../user/create_account_form.php:127
+#: ../user/create_account_form.php:119
msgid "Create account"
msgstr ""
@@ -2613,7 +2697,7 @@ msgstr ""
#: ../user/delete_account.php:79 ../user/delete_profile.php:52
#: ../user/donations.php:322 ../user/donations.php:326 ../user/friend.php:238
-#: ../user/prefs_remove.php:55 ../user/user_search.php:59
+#: ../user/prefs_remove.php:52 ../user/user_search.php:59
#: ../user/user_search.php:64
msgid "Yes"
msgstr ""
@@ -2816,23 +2900,23 @@ msgid ""
"again later."
msgstr ""
-#: ../user/edit_email_form.php:28 ../user/edit_email_form.php:52
+#: ../user/edit_email_form.php:27 ../user/edit_email_form.php:51
msgid "Change email address"
msgstr ""
-#: ../user/edit_email_form.php:37
+#: ../user/edit_email_form.php:36
msgid "Change the email address of your account"
msgstr ""
-#: ../user/edit_email_form.php:38
+#: ../user/edit_email_form.php:37
msgid "New email address"
msgstr ""
-#: ../user/edit_email_form.php:39
+#: ../user/edit_email_form.php:38
msgid "Must be a valid address of the form 'name at domain'"
msgstr ""
-#: ../user/edit_email_form.php:49
+#: ../user/edit_email_form.php:48
msgid "No password?"
msgstr ""
@@ -3041,8 +3125,8 @@ msgstr ""
msgid "Invalid password"
msgstr ""
-#: ../user/edit_passwd_action.php:63 ../user/edit_passwd_form.php:28
-#: ../user/edit_passwd_form.php:58
+#: ../user/edit_passwd_action.php:63 ../user/edit_passwd_form.php:25
+#: ../user/edit_passwd_form.php:55
msgid "Change password"
msgstr ""
@@ -3056,35 +3140,35 @@ msgid ""
"later."
msgstr ""
-#: ../user/edit_passwd_form.php:42
+#: ../user/edit_passwd_form.php:39
msgid "You can identify yourself using either"
msgstr ""
-#: ../user/edit_passwd_form.php:44
+#: ../user/edit_passwd_form.php:41
msgid "your email address and old password"
msgstr ""
-#: ../user/edit_passwd_form.php:45
+#: ../user/edit_passwd_form.php:42
msgid "your account key"
msgstr ""
-#: ../user/edit_passwd_form.php:49
+#: ../user/edit_passwd_form.php:46
msgid "Current password"
msgstr ""
-#: ../user/edit_passwd_form.php:51
+#: ../user/edit_passwd_form.php:48
msgid "<b>OR</b>: Account key"
msgstr ""
-#: ../user/edit_passwd_form.php:52
+#: ../user/edit_passwd_form.php:49
msgid "Get account key by email"
msgstr ""
-#: ../user/edit_passwd_form.php:56
+#: ../user/edit_passwd_form.php:53
msgid "New password"
msgstr ""
-#: ../user/edit_passwd_form.php:57
+#: ../user/edit_passwd_form.php:54
msgid "New password, again"
msgstr ""
@@ -3100,23 +3184,23 @@ msgstr ""
msgid "Couldn't update user info."
msgstr ""
-#: ../user/edit_user_info_form.php:29
+#: ../user/edit_user_info_form.php:27
msgid "Edit account information"
msgstr ""
-#: ../user/edit_user_info_form.php:34
+#: ../user/edit_user_info_form.php:32
msgid "Name %1 real name or nickname%2"
msgstr ""
-#: ../user/edit_user_info_form.php:37
+#: ../user/edit_user_info_form.php:35
msgid "URL %1 of your web page; optional%2"
msgstr ""
-#: ../user/edit_user_info_form.php:45
+#: ../user/edit_user_info_form.php:43
msgid "Postal (ZIP) code %1 Optional%2"
msgstr ""
-#: ../user/edit_user_info_form.php:49
+#: ../user/edit_user_info_form.php:47
msgid "Update info"
msgstr ""
@@ -3309,52 +3393,52 @@ msgstr ""
#: ../user/ffmail_action.php:94
msgid ""
-"You forgot to enter your friends' names and/or email addresses; Please "
-"%1return to the form%2 and enter them."
+"You forgot to enter your friends' names and/or email addresses; Please %"
+"1return to the form%2 and enter them."
msgstr ""
-#: ../user/ffmail_form.php:31
+#: ../user/ffmail_form.php:30
msgid ""
-"This project hasn\\'t created an email message - please notify its "
+"This project hasn't created an email message - please notify its "
"administrators"
msgstr ""
-#: ../user/ffmail_form.php:34
+#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
msgstr ""
-#: ../user/ffmail_form.php:38
+#: ../user/ffmail_form.php:37
msgid "Help us by telling your friends, family and coworkers about %1"
msgstr ""
-#: ../user/ffmail_form.php:40
+#: ../user/ffmail_form.php:39
msgid ""
"Fill in this form with the names and email addresses of people you think "
"might be interested in %1. We'll send them an email in your name, and you "
"can add your own message if you like."
msgstr ""
-#: ../user/ffmail_form.php:43
+#: ../user/ffmail_form.php:42
msgid "Your name:"
msgstr ""
-#: ../user/ffmail_form.php:43
+#: ../user/ffmail_form.php:42
msgid "Your email address:"
msgstr ""
-#: ../user/ffmail_form.php:49
+#: ../user/ffmail_form.php:48
msgid "Friend's name:"
msgstr ""
-#: ../user/ffmail_form.php:49
+#: ../user/ffmail_form.php:48
msgid "Friend's email address:"
msgstr ""
-#: ../user/ffmail_form.php:57
+#: ../user/ffmail_form.php:56
msgid "Additional message (optional)"
msgstr ""
-#: ../user/ffmail_form.php:60
+#: ../user/ffmail_form.php:59
msgid "Send"
msgstr ""
@@ -3552,8 +3636,8 @@ msgstr ""
#: ../user/forum_help_desk.php:30
msgid ""
-"Talk live via Skype with a volunteer, in any of several languages. Go to "
-"%1BOINC Online Help%2."
+"Talk live via Skype with a volunteer, in any of several languages. Go to %"
+"1BOINC Online Help%2."
msgstr ""
#: ../user/forum_help_desk.php:44 ../user/forum_index.php:92
@@ -3784,8 +3868,8 @@ msgid ""
"modify your text and try again."
msgstr ""
-#: ../user/forum_reply.php:88 ../user/forum_thread.php:156
-#: ../user/forum_thread.php:272
+#: ../user/forum_reply.php:88 ../user/forum_thread.php:158
+#: ../user/forum_thread.php:274
msgid "Post to thread"
msgstr ""
@@ -4026,107 +4110,103 @@ msgstr ""
msgid "This thread has been hidden by moderators."
msgstr ""
-#: ../user/forum_thread.php:127
+#: ../user/forum_thread.php:128
msgid "My question was answered"
msgstr ""
-#: ../user/forum_thread.php:128
+#: ../user/forum_thread.php:129
msgid "Click here if your question has been adequately answered"
msgstr ""
-#: ../user/forum_thread.php:136
+#: ../user/forum_thread.php:137
msgid "I've also got this question"
msgstr ""
-#: ../user/forum_thread.php:157 ../user/forum_thread.php:273
+#: ../user/forum_thread.php:159 ../user/forum_thread.php:275
msgid "Add a new message to this thread"
msgstr ""
-#: ../user/forum_thread.php:169
+#: ../user/forum_thread.php:171
msgid "Unsubscribe"
msgstr ""
-#: ../user/forum_thread.php:170
+#: ../user/forum_thread.php:172
msgid "You are subscribed to this thread. Click here to unsubscribe."
msgstr ""
-#: ../user/forum_thread.php:176
+#: ../user/forum_thread.php:178
msgid "Subscribe"
msgstr ""
-#: ../user/forum_thread.php:177
+#: ../user/forum_thread.php:179
msgid "Click to get email when there are new posts in this thread"
msgstr ""
-#: ../user/forum_thread.php:188
+#: ../user/forum_thread.php:190
msgid "Unhide this thread"
msgstr ""
-#: ../user/forum_thread.php:194
+#: ../user/forum_thread.php:196
msgid "Hide this thread"
msgstr ""
-#: ../user/forum_thread.php:200
+#: ../user/forum_thread.php:202
msgid "Make unsticky"
msgstr ""
-#: ../user/forum_thread.php:201
+#: ../user/forum_thread.php:203
msgid "Make this thread not sticky"
msgstr ""
-#: ../user/forum_thread.php:206
+#: ../user/forum_thread.php:208
msgid "Make sticky"
msgstr ""
-#: ../user/forum_thread.php:207
+#: ../user/forum_thread.php:209
msgid "Make this thread sticky"
msgstr ""
-#: ../user/forum_thread.php:213
+#: ../user/forum_thread.php:215
msgid "Unlock"
msgstr ""
-#: ../user/forum_thread.php:214
+#: ../user/forum_thread.php:216
msgid "Unlock this thread"
msgstr ""
-#: ../user/forum_thread.php:219
+#: ../user/forum_thread.php:221
msgid "Lock"
msgstr ""
-#: ../user/forum_thread.php:220
+#: ../user/forum_thread.php:222
msgid "Lock this thread"
msgstr ""
-#: ../user/forum_thread.php:227
+#: ../user/forum_thread.php:229
msgid "Move this thread to a different forum"
msgstr ""
-#: ../user/forum_thread.php:232
+#: ../user/forum_thread.php:234
msgid "Edit title"
msgstr ""
-#: ../user/forum_thread.php:233
+#: ../user/forum_thread.php:235
msgid "Edit thread title"
msgstr ""
-#: ../user/forum_thread.php:243
+#: ../user/forum_thread.php:245
msgid "Export as Notice"
msgstr ""
-#: ../user/forum_thread.php:244
-msgid "Export this news item as a Notice"
-msgstr ""
-
-#: ../user/forum_thread.php:249
+#: ../user/forum_thread.php:251
msgid "Don't export"
msgstr ""
-#: ../user/forum_thread.php:250
+#: ../user/forum_thread.php:252
msgid "Don't export this news item as a Notice"
msgstr ""
-#: ../user/forum_thread.php:258 ../user/forum_thread.php:260
+#: ../user/forum_thread.php:260 ../user/forum_thread.php:262
msgid "Sort"
msgstr ""
@@ -4297,9 +4377,8 @@ msgstr ""
#: ../user/get_passwd.php:50
msgid ""
-"Go to the BOINC data directory on your computer (on Windows this is usually "
-"<b>C:\\Documents and Settings\\All Users\\Application Data\\BOINC</b> or "
-"<b>C:\\Program Files\\BOINC</b>."
+"Go to the BOINC data directory on your computer (its location is written to "
+"the Event Log at startup)."
msgstr ""
#: ../user/get_passwd.php:51
@@ -4332,10 +4411,6 @@ msgstr ""
msgid "No GPU tasks reported"
msgstr ""
-#: ../user/gpu_list.php:182 ../user/stats.php:33
-msgid "Top GPU models"
-msgstr ""
-
#: ../user/gpu_list.php:183
msgid ""
"The following lists show the most productive GPU models on different "
@@ -4354,55 +4429,47 @@ msgstr ""
msgid "If you have not already done so, %1download BOINC client software%2."
msgstr ""
-#: ../user/home.php:49 ../project.sample/project.inc:47
-msgid "Your account"
-msgstr ""
-
-#: ../user/host_app_versions.php:26
-msgid "nvidia GPU"
-msgstr ""
-
-#: ../user/host_app_versions.php:36
+#: ../user/host_app_versions.php:37
msgid "Anonymous platform, missing app"
msgstr ""
-#: ../user/host_app_versions.php:39
+#: ../user/host_app_versions.php:40
msgid "anonymous platform"
msgstr ""
-#: ../user/host_app_versions.php:42
+#: ../user/host_app_versions.php:43
msgid "Missing app version"
msgstr ""
-#: ../user/host_app_versions.php:44
+#: ../user/host_app_versions.php:45
msgid "Missing app"
msgstr ""
-#: ../user/host_app_versions.php:46
+#: ../user/host_app_versions.php:47
msgid "Missing platform"
msgstr ""
-#: ../user/host_app_versions.php:55
+#: ../user/host_app_versions.php:56
msgid "Number of tasks completed"
msgstr ""
-#: ../user/host_app_versions.php:56
+#: ../user/host_app_versions.php:57
msgid "Max tasks per day"
msgstr ""
-#: ../user/host_app_versions.php:57
+#: ../user/host_app_versions.php:58
msgid "Number of tasks today"
msgstr ""
-#: ../user/host_app_versions.php:58
+#: ../user/host_app_versions.php:59
msgid "Consecutive valid tasks"
msgstr ""
-#: ../user/host_app_versions.php:62
+#: ../user/host_app_versions.php:63
msgid "Average processing rate"
msgstr ""
-#: ../user/host_app_versions.php:71
+#: ../user/host_app_versions.php:72
msgid "Application details for host %1"
msgstr ""
@@ -4561,10 +4628,6 @@ msgstr ""
msgid "You can also use ampersand notation for special characters."
msgstr ""
-#: ../user/info.php:24 ../user/sample_index.php:74
-msgid "Read our rules and policies"
-msgstr ""
-
#: ../user/info.php:35
msgid "Run %1 only on authorized computers"
msgstr ""
@@ -4617,8 +4680,8 @@ msgstr ""
#: ../user/info.php:45
msgid ""
"To participate in %1, you must give an address where you receive email. This "
-"address will not be shown on the %1 web site or shared with organizations. "
-"%1 may send you periodic newsletters; however, you can opt out at any time."
+"address will not be shown on the %1 web site or shared with organizations. %"
+"1 may send you periodic newsletters; however, you can opt out at any time."
msgstr ""
#: ../user/info.php:46
@@ -4671,8 +4734,8 @@ msgstr ""
#: ../user/info.php:54
msgid ""
"%1 and %2 assume no liability for damage to your computer, loss of data, or "
-"any other event or condition that may occur as a result of participating in "
-"%1."
+"any other event or condition that may occur as a result of participating in %"
+"1."
msgstr ""
#: ../user/info.php:56
@@ -4693,88 +4756,88 @@ msgid ""
"own risk."
msgstr ""
-#: ../user/language_select.php:44
+#: ../user/language_select.php:47
msgid "Language selection"
msgstr ""
-#: ../user/language_select.php:70
+#: ../user/language_select.php:73
msgid ""
"This web site is available in several languages. The currently selected "
"language is %1."
msgstr ""
-#: ../user/language_select.php:75
+#: ../user/language_select.php:78
msgid ""
"Normally the choice of language is determined by your browser's language "
"setting, which is: %1. You can change this setting using:"
msgstr ""
-#: ../user/language_select.php:80
+#: ../user/language_select.php:83
msgid "Firefox: Tools/Options/General"
msgstr ""
-#: ../user/language_select.php:82
+#: ../user/language_select.php:85
msgid "Microsoft IE: Tools/Internet Options/Languages"
msgstr ""
-#: ../user/language_select.php:86
+#: ../user/language_select.php:89
msgid ""
"Or you can select a language by clicking on one of the links. This will "
"send your browser a cookie; make sure your browser accepts cookies from our "
"domain."
msgstr ""
-#: ../user/language_select.php:92
+#: ../user/language_select.php:95
msgid "Language name (click to select)"
msgstr ""
-#: ../user/language_select.php:94
+#: ../user/language_select.php:97
msgid "Use browser language setting"
msgstr ""
-#: ../user/language_select.php:110
+#: ../user/language_select.php:113
msgid ""
-"Translations are done by volunteers. If your native language is not here, "
-"%1you can provide a translation%2."
+"Translations are done by volunteers. If your native language is not here, %"
+"1you can provide a translation%2."
msgstr ""
-#: ../user/login_form.php:52
+#: ../user/login_form.php:45
msgid "Email address:"
msgstr ""
-#: ../user/login_form.php:52
+#: ../user/login_form.php:45
msgid "forgot email address?"
msgstr ""
-#: ../user/login_form.php:54
+#: ../user/login_form.php:48
msgid "Password:"
msgstr ""
-#: ../user/login_form.php:54
+#: ../user/login_form.php:48
msgid "forgot password?"
msgstr ""
-#: ../user/login_form.php:57
+#: ../user/login_form.php:51
msgid "Stay logged in"
msgstr ""
-#: ../user/login_form.php:63
+#: ../user/login_form.php:62
msgid "or %1create an account%2."
msgstr ""
-#: ../user/merge_by_name.php:33
+#: ../user/merge_by_name.php:31
msgid "Processing %1"
msgstr ""
-#: ../user/merge_by_name.php:45
+#: ../user/merge_by_name.php:43
msgid "Merged %1 into %2"
msgstr ""
-#: ../user/merge_by_name.php:74
+#: ../user/merge_by_name.php:72
msgid "Return to the list of your computers"
msgstr ""
-#: ../user/merge_by_name.php:78
+#: ../user/merge_by_name.php:76
msgid ""
"This operation merges computers based on their domain name.\n"
" <p>\n"
@@ -4784,11 +4847,11 @@ msgid ""
" <p>"
msgstr ""
-#: ../user/merge_by_name.php:84
+#: ../user/merge_by_name.php:82
msgid "Go ahead and do this"
msgstr ""
-#: ../user/merge_by_name.php:85
+#: ../user/merge_by_name.php:83
msgid "Return to the list of computers"
msgstr ""
@@ -4840,22 +4903,26 @@ msgid ""
msgstr ""
#: ../user/pending.php:66
+msgid "Pending credit"
+msgstr ""
+
+#: ../user/pending.php:68
msgid "Result ID"
msgstr ""
-#: ../user/pending.php:66
+#: ../user/pending.php:68
msgid "Workunit ID"
msgstr ""
-#: ../user/pending.php:66
+#: ../user/pending.php:68
msgid "Host ID"
msgstr ""
-#: ../user/pending.php:66
+#: ../user/pending.php:68
msgid "Claimed credit"
msgstr ""
-#: ../user/pending.php:79
+#: ../user/pending.php:81
msgid "Pending credit: %1"
msgstr ""
@@ -4962,7 +5029,7 @@ msgstr ""
msgid "No, cancel"
msgstr ""
-#: ../user/pm.php:260 ../user/team_admins.php:97
+#: ../user/pm.php:260 ../user/team_admins.php:98
msgid "no such user"
msgstr ""
@@ -4982,14 +5049,14 @@ msgstr ""
msgid "Unknown action"
msgstr ""
-#: ../user/prefs.php:35
+#: ../user/prefs.php:32
msgid ""
"Your preferences have been updated, and\n"
" will take effect when your computer communicates with %1\n"
" or you issue the %2Update%3 command from the BOINC Manager."
msgstr ""
-#: ../user/prefs.php:44
+#: ../user/prefs.php:41
msgid ""
"Your preferences have been reset to the defaults, and\n"
" will take effect when your computer communicates with %1\n"
@@ -5004,71 +5071,67 @@ msgstr ""
msgid "Back to preferences"
msgstr ""
-#: ../user/prefs_remove.php:48
+#: ../user/prefs_remove.php:45
msgid "Confirm delete preferences"
msgstr ""
-#: ../user/prefs_remove.php:51
+#: ../user/prefs_remove.php:48
msgid "Are you sure you want to delete your separate %1 preferences for %2?"
msgstr ""
-#: ../user/prefs_remove.php:55
+#: ../user/prefs_remove.php:52
msgid "Remove preferences"
msgstr ""
-#: ../user/prefs_remove.php:57
+#: ../user/prefs_remove.php:54
msgid "Cancel"
msgstr ""
-#: ../user/profile_menu.php:35 ../user/sample_index.php:116
-msgid "Profiles"
-msgstr ""
-
-#: ../user/profile_menu.php:38
+#: ../user/profile_menu.php:35
msgid ""
"%1Profiles%2 let individuals share backgrounds and opinions with the %3 "
"community."
msgstr ""
-#: ../user/profile_menu.php:39
+#: ../user/profile_menu.php:36
msgid ""
"Explore the diversity of your fellow volunteers, and contribute your own "
"views for others to enjoy."
msgstr ""
-#: ../user/profile_menu.php:40
+#: ../user/profile_menu.php:37
msgid ""
"If you haven't already, you can %1create your own user profile%2 for others "
"to see!"
msgstr ""
-#: ../user/profile_menu.php:45
+#: ../user/profile_menu.php:42
msgid "User of the Day"
msgstr ""
-#: ../user/profile_menu.php:58
+#: ../user/profile_menu.php:57
msgid "User Profile Explorer"
msgstr ""
-#: ../user/profile_menu.php:61
+#: ../user/profile_menu.php:60
msgid "View the %1User Picture Gallery%2."
msgstr ""
-#: ../user/profile_menu.php:62
+#: ../user/profile_menu.php:61
msgid "Browse profiles %1by country%2."
msgstr ""
-#: ../user/profile_menu.php:63
+#: ../user/profile_menu.php:62
msgid ""
"Browse profiles %1at random%2, %3at random with pictures%2, or %4at random "
"without pictures%2."
msgstr ""
-#: ../user/profile_menu.php:67
+#: ../user/profile_menu.php:66
msgid "Alphabetical profile listings:"
msgstr ""
-#: ../user/profile_menu.php:73
+#: ../user/profile_menu.php:72
msgid "Search profile text"
msgstr ""
@@ -5124,11 +5187,7 @@ msgstr ""
msgid "No profiles found containing '%1'"
msgstr ""
-#: ../user/result.php:30
-msgid "No such task"
-msgstr ""
-
-#: ../user/result.php:32
+#: ../user/result.php:35
msgid "Task %1"
msgstr ""
@@ -5148,159 +5207,151 @@ msgstr ""
msgid "Missing user ID or host ID"
msgstr ""
-#: ../user/results.php:102
+#: ../user/results.php:107
msgid "No tasks to display"
msgstr ""
-#: ../user/sample_index.php:180
-msgid "User of the day"
-msgstr ""
-
-#: ../user/server_status.php:91
+#: ../user/server_status.php:97
msgid "Running"
msgstr ""
-#: ../user/server_status.php:94
+#: ../user/server_status.php:100
msgid "Not Running"
msgstr ""
-#: ../user/server_status.php:97
+#: ../user/server_status.php:103
msgid "Disabled"
msgstr ""
-#: ../user/server_status.php:236
+#: ../user/server_status.php:231
msgid "Project status"
msgstr ""
-#: ../user/server_status.php:238
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr ""
-#: ../user/server_status.php:244
-msgid "Server status"
-msgstr ""
-
-#: ../user/server_status.php:246
+#: ../user/server_status.php:241
msgid "Program"
msgstr ""
-#: ../user/server_status.php:246
+#: ../user/server_status.php:241
msgid "Host"
msgstr ""
-#: ../user/server_status.php:257
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr ""
-#: ../user/server_status.php:263
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr ""
-#: ../user/server_status.php:266
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr ""
-#: ../user/server_status.php:299
+#: ../user/server_status.php:294
msgid "Running:"
msgstr ""
-#: ../user/server_status.php:300
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr ""
-#: ../user/server_status.php:301
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr ""
-#: ../user/server_status.php:302
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr ""
-#: ../user/server_status.php:303
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr ""
-#: ../user/server_status.php:304
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr ""
-#: ../user/server_status.php:308
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr ""
-#: ../user/server_status.php:314
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr ""
-#: ../user/server_status.php:331
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr ""
-#: ../user/server_status.php:336 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr ""
-#: ../user/server_status.php:341
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr ""
-#: ../user/server_status.php:346
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr ""
-#: ../user/server_status.php:351
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:356
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr ""
-#: ../user/server_status.php:373
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr ""
-#: ../user/server_status.php:380
+#: ../user/server_status.php:374
msgid "Users"
msgstr ""
-#: ../user/server_status.php:382 ../user/server_status.php:398
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr ""
-#: ../user/server_status.php:387 ../user/server_status.php:403
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr ""
-#: ../user/server_status.php:392 ../user/server_status.php:408
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr ""
-#: ../user/server_status.php:414
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr ""
-#: ../user/server_status.php:423
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr ""
-#: ../user/server_status.php:426 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr ""
-#: ../user/server_status.php:427
+#: ../user/server_status.php:424
msgid "unsent"
msgstr ""
-#: ../user/server_status.php:428
+#: ../user/server_status.php:425
msgid "in progress"
msgstr ""
-#: ../user/server_status.php:429
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr ""
-#: ../user/server_status.php:430
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr ""
@@ -5316,18 +5367,6 @@ msgstr ""
msgid "Statistics for %1"
msgstr ""
-#: ../user/stats.php:30 ../user/top_users.php:116
-msgid "Top participants"
-msgstr ""
-
-#: ../user/stats.php:31
-msgid "Top computers"
-msgstr ""
-
-#: ../user/stats.php:32 ../user/team.php:46
-msgid "Top teams"
-msgstr ""
-
#: ../user/stats.php:37
msgid ""
"More detailed statistics for %1 and other BOINC-based projects are available "
@@ -5346,10 +5385,6 @@ msgid ""
"projects from several sites; see your %1home page%2."
msgstr ""
-#: ../user/team.php:25
-msgid "Teams"
-msgstr ""
-
#: ../user/team.php:27
msgid "%1 participants may form %2teams%3."
msgstr ""
@@ -5387,7 +5422,7 @@ msgstr ""
msgid "To join a team, visit its team page and click %1Join this team%2."
msgstr ""
-#: ../user/team.php:41 ../user/team_search.php:179
+#: ../user/team.php:41 ../user/team_search.php:180
msgid "Find a team"
msgstr ""
@@ -5480,20 +5515,20 @@ msgstr ""
msgid "failed to remove admin"
msgstr ""
-#: ../user/team_admins.php:98
+#: ../user/team_admins.php:99
msgid "User is not member of team"
msgstr ""
-#: ../user/team_admins.php:100
+#: ../user/team_admins.php:101
msgid "%1 is already an admin of %2"
msgstr ""
-#: ../user/team_admins.php:104
+#: ../user/team_admins.php:105
msgid "Couldn't add admin"
msgstr ""
-#: ../user/team_admins.php:110 ../user/team_manage.php:85
-#: ../user/team_quit_form.php:30 ../user/team_remove_inactive_action.php:28
+#: ../user/team_admins.php:111 ../user/team_manage.php:85
+#: ../user/team_quit_form.php:28 ../user/team_remove_inactive_action.php:28
msgid "No such team"
msgstr ""
@@ -5562,6 +5597,10 @@ msgstr ""
msgid "Change founder"
msgstr ""
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr ""
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr ""
@@ -5844,7 +5883,7 @@ msgid ""
msgstr ""
#: ../user/team_join.php:32 ../user/team_join_action.php:32
-#: ../user/team_join_form.php:31
+#: ../user/team_join_form.php:29
msgid "The team %1 is not joinable."
msgstr ""
@@ -5868,23 +5907,23 @@ msgstr ""
msgid "You have joined %1."
msgstr ""
-#: ../user/team_join_form.php:34
+#: ../user/team_join_form.php:32
msgid "Join %1"
msgstr ""
-#: ../user/team_join_form.php:35
+#: ../user/team_join_form.php:33
msgid "Please note:"
msgstr ""
-#: ../user/team_join_form.php:37
+#: ../user/team_join_form.php:35
msgid "Joining a team gives its founder access to your email address."
msgstr ""
-#: ../user/team_join_form.php:38
+#: ../user/team_join_form.php:36
msgid "Joining a team does not affect your account's credit."
msgstr ""
-#: ../user/team_join_form.php:45
+#: ../user/team_join_form.php:43
msgid "Join team"
msgstr ""
@@ -5906,8 +5945,8 @@ msgstr ""
#: ../user/team_lookup.php:104
msgid ""
-"End of results. %1 If you cannot find the team you are looking for, you may "
-"%2create a team%3 yourself."
+"End of results. %1 If you cannot find the team you are looking for, you may %"
+"2create a team%3 yourself."
msgstr ""
#: ../user/team_manage.php:26
@@ -6012,27 +6051,27 @@ msgstr ""
msgid "Team %1 deleted"
msgstr ""
-#: ../user/team_members.php:35
+#: ../user/team_members.php:36
msgid "Limit exceeded: Can only display the first 1000 members."
msgstr ""
-#: ../user/team_members.php:47
+#: ../user/team_members.php:49
msgid "Members of %1"
msgstr ""
-#: ../user/team_quit_action.php:34
+#: ../user/team_quit_action.php:32
msgid "Unable to quit team"
msgstr ""
-#: ../user/team_quit_action.php:35
+#: ../user/team_quit_action.php:33
msgid "Team doesn't exist, or you don't belong to it."
msgstr ""
-#: ../user/team_quit_form.php:33
+#: ../user/team_quit_form.php:31
msgid "Quit %1"
msgstr ""
-#: ../user/team_quit_form.php:34
+#: ../user/team_quit_form.php:32
msgid ""
"<strong>Please note before quitting a team:</strong>\n"
" <ul>\n"
@@ -6043,7 +6082,7 @@ msgid ""
" </ul>"
msgstr ""
-#: ../user/team_quit_form.php:42
+#: ../user/team_quit_form.php:40
msgid "Quit Team"
msgstr ""
@@ -6106,17 +6145,17 @@ msgstr ""
msgid "Change your search"
msgstr ""
-#: ../user/team_search.php:180
+#: ../user/team_search.php:181
msgid ""
"You can team up with other people with similar interests, or from the same "
"country, company, or school."
msgstr ""
-#: ../user/team_search.php:182
+#: ../user/team_search.php:183
msgid "Use this form to find teams that might be right for you."
msgstr ""
-#: ../user/team_search.php:187
+#: ../user/team_search.php:188
msgid "%1I'm not interested%2 in joining a team right now."
msgstr ""
@@ -6369,33 +6408,33 @@ msgstr ""
msgid "Pending"
msgstr ""
-#: ../project.sample/project.inc:47
+#: ../project.sample/project.inc:43
msgid "Main page"
msgstr ""
-#: ../project.sample/project.inc:49
+#: ../project.sample/project.inc:45
msgid "Copyright"
msgstr ""
-#: ../project.sample/project.inc:52
+#: ../project.sample/project.inc:48
msgid "Generated"
msgstr ""
-#: ../project.sample/project.inc:83
+#: ../project.sample/project.inc:79
msgid "Your personal background."
msgstr ""
-#: ../project.sample/project.inc:87
+#: ../project.sample/project.inc:83
msgid ""
"Tell us about yourself. You could tell us where you're from, your age, "
"occupation, hobbies, or anything else about yourself."
msgstr ""
-#: ../project.sample/project.inc:91
+#: ../project.sample/project.inc:87
msgid "Your opinions about %1"
msgstr ""
-#: ../project.sample/project.inc:95
+#: ../project.sample/project.inc:91
msgid ""
"Tell us your thoughts about %1<ol>\n"
" <li>Why do you run %1?\n"
diff --git a/locale/templates/BOINC-Setup.pot b/locale/templates/BOINC-Setup.pot
index ecc2cb0..8846f3b 100644
--- a/locale/templates/BOINC-Setup.pot
+++ b/locale/templates/BOINC-Setup.pot
@@ -3,41 +3,37 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
#
+#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 1.1\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-06 16:50-0800\n"
-"PO-Revision-Date: 2013-08-06 16:51-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Generator: Poedit 1.5.5\n"
-"X-Poedit-KeywordsList: _\n"
-"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-Poedit-SearchPath-0: mac_installer\n"
-#: mac_installer/Installer.cpp:132
+#: Installer.cpp:124
#, c-format
-msgid "Sorry, this version of %s requires system 10.4 or higher."
+msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
-#: mac_installer/PostInstall.cpp:131 mac_installer/PostInstall.cpp:1211
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr ""
-#: mac_installer/PostInstall.cpp:132 mac_installer/PostInstall.cpp:1212
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr ""
-#: mac_installer/PostInstall.cpp:134
+#: PostInstall.cpp:133
msgid "Should BOINC run even when no user is logged in?"
msgstr ""
-#: mac_installer/PostInstall.cpp:1491
+#: PostInstall.cpp:1416
#, c-format
msgid ""
"Users who are permitted to administer this computer will automatically be "
@@ -47,26 +43,26 @@ msgid ""
"on this Mac?"
msgstr ""
-#: mac_installer/PostInstall.cpp:1519
+#: PostInstall.cpp:1444
#, c-format
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: mac_installer/uninstall.cpp:80
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: mac_installer/uninstall.cpp:130
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: mac_installer/uninstall.cpp:135
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: mac_installer/uninstall.cpp:150
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -74,21 +70,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: mac_installer/uninstall.cpp:157
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr ""
-#: mac_installer/uninstall.cpp:168
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: mac_installer/uninstall.cpp:224
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: mac_installer/uninstall.cpp:261
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -100,7 +102,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: mac_installer/uninstall.cpp:796
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -108,10 +110,10 @@ msgid ""
"\n"
msgstr ""
-#: mac_installer/uninstall.cpp:1543
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: mac_installer/uninstall.cpp:1544
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/templates/BOINC-Web.pot b/locale/templates/BOINC-Web.pot
index 8086605..d6c0d68 100644
--- a/locale/templates/BOINC-Web.pot
+++ b/locale/templates/BOINC-Web.pot
@@ -9,863 +9,932 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC $Id$\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-06-05 10:25 PDT\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"Last-Translator: Generated automatically from source files\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-SourceCharset: utf-8\n"
-#: projects.inc:14
-msgid "Distributed sensing"
+#: docutil.php:21
+msgid "Search"
msgstr ""
-#: projects.inc:19
-msgid "Stanford University"
+#: docutil.php:103
+msgid "Return to BOINC main page"
msgstr ""
-#: projects.inc:20
-msgid "Seismology"
+#: docutil.php:114
+#, php-format
+msgid "This page is %stranslatable%s."
msgstr ""
-#: projects.inc:21
+#: download.php:39
msgid ""
-"The Quake-Catcher Network is developing the world's largest seismic network "
-"using sensors attached to Internet-connected computers. You must buy a "
-"sensor to participate."
+"We recommend that you also install VirtualBox, so your computer can work on "
+"science projects that require it."
msgstr ""
-#: projects.inc:27
-msgid "BOINC Poland Foundation"
+#: download.php:41
+msgid "Learn more about VirtualBox."
msgstr ""
-#: projects.inc:28
-msgid "Environmental research"
+#: download.php:51
+msgid "Download BOINC + VirtualBox"
msgstr ""
-#: projects.inc:29
-msgid ""
-"This project is creating a free and continuously updated map of radiation "
-"levels by using sensors connected to volunteers' computers. You must buy a "
-"sensor to participate."
+#: download.php:54 download.php:69
+#, php-format
+msgid "for %s"
msgstr ""
-#: projects.inc:33
-msgid ""
-"To participate in these projects you must buy a sensor and attach it to your "
-"computer."
+#: download.php:57 download.php:72
+#, php-format
+msgid "BOINC version %s"
msgstr ""
-#: projects.inc:37
-msgid "Cognitive science and artifical intelligence"
+#: download.php:59
+#, php-format
+msgid "VirtualBox version %s"
msgstr ""
-#: projects.inc:50 projects.inc:318 projects.inc:362 projects.inc:411
-#: projects.inc:418 projects.inc:465
-msgid "Private"
+#: download.php:67
+msgid "Download BOINC"
msgstr ""
-#: projects.inc:51
-msgid "Artificial intelligence"
+#: download.php:123
+msgid ""
+"BOINC is a program that lets you donate your idle computer time to science "
+"projects like SETI at home, Climateprediction.net, Rosetta at home, World "
+"Community Grid, and many others."
msgstr ""
-#: projects.inc:52
+#: download.php:125
msgid ""
-"Parse and convert semantic nets for use in FreeHAL, an artificial "
-"intelligence that uses semantic networks, stemmers, part of speech "
-"databases, and part of speech taggers in order to imitate human behavior in "
-"conversations."
+"After installing BOINC on your computer, you can connect it to as many of "
+"these projects as you like."
msgstr ""
-#: projects.inc:58
-msgid "Biology and Medicine"
+#: download.php:127
+msgid ""
+"You may run this software on a computer only if you own the computer or have "
+"the permission of its owner."
msgstr ""
-#: projects.inc:71
-msgid "University College Dublin"
+#: download.php:132
+msgid ""
+"We recommend that you download BOINC from the Google Play Store or Amazon "
+"Appstore, not from here."
msgstr ""
-#: projects.inc:72
-msgid "Antimalarial drug discovery"
+#: download.php:167
+msgid "System requirements"
msgstr ""
-#: projects.inc:73
-msgid ""
-"The parasite that causes malaria continues to evolve resistance to available "
-"medication. We therefore urgently need to discover new drugs to replace "
-"existing drugs. Importantly, these new drugs need to target NEW proteins in "
-"the parasite. The FightMalaria at Home project is aimed at finding these new "
-"targets."
+#: download.php:168
+msgid "Release notes"
msgstr ""
-#: projects.inc:79
-msgid "University of Karlsruhe (Germany)"
+#: download.php:169 index.php:86
+msgid "Help"
msgstr ""
-#: projects.inc:80
-msgid "Protein structure prediction"
+#: download.php:170
+msgid "All versions"
msgstr ""
-#: projects.inc:81
-msgid ""
-"POEM at HOME uses a computational approach to predict the biologically active "
-"structure of proteins, to understand the signal-processing mechanisms when "
-"the proteins interact with one another, to understand diseases related to "
-"protein malfunction or aggregation, and to develop new drugs on the basis of "
-"the three-dimensions structure of biologically important proteins."
+#: download.php:171
+msgid "Version history"
msgstr ""
-#: projects.inc:87
-msgid "University of Delaware"
+#: download.php:172
+msgid "GPU computing"
msgstr ""
-#: projects.inc:88
-msgid "Study of protein - ligand interactions"
+#: download.php:190
+msgid "BOINC: compute for science"
msgstr ""
-#: projects.inc:89
+#: help.php:12
+#, php-format
msgid ""
-"Docking at Home has both bioscience and computer science goals. The project "
-"aims to further knowledge of the atomic details of protein-ligand "
-"interactions and, by doing so, will search for insights into the discovery "
-"of novel pharmaceuticals."
+"BOINC Online Help lets you talk one-on-one with experienced BOINC users, who "
+"can: %s answer questions about BOINC and volunteer computing; %s walk you "
+"through the process of installing and using BOINC; %s troubleshoot any "
+"problems you might have."
msgstr ""
-#: projects.inc:95
-msgid "Barcelona Biomedical Research Park (PRBB)"
+#: help.php:21
+#, php-format
+msgid ""
+"BOINC Online Help is based on %sSkype%s, an Internet-based telephone system. "
+"Skype is free (both the software and the calls). If you don't already have "
+"Skype, please %sdownload and install it now%s. When you're finished, return "
+"to this page."
msgstr ""
-#: projects.inc:96
-msgid "Molecular simulations of proteins"
+#: help.php:28
+msgid ""
+"The best way to get help is by voice, for which you need either built-in "
+"microphone and speakers or an external headset for your computer. You can "
+"also use Skype's text-based chat system or regular email (if you don't have "
+"Skype) to communicate with Help Volunteers."
msgstr ""
-#: projects.inc:97
+#: help.php:31
msgid ""
-"GPUGrid.net opens novel computational scenarios by the first full-atom "
-"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
-"New biomedical applications suddenly become possible giving a new role to "
-"computational biology for biomedical research."
+"Volunteers speaking several languages are available. Please select a "
+"language:"
msgstr ""
-#: projects.inc:103
-msgid "Technion, Israel"
+#: help.php:47
+msgid "Be a Help Volunteer"
msgstr ""
-#: projects.inc:104
-msgid "Genetic linkage analysis"
+#: help.php:50
+#, php-format
+msgid ""
+"If you're an experienced BOINC user, we encourage you to %sbecome a Help "
+"Volunteer%s. It's a great way to help the cause of scientific research and "
+"volunteer computing - and it's fun!"
msgstr ""
-#: projects.inc:105
+#: help.php:56
+#, php-format
msgid ""
-"Superlink at Technion helps geneticists all over the world find disease-"
-"provoking genes causing some types of diabetes, hypertension (high blood "
-"pressure), cancer, schizophrenia and many others."
+"If you're already a Help Volunteer: to edit your settings, %sclick here%s."
msgstr ""
-#: projects.inc:119
+#: help_funcs.php:107
msgid ""
-"University of Maryland Center for Bioinformatics and Computational Biology"
+"BOINC helpers are unpaid volunteers. Their advice is not endorsed by BOINC "
+"or the University of California."
msgstr ""
-#: projects.inc:120
-msgid "Life science research"
+#: help_funcs.php:110
+msgid "%1Never%2 give email address or password information to BOINC helpers."
msgstr ""
-#: projects.inc:121
-msgid ""
-"The Lattice Project supplies computing power to scientists at the University "
-"of Maryland studying evolutionary relationships based on DNA sequence data; "
-"bacterial, plasmid, and virus protein sequences; and biological diversity in "
-"nature reserves. "
+#: index.php:24
+msgid "Computing power"
msgstr ""
-#: projects.inc:127
-msgid "The Swiss Tropical Institute"
+#: index.php:26
+msgid "Top 100 volunteers"
msgstr ""
-#: projects.inc:128
-msgid "Epidemiology"
+#: index.php:27
+msgid "Statistics"
msgstr ""
-#: projects.inc:129
-msgid ""
-"Simulation models of the transmission dynamics and health effects of malaria "
-"are an important tool for malaria control. They can be used to determine "
-"optimal strategies for delivering mosquito nets, chemotherapy, or new "
-"vaccines which are currently under development and testing. Such modeling "
-"is extremely computer intensive, requiring simulations of large human "
-"populations with a diverse set of parameters related to biological and "
-"social factors that influence the distribution of the disease. "
+#: index.php:55
+msgid "Active:"
msgstr ""
-#: projects.inc:151
-msgid "University of Washington"
+#: index.php:55
+msgid "volunteers,"
msgstr ""
-#: projects.inc:152 projects.inc:160
-msgid "Biology"
+#: index.php:55
+msgid "computers.\n"
msgstr ""
-#: projects.inc:153
-msgid ""
-"Determine the 3-dimensional shapes of proteins in research that may "
-"ultimately lead to finding cures for some major human diseases. By running "
-"Rosetta at home you will help us speed up and extend our research in ways we "
-"couldn't possibly attempt without your help. You will also be helping our "
-"efforts at designing new proteins to fight diseases such as HIV, Malaria, "
-"Cancer, and Alzheimer's"
+#: index.php:56
+msgid "24-hour average:"
msgstr ""
-#: projects.inc:159
-msgid "University of Vienna"
+#: index.php:56
+msgid "PetaFLOPS."
msgstr ""
-#: projects.inc:161
-msgid ""
-"Calculate similarities between proteins. SIMAP provides a public database of "
-"the resulting data, which plays a key role in many bioinformatics research "
-"projects."
+#: index.php:68
+msgid "News"
msgstr ""
-#: projects.inc:167
-msgid "Earth Sciences"
+#: index.php:83
+msgid "Volunteer"
msgstr ""
-#: projects.inc:179
-msgid "Oxford University"
+#: index.php:85
+msgid "Download"
msgstr ""
-#: projects.inc:180
-msgid "Climate study"
+#: index.php:87 index.php:120 index.php:171
+msgid "Documentation"
+msgstr ""
+
+#: index.php:88
+msgid "Add-ons"
msgstr ""
-#: projects.inc:181
+#: index.php:89
+msgid "Links"
+msgstr ""
+
+#: index.php:94
msgid ""
-"Investigate the approximations that have to be made in state-of-the-art "
-"climate models. By running the model thousands of times we hope to find out "
-"how the model responds to slight tweaks to these approximations - slight "
-"enough to not make the approximations any less realistic. This will allow us "
-"to improve our understanding of how sensitive our models are to small "
-"changes and also to things like changes in carbon dioxide and the sulphur "
-"cycle. This will allow us to explore how climate may change in the next "
-"century under a wide range of different scenarios."
+"Use the idle time on your computer (Windows, Mac, Linux, or Android) to cure "
+"diseases, study global warming, discover pulsars, and do many other types of "
+"scientific research. It's safe, secure, and easy:"
msgstr ""
-#: projects.inc:188
-msgid "Astronomy, Physics, and Chemistry"
+#: index.php:96
+msgid "Choose projects"
msgstr ""
-#: projects.inc:209
-msgid "University of Texas at Austin"
+#: index.php:97
+msgid "Download BOINC software"
msgstr ""
-#: projects.inc:210 projects.inc:241
-msgid "Chemistry"
+#: index.php:98
+msgid "Enter an email address and password."
msgstr ""
-#: projects.inc:211
+#: index.php:102
+#, php-format
msgid ""
-"A common problem in theoretical chemistry, condensed matter physics and "
-"materials science is the calculation of the time evolution of an atomic "
-"scale system where, for example, chemical reactions and/or diffusion occur. "
-"Generally the events of interest are quite rare (many orders of magnitude "
-"slower than the vibrational movements of the atoms), and therefore direct "
-"simulations, tracking every movement of the atoms, would take thousands of "
-"years of computer calculations on the fastest present day computer before a "
-"single event of interest can be expected to occur. Our research group is "
-"interested in calculating the long time dynamics of systems."
+"Or, if you run several projects, try an %saccount manager%s such as %"
+"sGridRepublic%s or %sBAM!%s. "
msgstr ""
-#: projects.inc:224
-msgid "University of Illinois at Urbana-Champaign"
+#: index.php:118
+msgid "Compute with BOINC"
msgstr ""
-#: projects.inc:225 projects.inc:233
-msgid "Astronomy"
+#: index.php:121
+msgid "Software updates"
msgstr ""
-#: projects.inc:226
+#: index.php:128
msgid ""
-"The goal of Cosmology at Home is to search for the model that best describes "
-"our Universe and to find the range of models that agree with the available "
-"astronomical particle physics data."
+"%1Scientists%2: use BOINC to create a %3volunteer computing project%4 giving "
+"you the computing power of thousands of CPUs."
msgstr ""
-#: projects.inc:232
-msgid "Rensselaer Polytechnic Institute"
+#: index.php:132
+msgid ""
+"%1Universities%2: use BOINC to create a %3Virtual Campus Supercomputing "
+"Center%4."
msgstr ""
-#: projects.inc:234
-msgid ""
-"The goal of Milkyway at Home is to create a highly accurate three dimensional "
-"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
-"Survey."
+#: index.php:137
+msgid "%1Companies%2: use BOINC for %3desktop Grid computing%4."
msgstr ""
-#: projects.inc:240
-msgid "Leiden University, The Netherlands"
+#: index.php:149
+msgid "The BOINC project"
msgstr ""
-#: projects.inc:242
-msgid ""
-"Surface science calculations using Classical Dynamics. Leiden Classical "
-"allows volunteers, students and other scientist to submit their personal "
-"calculations to the grid. Each user has his own personal queue for Classical "
-"Dynamics jobs. In this way students have used the grid to simulate liquid "
-"argon, or to test the validity of the ideal gas law by actually doing the "
-"simulations through the grid."
+#: index.php:155
+msgid "Message boards"
msgstr ""
-#: projects.inc:256
-msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
+#: index.php:156
+msgid "Email lists"
msgstr ""
-#: projects.inc:257
-msgid "Astrophysics"
+#: index.php:157
+msgid "Personnel and contributors"
msgstr ""
-#: projects.inc:258
-msgid ""
-"Search for spinning neutron stars (also called pulsars) using data from the "
-"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
-"observatory. Einstein at Home is a World Year of Physics 2005 project "
-"supported by the American Physical Society (APS) and by a number of "
-"international organizations."
+#: index.php:158
+msgid "Events"
msgstr ""
-#: projects.inc:264 projects.inc:272
-msgid "CERN (European Organization for Nuclear Research)"
+#: index.php:159
+msgid "Papers and talks"
msgstr ""
-#: projects.inc:265 projects.inc:273
-msgid "Physics"
+#: index.php:160
+msgid "Research projects"
msgstr ""
-#: projects.inc:266
-msgid ""
-"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
-"European Organization for Nuclear Research, the world's largest particle "
-"physics laboratory. It is the most powerful instrument ever built to "
-"investigate on particles proprieties. LHC at home runs simulations to improve "
-"the design of LHC and its detectors."
+#: index.php:161
+msgid "Logos and graphics"
msgstr ""
-#: projects.inc:274
-msgid ""
-"This project uses CERN-developed virtual machine technology for full-fledged "
-"LHC event physics simulation on volunteer computers. Requires that you "
-"install VirtualBox on your computer"
+#: index.php:162
+msgid "and"
msgstr ""
-#: projects.inc:280
-msgid "University of California, Berkeley"
+#: index.php:166
+msgid "Help wanted"
msgstr ""
-#: projects.inc:281
-msgid "Astrophysics, astrobiology"
+#: index.php:168
+msgid "Programming"
msgstr ""
-#: projects.inc:282
-msgid ""
-"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
-"goal is to detect intelligent life outside Earth. One approach, known as "
-"radio SETI, uses radio telescopes to listen for narrow-bandwidth radio "
-"signals from space. Such signals are not known to occur naturally, so a "
-"detection would provide evidence of extraterrestrial technology."
+#: index.php:169
+msgid "Translation"
msgstr ""
-#: projects.inc:296
-msgid "Bielefeld University of Applied Sciences"
+#: index.php:170
+msgid "Testing"
msgstr ""
-#: projects.inc:297
-msgid "Chemical engineering and nanotechnology"
+#: index.php:172
+msgid "Publicity"
+msgstr ""
+
+#: index.php:174
+msgid "Software development"
+msgstr ""
+
+#: index.php:175
+msgid "APIs for add-on software"
msgstr ""
-#: projects.inc:298
+#: index.php:217
+#, php-format
msgid ""
-"The study of molecular magnets and controlled nanoscale magnetism. These "
-"magnetic molecules may be used to develop tiny magnetic switches, with "
-"applications in medicine (such as local tumor chemotherapy) and "
-"biotechnology."
+"Open-source software for %svolunteer computing%s and %sgrid computing%s."
msgstr ""
-#: projects.inc:305
-msgid "Multiple applications"
+#: index.php:230
+msgid "BOINC is based at The University of California, Berkeley"
msgstr ""
-#: projects.inc:310
-msgid "Chinese Academy of Sciences"
+#: projects.inc:14
+msgid "Distributed sensing"
msgstr ""
-#: projects.inc:311
-msgid "Physics, biochemistry, and others"
+#: projects.inc:19
+msgid "Stanford University"
msgstr ""
-#: projects.inc:312
+#: projects.inc:20
+msgid "Seismology"
+msgstr ""
+
+#: projects.inc:21
msgid ""
-"The objective of CAS at home is to encourage and assist scientists in China to "
-"adopt the technologies of volunteer computing and volunteer thinking for "
-"their research."
+"The Quake-Catcher Network is developing the world's largest seismic network "
+"using sensors attached to Internet-connected computers. You must buy a "
+"sensor to participate."
msgstr ""
-#: projects.inc:319
-msgid "Mathematics, physics, evolution"
+#: projects.inc:27
+msgid "BOINC Poland Foundation"
msgstr ""
-#: projects.inc:320
+#: projects.inc:28
+msgid "Environmental research"
+msgstr ""
+
+#: projects.inc:29
msgid ""
-"Yoyo at home is an adapter between BOINC and several existing volunteer "
-"computing projects: ECM, Muon, Evolution at home, and distributed.net"
+"This project is creating a free and continuously updated map of radiation "
+"levels by using sensors connected to volunteers' computers. You must buy a "
+"sensor to participate."
msgstr ""
-#: projects.inc:325 projects.inc:481
-msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
+#: projects.inc:33
+msgid ""
+"To participate in these projects you must buy a sensor and attach it to your "
+"computer."
msgstr ""
-#: projects.inc:326
-msgid "European research projects"
+#: projects.inc:37
+msgid "Cognitive science and artifical intelligence"
msgstr ""
-#: projects.inc:327
-msgid ""
-"The EDGeS at Home Beta project integrates volunteer computing into the service "
-"grid network of Europe by allowing service grids to send workunits to be "
-"processed by the volunteers of this project. The scientific projects covered "
-"by the project include math, physics, biology, etc."
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
+msgid "Private"
msgstr ""
-#: projects.inc:333
-msgid "Spanish universities and research centers"
+#: projects.inc:61
+msgid "Artificial intelligence"
msgstr ""
-#: projects.inc:334
-msgid "Various Spanish research projects"
+#: projects.inc:62
+msgid ""
+"Parse and convert semantic nets for use in FreeHAL, an artificial "
+"intelligence that uses semantic networks, stemmers, part of speech "
+"databases, and part of speech taggers in order to imitate human behavior in "
+"conversations."
msgstr ""
-#: projects.inc:335
-msgid "Research in physics, material science, and biomedicine"
+#: projects.inc:69
+msgid "Biology and Medicine"
msgstr ""
-#: projects.inc:341
-msgid "IBM Corporate Community Relations"
+#: projects.inc:82
+msgid "University College Dublin"
msgstr ""
-#: projects.inc:342
-msgid "Humanitarian research on disease, natural disasters and hunger."
+#: projects.inc:83
+msgid "Antimalarial drug discovery"
msgstr ""
-#: projects.inc:343
+#: projects.inc:84
msgid ""
-"To further critical non-profit research on some of humanity's most pressing "
-"problems by creating the world's largest volunteer computing grid. Research "
-"includes HIV/AIDS, cancer, muscular dystrophy, dengue fever, and many more."
+"The parasite that causes malaria continues to evolve resistance to available "
+"medication. We therefore urgently need to discover new drugs to replace "
+"existing drugs. Importantly, these new drugs need to target NEW proteins in "
+"the parasite. The FightMalaria at Home project is aimed at finding these new "
+"targets."
msgstr ""
-#: projects.inc:349
-msgid "Mathematics, computing, and games"
+#: projects.inc:90
+msgid "University of Karlsruhe (Germany)"
msgstr ""
-#: projects.inc:355
-msgid "Computer Science"
+#: projects.inc:91
+msgid "Protein structure prediction"
msgstr ""
-#: projects.inc:363
-msgid "Mathematics, Physics, Artificial Intelligence"
+#: projects.inc:92
+msgid ""
+"POEM at HOME uses a computational approach to predict the biologically active "
+"structure of proteins, to understand the signal-processing mechanisms when "
+"the proteins interact with one another, to understand diseases related to "
+"protein malfunction or aggregation, and to develop new drugs on the basis of "
+"the three-dimensions structure of biologically important proteins."
msgstr ""
-#: projects.inc:364
-msgid "Simulation of quantum computing; Goldbach's conjecture."
+#: projects.inc:98
+msgid "University of Delaware"
msgstr ""
-#: projects.inc:404 projects.inc:412 projects.inc:466
-msgid "Cryptography"
+#: projects.inc:99
+msgid "Study of protein - ligand interactions"
msgstr ""
-#: projects.inc:413
+#: projects.inc:100
msgid ""
-"Attempt to decode 3 original Enigma messages. The signals were intercepted "
-"in the North Atlantic in 1942 and are believed to be unbroken."
+"Docking at Home has both bioscience and computer science goals. The project "
+"aims to further knowledge of the atomic details of protein-ligand "
+"interactions and, by doing so, will search for insights into the discovery "
+"of novel pharmaceuticals."
msgstr ""
-#: projects.inc:419 projects.inc:458 projects.inc:474 projects.inc:482
-#: projects.inc:522
-msgid "Mathematics"
+#: projects.inc:114
+msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr ""
-#: projects.inc:420
-msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
+#: projects.inc:115
+msgid "Molecular simulations of proteins"
msgstr ""
-#: projects.inc:425
-msgid "California State University Fullerton"
+#: projects.inc:116
+msgid ""
+"GPUGrid.net opens novel computational scenarios by the first full-atom "
+"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
+"New biomedical applications suddenly become possible giving a new role to "
+"computational biology for biomedical research."
msgstr ""
-#: projects.inc:426
-msgid "Factorization of large integers"
+#: projects.inc:122
+msgid "Technion, Israel"
+msgstr ""
+
+#: projects.inc:123
+msgid "Genetic linkage analysis"
msgstr ""
-#: projects.inc:427
+#: projects.inc:124
msgid ""
-"NFS at Home is a research project that uses Internet-connected computers to do "
-"the lattice sieving step in the Number Field Sieve factorization of large "
-"integers. As a young school student, you gained your first experience at "
-"breaking an integer into prime factors, such as 15 = 3 * 5 or 35 = 5 * 7. "
-"NFS at Home is a continuation of that experience, only with integers that are "
-"hundreds of digits long."
+"Superlink at Technion helps geneticists all over the world find disease-"
+"provoking genes causing some types of diabetes, hypertension (high blood "
+"pressure), cancer, schizophrenia and many others."
msgstr ""
-#: projects.inc:433
+#: projects.inc:138
msgid ""
-"Vilnius Gediminas Technical University and Kaunas University of Technology "
-"(Lithuania)"
+"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr ""
-#: projects.inc:434
-msgid "Software testing"
+#: projects.inc:139
+msgid "Life science research"
msgstr ""
-#: projects.inc:435
+#: projects.inc:140
msgid ""
-"The aim of this project is to provide a powerful distributed computing "
-"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
-"well as others Lithuanian academic institutions. Current applications "
-"involve the study of Monte-Carlo based software testing."
+"The Lattice Project supplies computing power to scientists at the University "
+"of Maryland studying evolutionary relationships based on DNA sequence data; "
+"bacterial, plasmid, and virus protein sequences; and biological diversity in "
+"nature reserves. "
msgstr ""
-#: projects.inc:457
-msgid "Mathematical Institute of Leiden University / Kennislink"
+#: projects.inc:146
+msgid "The Swiss Tropical Institute"
msgstr ""
-#: projects.inc:459
-msgid ""
-"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
-"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
-"product of the distinct prime factors of n. The ABC conjecture says that "
-"there are only finitely many a,b,c such that log(c)/log(rad(abc)) > h for "
-"any real h > 1. The ABC conjecture is currently one of the greatest open "
-"problems in mathematics. If it is proven to be true, a lot of other open "
-"problems can be answered directly from it."
+#: projects.inc:147
+msgid "Epidemiology"
msgstr ""
-#: projects.inc:467
+#: projects.inc:148
msgid ""
-"Primegrid is generating a public sequential prime number database, and is "
-"searching for large twin primes of the form k*2<sup>n</sup>+1 and k*2<sup>n</"
-"sup>-1"
+"Simulation models of the transmission dynamics and health effects of malaria "
+"are an important tool for malaria control. They can be used to determine "
+"optimal strategies for delivering mosquito nets, chemotherapy, or new "
+"vaccines which are currently under development and testing. Such modeling "
+"is extremely computer intensive, requiring simulations of large human "
+"populations with a diverse set of parameters related to biological and "
+"social factors that influence the distribution of the disease. "
msgstr ""
-#: projects.inc:473
-msgid "Hochschule RheinMain University of Applied Sciences"
+#: projects.inc:170
+msgid "University of Washington"
msgstr ""
-#: projects.inc:475
-msgid ""
-"Search for counterexamples to two conjectures related to the identification "
-"of prime numbers"
+#: projects.inc:171 projects.inc:179
+msgid "Biology"
msgstr ""
-#: projects.inc:483
+#: projects.inc:172
msgid ""
-"Find all the generalized binary number systems (in which bases are matrices "
-"and digits are vectors) up to dimension 11."
+"Determine the 3-dimensional shapes of proteins in research that may "
+"ultimately lead to finding cures for some major human diseases. By running "
+"Rosetta at home you will help us speed up and extend our research in ways we "
+"couldn't possibly attempt without your help. You will also be helping our "
+"efforts at designing new proteins to fight diseases such as HIV, Malaria, "
+"Cancer, and Alzheimer's"
msgstr ""
-#: docutil.php:21
-msgid "Search"
+#: projects.inc:178
+msgid "University of Vienna"
msgstr ""
-#: docutil.php:103
-msgid "Return to BOINC main page"
+#: projects.inc:180
+msgid ""
+"Calculate similarities between proteins. SIMAP provides a public database of "
+"the resulting data, which plays a key role in many bioinformatics research "
+"projects."
msgstr ""
-#: docutil.php:114
-#, php-format
-msgid "This page is %stranslatable%s."
+#: projects.inc:186
+msgid "Earth Sciences"
msgstr ""
-#: download.php:40
-msgid "Download BOINC"
+#: projects.inc:198
+msgid "Oxford University"
msgstr ""
-#: download.php:42
-#, php-format
-msgid "%s for %s (%s MB)"
+#: projects.inc:199
+msgid "Climate study"
msgstr ""
-#: download.php:89
+#: projects.inc:200
msgid ""
-"BOINC is a program that lets you donate your idle computer time to science "
-"projects like SETI at home, Climateprediction.net, Rosetta at home, World "
-"Community Grid, and many others. <p> After installing BOINC on your "
-"computer, you can connect it to as many of these projects as you like."
+"Investigate the approximations that have to be made in state-of-the-art "
+"climate models. By running the model thousands of times we hope to find out "
+"how the model responds to slight tweaks to these approximations - slight "
+"enough to not make the approximations any less realistic. This will allow us "
+"to improve our understanding of how sensitive our models are to small "
+"changes and also to things like changes in carbon dioxide and the sulphur "
+"cycle. This will allow us to explore how climate may change in the next "
+"century under a wide range of different scenarios."
msgstr ""
-#: download.php:91
-msgid ""
-"You may run this software on a computer only if you own the computer or have "
-"the permission of its owner."
+#: projects.inc:207
+msgid "Physical Science"
msgstr ""
-#: download.php:121
-msgid "System requirements"
+#: projects.inc:213
+msgid "Mechanical engineering"
msgstr ""
-#: download.php:122
-msgid "Release notes"
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
msgstr ""
-#: download.php:123 index.php:85
-msgid "Help"
+#: projects.inc:224 projects.inc:263 projects.inc:271
+msgid "Astronomy"
msgstr ""
-#: download.php:124
-msgid "All versions"
+#: projects.inc:225
+msgid ""
+"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
+"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
+"Universe. We will measure physical parameters (such as stellar mass surface "
+"density, star formation rate surface density, attenuation, and first-order "
+"star formation history) on a resolved pixel-by-pixel basis using spectral "
+"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: download.php:125
-msgid "Version history"
+#: projects.inc:247
+msgid "University of Texas at Austin"
msgstr ""
-#: download.php:126
-msgid "GPU computing"
+#: projects.inc:248 projects.inc:279
+msgid "Chemistry"
msgstr ""
-#: download.php:144
-msgid "BOINC: compute for science"
+#: projects.inc:249
+msgid ""
+"A common problem in theoretical chemistry, condensed matter physics and "
+"materials science is the calculation of the time evolution of an atomic "
+"scale system where, for example, chemical reactions and/or diffusion occur. "
+"Generally the events of interest are quite rare (many orders of magnitude "
+"slower than the vibrational movements of the atoms), and therefore direct "
+"simulations, tracking every movement of the atoms, would take thousands of "
+"years of computer calculations on the fastest present day computer before a "
+"single event of interest can be expected to occur. Our research group is "
+"interested in calculating the long time dynamics of systems."
msgstr ""
-#: help.php:12
-#, php-format
-msgid ""
-"BOINC Online Help lets you talk one-on-one with experienced BOINC users, who "
-"can: %s answer questions about BOINC and volunteer computing; %s walk you "
-"through the process of installing and using BOINC; %s troubleshoot any "
-"problems you might have."
+#: projects.inc:262
+msgid "University of Illinois at Urbana-Champaign"
msgstr ""
-#: help.php:21
-#, php-format
+#: projects.inc:264
msgid ""
-"BOINC Online Help is based on %sSkype%s, an Internet-based telephone system. "
-"Skype is free (both the software and the calls). If you don't already have "
-"Skype, please %sdownload and install it now%s. When you're finished, return "
-"to this page."
+"The goal of Cosmology at Home is to search for the model that best describes "
+"our Universe and to find the range of models that agree with the available "
+"astronomical particle physics data."
msgstr ""
-#: help.php:28
-msgid ""
-"The best way to get help is by voice, for which you need either built-in "
-"microphone and speakers or an external headset for your computer. You can "
-"also use Skype's text-based chat system or regular email (if you don't have "
-"Skype) to communicate with Help Volunteers."
+#: projects.inc:270
+msgid "Rensselaer Polytechnic Institute"
msgstr ""
-#: help.php:31
+#: projects.inc:272
msgid ""
-"Volunteers speaking several languages are available. Please select a "
-"language:"
+"The goal of Milkyway at Home is to create a highly accurate three dimensional "
+"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
+"Survey."
msgstr ""
-#: help.php:47
-msgid "Be a Help Volunteer"
+#: projects.inc:278
+msgid "Leiden University, The Netherlands"
msgstr ""
-#: help.php:50
-#, php-format
+#: projects.inc:280
msgid ""
-"If you're an experienced BOINC user, we encourage you to %sbecome a Help "
-"Volunteer%s. It's a great way to help the cause of scientific research and "
-"volunteer computing - and it's fun!"
+"Surface science calculations using Classical Dynamics. Leiden Classical "
+"allows volunteers, students and other scientist to submit their personal "
+"calculations to the grid. Each user has his own personal queue for Classical "
+"Dynamics jobs. In this way students have used the grid to simulate liquid "
+"argon, or to test the validity of the ideal gas law by actually doing the "
+"simulations through the grid."
msgstr ""
-#: help.php:56
-#, php-format
-msgid ""
-"If you're already a Help Volunteer: to edit your settings, %sclick here%s."
+#: projects.inc:294
+msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr ""
-#: help_funcs.php:107
+#: projects.inc:295
+msgid "Astrophysics"
+msgstr ""
+
+#: projects.inc:296
msgid ""
-"BOINC helpers are unpaid volunteers. Their advice is not endorsed by BOINC "
-"or the University of California."
+"Search for spinning neutron stars (also called pulsars) using data from the "
+"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
+"observatory. Einstein at Home is a World Year of Physics 2005 project "
+"supported by the American Physical Society (APS) and by a number of "
+"international organizations."
msgstr ""
-#: help_funcs.php:110
-msgid "%1Never%2 give email address or password information to BOINC helpers."
+#: projects.inc:310 projects.inc:318
+msgid "CERN (European Organization for Nuclear Research)"
msgstr ""
-#: index.php:23
-msgid "Computing power"
+#: projects.inc:311 projects.inc:319
+msgid "Physics"
msgstr ""
-#: index.php:25
-msgid "Top 100 volunteers"
+#: projects.inc:312
+msgid ""
+"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
+"European Organization for Nuclear Research, the world's largest particle "
+"physics laboratory. It is the most powerful instrument ever built to "
+"investigate on particles proprieties. LHC at home runs simulations to improve "
+"the design of LHC and its detectors."
msgstr ""
-#: index.php:26
-msgid "Statistics"
+#: projects.inc:320
+msgid ""
+"This project uses CERN-developed virtual machine technology for full-fledged "
+"LHC event physics simulation on volunteer computers. Requires that you "
+"install VirtualBox on your computer"
msgstr ""
-#: index.php:54
-msgid "Active:"
+#: projects.inc:326
+msgid "University of California, Berkeley"
msgstr ""
-#: index.php:54
-msgid "volunteers,"
+#: projects.inc:327
+msgid "Astrophysics, astrobiology"
msgstr ""
-#: index.php:54
-msgid "computers.\n"
+#: projects.inc:328
+msgid ""
+"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
+"goal is to detect intelligent life outside Earth. One approach, known as "
+"radio SETI, uses radio telescopes to listen for narrow-bandwidth radio "
+"signals from space. Such signals are not known to occur naturally, so a "
+"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: index.php:55
-msgid "24-hour average:"
+#: projects.inc:342
+msgid "Bielefeld University of Applied Sciences"
msgstr ""
-#: index.php:55
-msgid "PetaFLOPS."
+#: projects.inc:343
+msgid "Chemical engineering and nanotechnology"
msgstr ""
-#: index.php:67
-msgid "News"
+#: projects.inc:344
+msgid ""
+"The study of molecular magnets and controlled nanoscale magnetism. These "
+"magnetic molecules may be used to develop tiny magnetic switches, with "
+"applications in medicine (such as local tumor chemotherapy) and "
+"biotechnology."
msgstr ""
-#: index.php:82
-msgid "Volunteer"
+#: projects.inc:351
+msgid "Multiple applications"
msgstr ""
-#: index.php:84
-msgid "Download"
+#: projects.inc:356
+msgid "Chinese Academy of Sciences"
msgstr ""
-#: index.php:86 index.php:123 index.php:174
-msgid "Documentation"
+#: projects.inc:357
+msgid "Physics, biochemistry, and others"
msgstr ""
-#: index.php:87
-msgid "Add-ons"
+#: projects.inc:358
+msgid ""
+"The objective of CAS at home is to encourage and assist scientists in China to "
+"adopt the technologies of volunteer computing and volunteer thinking for "
+"their research."
msgstr ""
-#: index.php:88
-msgid "Links"
+#: projects.inc:365
+msgid "Mathematics, physics, evolution"
msgstr ""
-#: index.php:94
-#, php-format
+#: projects.inc:366
msgid ""
-" Use the idle time on your computer (Windows, Mac, or Linux) to cure "
-"diseases, study global warming, discover pulsars, and do many other types of "
-"scientific research. It's safe, secure, and easy: %sChoose%s projects "
-"%sDownload%s and run BOINC software %sEnter%s an email address and "
-"password. "
+"Yoyo at home is an adapter between BOINC and several existing volunteer "
+"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: index.php:105
-#, php-format
+#: projects.inc:371 projects.inc:527
+msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
+msgstr ""
+
+#: projects.inc:372
+msgid "European research projects"
+msgstr ""
+
+#: projects.inc:373
msgid ""
-"Or, if you run several projects, try an %saccount manager%s such as "
-"%sGridRepublic%s or %sBAM!%s. "
+"The EDGeS at Home Beta project integrates volunteer computing into the service "
+"grid network of Europe by allowing service grids to send workunits to be "
+"processed by the volunteers of this project. The scientific projects covered "
+"by the project include math, physics, biology, etc."
msgstr ""
-#: index.php:121
-msgid "Compute with BOINC"
+#: projects.inc:379
+msgid "Spanish universities and research centers"
msgstr ""
-#: index.php:124
-msgid "Software updates"
+#: projects.inc:380
+msgid "Various Spanish research projects"
msgstr ""
-#: index.php:131
-msgid ""
-"%1Scientists%2: use BOINC to create a %3volunteer computing project%4 giving "
-"you the computing power of thousands of CPUs."
+#: projects.inc:381
+msgid "Research in physics, material science, and biomedicine"
+msgstr ""
+
+#: projects.inc:387
+msgid "IBM Corporate Citizenship"
msgstr ""
-#: index.php:135
+#: projects.inc:388
+msgid "Medical, environmental and other humanitarian research"
+msgstr ""
+
+#: projects.inc:389
msgid ""
-"%1Universities%2: use BOINC to create a %3Virtual Campus Supercomputing "
-"Center%4."
+"To further critical non-profit research on some of humanity's most pressing "
+"problems by creating the world's largest volunteer computing grid. Research "
+"includes HIV-AIDS, cancer, tropical and neglected diseases, solar energy, "
+"clean water and many more."
msgstr ""
-#: index.php:140
-msgid "%1Companies%2: use BOINC for %3desktop Grid computing%4."
+#: projects.inc:395
+msgid "Mathematics, computing, and games"
msgstr ""
-#: index.php:152
-msgid "The BOINC project"
+#: projects.inc:401
+msgid "Computer Science"
msgstr ""
-#: index.php:158
-msgid "Message boards"
+#: projects.inc:409
+msgid "Mathematics, Physics, Artificial Intelligence"
msgstr ""
-#: index.php:159
-msgid "Email lists"
+#: projects.inc:410
+msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: index.php:160
-msgid "Personnel and contributors"
+#: projects.inc:450 projects.inc:458
+msgid "Cryptography"
msgstr ""
-#: index.php:161
-msgid "Events"
+#: projects.inc:459
+msgid ""
+"Attempt to decode 3 original Enigma messages. The signals were intercepted "
+"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: index.php:162
-msgid "Papers and talks"
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
+msgid "Mathematics"
msgstr ""
-#: index.php:163
-msgid "Research projects"
+#: projects.inc:466
+msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: index.php:164
-msgid "Logos and graphics"
+#: projects.inc:471
+msgid "California State University Fullerton"
msgstr ""
-#: index.php:165
-msgid "and"
+#: projects.inc:472
+msgid "Factorization of large integers"
msgstr ""
-#: index.php:169
-msgid "Help wanted"
+#: projects.inc:473
+msgid ""
+"NFS at Home is a research project that uses Internet-connected computers to do "
+"the lattice sieving step in the Number Field Sieve factorization of large "
+"integers. As a young school student, you gained your first experience at "
+"breaking an integer into prime factors, such as 15 = 3 * 5 or 35 = 5 * 7. "
+"NFS at Home is a continuation of that experience, only with integers that are "
+"hundreds of digits long."
msgstr ""
-#: index.php:171
-msgid "Programming"
+#: projects.inc:479
+msgid ""
+"Vilnius Gediminas Technical University and Kaunas University of Technology "
+"(Lithuania)"
msgstr ""
-#: index.php:172
-msgid "Translation"
+#: projects.inc:480
+msgid "Software testing"
msgstr ""
-#: index.php:173
-msgid "Testing"
+#: projects.inc:481
+msgid ""
+"The aim of this project is to provide a powerful distributed computing "
+"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
+"well as others Lithuanian academic institutions. Current applications "
+"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: index.php:175
-msgid "Publicity"
+#: projects.inc:503
+msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr ""
-#: index.php:177
-msgid "Software development"
+#: projects.inc:505
+msgid ""
+"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
+"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
+"product of the distinct prime factors of n. The ABC conjecture says that "
+"there are only finitely many a,b,c such that log(c)/log(rad(abc)) > h for "
+"any real h > 1. The ABC conjecture is currently one of the greatest open "
+"problems in mathematics. If it is proven to be true, a lot of other open "
+"problems can be answered directly from it."
msgstr ""
-#: index.php:178
-msgid "APIs for add-on software"
+#: projects.inc:513
+msgid ""
+"Primegrid has multiple projects searching for different forms of very large "
+"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: index.php:212
-msgid "Browser default"
+#: projects.inc:519
+msgid "Hochschule RheinMain University of Applied Sciences"
msgstr ""
-#: index.php:265
-#, php-format
+#: projects.inc:521
msgid ""
-"Open-source software for %svolunteer computing%s and %sgrid computing%s."
+"Search for counterexamples to two conjectures related to the identification "
+"of prime numbers"
msgstr ""
-#: index.php:278
-msgid "BOINC is based at The University of California, Berkeley"
+#: projects.inc:529
+msgid ""
+"Find all the generalized binary number systems (in which bases are matrices "
+"and digits are vectors) up to dimension 11."
+msgstr ""
+
+#: ../html/inc/news.inc:40
+msgid "Comment"
+msgstr ""
+
+#: ../html/inc/news.inc:111
+#, php-format
+msgid "News is available as an %sRSS feed%s"
msgstr ""
diff --git a/locale/tr/BOINC-Android.po b/locale/tr/BOINC-Android.po
index 3784cc6..4c8f8ac 100644
--- a/locale/tr/BOINC-Android.po
+++ b/locale/tr/BOINC-Android.po
@@ -8,16 +8,17 @@ msgstr ""
"Project-Id-Version: OINC Android 7.2\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-10-22 12:02+0200\n"
-"Last-Translator: Aycan Demirel <aycandemirel at hotmail.com>\n"
+"PO-Revision-Date: 2014-01-17 20:23+0000\n"
+"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: Türkçe <LL at li.org>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1389990222.0\n"
#. app global
msgctxt "app_name"
@@ -343,7 +344,7 @@ msgstr "Eşitle"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "Proje seçmek için buraya dokunun."
msgctxt "main_error"
msgid "Whooops"
diff --git a/locale/tr/BOINC-Client.mo b/locale/tr/BOINC-Client.mo
index 1f4297e..8499bb9 100644
Binary files a/locale/tr/BOINC-Client.mo and b/locale/tr/BOINC-Client.mo differ
diff --git a/locale/tr/BOINC-Client.po b/locale/tr/BOINC-Client.po
index 1d41bcb..5a1e298 100644
--- a/locale/tr/BOINC-Client.po
+++ b/locale/tr/BOINC-Client.po
@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: BOICN Client Messages\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-15 22:25-0700\n"
-"PO-Revision-Date: 2013-11-24 20:48+0000\n"
-"Last-Translator: Anonymous Pootle User\n"
+"PO-Revision-Date: 2014-04-22 09:10+0000\n"
+"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: Turkish <weboglan at hotmail.com>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.5.0\n"
-"X-POOTLE-MTIME: 1385326105.0\n"
+"X-POOTLE-MTIME: 1398157804.0\n"
#: acct_mgr.cpp:450 acct_mgr.cpp:459
msgid "Message from account manager"
@@ -104,7 +104,7 @@ msgid ""
"The project has changed its security key. Please remove and add this "
"project."
msgstr ""
-"Proje, günvenlik anahtarını değiştirdi. Lütfen bu projeyi kaldırıp, yeniden "
+"Proje, güvenlik anahtarını değiştirdi. Lütfen bu projeyi kaldırıp, yeniden "
"ekleyin."
#: ../sched/handle_request.cpp:943
diff --git a/locale/tr/BOINC-Manager.mo b/locale/tr/BOINC-Manager.mo
index 69ac5bd..ac75e05 100644
Binary files a/locale/tr/BOINC-Manager.mo and b/locale/tr/BOINC-Manager.mo differ
diff --git a/locale/tr/BOINC-Manager.po b/locale/tr/BOINC-Manager.po
index d8517ab..9dee9ff 100644
--- a/locale/tr/BOINC-Manager.po
+++ b/locale/tr/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 6.8x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-24 20:47+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-04-22 09:26+0000\n"
"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: Donanım Haber <bilgi at donanimhaber.com>\n"
"Language: tr\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1385326053.0\n"
+"X-POOTLE-MTIME: 1398158771.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -209,345 +209,345 @@ msgstr "Bağlandı"
msgid "Disconnected"
msgstr "Bağlantı kesildi"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "%s penceresini kapatır."
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Pencereyi kapat"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "%s'dan çık"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Bildirimler\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Bildirimleri görüntüler."
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Projeler\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Projeleri görüntüler."
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "İ&şler\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "İşleri görüntüler."
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "&Aktarımlar\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Aktarımları görüntüler."
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "İ&statistikler\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "İstatistikleri görüntüler."
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Disk kullanımı\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Disk kullanımını görüntüler."
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "&Basit görünüm...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Basit grafiksel arayüzü görüntüler."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Proje ya da hesap yöneticisi ekle..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Bilimin pek çok alanından 30'dan fazla projeden birisi için gönüllü olun"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "%s ile &eşitle"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Güncel ayarları %s hesap yöneticisinden alır."
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Proje ekle..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Bir proje eklemenizi sağlar."
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "%s kullanmayı durdur..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Bu bilgisayarı hesap yöneticisi kontrolünden çıkarır."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Seçenekler..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr ""
"Arayüz seçeneklerini ve vekil sunucu ayarlarını yapılandırabileceğiniz "
"pencereyi açar."
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "&Hesaplama tercihleri..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr ""
"İşlerin çalışmasıyla ilgili bu bilgisayara ait tercihleri "
"ayarlayabileceğiniz pencereyi açar."
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Daima çalış"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Ayarları göz önüne almadan işleri sürekli çalıştırır."
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "&Tercihlere göre çalış"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "İşleri tercihlerdeki ayarlarınıza göre çalıştırır."
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Durdur"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Ayarları göz önüne almadan işlerin çalışmasını durdurur."
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "GPU'yu &daima kullan"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Ayarları göz önüne almadan GPU'yu sürekli kullanır."
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "GPU'yu tercihlere göre kullan"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "GPU'yu tercihlerdeki ayarlarınıza göre kullanır."
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "GPU kullanımını durdur"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "Ayarları göz önüne almadan GPU'nun kullanımını durdurur."
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Ağ iletişimi daima mümkün"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Ayarları göz önüne almadan ağ iletişimine izin verir."
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Tercihlere göre ağ iletişimi"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Tercihlerdeki ayarlara göre ağ iletişimi yapar."
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Ağ iletişimini durdur"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "BOINC'in tüm ağ iletişimini durdurur."
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "%s çalıştıran başka bir bilgisayarı seçip bağlanmayı sağlar."
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Bilgisayar seç ve bağlan..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Bağlı olan istemciyi kapat..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Şu anda bağlı olan istemciyi kapatır."
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "&İşlemci testlerini çalıştır"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr ""
"BOINC'in işlemci (CPU) testlerini çalıştırır. Sonuçları Olay Günlüğü'nde "
"görebilirsiniz."
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Ağ iletişimini gerçekleştir"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Beklemedeki tüm ağ iletişimini hemen gerçekleştirir."
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Yapılandırma dosyalarını oku"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Yapılandırma bilgisini cc_config.xml ve any app_config.xml dosyalarından oku"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Yerel tercih dosyasını oku"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Yerel tercihleri global_prefs_override.xml dosyasından okur."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Bu bilgisayarda %s'ın başka bir kopyasını çalıştırır."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Başka bir %s çalıştır"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Olay günlüğü...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Tanılama mesajlarını görüntüler."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &yardım"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Gönüllü kullanıcılardan %s hakkında yardım almanızı sağlar."
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s yardım"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "%s yardım sitesini açar."
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr "%s &internet sitesi"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "BOINC ve %s resmi internet sitesini açar."
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&%s hakkında..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Sürüm, lisans, telif hakkı ve çeviri bilgisini görüntüler."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Dosya"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Görünüm"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Araçlar"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Çalışma"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "&Gelişmiş"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Yardım"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - %s kullanmayı durdur"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -562,12 +562,12 @@ msgstr ""
"\n"
"%s kullanmayı durdurmak istiyor musunuz?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Bağlı istemciyi kapat..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -576,27 +576,27 @@ msgstr ""
"%s şu anda bağlı olan istemciyi kapatacak ve\n"
"sizi başka birine bağlanmanız için uyaracak."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s başarıyla %s'e eklendi."
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "%s istemcisine bağlanıyor"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "%s istemcisine bağlı (%s)"
@@ -633,26 +633,26 @@ msgstr ""
"\n"
"Lütfen projenin sitesini ziyaret edip, yönergeleri izleyin."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "BOINC istemcisine bağlanılıyor. Lütfen bekleyin..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "%s'den &ayrıl"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "%s'den &çık"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - İletişim"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "İptal"
@@ -811,7 +811,7 @@ msgstr "%s başarıyla internet bağlantısını kesti."
msgid "%s failed to disconnected from the Internet."
msgstr "%s internet bağlantısını keserken başarısız oldu."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -833,7 +833,7 @@ msgstr ""
"- sizi 'boinc_master' kullanıcı grubuna dahil etmesi için\n"
"yöneticinizle temasa geçin."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -843,16 +843,16 @@ msgstr ""
"kurun.\n"
"(Hata kodu %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " at "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -860,68 +860,68 @@ msgstr ""
"BOINC'in doğru çalışması için yeniden başlatma gerekiyor.\n"
"Bilgisayarınızı yeniden başlatın ve yeniden deneyin."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Manager, işletim sistemi tarafından otomatik başlatılacak"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "BOINC'i sadece sistem tepsisi simgesi görünecek şekilde başlat"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Klasör, BOINC İstemcisi çalıştırılabilir dosyalarını içerir"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC veri klasörü"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Sunucu adı ya da IP adresi"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "GUI RPC bağlantı noktası numarası"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Parola"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "BOINC'i bu isteğe bağlı parametrelerle çalıştır"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "BOINC güvenlik kullanıcılarını ve izinlerini devre dışı bırak"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr ""
"görünüm yöneticisi hata mesajları için, görünüm hata ayıklama moduna geçin"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "BOINC Manager'ın birden çok kopyasına izin verildi"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Kullanılmadı: XCode 4.2'deki hata için geçici çözüm"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Otomatik Belirleme)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Bilinmiyor)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Kullanıcı Tanımlı)"
@@ -948,7 +948,7 @@ msgid "E&xit"
msgstr "&Çık"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Sürdür"
@@ -1111,64 +1111,64 @@ msgstr ""
"Berkeley Open Infrastructure for Network Computing"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&Tamam"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "geçersiz değer"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "geçersiz sayı"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "geçersiz saat, biçim SS:DD şeklinde olmalı"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "geçersiz saat aralığı, biçim SS:DD-SS:DD şeklinde olmalı"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "geçersiz giriş değeri belirlendi"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Doğrulama Hatası"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Uygulama ekle"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' çalıştırılabilir bir uygulama değil."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Ayrıcalıklı Uygulama Ekle"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Eklenecek uygulamanın ismi?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Ayrıcalıklı uygulama ekle"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Uygulama isimleri mutlaka '%s' ile bitmelidir"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' zaten listede."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1176,11 +1176,11 @@ msgstr ""
"Tüm yerel tercihleri kaldırmak istediğinize emin misiniz?\n"
"(Bu, ayrıcalıklı uygulama listesini silmeyecektir.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Onaylama"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Tercihler"
@@ -1196,11 +1196,11 @@ msgstr ""
"İnternet tabanlı ayarlarınıza dönmek için 'Temizle'yi tıklayın (ayrıcalıklı "
"uygulama listesi silinmez)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Temizle"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "tüm yerel tercihleri temizler ve pencereyi kapatır"
@@ -1220,7 +1220,7 @@ msgstr "disk ve bellek kullanımı"
msgid "exclusive applications"
msgstr "ayrıcalıklı uygulamalar"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "Tamam"
@@ -1233,7 +1233,7 @@ msgid "close the dialog without saving"
msgstr "değişiklikleri kaydetmeden pencereyi kapatır"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Yardım"
@@ -1293,7 +1293,7 @@ msgstr ""
"olmadığında) hesaplamanın başlamasını istediğinizi belirleyin"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "dakika"
@@ -1311,7 +1311,7 @@ msgstr ""
msgid "percent (0 means no restriction)"
msgstr "% (sınırlamayı kaldırmak için 0 yazın)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Her gün bu saatler arasında:"
@@ -1319,8 +1319,8 @@ msgstr "Her gün bu saatler arasında:"
msgid "start work at this time"
msgstr "bu saatte hesaplamayı başlat"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "ve"
@@ -1328,45 +1328,45 @@ msgstr "ve"
msgid "stop work at this time"
msgstr "bu saatte hesaplamayı durdur"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(birbirine eşitse, sınırlama ortadan kalkar)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "Haftanın günlerinde sınırlamalar:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr ""
"haftanın belli günlerindeki çalışma saatlerini belirlemek için kutuları "
"işaretleyin"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Pazartesi"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Salı"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Çarşamba"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Perşembe"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "Cuma"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Cumartesi"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Pazar"
@@ -1387,9 +1387,9 @@ msgstr "Çok çekirdekli sistemlerde çekirdeklerin en çok"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% kadarı kullanılsın (ayarlamayı iptal etmek için 0 yazın)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "En çok"
@@ -1398,73 +1398,73 @@ msgstr "En çok"
msgid "% CPU time"
msgstr "% kadar işlemci gücü kullanılsın"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Genel seçenekler"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "En yüksek indirme hızı:"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KBayt/sn"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "En yüksek gönderme hızı:"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
-msgstr "Aktarım kotası:"
+msgstr "İnternet kullanım kotası:"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MB"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "her"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
-msgstr "gün"
+msgstr "günlük"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "En az bu kadar yetecek iş indirilsin:"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "En az bu kadar gün boyunca yetecek miktarda iş indirilir"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
-msgstr "En çok bu kadarda tüketilecek iş indirilsin:"
+msgstr "En çok bu sürede tüketilebilecek iş indir:"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr ""
"Bunun yanında, en çok bu kadar günde tüketilebilecek miktarda iş indirilir"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Resim dosyasıyla doğrulamayı atla"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "internet sağlayıcınız resim dosyalarını değiştiriyorsa bunu işaretleyin"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Bağlanma seçenekleri"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Internete bağlanmadan önce onay iste"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1472,11 +1472,11 @@ msgstr ""
"işaretlerseniz, internet bağlantısı kurulmaya çalışılmadan önce sizden onay "
"isteyen bir mesaj belirir"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Tamamlandığında bağlantıyı kes"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1484,150 +1484,150 @@ msgstr ""
"işaretlenirse, ağ kullanımı tamamlandığında BOINC hattı kapatır\n"
"(yalnızca uygun çevirmeli bağlantılar için)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Ağ kullanım izinleri"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "ağ kullanımı başlangıç saati"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "ağ kullanımı bitiş saati"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Disk kullanımı"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "BOINC, disk alanının gigabayt olarak en çok bu kadarını kullanabilecek"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "GB disk alanı kullanılsın"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "En az"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC, disk dolarsa en az bu miktarda disk alanını boş bırakacak"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "GB disk alanı boş kalsın"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC, disk alanının yüzde olarak en çok bu kadarını kullanabilecek"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% kadar disk alanı kullanılsın"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
-msgstr "İşler kontrol noktasını diske en erken"
+msgstr "İşler, kontrol noktasını diske en fazla"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
-msgstr "saniyede bir kaydedebilsin"
+msgstr "saniyede bir kaydetsin"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% kadar sanal bellek (swap alanı) kullanılsın"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Bellek (RAM) kullanımı"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% kadar bellek kullanılsın (bilgisayarımı kullanırken)"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% kadar bellek kullanılsın (bilgisayarım boştayken)"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Durakladığında uygulamaları bellekte bırak"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr ""
"işaretlenirse, duraklamış işlerin uygulamaları kapatılmaz ve bellekte "
"kalmayı sürdürür"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr "Bu uygulamalar çalışırken, işlemci ve ağ kullanımı duraklatılacak:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Ekle..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Bu listeye bir uygulama ekle"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Kaldır"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Bu listeden bir uygulama kaldır"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Gelişmiş seçenekler için, lütfen ziyaret edin: "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - Olay Günlüğü"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Proje"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Zaman"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Mesaj"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Yalnızca bu projeyi göster"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "&Tümünü kopyala"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Tüm mesajları panoya kopyalar."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "&Seçili mesajları kopyala"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1635,7 +1635,7 @@ msgstr ""
"Seçili mesajları panoya kopyalar. Shift ya da komut düğmelerine basıp\n"
"mesajların üzerine tıklayarak, çok sayıda mesajı seçebilirsiniz."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1643,24 +1643,24 @@ msgstr ""
"Seçili mesajları panoya kopyalar. Shift ya da Ctrl düğmelerine basıp\n"
"mesajların üzerine tıklayarak, çok sayıda mesajı seçebilirsiniz."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Kapat"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "%s ile yardım alın"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "&Tüm mesajları göster"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Tüm projelere ait mesajları gösterir."
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr ""
"Yalnızca şu anda seçili projeye ait mesajları ve BOINC'in genel mesajlarını "
@@ -1716,7 +1716,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Seçimimi hatırla ve tekrar sorma"
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&İptal"
@@ -1724,223 +1724,223 @@ msgstr "&İptal"
msgid "Don't show this dialog again."
msgstr "Bu pencereyi tekrar gösterme."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Bunun için işler indirme: "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Proje tercihleri"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Hesap yöneticisi tercihi"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "Projenin bunun için uygulaması bulunmuyor: "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "İstemci yapılandırması bunu içermez: "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " iş indirme ertelendi"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " iş indirme erteleme aralığı"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Projenin özellikleri: "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Genel"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Ana URL"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Kullanıcı adı"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Takım adı"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Kaynak paylaşımı"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Zamanlanmış RPC ertelendi"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Dosya indirmeler ertelendi"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Dosya göndermeler ertelendi"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Bilgisayar ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "CPU-yoğun değil"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "evet"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Grafik arabirimi (GUI) ile durduruldu"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "hayır"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Daha fazla iş isteme"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Zamanlanmış çağrı sürmekte"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "İş ilerleme kuyruğu"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Sunucu konumu"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "varsayılan"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Hesap yöneticisi aracılığıyla eklendi"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "İşler tamamlandığında kaldır"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Sonlandı"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Kredi"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Kullanıcı"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Bilgisayar"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Zamanlama"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Zamanlama önceliği"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Süre düzeltme faktörü"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "İşin özellikleri: "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Uygulama"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "İş birimi ismi"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "İsim"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Durum"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Alınma zamanı"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Son teslim zamanı"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Kullandığı kaynaklar"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Tahmini hesaplama miktarı"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Kontrol noktasındaki CPU zamanı"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU zamanı"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Geçen süre"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Tahmini kalan süre"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Tamamlanan bölüm"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Sanal bellek kullanımı"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Fiziksel bellek kullanımı"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Bulunduğu klasör"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "İşlem ID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Yerel:"
@@ -2034,7 +2034,7 @@ msgstr "Gerekli değilse bu bölümü boş bırakın"
msgid "User Name:"
msgstr "Kullanıcı adı:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Parola:"
@@ -2093,12 +2093,12 @@ msgstr ""
"%s'ın varsayılan dili değişti. Değişikliğin etkili olması için %s yeniden "
"başlatılmalı."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Bilgisayar Seç ve Bağlan"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2107,7 +2107,7 @@ msgstr ""
"%s'ın başka bir kopyası şu anda bu bilgisayarda\n"
"zaten çalışıyor. Lütfen izlemek için bir istemci seçin."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Sunucu adı:"
@@ -2304,23 +2304,23 @@ msgid "Learn about the projects hosted at World Community Grid"
msgstr ""
"World Community Grid tarafından barındırılan projeler hakkında bilgi edinin"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "İstemci başlıyor"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "İstemciye bağlanılıyor"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Sistem durum bilgisi alınıyor; lütfen bekleyin..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Uygulama bulunamadı"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2328,184 +2328,184 @@ msgstr ""
"Lütfen CoRD uygulamasını buradan indirin ve kurun: "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "pil gücünde"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "bilgisayar kullanımda"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "kullanıcı talebi"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "günlük zamanlama"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "İşlemci testleri sürüyor"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "disk alanı gerekiyor - tercihleri kontrol edin"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "bilgisayar kullanımda değil"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "başlıyor"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "ayrıcalıklı bir uygulama çalışıyor"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "İşlemci meşgul"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "ağ kullanım kotası doldu"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "işletim sistemi tarafından istendi"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "bilinmeyen sebep"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "GPU mevcut değil, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Yeni"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "İndirme başarısız"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "İndiriliyor"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (durakladı - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Kullanıcı projeyi durdurdu"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Kullanıcı işi durdurdu"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Durakladı - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU durakladı - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "Bellek için bekleniyor"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "Paylaşılan bellek için bekleniyor"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Çalışıyor, yüksek öncelikli"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Çalışıyor"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (CPU-yoğun-değil)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "Çalışmayı bekliyor"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Başlamaya hazır"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Zamanlanmış bekleme: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Zamanlanmış bekleme)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Ağ erişimi için bekleniyor)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Hesaplama hatası"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Gönderme başarısız"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Gönderiliyor"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Kullanıcı tarafından iptal edildi"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Proje tarafından iptal edildi"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "İptal edildi: Son teslim zamanı nedeniyle başlamadı"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "İptal edildi: Disk limitine ulaşıldı"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "İptal edildi: Zaman limitine ulaşıldı"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "İptal edildi: Bellek limitine ulaşıldı"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "İptal edildi"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Kabul edildi"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Raporlanmaya hazır"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Hata: Geçersiz durum '%d'"
@@ -2559,55 +2559,55 @@ msgstr "Kullanıcı adı ve parolayı kontrol edip, tekrar deneyin."
msgid "Check the email address and password, and try again."
msgstr "E-posta, kullanıcı adı ve parolayı kontrol edip, tekrar deneyin."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "devamı..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Tümü"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Bir proje seçin"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "Bir proje seçmek için, ismine tıklayın ya da aşağıya adresini girin."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Kategoriler:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Projeler:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Proje detayları"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Araştırma alanı:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Organizasyon:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "İnternet sitesi:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Desteklenen sistemler:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "Proje adresi:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2615,7 +2615,7 @@ msgstr ""
"Bu proje bilgisayarınızın özelliklerine uygun işe sahip olmayabilir. Yine "
"de eklemek istediğinize emin misiniz?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Bu projeyi zaten eklemiş durumdasınız. Lütfen farklı bir proje seçin."
@@ -2623,11 +2623,11 @@ msgstr "Bu projeyi zaten eklemiş durumdasınız. Lütfen farklı bir proje seç
msgid "Communicating with project."
msgstr "Proje ile bağlantı kuruluyor."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Gerekli dosyalar sunucu üzerinde bulunamadı."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Sunucuda dahili bir hata meydana geldi."
@@ -2736,7 +2736,7 @@ msgid "I agree to the terms of use."
msgstr "Kullanım koşullarını kabul ediyorum."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "Kullanım koşullarını kabul etmiyorum."
#: UnavailablePage.cpp:183
@@ -2826,7 +2826,7 @@ msgstr "'%s' geçerli bir bilgisayar adı içermiyor."
msgid "'%s' does not contain a valid path."
msgstr "'%s' geçerli bir yol içermiyor."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Komutlar"
@@ -2881,7 +2881,7 @@ msgstr "Bildirimler alınıyor; lütfen bekleyin..."
msgid "There are no notices at this time."
msgstr "Şu anda görüntülenecek bildirim yok."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Bildirimler"
@@ -2898,7 +2898,7 @@ msgstr ""
"alır ve gerekiyorsa daha fazla iş indirir."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3135,135 +3135,135 @@ msgstr "boş: "
msgid "used by other programs: "
msgstr "başka programlarca kullanılan: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Toplam Krediniz"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Günlük Ortalama Krediniz"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Bilgisayarınızın Toplam Kredisi"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Bilgisayarınızın Günlük Ortalama Kredisi"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Son güncelleme: %.0f gün önce"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Toplam kredim"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Toplam kredinizi görüntüler"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "Günlük ortalama kredim"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Günlük üretilen ortalama kredinizi görüntüler"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Bilgisayarımın toplam kredisi"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Bu bilgisayarınızın toplam kredisini görüntüler"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "Bilgisayarımın ortalama kredisi"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Bu bilgisayarınızın ortalama kredisini görüntüler"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Önceki proje"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Önceki proje için çizelge"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Sonraki proje >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Sonraki proje için çizelge"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Proje listesini gizle"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Tüm alan grafikler için kullanılır"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Görünüm kipi"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Tek proje"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Seçilen projeyi tek çizelgede göster"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Tüm projeler (ayrı)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Tüm projeleri göster, her biri için ayrı çizelge"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Tüm projeler (birlikte)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Tüm projelerin bulunduğu tek çizelge göster"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Tüm projeler (özet)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Tüm projelerin özetinin bulunduğu tek çizelge göster"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "İstatistikler"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Çizelgeler güncelleniyor..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Proje listesini göster"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Grafikler için daha küçük bir alan kullanılır"
@@ -3430,10 +3430,6 @@ msgstr "Kalan (tahmini)"
msgid "Deadline"
msgstr "Son teslim zamanı"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "İsim"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "İşler"
@@ -3592,40 +3588,40 @@ msgstr "İptal etmek istediğinize emin misiniz?"
msgid "Question"
msgstr "Soru"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Gelişmiş görünüm...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Gelişmiş grafiksel arayüzü görüntüler."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Kaplama"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Kullanıcı arayüzünün görünümünü seçin."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "Varsayılan"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Hesaplamayı duraklatır"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Hesaplamayı sürdürür"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Projelerden ya da BOINC'ten gelen bildirimleri gösterir"
@@ -3647,117 +3643,123 @@ msgid "Click OK to set preferences."
msgstr "Tercihlerinizi kaydetmek için 'Tamam'ı tıklayın."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "İnternet tabanlı ayarlarınıza dönmek için 'Temizle'yi tıklayın."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Aşağıda listelenen tüm tercihler için web tabanlı ayarları geri yüklemek "
+"için Temizle'yi tıklatın."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Detaylı tercih seçenekleri için, 'Gelişmiş görünüm'e geçiş yapın ve "
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "menüden 'Hesaplama tercihleri'ni seçin."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"Ek ayarlar için, 'Gelişmiş görünüm'de 'Hesaplama tercihleri' seçeneğini "
+"seçin."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Yalnızca bu saatler arasında çalıştır:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Bu saatler arasında internete bağlan:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "En çok bu kadar kullan:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "disk alanı"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "işlemci (CPU) gücü"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Pil gücündeyken işleri çalıştır?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Bu kadar süre boşta kaldığında çalıştır:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Yukarıda listelenen tüm yerel tercihleri temizler ve pencereyi kapatır"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Herhangi"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%%%d"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (Daima çalış)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Tüm yerel tercihlerinizi kaldırmak istediğinize emin misiniz?\n"
@@ -3817,116 +3819,116 @@ msgstr ""
"adlı işi iptal etmek istediğinize emin misiniz?\n"
"(İlerleme: %%%.1lf, Durum: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "Katıldığınız bir proje bulunmuyor. Lütfen bir proje ekleyin."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Mevcut değil"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "İşler:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Erişim için bir iş seçin"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Sahibi:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Bu işin ilerleme oranı"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "İş komutları"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Bu işe verilebilecek komutları gösterir"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Uygulama: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%%%.3f"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Uygulama: Mevcut değil"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Mevcut değil"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Geçen süre: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Kalan süre (tahmini): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Durum: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Mevcut durum bilgisi alınıyor..."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "İş sunucudan indiriliyor"
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Çalışma Durdu: Pil Gücünde Çalışıyor."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Çalışma Durdu: Kullanıcı Faal."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Çalışma Durdu: Kullanıcı Çalışmayı Duraklattı."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Çalışma Durdu: Günlük Zamanlama"
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Çalışma Durdu: Testler Çalışıyor."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Çalışma Durdu."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Proje sunucularına bağlanılması için bekleniyor."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Mevcut durum bilgisi alınıyor"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Çalıştırılacak iş bulunmuyor"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Çekirdek istemciyle bağlantı kurulamadı"
@@ -3968,6 +3970,24 @@ msgstr "Tümünü Göster"
msgid "Quit %s"
msgstr "%s'den ayrıl"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Kullanım koşullarını kabul etmiyorum."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "İnternet tabanlı ayarlarınıza dönmek için 'Temizle'yi tıklayın."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Detaylı tercih seçenekleri için, 'Gelişmiş görünüm'e geçiş yapın ve "
+
+#~ msgid "the Advanced View."
+#~ msgstr "menüden 'Hesaplama tercihleri'ni seçin."
+
+#~ msgid "Workunit name"
+#~ msgstr "İş birimi ismi"
+
+#~ msgid "invalid float"
+#~ msgstr "geçersiz değer"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Gelişmiş (erişilebilir) grafiksel arayüzü görüntüler."
diff --git a/locale/tr/BOINC-Project-Generic.po b/locale/tr/BOINC-Project-Generic.po
index 14f4b4a..a2250be 100644
--- a/locale/tr/BOINC-Project-Generic.po
+++ b/locale/tr/BOINC-Project-Generic.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Project Generic\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-24 20:31+0000\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-01-17 20:25+0000\n"
"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: Donanım Haber\n"
"Language: tr\n"
@@ -16,7 +16,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385325085.0\n"
+"X-POOTLE-MTIME: 1389990335.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Türkçe"
@@ -190,7 +190,7 @@ msgstr "Forumlarda ara"
msgid "Advanced search"
msgstr "Gelişmiş arama"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Özel mesajlar"
@@ -200,8 +200,8 @@ msgstr "Özel mesajlar"
msgid "Questions and Answers"
msgstr "Soru ve Yanıtlar"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -267,7 +267,7 @@ msgstr "Okunmamış"
msgid "Message %1"
msgstr "Mesaj %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "gizli"
@@ -481,7 +481,7 @@ msgstr "Gizli bir konu başlığına gönderi yapılamaz."
msgid "Thread"
msgstr "Yeni konu"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Yanıtlar"
@@ -490,7 +490,7 @@ msgstr "Yanıtlar"
msgid "Views"
msgstr "Okunma"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Son mesaj"
@@ -529,7 +529,7 @@ msgid "Home"
msgstr "Ev"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "İş"
@@ -595,9 +595,9 @@ msgid "Created"
msgstr "Oluşturulma"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -775,7 +775,7 @@ msgstr "Son bağlantı"
msgid "Computer info"
msgstr "Bilgisayar bilgisi"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Sıra"
@@ -784,9 +784,9 @@ msgstr "Sıra"
msgid "Avg. credit"
msgstr "Ort. kredi"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -874,8 +874,8 @@ msgstr "Yalnızca son 30 gün içerisinde aktif olan bilgisayarlar"
msgid "Computer ID"
msgstr "Bilgisayar NO"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -911,7 +911,7 @@ msgstr "Gelen kutusu"
msgid "Write"
msgstr "Yaz"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Özel mesaj gönder"
@@ -1690,7 +1690,7 @@ msgstr "Raporlanma ya da<br />son teslim tarihi"
msgid "explain"
msgstr "açıklama"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Durum"
@@ -1782,9 +1782,9 @@ msgstr "Anahtar kelimeler"
msgid "Find teams with these words in their names or descriptions"
msgstr "Takımları, isimleri ya da tanıtımlarındaki bu kelimelere göre bul"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1792,7 +1792,7 @@ msgstr "Takımları, isimleri ya da tanıtımlarındaki bu kelimelere göre bul"
msgid "Country"
msgstr "Ülke"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Takımın tipi"
@@ -1820,8 +1820,8 @@ msgstr "Değişim talep ettiniz"
msgid "founder response deadline is %1"
msgstr "kurucunun son yanıt tarihi %1."
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Yok"
@@ -1845,27 +1845,27 @@ msgstr "Tanıtım"
msgid "Web site"
msgstr "İnternet sitesi"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Çapraz-proje istatistikleri"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Tip"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Mesaj panosu"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Konu başlıkları"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Bu takıma katıl"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1873,79 +1873,79 @@ msgstr ""
"Not: Topluluk tercihlerinizde 'e-postayla uyarı' aktifse, katıldığınızda "
"takım kurucusu e-posta adresinizi görebilecek."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Yeni üyeler kabul edilmiyor"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Kurucu değişimi talep edildi"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "%1 tarihine kadar yanıtlanmalı"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Takım kurucusu değişimi"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Üyeler"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Kurucu"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Yöneticiler"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Son günlerdeki yeni üyeler"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Toplam üye"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "bak"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Aktif üye"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Kredisi bulunan üye"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Yönetici"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Önceki %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Sonraki %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Eşleşen takım yok."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Bu işlem kurucu olmayı gerektirir."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Bu işlem takım yöneticisi hakları gerektirir."
@@ -1958,7 +1958,7 @@ msgstr ""
"yaparsanız, bir süre sonra üzerine yazılabilir. Bunun yerine, %1BOINC "
"genişletilmiş-takım%2ı düzenleyin."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1966,47 +1966,47 @@ msgstr ""
"%1Gizlilik notu%2: Bir takım kurarsanız, proje tercihleriniz (kaynak "
"paylaşımı, grafik tercihleri) herkese görünür olacaktır."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Takım adı, salt metin sürümü"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "HTML etiketleri kullanmayın."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Takım adı, HTML sürümü"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "%1Sınırlı HTML etiketleri%2 kullanabilirsiniz."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "HTML bilmiyorsanız, bu bölümü boş bırakın."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Varsa, takımın İnternet sitesi adresi"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "\"http://\" olmadan"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Belirttiğiniz URL, takımın bu sitedeki sayfasında gösterilecek."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Takımın tanıtımı"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Yeni üyeler kabul edilsin mi?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Kullanıcı profili"
@@ -2039,7 +2039,7 @@ msgid "Computers on this account"
msgstr "Bu hesaptaki bilgisayarlar"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Bak"
@@ -2056,8 +2056,8 @@ msgstr "Çapraz-proje istatistikleri"
msgid "Account"
msgstr "Hesap"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Takım"
@@ -2086,7 +2086,7 @@ msgstr "Hesap bilgisi"
msgid "Email address"
msgstr "E-posta adresi"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "Site"
@@ -2094,7 +2094,7 @@ msgstr "Site"
msgid "Postal code"
msgstr "Posta kodu"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "%1 üyelik tarihi"
@@ -2114,7 +2114,7 @@ msgstr "parola"
msgid "other account info"
msgstr "diğer hesap bilgisi"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "Kullanıcı NO"
@@ -2159,96 +2159,96 @@ msgstr "%1 tercihleri"
msgid "Community"
msgstr "Topluluk"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Sil"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Oluştur"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Profil"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 gönderi"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Uyarılar"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Takımdan ayrıl"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Yönet"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(kurucu değişim isteği beklemede)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Takım üyeliği"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "bir takım bul"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Kurucusu fakat üyesi değil"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Arkadaş bul"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Arkadaşlar"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Bilgisayarlar"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Bağışçı"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "İrtibat"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Bu kişi arkadaşınız"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Arkadaşlığı bitir"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "İstek beklemede"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Arkadaş olarak ekle"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "kullanıcı adı başında veya sonda boşluk karakteri olamaz"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "kullanıcı adı boş olamaz"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "kullanıcı adı HTML etiketleri içeremez"
@@ -2328,7 +2328,7 @@ msgstr "Veritabanına erişilemedi - lütfen daha sonra tekrar deneyin"
msgid "Unable to select database - please try again later"
msgstr "Veritabanı seçilemedi - lütfen daha sonra tekrar deneyin"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Bu bilgisayarda oturumumu açık tut"
@@ -2536,7 +2536,7 @@ msgstr "takım oluştur ya da katıl"
msgid "User of the day"
msgstr "Günün kullanıcısı"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Sunucu durumu"
@@ -5639,135 +5639,135 @@ msgstr "Çalışmıyor"
msgid "Disabled"
msgstr "Devre dışı"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Proje durumu"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Sunucu yazılımı sürümü: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Program"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Sunucu"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "veri-yürüten internet sayfaları"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "gönderme/indirme sunucusu"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "zamanlayıcı"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Çalışıyor:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Program normal olarak çalışıyor"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Çalışmıyor:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Programda hata var ya da proje kapalı"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Devre dışı:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Program devre dışı"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Hesaplama durumu"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Veritabanı sunucusu erişilebilir değil"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Gönderilmeye hazır işler"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Süren işler"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Doğrulama için bekleyen iş birimleri"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Benzetme için bekleyen iş birimleri"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Silinmek için bekleyen iş birimleri"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Dosya silinmesi için bekleyen işler"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Dönüştürücüde biriken iş (saat)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Kullanıcılar"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "güncel krediye sahip"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "krediye sahip"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "son 24 saatte kaydolan"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "şuanki GigaFLOP"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Uygulamaya göre işler"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "uygulama"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "gönderilmemiş"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "sürmekte"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "son 100 sonucun ortalama çalışma saati (en az-çok)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "son 24 saatteki yeni üyeler"
@@ -6040,6 +6040,10 @@ msgstr "Yeni kurucu olsun"
msgid "Change founder"
msgstr "Kurucuyu değiştir"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Takımın aktarılacağı hiçbir kullanıcı yok."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Boş olmayan bir takım adı seçmelisiniz."
diff --git a/locale/tr/BOINC-Setup.mo b/locale/tr/BOINC-Setup.mo
index 2571f20..056aae9 100644
Binary files a/locale/tr/BOINC-Setup.mo and b/locale/tr/BOINC-Setup.mo differ
diff --git a/locale/tr/BOINC-Setup.po b/locale/tr/BOINC-Setup.po
index 355297c..333d145 100644
--- a/locale/tr/BOINC-Setup.po
+++ b/locale/tr/BOINC-Setup.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
"PO-Revision-Date: 2013-11-24 20:51+0000\n"
"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -28,11 +28,11 @@ msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr ""
"Özür dileriz, %s'in bu versiyonu 10.5 veya daha yüksek sistem gerektiriyor."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Evet"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Hayır"
@@ -55,21 +55,21 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr ""
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr ""
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
msgstr ""
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -77,21 +77,27 @@ msgid ""
"This will remove the executables but will not touch %s data files."
msgstr ""
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Durduruldu: %s etkilenmedi."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr ""
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr ""
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -103,7 +109,7 @@ msgid ""
"\"%s\"."
msgstr ""
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -111,10 +117,10 @@ msgid ""
"\n"
msgstr ""
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr ""
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr ""
diff --git a/locale/tr/BOINC-Web.mo b/locale/tr/BOINC-Web.mo
index d257491..579078e 100644
Binary files a/locale/tr/BOINC-Web.mo and b/locale/tr/BOINC-Web.mo differ
diff --git a/locale/tr/BOINC-Web.po b/locale/tr/BOINC-Web.po
index f49bce8..a5e3fc7 100644
--- a/locale/tr/BOINC-Web.po
+++ b/locale/tr/BOINC-Web.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Web Site\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
"PO-Revision-Date: 2013-11-24 20:45+0000\n"
"Last-Translator: Aycan <aycandemirel at hotmail.com>\n"
"Language-Team: Donanım Haber <bilgi at donanimhaber.com>\n"
@@ -451,16 +451,16 @@ msgstr ""
msgid "Cognitive science and artifical intelligence"
msgstr "Bilişsel bilim ve yapay zeka"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Özel"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Yapay zeka"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -472,19 +472,19 @@ msgstr ""
"sözcük veritabanlarının parçalarını ve sözcük etiketlerinin parçalarını "
"kullanır) çözümle ve dönüştür. "
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Biyoloji ve Tıp"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "University College Dublin"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Sıtma ilacı keşfi"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -498,15 +498,15 @@ msgstr ""
"hedeflemesi gerekli. FightMalaria at Home projesi, bu yeni hedefleri bulmaya "
"yöneliktir."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Karlsruhe Üniversitesi (Almanya)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Protein yapısı tahmini"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -520,15 +520,15 @@ msgstr ""
"ve önemli proteinlerin 3 boyutlu yapısının oluşturulmasıyla yeni ilaçların "
"geliştirilebilmesi için işlemsel bir yöntem kullanır."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Delaware Üniversitesi"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Protein - ligand etkileşimleri araştırması"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -540,15 +540,15 @@ msgstr ""
"hakkında daha fazla bilgi edinmeyi amaçlıyor ve bunu yaparak yeni "
"farmakolojik buluşlara öncül bilgileri edinmeyi hedefliyor."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Barselona Biyomedikal Araştırma Parkı (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Proteinlerin moleküler simülasyonları"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -559,15 +559,15 @@ msgstr ""
"optimize edilmiş ilk tam-atom molekül dinamiği kodu (CellMD) sayesinde yeni "
"hesaplamalı senaryolar açar."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Technion, İsrail"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Genetik bağlantı analizi"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -577,16 +577,16 @@ msgstr ""
"tansiyon, kanser, şizofreni ve diğer bir sürü hastalığa çare bulmalarına "
"yardım eder."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Maryland Üniversitesi Biyoenformatik ve Hesaplamalı Biyoloji Merkezi"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Canlı bilimleri araştırması"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -598,15 +598,15 @@ msgstr ""
"bağlantılar üzerinde çalışan Maryland Üniversitesi'ndeki bilim adamlarına "
"hesaplama gücü sağlar. "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "İsviçre Tropikal Enstitüsü"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Epidemiyoloji (Salgın hastalıklar bilimi)"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -624,15 +624,15 @@ msgstr ""
"sosyal faktörlerle ile ilgili bir dizi parametreyi ve büyük insan "
"popülasyonunun simülasyonları gerektirir."
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Washington Üniversitesi"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Biyoloji"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -648,11 +648,11 @@ msgstr ""
"Ayrıca, HIV (AIDS), sıtma, kanser ve Alzheimer gibi hastalıklarla mücadele "
"için yeni proteinler tasarlama çabalarımıza yardımcı olacaksınız."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Viyana Üniversitesi"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -662,19 +662,19 @@ msgstr ""
"verilerle, bir çok biyoenformatik araştırma projesinde anahtar rol oynayan "
"bir kamu veritabanı sağlar."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Yer Bilimleri"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Oxford Üniversitesi"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "İklim araştırması"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -695,15 +695,25 @@ msgstr ""
"yelpazedeki farklı senaryolar altında nasıl değişebileceğini keşfetmemizi de "
"sağlayacak. "
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Astronomi, Fizik ve Kimya"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr ""
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr ""
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Astronomi"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -713,15 +723,15 @@ msgid ""
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Austin'deki Texas Üniversitesi"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Kimya"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -734,33 +744,33 @@ msgid ""
"interested in calculating the long time dynamics of systems."
msgstr ""
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Urbana-Chamapign'deki Illinois Üniversitesi"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr ""
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Rensselaer Politeknik Enstitüsü"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr ""
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Leiden Üniversitesi, Hollanda"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -770,15 +780,15 @@ msgid ""
"simulations through the grid."
msgstr ""
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Wisconsin Üniversitesi - Milwaukee, Max Planck Enstitüsü"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Astrofizik"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -787,15 +797,15 @@ msgid ""
"international organizations."
msgstr ""
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN (Avrupa Nükleer Araştırma Merkezi)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Fizik"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -809,22 +819,22 @@ msgstr ""
" LHC'nin tasarımını ve detektörlerini geliştirmek amacıyla simülasyonlar "
"yürütür."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr ""
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Kaliforniya Üniversitesi, Berkeley"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Astrofizik, astrobiyoloji"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -833,15 +843,15 @@ msgid ""
"detection would provide evidence of extraterrestrial technology."
msgstr ""
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Bielefeld Üniversitesi Uygulamalı Bilimleri"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Kimya mühendisliği ve nanoteknoloji"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -849,44 +859,44 @@ msgid ""
"biotechnology."
msgstr ""
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Çoklu uygulamalar"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Çin Bilimler Akademisi"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Fizik, biyokimya ve diğerleri"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr ""
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Matematik, fizik ve evrim"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
msgstr ""
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "MTA-SZTAKI Paralel ve Dağıtık Sistemler Laboratuvarı (Macaristan)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Avrupa araştırma projeleri"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -894,27 +904,27 @@ msgid ""
"by the project include math, physics, biology, etc."
msgstr ""
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "İspanyol üniversiteleri ve araştırma merkezleri"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Çeşitli İspanyol araştırma projeleri"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Fizik, malzeme bilimi ve biyomedikal araştırmaları"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM Kurumsal Sosyal Sorumluluk"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Tıbbi, çevresel ve diğer insani araştırmalar"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -926,50 +936,50 @@ msgstr ""
"araştırma yapmayı hedefler. Araştırma, HIV-AIDS, kanser, tropikal ve ihmal "
"edilen hastalıklar, güneş enerjisi, temiz su ve daha birçoğunu içerir."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Matematik, hesaplama ve oyunlar"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Bilgisayar Bilimi"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Matematik, fizik, yapay zeka"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr ""
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Kriptografi"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr ""
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Matematik"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr ""
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Kaliforniya Eyalet Üniversitesi, Fullerton"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Büyük tamsayıların çarpanlarına ayrılması"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -979,7 +989,7 @@ msgid ""
"hundreds of digits long."
msgstr ""
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -987,11 +997,11 @@ msgstr ""
"Vilnius Gediminas Teknik Üniversitesi ve Kaunas Teknoloji Üniversitesi "
"(Litvanya)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Yazılım test etme"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -999,11 +1009,11 @@ msgid ""
"involve the study of Monte-Carlo based software testing."
msgstr ""
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Leiden Üniversitesi Matematik Enstitüsü / Kennislink"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1014,23 +1024,23 @@ msgid ""
"problems can be answered directly from it."
msgstr ""
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr ""
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Hochschule RheinMain Uygulamalı Bilimler Üniversitesi"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr ""
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1045,6 +1055,9 @@ msgstr "Yorum"
msgid "News is available as an %sRSS feed%s"
msgstr "Haberler bir %sRSS beslemesi%s olarak da sunulmaktadır"
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Astronomi, Fizik ve Kimya"
+
#~ msgid "Download BOINC + Virtualbox"
#~ msgstr "BOINC + Virtualbox'ı indir"
diff --git a/locale/uk/BOINC-Manager.mo b/locale/uk/BOINC-Manager.mo
index 7c485ad..d3ccdd8 100644
Binary files a/locale/uk/BOINC-Manager.mo and b/locale/uk/BOINC-Manager.mo differ
diff --git a/locale/uk/BOINC-Manager.po b/locale/uk/BOINC-Manager.po
index 0e815c1..e347cf4 100644
--- a/locale/uk/BOINC-Manager.po
+++ b/locale/uk/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-12-28 22:21+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-26 13:20+0000\n"
"Last-Translator: Олег <pukish_oleg at ukr.net>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: uk\n"
@@ -24,7 +24,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1388269262.0\n"
+"X-POOTLE-MTIME: 1393420839.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -212,343 +212,343 @@ msgstr "З'єднання встановлене"
msgid "Disconnected"
msgstr "З’єднання розірване"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "Закрити вікно %s"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "&Закрити вікно"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "Вийти з %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "&Повідомлення\t Ctrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "Показати повідомлення"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "&Проекти\t Ctrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "Показати проекти"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "&Завдання\t Ctrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "Показати завдання"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "Пере&дача\t Ctrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "Показати передачу даних"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "&Статистика\t Ctrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "Показати статистику"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "&Використання дискового простору\t Ctrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "Показати використання дискового простору"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "Спрощений &Вид...\t Ctrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "Показати простий графічний інтерфейс."
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "&Додати проект або менеджер проектів..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr ""
"Стати учасником у будь-кому або в усіх 30+ проектах з багатьох галузей науки"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "&Синхронізувати з %s"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "Отримати поточні налаштування з %s"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "&Додати проект..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "Додати проект"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "В&ід'єднатися від %s..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "Від'єднати цей комп'ютер від менеджера проектів."
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "&Налаштування..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "Налаштування графічного інтерфейсу та проксі-сервера"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "Налаштування &клієнта..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "Змінити налаштування обчислень"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "&Постійна обробка"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "Дозволяти обчислення незалежно від налаштувань"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "Графік роботи визначається &налаштуваннями"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "Обчислення виконуються відповідно до налаштувань"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "&Призупинити"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "Призупиняється обробка всіх завдань в усіх проектах"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "Завжди використовувати графічний процесор"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "Обчислення за допомогою графічного процесора запущені завжди"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "Використовувати графічний процесор відповідно до налаштувань"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "Обчислювати за допомогою графічного процесора відповідно до налаштувань"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "Призупинити використання графічного процесора"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr ""
"Зупинити обробку завдань за допомогою графічного процесора незалежно від "
"налаштувань"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "Підключення до Інтернету доступне завжди"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "Дозволити доступ до Інтернету незалежно від налаштувань"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "Доступ до Інтернету визначається налаштуваннями"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "Дозволити доступ до Інтернету відповідно до налаштувань"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "Працювати автономно"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "Заборонити BOINC використовувати Інтернет"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "Підключити інший комп’ютер з %s"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "Вибрати комп'ютер..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "Завершити роботу підключеного клієнта..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "Завершити роботу підключеного клієнта"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "Запустити тест &продуктивності"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "Запустити тест продуктивності процесора"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "Запустити обмін даними"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "Повторити всі незавершені обміни даними"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "Читати файли налаштувань"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr ""
"Переглянути інформацію про налаштування з cc_config.xml і будь-яких файлів "
"app_config.xml"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "Читати локальний файл загальних налаштувань"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "Читати налаштування з global_prefs_override.xml."
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "Запустити інший екземпляр %s..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "Запустити інший %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "Перегляд подій...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "Показати діагностичні повідомлення."
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s &Довідка"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "Показати інформацію про %s"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "&%s довідка"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "Показати інформацію про %s"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
#, c-format, c-format
msgid "%s &web site"
msgstr "%s &веб-сайт"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "Показати інформацію про BOINC і %s"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "&Про %s..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "Інформація про ліцензію та авторське право."
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "&Файл"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "&Вид"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "&Інструменти"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "&Діяльність"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "Д&одатково"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "&Довідка"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - Припинити використання %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -563,12 +563,12 @@ msgstr ""
"\n"
"Бажаєте припинити використовувати %s?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - Завершити роботу поточного клієнта..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -577,27 +577,27 @@ msgstr ""
"%s вимкне підключений зараз клієнт\n"
"і запитає у Вас адресу для підключення іншого комп'ютера."
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s успішно додав проект %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "Відбувається підключення до %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "Підключений до %s (%s)"
@@ -634,26 +634,26 @@ msgstr ""
"\n"
"Будь-ласка, відвідайте домашню сторінку проекту для отримання інструкцій."
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "Встановлюється зв'язок з BOINC-клієнтом. Будь-ласка, зачекайте..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "&Вийти з %s"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "В&ийти %s"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - Встановлення зв'язку"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "Відмінити"
@@ -811,7 +811,7 @@ msgstr "%s розірвав підключення до Інтернету."
msgid "%s failed to disconnected from the Internet."
msgstr "%s не вдалося розірвати підключення до Інтернету."
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -833,7 +833,7 @@ msgstr ""
"користувачів\n"
" 'boinc_master'."
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -843,16 +843,16 @@ msgstr ""
"будь-ласка, %s.\n"
"(Код помилки %d"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " на "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -860,67 +860,67 @@ msgstr ""
"Для коректної роботи BOINC необхідне перезавантаження.\n"
"Перезавантажте, будь-ласка, комп’ютер і спробуйте знову."
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC менеджер"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC менеджер був автоматично запущений операційною системою"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "Згортати BOINC менеджер в значок на панелі завдань під час запуску"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "Каталог, що містить виконавчий файл клієнта BOINC"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "Папка даних BOINC"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "Назва або IP -адреса комп'ютера"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "Номер порту GUI RPC"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "Пароль"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "Запускати BOINC з ключами запуску"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "відключити політику безпеки доступу користувачів до BOINC"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "включити режим відлагодження для виводу повідомлень про помилки"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "дозволено декілька екземплярів менеджера BOINC"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "Не використаний: зациклився через баг у XCode 4.2"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(Автовизначення)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(Невідомий)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(Користувацький)"
@@ -947,7 +947,7 @@ msgid "E&xit"
msgstr "В&ихід"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "Відновити"
@@ -1108,64 +1108,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "Відкрита Інфраструктура для Розподілених Обчислень університету Берклі"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "&Гаразд"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "помилкове число"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "неправильний номер"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "помилка вводу, формат часу ГГ:ХХ"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "неправильно задано відрізок часу, правильний формат ГГ:ХХ-ГГ:ХХ"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "виявлене некоректне значення"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "Помилка перевірки"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "Вибір додатків"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' не є виконуваним додатком."
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "Додати виконуваний додаток"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "Назва додатку, що додається?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "Додати винятковий додаток"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "Назви додатків повинні закінчуватись на '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' вже у списку."
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1173,11 +1173,11 @@ msgstr ""
"Ви справді хочете очистити вісі локальні налаштування?\n"
"(Дія не вплине на виняткові додатки.)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "Підтвердження"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - Налаштування"
@@ -1193,11 +1193,11 @@ msgstr ""
"Натисніть 'Очистити' для відновлення веб-налатувань (крім виняткових "
"додатків)."
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "Очистити"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "очистити всі локальні налаштування і закрити діалогове вікно"
@@ -1217,7 +1217,7 @@ msgstr "диск і використання пам'яті"
msgid "exclusive applications"
msgstr "виняткові додатки"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "Гаразд"
@@ -1230,7 +1230,7 @@ msgid "close the dialog without saving"
msgstr "закрити діалогове вікно без збереження змін"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "Допомога"
@@ -1289,7 +1289,7 @@ msgstr ""
"завдання"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "хвилин"
@@ -1305,7 +1305,7 @@ msgstr "зупинити обробку, якщо використання пр
msgid "percent (0 means no restriction)"
msgstr "відсотків (0 - немає обмежень)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "Щодня між годинами"
@@ -1313,8 +1313,8 @@ msgstr "Щодня між годинами"
msgid "start work at this time"
msgstr "запустити обробку в цей час"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "і"
@@ -1322,43 +1322,43 @@ msgstr "і"
msgid "stop work at this time"
msgstr "зупинити обробку в цей час"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(обмеження не діє при рівності значень)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "За розкладом:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "виберіть день тижня і вкажіть часовий інтервал"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "Понеділок"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "Вівторок"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "Середа"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "Четвер"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "П'ятниця"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "Субота"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "Неділя"
@@ -1379,9 +1379,9 @@ msgstr "У багатопроцесорних системах використ
msgid "% of the processors (0 means ignore this setting)"
msgstr "% процесорів (0 означає ігнорування цього налаштування)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "Використовувати щонайбільше"
@@ -1390,76 +1390,76 @@ msgstr "Використовувати щонайбільше"
msgid "% CPU time"
msgstr "% часу процесора"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "Загальні параметри"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "Максимальна швидкість завантаження"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "КБайт/с."
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "Максимальна швидкість відвантаження"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "Передавати не більше"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Мбайт"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "кожні"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "днів"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "Мінімальний робочий буфер"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr ""
"Намагатися підтримувати достатню кількість завдань для забезпечення роботи "
"на всі ці дні"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "Максимальний додатковий робочий буфер"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "Додатково, підтримувати достатньо завдань для цих днів"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "Не перевіряти завантажувані файли"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr ""
"виберіть цей пункт, якщо Ваш інтернет провайдер змінює файли, що "
"завантажуються"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "Параметри підключення"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "Підтверджувати перед підключенням до Інтернету"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
@@ -1467,11 +1467,11 @@ msgstr ""
"якщо відмічено, перед початком підключення до Інтернету BOINC запитає "
"дозволу"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "Розірвати з'єднання після завершення"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1479,151 +1479,151 @@ msgstr ""
"якщо відмічено, після завершення мережевих передач BOINC розірве з’єднання\n"
"(стосується лише dialup-з’єднання)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "Дозволене використання мережі"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "дозволити використання мережі, починаючи з"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "заборонити використання мережі, починаючи з"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "Використання диска"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "максимальний дисковий простір для роботи BOINC (у гігабайтах)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "Гігабайт місця на диску"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "Залишати щонайменше"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr ""
"мінімальний обсяг дискового простору, який повинен залишатися вільним (в "
"гігабайтах)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "Гігабайт вільного місця на диску"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC використовує щонайбільше цю частку загального дискового простору"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% від загального дискового простору"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "Зберігати проміжні результати щонайбільше кожні"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "секунд"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% файлу підкачки"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "Використання пам’яті"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% коли комп'ютер використовується для роботи"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% коли комп'ютер простоює"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "Залишати неактивні додатки в пам'яті"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "якщо відмічено, призупинені завдання залишатимуться у пам’яті"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr ""
"Призупинити використання процесора і мережі, коли працюють дані додатки:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "Додати..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "Додати додаток до списку"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "Видалити"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "Видалити додаток зі списку"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "Для розширених налаштувань, зверніться до "
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "% s - Перегляд подій"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "Проект"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "Час"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "Повідомлення"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "&Показати тільки цей проект"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "Копіювати &все"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "Копіювати всі повідомлення в буфер обміну."
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "Копіювати &виділене"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
@@ -1631,7 +1631,7 @@ msgstr ""
"Копіювати виділені повідомлення в буфер обміну. Ви можете вибрати декілька "
"повідомлень, утримуючи SHIFT і CTRL для їх виділення."
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
@@ -1639,24 +1639,24 @@ msgstr ""
"Копіювати виділені повідомлення в буфер обміну. Можна використовувати "
"клавіші SHIFT і CTRL для виділення декількох повідомлень."
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "&Закрити"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "Отримати довідку щодо %s"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "Показати всі &повідомлення"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "Показати повідомлення для всіх проектів"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "Показувати повідомлення тільки для обраного проекту"
@@ -1709,7 +1709,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "Запам'ятати вибір і більше не показувати це вікно."
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "&Скасувати"
@@ -1717,223 +1717,223 @@ msgstr "&Скасувати"
msgid "Don't show this dialog again."
msgstr "Більше не показувати цей діалог."
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "Не запитувати завдання для"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "Налаштування проекту"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "Налаштування менеджера проектів"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "У проекту немає додатків для "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "Конфігурація клієнта виключає "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr "запит завдань відкладений на"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " інтервал затримки запиту завдань"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "Властивості проекту "
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "Загальні"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "Адреса для підключення"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "Ім'я користувача"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "Назва команди"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "Виділено ресурсів"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "Запит до планувальника відкладений на"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "Завантаження файлів відкладене на"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "Відправлення файлів відкладене на"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "Ідентифікатор комп'ютера"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "Без використання процесора"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "Так"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "Призупинено вручну"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "ні"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "Не запитувати завдання"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "Сеанс зв’язку з планувальником"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "Очікування проміжного відправлення"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "Розміщення комп’ютера"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "за замовчуванням"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "Доданий менеджером проектів"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "Буде видалений після завершення завдань"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "Завершений"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "Бали"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "Користувач"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "Комп`ютер (хост)"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "Планувальник"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "Пріоритет планувальника"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "процесор"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "Поправочний коефіцієнт тривалості"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "Інформація про завдання "
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "Додаток"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "Назва завдання"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "Назва"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "Стан"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "Отримано"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "Відправити до"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "Виділено ресурсів"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "Очікуваний об’єм обчислень"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "Процесорний час в контрольній точці"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "Процесорний час"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "Витрачено часу"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "Залишилось до завершення"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "Відсоток виконання"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "Обсяг віртуальної пам'яті"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "Використання пам'яті"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "Папка"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "ID процесу"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "Локальний: "
@@ -2021,7 +2021,7 @@ msgstr "Залишити поля порожніми, якщо не викори
msgid "User Name:"
msgstr "Ім'я користувача:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "Пароль:"
@@ -2081,12 +2081,12 @@ msgstr ""
"Мову інтерфейсу програми %s було змінено, для вступу в силу змін потрібно "
"перезапустити %s."
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - Вибір комп'ютера"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
@@ -2095,7 +2095,7 @@ msgstr ""
"Інший примірник %s вже працює \n"
"на даному комп'ютері. Будь-ласка, виберіть клієнт для моніторингу."
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "Назва хоста:"
@@ -2299,23 +2299,23 @@ msgstr "Дослідження"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "Дізнайтеся про проекти, запущені в рамках World Community Grid"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "Запуск клієнта"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "Підключення до клієнта"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "Оновлюється інформація про стан системи; зачекайте будь-ласка..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "Відсутній додаток"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
@@ -2323,184 +2323,184 @@ msgstr ""
"Будь-ласка, завантажте і встановіть додаток CoRD із сайту "
"http://cord.sourceforge.net"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "живлення від акумуляторів"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "комп'ютер використовується для роботи"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "запит користувача"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "в залежності від часу доби"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "запущений тест продуктивності процесора"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "необхідний дисковий простір - перевірте налаштування"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "комп'ютер не використовується для роботи"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "запуск"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "обробляється винятковий додаток"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "Процесор зайнятий"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "перевищений ліміт використання мережі"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "запитаний операційною системою"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "невідома причина"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "Відсутній графічний процесор, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "Новий"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "Помилка завантаження"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "Завантаження"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (призупинено - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "Проект призупинений користувачем"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "Обробка завдання призупинена користувачем"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "Призупинено - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "графічний процесор призупинено- "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "В очікуванні звільнення оперативної пам'яті"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "В очікуванні звільнення колективної оперативної пам`яті"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "Працює, високий пріоритет"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "Працює"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (без використання процесора)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "В очікуванні обробки"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "Готово до запуску"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (Планувальник очікує: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (Планувальник очікує)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (Очікування доступу до мережі)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "Помилка обчислень"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "Збій при відправленні даних"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "Відправлення даних"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "Перервано користувачем"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "Перервано проектом"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "Перервано: не було запущене до крайнього терміну"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "Перервано: перевищено виділений дисковий простір"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "Перервано: перевищено границю часу виконання"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "Перервано: перевищено кількість виділеної пам’яті"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "Перервано"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "Підтверджено"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "Очікується підтвердження про прийом даних"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "Помилка: неприпустимий стан '%d'"
@@ -2554,57 +2554,57 @@ msgstr "Перевірте ім'я користувача та пароль і
msgid "Check the email address and password, and try again."
msgstr "Перевірте адресу електронної пошти та пароль і спробуйте ще раз."
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "більше..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "Все"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "Вибір проекту"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr ""
"Оберіть проект, який Вам сподобався, натиснувши на його\n"
"назву або введіть його адресу URL в полі ниже."
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "Категорії:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "Проекти:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "Опис проекту:"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "Галузь науки:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "Організація:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "Веб-сайт:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "Платформи, що підтримуються:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "URL-адреса проекту:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
@@ -2612,7 +2612,7 @@ msgstr ""
"Ймовірно даний проект не підтримує тип Вашого комп’ютера або операційну "
"систему. Ви все таки хочете його додати?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "Цей проект вже додано. Виберіть інший."
@@ -2620,11 +2620,11 @@ msgstr "Цей проект вже додано. Виберіть інший."
msgid "Communicating with project."
msgstr "Встановлення зв’язку з проектом."
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "Необхідні файли на сервері не знайдено."
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "Сталася внутрішня помилка сервера."
@@ -2733,7 +2733,7 @@ msgid "I agree to the terms of use."
msgstr "Я згоден з умовами використання."
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
+msgid "I do not agree to the terms of use."
msgstr "Я не згоден з умовами використання."
#: UnavailablePage.cpp:183
@@ -2826,7 +2826,7 @@ msgstr "Комп'ютер (хост) з назвою: '% s' не знайден
msgid "'%s' does not contain a valid path."
msgstr "Вказаного шляху: '% s' не існує."
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "Команди"
@@ -2879,7 +2879,7 @@ msgstr "Отримання повідомлень; зачекайте, будь-
msgid "There are no notices at this time."
msgstr "Зараз повідомлення відсутні."
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "Повідомлення"
@@ -2897,7 +2897,7 @@ msgstr ""
"(можливо) завантажити нові завдання."
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3133,135 +3133,135 @@ msgstr "вільно: "
msgid "used by other programs: "
msgstr "зайнято іншими програмами: "
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "Загальна кількість балів учасника"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "Загальна кількість балів за день"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "Загальна кількість балів для хосту"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "Середня кількість балів за день для хосту"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "Останнє оновлення: %.0f днів тому"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "Всього балів користувача"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "Показати загальну кількість балів користувача"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "В середньому за день"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "Показати середню кількість балів набраних користувачем за день"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "Всього балів для хосту"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "Показати загальну кількість балів набраних на даному хості"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "В середньому для хосту"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "Показати середню кількість балів набраних даним хостом за день"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< &Попередній проект"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "Показати графік для попереднього проекту"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "&Наступний проект >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "Показати графік на наступний проект"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "Приховати список проектів"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "Використовувати всю область для графіків"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "Вид графіків"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "Один проект"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "Показати один обраний проект"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "Всі проекти (окремо)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "Показати всі проекти, кожен проект на окремому графіку"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "Всі проекти (разом)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "Показати всі проекти на одному графіку"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "Всі проекти (в сумі)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "Показати суму за проектами на одному графіку"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "Статистика"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "Оновлення графіку..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "Показати список проектів"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "Використовувати меншу область для графіків"
@@ -3430,10 +3430,6 @@ msgstr "Залишилось (приблизно)"
msgid "Deadline"
msgstr "Відправити до"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "Назва"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "Завдання"
@@ -3587,40 +3583,40 @@ msgstr "Перервати процес підключення?"
msgid "Question"
msgstr "Запитання"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "Розширений вид...\t Ctrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "Змінити зовнішній вигляд на більш розширений."
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "Обкладинка"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "Виберіть зовнішній вигляд користувацького інтерфейсу."
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "За замовчуванням"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "Призупинити обчислення"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "Відновити обчислення"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "Відкрити вікно перегляду повідомлень проектів і BOINC"
@@ -3642,117 +3638,122 @@ msgid "Click OK to set preferences."
msgstr "Для збереження налаштувань натисніть 'Гаразд'."
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "Натисніть 'Очистити' для повернення веб-налаштувань."
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr ""
+"Для відновлення інтернет налаштувань всіх вказаних нижче уподобань натисніть "
+"Очистити."
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "Для додаткових параметрів виберіть 'Налаштування клієнта' у "
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "Розширений вигляд."
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr ""
+"Для додаткових параметрів, виберіть Налаштування клієнта у Розширеному виді."
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "Працювати тільки між:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "Доступ в інтернет тільки між:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "Використовувати не більше:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "місця на диску"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "процесора"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "Працювати на батареях?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "Запуск обробки при простої:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "Очистити всі вказані локальні налаштування і закрити діалогове вікно"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "Завжди"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 Мб"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 Мб"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 Мб"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 Гб"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 Гб"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 Гб"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 Гб"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 Гб"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 Гб"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 Гб"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d Мб"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f Гб"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (працювати завжди)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "Ви справді хочете видалити всі налаштування, які зберігаються локально?\n"
@@ -3814,116 +3815,116 @@ msgstr ""
"Ви впевнені, що хочете перервати обробку цього завдання '% s'?\n"
"(Прогрес: %.1 lf%%, Стан: % s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "BOINC не підключений до жодного проекту."
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "Недоступно"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "Завдання:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "Вибрати завдання для доступу"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "Від:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "Прогрес цього завдання"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "Команди завдання"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "Показати меню команд, застосовних до цього завдання"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "Додаток: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "Додаток: недоступний"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "Недоступно"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "Витрачено: %s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "Залишилось (приблизно): %s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "Стан: %s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "Перевірка поточного стану."
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "Завантаження завдань із сервера проекту."
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "Обробка призупинена: робота комп’ютера від батарей."
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "Обробка призупинена: працює користувач."
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "Обробка призупинена: за ініціативи користувача."
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "Обробка призупинена: заборонений час доби."
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "Обробка призупинена: запущений тест продуктивності."
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "Обробка призупинена."
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "Зачекайте будь-ласка."
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "Перевірка поточного стану"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "Відсутні завдання для обробки"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "Не вдалося підключитися до BOINC клієнта"
@@ -3965,6 +3966,24 @@ msgstr "Показати все"
msgid "Quit %s"
msgstr "Вийти %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "Я не згоден з умовами використання."
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "Натисніть 'Очистити' для повернення веб-налаштувань."
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "Для додаткових параметрів виберіть 'Налаштування клієнта' у "
+
+#~ msgid "the Advanced View."
+#~ msgstr "Розширений вигляд."
+
+#~ msgid "Workunit name"
+#~ msgstr "Назва завдання"
+
+#~ msgid "invalid float"
+#~ msgstr "помилкове число"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "Змінити зовнішній вигляд на розширений."
diff --git a/locale/uk/BOINC-Project-Generic.po b/locale/uk/BOINC-Project-Generic.po
index 782ac0e..c28eb30 100644
--- a/locale/uk/BOINC-Project-Generic.po
+++ b/locale/uk/BOINC-Project-Generic.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2014-01-03 15:18+0000\n"
-"Last-Translator: Олег <pukish_oleg at ukr.net>\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-26 13:35+0000\n"
+"Last-Translator: point <Kobzar at icn.od.ua>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,7 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1388762335.0\n"
+"X-POOTLE-MTIME: 1393421732.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "Українська"
@@ -192,7 +192,7 @@ msgstr "Знайти у форумах"
msgid "Advanced search"
msgstr "Розширений пошук"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "Приватні повідомлення"
@@ -202,8 +202,8 @@ msgstr "Приватні повідомлення"
msgid "Questions and Answers"
msgstr "Питання та відповіді"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -269,7 +269,7 @@ msgstr "Непрочитане"
msgid "Message %1"
msgstr "Повідомлення %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "приховане"
@@ -488,7 +488,7 @@ msgstr "Не можна написати повідомлення у прихо
msgid "Thread"
msgstr "Обговорення"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "Повідомлення"
@@ -497,7 +497,7 @@ msgstr "Повідомлення"
msgid "Views"
msgstr "Перегляди"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "Останнє повідомлення"
@@ -535,7 +535,7 @@ msgid "Home"
msgstr "Дім"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "Робота"
@@ -601,9 +601,9 @@ msgid "Created"
msgstr "Створений"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -779,7 +779,7 @@ msgstr "Останній контакт"
msgid "Computer info"
msgstr "Інформація про комп'ютер"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "Позиція"
@@ -788,9 +788,9 @@ msgstr "Позиція"
msgid "Avg. credit"
msgstr "У середньому за день"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -878,8 +878,8 @@ msgstr "Тільки комп'ютери, активні за останні 30
msgid "Computer ID"
msgstr "ID комп'ютера"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -916,7 +916,7 @@ msgid "Write"
msgstr "Написати"
# 80%
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "Відправити приватне повідомлення"
@@ -1702,7 +1702,7 @@ msgstr "Час підтвердження<br />або крайній термі
msgid "explain"
msgstr "пояснити"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "Статус"
@@ -1794,9 +1794,9 @@ msgstr "Ключові слова"
msgid "Find teams with these words in their names or descriptions"
msgstr "Знайти команди з цими словами в їх назвах або описах"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1804,7 +1804,7 @@ msgstr "Знайти команди з цими словами в їх назв
msgid "Country"
msgstr "Країна"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "Тип команди"
@@ -1832,8 +1832,8 @@ msgstr "Запрошений Вами"
msgid "founder response deadline is %1"
msgstr "крайній термін відповіді засновника %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "Ні"
@@ -1857,31 +1857,31 @@ msgstr "Опис"
msgid "Web site"
msgstr "Веб-сайт"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "Об'єднана статистика за проектами"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "Тип"
# 92%
# 100%
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "Дошка повідомлень"
# 85%
# 100%
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "Обговорення"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "Приєднатися до цієї команди"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
@@ -1890,81 +1890,81 @@ msgstr ""
"повідомлення електронною поштою', приєднання до команди дає доступ її "
"засновнику до Вашої адреси електронної пошти."
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "Не приймати нових учасників"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "Запрошена зміна засновника"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "Відповісти до %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "Зміна засновника команди"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "Учасники"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "Засновник"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "Адміністратори"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "Нові учасники за останній день"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "Всього учасників"
# 80%
# 75%
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "Перегляд"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "Активних учасників"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "Учасників із заробленими балами"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "Адміністратор"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "Попередні %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "Наступні %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "Немає такої команди."
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "Ця операція вимагає прав засновника."
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "Ця операція вимагає прав адміністратора команди"
@@ -1976,7 +1976,7 @@ msgstr ""
"ПОПЕРЕДЖЕННЯ: це глобальна команда BOINC. Якщо Ви зтобите тут зміни, то вони "
"будуть швидко перезаписані. Тому редагуйте %1глобальну команду BOINC%2."
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
@@ -1984,47 +1984,47 @@ msgstr ""
"%1Примітка безпеки%2: якщо Ви створите команду, то Ваші налаштування проекту "
"(частка ресурсів, графічні налаштування) будуть видимі для всіх."
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "Назва команди, текстова версія"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "Не використовувати теги HTML."
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "Назва команди, HTML версія"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "Ви можете використовувати %1обмежені теги HTML%2."
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "Якщо Ви не знаєте HTML, залиште це поле порожнім."
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "Адреса веб-сторінки команди, якщо є"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "без \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "Ця адреса буде викликатися зі сторінки команди на цьому сайті."
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "Опис команди"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "Приймати нових учасників?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "Профіль користувача"
@@ -2059,7 +2059,7 @@ msgstr "Комп’ютери в цьому обліковому записі"
# 80%
# 100%
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "Перегляд"
@@ -2076,8 +2076,8 @@ msgstr "Об’єднана статистика за проектами"
msgid "Account"
msgstr "Обліковий запис"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "Команда"
@@ -2106,7 +2106,7 @@ msgstr "Облікова інформація"
msgid "Email address"
msgstr "Адреса електронної пошти"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "URL"
@@ -2114,7 +2114,7 @@ msgstr "URL"
msgid "Postal code"
msgstr "Поштовий індекс"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "Учасник %1 з"
@@ -2134,7 +2134,7 @@ msgstr "пароль"
msgid "other account info"
msgstr "інша облікова інформація"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "ID користувача"
@@ -2179,96 +2179,96 @@ msgstr "Налаштування %1"
msgid "Community"
msgstr "Спільнота"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "Видалити"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "Створити"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "Профіль"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 повідомлень"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "Сповіщення"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "Вийти з команди"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "Керування"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(запит на зміну засновника в очікуванні)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "Учасник команди"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "знайти команду"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "Засновник, але не учасник"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "Знайти друзів"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "Друзі"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "Комп’ютери"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "Донор"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "Контакт"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "Ця особа є другом"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "Припинити дружбу"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "Запит в очікуванні"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "Додати друга"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "ім’я користувача не може містити пробілів на початку або вкінці"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "ім’я користувача не може бути порожнім"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "ім’я користувача не може містити тегів HTML"
@@ -2349,7 +2349,7 @@ msgstr ""
msgid "Unable to select database - please try again later"
msgstr "Неможливо вибрати базу даних - будь-ласка, спробуйте ще раз пізніше"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "Залишатися авторизованим на цьому комп’ютері"
@@ -2557,7 +2557,7 @@ msgstr "створити або приєднатися до команди"
msgid "User of the day"
msgstr "Користувач дня"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "Статус сервера"
@@ -5712,135 +5712,135 @@ msgstr "Не працює"
msgid "Disabled"
msgstr "Відключений"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "Статус проекту"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "Версія серверного ПЗ: %1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "Програма"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "Назва сервера"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "Веб-сторінки, які керуються даними"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "Сервер завантаження/вивантаження"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "Планувальник"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "Працює:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "Програма працює нормально"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "Не працює:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "Програма завершила роботу з помилкою або проект вимкнений"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "Відключений:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "Програма була зупинена"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "Статус обчислень"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "Сервер бази даних не доступний"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "Завдання, готові до відправлення"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "Завдання обробляються"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "Задачі, які очікують перевірки"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "Задачі, які очікують злиття"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "Задачі, які очікують видалення"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "Завдання, які очікують видалення"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "Залишені в обробці (години)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "Учасників"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "з недавніми балами"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "з балами"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "зареєструвались за останні 24 години"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "поточна швидкість (гігафлопс)"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "Розподілення завдань за додатками"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "додаток"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "не відправлених"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "в обробці"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "середній час обробки останніх 100 результатів в год. (мін.-макс.)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "користувачів за останні 24 год."
@@ -6117,6 +6117,10 @@ msgstr "Новий засновник?"
msgid "Change founder"
msgstr "Змінити засновника"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "Немає користувачів для переходу в команду."
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "Ви повинні вибрати непусту назву команди"
diff --git a/locale/uk/BOINC-Setup.mo b/locale/uk/BOINC-Setup.mo
index fb2d70b..7c5badc 100644
Binary files a/locale/uk/BOINC-Setup.mo and b/locale/uk/BOINC-Setup.mo differ
diff --git a/locale/uk/BOINC-Setup.po b/locale/uk/BOINC-Setup.po
index f3d2b0e..60e984a 100644
--- a/locale/uk/BOINC-Setup.po
+++ b/locale/uk/BOINC-Setup.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-12-28 22:26+0000\n"
-"Last-Translator: Олег <pukish_oleg at ukr.net>\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-26 13:36+0000\n"
+"Last-Translator: point <Kobzar at icn.od.ua>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1388269567.0\n"
+"X-POOTLE-MTIME: 1393421762.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
@@ -29,11 +29,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr "Вибачте, дана версія %s потребує системи 10.5 або вищої."
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "Так"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "Ні"
@@ -63,15 +63,15 @@ msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr ""
"Бажаєте встановити %s як скрінсейвер для всіх користувачів %s на цьому Mac?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "Гаразд"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "Помилка доступу після перезапуску"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -79,7 +79,7 @@ msgstr ""
"Видалення може зайняти декілька хвилин.\n"
"Будь-ласка, зачекайте."
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -90,21 +90,29 @@ msgstr ""
"\n"
"Будуть видалені виконавчі файли, а файли даних %s залишаться."
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "Скасовано: %s не було змінено."
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "Сталася помилка: код помилки %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "ім’я користувача"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"Ви також хочете видалити VirtualBox з комп'ютера?\n"
+"(VirtualBox був встановлений разом з BOINC.)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -124,7 +132,7 @@ msgstr ""
"для кожного користувача, файл\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -134,11 +142,11 @@ msgstr ""
"Для повного видалення %s з Вашого комп’ютера введіть пароль адміністратора.\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "Скасувати"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "Продовжити..."
diff --git a/locale/uk/BOINC-Web.mo b/locale/uk/BOINC-Web.mo
index 7209ba2..cd9b75e 100644
Binary files a/locale/uk/BOINC-Web.mo and b/locale/uk/BOINC-Web.mo differ
diff --git a/locale/uk/BOINC-Web.po b/locale/uk/BOINC-Web.po
index 64af58c..6fd9adb 100644
--- a/locale/uk/BOINC-Web.po
+++ b/locale/uk/BOINC-Web.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2014-01-03 18:08+0000\n"
-"Last-Translator: Олег <pukish_oleg at ukr.net>\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-26 13:36+0000\n"
+"Last-Translator: point <Kobzar at icn.od.ua>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,7 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1388772504.0\n"
+"X-POOTLE-MTIME: 1393421799.0\n"
#: docutil.php:21
msgid "Search"
@@ -464,16 +464,16 @@ msgid "Cognitive science and artifical intelligence"
msgstr "Когнітивна наука та штучний інтелект"
# 85%
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "Приватний"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "Штучний інтелект"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -486,19 +486,19 @@ msgstr ""
"не несуть основного змістового навантаження, для імітації поведінки людини "
"під час розмов."
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "Біологія та медицина"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "Університетський коледж у Дубліні"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "Пошук ліків від малярії"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -511,15 +511,15 @@ msgstr ""
"Важливо, що ці нові ліки повинні бути націленими на НОВІ білки в паразиті. "
"Проект FightMalaria at Home має за мету відкриття таких нових мішеней."
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "Університет Карлсруе (Німеччина)"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "Передбачення структури білків"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -533,15 +533,15 @@ msgstr ""
"збоями або об'єднанням білків, і для розробки нових ліків на основі "
"тривимірної структури біологічно важливих білків."
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "Університет Делавера"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "Дослідження білково-лігандних взаємодій"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -552,15 +552,15 @@ msgstr ""
"отримання знань про взаємодію білок-ліганд на атомарному рівні та, як "
"результат, буде шукати ідеї для відкриття нових медичних препаратів."
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "Барселонський парк біомедичних досліджень (PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "Молекулярне моделювання білків"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -573,15 +573,15 @@ msgstr ""
"засоби несподівано надали можливість досягнути нових висот у обчислювальній "
"біології для біомедичних наукових досліджень."
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "Техніон, Ізраїль"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "Аналіз генетичних зв’язків"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
@@ -591,16 +591,16 @@ msgstr ""
"провокують деякі типи діабету, гіпертонії (високого кров'яного тиску), раку, "
"шизофренії та інших захворювань."
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "Центр біоінформатики та обчислювальної біології університету Меріленду."
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "Дослідження в науці про життя"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -612,15 +612,15 @@ msgstr ""
"послідовності ДНК; бактеріальні, плазмідні та вірусні білкові послідовності; "
"а також біологічну різноманітність у заповідниках. "
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "Швейцарський Тропічний Інститут"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "Епідеміологія"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -639,15 +639,15 @@ msgstr ""
"параметрів, пов`язаних з біологічними та соціальними факторами, що впливають "
"на розповсюдження хвороби. "
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "Університет Вашингтону"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "Біологія"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -663,11 +663,11 @@ msgstr ""
"допоможете нам при проектуванні нових білків для боротьби з хворобами типу "
"ВІЛ, малярія, рак і хвороба Альцгеймера."
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "Університет Відня"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
@@ -677,19 +677,19 @@ msgstr ""
"результатів, які відіграють ключову роль у багатьох біоінформаційних "
"науково-дослідницьких проектах."
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "Науки про Землю"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "Оксфордський Університет"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "Вивчення клімату"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -709,16 +709,25 @@ msgstr ""
"дозволить нам дослідити, яким чином може змінитися клімат у наступному "
"столітті при широкому діапазоні різних сценаріїв."
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "Астрономія, фізика і хімія"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "Фізика"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "Машинобудування"
+
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr ""
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "Астрономія"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -736,15 +745,15 @@ msgstr ""
"розподілу спектральної енергії (SED), застосувавши для цього розподілені "
"обчислення."
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "Університет Техасу в Остіні"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "Хімія"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -767,11 +776,11 @@ msgstr ""
"систем."
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "Іллінойський університет в Урбана-Шампейн"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
@@ -781,11 +790,11 @@ msgstr ""
"описувала наш Всесвіт, і пошуку діапазону моделей, узгоджених із наявними "
"астрономічними даними фізики елементарних частинок."
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "Політехнічний інститут Ренсселера"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
@@ -795,11 +804,11 @@ msgstr ""
"Чумацького Шляху з використанням даних, зібраних Слоанівським цифровим "
"оглядом неба."
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "Лейденський університет, Нідерланди"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -815,15 +824,15 @@ msgstr ""
"того, щоб змоделювати рідкий аргон або перевірити обґрунтованість закону "
"ідеального газу, фактично проводячи моделювання за посередництва мережі."
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "Університет Вісконсина - Мілуокі, Інститут Макса Планка"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "Астрофізика"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -837,15 +846,15 @@ msgstr ""
"2005, підтриманий Американським фізичним товариством і багатьма міжнародними "
"організаціями."
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "ЦЕРН (Європейська рада з ядерних досліджень)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "Фізика"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -859,7 +868,7 @@ msgstr ""
"інструментів для дослідження поведінки елементарних частинок. LHC at home "
"виконує моделювання для покращення проекту ВАК і його датчиків."
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
@@ -869,15 +878,15 @@ msgstr ""
"для моделювання фізики повноцінних подій ВАК на комп’ютерах добровольців. "
"Необхідне встановлення VirtualBox на Вашому комп’ютері"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "Каліфорнійський університет, Берклі"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "Астрофізика, астробіологія"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -892,15 +901,15 @@ msgstr ""
"Природні джерела таких сигналів невідомі, тому їх виявлення може надати "
"підтвердження про існування позаземної технології."
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "Університет прикладних наук Бельфелда"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "Хімічна технологія і нанотехнологія"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -912,19 +921,19 @@ msgstr ""
"вимикачів, які використовуватимуться у медицині (наприклад місцева "
"хіміотерапія пухлин) і в біотехнології."
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "Різні додатки"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "Китайська академія Наук"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "Фізика, біохімія та інші"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
@@ -933,11 +942,11 @@ msgstr ""
"Метою CAS at home є рекомендування і допомога вченим Китаю прийняти технології "
"волонтерських обчислень і мислення у їхні дослідження."
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "Математика, фізика, еволюція"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -945,15 +954,15 @@ msgstr ""
"Yoyo at home - адаптер між BOINC і декількома існуючими волонтерськими "
"обчислювальними проектами: ECM, Muon, Evolution at home і distributed.net"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "Лабораторія паралельних і розподілених систем MTA-SZTAKI (Угорщина)"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "Європейські дослідницькі проекти"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -965,27 +974,27 @@ msgstr ""
"волонтерами цього проекту. Наукові дослідження, що підтримуються даним "
"проектом, включають в себе математику, фізику, біологію і т.д."
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "Іспанські університети та дослідницькі центри"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "Різноманітні Іспанські дослідницькі проекти"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "Дослідження у галузях фізики, матеріалознавства і біомедицини"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "Корпоративне громадянство IBM"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "Медичні, екологічні та інші гуманітарні дослідження"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -997,27 +1006,27 @@ msgstr ""
"обчислювальну мережу. Дослідження включають в себе ВІЛ-СНІД, рак, тропічні "
"і забуті хвороби, сонячну енергію, чисту воду і багато іншого."
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "Математика, програмування та ігри."
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "Наука про комп’ютери"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "Математика, фізика, штучний інтелект"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "Моделювання квантових комп’ютерів; гіпотеза Гольдбаха."
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "Криптографія"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
@@ -1026,24 +1035,24 @@ msgstr ""
"перехоплені у Північноатлантичному океані у 1942 році і вважалось, що їх "
"неможливо зламати."
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "Математика"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "Вивчення гіпотези Коллатца - нерозв'язаної задачі в математиці."
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "Каліфорнійський державний університет, Фуллертон"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "Розклад великих цілих чисел на множники"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -1059,7 +1068,7 @@ msgstr ""
"= 3 * 5 або 35 = 5 * 7. NFS at Home є продовженням цього досвіду, тільки з "
"цілими числами, які складаються із сотень цифр."
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
@@ -1067,11 +1076,11 @@ msgstr ""
"Вільнюський технічний університет і Каунаський університет технологій "
"(Литва)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "Тестування програмного забезпечення"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -1083,11 +1092,11 @@ msgstr ""
"литовських наукових закладів. Поточні додатки включають вивчення тестування "
"програмного забезпечення, заснованого на методі Монте-Карло."
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "Математичний інститут Лейденського університету/Кенніслінк"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -1105,7 +1114,7 @@ msgstr ""
"математиці в даний час. Якщо вона буде доведена, безпосередньо через неї "
"може бути вирішено багато інших відкритих проблем."
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
@@ -1113,11 +1122,11 @@ msgstr ""
"Primegri підтримує багато проектів, які шукають різні форми дуже великих "
"простих чисел, включаючи пошук найбільшого відомого простого числа."
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "Університет Прикладних Наук РейнМейн"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
@@ -1125,7 +1134,7 @@ msgstr ""
"Пошук контрприкладів до двох теорем, пов’язаних з ідентифікацією головних "
"чисел"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -1142,6 +1151,10 @@ msgstr "Коментар"
msgid "News is available as an %sRSS feed%s"
msgstr "Новини доступні у форматі %sстрічки RSS%s"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "Астрономія, фізика і хімія"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s для %s (%s МБайт)"
diff --git a/locale/updatetrans.sh b/locale/updatetrans.sh
index f9b4a40..bf21e0e 100755
--- a/locale/updatetrans.sh
+++ b/locale/updatetrans.sh
@@ -1,62 +1,17 @@
#!/bin/sh
-# Automate the compilation of the various locale PO files by automatically
-# generating them at night.
+# Look for .po files modified later than .mo, and regenerate .mo file
+# Then commit and push changes.
+
+# This is run in the Pootle copy of the source tree (~/pootle/repos/boinctrunk)
+# It's run from pootle/update.sh, which is run from cron every 12 hours.
#
projname=boinctrunk
-projdir=/home/boincadm/pootle/po/$projname
+projdir=/home/boincadm/pootle/repos/$projname
cd $projdir
-# Determine if we need to update the various languages using the templates.
-# This will be done by the use of a tag file which should have a matching
-# timestamp as the template files. If the timestamps do not match update all
-# languages.
-for file in `find -name '*.pot'` ; do
- template_rootname=`basename $file .pot`
- template_name=${projdir}/templates/${template_rootname}
-
- # Check to see if the file exists, if not create it
- if test ! -e ${template_name}.flag
- then
- cp ${template_name}.pot ${template_name}.flag
- fi
-
- # If the modification timestamps don't match then update all the languages
- if test ${template_name}.pot -nt ${template_name}.flag
- then
- execute_update=true
- fi
-done
-
-if test "${execute_update}" = "true"
-then
-
- for file in `find -name '*.po'` ; do
- dir=`dirname $file`
- locale=`basename $dir`
- po_name=`basename $file .po`
-
- msgmerge --no-fuzzy-matching --update ${locale}/${po_name}.po templates/${po_name}.pot
-
- done
-
-fi
-
-for file in `find -name '*.pot'` ; do
- template_rootname=`basename $file .pot`
- template_name=${projdir}/templates/${template_rootname}
-
- # Touch each file to adjust timestamps
- touch ${template_name}.pot
- touch ${template_name}.flag
-
-done
-
-
-# Iterrate through the various PO files looking for those that need to be compiled.
-#
for file in `find -name 'BOINC-Manager.po'` ; do
dir=`dirname $file`
locale=`basename $dir`
@@ -76,8 +31,6 @@ for file in `find -name 'BOINC-Manager.po'` ; do
done
-# Iterrate through the various PO files looking for those that need to be compiled.
-#
for file in `find -name 'BOINC-Client.po'` ; do
dir=`dirname $file`
locale=`basename $dir`
@@ -97,8 +50,6 @@ for file in `find -name 'BOINC-Client.po'` ; do
done
-# Iterrate through the various PO files looking for those that need to be compiled.
-#
for file in `find -name 'BOINC-Web.po'` ; do
dir=`dirname $file`
locale=`basename $dir`
@@ -118,8 +69,6 @@ for file in `find -name 'BOINC-Web.po'` ; do
done
-# Iterrate through the various PO files looking for those that need to be compiled.
-#
for file in `find -name 'BOINC-Setup.po'` ; do
dir=`dirname $file`
locale=`basename $dir`
@@ -138,5 +87,7 @@ for file in `find -name 'BOINC-Setup.po'` ; do
fi
done
+git commit -a -m "locale: Update compiled localization files"
+git push origin
exit 0
diff --git a/locale/zh_CN/BOINC-Android.po b/locale/zh_CN/BOINC-Android.po
index 05ac70e..138ca9d 100644
--- a/locale/zh_CN/BOINC-Android.po
+++ b/locale/zh_CN/BOINC-Android.po
@@ -2,1134 +2,1117 @@
# Copyright (C) 2014 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
-#
-#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
+"Project-Id-Version: TEAM CHINA\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
-"POT-Creation-Date: 2014-01-30 14:00-0800\n"
-"PO-Revision-Date: 2014-01-30 14:00-0800\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: zh_CN <LL at li.org>\n"
-"Plural-Forms: nplurals=1; plural=0\n"
+"POT-Creation-Date: 2013-10-18 00:00-0700\n"
+"PO-Revision-Date: 2014-02-22 19:23+0800\n"
+"Last-Translator: Yin Gang <zenith.yin at gmail.com>\n"
+"Language-Team: TEAM CHINA <zenith.yin at gmail.com>\n"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1391481846.0\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: CHINA\n"
#. app global
msgctxt "app_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
#. generic. used by multiple Activities/tabs
msgctxt "generic_loading"
msgid "Loading! Please wait…"
-msgstr ""
+msgstr "载入中!请稍候..."
#. attach project
#. project list
msgctxt "attachproject_list_header"
msgid "Choose a project:"
-msgstr ""
+msgstr "选择一个项目:"
msgctxt "attachproject_list_manual_button"
msgid "Add project by URL"
-msgstr ""
+msgstr "通过网址添加项目"
msgctxt "attachproject_list_manual_dialog_title"
msgid "Enter project URL:"
-msgstr ""
+msgstr "输入项目网址:"
msgctxt "attachproject_list_manual_dialog_button"
msgid "Add project"
-msgstr ""
+msgstr "添加项目"
msgctxt "attachproject_list_manual_no_url"
msgid "Please enter project URL"
-msgstr ""
+msgstr "请输入项目网址"
msgctxt "attachproject_list_acctmgr_button"
msgid "Add account manager"
-msgstr ""
+msgstr "添加账号管理器"
msgctxt "attachproject_list_no_internet"
msgid "No Internet connection"
-msgstr ""
+msgstr "无互联网连接"
#. project login
msgctxt "attachproject_login_loading"
msgid "Contacting project server…"
-msgstr ""
+msgstr "正在与项目服务器通讯…"
msgctxt "attachproject_login_image_description"
msgid "Project logo."
-msgstr ""
+msgstr "项目徽标。"
msgctxt "attachproject_login_header_general_area"
msgid "General area:"
-msgstr ""
+msgstr "专业分类:"
msgctxt "attachproject_login_header_specific_area"
msgid "Specific area:"
-msgstr ""
+msgstr "专业领域:"
msgctxt "attachproject_login_header_description"
msgid "Description:"
-msgstr ""
+msgstr "描述:"
msgctxt "attachproject_login_header_home"
msgid "Home:"
-msgstr ""
+msgstr "首页:"
msgctxt "attachproject_login_header_url"
msgid "Website:"
-msgstr ""
+msgstr "网站:"
msgctxt "attachproject_login_header_platform"
msgid "Android:"
-msgstr ""
+msgstr "安卓:"
msgctxt "attachproject_login_platform_supported"
-msgid "Device type is supported by this project"
-msgstr ""
+msgid "This project supports Android devices"
+msgstr "该项目支持安卓设备"
msgctxt "attachproject_login_platform_not_supported"
-msgid "Device is not supported by this project"
-msgstr ""
+msgid "This project does not support Android devices"
+msgstr "该项目不支持安卓设备"
msgctxt "attachproject_login_category_terms_of_use"
msgid "Terms of use for"
-msgstr ""
+msgstr "使用条款"
msgctxt "attachproject_login_accept_terms_of_use"
-msgid ""
-"By creating an account with this project, you accept the terms of use as "
-"shown above."
-msgstr ""
+msgid "By creating an account with this project, you accept the terms of use as shown above."
+msgstr "通过创建该项目的账户,即表示你接受了上述使用条款。"
msgctxt "attachproject_login_category_login"
msgid "Sign in with existing account"
-msgstr ""
+msgstr "用现有的账户登录"
msgctxt "attachproject_login_header_id_email"
msgid "eMail:"
-msgstr ""
+msgstr "电子邮箱:"
msgctxt "attachproject_login_header_id_name"
msgid "Name:"
-msgstr ""
+msgstr "名称:"
msgctxt "attachproject_login_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "口令:"
msgctxt "attachproject_login_category_creation"
msgid "New to"
-msgstr ""
+msgstr "新加入"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr ""
+msgstr "注册一个账户来参加:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
-msgstr ""
+msgstr "访问项目网站来创建账户:"
msgctxt "attachproject_login_header_creation_disabled"
msgid "Project does currently now allow creation of new accounts!"
-msgstr ""
+msgstr "项目当前允许创建新的账户!"
msgctxt "attachproject_login_button_registration"
msgid "Register"
-msgstr ""
+msgstr "注册"
msgctxt "attachproject_login_button_login"
msgid "Sign in"
-msgstr ""
+msgstr "登录"
msgctxt "attachproject_login_button_forgotpw"
msgid "Forgot Password"
-msgstr ""
+msgstr "忘记口令"
msgctxt "attachproject_login_error_toast"
msgid "Contacting project failed!"
-msgstr ""
+msgstr "无法与项目通讯!"
msgctxt "attachproject_login_attached"
msgid "Attached"
-msgstr ""
+msgstr "已加入"
#. project registration
msgctxt "attachproject_registration_header"
msgid "Account registration for"
-msgstr ""
+msgstr "账户注册"
msgctxt "attachproject_registration_header_url"
msgid "Project:"
-msgstr ""
+msgstr "项目:"
msgctxt "attachproject_registration_header_email"
msgid "eMail:"
-msgstr ""
+msgstr "电子邮箱:"
msgctxt "attachproject_registration_header_username"
msgid "Name:"
-msgstr ""
+msgstr "名称:"
msgctxt "attachproject_registration_header_teamname"
msgid "Team:"
-msgstr ""
+msgstr "团队:"
msgctxt "attachproject_registration_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "口令:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… 重新输入:"
msgctxt "attachproject_registration_button"
msgid "Create"
-msgstr ""
+msgstr "创建:"
#. account manager
msgctxt "attachproject_acctmgr_header"
msgid "Add account manager"
-msgstr ""
+msgstr "添加账号管理器"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr ""
+msgstr "网址"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr ""
+msgstr "用户:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
-msgstr ""
+msgstr "口令:"
msgctxt "attachproject_acctmgr_header_pwd_confirm"
msgid "… Retype:"
-msgstr ""
+msgstr "… 重新输入:"
msgctxt "attachproject_acctmgr_button"
msgid "Add"
-msgstr ""
+msgstr "添加"
#. error strings
msgctxt "attachproject_error_wrong_name"
msgid "User not found"
-msgstr ""
+msgstr "未找到用户"
msgctxt "attachproject_error_short_pwd"
msgid "Password too short"
-msgstr ""
+msgstr "口令太短"
msgctxt "attachproject_error_no_internet"
msgid "Connection failure"
-msgstr ""
+msgstr "连接失败"
msgctxt "attachproject_error_pwd_no_match"
msgid "Passwords do not match"
-msgstr ""
+msgstr "口令不相符"
msgctxt "attachproject_error_no_url"
msgid "Please enter URL"
-msgstr ""
+msgstr "请输入网址"
msgctxt "attachproject_error_no_email"
msgid "Please enter eMail address"
-msgstr ""
+msgstr "请输入电子邮箱地址"
msgctxt "attachproject_error_no_pwd"
msgid "Please enter a password"
-msgstr ""
+msgstr "请输入一个口令"
msgctxt "attachproject_error_no_name"
msgid "Please enter user name"
-msgstr ""
+msgstr "请输入用户名称"
msgctxt "attachproject_error_unknown"
msgid "failed"
-msgstr ""
+msgstr "失败"
msgctxt "attachproject_error_bad_username"
msgid "User name refused"
-msgstr ""
+msgstr "用户名不可用"
msgctxt "attachproject_error_email_in_use"
msgid "eMail is already in use"
-msgstr ""
+msgstr "电子邮箱地址已被使用"
msgctxt "attachproject_error_project_down"
msgid "Project is offline"
-msgstr ""
+msgstr "项目已下线"
msgctxt "attachproject_error_email_bad_syntax"
msgid "eMail refused"
-msgstr ""
+msgstr "电子邮箱不合用"
msgctxt "attachproject_error_bad_pwd"
msgid "Password refused"
-msgstr ""
+msgstr "口令不可用"
msgctxt "attachproject_error_creation_disabled"
msgid "Account creation is disabled on this project"
-msgstr ""
+msgstr "项目当前无法创建新的账户"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr ""
+msgstr "错误网址"
#. working activity
msgctxt "attachproject_working_back_button"
msgid "Back"
-msgstr ""
+msgstr "返回"
msgctxt "attachproject_working_finish_button"
msgid "Finish"
-msgstr ""
+msgstr "完成"
msgctxt "attachproject_working_check_desc"
msgid "Successful"
-msgstr ""
+msgstr "成功"
msgctxt "attachproject_working_failed_desc"
msgid "Failed"
-msgstr ""
+msgstr "失败"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr ""
+msgstr "..."
msgctxt "attachproject_working_finished"
msgid "."
-msgstr ""
+msgstr "."
msgctxt "attachproject_working_description"
msgid ":"
-msgstr ""
+msgstr ":"
msgctxt "attachproject_working_connect"
msgid "Connect"
-msgstr ""
+msgstr "连接"
msgctxt "attachproject_working_verify"
msgid "Verify account"
-msgstr ""
+msgstr "验证账户"
msgctxt "attachproject_working_register"
msgid "Register account"
-msgstr ""
+msgstr "注册账户"
msgctxt "attachproject_working_login"
msgid "Log in"
-msgstr ""
+msgstr "登录"
msgctxt "attachproject_working_acctmgr"
msgid "Add account manager"
-msgstr ""
+msgstr "添加账号管理器"
msgctxt "attachproject_working_acctmgr_sync"
msgid "Synchronize"
-msgstr ""
+msgstr "同步"
#. main activity
msgctxt "main_noproject_warning"
-msgid "Tap here to choose a project."
-msgstr ""
+msgid "Tab here to choose a project."
+msgstr "点击这里选项一个项目。"
msgctxt "main_error"
msgid "Whooops"
-msgstr ""
+msgstr "糟糕了"
msgctxt "main_error_long"
msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
+"...这不该发生!\n"
+"点击图标以重试。"
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
-msgstr ""
+msgstr "BOINC 徽标"
#. tab names
msgctxt "tab_status"
msgid "Status"
-msgstr ""
+msgstr "状态"
msgctxt "tab_projects"
msgid "Projects"
-msgstr ""
+msgstr "项目"
msgctxt "tab_tasks"
msgid "Tasks"
-msgstr ""
+msgstr "任务"
msgctxt "tab_transfers"
msgid "Transfers"
-msgstr ""
+msgstr "传输"
msgctxt "tab_preferences"
msgid "Preferences"
-msgstr ""
+msgstr "参数设置"
msgctxt "tab_notices"
msgid "Notices"
-msgstr ""
+msgstr "公告"
msgctxt "tab_desc"
msgid "Navigation"
-msgstr ""
+msgstr "导航"
#. status strings
msgctxt "status_running"
msgid "Computing"
-msgstr ""
+msgstr "计算中"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr ""
+msgstr "感谢你的参与。"
msgctxt "status_paused"
msgid "Suspended"
-msgstr ""
+msgstr "已暂停"
msgctxt "status_idle"
msgid "Nothing to do"
-msgstr ""
+msgstr "无事可做"
msgctxt "status_idle_long"
msgid "Waiting for tasks…"
-msgstr ""
+msgstr "等待任务中..."
msgctxt "status_computing_disabled"
msgid "Suspended"
-msgstr ""
+msgstr "已暂停"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr ""
+msgstr "点击以继续计算和网络传输"
msgctxt "status_launching"
msgid "Starting…"
-msgstr ""
+msgstr "启动中..."
msgctxt "status_noproject"
msgid "Choose a project to participate in."
-msgstr ""
+msgstr "选择一个想要加入的项目。"
msgctxt "status_closing"
msgid "Closing…"
-msgstr ""
+msgstr "关闭中..."
msgctxt "status_benchmarking"
msgid "Benchmarking…"
-msgstr ""
+msgstr "基准测试中..."
msgctxt "status_image_description"
msgid "project image"
-msgstr ""
+msgstr "项目图像"
#. preferences tab strings
msgctxt "prefs_loading"
msgid "Reading preferences…"
-msgstr ""
+msgstr "读取参数设置中..."
msgctxt "prefs_submit_button"
msgid "Save"
-msgstr ""
+msgstr "保存"
msgctxt "prefs_dialog_title"
msgid "Enter new value:"
-msgstr ""
+msgstr "输入新的设定值:"
msgctxt "prefs_dialog_title_selection"
msgid "Select:"
-msgstr ""
+msgstr "选择:"
msgctxt "prefs_category_general"
msgid "General"
-msgstr ""
+msgstr "一般"
msgctxt "prefs_category_network"
msgid "Network"
-msgstr ""
+msgstr "网络"
msgctxt "prefs_category_power"
msgid "Power"
-msgstr ""
+msgstr "电源"
msgctxt "prefs_category_cpu"
msgid "CPU"
-msgstr ""
+msgstr "中央处理器"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr ""
+msgstr "存储"
msgctxt "prefs_category_memory"
msgid "Memory"
-msgstr ""
+msgstr "内存"
msgctxt "prefs_category_debug"
msgid "Debug"
-msgstr ""
+msgstr "调试"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr ""
-
-msgctxt "prefs_power_source_header"
-msgid "Power sources for computation"
-msgstr ""
-
-msgctxt "prefs_power_source_description"
-msgid "Selects power sources BOINC is allowed to use for computation."
-msgstr ""
-
-msgctxt "prefs_power_source_ac"
-msgid "Wall socket"
-msgstr ""
-
-msgctxt "prefs_power_source_usb"
-msgid "USB connection"
-msgstr ""
-
-msgctxt "prefs_power_source_wireless"
-msgid "Wireless charger"
-msgstr ""
+msgstr "显示高级参数设置"
-msgctxt "prefs_power_source_battery"
-msgid "Battery"
-msgstr ""
+msgctxt "prefs_run_on_battery_header"
+msgid "Compute on Battery"
+msgstr "使用电池进行计算"
msgctxt "battery_charge_min_pct_header"
msgid "Min. battery level"
-msgstr ""
+msgstr "最小电量"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
-msgstr ""
+msgstr "BOINC 会在电量低于设定值时暂停计算。"
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
-msgstr ""
+msgstr "最高电池温度"
msgctxt "battery_temperature_max_description"
-msgid ""
-"BOINC suspends computation above defined battery temperature. It is not "
-"recommended to change this value."
-msgstr ""
+msgid "BOINC suspends computation above defined battery temperature. It is not recommended to change this value."
+msgstr "BOINC 会在电池温度高于设定值时暂停计算,不建议修改。"
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
-msgstr ""
+msgstr "最多使用存储空间"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr ""
+msgstr "允许 BOINC 使用你设备中多少比例的存储空间?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr ""
+msgstr "最少剩余存储空间"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
-msgstr ""
+msgstr "你希望设备至少保留多少的空闲存储空间?"
msgctxt "prefs_network_daily_xfer_limit_mb_header"
msgid "Daily transfer limit"
-msgstr ""
+msgstr "每日传输限制"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr ""
+msgstr "限制 BOINC 每天使用的网络传输"
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr ""
+msgstr "仅在 WiFi 下进行任务传输"
msgctxt "prefs_autostart_header"
msgid "Autostart"
-msgstr ""
+msgstr "自动启动"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr ""
+msgstr "暂停时显示通知"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr ""
+msgstr "可使用的处理器核心数目"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr ""
+msgstr "限制 BOINC 可以用于计算的处理器核心数目。"
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr ""
+msgstr "在处理器使用率高时暂停计算"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
-msgstr ""
+msgstr "BOINC 会当其它应用的处理器使用率高于设定值时暂停计算。"
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
-msgstr ""
+msgstr "中央处理器限制"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr ""
+msgstr "限制 BOINC 用于计算的处理器时间"
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
-msgstr ""
+msgstr "内存限制"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr ""
+msgstr "限制计算任务允许占用的内存数量"
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr ""
+msgstr "BOINC 客户端日志标记"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr ""
+msgstr "界面日志级别"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr ""
+msgstr "设定界面日志消息的输出级别。"
msgctxt "prefs_unit_mb"
msgid "MB"
-msgstr ""
+msgstr "MB"
msgctxt "prefs_unit_gb"
msgid "GB"
-msgstr ""
+msgstr "GB"
#, c-format
msgctxt "prefs_unit_pct"
msgid "%"
-msgstr ""
+msgstr "%"
msgctxt "prefs_unit_celcius"
msgid "°C"
-msgstr ""
+msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr ""
+msgstr "读取项目列表中..."
msgctxt "projects_add"
msgid "Add project"
-msgstr ""
+msgstr "添加项目"
msgctxt "projects_icon"
msgid "Project icon"
-msgstr ""
+msgstr "项目徽标"
msgctxt "projects_credits_header"
msgid "Credit:"
-msgstr ""
+msgstr "积分:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr ""
+msgstr "(当前设备)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr ""
+msgstr "(总计)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr ""
+msgstr "被用户暂停"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
-msgstr ""
+msgstr "不下载新任务"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr ""
+msgstr "项目已结束 - 点击确认以移除"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr ""
+msgstr "当任务完成时移除"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
-msgstr ""
+msgstr "调度请求待处理"
msgctxt "projects_status_schedrpcinprogress"
msgid "Scheduler request in progress"
-msgstr ""
+msgstr "调度请求处理中"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr ""
+msgstr "涓流消息待处理"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
-msgstr ""
+msgstr "通讯调度:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr ""
+msgstr "项目命令:"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr ""
+msgstr "访问网站"
msgctxt "projects_control_update"
msgid "Update"
-msgstr ""
+msgstr "更新"
msgctxt "projects_control_remove"
msgid "Remove"
-msgstr ""
+msgstr "移除"
msgctxt "projects_control_suspend"
msgid "Suspend"
-msgstr ""
+msgstr "暂停"
msgctxt "projects_control_resume"
msgid "Resume"
-msgstr ""
+msgstr "继续"
msgctxt "projects_control_nonewtasks"
msgid "No new tasks"
-msgstr ""
+msgstr "不允许下载新任务"
msgctxt "projects_control_allownewtasks"
msgid "Allow new tasks"
-msgstr ""
+msgstr "允许下载新任务"
msgctxt "projects_control_reset"
msgid "Reset"
-msgstr ""
+msgstr "重置"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr ""
+msgstr "账户管理器命令:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
-msgstr ""
+msgstr "同步"
msgctxt "projects_control_remove_acctmgr"
msgid "Disable"
-msgstr ""
+msgstr "禁用"
#. project confirm dialog
msgctxt "projects_confirm_detach_title"
msgid "Remove project?"
-msgstr ""
+msgstr "移除项目?"
msgctxt "projects_confirm_detach_message"
msgid "Are you sure you want to remove"
-msgstr ""
+msgstr "你确定想要从 BOINC 中移除"
msgctxt "projects_confirm_detach_message2"
msgid "from BOINC?"
-msgstr ""
+msgstr "吗?"
msgctxt "projects_confirm_detach_confirm"
msgid "Remove"
-msgstr ""
+msgstr "移除"
msgctxt "projects_confirm_reset_title"
msgid "Reset project"
-msgstr ""
+msgstr "重置项目"
msgctxt "projects_confirm_reset_message"
msgid "Are you sure you want to reset"
-msgstr ""
+msgstr "你确定想要从 BOINC 中重置"
msgctxt "projects_confirm_reset_confirm"
msgid "Reset"
-msgstr ""
+msgstr "重置"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr ""
+msgstr "禁用账户管理器"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr ""
+msgstr "你确定要停止使用"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
-msgstr ""
+msgstr "禁用"
#. tasks tab strings
msgctxt "tasks_header_name"
msgid "Task Name:"
-msgstr ""
+msgstr "任务名称:"
msgctxt "tasks_header_elapsed_time"
msgid "Elapsed time:"
-msgstr ""
+msgstr "已用时间:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr ""
+msgstr "(暂停中)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
-msgstr ""
+msgstr "截止日期:"
msgctxt "tasks_result_new"
msgid "new"
-msgstr ""
+msgstr "新"
msgctxt "tasks_result_files_downloading"
msgid "waiting for download"
-msgstr ""
+msgstr "等待下载中"
msgctxt "tasks_result_files_downloaded"
msgid "download complete"
-msgstr ""
+msgstr "下载完成"
msgctxt "tasks_result_compute_error"
msgid "computation error"
-msgstr ""
+msgstr "计算错误"
msgctxt "tasks_result_files_uploading"
msgid "uploading"
-msgstr ""
+msgstr "上传中"
msgctxt "tasks_result_files_uploaded"
msgid "upload complete"
-msgstr ""
+msgstr "完成上传"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr ""
+msgstr "已中止"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
-msgstr ""
+msgstr "上传失败"
msgctxt "tasks_active_uninitialized"
msgid "ready"
-msgstr ""
+msgstr "就绪"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr ""
+msgstr "运行中"
msgctxt "tasks_active_suspended"
msgid "suspended"
-msgstr ""
+msgstr "已暂停"
msgctxt "tasks_active_abort_pending"
msgid "suspending"
-msgstr ""
+msgstr "暂停中"
msgctxt "tasks_active_quit_pending"
msgid "suspending"
-msgstr ""
+msgstr "暂停中"
msgctxt "tasks_custom_suspended_via_gui"
msgid "suspended"
-msgstr ""
+msgstr "已暂停"
msgctxt "tasks_custom_project_suspended_via_gui"
msgid "project suspended"
-msgstr ""
+msgstr "项目已暂停"
msgctxt "tasks_custom_ready_to_report"
msgid "ready to report"
-msgstr ""
+msgstr "准备上报"
#. confirmation dialog
msgctxt "confirm_abort_task_title"
msgid "Abort task?"
-msgstr ""
+msgstr "中止任务?"
msgctxt "confirm_abort_task_message"
msgid "Abort task:"
-msgstr ""
+msgstr "中止任务:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr ""
+msgstr "中止"
msgctxt "confirm_cancel"
msgid "Cancel"
-msgstr ""
+msgstr "取消"
msgctxt "confirm_image_desc"
msgid "Confirmation dialog"
-msgstr ""
+msgstr "确认对话框"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr ""
+msgstr "读取传输列表中..."
msgctxt "trans_upload"
msgid "Upload"
-msgstr ""
+msgstr "上传"
msgctxt "trans_download"
msgid "Download"
-msgstr ""
+msgstr "下载"
msgctxt "trans_retryin"
msgid "retry in"
-msgstr ""
+msgstr "重试"
msgctxt "trans_failed"
msgid "failed"
-msgstr ""
+msgstr "失败"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr ""
+msgstr " 已暂停"
msgctxt "trans_active"
msgid "active"
-msgstr ""
+msgstr "活跃"
msgctxt "trans_pending"
msgid "pending"
-msgstr ""
+msgstr "待处理"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr ""
+msgstr "项目延后"
msgctxt "trans_header_name"
msgid "File:"
-msgstr ""
+msgstr "文件:"
msgctxt "trans_control_retry"
msgid "Retry transfers"
-msgstr ""
+msgstr "重试传输"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr ""
+msgstr "中止传输?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr ""
+msgstr "中止文件:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr ""
+msgstr "中止"
#. notices tab strings
msgctxt "notices_loading"
msgid "Reading notices…"
-msgstr ""
+msgstr "读取公告列表中..."
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr ""
+msgstr "加载日志消息中..."
msgctxt "eventlog_client_header"
msgid "Client Messages"
-msgstr ""
+msgstr "客户端消息"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr ""
+msgstr "界面消息"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr ""
+msgstr "日志已复制到剪贴板。"
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
-msgstr ""
+msgstr "安卓版本 BOINC 的事件日志:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr ""
+msgstr "计算已暂停。"
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr ""
+msgstr "将设备连接到充电器后才能继续计算。"
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr ""
+msgstr "用户活跃。"
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr ""
+msgstr "不在允许计算的时间范围内。"
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr ""
+msgstr "BOINC 正在对你的设备进行基准测试..."
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr ""
+msgstr "磁盘空间不足。"
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr ""
+msgstr "调度的处理器阈值"
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr ""
+msgstr "近期无用户操作。"
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr ""
+msgstr "延迟启动。"
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr ""
+msgstr "一个互斥应用在运行。"
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr ""
+msgstr "你的设备正忙于处理其它应用。"
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr ""
+msgstr "BOINC 已达到了网络传输限制。"
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr ""
+msgstr "被安卓系统停止。"
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr ""
+msgstr "未连接至 WiFi。"
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr ""
+msgstr "在继续计算前请先为电池充电。"
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr ""
+msgstr "继续计算要求电量达到"
msgctxt "suspend_battery_charging_current"
msgid "currently"
-msgstr ""
+msgstr "当前"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr ""
+msgstr "等待电池降温中"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr ""
+msgstr "继续计算中..."
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr ""
+msgstr "手工。"
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr ""
+msgstr "用户请求"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr ""
+msgstr "获取任务"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr ""
+msgstr "上报已完成的任务"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr ""
+msgstr "发送涓流消息"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr ""
+msgstr "账户管理器请求"
msgctxt "rpcreason_init"
msgid "Project initialization"
-msgstr ""
+msgstr "项目初始化"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr ""
+msgstr "项目请求"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr ""
+msgstr "未知原因"
#. menu
msgctxt "menu_refresh"
msgid "Refresh"
-msgstr ""
+msgstr "刷新"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr ""
+msgstr "作为电子邮件发送"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
-msgstr ""
+msgstr "复制到剪贴板"
msgctxt "menu_eventlog"
msgid "Event Log"
-msgstr ""
+msgstr "事件日志"
msgctxt "menu_exit"
msgid "Exit BOINC"
-msgstr ""
+msgstr "退出 BOINC"
msgctxt "menu_run_mode_disable"
msgid "Suspend"
-msgstr ""
+msgstr "暂停"
msgctxt "menu_run_mode_enable"
msgid "Resume"
-msgstr ""
+msgstr "继续"
msgctxt "menu_about"
msgid "About"
-msgstr ""
+msgstr "关于"
msgctxt "menu_help"
msgid "Help"
-msgstr ""
+msgstr "帮助"
#. about dialog
msgctxt "about_button"
msgid "Return"
-msgstr ""
+msgstr "返回"
msgctxt "about_title"
msgid "About"
-msgstr ""
+msgstr "关于"
msgctxt "about_name"
msgid "BOINC"
-msgstr ""
+msgstr "BOINC"
msgctxt "about_version"
msgid "Version"
-msgstr ""
+msgstr "版本"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr ""
+msgstr "伯克利开放式网络计算架构"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
+"© 2003–2013 加州大学,伯克利分校。\n"
+"保留所有权利。"
diff --git a/locale/zh_CN/BOINC-Manager.mo b/locale/zh_CN/BOINC-Manager.mo
index 4b8ae78..4a32dae 100644
Binary files a/locale/zh_CN/BOINC-Manager.mo and b/locale/zh_CN/BOINC-Manager.mo differ
diff --git a/locale/zh_CN/BOINC-Manager.po b/locale/zh_CN/BOINC-Manager.po
index 1b4313e..85c6afa 100644
--- a/locale/zh_CN/BOINC-Manager.po
+++ b/locale/zh_CN/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 7.0.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-09-21 09:50+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-02-23 05:36+0000\n"
"Last-Translator: Gang <zenith.yin at gmail.com>\n"
"Language-Team: Team China <zenith.yin at gmail.com>\n"
"Language: zh_CN\n"
@@ -23,13 +23,13 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1379757051.0\n"
+"X-POOTLE-MTIME: 1393133792.0\n"
# 81%
#: AccountInfoPage.cpp:387
#, c-format
msgid "Identify your account at %s"
-msgstr "确认您的帐户"
+msgstr "确认你在 %s 的帐户"
#: AccountInfoPage.cpp:393
msgid ""
@@ -122,7 +122,6 @@ msgstr ""
"就可以进行注册或取回您已忘记的密码。"
#: AccountInfoPage.cpp:532
-#, fuzzy
msgid "Account manager web site"
msgstr "帐户管理器网站"
@@ -140,17 +139,16 @@ msgstr "使用帐户管理器"
#: AccountInfoPage.cpp:585
msgid "Please enter a user name."
-msgstr ""
+msgstr "请输入一个用户名。"
#: AccountInfoPage.cpp:587
-#, fuzzy
msgid "Please enter an email address."
-msgstr "请指定一个电子邮件地址"
+msgstr "请指定一个电子邮箱地址。"
#: AccountInfoPage.cpp:597
#, c-format
msgid "Please enter a password of at least %d characters."
-msgstr ""
+msgstr "请输入长度至少为 %d 的口令。"
#: AccountInfoPage.cpp:607
msgid ""
@@ -168,22 +166,20 @@ msgid ""
msgstr "要选择一个帐户管理器,请点击它的名称或在下方输入它的网址。"
#: AccountManagerInfoPage.cpp:279
-#, fuzzy
msgid "Account manager details:"
-msgstr "帐户管理器网站"
+msgstr "帐户管理器详情:"
#: AccountManagerInfoPage.cpp:283
-#, fuzzy
msgid "Account manager &URL:"
-msgstr "帐户管理器的网址(&U):"
+msgstr "帐户管理器网址(&URL):"
#: AccountManagerInfoPage.cpp:287
msgid "Open web page"
-msgstr ""
+msgstr "打开网页"
#: AccountManagerInfoPage.cpp:290
msgid "Visit this account manager's web site"
-msgstr ""
+msgstr "访问该账户管理器的网站"
#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
@@ -210,338 +206,337 @@ msgstr "已连接"
msgid "Disconnected"
msgstr "已断开"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "关闭 %s 窗口"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "关闭窗口(&C)"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "退出 %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "通知(&N)\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "显示通知页"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "项目(&P)\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "显示项目页"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "任务(&T)\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "显示任务页"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "网络传输(&F)\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "显示网络传输页"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "统计(&S)\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "显示统计页"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "磁盘使用情况(&D)\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "显示磁盘使用情况页"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "简易视图(&V)...\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "显示简洁的图形界面。"
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "增加项目或帐户管理器(&A)..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "志愿加入到一个或多个分布在许多不同科学领域内的研究项目"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "与 %s 进行同步(&S)"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "从 %s 获取当前的参数设定"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "增加项目(&A)..."
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "增加一个项目"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "停止使用 %s(&S)"
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "从帐户管理器中移除当前计算机。"
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "选项(&O)..."
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "配置界面及代理服务器选项"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "计算参数设置(&P)..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "修改计算参数设置"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "一直运行(&R)"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "运行计算程序且不受参数设置的影响"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "依照参数运行(&P)"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "运行计算程序且依照用户的参数设置"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "暂停(&S)"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "暂停计算程序且不受参数设置的影响"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "总是使用 GPU"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "使用 GPU 且不受参数设置的影响"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "依照参数使用 GPU"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "运行 GPU 计算程序且依照用户的参数设置"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "暂停 GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "暂停使用 GPU 且不受参数设置的影响"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "网络总是可用"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "允许使用网络且不受参数设置的影响"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "依照参数使用网络"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "允许使用网络且依照用户的参数设置"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "暂停使用网络"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "暂停使用网络且不受参数设置的影响"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "连接到另外一台运行 %s 的计算机"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "选择计算机..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "关闭当前连接的客户端..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "关闭当前连接的客户端"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "运行 CPU 基准测试(&B)"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "运行 BOINC 的 CPU 基准测试"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "进行网络通讯"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "执行所有等待中的网络通讯请求"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "读取配置文件"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr "从 cc_config.xml 和 app_config.xml 中读取配置信息"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "读取本地参数设置文件"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "从 global_prefs_override.xml 中读取本地参数设置。"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "运行另一个 %s 实例..."
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "启动另一个 %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "事件日志...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "显示诊断消息。"
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s 帮助(&H)"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "查看 %s 的信息"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "%s 帮助"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "查看 %s 的信息"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
-#, c-format
-#, c-format, fuzzy
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
+#, c-format, c-format
msgid "%s &web site"
msgstr "%s 网站(&W)"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "查看 BOINC 和 %s 的信息"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "关于 %s (&A)..."
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "查看许可与版权信息。"
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "文件(&F)"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "视图(&V)"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "工具(&T)"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "活动(&A)"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "高级(&D)"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "帮助(&H)"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - 停止使用 %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -556,12 +551,12 @@ msgstr ""
"\n"
"您确定要退出 %s 吗?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - 关闭当前连接的客户端..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -570,27 +565,27 @@ msgstr ""
"%s 将要关闭当前连接的客户端,\n"
"然后会提示您输入想要连接的客户端。"
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s 已经成功地加入了 %s"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "正在连接至 %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "已连接至 %s ( %s )"
@@ -625,26 +620,26 @@ msgstr ""
"\n"
"请访问项目网站并按照上面的说明进行操作。"
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "正在连接 BOINC 客户端。请稍候..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "退出 %s (&Q)"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "退出 %s (&X)"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - 网络通讯"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "取消"
@@ -799,7 +794,7 @@ msgstr "%s 已经成功地断开至互联网的连接。"
msgid "%s failed to disconnected from the Internet."
msgstr "%s 断开至互联网的连接失败。"
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -817,7 +812,7 @@ msgstr ""
" - 重新安装 %s,在被问到关于非系统管理员用户的问题时,回答\"是\"\n"
" - 联系系统管理员将您加入到“boinc_master”用户组。"
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -826,16 +821,16 @@ msgstr ""
"%s 相关的本地用户权限设置有误,请重新安装 %s。\n"
"( 错误代码 %d )"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr " 位置 "
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -843,67 +838,67 @@ msgstr ""
"BOINC 需要在计算机重新启动后才能正常运行。\n"
"请您先重启计算机再重试当前的操作。"
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Manager 已经由操作系统自动运行"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "启动 BOINC 时仅显示在系统托盘区"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "包含 BOINC 客户端执行程序的目录"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC 数据目录"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "主机名称或 IP 地址"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "图形界面 RPC 端口号"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "用户口令"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "使用可选参数来启动 BOINC"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "禁用 BOINC 中用户和权限相关的安全选项"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "设置皮肤调试模式已启用皮肤管理器的错误消息记录"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "允许运行多个 BOINC Manager 的实例"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "未使用:用于临时修复 XCode 4.2 的错误"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "( 自动检测 )"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "( 未知 )"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "( 用户自定义 )"
@@ -930,7 +925,7 @@ msgid "E&xit"
msgstr "退出(&X)"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "继续"
@@ -1002,6 +997,9 @@ msgid ""
"\n"
"Click Finish to close."
msgstr ""
+"请稍后重试。\n"
+"\n"
+"点击完成以关闭。"
#: CompletionErrorPage.cpp:225 CompletionPage.cpp:222 CompletionPage.cpp:242
#: CompletionPage.cpp:273
@@ -1089,64 +1087,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "伯克利开放式网络计算平台 ( BOINC )"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "确定(&O)"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "非法的浮点数"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "无效的数字"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "错误的时间,正确格式应该是 HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "错误的时间间隔,正确格式应该是 HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "检测到错误的输入值"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "验证错误"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "待添加的应用程序"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "“%s”不是一个可执行的应用程序。"
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "添加互斥应用程序"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "待添加的应用程序的名称?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "添加互斥应用程序"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "应用程序的名称必须以“%s”结尾"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "“%s”已经在列表内了。"
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1154,11 +1152,11 @@ msgstr ""
"你确定想要清除所有本地参数设置吗?\n"
"(不会对互斥应用程序的设置有影响)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "确认"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - 本地参数设置"
@@ -1173,11 +1171,11 @@ msgstr ""
"点击“确定”即可保存并应用对话框中的相关设置。\n"
"点击“清除”即可恢复使用项目网站上的参数设置(不包括关于互斥应用程序的设置)。"
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "清除"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "清除所有本地的参数设置并关闭对话框"
@@ -1197,7 +1195,7 @@ msgstr "磁盘和内存使用"
msgid "exclusive applications"
msgstr "互斥应用程序"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "确定"
@@ -1210,7 +1208,7 @@ msgid "close the dialog without saving"
msgstr "关闭对话框且不进行任何保存"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "帮助"
@@ -1260,7 +1258,7 @@ msgid ""
msgstr "仅在您不使用计算机后指定的时间才进行计算"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "分钟"
@@ -1276,7 +1274,7 @@ msgstr "如果处理器使用率超出设置值就暂停计算"
msgid "percent (0 means no restriction)"
msgstr "时 (0 表示不限制)"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "每日时间段 从"
@@ -1284,8 +1282,8 @@ msgstr "每日时间段 从"
msgid "start work at this time"
msgstr "开始计算的时间"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "到"
@@ -1293,43 +1291,43 @@ msgstr "到"
msgid "stop work at this time"
msgstr "停止计算的时间"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "( 如果相同即表示不进行限制 )"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "定制每周内各天的可用时间段:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "选取以指定每周内的某天以进行可用时间设定"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "周一"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "周二"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "周三"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "周四"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "周五"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "周六"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "周日"
@@ -1348,11 +1346,11 @@ msgstr "在多处理器系统上,最多使用"
#: DlgAdvPreferencesBase.cpp:346
#, no-c-format
msgid "% of the processors (0 means ignore this setting)"
-msgstr ""
+msgstr "% 的处理器(0 表示不限制)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "最多使用"
@@ -1361,258 +1359,258 @@ msgstr "最多使用"
msgid "% CPU time"
msgstr "% CPU时间"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "综合选项"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "最大下载速率"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "千字节/秒。"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "最大上传速率"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "最多传输"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "MB"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "每"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "天"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "最小任务缓存"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "至少应保存多少天的计算任务量"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "最大任务缓存"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "最多应保存多少天的计算任务量"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "不对映像文件进行校验"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "如果您的互联网接入服务端修改了镜像文件请选择上"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "网络选项"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "接入互联网前先确认"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr "如果选中,在需要连接至互联网时会先显示一个确认对话框"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "传输完成后断开连接"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
msgstr "如果选上,BOINC 将在使用完网络后断开连接 ( 仅适用于拨号连接 )"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "允许使用网络的情况"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "开始使用网络的时间"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "停止使用网络的时间"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "磁盘使用"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "BOINC 最多可使用的磁盘空间 (GB)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "磁盘空间 (GB)"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "至少保留"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC 至少需保留的磁盘空余 (GB)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "剩余磁盘空间 (GB)"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC 最多可使用的磁盘空间比例"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% 总磁盘空间"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "任务的最短存盘间隔"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "秒"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% 页面文件 ( 交换空间 )"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "内存使用"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% ( 使用计算机时 )"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% ( 计算机闲置时 )"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "计算程序暂停时驻留在内存"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "如果选中,暂停的计算任务将保留在内存中"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr "当这些应用程序在运行的时候暂停对处理器和网络的使用:"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "添加..."
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "在列表中增加一个应用程序"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "删除"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "从列表中移除一个应用程序"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "要访问更多高级选项,请前往"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - 事件日志"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "项目"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "时间"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "消息"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "仅显示当前项目(&S)"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "复制所有的(&A)"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "复制所有消息至剪贴板。"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "复制选中的(&S)"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
msgstr "复制选中的消息至剪贴板。您可以在选择的时候通过按住Shift键或Commandl键来选取多条消息。"
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
msgstr "复制选中的消息至剪贴板。您可以在选择的时候通过按住Shift键或Ctrl键来选取多条消息。"
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "关闭(&C)"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "获取 %s 的帮助信息"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "显示所有消息(&M)"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "显示所有项目的消息"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "仅显示当前选中项目的消息"
@@ -1663,7 +1661,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "记住当前的选择并不再显示本对话框。"
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "取消(&C)"
@@ -1671,223 +1669,223 @@ msgstr "取消(&C)"
msgid "Don't show this dialog again."
msgstr "不再显示本对话框。"
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "禁止的任务类型 "
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "项目参数设置"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "帐户管理器参数设置"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "项目未提供的任务类型 "
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "客户端已排除的任务类型 "
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr "任务获取被延迟"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr "任务获取延迟间隔"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "项目属性"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "综合"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "主网址 (Master URL)"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "用户名称"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "团队名称"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "资源分享"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "远程调度请求被延迟"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "文件下载被延迟"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "文件上传被延迟"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "计算机编号"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "非 CPU 密集"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "是"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "已在界面上被暂停"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "否"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "已禁止下载新任务"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "正在进行调度请求"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "上传消息等待中"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "主机位置"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "缺省"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "已通过帐户管理器增加"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "任务完成后移除项目"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "已结束"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "积分"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "用户"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "主机"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "调度"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "调度优先级"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "时长校正因子"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "任务属性"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "计算程序"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "任务单元名称"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "任务名称"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "状态"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "接收时间"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "上报期限"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "资源"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "预计的任务大小"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "上次存盘的 CPU 时间"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "已用 CPU 时间"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "已用时间"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "预计剩余时间"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "完成百分比"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "虚存占用大小"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "工作集大小"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "目录"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "进程标识"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "本地:"
@@ -1975,7 +1973,7 @@ msgstr "下面的内容如果不需要请留空"
msgid "User Name:"
msgstr "用户名:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "密码:"
@@ -2033,19 +2031,19 @@ msgid ""
"effect, you must restart the %s."
msgstr "%s 的缺省语言已被修改,且必须重启 %s 才能生效。"
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - 选择计算机"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr "另一个 %s 的实例已经在当前计算上运行,请选择想要监控的客户端。"
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "主机名:"
@@ -2235,206 +2233,206 @@ msgstr "研究"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "了解 WCG 平台上的项目"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "正在启动客户端"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "正在连接至客户端"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "正在读取系统状态,请稍候..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "应用程序不存在"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr "请从 http://cord.sourceforge.net 下载并安装 CoRD 程序。"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "电池供电"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "正在使用计算机"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "用户请求"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "每日时间段"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "正在进行 CPU 基准测试"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "磁盘空间不足 - 请检查参数设置"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "计算机未在使用"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "启动中"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "有互斥的应用程序在运行"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU 忙碌中"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "网络带宽限制已超出"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "操作系统请求"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "未知原因"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "无可用 GPU, "
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "新任务"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "下载失败"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "正在下载"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr "(已暂停 - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "项目已被用户暂停"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "任务已被用户暂停"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "已暂停 - "
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU 已暂停 - "
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "等待足够的内存"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "等待足够的共享内存"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "运行中,高优先级"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "运行中"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr "( 非 CPU 密集 )"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "等待运行"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "准备运行"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr "(调度等待:"
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr "(调度等待)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (正等待访问网络)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "计算错误"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "上传失败"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "正在上传"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "已被用户中止"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "已被项目中止"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "已中止:未在截止日期前开始计算"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "已中止:磁盘使用超出限制"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "已中止:运行时间超出限制"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "已中止:内存使用超出限制"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "已中止"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "已被确认"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "等待上报"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "错误:非法状态 '%d'"
@@ -2488,61 +2486,61 @@ msgstr "请检查用户名及密码,然后重试。"
msgid "Check the email address and password, and try again."
msgstr "请检查电子邮件地址及密码,然后重试。"
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "更多..."
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "所有"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "选择一个项目"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "要选择一个项目,请点击它的项目名称或在下方输入它的项目网址。"
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "类别:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "项目:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "项目简介"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "研究领域:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "项目组织:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "网站:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "支持的操作系统:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "项目网址:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr "该项目可能没有适合您计算机的任务类型,您确定还要添加它吗?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "您当前已经加入了这个项目,请选择其它的项目。"
@@ -2550,11 +2548,11 @@ msgstr "您当前已经加入了这个项目,请选择其它的项目。"
msgid "Communicating with project."
msgstr "正在和项目服务器进行通讯。"
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "请求的文件不在服务器上。"
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "服务器上产生了一个内部错误。"
@@ -2655,8 +2653,8 @@ msgid "I agree to the terms of use."
msgstr "我同意该使用协议。"
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "我不同意该使用协议。"
+msgid "I do not agree to the terms of use."
+msgstr "我不同意该用户条款。"
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2745,7 +2743,7 @@ msgstr "'%s'中未包含正确的主机名称。"
msgid "'%s' does not contain a valid path."
msgstr "'%s'中未包含正确的路径。"
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "命令"
@@ -2798,7 +2796,7 @@ msgstr "获取通知中,请稍候..."
msgid "There are no notices at this time."
msgstr "当前没有可以显示的通知。"
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "通知"
@@ -2813,7 +2811,7 @@ msgid ""
msgstr "上报所有完成的任务,获取最新的积分及参数设置,可能下载更多的新任务。"
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3044,135 +3042,135 @@ msgstr "可用磁盘空间:"
msgid "used by other programs: "
msgstr "其它程序使用:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "用户的总积分"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "用户的近期平均积分"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "主机的总积分"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "主机的近期平均积分"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "上次更新:%.0f天前"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "显示用户的总积分"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "显示用户的总积分"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "显示用户的近期平均积分"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "显示用户的近期平均积分"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "显示主机的总积分"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "显示主机的总积分"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "显示主机的近期平均积分"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "显示主机的近期平均积分"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< 前一项目(&P)"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "显示前一个项目的图表"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "后一项目(&N) >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "显示后一个项目的图表"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "隐藏项目列表"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "将整块区域用作图形显示"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "查看模式"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "单项目"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "显示当前项目的图表"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "所有项目(单独)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "显示所有项目,一个项目一张图表"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "所有项目(合并)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "在一张图表中显示所有项目"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "所有项目(总和)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "在一张图表中显示所有项目"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "统计"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "正在更新图表..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "显示项目列表"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "使用更小的图表显示区域"
@@ -3338,10 +3336,6 @@ msgstr "剩余时间(估计)"
msgid "Deadline"
msgstr "上报期限"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "任务名称"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "任务"
@@ -3486,40 +3480,40 @@ msgstr "您确定要取消吗?"
msgid "Question"
msgstr "问题"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "高级视图...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "显示高级图形界面。"
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "皮肤"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "选择用户界面的外观。"
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "缺省"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "暂停计算"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "继续计算"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "打开一个窗口,查看来自计算网站或 BOINC 网站的通知消息。"
@@ -3541,117 +3535,119 @@ msgid "Click OK to set preferences."
msgstr "点击确定可以保存并应用当前的参数设置。"
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "点击取消将恢复使用项目网站上的参数设置。"
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr "点击清除可将下列所有参数设置恢复到项目网站上的设定。"
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "更多的参数设置,请切换至"
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "高级视图。"
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr "更多的参数设置,请在高级视图下选择“计算参数设置”来查看。"
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "计算时间段:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "连接互联网的时间段:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "最多使用:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "磁盘空间"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "处理器"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "电池供电时仍然计算?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "闲置一定时间后开始计算:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "清除所有本地的参数设置并关闭对话框"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "任何时候"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 ( 一直运行 )"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "您确定要清除所有的本地参数设置吗?\n"
@@ -3684,8 +3680,7 @@ msgid "Project Commands"
msgstr "项目命令"
#: sg_ProjectPanel.cpp:267
-#, c-format
-#, c-format, fuzzy
+#, c-format, c-format
msgid "Pop up a menu of web sites for project %s"
msgstr "弹出一个 %s 项目的网站菜单"
@@ -3711,116 +3706,116 @@ msgstr ""
"您确定要中止当前任务'%s'吗?\n"
"( 进度:%.1lf%%,状态:%s )"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "您当前没有加入到任何项目,请先加入一个项目。"
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "不可用"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "任务:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "选择一个要操作的任务"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "来自:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "该计算任务的进度"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "任务命令"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "弹出一个应用于当前计算任务的命令菜单"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "计算程序:%s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "计算程序:不可用"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "不可用"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "已用时:%s"
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "剩余时间:%s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "状态:%s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "正在获取当前状态。"
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "正在从服务器下载任务。"
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "暂停计算:电池供电。"
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "暂停计算:用户活跃。"
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "暂停计算:用户暂停计算。"
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "暂停计算: 休息时间段。"
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "暂停计算:正在运行基准测试。"
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "暂停计算。"
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "正在等待连接项目服务器。"
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "正在获取当前状态"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "无任务可供处理"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "无法连接至客户端的核心服务程序"
@@ -3862,6 +3857,24 @@ msgstr "显示所有"
msgid "Quit %s"
msgstr "退出 %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "我不同意该使用协议。"
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "点击取消将恢复使用项目网站上的参数设置。"
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "更多的参数设置,请切换至"
+
+#~ msgid "the Advanced View."
+#~ msgstr "高级视图。"
+
+#~ msgid "Workunit name"
+#~ msgstr "任务单元名称"
+
+#~ msgid "invalid float"
+#~ msgstr "非法的浮点数"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "显示高级图形界面。"
diff --git a/locale/zh_CN/BOINC-Project-Generic.po b/locale/zh_CN/BOINC-Project-Generic.po
index 4b275bc..ae56820 100644
--- a/locale/zh_CN/BOINC-Project-Generic.po
+++ b/locale/zh_CN/BOINC-Project-Generic.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-12-29 06:17+0000\n"
-"Last-Translator: Anonymous Pootle User\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-02-23 02:23+0000\n"
+"Last-Translator: Gang <zenith.yin at gmail.com>\n"
"Language-Team: Team China <zenith.yin at gmail.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
@@ -21,7 +21,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: html\\user\n"
"X-Poedit-Basepath: D:\\Work\\boinc_src\\html\\user\n"
-"X-POOTLE-MTIME: 1388297877.0\n"
+"X-POOTLE-MTIME: 1393122217.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "简体中文"
@@ -191,7 +191,7 @@ msgstr "搜索论坛"
msgid "Advanced search"
msgstr "高级搜索"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "私人消息"
@@ -201,8 +201,8 @@ msgstr "私人消息"
msgid "Questions and Answers"
msgstr "疑难解答"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -268,7 +268,7 @@ msgstr "未读"
msgid "Message %1"
msgstr "消息 %1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "隐藏"
@@ -464,7 +464,7 @@ msgstr "不能回复隐藏主题。"
msgid "Thread"
msgstr "主题"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "贴数"
@@ -473,7 +473,7 @@ msgstr "贴数"
msgid "Views"
msgstr "查看次数"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "最近发贴"
@@ -511,7 +511,7 @@ msgid "Home"
msgstr "家庭"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "工作"
@@ -521,7 +521,7 @@ msgstr "学习"
#: ../inc/host.inc:59
msgid "Mobile"
-msgstr ""
+msgstr "手机"
#: ../inc/host.inc:61 ../user/edit_forum_preferences_form.php:172
#: ../user/edit_forum_preferences_form.php:173
@@ -554,7 +554,7 @@ msgstr "域名"
#: ../inc/host.inc:98
msgid "Product name"
-msgstr ""
+msgstr "产品名称"
#: ../inc/host.inc:102
msgid "Local Standard Time"
@@ -577,9 +577,9 @@ msgid "Created"
msgstr "创建时间"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -755,7 +755,7 @@ msgstr "最近一次通讯"
msgid "Computer info"
msgstr "计算机信息"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "名次"
@@ -764,9 +764,9 @@ msgstr "名次"
msgid "Avg. credit"
msgstr "平均积分"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -854,8 +854,8 @@ msgstr "仅显示最近 30 天内活跃的计算机"
msgid "Computer ID"
msgstr "计算机 ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -872,7 +872,7 @@ msgstr "通过名称合并计算机"
#: ../inc/language_names.inc:61
msgid "Browser default"
-msgstr ""
+msgstr "浏览器缺省"
#: ../inc/news.inc:40
msgid "Comment"
@@ -891,7 +891,7 @@ msgstr "收件箱"
msgid "Write"
msgstr "写信"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "发送私人消息"
@@ -1152,9 +1152,8 @@ msgid "Use NVIDIA GPU %1 Enforced by version 6.10+ %2"
msgstr "使用 NVIDIA GPU%16.10 之后的版本实现了该设置%2"
#: ../inc/prefs.inc:344
-#, fuzzy
msgid "Use Intel GPU %1 Enforced by version 7.2+ %2"
-msgstr "使用 ATI GPU%16.10 之后的版本实现了该设置%2"
+msgstr "使用 %17.2 及后续版本%2支持的 Intel GPU"
#: ../inc/prefs.inc:358
msgid ""
@@ -1269,17 +1268,17 @@ msgstr "编辑 %1 的参数设置"
#: ../inc/prefs.inc:885
msgid "These apply to all BOINC projects in which you participate."
-msgstr ""
+msgstr "这些参数设置对你参加的所有 BOINC 项目均有效。"
#: ../inc/prefs.inc:887
msgid ""
"On computers participating in multiple projects, the most recently modified "
"preferences will be used."
-msgstr ""
+msgstr "在参与到多个项目的计算机上,使用的是最近修改的参数设置。"
#: ../inc/prefs.inc:889
msgid "These preferences do not apply to Android devices."
-msgstr ""
+msgstr "这些参数设置不适用于安卓设备。"
#: ../inc/prefs.inc:892
msgid "Preferences last modified:"
@@ -1369,7 +1368,7 @@ msgstr "ATI GPU"
#: ../inc/result.inc:57 ../user/host_app_versions.php:28
msgid "Intel GPU"
-msgstr ""
+msgstr "Intel GPU"
#: ../inc/result.inc:65
msgid "Not in DB"
@@ -1620,7 +1619,7 @@ msgstr "结果上报时间<br />或者上报期限"
msgid "explain"
msgstr "解释"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "状态"
@@ -1697,9 +1696,8 @@ msgid "State"
msgstr "状态"
#: ../inc/result.inc:747
-#, fuzzy
msgid "Task name:"
-msgstr "任务名称"
+msgstr "任务名称:"
#: ../inc/team.inc:40
msgid "Search criteria (use one or more)"
@@ -1713,9 +1711,9 @@ msgstr "关键字"
msgid "Find teams with these words in their names or descriptions"
msgstr "寻找名称或描述中包含这些关键字的团队"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1723,7 +1721,7 @@ msgstr "寻找名称或描述中包含这些关键字的团队"
msgid "Country"
msgstr "国家或地区"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "团队类型"
@@ -1751,8 +1749,8 @@ msgstr "请求已由你发起过"
msgid "founder response deadline is %1"
msgstr "原创建人的回复期限是 %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "未加入团队"
@@ -1776,105 +1774,105 @@ msgstr "描述"
msgid "Web site"
msgstr "网站"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "跨项目的统计网站"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "类型"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "留言板"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "主题"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "加入该团队"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr "如果你在项目参数中设置了允许接收电子邮件,加入团队后该团队的创建人将可以访问到你的电子邮件地址。"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "不接受新成员加入"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "创建人改变请求待处理"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "回复期限 %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "团队创建人改变"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "成员"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "创建人"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "管理员"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "昨天新加入的成员"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "所有成员"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "查看"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "活跃的成员"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "有积分的成员"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "管理员"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "前 %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "后面 %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "没有这个团队。"
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "本操作需要创建人权限。"
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "本操作需要团队创建人的权限"
@@ -1884,53 +1882,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr "警告:这是一个 BOINC 自动创建的团队,你在此处做出的修改将很快被覆盖掉,请直接在 %1这里%2 进行编辑。"
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr "%1隐私事项%2:如果你要创建一个团队,则你的项目参数(资源分享率,图形参数设置等)将会对团队成员公开。"
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "团队名称,文字版本"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "请不要使用 HTML 标记。"
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "团队名称,HTML 版本"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "你可以使用 %1有限的 HTML 标记%2。"
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "如果你不了解 HTML,请保持本编辑框为空。"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "团队的网址(如果有的话):"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "不包括 \"http://\""
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "本网站该团队的页面上将链接到这个网址。"
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "团队描述"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "是否接受新的团队成员?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "用户档案"
@@ -1963,7 +1961,7 @@ msgid "Computers on this account"
msgstr "本帐户所属的计算机"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "查看"
@@ -1980,8 +1978,8 @@ msgstr "跨项目的统计网站"
msgid "Account"
msgstr "帐户"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "团队"
@@ -2010,7 +2008,7 @@ msgstr "帐户信息"
msgid "Email address"
msgstr "电子邮件地址"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "网址"
@@ -2018,7 +2016,7 @@ msgstr "网址"
msgid "Postal code"
msgstr "邮编"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "加入 %1 的日期"
@@ -2038,7 +2036,7 @@ msgstr "用户口令"
msgid "other account info"
msgstr "其它帐户信息"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "用户 ID"
@@ -2084,96 +2082,96 @@ msgstr "%1参数设置"
msgid "Community"
msgstr "社区"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "删除"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "创建"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "用户档案"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 个帖子"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "通知"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "退出团队"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "管理"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(创建人转换请求待处理)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "团队成员"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "寻找团队"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "创建人(已退出团队)"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "寻找好友"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "好友"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "计算机"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "捐助者"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "联系"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "这是一位好友"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "删除该好友"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "请求待处理"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "添加为好友"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "用户名前后不能有空格"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "用户名不得为空"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "用户名不得含有 HTML 标签"
@@ -2247,7 +2245,7 @@ msgstr "无法连接数据库 - 请稍后重试"
msgid "Unable to select database - please try again later"
msgstr "无法选择数据库 - 请稍后重试"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "保持这台计算机上的登录状态"
@@ -2419,11 +2417,11 @@ msgstr ""
#: ../user/bs_sample_index.php:44
msgid "Participants"
-msgstr ""
+msgstr "参与者"
#: ../user/bs_sample_index.php:46
msgid "Do work"
-msgstr ""
+msgstr "执行任务"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
#: ../user/home.php:49 ../project.sample/project.inc:43
@@ -2432,7 +2430,7 @@ msgstr "你的帐户"
#: ../user/bs_sample_index.php:47 ../user/bs_sample_index.php:50
msgid "view stats, modify preferences"
-msgstr ""
+msgstr "查看统计信息,修改参数设置"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
#: ../user/team.php:25
@@ -2441,13 +2439,13 @@ msgstr "团队"
#: ../user/bs_sample_index.php:48 ../user/bs_sample_index.php:53
msgid "create or join a team"
-msgstr ""
+msgstr "创建或加入一个团队"
#: ../user/bs_sample_index.php:51 ../user/sample_index.php:191
msgid "User of the day"
msgstr "今日用户"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "服务器状态"
@@ -2458,11 +2456,11 @@ msgstr "用户档案"
#: ../user/bs_sample_index.php:61
msgid "User search"
-msgstr ""
+msgstr "用户搜索"
#: ../user/bs_sample_index.php:64
msgid "Statistics"
-msgstr ""
+msgstr "统计"
#: ../user/bs_sample_index.php:65 ../user/stats.php:30
#: ../user/top_users.php:116
@@ -2483,7 +2481,6 @@ msgid "Top GPU models"
msgstr "GPU 型号排名"
#: ../user/bs_sample_index.php:70
-#, fuzzy
msgid "Languages"
msgstr "语言"
@@ -3460,7 +3457,7 @@ msgstr "你没有输入好友的名称和/或电子邮箱地址,请%1回退到
msgid ""
"This project hasn't created an email message - please notify its "
"administrators"
-msgstr ""
+msgstr "该项目还没有创建电子邮件消息 - 请通知其管理员"
#: ../user/ffmail_form.php:33
msgid "Tell your friends about %1"
@@ -4439,7 +4436,7 @@ msgstr "如果你仍有 BOINC 客户端运行在该账户下,请按如下操
msgid ""
"Go to the BOINC data directory on your computer (its location is written to "
"the Event Log at startup)."
-msgstr ""
+msgstr "打开你计算机上的 BOINC 数据路径(其具体位置会写入到启动时的事件日志)。 "
#: ../user/get_passwd.php:51
msgid "Find your account file for this project; it will be named <b>%1</b>."
@@ -5333,135 +5330,135 @@ msgstr "未运行"
msgid "Disabled"
msgstr "已禁用"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "项目状态"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "服务端软件版本:%1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "程序"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "主机"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "数据驱动的网页"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "上传/下载服务器"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "调度程序"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "运行中:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "程序当前运行正常"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "未运行:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "程序出错或者项目已停机"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "已禁用:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "程序已禁用"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "计算状态"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "数据库服务器当前无法访问"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "准备分发的任务"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "任务处理中"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "等待验证的任务"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "等待回收的任务"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "等待删除的任务"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "等待删除的任务"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "服务端事务积压(小时)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "用户"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "近期得到过积分的"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "得到过积分的"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "过去 24 小时内注册的"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "当前处理能力(GFLOPs)"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "按计算程序分类的任务"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "计算程序"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "未发送的"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "计算中"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "最近 100 个计算结果的平均处理时间(单位:小时)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "最近 24 小时的用户"
@@ -5709,6 +5706,10 @@ msgstr "新的团队创建人?"
msgid "Change founder"
msgstr "更改团队创建人"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "目前没有用户更换了团队。"
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "你必须选择一个非空的团队名称"
diff --git a/locale/zh_CN/BOINC-Setup.mo b/locale/zh_CN/BOINC-Setup.mo
index 8ebea46..d474bc8 100644
Binary files a/locale/zh_CN/BOINC-Setup.mo and b/locale/zh_CN/BOINC-Setup.mo differ
diff --git a/locale/zh_CN/BOINC-Setup.po b/locale/zh_CN/BOINC-Setup.po
index 016e84a..ea4698e 100644
--- a/locale/zh_CN/BOINC-Setup.po
+++ b/locale/zh_CN/BOINC-Setup.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-12-29 06:18+0000\n"
-"Last-Translator: Anonymous Pootle User\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-23 04:33+0000\n"
+"Last-Translator: Gang <zenith.yin at gmail.com>\n"
"Language-Team: Team China <zenith.yin at gmail.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
@@ -19,19 +19,19 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1388297894.0\n"
+"X-POOTLE-MTIME: 1393130019.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
-#, c-format, fuzzy
+#, c-format, c-format
msgid "Sorry, this version of %s requires system 10.5 or higher."
-msgstr "对不起,%s 要求 10.4 或更高的操作系统版本。"
+msgstr "对不起,%s 要求 10.5 或更高的操作系统版本。"
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "是"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "否"
@@ -57,15 +57,15 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr "是否将 %s 设置为这台 Mac 上所有 %s 用户的屏幕保护程序?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "确定"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "重启后出现了权限错误"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -73,7 +73,7 @@ msgstr ""
"卸载可能需要几分钟。\n"
"请稍等。"
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -84,21 +84,29 @@ msgstr ""
"\n"
"本操作将移除所有可执行文件,但不会处理 %s 的数据文件。"
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "已取消:未对%s进行任何操作。"
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "发生错误:错误代码为 %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "用户名"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"你想要从计算机上卸载 VirtualBox 吗?\n"
+"(VirtualBox 是随 BOINC 一起安装的。)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -117,7 +125,7 @@ msgstr ""
"对于每位用户,文件\n"
"\"%s\"."
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -127,11 +135,11 @@ msgstr ""
"输入你的管理员密码来从你的电脑中移除%s。\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "取消"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "继续..."
diff --git a/locale/zh_CN/BOINC-Web.mo b/locale/zh_CN/BOINC-Web.mo
index 7b8a167..4b8ad32 100644
Binary files a/locale/zh_CN/BOINC-Web.mo and b/locale/zh_CN/BOINC-Web.mo differ
diff --git a/locale/zh_CN/BOINC-Web.po b/locale/zh_CN/BOINC-Web.po
index 478931e..21c5ce2 100644
--- a/locale/zh_CN/BOINC-Web.po
+++ b/locale/zh_CN/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 15349\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-09-21 07:57+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-23 06:01+0000\n"
"Last-Translator: Gang <zenith.yin at gmail.com>\n"
"Language-Team: Team China <zenith.yin at gmail.com>\n"
"Language: zh_CN\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: doc\n"
"X-Poedit-Basepath: D:\\Work\\boinc_src\\doc\n"
-"X-POOTLE-MTIME: 1379750268.0\n"
+"X-POOTLE-MTIME: 1393135305.0\n"
"X-Poedit-KeywordsList: tra\n"
#: docutil.php:21
@@ -40,30 +40,30 @@ msgstr "当前页面%s提供翻译接口%s。"
msgid ""
"We recommend that you also install VirtualBox, so your computer can work on "
"science projects that require it."
-msgstr ""
+msgstr "我们建议你同时安装 VirtualBox,这样你的计算机就可以运行那些要求该软件的科学项目了。"
#: download.php:41
msgid "Learn more about VirtualBox."
-msgstr ""
+msgstr "更多了解 VirtualBox。"
#: download.php:51
msgid "Download BOINC + VirtualBox"
-msgstr ""
+msgstr "下载 BOINC + VirtualBox"
#: download.php:54 download.php:69
#, php-format
msgid "for %s"
-msgstr ""
+msgstr "用于 %s"
#: download.php:57 download.php:72
#, php-format
msgid "BOINC version %s"
-msgstr ""
+msgstr "BOINC 版本 %s"
#: download.php:59
#, php-format
msgid "VirtualBox version %s"
-msgstr ""
+msgstr "VirtualBox 版本 %s"
# ######################################<br />
# <br />
@@ -80,12 +80,14 @@ msgid ""
"projects like SETI at home, Climateprediction.net, Rosetta at home, World "
"Community Grid, and many others."
msgstr ""
+"通过 BOINC 你可以将闲置的计算机时间贡献给 SETI at home, Climateprediction.net, Rosetta at home, "
+"World Community Grid 等科学研究项目。"
#: download.php:125
msgid ""
"After installing BOINC on your computer, you can connect it to as many of "
"these projects as you like."
-msgstr ""
+msgstr "在计算机上安装好 BOINC 之后,你可以加入各式各样你喜欢的项目。"
#: download.php:127
msgid ""
@@ -97,7 +99,7 @@ msgstr "你应该在自己拥有的计算机或得到使用许可的计算机上
msgid ""
"We recommend that you download BOINC from the Google Play Store or Amazon "
"Appstore, not from here."
-msgstr ""
+msgstr "我们推荐你从谷歌或亚马逊的应用市场下载 BOINC,而不是这里。"
#: download.php:167
msgid "System requirements"
@@ -256,18 +258,20 @@ msgid ""
"diseases, study global warming, discover pulsars, and do many other types of "
"scientific research. It's safe, secure, and easy:"
msgstr ""
+"利用你计算机的闲置时间,不管是 Windows, Mac, Linux 还是 "
+"Android,来帮助如疾病治疗、全球变暖、发现脉冲星等多种类型的科学研究。很安全,也很容易:"
#: index.php:96
msgid "Choose projects"
-msgstr ""
+msgstr "选择项目"
#: index.php:97
msgid "Download BOINC software"
-msgstr ""
+msgstr "下载 BOINC 软件"
#: index.php:98
msgid "Enter an email address and password."
-msgstr ""
+msgstr "输入电子邮箱地址及口令。"
#: index.php:102
#, php-format
@@ -422,16 +426,16 @@ msgstr "想参加这些项目,你必须购买一个传感器并接入到你的
msgid "Cognitive science and artifical intelligence"
msgstr "认知科学与人工智能"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "个人项目"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "人工智能"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -440,19 +444,19 @@ msgid ""
msgstr ""
"解析和转换用于 FreeHAL 的语义网,而 FreeHAL 是一个利用语义网络、词干提取、部分语音库、部分语音标签来模仿人类的交谈行为的人工智能。"
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "生物学和医药学"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "都柏林大学"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "寻找抗疟疾药物"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -463,15 +467,15 @@ msgstr ""
"导致疟疾的寄生虫继续对可用药物产生抗药性。因此,我们迫切需要发现新的药物,以取代现有的药物。重要的是,这些新的药物需要针对新的寄生虫中的蛋白质。 "
"FightMalaria@ Home项目的目的是在寻找这些新的靶点。"
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "德国卡尔斯鲁厄(Karlsruhe)大学"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "蛋白质结构预测"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -482,15 +486,15 @@ msgstr ""
"POEM at HOME "
"通过计算的途径来预测蛋白质的生物结构、理解蛋白质之间交互的信号传递机制、理解疾病相关的蛋白质变异,并在生物学重要的蛋白质的三维结构的基础上开发新的药物。"
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "美国特拉华大学"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "研究蛋白质和配体间的相互作用"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -499,15 +503,15 @@ msgid ""
msgstr ""
"Docking at Home 的研究目标既包括生物科学上的,也包括计算机科学上的。该项目试图了解蛋白质配体交互过程中的原子尺度的细节,并以此来寻找新的药物。"
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "巴塞罗那生物医学研究园区(PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "蛋白质分子模拟"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -515,31 +519,31 @@ msgid ""
"computational biology for biomedical research."
msgstr "GPUGrid.net 利用 NVIDIA 的显卡(GPU)来进行全原子的分子动力学模拟。计算生物学的应用给生物医药学带来了新的研究方向。"
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "以色列理工大学"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "遗传连锁分析"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr "Superlink at Technion 帮助全世界的遗传学家来寻找导致会导致某些类型疾病的基因,比如糖尿病、高血压、癌症、精神分裂等等。"
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "美国马里兰大学生物信息学和计算生物学中心"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "生命科学研究"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -549,15 +553,15 @@ msgstr ""
"The Lattice Project 为马里兰大学的科学家们提供计算资源,用于研究基于 DNA "
"序列数据的进化关系,细菌、病毒蛋白质序列,还有自然界的生物多样性。"
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "瑞士热带研究所"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "流行病学"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -570,15 +574,15 @@ msgstr ""
"模拟疟疾的传播动力学模型,用于对疟疾的控制,包括如何才能对蚊帐、药物和正在研发测试过程中的疫苗等进行最优化的分发。相关的建模过程非常耗费计算资源,除了需"
"要模拟相当大的人群分布,还要考虑生物学和社会学方面对疾病传播可能有影响的相关因素。"
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "美国华盛顿大学"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "生物学"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -590,30 +594,30 @@ msgstr ""
"对蛋白质的三维结构进行预测,可能最终能帮助找到一些重大人类疾病的治疗方法。通过运行 Rosetta at home 你能够帮助我们加速这个进程,并能扩展我们的"
"研究领域,而没有你们的帮助,这都是不可能完成的。除些之外,你还能帮助我们设计新的蛋白质,用来对抗类似爱滋、天花、癌症和老年痴呆症等疾病。"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "维也纳大学"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr "计算蛋白质结构间的相似性。SIMAP 以公共数据库的形式发布其研究结果,该数据库对很多生物信息学研究项目有重要作用。"
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "地球科学"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "英国牛津大学"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "气候研究"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -627,16 +631,25 @@ msgstr ""
"研究最新的气候模型中的近似处理。通过将模型运行数千次,我们希望能研究模型对近似处理的反应,同时还要保证模型不能脱离于实际。这能够帮助我们加深对模型的理解"
",包括对二氧化碳、硫循环等的敏感程度。更进一步,这能够帮助我们了解下一个世纪的气候变化趋势,包括各种不同的场景。"
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "天文、物理和化学"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "物理科学"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "机械工程"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr "当前我们正在对一个名为 52 bar truss 的结构进行优化设计"
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "天文学"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -645,16 +658,19 @@ msgid ""
"star formation history) on a resolved pixel-by-pixel basis using spectral "
"energy distribution (SED) fitting techniques in a distributed computing mode."
msgstr ""
+"我们将结合 GALEX,Pan-STARRS 1 和 WISE 的光谱覆盖范围来生成附近宇宙的从紫外到近红外的多波长的图集。以分布式计算模式为基础,使用"
+"光谱能量分布(SED)的拟合技术逐个解析像素,我们将可以测量各种物理参数,比如恒星质量表面密度,恒星形成率表面密度,恒星的衰减和一阶恒星形成历史。 "
+" "
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "美国得克萨斯大学奥斯汀分校"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "化学"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -671,33 +687,33 @@ msgstr ""
"这些系统的长时动力学过程进行计算。"
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "伊利诺伊大学厄本那-香槟分校"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr "Cosmology at Home 的目标是搜索可以描述我们宇宙的最适合的模型,并研究能够与天文观测数据相符的模型范围。"
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "伦斯勒理工学院"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr "Milkeyway at Home 使用 Sloan 数字巡天的数据来对银河系进行高精度的三维建模。"
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "荷兰莱顿大学"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -709,15 +725,15 @@ msgstr ""
"使用经典力学进行表面科学的计算。Leiden Classical 允许志愿者、学者和其它科研人员提供他们自己的计算任务,每个用户都有他自己的经典力学任务"
"队列。通过这种方式,学生们可以利用网格来对他们学习到的相关理论进行验证。"
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "美国威斯康星大学密尔沃基分校,德国马克斯普朗克研究所"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "天体物理学"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -728,15 +744,15 @@ msgstr ""
"分析 LIGO 和 GEO 引力波探测器以及阿雷西波观测站采集到的数据,以寻找自旋中子星(也称为脉冲星)。Einstein at Home 是 2005 "
"世界物理学年的推介项目,由美国物理学会(APS)和一些相关的国际组织发起。"
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN(欧洲核研究组织)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "物理学"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -748,22 +764,22 @@ msgstr ""
"CERN(欧洲核研究组织)的一个粒子加速器装置,也是世界上最大的粒子物理实验室。它是人类现有的用于研究基本粒子特性的最强大的实验装置。LHC at home "
"的作用主要是对加速器进行模拟,并帮助改进 LHC 及其探测器的设计。"
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr "该项目在志愿者的计算机上使用 CERN 开发的虚拟机技术来对 LHC 中发生的物理事件进行模拟。要求在你的计算机上安装 VirtualBox。"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "美国加州大学伯克利分校"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "天体物理学,天体生物学"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -774,15 +790,15 @@ msgstr ""
"SETI (搜索地外智能)的研究领域是探测地球之外的智慧生命。探测的途径之一,也被称之为射电 "
"SETI,使用射电望远镜来监听太空中的窄波射电信号。因为依照人类目前的认识,这些信号不会自然产生,因此可以作为将其地外技术文明存在的证据。"
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "比勒费尔德(Bielefeld)应用技术大学"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "化学工程和纳米技术"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -790,30 +806,30 @@ msgid ""
"biotechnology."
msgstr "研究分子磁体和纳米尺度的磁力学。这些分子磁体可用于研发微型磁性开关,适用于医药(比如肿瘤化疗)和生物技术领域。"
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "多种计算程序"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "中国科学院"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "物理学、生物化学、其它"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr "CAS at home 的目标是鼓励和帮忙中国的科研人员采用志愿计算这种计算技术以及相应的科研思维方式"
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "数学、物理学、进化论"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -821,15 +837,15 @@ msgstr ""
"Yoyo at home 将一些传统的志愿计算项目,包括 ECM、Muon、Evolution at home 和 distributed.net 等,移植到了 "
"BOINC 平台。"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "匈牙利 MTA-SZTAKI 并行和分布式系统实验室"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "欧盟研究项目"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -839,78 +855,80 @@ msgstr ""
"EDGes at Home Beta "
"项目将志愿计算融入到欧洲计算服务网格的网络,允许服务网格将计算任务分发给项目的志愿者们来处理。项目所涉及的科研领域包括数学、物理、生物等等。"
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "西班牙的大学和研究中心"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "各种西班牙的研究项目"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "物理学、材料科学和生物医药学方面的研究"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
-msgstr ""
+msgstr "IBM 企业公民"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "医疗,环境和其他人道主义研究"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
"includes HIV-AIDS, cancer, tropical and neglected diseases, solar energy, "
"clean water and many more."
msgstr ""
+"通过建立世界上最大的志愿计算网络来推进一些关于人类最紧迫问题的关键的、非赢利性的科学研究。包括艾滋,癌症,登革热以及一些被忽视的疾病,太阳能,清洁水等等"
+"。"
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "数学、计算机、游戏"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "计算机科学"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "数学、物理、人工智能"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "量子计算模拟、哥德巴赫猜想"
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "密码学"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr "该项目试图解密三条二战期间的加密电报消息,这些消息于 1942 年在北大西洋截获而且一直被认为是不可破解的。"
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "数学"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "研究考拉兹猜想(Collatz conjecture),一个尚未被证明的数学猜想。"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "加州州立大学富尔顿分校"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "大数的因式分解"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -923,17 +941,17 @@ msgstr ""
"是一个利用通过互联网连接的计算机来进行大整数数域筛选分解中的格筛步骤的研究项目。当你还是一个年轻的学生时,你应该就有了分解质因数的经历,比如 "
"15=3*5 或者 35=5*7。NFS at Home 正是这一经历的延续,不过却是分解有数百位数字长的大整数。"
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr "Vilnius Gediminas 理工大学 和 Kaunas 理工大学(立陶宛)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "软件测试"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -943,11 +961,11 @@ msgstr ""
"本项目的目的是为 Vilnius Gediminas "
"理工大学(VGTU)和其它立陶宛的科研机构提供一个强大的分布式计算平台。当前的应用主要涉及到基于蒙特卡罗的软件测试研究。"
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "莱顿(Leiden)大学数字学院(Kennislink)"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -962,30 +980,29 @@ msgstr ""
"C(e),对于所有满足a+b=c,a 与 b 互质的三元整数组 (a,b,c),均成立 c<=C(e)((rad(abc))^(1+e))。ABC "
"猜想是当前数论中最重要的未解决问题之一,如果它能够被证明,其它不少未解决问题也能得到直接的证明。"
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
-msgstr ""
+msgstr "Primegrid 旗下有多个研究各种类型大质数的项目,其中也包括寻找已知最大质数。"
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "莱茵曼应用技术大学"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr "寻找两个有关质数识别的猜想的反例。"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
msgstr "寻找所有的广义二进制数系(基是矩阵,而位是向量),目前项目正在搜索 12 维的广义二进制数系。"
#: ../html/inc/news.inc:40
-#, fuzzy
msgid "Comment"
msgstr "备注"
@@ -994,6 +1011,10 @@ msgstr "备注"
msgid "News is available as an %sRSS feed%s"
msgstr "新闻还可以通过 %sRSS%s 来访问"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "天文、物理和化学"
+
#, php-format
#~ msgid "%s for %s (%s MB)"
#~ msgstr "%s 用于 %s (%s兆字节)"
diff --git a/locale/zh_TW/BOINC-Android.po b/locale/zh_TW/BOINC-Android.po
index ff8b47f..2627dda 100644
--- a/locale/zh_TW/BOINC-Android.po
+++ b/locale/zh_TW/BOINC-Android.po
@@ -7,16 +7,17 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
"POT-Creation-Date: 2013-10-18 00:00-0700\n"
-"PO-Revision-Date: 2013-11-08 23:56+0000\n"
+"PO-Revision-Date: 2014-03-04 06:54+0000\n"
"Last-Translator: 宇謙 <df910105 at yahoo.com.tw>\n"
"Language-Team: zh_TW <LL at li.org>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-"X-Generator: Translate Toolkit 1.10.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Pootle 2.5.0\n"
"Generated-By: Babel 1.0dev\n"
+"X-POOTLE-MTIME: 1393916061.0\n"
#. app global
msgctxt "app_name"
@@ -131,7 +132,7 @@ msgstr "第一次加入"
msgctxt "attachproject_login_header_creation_enabled"
msgid "Register an account to participate:"
-msgstr "註冊一個帳號來參加:"
+msgstr "註冊一個帳號來加入:"
msgctxt "attachproject_login_header_creation_client_disabled"
msgid "Visit project website to create an account:"
@@ -188,7 +189,7 @@ msgstr "密碼:"
msgctxt "attachproject_registration_header_pwd_confirm"
msgid "… Retype:"
-msgstr "… 再次輸入:"
+msgstr "…再次輸入:"
msgctxt "attachproject_registration_button"
msgid "Create"
@@ -201,11 +202,11 @@ msgstr "新增帳號管理服務"
msgctxt "attachproject_acctmgr_header_url"
msgid "URL"
-msgstr "網址"
+msgstr "URL"
msgctxt "attachproject_acctmgr_header_name"
msgid "User:"
-msgstr "使用者:"
+msgstr "用戶:"
msgctxt "attachproject_acctmgr_header_pwd"
msgid "Password:"
@@ -282,7 +283,7 @@ msgstr "此專案已停用註冊功能"
msgctxt "attachproject_error_invalid_url"
msgid "Invalid URL"
-msgstr "網址不正確"
+msgstr "網址錯誤"
#. working activity
msgctxt "attachproject_working_back_button"
@@ -303,7 +304,7 @@ msgstr "失敗"
msgctxt "attachproject_working_ongoing"
msgid "…"
-msgstr "…"
+msgstr "..."
msgctxt "attachproject_working_finished"
msgid "."
@@ -340,7 +341,7 @@ msgstr "同步"
#. main activity
msgctxt "main_noproject_warning"
msgid "Tab here to choose a project."
-msgstr ""
+msgstr "點此選擇專案。"
msgctxt "main_error"
msgid "Whooops"
@@ -351,8 +352,8 @@ msgid ""
"…this should not happen!\n"
"Click on the icon to try again."
msgstr ""
-"…這應該不會發生!\n"
-"點擊圖示再試一次。"
+"…這不應該發生!\n"
+"點擊圖標重試。"
msgctxt "main_title_icon_desc"
msgid "BOINC icon"
@@ -394,7 +395,7 @@ msgstr "運算中"
msgctxt "status_running_long"
msgid "Thank you for participating."
-msgstr "感謝您的參加。"
+msgstr "感謝您的參與。"
msgctxt "status_paused"
msgid "Suspended"
@@ -414,7 +415,7 @@ msgstr "已暫停"
msgctxt "status_computing_disabled_long"
msgid "Press play to resume network and computation."
-msgstr "按下開始恢復網路和運算。"
+msgstr "按下開始恢復運算和網路。"
msgctxt "status_launching"
msgid "Starting…"
@@ -471,7 +472,7 @@ msgstr "CPU"
msgctxt "prefs_category_storage"
msgid "Storage"
-msgstr "容量"
+msgstr "儲存空間"
msgctxt "prefs_category_memory"
msgid "Memory"
@@ -483,7 +484,7 @@ msgstr "偵錯"
msgctxt "prefs_show_advanced_header"
msgid "Show advanced preferences and controls…"
-msgstr "顯示進階的偏好設定..."
+msgstr "顯示進階的偏好設定…"
msgctxt "prefs_run_on_battery_header"
msgid "Compute on Battery"
@@ -495,7 +496,7 @@ msgstr "最低電量"
msgctxt "battery_charge_min_pct_description"
msgid "BOINC suspends computation below defined battery charge level."
-msgstr "BOINC 在低於設定的電量時即暫停運算。"
+msgstr "BOINC會在電量低於設定值時暫停運算。"
msgctxt "battery_temperature_max_header"
msgid "Max. battery temperature"
@@ -505,7 +506,7 @@ msgctxt "battery_temperature_max_description"
msgid ""
"BOINC suspends computation above defined battery temperature. It is not "
"recommended to change this value."
-msgstr "BOINC 當電池溫度高於預設值時暫停運算。不建議變更此設定值。"
+msgstr "BOINC會在電池溫度高於設定值時暫停運算。不建議變更此設定值。"
msgctxt "prefs_disk_max_pct_header"
msgid "Max. used storage space"
@@ -513,11 +514,11 @@ msgstr "最多使用容量"
msgctxt "prefs_disk_max_pct_description"
msgid "How many percent of your device's storage space is BOINC allowed to use?"
-msgstr "BOINC 能使用多少比例的儲存空間?"
+msgstr "BOINC能使用多少比例的儲存空間?"
msgctxt "prefs_disk_min_free_gb_header"
msgid "Min. spare storage"
-msgstr "最小備用容量"
+msgstr "最少備用容量"
msgctxt "prefs_disk_min_free_gb_description"
msgid "How much of your device's storage space shall stay free?"
@@ -529,11 +530,11 @@ msgstr "每日傳輸限制"
msgctxt "prefs_network_daily_xfer_limit_mb_description"
msgid "Limits the daily data traffic caused by BOINC."
-msgstr "限制 BOINC 的每日數據流量。"
+msgstr "限制BOINC每日的數據流量。"
msgctxt "prefs_network_wifi_only_header"
msgid "Transfer tasks on WiFi only"
-msgstr "只用 WiFi 傳輸"
+msgstr "僅用WiFi傳輸"
msgctxt "prefs_autostart_header"
msgid "Autostart"
@@ -541,23 +542,23 @@ msgstr "自動執行"
msgctxt "prefs_show_notification_header"
msgid "Show notification when suspended"
-msgstr "暫停時顯示訊息"
+msgstr "暫停時顯示通知"
msgctxt "prefs_cpu_number_cpus_header"
msgid "Used CPU cores"
-msgstr "使用 CPU 核心"
+msgstr "使用CPU核心"
msgctxt "prefs_cpu_number_cpus_description"
msgid "Limits the number of CPU cores BOINC uses for computation."
-msgstr "限制 BOINC 運算時使用的核心數。"
+msgstr "限制BOINC運算時使用的核心數。"
msgctxt "prefs_cpu_other_load_suspension_header"
msgid "Pause at CPU usage above"
-msgstr "暫停,當CPU使用率高於"
+msgstr "當CPU使用率高時暫停運算"
msgctxt "prefs_cpu_other_load_suspension_description"
msgid "Determines when BOINC pauses computation due to other app's CPU usage."
-msgstr "由其他應用程式使用CPU的情況來決定是否暫停BOINC。"
+msgstr "由其他應用程式使用CPU的情況決定是否暫停運算。"
msgctxt "prefs_cpu_time_max_header"
msgid "CPU limit"
@@ -565,7 +566,7 @@ msgstr "限制CPU"
msgctxt "prefs_cpu_time_max_description"
msgid "Limits the CPU time BOINC uses for computation."
-msgstr "限制 BOINC 運算時使用的核心數。"
+msgstr "限制BOINC的處理器時間。"
msgctxt "prefs_memory_max_idle_header"
msgid "RAM limit"
@@ -573,19 +574,19 @@ msgstr "限制RAM"
msgctxt "prefs_memory_max_idle_description"
msgid "Limits the amount of RAM tasks are allowed to occupy."
-msgstr "限制任務佔用 RAM 容量。"
+msgstr "限制任務占用RAM。"
msgctxt "prefs_client_log_flags_header"
msgid "BOINC Client log flags"
-msgstr "BOINC 客戶端紀錄檔"
+msgstr "BOINC 用戶端日誌標記"
msgctxt "prefs_gui_log_level_header"
msgid "GUI log level"
-msgstr "GUI 日誌等級"
+msgstr "GUI日誌等級"
msgctxt "prefs_gui_log_level_description"
msgid "Specifies verbosity of GUI log messages."
-msgstr "指定 GUI 紀錄的詳細程度。"
+msgstr "指定GUI紀錄的詳細程度。"
msgctxt "prefs_unit_mb"
msgid "MB"
@@ -607,7 +608,7 @@ msgstr "°C"
#. projects tab strings
msgctxt "projects_loading"
msgid "Reading projects…"
-msgstr "正在讀取專案…"
+msgstr "專案讀取中…"
msgctxt "projects_add"
msgid "Add project"
@@ -623,16 +624,16 @@ msgstr "積分:"
msgctxt "projects_credits_host_header"
msgid "(on this device)"
-msgstr "(在這個裝置上)"
+msgstr "(在這裝置上)"
msgctxt "projects_credits_user_header"
msgid "(total)"
-msgstr "(總共)"
+msgstr "(總計)"
#. project status strings
msgctxt "projects_status_suspendedviagui"
msgid "Suspended by user"
-msgstr "用戶已暫停"
+msgstr "使用者已暫停"
msgctxt "projects_status_dontrequestmorework"
msgid "Won't get new tasks"
@@ -640,11 +641,11 @@ msgstr "拒絕新任務"
msgctxt "projects_status_ended"
msgid "Project ended - OK to remove"
-msgstr "專案已停止 - 按 OK 來移除"
+msgstr "專案已停止 - 按OK移除"
msgctxt "projects_status_detachwhendone"
msgid "Will remove when tasks done"
-msgstr "當任務完成將會移除"
+msgstr "任務完成後將會移除"
msgctxt "projects_status_schedrpcpending"
msgid "Scheduler request pending"
@@ -656,7 +657,7 @@ msgstr "排程器請求處理中"
msgctxt "projects_status_trickleuppending"
msgid "Trickle up message pending"
-msgstr "Trickle up 訊息處理中"
+msgstr "涓流訊息處理中"
msgctxt "projects_status_backoff"
msgid "Communication scheduled in:"
@@ -665,15 +666,15 @@ msgstr "排定通訊:"
#. project controls
msgctxt "projects_control_dialog_title"
msgid "Project commands:"
-msgstr "專案指令:"
+msgstr "專案指令"
msgctxt "projects_control_visit_website"
msgid "Visit website"
-msgstr "訪問網站"
+msgstr "造訪網站"
msgctxt "projects_control_update"
msgid "Update"
-msgstr "更新"
+msgstr "移除"
msgctxt "projects_control_remove"
msgid "Remove"
@@ -701,7 +702,7 @@ msgstr "重置"
msgctxt "projects_control_dialog_title_acctmgr"
msgid "Account manager commands:"
-msgstr "帳號管理服務指令:"
+msgstr "帳戶管理服務指令:"
msgctxt "projects_control_sync_acctmgr"
msgid "Synchronize"
@@ -742,11 +743,11 @@ msgstr "重置"
msgctxt "projects_confirm_remove_acctmgr_title"
msgid "Disable account manager"
-msgstr "來自帳號管理員的請求"
+msgstr "停用帳號管理員"
msgctxt "projects_confirm_remove_acctmgr_message"
msgid "Are you sure you want to stop using"
-msgstr "您確定要重置"
+msgstr "停用"
msgctxt "projects_confirm_remove_acctmgr_confirm"
msgid "Disable"
@@ -763,7 +764,7 @@ msgstr "執行時間:"
msgctxt "tasks_header_project_paused"
msgid "(suspended)"
-msgstr "(暫停)"
+msgstr "(已暫停)"
msgctxt "tasks_header_deadline"
msgid "Deadline:"
@@ -795,7 +796,7 @@ msgstr "上傳完成"
msgctxt "tasks_result_aborted"
msgid "aborted"
-msgstr "已中止"
+msgstr "已放棄"
msgctxt "tasks_result_upload_failed"
msgid "upload failed"
@@ -807,7 +808,7 @@ msgstr "準備"
msgctxt "tasks_active_executing"
msgid "running"
-msgstr "運算中"
+msgstr "執行中"
msgctxt "tasks_active_suspended"
msgid "suspended"
@@ -844,7 +845,7 @@ msgstr "放棄任務:"
msgctxt "confirm_abort_task_confirm"
msgid "Abort"
-msgstr "停止"
+msgstr "放棄"
msgctxt "confirm_cancel"
msgid "Cancel"
@@ -857,7 +858,7 @@ msgstr "確認對話框"
#. transfers tab strings
msgctxt "trans_loading"
msgid "Reading transfers…"
-msgstr "讀取傳輸中..."
+msgstr "讀取傳輸中…"
msgctxt "trans_upload"
msgid "Upload"
@@ -877,11 +878,11 @@ msgstr "失敗"
msgctxt "trans_suspended"
msgid "suspended"
-msgstr "暫停"
+msgstr "已暫停"
msgctxt "trans_active"
msgid "active"
-msgstr "活躍的"
+msgstr "活躍"
msgctxt "trans_pending"
msgid "pending"
@@ -889,7 +890,7 @@ msgstr "等待中"
msgctxt "trans_projectbackoff"
msgid "project backoff"
-msgstr "重新連接至專案"
+msgstr "專案延後"
msgctxt "trans_header_name"
msgid "File:"
@@ -901,15 +902,15 @@ msgstr "重試傳輸"
msgctxt "confirm_abort_trans_title"
msgid "Abort transfer?"
-msgstr "停止傳輸?"
+msgstr "中止傳輸?"
msgctxt "confirm_abort_trans_message"
msgid "Abort File:"
-msgstr "停止檔案:"
+msgstr "中止檔案:"
msgctxt "confirm_abort_trans_confirm"
msgid "Abort"
-msgstr "停止"
+msgstr "中止"
#. notices tab strings
msgctxt "notices_loading"
@@ -919,7 +920,7 @@ msgstr "正在讀取專案…"
#. eventlog tab strings
msgctxt "eventlog_loading"
msgid "Loading log messages…"
-msgstr "載入紀錄訊息中..."
+msgstr "載入紀錄訊息中…"
msgctxt "eventlog_client_header"
msgid "Client Messages"
@@ -927,11 +928,11 @@ msgstr "用戶端訊息"
msgctxt "eventlog_gui_header"
msgid "GUI Messages"
-msgstr "GUI 訊息"
+msgstr "GUI訊息"
msgctxt "eventlog_copy_toast"
msgid "Log copied to clipboard."
-msgstr "紀錄已複製到剪貼簿。"
+msgstr "複製紀錄到剪貼簿。"
msgctxt "eventlog_email_subject"
msgid "Event Log for BOINC on Android:"
@@ -940,67 +941,67 @@ msgstr "Android的BOINC事件紀錄:"
#. suspend reasons
msgctxt "suspend_unknown"
msgid "Computation suspended."
-msgstr "已暫停運算。"
+msgstr "運算已暫停。"
msgctxt "suspend_batteries"
msgid "Connect your device to a charger to continue computing."
-msgstr "將裝置連接到充電器來繼續運算。"
+msgstr "將裝置連接到充電器才能繼續運算。"
msgctxt "suspend_useractive"
msgid "User is active."
-msgstr "使用者處於活躍狀態。"
+msgstr "活躍用戶。"
msgctxt "suspend_tod"
msgid "Out of computation time-frame."
-msgstr "超出運算期限。"
+msgstr "超出運算時間"
msgctxt "suspend_bm"
msgid "BOINC is benchmarking your device…"
-msgstr "BOINC 正在測試您的裝置效能..."
+msgstr "BOINC正在測試您的裝置效能..."
msgctxt "suspend_disksize"
msgid "Out of disk space."
-msgstr "硬碟空間不足。"
+msgstr "儲存空間不足。"
msgctxt "suspend_cputhrottle"
msgid "Scheduled CPU throttle."
-msgstr "安排 CPU 的使用。"
+msgstr "排定CPU調節。"
msgctxt "suspend_noinput"
msgid "No recent user activity."
-msgstr "最近沒有使用者活動。"
+msgstr "最近無用戶操作。"
msgctxt "suspend_delay"
msgid "Initialization delay."
-msgstr "初始化延遲。"
+msgstr "延遲初始化。"
msgctxt "suspend_exclusiveapp"
msgid "An exclusive app is running."
-msgstr "有一個獨占應用程式執行中。"
+msgstr "一個衝突應用程式執行中。"
msgctxt "suspend_cpu"
msgid "Your device is busy with other apps."
-msgstr "您的裝置忙於其他應用程式。"
+msgstr "您的裝置正忙於其他應用程式。"
msgctxt "suspend_network_quota"
msgid "BOINC reached network transfer limit."
-msgstr "BOINC 已達到網路傳輸限制量。"
+msgstr "BOINC已達網路傳輸限制。"
msgctxt "suspend_os"
msgid "Stopped by Android."
-msgstr "被 Android 停止。"
+msgstr "被Android系統停止。"
msgctxt "suspend_wifi"
msgid "Not connected to WiFi."
-msgstr "沒有連線到 WiFi。"
+msgstr "未連線到WiFi"
msgctxt "suspend_battery_charging"
msgid "Battery needs to charge before resuming computation."
-msgstr "繼續運算前電池需要充電。"
+msgstr "電池需要充電才能繼續運算。"
msgctxt "suspend_battery_charging_long"
msgid "Computing will resume when battery charge reaches"
-msgstr "充電時將會繼續運算"
+msgstr "繼續運算要求電量達到"
msgctxt "suspend_battery_charging_current"
msgid "currently"
@@ -1008,36 +1009,36 @@ msgstr "目前"
msgctxt "suspend_battery_overheating"
msgid "Waiting for battery to cool down"
-msgstr "等待電池冷卻中"
+msgstr "等待電池降溫中"
msgctxt "suspend_user_req"
msgid "Resuming computation…"
-msgstr "繼續運算..."
+msgstr "繼續運算…"
msgctxt "suspend_network_user_req"
msgid "manually."
-msgstr "手動操作。"
+msgstr "手動。"
#. rpc reasons
msgctxt "rpcreason_userreq"
msgid "Requested by user"
-msgstr "來自用戶的請求"
+msgstr "用戶請求"
msgctxt "rpcreason_needwork"
msgid "To fetch work"
-msgstr "取得任務"
+msgstr "獲取任務"
msgctxt "rpcreason_resultsdue"
msgid "To report completed tasks"
-msgstr "回報完成的任務"
+msgstr "回報已完成的任務"
msgctxt "rpcreason_trickleup"
msgid "To send trickle-up message"
-msgstr "傳送 trickle-up 訊息"
+msgstr "傳送涓流訊息"
msgctxt "rpcreason_acctmgrreq"
msgid "Requested by account manager"
-msgstr "來自帳號管理員的請求"
+msgstr "帳號管理服務請求"
msgctxt "rpcreason_init"
msgid "Project initialization"
@@ -1045,11 +1046,11 @@ msgstr "專案初始化"
msgctxt "rpcreason_projectreq"
msgid "Requested by project"
-msgstr "來自專案的請求"
+msgstr "專案請求"
msgctxt "rpcreason_unknown"
msgid "Unknown reason"
-msgstr "未知的原因"
+msgstr "未知原因"
#. menu
msgctxt "menu_refresh"
@@ -1058,7 +1059,7 @@ msgstr "重新整理"
msgctxt "menu_emailto"
msgid "Send as Email"
-msgstr "用電子郵件傳送"
+msgstr "使用電子郵件傳送"
msgctxt "menu_copy"
msgid "Copy to Clipboard"
@@ -1107,14 +1108,14 @@ msgstr "版本"
msgctxt "about_name_long"
msgid "Berkeley Open Infrastructure for Network Computing"
-msgstr "柏克萊開放式網絡運算平台"
+msgstr "柏克萊開放式網路運算平台"
msgctxt "about_copyright"
msgid ""
"© 2003–2013 University of California, Berkeley.\n"
"All Rights Reserved."
msgstr ""
-"© 2003–2013 美國加州大學柏克萊分校\n"
+"© 2003-2013 美國加州大學 柏克萊分校。\n"
"保留所有權利。"
#, fuzzy
diff --git a/locale/zh_TW/BOINC-Manager.mo b/locale/zh_TW/BOINC-Manager.mo
index d2b71ec..3f87102 100644
Binary files a/locale/zh_TW/BOINC-Manager.mo and b/locale/zh_TW/BOINC-Manager.mo differ
diff --git a/locale/zh_TW/BOINC-Manager.po b/locale/zh_TW/BOINC-Manager.po
index b3ef462..9f16935 100644
--- a/locale/zh_TW/BOINC-Manager.po
+++ b/locale/zh_TW/BOINC-Manager.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: BOINC Manager 4.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-22 00:00-0800\n"
-"PO-Revision-Date: 2013-11-21 22:52+0000\n"
+"POT-Creation-Date: 2014-02-02 00:00-0800\n"
+"PO-Revision-Date: 2014-03-04 06:54+0000\n"
"Last-Translator: 宇謙 <df910105 at yahoo.com.tw>\n"
"Language-Team: BOINC Development Team <boinc_loc at ssl.berkeley.edu>\n"
"Language: zh_TW\n"
@@ -23,7 +23,7 @@ msgstr ""
"X-Poedit-SearchPath-0: clientgui\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-Basepath: C:\\Src\\BOINCGIT\\boinc\n"
-"X-POOTLE-MTIME: 1385074362.0\n"
+"X-POOTLE-MTIME: 1393916083.0\n"
# 81%
#: AccountInfoPage.cpp:387
@@ -178,7 +178,7 @@ msgstr "開啟網頁"
#: AccountManagerInfoPage.cpp:290
msgid "Visit this account manager's web site"
-msgstr "訪問帳號管理服務網站"
+msgstr "造訪帳號管理服務網站"
#: AccountManagerProcessingPage.cpp:187 AccountManagerPropertiesPage.cpp:193
#, c-format
@@ -205,337 +205,337 @@ msgstr "已連線"
msgid "Disconnected"
msgstr "已斷線"
-#: AdvancedFrame.cpp:318 sg_BoincSimpleFrame.cpp:115
+#: AdvancedFrame.cpp:322 sg_BoincSimpleFrame.cpp:119
#, c-format
msgid "Close the %s window"
msgstr "關閉 %s 視窗"
-#: AdvancedFrame.cpp:321 sg_BoincSimpleFrame.cpp:118
+#: AdvancedFrame.cpp:325 sg_BoincSimpleFrame.cpp:122
msgid "&Close Window"
msgstr "關閉視窗 (&C)"
-#: AdvancedFrame.cpp:332 AdvancedFrame.cpp:339 AdvancedFrame.cpp:346
+#: AdvancedFrame.cpp:336 AdvancedFrame.cpp:343 AdvancedFrame.cpp:350
#, c-format
msgid "Exit %s"
msgstr "離開 %s"
-#: AdvancedFrame.cpp:367
+#: AdvancedFrame.cpp:371
msgid "&Notices\tCtrl+Shift+N"
msgstr "訊息 (&N)\tCtrl+Shift+N"
-#: AdvancedFrame.cpp:368
+#: AdvancedFrame.cpp:372
msgid "Display notices"
msgstr "顯示訊息"
-#: AdvancedFrame.cpp:373
+#: AdvancedFrame.cpp:377
msgid "&Projects\tCtrl+Shift+P"
msgstr "專案 (&P)\tCtrl+Shift+P"
-#: AdvancedFrame.cpp:374
+#: AdvancedFrame.cpp:378
msgid "Display projects"
msgstr "顯示專案"
-#: AdvancedFrame.cpp:379
+#: AdvancedFrame.cpp:383
msgid "&Tasks\tCtrl+Shift+T"
msgstr "工作 (&T)\tCtrl+Shift+T"
-#: AdvancedFrame.cpp:380
+#: AdvancedFrame.cpp:384
msgid "Display tasks"
msgstr "顯示工作"
-#: AdvancedFrame.cpp:385
+#: AdvancedFrame.cpp:389
msgid "Trans&fers\tCtrl+Shift+X"
msgstr "傳送 (&F)\tCtrl+Shift+X"
-#: AdvancedFrame.cpp:386
+#: AdvancedFrame.cpp:390
msgid "Display transfers"
msgstr "顯示傳送"
-#: AdvancedFrame.cpp:391
+#: AdvancedFrame.cpp:395
msgid "&Statistics\tCtrl+Shift+S"
msgstr "統計 (&S)\tCtrl+Shift+S"
-#: AdvancedFrame.cpp:392
+#: AdvancedFrame.cpp:396
msgid "Display statistics"
msgstr "顯示統計"
-#: AdvancedFrame.cpp:397
+#: AdvancedFrame.cpp:401
msgid "&Disk usage\tCtrl+Shift+D"
msgstr "硬碟空間 (&D)\tCtrl+Shift+D"
-#: AdvancedFrame.cpp:398
+#: AdvancedFrame.cpp:402
msgid "Display disk usage"
msgstr "顯示硬碟使用空間"
-#: AdvancedFrame.cpp:405
+#: AdvancedFrame.cpp:409
msgid "Simple &View...\tCtrl+Shift+V"
msgstr "精簡模式 (&V)\tCtrl+Shift+V"
-#: AdvancedFrame.cpp:406
+#: AdvancedFrame.cpp:410
msgid "Display the simple graphical interface."
msgstr "顯示精簡 BOINC 圖形介面。"
-#: AdvancedFrame.cpp:420
+#: AdvancedFrame.cpp:424
msgid "&Add project or account manager..."
msgstr "加入帳號管理服務(&A)..."
-#: AdvancedFrame.cpp:421 sg_ProjectPanel.cpp:76
+#: AdvancedFrame.cpp:425 sg_ProjectPanel.cpp:76
msgid "Volunteer for any or all of 30+ projects in many areas of science"
msgstr "志願加入到任何或所有高達30+個分佈在許多不同科學領域內的專案"
-#: AdvancedFrame.cpp:425
+#: AdvancedFrame.cpp:429
#, c-format
msgid "&Synchronize with %s"
msgstr "與 %s 同步 (&S)"
-#: AdvancedFrame.cpp:429
+#: AdvancedFrame.cpp:433
#, c-format
msgid "Get current settings from %s"
msgstr "從 %s 取得現在的設定"
-#: AdvancedFrame.cpp:439
+#: AdvancedFrame.cpp:443
msgid "&Add project..."
msgstr "新增專案 (&A)"
-#: AdvancedFrame.cpp:440
+#: AdvancedFrame.cpp:444
msgid "Add a project"
msgstr "新增一個專案"
-#: AdvancedFrame.cpp:443
+#: AdvancedFrame.cpp:447
#, c-format
msgid "S&top using %s..."
msgstr "停止使用 %s(&S)..."
-#: AdvancedFrame.cpp:449
+#: AdvancedFrame.cpp:453
msgid "Remove this computer from account manager control."
msgstr "從帳號管理服務中移除用戶端。"
-#: AdvancedFrame.cpp:454 sg_BoincSimpleFrame.cpp:174
+#: AdvancedFrame.cpp:458 sg_BoincSimpleFrame.cpp:178
msgid "&Options..."
msgstr "選項 (&O)"
-#: AdvancedFrame.cpp:455 sg_BoincSimpleFrame.cpp:175
+#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:179
msgid "Configure display options and proxy settings"
msgstr "配置顯示選項和 Proxy 設定"
-#: AdvancedFrame.cpp:459 sg_BoincSimpleFrame.cpp:168
+#: AdvancedFrame.cpp:463 sg_BoincSimpleFrame.cpp:172
msgid "Computing &preferences..."
msgstr "運算偏好(&P)..."
-#: AdvancedFrame.cpp:460 sg_BoincSimpleFrame.cpp:169
+#: AdvancedFrame.cpp:464 sg_BoincSimpleFrame.cpp:173
msgid "Configure computing preferences"
msgstr "配置運算偏好"
-#: AdvancedFrame.cpp:468
+#: AdvancedFrame.cpp:472
msgid "&Run always"
msgstr "持續執行 (&R)"
-#: AdvancedFrame.cpp:469
+#: AdvancedFrame.cpp:473
msgid "Allow work regardless of preferences"
msgstr "不管偏好設定運行工作"
-#: AdvancedFrame.cpp:473
+#: AdvancedFrame.cpp:477
msgid "Run based on &preferences"
msgstr "依照偏好設定執行(&P)"
-#: AdvancedFrame.cpp:474
+#: AdvancedFrame.cpp:478
msgid "Allow work according to preferences"
msgstr "依照您的偏好設定執行工作"
-#: AdvancedFrame.cpp:478
+#: AdvancedFrame.cpp:482
msgid "&Suspend"
msgstr "暫止 (&S)"
-#: AdvancedFrame.cpp:479
+#: AdvancedFrame.cpp:483
msgid "Stop work regardless of preferences"
msgstr "不管偏好設定停止工作"
-#: AdvancedFrame.cpp:504
+#: AdvancedFrame.cpp:508
msgid "Use GPU always"
msgstr "持續執行 GPU"
-#: AdvancedFrame.cpp:505
+#: AdvancedFrame.cpp:509
msgid "Allow GPU work regardless of preferences"
msgstr "不管偏好設定運行工作"
-#: AdvancedFrame.cpp:509
+#: AdvancedFrame.cpp:513
msgid "Use GPU based on preferences"
msgstr "依照偏好設定使用GPU(&P)"
-#: AdvancedFrame.cpp:510
+#: AdvancedFrame.cpp:514
msgid "Allow GPU work according to preferences"
msgstr "依照您的偏好設定運行GPU工作"
-#: AdvancedFrame.cpp:514
+#: AdvancedFrame.cpp:518
msgid "Suspend GPU"
msgstr "暫止GPU"
-#: AdvancedFrame.cpp:515
+#: AdvancedFrame.cpp:519
msgid "Stop GPU work regardless of preferences"
msgstr "不管偏好設定停止GPU工作"
-#: AdvancedFrame.cpp:539
+#: AdvancedFrame.cpp:543
msgid "Network activity always available"
msgstr "持續進行網路活動"
-#: AdvancedFrame.cpp:540
+#: AdvancedFrame.cpp:544
msgid "Allow network activity regardless of preferences"
msgstr "不管偏好設定進行網路活動"
-#: AdvancedFrame.cpp:544
+#: AdvancedFrame.cpp:548
msgid "Network activity based on preferences"
msgstr "依照偏好設定連線網路(&P)"
-#: AdvancedFrame.cpp:545
+#: AdvancedFrame.cpp:549
msgid "Allow network activity according to preferences"
msgstr "依照您的偏好設定進行網路活動"
-#: AdvancedFrame.cpp:549
+#: AdvancedFrame.cpp:553
msgid "Network activity suspended"
msgstr "暫止網路活動"
-#: AdvancedFrame.cpp:550
+#: AdvancedFrame.cpp:554
msgid "Stop BOINC network activity"
msgstr "停止 BONIC 的網路活動"
-#: AdvancedFrame.cpp:560
+#: AdvancedFrame.cpp:564
#, c-format
msgid "Connect to another computer running %s"
msgstr "連線到另一台運行 %s 的電腦"
-#: AdvancedFrame.cpp:565
+#: AdvancedFrame.cpp:569
msgid "Select computer..."
msgstr "選擇電腦..."
-#: AdvancedFrame.cpp:570
+#: AdvancedFrame.cpp:574
msgid "Shut down connected client..."
msgstr "關閉已連線的客戶端..."
-#: AdvancedFrame.cpp:571
+#: AdvancedFrame.cpp:575
msgid "Shut down the currently connected client"
msgstr "關閉目前連線的客戶端"
-#: AdvancedFrame.cpp:575
+#: AdvancedFrame.cpp:579
msgid "Run CPU &benchmarks"
msgstr "執行 CPU 效能測試 (&B)"
-#: AdvancedFrame.cpp:576
+#: AdvancedFrame.cpp:580
msgid "Runs BOINC CPU benchmarks"
msgstr "執行 BONIC 的 CPU 效能測試"
-#: AdvancedFrame.cpp:580
+#: AdvancedFrame.cpp:584
msgid "Do network communication"
msgstr "開始網路通訊"
-#: AdvancedFrame.cpp:581
+#: AdvancedFrame.cpp:585
msgid "Do all pending network communication"
msgstr "開始所有待處理的網路通訊。"
# 94%
-#: AdvancedFrame.cpp:585
+#: AdvancedFrame.cpp:589
msgid "Read config files"
msgstr "讀取設定資料檔"
-#: AdvancedFrame.cpp:586
+#: AdvancedFrame.cpp:590
msgid "Read configuration info from cc_config.xml and any app_config.xml files"
msgstr "從cc_config.xml和任何app_config.xml檔案讀取配置資訊"
-#: AdvancedFrame.cpp:590
+#: AdvancedFrame.cpp:594
msgid "Read local prefs file"
msgstr "讀取本機偏好設定"
-#: AdvancedFrame.cpp:591
+#: AdvancedFrame.cpp:595
msgid "Read preferences from global_prefs_override.xml."
msgstr "從 global_prefs_override.xml 讀取偏好設定。"
-#: AdvancedFrame.cpp:596
+#: AdvancedFrame.cpp:600
#, c-format
msgid "Launch another instance of %s..."
msgstr "執行另外一個 %s"
-#: AdvancedFrame.cpp:600
+#: AdvancedFrame.cpp:604
#, c-format
msgid "Launch another %s"
msgstr "開啟新的 %s"
-#: AdvancedFrame.cpp:610
+#: AdvancedFrame.cpp:614
msgid "Event Log...\tCtrl+Shift+E"
msgstr "事件記錄...\tCtrl+Shift+E"
-#: AdvancedFrame.cpp:611
+#: AdvancedFrame.cpp:615
msgid "Display diagnostic messages."
msgstr "顯示診斷訊息。"
-#: AdvancedFrame.cpp:621 sg_BoincSimpleFrame.cpp:184
+#: AdvancedFrame.cpp:625 sg_BoincSimpleFrame.cpp:188
#, c-format
msgid "%s &help"
msgstr "%s 說明 (&H)"
-#: AdvancedFrame.cpp:627 sg_BoincSimpleFrame.cpp:190
+#: AdvancedFrame.cpp:631 sg_BoincSimpleFrame.cpp:194
#, c-format
msgid "Show information about %s"
msgstr "顯示關於 %s 的資訊"
-#: AdvancedFrame.cpp:639
+#: AdvancedFrame.cpp:643
#, c-format
msgid "&%s help"
msgstr "說明 (&%s)"
-#: AdvancedFrame.cpp:645 sg_BoincSimpleFrame.cpp:208
+#: AdvancedFrame.cpp:649 sg_BoincSimpleFrame.cpp:212
#, c-format
msgid "Show information about the %s"
msgstr "顯示關於 %s 的資訊"
-#: AdvancedFrame.cpp:657 sg_BoincSimpleFrame.cpp:220
+#: AdvancedFrame.cpp:661 sg_BoincSimpleFrame.cpp:224
#, c-format
msgid "%s &web site"
msgstr "%s &網站"
-#: AdvancedFrame.cpp:663 sg_BoincSimpleFrame.cpp:226
+#: AdvancedFrame.cpp:667 sg_BoincSimpleFrame.cpp:230
#, c-format
msgid "Show information about BOINC and %s"
msgstr "顯示關於 BONIC 及 %s 的資訊"
-#: AdvancedFrame.cpp:675 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:238
+#: AdvancedFrame.cpp:679 BOINCTaskBar.cpp:530 sg_BoincSimpleFrame.cpp:242
#, c-format
msgid "&About %s..."
msgstr "關於 %s (&A)"
-#: AdvancedFrame.cpp:681 sg_BoincSimpleFrame.cpp:244
+#: AdvancedFrame.cpp:685 sg_BoincSimpleFrame.cpp:248
msgid "Licensing and copyright information."
msgstr "授權與版權資訊。"
-#: AdvancedFrame.cpp:688 sg_BoincSimpleFrame.cpp:251
+#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
msgid "&File"
msgstr "檔案 (&F)"
-#: AdvancedFrame.cpp:692 sg_BoincSimpleFrame.cpp:255
+#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
msgid "&View"
msgstr "檢視 (&V)"
-#: AdvancedFrame.cpp:696 sg_BoincSimpleFrame.cpp:259
+#: AdvancedFrame.cpp:700 sg_BoincSimpleFrame.cpp:263
msgid "&Tools"
msgstr "工具 (&T)"
-#: AdvancedFrame.cpp:700
+#: AdvancedFrame.cpp:704
msgid "&Activity"
msgstr "活動 (&A)"
-#: AdvancedFrame.cpp:704
+#: AdvancedFrame.cpp:708
msgid "A&dvanced"
msgstr "進階 (&D)"
-#: AdvancedFrame.cpp:708 DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:263
+#: AdvancedFrame.cpp:712 DlgEventLog.cpp:332 sg_BoincSimpleFrame.cpp:267
#: wizardex.cpp:374 wizardex.cpp:381
msgid "&Help"
msgstr "說明 (&H)"
-#: AdvancedFrame.cpp:1195
+#: AdvancedFrame.cpp:1199
#, c-format
msgid "%s - Stop using %s"
msgstr "%s - 停止使用 %s"
-#: AdvancedFrame.cpp:1200
+#: AdvancedFrame.cpp:1204
#, c-format
msgid ""
"If you stop using %s,\n"
@@ -549,12 +549,12 @@ msgstr ""
"\n"
"您確定要停止使用 %s 嗎?"
-#: AdvancedFrame.cpp:1397
+#: AdvancedFrame.cpp:1401
#, c-format
msgid "%s - Shut down the current client..."
msgstr "%s - 關閉目前客戶端..."
-#: AdvancedFrame.cpp:1406
+#: AdvancedFrame.cpp:1410
#, c-format
msgid ""
"%s will shut down the current client\n"
@@ -563,27 +563,27 @@ msgstr ""
"%s 將會關閉目前的客戶端\n"
"然後提示您輸入想要連結的客戶端。"
-#: AdvancedFrame.cpp:1734 DlgAbout.cpp:119
+#: AdvancedFrame.cpp:1745 DlgAbout.cpp:119
#, c-format
msgid "%s"
msgstr "%s"
-#: AdvancedFrame.cpp:1743
+#: AdvancedFrame.cpp:1754
#, c-format
msgid "%s has successfully added %s"
msgstr "%s 已成功加入 %s 計畫。"
-#: AdvancedFrame.cpp:1882
+#: AdvancedFrame.cpp:1893
#, c-format
msgid "%s - (%s)"
msgstr "%s - (%s)"
-#: AdvancedFrame.cpp:1886
+#: AdvancedFrame.cpp:1897
#, c-format
msgid "Connecting to %s"
msgstr "正在連線到 %s"
-#: AdvancedFrame.cpp:1889
+#: AdvancedFrame.cpp:1900
#, c-format
msgid "Connected to %s (%s)"
msgstr "已連線到 %s (%s)"
@@ -620,26 +620,26 @@ msgstr ""
"\n"
"請拜訪專案網站後,依照專案網站的指示操作。"
-#: AsyncRPC.cpp:1026
+#: AsyncRPC.cpp:1031
msgid "Communicating with BOINC client. Please wait ..."
msgstr "正在連線至 BOINC 用戶端。 請稍候..."
-#: AsyncRPC.cpp:1029
+#: AsyncRPC.cpp:1034
#, c-format
msgid "&Quit %s"
msgstr "離開 %s (&Q)"
-#: AsyncRPC.cpp:1031
+#: AsyncRPC.cpp:1036
#, c-format
msgid "E&xit %s"
msgstr "結束 %s (&X)"
-#: AsyncRPC.cpp:1035
+#: AsyncRPC.cpp:1040
#, c-format
msgid "%s - Communication"
msgstr "%s - 網路通訊"
-#: AsyncRPC.cpp:1051 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:438
+#: AsyncRPC.cpp:1056 DlgAdvPreferencesBase.cpp:107 sg_DlgPreferences.cpp:433
msgid "Cancel"
msgstr "取消"
@@ -792,7 +792,7 @@ msgstr "%s 已成功從網路斷線。"
msgid "%s failed to disconnected from the Internet."
msgstr "%s 從網路斷線失敗。"
-#: BOINCGUIApp.cpp:341
+#: BOINCGUIApp.cpp:339
#, c-format
msgid ""
"You currently are not authorized to manage the client.\n"
@@ -810,7 +810,7 @@ msgstr ""
"- 重新安裝 %s,在被問到關於非系統管理員用戶的問題時,回答\"是\"\n"
"- 聯繫系統管理員將您加入到“boinc_master”用戶組。"
-#: BOINCGUIApp.cpp:347
+#: BOINCGUIApp.cpp:345
#, c-format
msgid ""
"%s ownership or permissions are not set properly; please reinstall %s.\n"
@@ -819,16 +819,16 @@ msgstr ""
"%s 相關的使用者權限設定錯誤,請重新安裝。\n"
"(錯誤代碼 %d)"
-#: BOINCGUIApp.cpp:353
+#: BOINCGUIApp.cpp:351
msgid " at "
msgstr "最多只使用"
-#: BOINCGUIApp.cpp:356 MainDocument.cpp:2474 MainDocument.cpp:2524
-#: MainDocument.cpp:2544 ViewTransfers.cpp:803
+#: BOINCGUIApp.cpp:354 MainDocument.cpp:2484 MainDocument.cpp:2534
+#: MainDocument.cpp:2554 ViewTransfers.cpp:803
msgid ")"
msgstr ")"
-#: BOINCGUIApp.cpp:386
+#: BOINCGUIApp.cpp:384
msgid ""
"A reboot is required in order for BOINC to run properly.\n"
"Please reboot your computer and try again."
@@ -836,67 +836,67 @@ msgstr ""
"BOINC 需要在重新開機後才能運作。\n"
"請先將電腦重新開機再試。"
-#: BOINCGUIApp.cpp:387 DlgAbout.cpp:153
+#: BOINCGUIApp.cpp:385 DlgAbout.cpp:153
msgid "BOINC Manager"
msgstr "BOINC Manager"
-#: BOINCGUIApp.cpp:570
+#: BOINCGUIApp.cpp:572
msgid "BOINC Manager was started by the operating system automatically"
msgstr "BOINC Manager 已經由作業系統啟動"
-#: BOINCGUIApp.cpp:572
+#: BOINCGUIApp.cpp:574
msgid "Startup BOINC so only the system tray icon is visible"
msgstr "只以系統匣圖示啟動 BOINC"
-#: BOINCGUIApp.cpp:574
+#: BOINCGUIApp.cpp:576
msgid "Directory containing the BOINC Client executable"
msgstr "包含 BOINC 客戶端執行的目錄"
-#: BOINCGUIApp.cpp:575
+#: BOINCGUIApp.cpp:577
msgid "BOINC data directory"
msgstr "BOINC 數據目錄"
-#: BOINCGUIApp.cpp:577
+#: BOINCGUIApp.cpp:579
msgid "Host name or IP address"
msgstr "電腦名稱或 IP 位址"
-#: BOINCGUIApp.cpp:578
+#: BOINCGUIApp.cpp:580
msgid "GUI RPC port number"
msgstr "圖形介面 RPC port"
-#: BOINCGUIApp.cpp:579
+#: BOINCGUIApp.cpp:581
msgid "Password"
msgstr "密碼"
-#: BOINCGUIApp.cpp:580
+#: BOINCGUIApp.cpp:582
msgid "Startup BOINC with these optional arguments"
msgstr "以這些選用參數啟動 BOINC"
-#: BOINCGUIApp.cpp:581
+#: BOINCGUIApp.cpp:583
msgid "disable BOINC security users and permissions"
msgstr "停用 BOINC 安全性使用者和權限"
-#: BOINCGUIApp.cpp:582
+#: BOINCGUIApp.cpp:584
msgid "set skin debugging mode to enable skin manager error messages"
msgstr "設置介面調試模式已啟用介面管理器的錯誤消息記錄"
-#: BOINCGUIApp.cpp:583
+#: BOINCGUIApp.cpp:585
msgid "multiple instances of BOINC Manager allowed"
msgstr "允許執行多個 BOINC Manager"
-#: BOINCGUIApp.cpp:585
+#: BOINCGUIApp.cpp:587
msgid "Not used: workaround for bug in XCode 4.2"
msgstr "未使用:用於臨時修復 XCode 4.2 的錯誤"
-#: BOINCGUIApp.cpp:803
+#: BOINCGUIApp.cpp:814
msgid "(Automatic Detection)"
msgstr "(自動偵測)"
-#: BOINCGUIApp.cpp:804
+#: BOINCGUIApp.cpp:815
msgid "(Unknown)"
msgstr "(未知的語言)"
-#: BOINCGUIApp.cpp:805
+#: BOINCGUIApp.cpp:816
msgid "(User Defined)"
msgstr "(使用者定義)"
@@ -923,7 +923,7 @@ msgid "E&xit"
msgstr "結束 (&X)"
#: BOINCTaskBar.cpp:612 ViewProjects.cpp:718 ViewWork.cpp:795
-#: sg_BoincSimpleFrame.cpp:754 sg_ProjectCommandPopup.cpp:110
+#: sg_BoincSimpleFrame.cpp:758 sg_ProjectCommandPopup.cpp:110
#: sg_TaskCommandPopup.cpp:102
msgid "Resume"
msgstr "恢復"
@@ -1082,64 +1082,64 @@ msgid "Berkeley Open Infrastructure for Network Computing"
msgstr "柏克萊開放式網路運算平台"
#: DlgAbout.cpp:208 DlgExitMessage.cpp:173 DlgGenericMessage.cpp:120
-#: DlgOptions.cpp:396 DlgSelectComputer.cpp:162
+#: DlgOptions.cpp:396 DlgSelectComputer.cpp:163
msgid "&OK"
msgstr "確定 (&O)"
-#: DlgAdvPreferences.cpp:542
-msgid "invalid float"
-msgstr "無效的浮點數"
+#: DlgAdvPreferences.cpp:544
+msgid "invalid number"
+msgstr "無效數字"
-#: DlgAdvPreferences.cpp:543
+#: DlgAdvPreferences.cpp:545
msgid "invalid time, format is HH:MM"
msgstr "無效的時間,格式為 HH:MM"
-#: DlgAdvPreferences.cpp:544
+#: DlgAdvPreferences.cpp:546
msgid "invalid time interval, format is HH:MM-HH:MM"
msgstr "無效的時間間隔,格式為 HH:MM-HH:MM"
-#: DlgAdvPreferences.cpp:664
+#: DlgAdvPreferences.cpp:751
msgid "invalid input value detected"
msgstr "偵測到無效的輸入值"
-#: DlgAdvPreferences.cpp:666
+#: DlgAdvPreferences.cpp:753
msgid "Validation Error"
msgstr "驗證錯誤"
-#: DlgAdvPreferences.cpp:797 DlgAdvPreferences.cpp:803
-#: DlgAdvPreferences.cpp:809
+#: DlgAdvPreferences.cpp:885 DlgAdvPreferences.cpp:891
+#: DlgAdvPreferences.cpp:897
msgid "Applications to add"
msgstr "需要新增的應用程式"
-#: DlgAdvPreferences.cpp:826
+#: DlgAdvPreferences.cpp:914
#, c-format
msgid "'%s' is not an executable application."
msgstr "'%s' 為一個不可以執行的應用程式"
-#: DlgAdvPreferences.cpp:827 DlgAdvPreferences.cpp:874
-#: DlgAdvPreferences.cpp:898
+#: DlgAdvPreferences.cpp:915 DlgAdvPreferences.cpp:962
+#: DlgAdvPreferences.cpp:986
msgid "Add Exclusive App"
msgstr "加入排斥的應用程式"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Name of application to add?"
msgstr "需要新增的應用程式的名稱?"
-#: DlgAdvPreferences.cpp:839
+#: DlgAdvPreferences.cpp:927
msgid "Add exclusive app"
msgstr "加入排斥的應用程式"
-#: DlgAdvPreferences.cpp:873
+#: DlgAdvPreferences.cpp:961
#, c-format
msgid "Application names must end with '%s'"
msgstr "應用程式名稱的結果必須為 '%s'"
-#: DlgAdvPreferences.cpp:897
+#: DlgAdvPreferences.cpp:985
#, c-format
msgid "'%s' is already in the list."
msgstr "'%s' 已經在列表之中。"
-#: DlgAdvPreferences.cpp:989
+#: DlgAdvPreferences.cpp:1077
msgid ""
"Do you really want to clear all local preferences?\n"
"(This will not affect exclusive applications.)"
@@ -1147,11 +1147,11 @@ msgstr ""
"您確定要清除所有本地偏好設定嗎? \n"
"(不會對互斥應用程式的設定有影響)"
-#: DlgAdvPreferences.cpp:990 sg_DlgPreferences.cpp:1035
+#: DlgAdvPreferences.cpp:1078 sg_DlgPreferences.cpp:1030
msgid "Confirmation"
msgstr "確認"
-#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:951
+#: DlgAdvPreferencesBase.cpp:46 sg_DlgPreferences.cpp:946
#, c-format
msgid "%s - Preferences"
msgstr "%s - 偏好設定"
@@ -1166,11 +1166,11 @@ msgstr ""
"按「確定」設定偏好設定。\n"
"按「清除」回復為網頁上的偏好設定。"
-#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:433
+#: DlgAdvPreferencesBase.cpp:65 sg_DlgPreferences.cpp:428
msgid "Clear"
msgstr "清除"
-#: DlgAdvPreferencesBase.cpp:66 sg_DlgPreferences.cpp:434
+#: DlgAdvPreferencesBase.cpp:66
msgid "clear all local preferences and close the dialog"
msgstr "清除所有本機偏好設定並關閉此視窗"
@@ -1190,7 +1190,7 @@ msgstr "硬碟及記憶體使用量"
msgid "exclusive applications"
msgstr "排斥的應用程式"
-#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:429
+#: DlgAdvPreferencesBase.cpp:102 sg_DlgPreferences.cpp:424
msgid "OK"
msgstr "確定"
@@ -1203,7 +1203,7 @@ msgid "close the dialog without saving"
msgstr "關閉視窗且不儲存"
#: DlgAdvPreferencesBase.cpp:112 Localization.cpp:35 Localization.cpp:121
-#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:790 sg_DlgPreferences.cpp:444
+#: Localization.cpp:139 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:439
msgid "Help"
msgstr "幫助"
@@ -1253,7 +1253,7 @@ msgid ""
msgstr "設定您不使用電腦幾分鐘後才執行工作"
#: DlgAdvPreferencesBase.cpp:187 DlgAdvPreferencesBase.cpp:336
-#: sg_DlgPreferences.cpp:422
+#: sg_DlgPreferences.cpp:417
msgid "minutes"
msgstr "分鐘"
@@ -1269,7 +1269,7 @@ msgstr "如果處理器使用率超過設定就暫停運算"
msgid "percent (0 means no restriction)"
msgstr "% (0 代表不限制 )"
-#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:495
+#: DlgAdvPreferencesBase.cpp:235 DlgAdvPreferencesBase.cpp:496
msgid "Every day between hours of"
msgstr "每天執行工作的時間區間:"
@@ -1277,8 +1277,8 @@ msgstr "每天執行工作的時間區間:"
msgid "start work at this time"
msgstr "開始執行工作的時間"
-#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:503
-#: sg_DlgPreferences.cpp:331 sg_DlgPreferences.cpp:353
+#: DlgAdvPreferencesBase.cpp:243 DlgAdvPreferencesBase.cpp:504
+#: sg_DlgPreferences.cpp:326 sg_DlgPreferences.cpp:348
msgid "and"
msgstr "到"
@@ -1286,43 +1286,43 @@ msgstr "到"
msgid "stop work at this time"
msgstr "停止執行工作的時間"
-#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:511
+#: DlgAdvPreferencesBase.cpp:251 DlgAdvPreferencesBase.cpp:512
msgid "(no restriction if equal)"
msgstr "(兩欄都相等表示不設限)"
-#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:516
+#: DlgAdvPreferencesBase.cpp:256 DlgAdvPreferencesBase.cpp:517
msgid "Day-of-week override:"
msgstr "每日分別設定:"
-#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:521
+#: DlgAdvPreferencesBase.cpp:261 DlgAdvPreferencesBase.cpp:522
msgid "check box to specify hours for this day of week"
msgstr "打勾可設定該日要運行工作的時間"
-#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:527
+#: DlgAdvPreferencesBase.cpp:267 DlgAdvPreferencesBase.cpp:528
msgid "Monday"
msgstr "星期一"
-#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:534
+#: DlgAdvPreferencesBase.cpp:274 DlgAdvPreferencesBase.cpp:535
msgid "Tuesday"
msgstr "星期二"
-#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:541
+#: DlgAdvPreferencesBase.cpp:281 DlgAdvPreferencesBase.cpp:542
msgid "Wednesday"
msgstr "星期三"
-#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:548
+#: DlgAdvPreferencesBase.cpp:288 DlgAdvPreferencesBase.cpp:549
msgid "Thursday"
msgstr "星期四"
-#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:555
+#: DlgAdvPreferencesBase.cpp:295 DlgAdvPreferencesBase.cpp:556
msgid "Friday"
msgstr "星期五"
-#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:562
+#: DlgAdvPreferencesBase.cpp:302 DlgAdvPreferencesBase.cpp:563
msgid "Saturday"
msgstr "星期六"
-#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:569
+#: DlgAdvPreferencesBase.cpp:309 DlgAdvPreferencesBase.cpp:570
msgid "Sunday"
msgstr "星期日"
@@ -1343,9 +1343,9 @@ msgstr "多核心系統中最多只使用"
msgid "% of the processors (0 means ignore this setting)"
msgstr "% (0表示忽略此設置)"
-#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:604
-#: DlgAdvPreferencesBase.cpp:626 DlgAdvPreferencesBase.cpp:647
-#: DlgAdvPreferencesBase.cpp:668 DlgAdvPreferencesBase.cpp:678
+#: DlgAdvPreferencesBase.cpp:349 DlgAdvPreferencesBase.cpp:605
+#: DlgAdvPreferencesBase.cpp:627 DlgAdvPreferencesBase.cpp:648
+#: DlgAdvPreferencesBase.cpp:669 DlgAdvPreferencesBase.cpp:679
msgid "Use at most"
msgstr "最多只使用"
@@ -1354,82 +1354,82 @@ msgstr "最多只使用"
msgid "% CPU time"
msgstr "% CPU 時間"
-#: DlgAdvPreferencesBase.cpp:377
+#: DlgAdvPreferencesBase.cpp:378
msgid "General options"
msgstr "一般選項"
-#: DlgAdvPreferencesBase.cpp:385
+#: DlgAdvPreferencesBase.cpp:386
msgid "Maximum download rate"
msgstr "最大下載速率"
-#: DlgAdvPreferencesBase.cpp:391 DlgAdvPreferencesBase.cpp:400
+#: DlgAdvPreferencesBase.cpp:392 DlgAdvPreferencesBase.cpp:401
msgid "KBytes/sec."
msgstr "KB/秒"
-#: DlgAdvPreferencesBase.cpp:394
+#: DlgAdvPreferencesBase.cpp:395
msgid "Maximum upload rate"
msgstr "最大上傳速率"
-#: DlgAdvPreferencesBase.cpp:405
+#: DlgAdvPreferencesBase.cpp:406
msgid "Transfer at most"
msgstr "最多只使用"
-#: DlgAdvPreferencesBase.cpp:411
+#: DlgAdvPreferencesBase.cpp:412
msgid "Mbytes"
msgstr "Mbytes"
-#: DlgAdvPreferencesBase.cpp:414
+#: DlgAdvPreferencesBase.cpp:415
msgid "every"
msgstr "每"
-#: DlgAdvPreferencesBase.cpp:420 DlgAdvPreferencesBase.cpp:443
-#: DlgAdvPreferencesBase.cpp:462
+#: DlgAdvPreferencesBase.cpp:421 DlgAdvPreferencesBase.cpp:444
+#: DlgAdvPreferencesBase.cpp:463
msgid "days"
msgstr "天"
-#: DlgAdvPreferencesBase.cpp:428
+#: DlgAdvPreferencesBase.cpp:429
msgid "Minimum work buffer"
msgstr "最少的工作緩衝時間"
-#: DlgAdvPreferencesBase.cpp:437
+#: DlgAdvPreferencesBase.cpp:438
msgid "Try to maintain enough tasks to keep busy for this many days"
msgstr "嘗試持有這些天數所需要的工作數量"
-#: DlgAdvPreferencesBase.cpp:449
+#: DlgAdvPreferencesBase.cpp:450
msgid "Max additional work buffer"
msgstr "取得額外工作的緩衝時間"
-#: DlgAdvPreferencesBase.cpp:458
+#: DlgAdvPreferencesBase.cpp:459
msgid "In addition, maintain enough tasks for up to this many days"
msgstr "額外取得這些天數所需要的工作數量"
-#: DlgAdvPreferencesBase.cpp:465
+#: DlgAdvPreferencesBase.cpp:466
msgid "Skip image file verification"
msgstr "略過映像檔驗證"
-#: DlgAdvPreferencesBase.cpp:467
+#: DlgAdvPreferencesBase.cpp:468
msgid "check this if your Internet provider modifies image files"
msgstr "若您的 ISP 會修改映像檔就打勾"
-#: DlgAdvPreferencesBase.cpp:475
+#: DlgAdvPreferencesBase.cpp:476
msgid "Connect options"
msgstr "連線選項"
-#: DlgAdvPreferencesBase.cpp:477
+#: DlgAdvPreferencesBase.cpp:478
msgid "Confirm before connecting to internet"
msgstr "連線到網路前確認"
-#: DlgAdvPreferencesBase.cpp:479
+#: DlgAdvPreferencesBase.cpp:480
msgid ""
"if checked, a confirmation dialog will be displayed before trying to connect "
"to the Internet"
msgstr "若勾選此方塊,當連線到網路前會先顯示確認視窗"
-#: DlgAdvPreferencesBase.cpp:483
+#: DlgAdvPreferencesBase.cpp:484
msgid "Disconnect when done"
msgstr "完成後斷線"
-#: DlgAdvPreferencesBase.cpp:485
+#: DlgAdvPreferencesBase.cpp:486
msgid ""
"if checked, BOINC hangs up when network usage is done\n"
"(only relevant for dialup-connection)"
@@ -1437,177 +1437,177 @@ msgstr ""
"若勾選此方塊,當網路使用結束後 BOINC 會中斷連線\n"
"(只對撥接連線有效)"
-#: DlgAdvPreferencesBase.cpp:491
+#: DlgAdvPreferencesBase.cpp:492
msgid "Network usage allowed"
msgstr "選擇允許使用網路的情況"
-#: DlgAdvPreferencesBase.cpp:499
+#: DlgAdvPreferencesBase.cpp:500
msgid "network usage start hour"
msgstr "網路使用開始時間"
-#: DlgAdvPreferencesBase.cpp:507
+#: DlgAdvPreferencesBase.cpp:508
msgid "network usage stop hour"
msgstr "網路使用結束時間"
-#: DlgAdvPreferencesBase.cpp:597 DlgItemProperties.cpp:227
+#: DlgAdvPreferencesBase.cpp:598 DlgItemProperties.cpp:231
msgid "Disk usage"
msgstr "硬碟用量"
-#: DlgAdvPreferencesBase.cpp:608
+#: DlgAdvPreferencesBase.cpp:609
msgid "the maximum disk space used by BOINC (in Gigabytes)"
msgstr "BOINC 能使用的最大硬碟空間 (以 GB 計)"
-#: DlgAdvPreferencesBase.cpp:612
+#: DlgAdvPreferencesBase.cpp:613
msgid "Gigabytes disk space"
msgstr "硬碟空間 (GB)"
-#: DlgAdvPreferencesBase.cpp:615
+#: DlgAdvPreferencesBase.cpp:616
msgid "Leave at least"
msgstr "留下至少"
-#: DlgAdvPreferencesBase.cpp:619
+#: DlgAdvPreferencesBase.cpp:620
msgid "BOINC leaves at least this amount of disk space free (in Gigabytes)"
msgstr "BOINC 要留下多少的可用磁碟空間 (以 GB 計)"
-#: DlgAdvPreferencesBase.cpp:623
+#: DlgAdvPreferencesBase.cpp:624
msgid "Gigabytes disk space free"
msgstr "可用硬碟空間 (GB)"
-#: DlgAdvPreferencesBase.cpp:630
+#: DlgAdvPreferencesBase.cpp:631
msgid "BOINC uses at most this percentage of total disk space"
msgstr "BOINC 最多可使用的總硬碟空間百分比"
-#: DlgAdvPreferencesBase.cpp:635
+#: DlgAdvPreferencesBase.cpp:636
#, no-c-format
msgid "% of total disk space"
msgstr "% 總硬碟空間"
-#: DlgAdvPreferencesBase.cpp:638
+#: DlgAdvPreferencesBase.cpp:639
msgid "Tasks checkpoint to disk at most every"
msgstr "工作最短的儲存時間間隔"
-#: DlgAdvPreferencesBase.cpp:644
+#: DlgAdvPreferencesBase.cpp:645
msgid "seconds"
msgstr "秒"
-#: DlgAdvPreferencesBase.cpp:654
+#: DlgAdvPreferencesBase.cpp:655
#, no-c-format
msgid "% of page file (swap space)"
msgstr "% 分頁檔大小 (交換空間)"
-#: DlgAdvPreferencesBase.cpp:661
+#: DlgAdvPreferencesBase.cpp:662
msgid "Memory usage"
msgstr "記憶體用量"
-#: DlgAdvPreferencesBase.cpp:675
+#: DlgAdvPreferencesBase.cpp:676
#, no-c-format
msgid "% when computer is in use"
msgstr "% 於電腦使用中"
-#: DlgAdvPreferencesBase.cpp:685
+#: DlgAdvPreferencesBase.cpp:686
#, no-c-format
msgid "% when computer is idle"
msgstr "% 於電腦閒置中"
-#: DlgAdvPreferencesBase.cpp:690
+#: DlgAdvPreferencesBase.cpp:691
msgid "Leave applications in memory while suspended"
msgstr "當暫止時保留應用程式於記憶體中"
-#: DlgAdvPreferencesBase.cpp:692
+#: DlgAdvPreferencesBase.cpp:693
msgid "if checked, suspended work units are left in memory"
msgstr "若勾選此方塊,暫止的工作會留在記憶體中"
-#: DlgAdvPreferencesBase.cpp:712
+#: DlgAdvPreferencesBase.cpp:713
msgid ""
"Suspend processor and network usage when these applications are running:"
msgstr "當這些應用程式在運行時,暫停處理器與網路的使用"
-#: DlgAdvPreferencesBase.cpp:721
+#: DlgAdvPreferencesBase.cpp:722
msgid "Add..."
msgstr "加入"
-#: DlgAdvPreferencesBase.cpp:722
+#: DlgAdvPreferencesBase.cpp:723
msgid "Add an application to this list"
msgstr "加入一個應用程式到列表中"
-#: DlgAdvPreferencesBase.cpp:727 ViewProjects.cpp:202
+#: DlgAdvPreferencesBase.cpp:728 ViewProjects.cpp:202
#: sg_ProjectCommandPopup.cpp:85
msgid "Remove"
msgstr "移除"
-#: DlgAdvPreferencesBase.cpp:728
+#: DlgAdvPreferencesBase.cpp:729
msgid "Remove an application from this list"
msgstr "從列表中移除一個應用程式"
-#: DlgAdvPreferencesBase.cpp:737
+#: DlgAdvPreferencesBase.cpp:738
msgid "For advanced options, refer to "
msgstr "更多詳細的設定,請前往"
-#: DlgEventLog.cpp:221
+#: DlgEventLog.cpp:219
#, c-format
msgid "%s - Event Log"
msgstr "%s - 訊息記錄"
-#: DlgEventLog.cpp:234 ViewMessages.cpp:117 ViewProjects.cpp:219
-#: ViewStatistics.cpp:435 ViewStatistics.cpp:2007 ViewTransfers.cpp:182
+#: DlgEventLog.cpp:232 ViewMessages.cpp:117 ViewProjects.cpp:219
+#: ViewStatistics.cpp:435 ViewStatistics.cpp:2009 ViewTransfers.cpp:182
#: ViewWork.cpp:232
msgid "Project"
msgstr "專案"
-#: DlgEventLog.cpp:235 ViewMessages.cpp:118
+#: DlgEventLog.cpp:233 ViewMessages.cpp:118
msgid "Time"
msgstr "時間"
-#: DlgEventLog.cpp:236 ViewMessages.cpp:119
+#: DlgEventLog.cpp:234 ViewMessages.cpp:119
msgid "Message"
msgstr "訊息"
-#: DlgEventLog.cpp:292 DlgEventLog.cpp:356
+#: DlgEventLog.cpp:290 DlgEventLog.cpp:354
msgid "&Show only this project"
msgstr "只顯示本專案 (&S)"
-#: DlgEventLog.cpp:296
+#: DlgEventLog.cpp:294
msgid "Copy &All"
msgstr "全部複製 (&A)"
-#: DlgEventLog.cpp:298 DlgEventLog.cpp:302 ViewMessages.cpp:89
+#: DlgEventLog.cpp:296 DlgEventLog.cpp:300 ViewMessages.cpp:89
msgid "Copy all the messages to the clipboard."
msgstr "複製全部訊息到剪貼簿。"
-#: DlgEventLog.cpp:307
+#: DlgEventLog.cpp:305
msgid "Copy &Selected"
msgstr "複製所選擇的 (&S)"
-#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:97
+#: DlgEventLog.cpp:308 DlgEventLog.cpp:316 ViewMessages.cpp:97
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or command key while clicking on messages."
msgstr "只複製已選取的訊息到剪貼簿,您可以在選取訊息時按住 Shift 或 Command 鍵以同時選取多個訊息。"
-#: DlgEventLog.cpp:312 DlgEventLog.cpp:320 ViewMessages.cpp:99
+#: DlgEventLog.cpp:310 DlgEventLog.cpp:318 ViewMessages.cpp:99
msgid ""
"Copy the selected messages to the clipboard. You can select multiple "
"messages by holding down the shift or control key while clicking on messages."
msgstr "只複製已選取的訊息到剪貼簿, 您可以在選取訊息時按住 Shift 或 Ctrl 鍵以同時選取多個訊息。"
-#: DlgEventLog.cpp:327 DlgItemProperties.cpp:67
+#: DlgEventLog.cpp:325 DlgItemProperties.cpp:67
msgid "&Close"
msgstr "關閉 (&C)"
-#: DlgEventLog.cpp:336 sg_BoincSimpleFrame.cpp:794 sg_DlgPreferences.cpp:447
+#: DlgEventLog.cpp:334 sg_BoincSimpleFrame.cpp:798 sg_DlgPreferences.cpp:442
#, c-format
msgid "Get help with %s"
msgstr "取得 %s 的幫助"
-#: DlgEventLog.cpp:350
+#: DlgEventLog.cpp:348
msgid "Show all &messages"
msgstr "顯示所有訊息"
-#: DlgEventLog.cpp:351 DlgEventLog.cpp:353
+#: DlgEventLog.cpp:349 DlgEventLog.cpp:351
msgid "Show messages for all projects"
msgstr "顯示所有計畫於同一統計圖"
-#: DlgEventLog.cpp:357 DlgEventLog.cpp:359
+#: DlgEventLog.cpp:355 DlgEventLog.cpp:357
msgid "Show only the messages for the selected project"
msgstr "顯示所選計畫於同一統計圖"
@@ -1658,7 +1658,7 @@ msgid "Remember this decision and do not show this dialog."
msgstr "記住目前的選擇並且不再顯示本視窗。"
#: DlgExitMessage.cpp:178 DlgGenericMessage.cpp:125 DlgOptions.cpp:401
-#: DlgSelectComputer.cpp:167 wizardex.cpp:378
+#: DlgSelectComputer.cpp:168 wizardex.cpp:378
msgid "&Cancel"
msgstr "取消 (&C)"
@@ -1666,223 +1666,223 @@ msgstr "取消 (&C)"
msgid "Don't show this dialog again."
msgstr "不要再顯示這提示訊息。"
-#: DlgItemProperties.cpp:164 DlgItemProperties.cpp:167
-#: DlgItemProperties.cpp:170 DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:168 DlgItemProperties.cpp:171
+#: DlgItemProperties.cpp:174 DlgItemProperties.cpp:177
msgid "Don't fetch tasks for "
msgstr "禁止取得新工作"
-#: DlgItemProperties.cpp:164
+#: DlgItemProperties.cpp:168
msgid "Project preference"
msgstr "您的偏好設定"
-#: DlgItemProperties.cpp:167
+#: DlgItemProperties.cpp:171
msgid "Account manager preference"
msgstr "帳號管理服務"
-#: DlgItemProperties.cpp:170
+#: DlgItemProperties.cpp:174
msgid "Project has no apps for "
msgstr "找不到計畫"
-#: DlgItemProperties.cpp:173
+#: DlgItemProperties.cpp:177
msgid "Client configuration excludes "
msgstr "用戶端帳號建立已停止"
-#: DlgItemProperties.cpp:177
+#: DlgItemProperties.cpp:181
msgid " work fetch deferred for"
msgstr " 閒置多久後執行工作"
-#: DlgItemProperties.cpp:178
+#: DlgItemProperties.cpp:182
msgid " work fetch deferral interval"
msgstr " 工作的延遲間隔"
-#: DlgItemProperties.cpp:209
+#: DlgItemProperties.cpp:213
msgid "Properties of project "
msgstr "專案細節"
-#: DlgItemProperties.cpp:213 DlgOptions.cpp:218
+#: DlgItemProperties.cpp:217 DlgOptions.cpp:218
msgid "General"
msgstr "一般"
-#: DlgItemProperties.cpp:214
+#: DlgItemProperties.cpp:218
msgid "Master URL"
msgstr "主要網址"
-#: DlgItemProperties.cpp:215
+#: DlgItemProperties.cpp:219
msgid "User name"
msgstr "用戶名稱"
-#: DlgItemProperties.cpp:216
+#: DlgItemProperties.cpp:220
msgid "Team name"
msgstr "團隊名稱"
-#: DlgItemProperties.cpp:217 ViewProjects.cpp:224
+#: DlgItemProperties.cpp:221 ViewProjects.cpp:224
msgid "Resource share"
msgstr "資源分享"
-#: DlgItemProperties.cpp:219
+#: DlgItemProperties.cpp:223
msgid "Scheduler RPC deferred for"
msgstr "請求被延遲"
-#: DlgItemProperties.cpp:222
+#: DlgItemProperties.cpp:226
msgid "File downloads deferred for"
msgstr "下載檔案被延遲"
-#: DlgItemProperties.cpp:225
+#: DlgItemProperties.cpp:229
msgid "File uploads deferred for"
msgstr "上傳檔案被延遲"
-#: DlgItemProperties.cpp:228
+#: DlgItemProperties.cpp:232
msgid "Computer ID"
msgstr "電腦辨識 ID"
-#: DlgItemProperties.cpp:230
+#: DlgItemProperties.cpp:234
msgid "Non CPU intensive"
msgstr "非 CPU 密集型"
-#: DlgItemProperties.cpp:230 DlgItemProperties.cpp:232
-#: DlgItemProperties.cpp:233 DlgItemProperties.cpp:235
-#: DlgItemProperties.cpp:238 DlgItemProperties.cpp:247
-#: DlgItemProperties.cpp:250 DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:234 DlgItemProperties.cpp:236
+#: DlgItemProperties.cpp:237 DlgItemProperties.cpp:239
+#: DlgItemProperties.cpp:242 DlgItemProperties.cpp:251
+#: DlgItemProperties.cpp:254 DlgItemProperties.cpp:257
msgid "yes"
msgstr "是"
-#: DlgItemProperties.cpp:232
+#: DlgItemProperties.cpp:236
msgid "Suspended via GUI"
msgstr "被使用者暫停"
-#: DlgItemProperties.cpp:232 DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:236 DlgItemProperties.cpp:237
msgid "no"
msgstr "否"
-#: DlgItemProperties.cpp:233
+#: DlgItemProperties.cpp:237
msgid "Don't request more work"
msgstr "不允許新的工作"
-#: DlgItemProperties.cpp:235
+#: DlgItemProperties.cpp:239
msgid "Scheduler call in progress"
msgstr "排程器請求進行中"
-#: DlgItemProperties.cpp:238
+#: DlgItemProperties.cpp:242
msgid "Trickle-up pending"
msgstr "排程器請求中"
-#: DlgItemProperties.cpp:241 DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:245 DlgItemProperties.cpp:247
msgid "Host location"
msgstr "此主機總計"
-#: DlgItemProperties.cpp:243
+#: DlgItemProperties.cpp:247
msgid "default"
msgstr "預設"
-#: DlgItemProperties.cpp:247
+#: DlgItemProperties.cpp:251
msgid "Added via account manager"
msgstr "加入帳號管理服務"
-#: DlgItemProperties.cpp:250
+#: DlgItemProperties.cpp:254
msgid "Remove when tasks done"
msgstr "工作完成後退出"
-#: DlgItemProperties.cpp:253
+#: DlgItemProperties.cpp:257
msgid "Ended"
msgstr "已結束"
-#: DlgItemProperties.cpp:255
+#: DlgItemProperties.cpp:259
msgid "Credit"
msgstr "積分"
-#: DlgItemProperties.cpp:256
+#: DlgItemProperties.cpp:260
msgid "User"
msgstr "使用者"
-#: DlgItemProperties.cpp:263
+#: DlgItemProperties.cpp:267
msgid "Host"
msgstr "主機"
-#: DlgItemProperties.cpp:272
+#: DlgItemProperties.cpp:276
msgid "Scheduling"
msgstr "設定"
-#: DlgItemProperties.cpp:273
+#: DlgItemProperties.cpp:277
msgid "Scheduling priority"
msgstr "設定優先權"
-#: DlgItemProperties.cpp:274
+#: DlgItemProperties.cpp:278
msgid "CPU"
msgstr "CPU"
-#: DlgItemProperties.cpp:298
+#: DlgItemProperties.cpp:302
msgid "Duration correction factor"
msgstr "時間校正參數"
-#: DlgItemProperties.cpp:312
+#: DlgItemProperties.cpp:316
msgid "Properties of task "
msgstr "工作細節"
-#: DlgItemProperties.cpp:324 ViewWork.cpp:238
+#: DlgItemProperties.cpp:328 ViewWork.cpp:238
msgid "Application"
msgstr "應用程式"
-#: DlgItemProperties.cpp:325
-msgid "Workunit name"
-msgstr "工作名稱"
+#: DlgItemProperties.cpp:329 ViewWork.cpp:239
+msgid "Name"
+msgstr "名稱"
-#: DlgItemProperties.cpp:326
+#: DlgItemProperties.cpp:330
msgid "State"
msgstr "狀態"
-#: DlgItemProperties.cpp:329
+#: DlgItemProperties.cpp:333
msgid "Received"
msgstr "獲得時間"
-#: DlgItemProperties.cpp:332
+#: DlgItemProperties.cpp:336
msgid "Report deadline"
msgstr "回報期限"
-#: DlgItemProperties.cpp:334
+#: DlgItemProperties.cpp:338
msgid "Resources"
msgstr "資源"
-#: DlgItemProperties.cpp:337
+#: DlgItemProperties.cpp:341
msgid "Estimated computation size"
msgstr "預估的工作大小"
-#: DlgItemProperties.cpp:340
+#: DlgItemProperties.cpp:344
msgid "CPU time at last checkpoint"
msgstr "上次儲存的 CPU 時間"
-#: DlgItemProperties.cpp:341 DlgItemProperties.cpp:356
+#: DlgItemProperties.cpp:345 DlgItemProperties.cpp:360
msgid "CPU time"
msgstr "CPU 時間"
-#: DlgItemProperties.cpp:343 DlgItemProperties.cpp:357
+#: DlgItemProperties.cpp:347 DlgItemProperties.cpp:361
msgid "Elapsed time"
msgstr "執行時間"
-#: DlgItemProperties.cpp:345
+#: DlgItemProperties.cpp:349
msgid "Estimated time remaining"
msgstr "預估剩餘時間"
-#: DlgItemProperties.cpp:346
+#: DlgItemProperties.cpp:350
msgid "Fraction done"
msgstr "完成度"
-#: DlgItemProperties.cpp:347
+#: DlgItemProperties.cpp:351
msgid "Virtual memory size"
msgstr "虛擬記憶體大小"
-#: DlgItemProperties.cpp:348
+#: DlgItemProperties.cpp:352
msgid "Working set size"
msgstr "記憶體大小"
-#: DlgItemProperties.cpp:350
+#: DlgItemProperties.cpp:354
msgid "Directory"
msgstr "工作目錄"
-#: DlgItemProperties.cpp:353
+#: DlgItemProperties.cpp:357
msgid "Process ID"
msgstr "程序 ID"
-#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:810
+#: DlgItemProperties.cpp:427 ViewWork.cpp:1032 sg_TaskPanel.cpp:823
msgid "Local: "
msgstr "本地:"
@@ -1970,7 +1970,7 @@ msgstr "如不需要請留空"
msgid "User Name:"
msgstr "使用者名稱:"
-#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:151
+#: DlgOptions.cpp:317 DlgOptions.cpp:381 DlgSelectComputer.cpp:152
#: ProxyPage.cpp:346 ProxyPage.cpp:366
msgid "Password:"
msgstr "密碼:"
@@ -2028,19 +2028,19 @@ msgid ""
"effect, you must restart the %s."
msgstr "%s 的語言已變更 。為了使其生效, 您必須重新啟動 %s。"
-#: DlgSelectComputer.cpp:90
+#: DlgSelectComputer.cpp:91
#, c-format
msgid "%s - Select Computer"
msgstr "%s - 選擇電腦"
-#: DlgSelectComputer.cpp:124
+#: DlgSelectComputer.cpp:125
#, c-format
msgid ""
"Another instance of %s is already running \n"
"on this computer. Please select a client to monitor."
msgstr "另一個 %s 的案例已經在目前的運算上執行,請選擇想要監控的客戶端。"
-#: DlgSelectComputer.cpp:142
+#: DlgSelectComputer.cpp:143
msgid "Host name:"
msgstr "主機名稱:"
@@ -2230,206 +2230,206 @@ msgstr "研究"
msgid "Learn about the projects hosted at World Community Grid"
msgstr "於 World Community Grid 學習更多有關此專案資訊"
-#: MainDocument.cpp:585
+#: MainDocument.cpp:583
msgid "Starting client"
msgstr "正在啟動客戶端"
-#: MainDocument.cpp:593
+#: MainDocument.cpp:591
msgid "Connecting to client"
msgstr "重新連線用戶端中"
-#: MainDocument.cpp:1185
+#: MainDocument.cpp:1195
msgid "Retrieving system state; please wait..."
msgstr "取回系統狀態中;請稍候..."
-#: MainDocument.cpp:1806
+#: MainDocument.cpp:1816
msgid "Missing application"
msgstr "應用程式不存在"
-#: MainDocument.cpp:1807
+#: MainDocument.cpp:1817
msgid ""
"Please download and install the CoRD application from http://cord."
"sourceforge.net"
msgstr "請從 http://cord.sourceforge.net 下載並安裝 CoRD 程式。"
-#: MainDocument.cpp:2422
+#: MainDocument.cpp:2432
msgid "on batteries"
msgstr "正以電池供電"
-#: MainDocument.cpp:2423
+#: MainDocument.cpp:2433
msgid "computer is in use"
msgstr "電腦正使用中"
-#: MainDocument.cpp:2424
+#: MainDocument.cpp:2434
msgid "user request"
msgstr "用戶的請求"
-#: MainDocument.cpp:2425
+#: MainDocument.cpp:2435
msgid "time of day"
msgstr "每日時段"
-#: MainDocument.cpp:2426
+#: MainDocument.cpp:2436
msgid "CPU benchmarks in progress"
msgstr "進行 CPU 效能測試"
-#: MainDocument.cpp:2427
+#: MainDocument.cpp:2437
msgid "need disk space - check preferences"
msgstr "硬碟空間不足 - 請檢查偏好設定"
-#: MainDocument.cpp:2428
+#: MainDocument.cpp:2438
msgid "computer is not in use"
msgstr "電腦未使用"
-#: MainDocument.cpp:2429
+#: MainDocument.cpp:2439
msgid "starting up"
msgstr "正在啟動中"
-#: MainDocument.cpp:2430
+#: MainDocument.cpp:2440
msgid "an exclusive app is running"
msgstr "有排斥的應用程式正在執行"
-#: MainDocument.cpp:2431
+#: MainDocument.cpp:2441
msgid "CPU is busy"
msgstr "CPU 忙碌中"
-#: MainDocument.cpp:2432
+#: MainDocument.cpp:2442
msgid "network bandwidth limit exceeded"
msgstr "網路使用量超出限制"
-#: MainDocument.cpp:2433
+#: MainDocument.cpp:2443
msgid "requested by operating system"
msgstr "作業系統的請求"
-#: MainDocument.cpp:2435
+#: MainDocument.cpp:2445
msgid "unknown reason"
msgstr "未知原因"
-#: MainDocument.cpp:2457
+#: MainDocument.cpp:2467
msgid "GPU missing, "
msgstr "沒有可用的 GPU,"
-#: MainDocument.cpp:2464
+#: MainDocument.cpp:2474
msgid "New"
msgstr "新工作"
-#: MainDocument.cpp:2468
+#: MainDocument.cpp:2478
msgid "Download failed"
msgstr "下載失敗"
-#: MainDocument.cpp:2470
+#: MainDocument.cpp:2480
msgid "Downloading"
msgstr "下載中"
-#: MainDocument.cpp:2472 MainDocument.cpp:2542
+#: MainDocument.cpp:2482 MainDocument.cpp:2552
msgid " (suspended - "
msgstr " (已暫止 - "
-#: MainDocument.cpp:2480
+#: MainDocument.cpp:2490
msgid "Project suspended by user"
msgstr "專案被使用者暫止"
-#: MainDocument.cpp:2482
+#: MainDocument.cpp:2492
msgid "Task suspended by user"
msgstr "被使用者暫止"
-#: MainDocument.cpp:2484
+#: MainDocument.cpp:2494
msgid "Suspended - "
msgstr "已暫止 -"
# 75%
-#: MainDocument.cpp:2490
+#: MainDocument.cpp:2500
msgid "GPU suspended - "
msgstr "GPU 已暫止 -"
-#: MainDocument.cpp:2497
+#: MainDocument.cpp:2507
msgid "Waiting for memory"
msgstr "等待記憶體釋放"
-#: MainDocument.cpp:2499
+#: MainDocument.cpp:2509
msgid "Waiting for shared memory"
msgstr "等待共享記憶體釋放"
-#: MainDocument.cpp:2502
+#: MainDocument.cpp:2512
msgid "Running, high priority"
msgstr "執行中,高優先權"
-#: MainDocument.cpp:2504
+#: MainDocument.cpp:2514
msgid "Running"
msgstr "運行中"
-#: MainDocument.cpp:2507
+#: MainDocument.cpp:2517
msgid " (non-CPU-intensive)"
msgstr " (非 CPU 密集型)"
-#: MainDocument.cpp:2510
+#: MainDocument.cpp:2520
msgid "Waiting to run"
msgstr "等待執行"
-#: MainDocument.cpp:2512 MainDocument.cpp:2518
+#: MainDocument.cpp:2522 MainDocument.cpp:2528
msgid "Ready to start"
msgstr "準備開始"
-#: MainDocument.cpp:2522
+#: MainDocument.cpp:2532
msgid " (Scheduler wait: "
msgstr " (排程器等待: "
-#: MainDocument.cpp:2526
+#: MainDocument.cpp:2536
msgid " (Scheduler wait)"
msgstr " (排程器等待)"
-#: MainDocument.cpp:2530
+#: MainDocument.cpp:2540
msgid " (Waiting for network access)"
msgstr " (正等待網存取)"
-#: MainDocument.cpp:2534
+#: MainDocument.cpp:2544
msgid "Computation error"
msgstr "運算錯誤"
-#: MainDocument.cpp:2538
+#: MainDocument.cpp:2548
msgid "Upload failed"
msgstr "上傳失敗"
-#: MainDocument.cpp:2540
+#: MainDocument.cpp:2550
msgid "Uploading"
msgstr "上傳中"
-#: MainDocument.cpp:2551
+#: MainDocument.cpp:2561
msgid "Aborted by user"
msgstr "被使用者中止"
-#: MainDocument.cpp:2554
+#: MainDocument.cpp:2564
msgid "Aborted by project"
msgstr "被專案中止"
-#: MainDocument.cpp:2557
+#: MainDocument.cpp:2567
msgid "Aborted: not started by deadline"
msgstr "已中止:回報期限前尚未執行"
-#: MainDocument.cpp:2560
+#: MainDocument.cpp:2570
msgid "Aborted: disk limit exceeded"
msgstr "已中止:硬碟配置容量不足"
-#: MainDocument.cpp:2563
+#: MainDocument.cpp:2573
msgid "Aborted: run time limit exceeded"
msgstr "已中止:超過回報期限"
-#: MainDocument.cpp:2566
+#: MainDocument.cpp:2576
msgid "Aborted: memory limit exceeded"
msgstr "已中止:記憶體不足"
-#: MainDocument.cpp:2569
+#: MainDocument.cpp:2579
msgid "Aborted"
msgstr "已中止"
-#: MainDocument.cpp:2574
+#: MainDocument.cpp:2584
msgid "Acknowledged"
msgstr "已認可"
-#: MainDocument.cpp:2576
+#: MainDocument.cpp:2586
msgid "Ready to report"
msgstr "準備回報"
-#: MainDocument.cpp:2578
+#: MainDocument.cpp:2588
#, c-format
msgid "Error: invalid state '%d'"
msgstr "錯誤: 無效狀態「%d」"
@@ -2481,61 +2481,61 @@ msgstr "請檢查您的帳號名稱和密碼後再試一次。"
msgid "Check the email address and password, and try again."
msgstr "請檢查您的電子郵件地址和密碼後再試一次。"
-#: NoticeListCtrl.cpp:221
+#: NoticeListCtrl.cpp:222
msgid "more..."
msgstr "更多。。。"
-#: ProjectInfoPage.cpp:479 ProjectInfoPage.cpp:786 ProjectInfoPage.cpp:790
+#: ProjectInfoPage.cpp:477 ProjectInfoPage.cpp:778 ProjectInfoPage.cpp:782
msgid "All"
msgstr "全部"
-#: ProjectInfoPage.cpp:617
+#: ProjectInfoPage.cpp:615
msgid "Choose a project"
msgstr "請選擇專案"
-#: ProjectInfoPage.cpp:621
+#: ProjectInfoPage.cpp:619
msgid "To choose a project, click its name or type its URL below."
msgstr "選擇一個專案,點選下面的名稱或在下方輸入專案的網址。"
-#: ProjectInfoPage.cpp:625
+#: ProjectInfoPage.cpp:623
msgid "Categories:"
msgstr "分類:"
-#: ProjectInfoPage.cpp:629 sg_ProjectPanel.cpp:89
+#: ProjectInfoPage.cpp:627 sg_ProjectPanel.cpp:89
msgid "Projects:"
msgstr "專案:"
-#: ProjectInfoPage.cpp:633
+#: ProjectInfoPage.cpp:631
msgid "Project details"
msgstr "專案細節"
-#: ProjectInfoPage.cpp:637
+#: ProjectInfoPage.cpp:635
msgid "Research area:"
msgstr "研究領域:"
-#: ProjectInfoPage.cpp:641
+#: ProjectInfoPage.cpp:639
msgid "Organization:"
msgstr "機構:"
-#: ProjectInfoPage.cpp:645
+#: ProjectInfoPage.cpp:643
msgid "Web site:"
msgstr "網站:"
-#: ProjectInfoPage.cpp:649
+#: ProjectInfoPage.cpp:647
msgid "Supported systems:"
msgstr "支援的作業系統:"
-#: ProjectInfoPage.cpp:653
+#: ProjectInfoPage.cpp:651
msgid "Project URL:"
msgstr "專案網址:"
-#: ProjectInfoPage.cpp:834
+#: ProjectInfoPage.cpp:826
msgid ""
"This project may not have work for your type of computer. Do you want to "
"add it anyway?"
msgstr "這個專案可能沒有符合您電腦的工作。您確定要加入嗎?"
-#: ProjectInfoPage.cpp:858
+#: ProjectInfoPage.cpp:850
msgid "You already added this project. Please choose a different project."
msgstr "您已經加入本專案。請選擇其他的專案。"
@@ -2543,11 +2543,11 @@ msgstr "您已經加入本專案。請選擇其他的專案。"
msgid "Communicating with project."
msgstr "與伺服器通訊中。"
-#: ProjectProcessingPage.cpp:507
+#: ProjectProcessingPage.cpp:509
msgid "Required files not found on the server."
msgstr "請求的檔案並不存在於伺服器中。"
-#: ProjectProcessingPage.cpp:510 ProjectProcessingPage.cpp:572
+#: ProjectProcessingPage.cpp:512 ProjectProcessingPage.cpp:574
msgid "An internal server error has occurred."
msgstr "內部伺服器發生錯誤。"
@@ -2650,8 +2650,8 @@ msgid "I agree to the terms of use."
msgstr "我同意使用條款"
#: TermsOfUsePage.cpp:237
-msgid "I do not agree with the terms of use."
-msgstr "我不同意使用條款"
+msgid "I do not agree to the terms of use."
+msgstr "我不同意使用條款。"
#: UnavailablePage.cpp:183
msgid "Project temporarily unavailable"
@@ -2740,7 +2740,7 @@ msgstr "「%s」不是有效的主機名稱。"
msgid "'%s' does not contain a valid path."
msgstr "「%s」不是有效的路徑。"
-#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1976
+#: ViewMessages.cpp:84 ViewProjects.cpp:170 ViewStatistics.cpp:1978
#: ViewTransfers.cpp:160 ViewWork.cpp:183
msgid "Commands"
msgstr "指令"
@@ -2793,7 +2793,7 @@ msgstr "取得通知中;請稍後..."
msgid "There are no notices at this time."
msgstr "目前沒有訊息。"
-#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:772
+#: ViewNotices.cpp:99 sg_BoincSimpleFrame.cpp:776
msgid "Notices"
msgstr "訊息"
@@ -2808,7 +2808,7 @@ msgid ""
msgstr "回報所有已完成的工作;取得最新的積分與偏好設定資訊且儘可能的取得工作。"
#: ViewProjects.cpp:181 ViewProjects.cpp:722 ViewWork.cpp:208 ViewWork.cpp:801
-#: sg_BoincSimpleFrame.cpp:753 sg_ProjectCommandPopup.cpp:67
+#: sg_BoincSimpleFrame.cpp:757 sg_ProjectCommandPopup.cpp:67
#: sg_ProjectCommandPopup.cpp:113 sg_TaskCommandPopup.cpp:66
#: sg_TaskCommandPopup.cpp:106
msgid "Suspend"
@@ -3039,135 +3039,135 @@ msgstr "閒置空間:"
msgid "used by other programs: "
msgstr "其他程式使用:"
-#: ViewStatistics.cpp:1203
+#: ViewStatistics.cpp:1205
msgid "User Total"
msgstr "使用者總計"
-#: ViewStatistics.cpp:1204
+#: ViewStatistics.cpp:1206
msgid "User Average"
msgstr "使用者平均"
-#: ViewStatistics.cpp:1205
+#: ViewStatistics.cpp:1207
msgid "Host Total"
msgstr "此主機總計"
-#: ViewStatistics.cpp:1206
+#: ViewStatistics.cpp:1208
msgid "Host Average"
msgstr "此主機平均"
-#: ViewStatistics.cpp:1353
+#: ViewStatistics.cpp:1355
#, c-format
msgid "Last update: %.0f days ago"
msgstr "上次更新: %.0f 天前"
-#: ViewStatistics.cpp:1980
+#: ViewStatistics.cpp:1982
msgid "Show user total"
msgstr "顯示使用者總計"
-#: ViewStatistics.cpp:1981
+#: ViewStatistics.cpp:1983
msgid "Show total credit for user"
msgstr "顯示使用者的總積分"
-#: ViewStatistics.cpp:1987
+#: ViewStatistics.cpp:1989
msgid "Show user average"
msgstr "顯示使用者平均"
-#: ViewStatistics.cpp:1988
+#: ViewStatistics.cpp:1990
msgid "Show average credit for user"
msgstr "顯示使用者的平均積分"
-#: ViewStatistics.cpp:1994
+#: ViewStatistics.cpp:1996
msgid "Show host total"
msgstr "顯示此主機總計"
-#: ViewStatistics.cpp:1995
+#: ViewStatistics.cpp:1997
msgid "Show total credit for host"
msgstr "顯示主機的總積分"
-#: ViewStatistics.cpp:2001
+#: ViewStatistics.cpp:2003
msgid "Show host average"
msgstr "顯示此主機平均"
-#: ViewStatistics.cpp:2002
+#: ViewStatistics.cpp:2004
msgid "Show average credit for host"
msgstr "顯示主機的平均積分"
-#: ViewStatistics.cpp:2011
+#: ViewStatistics.cpp:2013
msgid "< &Previous project"
msgstr "< 上一個專案 (&P)"
-#: ViewStatistics.cpp:2012
+#: ViewStatistics.cpp:2014
msgid "Show chart for previous project"
msgstr "顯示上個專案的統計圖"
-#: ViewStatistics.cpp:2017
+#: ViewStatistics.cpp:2019
msgid "&Next project >"
msgstr "下一個專案 (&N) >"
-#: ViewStatistics.cpp:2018
+#: ViewStatistics.cpp:2020
msgid "Show chart for next project"
msgstr "顯示下個專案的統計圖"
-#: ViewStatistics.cpp:2024 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2026 ViewStatistics.cpp:2416
msgid "Hide project list"
msgstr "隱藏專案列表"
-#: ViewStatistics.cpp:2025 ViewStatistics.cpp:2414
+#: ViewStatistics.cpp:2027 ViewStatistics.cpp:2416
msgid "Use entire area for graphs"
msgstr "用整個區域用來顯示統計圖"
-#: ViewStatistics.cpp:2030
+#: ViewStatistics.cpp:2032
msgid "Mode view"
msgstr "模式檢視"
-#: ViewStatistics.cpp:2034
+#: ViewStatistics.cpp:2036
msgid "One project"
msgstr "單一專案"
-#: ViewStatistics.cpp:2035
+#: ViewStatistics.cpp:2037
msgid "Show one chart with selected project"
msgstr "顯示所選專案於同一統計圖"
-#: ViewStatistics.cpp:2041
+#: ViewStatistics.cpp:2043
msgid "All projects (separate)"
msgstr "所有專案 (單獨)"
-#: ViewStatistics.cpp:2042
+#: ViewStatistics.cpp:2044
msgid "Show all projects, one chart per project"
msgstr "顯示所選專案於個別統計圖"
-#: ViewStatistics.cpp:2048
+#: ViewStatistics.cpp:2050
msgid "All projects (together)"
msgstr "所有專案 (綜合)"
-#: ViewStatistics.cpp:2049
+#: ViewStatistics.cpp:2051
msgid "Show one chart with all projects"
msgstr "顯示所有專案於同一統計圖"
-#: ViewStatistics.cpp:2055
+#: ViewStatistics.cpp:2057
msgid "All projects (sum)"
msgstr "專案所有 (總計)"
-#: ViewStatistics.cpp:2056
+#: ViewStatistics.cpp:2058
msgid "Show one chart with sum of projects"
msgstr "顯示所有專案於同一統計圖"
-#: ViewStatistics.cpp:2077
+#: ViewStatistics.cpp:2079
msgid "Statistics"
msgstr "統計"
-#: ViewStatistics.cpp:2101 ViewStatistics.cpp:2122 ViewStatistics.cpp:2143
-#: ViewStatistics.cpp:2165 ViewStatistics.cpp:2186 ViewStatistics.cpp:2207
-#: ViewStatistics.cpp:2228 ViewStatistics.cpp:2249 ViewStatistics.cpp:2270
-#: ViewStatistics.cpp:2294
+#: ViewStatistics.cpp:2103 ViewStatistics.cpp:2124 ViewStatistics.cpp:2145
+#: ViewStatistics.cpp:2167 ViewStatistics.cpp:2188 ViewStatistics.cpp:2209
+#: ViewStatistics.cpp:2230 ViewStatistics.cpp:2251 ViewStatistics.cpp:2272
+#: ViewStatistics.cpp:2296
msgid "Updating charts..."
msgstr "更新圖表中..."
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Show project list"
msgstr "顯示專案列表"
-#: ViewStatistics.cpp:2418
+#: ViewStatistics.cpp:2420
msgid "Uses smaller area for graphs"
msgstr "用將較小的區域用來顯示統計圖"
@@ -3333,10 +3333,6 @@ msgstr "剩餘時間 (預估)"
msgid "Deadline"
msgstr "上傳期限"
-#: ViewWork.cpp:239
-msgid "Name"
-msgstr "名稱"
-
#: ViewWork.cpp:264
msgid "Tasks"
msgstr "工作"
@@ -3483,40 +3479,40 @@ msgstr "您真的要取消嗎?"
msgid "Question"
msgstr "問題"
-#: sg_BoincSimpleFrame.cpp:145
+#: sg_BoincSimpleFrame.cpp:149
msgid "Advanced View...\tCtrl+Shift+A"
msgstr "進階模式...\tCtrl+Shift+A"
-#: sg_BoincSimpleFrame.cpp:146
+#: sg_BoincSimpleFrame.cpp:150
msgid "Display the advanced graphical interface."
msgstr "顯示精簡 BOINC 圖形介面。"
-#: sg_BoincSimpleFrame.cpp:153
+#: sg_BoincSimpleFrame.cpp:157
msgid "Skin"
msgstr "面板"
-#: sg_BoincSimpleFrame.cpp:155
+#: sg_BoincSimpleFrame.cpp:159
msgid "Select the appearance of the user interface."
msgstr "選擇用戶的介面外觀"
-#: sg_BoincSimpleFrame.cpp:202
+#: sg_BoincSimpleFrame.cpp:206
#, c-format
msgid "&%s"
msgstr "&%s"
-#: sg_BoincSimpleFrame.cpp:386
+#: sg_BoincSimpleFrame.cpp:390
msgid "Default"
msgstr "預設"
-#: sg_BoincSimpleFrame.cpp:755
+#: sg_BoincSimpleFrame.cpp:759
msgid "Suspend Computing"
msgstr "暫停執行"
-#: sg_BoincSimpleFrame.cpp:756
+#: sg_BoincSimpleFrame.cpp:760
msgid "Resume Computing"
msgstr "繼續執行"
-#: sg_BoincSimpleFrame.cpp:773
+#: sg_BoincSimpleFrame.cpp:777
msgid "Open a window to view notices from projects or BOINC"
msgstr "開啟新視窗以觀看來至專案或 BOINC 的訊息"
@@ -3538,117 +3534,119 @@ msgid "Click OK to set preferences."
msgstr "點選 確定 來更新設定"
#: sg_DlgPreferences.cpp:278
-msgid "Click Clear to restore web-based settings."
-msgstr "點選 清除 來更新成網路上的設定"
+msgid ""
+"Click Clear to restore web-based settings for all preferences listed below."
+msgstr "點擊清除可將下列網站參數恢復到預設值。"
#: sg_DlgPreferences.cpp:285
-msgid "For additional settings, select Computing Preferences in "
-msgstr "更多的偏好設定,請切換至"
-
-#: sg_DlgPreferences.cpp:290
-msgid "the Advanced View."
-msgstr "進階模式。"
+msgid ""
+"For additional settings, select Computing Preferences in the Advanced View."
+msgstr "更多的偏好設定,請切換至進階模式。"
-#: sg_DlgPreferences.cpp:318
+#: sg_DlgPreferences.cpp:313
msgid "Do work only between:"
msgstr "只在此時段執行工作:"
-#: sg_DlgPreferences.cpp:340
+#: sg_DlgPreferences.cpp:335
msgid "Connect to internet only between:"
msgstr "只在此時段連上網路:"
-#: sg_DlgPreferences.cpp:362 sg_DlgPreferences.cpp:379
+#: sg_DlgPreferences.cpp:357 sg_DlgPreferences.cpp:374
msgid "Use no more than:"
msgstr "資源耗用不超過:"
-#: sg_DlgPreferences.cpp:375
+#: sg_DlgPreferences.cpp:370
msgid "of disk space"
msgstr "硬碟空間"
-#: sg_DlgPreferences.cpp:392
+#: sg_DlgPreferences.cpp:387
msgid "of the processor"
msgstr "CPU 使用率"
-#: sg_DlgPreferences.cpp:396
+#: sg_DlgPreferences.cpp:391
msgid "Do work while on battery?"
msgstr "以電池供電時要執行工作嗎?"
-#: sg_DlgPreferences.cpp:409
+#: sg_DlgPreferences.cpp:404
msgid "Do work after idle for:"
msgstr "閒置多久後執行工作:"
-#: sg_DlgPreferences.cpp:607 sg_DlgPreferences.cpp:610
-#: sg_DlgPreferences.cpp:686 sg_DlgPreferences.cpp:690
-#: sg_DlgPreferences.cpp:702 sg_DlgPreferences.cpp:706
-#: sg_DlgPreferences.cpp:849 sg_DlgPreferences.cpp:860
+#: sg_DlgPreferences.cpp:429
+msgid "Clear all local preferences listed above and close the dialog"
+msgstr "清除本機所有偏好設定並關閉此視窗"
+
+#: sg_DlgPreferences.cpp:602 sg_DlgPreferences.cpp:605
+#: sg_DlgPreferences.cpp:681 sg_DlgPreferences.cpp:685
+#: sg_DlgPreferences.cpp:697 sg_DlgPreferences.cpp:701
+#: sg_DlgPreferences.cpp:844 sg_DlgPreferences.cpp:855
msgid "Anytime"
msgstr "隨時"
-#: sg_DlgPreferences.cpp:643
+#: sg_DlgPreferences.cpp:638
msgid "100 MB"
msgstr "100 MB"
-#: sg_DlgPreferences.cpp:644
+#: sg_DlgPreferences.cpp:639
msgid "200 MB"
msgstr "200 MB"
-#: sg_DlgPreferences.cpp:645
+#: sg_DlgPreferences.cpp:640
msgid "500 MB"
msgstr "500 MB"
-#: sg_DlgPreferences.cpp:646
+#: sg_DlgPreferences.cpp:641
msgid "1 GB"
msgstr "1 GB"
-#: sg_DlgPreferences.cpp:647
+#: sg_DlgPreferences.cpp:642
msgid "2 GB"
msgstr "2 GB"
-#: sg_DlgPreferences.cpp:648
+#: sg_DlgPreferences.cpp:643
msgid "5 GB"
msgstr "5 GB"
-#: sg_DlgPreferences.cpp:649
+#: sg_DlgPreferences.cpp:644
msgid "10 GB"
msgstr "10 GB"
-#: sg_DlgPreferences.cpp:650
+#: sg_DlgPreferences.cpp:645
msgid "20 GB"
msgstr "20 GB"
-#: sg_DlgPreferences.cpp:651
+#: sg_DlgPreferences.cpp:646
msgid "50 GB"
msgstr "50 GB"
-#: sg_DlgPreferences.cpp:652
+#: sg_DlgPreferences.cpp:647
msgid "100 GB"
msgstr "100 GB"
-#: sg_DlgPreferences.cpp:722
+#: sg_DlgPreferences.cpp:717
#, c-format
msgid "%d MB"
msgstr "%d MB"
-#: sg_DlgPreferences.cpp:724
+#: sg_DlgPreferences.cpp:719
#, c-format
msgid "%4.2f GB"
msgstr "%4.2f GB"
-#: sg_DlgPreferences.cpp:765
+#: sg_DlgPreferences.cpp:760
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: sg_DlgPreferences.cpp:801
+#: sg_DlgPreferences.cpp:796
msgid "0 (Run Always)"
msgstr "0 (持續執行)"
-#: sg_DlgPreferences.cpp:804
+#: sg_DlgPreferences.cpp:799
#, c-format
msgid "%d"
msgstr "%d"
-#: sg_DlgPreferences.cpp:1034
+#: sg_DlgPreferences.cpp:1029
msgid "Do you really want to clear all local preferences?\n"
msgstr "您真的要清除所有本機偏好設定嗎?\n"
@@ -3708,117 +3706,117 @@ msgstr ""
"您確定要中止工作「%s」嗎?\n"
"(進度: %s,狀態: %s)"
-#: sg_TaskPanel.cpp:451
+#: sg_TaskPanel.cpp:464
msgid "You don't have any projects. Please Add a Project."
msgstr "你沒有任何專案,請加入專案。"
-#: sg_TaskPanel.cpp:452
+#: sg_TaskPanel.cpp:465
msgid "Not available"
msgstr "不可行"
-#: sg_TaskPanel.cpp:463
+#: sg_TaskPanel.cpp:476
msgid "Tasks:"
msgstr "工作:"
-#: sg_TaskPanel.cpp:469
+#: sg_TaskPanel.cpp:482
msgid "Select a task to access"
msgstr "選擇要觀看的工作"
-#: sg_TaskPanel.cpp:480
+#: sg_TaskPanel.cpp:493
msgid "From:"
msgstr "專案:"
-#: sg_TaskPanel.cpp:534
+#: sg_TaskPanel.cpp:547
msgid "This task's progress"
msgstr "本工作的進度"
-#: sg_TaskPanel.cpp:552
+#: sg_TaskPanel.cpp:565
msgid "Task Commands"
msgstr "工作指令"
-#: sg_TaskPanel.cpp:553
+#: sg_TaskPanel.cpp:566
msgid "Pop up a menu of commands to apply to this task"
msgstr "跳出一個適用於目前工作的指令選單"
-#: sg_TaskPanel.cpp:688
+#: sg_TaskPanel.cpp:701
#, c-format
msgid "Application: %s"
msgstr "應用程式: %s"
-#: sg_TaskPanel.cpp:711
+#: sg_TaskPanel.cpp:724
#, c-format
msgid "%.3f%%"
msgstr "%.3f%%"
-#: sg_TaskPanel.cpp:719
+#: sg_TaskPanel.cpp:732
msgid "Application: Not available"
msgstr "應用程式:不可行"
-#: sg_TaskPanel.cpp:819
+#: sg_TaskPanel.cpp:832
msgid "Not Available"
msgstr "不可行"
-#: sg_TaskPanel.cpp:834
+#: sg_TaskPanel.cpp:847
#, c-format
msgid "Elapsed: %s"
msgstr "執行時間:%s"
# 84%
-#: sg_TaskPanel.cpp:848
+#: sg_TaskPanel.cpp:861
#, c-format
msgid "Remaining (estimated): %s"
msgstr "剩餘時間:%s"
-#: sg_TaskPanel.cpp:863
+#: sg_TaskPanel.cpp:876
#, c-format
msgid "Status: %s"
msgstr "狀態:%s"
-#: sg_TaskPanel.cpp:1210
+#: sg_TaskPanel.cpp:1223
msgid "Retrieving current status."
msgstr "取回目前狀態中。"
-#: sg_TaskPanel.cpp:1216
+#: sg_TaskPanel.cpp:1229
msgid "Downloading work from the server."
msgstr "正從伺服器下載工作。"
-#: sg_TaskPanel.cpp:1221
+#: sg_TaskPanel.cpp:1234
msgid "Processing Suspended: Running On Batteries."
msgstr "處理已暫止: 正以電池供電"
-#: sg_TaskPanel.cpp:1223
+#: sg_TaskPanel.cpp:1236
msgid "Processing Suspended: User Active."
msgstr "處理已暫止: 使用者正在操作"
-#: sg_TaskPanel.cpp:1225
+#: sg_TaskPanel.cpp:1238
msgid "Processing Suspended: User paused processing."
msgstr "處理已暫止: 被使用者暫停"
-#: sg_TaskPanel.cpp:1227
+#: sg_TaskPanel.cpp:1240
msgid "Processing Suspended: Time of Day."
msgstr "處理已暫止: 不在設定時間內"
-#: sg_TaskPanel.cpp:1229
+#: sg_TaskPanel.cpp:1242
msgid "Processing Suspended: Benchmarks Running."
msgstr "處理已暫止: 正在執行效能測試"
-#: sg_TaskPanel.cpp:1231
+#: sg_TaskPanel.cpp:1244
msgid "Processing Suspended."
msgstr "處理已暫止。"
-#: sg_TaskPanel.cpp:1235
+#: sg_TaskPanel.cpp:1248
msgid "Waiting to contact project servers."
msgstr "正在等待連到專案伺服器。"
-#: sg_TaskPanel.cpp:1239 sg_TaskPanel.cpp:1248
+#: sg_TaskPanel.cpp:1252 sg_TaskPanel.cpp:1261
msgid "Retrieving current status"
msgstr "取回目前狀態中"
-#: sg_TaskPanel.cpp:1243
+#: sg_TaskPanel.cpp:1256
msgid "No work available to process"
msgstr "無工作可用"
-#: sg_TaskPanel.cpp:1245
+#: sg_TaskPanel.cpp:1258
msgid "Unable to connect to the core client"
msgstr "無法連到核心用戶端"
@@ -3860,6 +3858,24 @@ msgstr "顯示全部"
msgid "Quit %s"
msgstr "離該 %s"
+#~ msgid "I do not agree with the terms of use."
+#~ msgstr "我不同意使用條款"
+
+#~ msgid "Click Clear to restore web-based settings."
+#~ msgstr "點選 清除 來更新成網路上的設定"
+
+#~ msgid "For additional settings, select Computing Preferences in "
+#~ msgstr "更多的偏好設定,請切換至"
+
+#~ msgid "the Advanced View."
+#~ msgstr "進階模式。"
+
+#~ msgid "Workunit name"
+#~ msgstr "工作名稱"
+
+#~ msgid "invalid float"
+#~ msgstr "無效的浮點數"
+
#~ msgid "Display the advanced (accessible) graphical interface."
#~ msgstr "顯示精簡 BOINC 圖形介面。"
diff --git a/locale/zh_TW/BOINC-Project-Generic.po b/locale/zh_TW/BOINC-Project-Generic.po
index 8b2d726..0515909 100644
--- a/locale/zh_TW/BOINC-Project-Generic.po
+++ b/locale/zh_TW/BOINC-Project-Generic.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at boinc.berkeley.edu>\n"
-"POT-Creation-Date: 2013-12-17 00:00 PST\n"
-"PO-Revision-Date: 2013-11-26 12:36+0000\n"
-"Last-Translator: Hank <yihhann at gmail.com>\n"
+"POT-Creation-Date: 2014-01-10 00:00 PST\n"
+"PO-Revision-Date: 2014-03-04 06:54+0000\n"
+"Last-Translator: 宇謙 <df910105 at yahoo.com.tw>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
@@ -17,7 +17,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Pootle 2.5.0\n"
"X-Poedit-SourceCharset: utf-8\n"
-"X-POOTLE-MTIME: 1385469401.0\n"
+"X-POOTLE-MTIME: 1393916097.0\n"
msgid "LANG_NAME_NATIVE"
msgstr "繁體中文 ( 台灣 )"
@@ -187,7 +187,7 @@ msgstr "搜尋討論版"
msgid "Advanced search"
msgstr "進階搜尋"
-#: ../inc/forum.inc:132 ../inc/user.inc:252 ../user/pm.php:69
+#: ../inc/forum.inc:132 ../inc/user.inc:253 ../user/pm.php:69
#: ../user/pm.php:133
msgid "Private messages"
msgstr "私人訊息"
@@ -197,8 +197,8 @@ msgstr "私人訊息"
msgid "Questions and Answers"
msgstr "問與答"
-#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:249
-#: ../inc/user.inc:374 ../user/bs_sample_index.php:62
+#: ../inc/forum.inc:151 ../inc/forum.inc:183 ../inc/user.inc:250
+#: ../inc/user.inc:375 ../user/bs_sample_index.php:62
#: ../user/forum_forum.php:73 ../user/sample_index.php:129
#: ../project.sample/project.inc:43
msgid "Message boards"
@@ -264,7 +264,7 @@ msgstr "未讀"
msgid "Message %1"
msgstr "訊息%1"
-#: ../inc/forum.inc:624 ../inc/user.inc:330 ../user/forum_forum.php:174
+#: ../inc/forum.inc:624 ../inc/user.inc:331 ../user/forum_forum.php:174
msgid "hidden"
msgstr "隱藏"
@@ -465,7 +465,7 @@ msgstr "不能回覆隱藏主題"
msgid "Thread"
msgstr "主題"
-#: ../inc/forum.inc:1174 ../inc/team.inc:127 ../user/forum_forum.php:136
+#: ../inc/forum.inc:1174 ../inc/team.inc:128 ../user/forum_forum.php:136
#: ../user/forum_index.php:94
msgid "Posts"
msgstr "投稿"
@@ -474,7 +474,7 @@ msgstr "投稿"
msgid "Views"
msgstr "瀏覽數"
-#: ../inc/forum.inc:1177 ../inc/team.inc:127 ../user/forum_forum.php:139
+#: ../inc/forum.inc:1177 ../inc/team.inc:128 ../user/forum_forum.php:139
#: ../user/forum_help_desk.php:46 ../user/forum_index.php:95
msgid "Last post"
msgstr "最新的文章"
@@ -512,7 +512,7 @@ msgid "Home"
msgstr "家庭"
#: ../inc/host.inc:57 ../inc/prefs.inc:641 ../inc/prefs.inc:1049
-#: ../user/server_status.php:329
+#: ../user/server_status.php:314
msgid "Work"
msgstr "工作"
@@ -578,9 +578,9 @@ msgid "Created"
msgstr "建立日期"
#: ../inc/host.inc:113 ../inc/host.inc:226 ../inc/host.inc:231
-#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:214
-#: ../inc/team.inc:219 ../inc/team.inc:221 ../inc/team.inc:363
-#: ../inc/team.inc:368 ../inc/user.inc:125 ../inc/user.inc:138
+#: ../inc/host.inc:681 ../inc/team.inc:101 ../inc/team.inc:215
+#: ../inc/team.inc:220 ../inc/team.inc:222 ../inc/team.inc:364
+#: ../inc/team.inc:369 ../inc/user.inc:125 ../inc/user.inc:138
#: ../user/profile_search_action.php:43
#: ../user/team_change_founder_form.php:78 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:41 ../user/top_users.php:54
@@ -756,7 +756,7 @@ msgstr "最後的連接"
msgid "Computer info"
msgstr "電腦訊息"
-#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:356
+#: ../inc/host.inc:221 ../inc/host.inc:676 ../inc/team.inc:357
#: ../user/top_users.php:48
msgid "Rank"
msgstr "排行"
@@ -765,9 +765,9 @@ msgstr "排行"
msgid "Avg. credit"
msgstr "平均積分"
-#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:215
-#: ../inc/team.inc:224 ../inc/team.inc:226 ../inc/team.inc:362
-#: ../inc/team.inc:367 ../inc/user.inc:139
+#: ../inc/host.inc:230 ../inc/team.inc:102 ../inc/team.inc:216
+#: ../inc/team.inc:225 ../inc/team.inc:227 ../inc/team.inc:363
+#: ../inc/team.inc:368 ../inc/user.inc:139
#: ../user/team_change_founder_form.php:79 ../user/team_email_list.php:64
#: ../user/team_remove_inactive_form.php:42 ../user/top_users.php:53
#: ../user/top_users.php:58
@@ -855,8 +855,8 @@ msgstr "只顯示過去 30 天內活躍的電腦"
msgid "Computer ID"
msgstr "電腦 ID"
-#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:209
-#: ../inc/team.inc:357 ../inc/user.inc:199 ../user/account_finish.php:41
+#: ../inc/host.inc:669 ../inc/result.inc:628 ../inc/team.inc:210
+#: ../inc/team.inc:358 ../inc/user.inc:199 ../user/account_finish.php:41
#: ../user/create_account_form.php:79 ../user/team_admins.php:62
#: ../user/team_change_founder_form.php:77 ../user/team_email_list.php:64
#: ../user/top_users.php:49 ../user/user_search.php:139
@@ -892,7 +892,7 @@ msgstr "信箱"
msgid "Write"
msgstr "寫信"
-#: ../inc/pm.inc:33 ../inc/user.inc:377
+#: ../inc/pm.inc:33 ../inc/user.inc:378
msgid "Send private message"
msgstr "傳送私人訊息"
@@ -1621,7 +1621,7 @@ msgstr "上傳時間<br />或者上傳期限"
msgid "explain"
msgstr "說明"
-#: ../inc/result.inc:376 ../user/server_status.php:256
+#: ../inc/result.inc:376 ../user/server_status.php:241
msgid "Status"
msgstr "狀態"
@@ -1713,9 +1713,9 @@ msgstr "關鍵字"
msgid "Find teams with these words in their names or descriptions"
msgstr "尋找名稱或描述中包含這些關鍵字的團隊"
-#: ../inc/team.inc:43 ../inc/team.inc:121 ../inc/team.inc:232
-#: ../inc/team.inc:372 ../inc/team.inc:456 ../inc/user.inc:205
-#: ../inc/user.inc:316 ../user/account_finish.php:45
+#: ../inc/team.inc:43 ../inc/team.inc:122 ../inc/team.inc:233
+#: ../inc/team.inc:373 ../inc/team.inc:455 ../inc/user.inc:205
+#: ../inc/user.inc:317 ../user/account_finish.php:45
#: ../user/create_account_form.php:98 ../user/edit_user_info_form.php:38
#: ../user/profile_search_action.php:42 ../user/team_email_list.php:64
#: ../user/team_search.php:72 ../user/top_users.php:63
@@ -1723,7 +1723,7 @@ msgstr "尋找名稱或描述中包含這些關鍵字的團隊"
msgid "Country"
msgstr "國家"
-#: ../inc/team.inc:49 ../inc/team.inc:454
+#: ../inc/team.inc:49 ../inc/team.inc:453
msgid "Type of team"
msgstr "團隊類型"
@@ -1751,8 +1751,8 @@ msgstr "你已發起過請求"
msgid "founder response deadline is %1"
msgstr "原創始人的回覆期限是 %1"
-#: ../inc/team.inc:72 ../inc/team.inc:556 ../inc/user.inc:280
-#: ../inc/user.inc:370
+#: ../inc/team.inc:72 ../inc/team.inc:555 ../inc/user.inc:281
+#: ../inc/user.inc:371
msgid "None"
msgstr "未加入團隊"
@@ -1776,105 +1776,105 @@ msgstr "描述"
msgid "Web site"
msgstr "網站"
-#: ../inc/team.inc:119
+#: ../inc/team.inc:120
msgid "Cross-project stats"
msgstr "跨專案的統計網站"
-#: ../inc/team.inc:122 ../inc/team.inc:373 ../user/team_search.php:71
+#: ../inc/team.inc:123 ../inc/team.inc:374 ../user/team_search.php:71
msgid "Type"
msgstr "類型"
-#: ../inc/team.inc:126 ../user/team_manage.php:63
+#: ../inc/team.inc:127 ../user/team_manage.php:63
msgid "Message board"
msgstr "留言版"
-#: ../inc/team.inc:127 ../user/forum_forum.php:135 ../user/forum_index.php:93
+#: ../inc/team.inc:128 ../user/forum_forum.php:135 ../user/forum_index.php:93
msgid "Threads"
msgstr "主題"
-#: ../inc/team.inc:135
+#: ../inc/team.inc:136
msgid "Join this team"
msgstr "加入此團隊"
-#: ../inc/team.inc:136
+#: ../inc/team.inc:137
msgid ""
"Note: if 'OK to email' is set in your project preferences, joining a team "
"gives its founder access to your email address."
msgstr "如果您在專案偏好中設定了允許接收電子郵件,加入團隊後該團隊的創始人將可以取得您的電子郵件地址。"
-#: ../inc/team.inc:139
+#: ../inc/team.inc:140
msgid "Not accepting new members"
msgstr "不接受新成員加入"
-#: ../inc/team.inc:146
+#: ../inc/team.inc:147
msgid "Foundership change requested"
msgstr "創始人改變請求"
-#: ../inc/team.inc:147
+#: ../inc/team.inc:148
msgid "Respond by %1"
msgstr "回覆期限 %1"
-#: ../inc/team.inc:151
+#: ../inc/team.inc:152
msgid "Team foundership change"
msgstr "團隊創始人改變"
-#: ../inc/team.inc:155 ../inc/team.inc:358
+#: ../inc/team.inc:156 ../inc/team.inc:359
msgid "Members"
msgstr "成員"
-#: ../inc/team.inc:156 ../inc/team.inc:253
+#: ../inc/team.inc:157 ../inc/team.inc:254
msgid "Founder"
msgstr "創始人"
-#: ../inc/team.inc:168
+#: ../inc/team.inc:169
msgid "Admins"
msgstr "管理員"
-#: ../inc/team.inc:183
+#: ../inc/team.inc:184
msgid "New members in last day"
msgstr "昨天新加入的成員"
-#: ../inc/team.inc:184
+#: ../inc/team.inc:185
msgid "Total members"
msgstr "所有成員"
-#: ../inc/team.inc:184 ../inc/team.inc:185 ../inc/team.inc:186
+#: ../inc/team.inc:185 ../inc/team.inc:186 ../inc/team.inc:187
msgid "view"
msgstr "查看"
-#: ../inc/team.inc:185
+#: ../inc/team.inc:186
msgid "Active members"
msgstr "活躍的成員"
-#: ../inc/team.inc:186
+#: ../inc/team.inc:187
msgid "Members with credit"
msgstr "有積分的成員"
-#: ../inc/team.inc:255
+#: ../inc/team.inc:256
msgid "Admin"
msgstr "管理員"
-#: ../inc/team.inc:276 ../user/forum_user_posts.php:122
+#: ../inc/team.inc:277 ../user/forum_user_posts.php:122
#: ../user/top_hosts.php:93 ../user/top_teams.php:121
#: ../user/top_users.php:127
msgid "Previous %1"
msgstr "前 %1"
-#: ../inc/team.inc:280 ../user/forum_user_posts.php:131
+#: ../inc/team.inc:281 ../user/forum_user_posts.php:131
#: ../user/profile_search_action.php:61 ../user/top_hosts.php:98
#: ../user/top_teams.php:126 ../user/top_users.php:132
msgid "Next %1"
msgstr "後 %1"
-#: ../inc/team.inc:288
+#: ../inc/team.inc:289
msgid "No such team."
msgstr "沒有這個團隊。"
-#: ../inc/team.inc:301
+#: ../inc/team.inc:302
msgid "This operation requires foundership."
msgstr "本操作需要創始人權限。"
-#: ../inc/team.inc:325
+#: ../inc/team.inc:326
msgid "This operation requires team admin privileges"
msgstr "本操作需要團隊創始人的權限"
@@ -1884,53 +1884,53 @@ msgid ""
"be overwritten. Edit the %1BOINC-wide team%2 instead."
msgstr "警告:這是一個 BOINC 自動建立的團隊,您在此處做出的修改將很快會被覆蓋,請直接在 %1這裡%2 進行編輯。"
-#: ../inc/team.inc:429
+#: ../inc/team.inc:428
msgid ""
"%1Privacy note%2: if you create a team, your project preferences (resource "
"share, graphics preferences) will be visible to the public."
msgstr "%1隱私事項%2:如果你要建立一個團隊,則你的專案偏好(資源分享率,圖形偏好設定等)將會對團隊成員公開。"
-#: ../inc/team.inc:433
+#: ../inc/team.inc:432
msgid "Team name, text version"
msgstr "團隊名稱,文字版本"
-#: ../inc/team.inc:434
+#: ../inc/team.inc:433
msgid "Don't use HTML tags."
msgstr "請不要使用 HTML 標籤。"
-#: ../inc/team.inc:437
+#: ../inc/team.inc:436
msgid "Team name, HTML version"
msgstr "團隊名稱,HTML 版本"
-#: ../inc/team.inc:439 ../inc/team.inc:449
+#: ../inc/team.inc:438 ../inc/team.inc:448
msgid "You may use %1limited HTML tags%2."
msgstr "您可以使用 %1有限的 HTML 標籤%2。"
-#: ../inc/team.inc:440
+#: ../inc/team.inc:439
msgid "If you don't know HTML, leave this box blank."
msgstr "如果您不了解 HTML,請保持本編輯框為空。"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "URL of team web page, if any"
msgstr "團隊的網站 (如果有的話);"
-#: ../inc/team.inc:443
+#: ../inc/team.inc:442
msgid "without \"http://\""
msgstr "不含 “ http:// ”"
-#: ../inc/team.inc:444
+#: ../inc/team.inc:443
msgid "This URL will be linked to from the team's page on this site."
msgstr "這個網址將會從這個網頁連到團隊網站"
-#: ../inc/team.inc:447
+#: ../inc/team.inc:446
msgid "Description of team"
msgstr "團隊描述"
-#: ../inc/team.inc:463
+#: ../inc/team.inc:462
msgid "Accept new members?"
msgstr "是否接受新隊員加入?"
-#: ../inc/uotd.inc:30
+#: ../inc/uotd.inc:28
msgid "User profile"
msgstr "用戶檔案"
@@ -1963,7 +1963,7 @@ msgid "Computers on this account"
msgstr "本帳號所屬的電腦"
#: ../inc/user.inc:151 ../inc/user.inc:152 ../inc/user.inc:217
-#: ../inc/user.inc:242 ../inc/user.inc:328 ../inc/user.inc:412
+#: ../inc/user.inc:243 ../inc/user.inc:329 ../inc/user.inc:402
#: ../user/view_profile.php:64
msgid "View"
msgstr "查看"
@@ -1980,8 +1980,8 @@ msgstr "跨專案的統計網站"
msgid "Account"
msgstr "帳號"
-#: ../inc/user.inc:165 ../inc/user.inc:280 ../inc/user.inc:368
-#: ../inc/user.inc:370 ../user/user_search.php:139
+#: ../inc/user.inc:165 ../inc/user.inc:281 ../inc/user.inc:369
+#: ../inc/user.inc:371 ../user/user_search.php:139
msgid "Team"
msgstr "團隊"
@@ -2010,7 +2010,7 @@ msgstr "帳號資訊"
msgid "Email address"
msgstr "電子郵件地址"
-#: ../inc/user.inc:203 ../inc/user.inc:321
+#: ../inc/user.inc:203 ../inc/user.inc:322
msgid "URL"
msgstr "網址"
@@ -2018,7 +2018,7 @@ msgstr "網址"
msgid "Postal code"
msgstr "郵遞區號"
-#: ../inc/user.inc:207 ../inc/user.inc:315
+#: ../inc/user.inc:207 ../inc/user.inc:316
msgid "%1 member since"
msgstr "加入 %1 的日期"
@@ -2038,7 +2038,7 @@ msgstr "密碼"
msgid "other account info"
msgstr "其他帳號訊息"
-#: ../inc/user.inc:213 ../inc/user.inc:314
+#: ../inc/user.inc:213 ../inc/user.inc:315
msgid "User ID"
msgstr "用戶 ID"
@@ -2083,96 +2083,96 @@ msgstr "%1 偏好設定"
msgid "Community"
msgstr "社群"
-#: ../inc/user.inc:242 ../user/pm.php:107 ../user/pm.php:147
+#: ../inc/user.inc:243 ../user/pm.php:107 ../user/pm.php:147
msgid "Delete"
msgstr "刪除"
-#: ../inc/user.inc:244
+#: ../inc/user.inc:245
msgid "Create"
msgstr "建立"
-#: ../inc/user.inc:246 ../inc/user.inc:412 ../inc/util.inc:514
+#: ../inc/user.inc:247 ../inc/user.inc:402 ../inc/util.inc:514
msgid "Profile"
msgstr "用戶檔案"
-#: ../inc/user.inc:249 ../inc/user.inc:374
+#: ../inc/user.inc:250 ../inc/user.inc:375
msgid "%1 posts"
msgstr "%1 個文章"
-#: ../inc/user.inc:261 ../user/edit_forum_preferences_form.php:51
+#: ../inc/user.inc:262 ../user/edit_forum_preferences_form.php:51
msgid "Notifications"
msgstr "通知"
-#: ../inc/user.inc:268
+#: ../inc/user.inc:269
msgid "Quit team"
msgstr "退出團隊"
-#: ../inc/user.inc:270 ../inc/user.inc:287
+#: ../inc/user.inc:271 ../inc/user.inc:288
msgid "Administer"
msgstr "管理員"
-#: ../inc/user.inc:276 ../inc/user.inc:289
+#: ../inc/user.inc:277 ../inc/user.inc:290
msgid "(foundership change request pending)"
msgstr "(創始人轉換請求待處理)"
-#: ../inc/user.inc:278
+#: ../inc/user.inc:279
msgid "Member of team"
msgstr "團隊成員"
-#: ../inc/user.inc:280
+#: ../inc/user.inc:281
msgid "find a team"
msgstr "搜尋團隊"
-#: ../inc/user.inc:291
+#: ../inc/user.inc:292
msgid "Founder but not member of"
msgstr "創始人 (已退出團隊)"
-#: ../inc/user.inc:297
+#: ../inc/user.inc:298
msgid "Find friends"
msgstr "搜尋好友"
-#: ../inc/user.inc:304 ../inc/user.inc:306 ../inc/user.inc:384
-#: ../inc/user.inc:386 ../inc/user.inc:395
+#: ../inc/user.inc:305 ../inc/user.inc:307 ../inc/user.inc:385
+#: ../inc/user.inc:387 ../inc/user.inc:396
msgid "Friends"
msgstr "好友"
-#: ../inc/user.inc:328 ../inc/user.inc:330 ../user/server_status.php:408
+#: ../inc/user.inc:329 ../inc/user.inc:331 ../user/server_status.php:392
msgid "Computers"
msgstr "電腦"
-#: ../inc/user.inc:337
+#: ../inc/user.inc:338
msgid "Donor"
msgstr "贊助者"
-#: ../inc/user.inc:377
+#: ../inc/user.inc:378
msgid "Contact"
msgstr "聯繫"
-#: ../inc/user.inc:380
+#: ../inc/user.inc:381
msgid "This person is a friend"
msgstr "這是一位好友"
-#: ../inc/user.inc:381 ../user/friend.php:238
+#: ../inc/user.inc:382 ../user/friend.php:238
msgid "Cancel friendship"
msgstr "刪除此好友"
-#: ../inc/user.inc:384 ../user/friend.php:37
+#: ../inc/user.inc:385 ../user/friend.php:37
msgid "Request pending"
msgstr "請求待處理"
-#: ../inc/user.inc:386
+#: ../inc/user.inc:387
msgid "Add as friend"
msgstr "新增為好友"
-#: ../inc/user.inc:456
+#: ../inc/user.inc:446
msgid "user name cannot have leading or trailing white space"
msgstr "使用者名稱前後不能使用空白建"
-#: ../inc/user.inc:460
+#: ../inc/user.inc:450
msgid "user name must be nonempty"
msgstr "使用者名稱不能留白"
-#: ../inc/user.inc:464
+#: ../inc/user.inc:454
msgid "user name may not contain HTML tags"
msgstr "使用者名稱不能包含HTML標籤"
@@ -2246,7 +2246,7 @@ msgstr "無法連接資料庫 - 請稍候重試"
msgid "Unable to select database - please try again later"
msgstr "無法選擇資料庫 - 請稍候重試"
-#: ../inc/util_ops.inc:136 ../user/get_passwd.php:72
+#: ../inc/util_ops.inc:109 ../user/get_passwd.php:72
msgid "Stay logged in on this computer"
msgstr "保持這台電腦的登入狀態"
@@ -2446,7 +2446,7 @@ msgstr "建立或加入一個團隊"
msgid "User of the day"
msgstr "今日用戶"
-#: ../user/bs_sample_index.php:52 ../user/server_status.php:254
+#: ../user/bs_sample_index.php:52 ../user/server_status.php:239
msgid "Server status"
msgstr "伺服器狀態"
@@ -5330,135 +5330,135 @@ msgstr "未運行"
msgid "Disabled"
msgstr "已禁用"
-#: ../user/server_status.php:246
+#: ../user/server_status.php:231
msgid "Project status"
msgstr "專案狀態"
-#: ../user/server_status.php:248
+#: ../user/server_status.php:233
msgid "Server software version: %1"
msgstr "伺服器軟體版本:%1"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Program"
msgstr "程式"
-#: ../user/server_status.php:256
+#: ../user/server_status.php:241
msgid "Host"
msgstr "主機"
-#: ../user/server_status.php:267
+#: ../user/server_status.php:252
msgid "data-driven web pages"
msgstr "資料驅動的網頁"
-#: ../user/server_status.php:273
+#: ../user/server_status.php:258
msgid "upload/download server"
msgstr "上傳/下載伺服器"
-#: ../user/server_status.php:276
+#: ../user/server_status.php:261
msgid "scheduler"
msgstr "調度"
-#: ../user/server_status.php:309
+#: ../user/server_status.php:294
msgid "Running:"
msgstr "運行中:"
-#: ../user/server_status.php:310
+#: ../user/server_status.php:295
msgid "Program is operating normally"
msgstr "程式目前運行正常"
-#: ../user/server_status.php:311
+#: ../user/server_status.php:296
msgid "Not Running:"
msgstr "未運行:"
-#: ../user/server_status.php:312
+#: ../user/server_status.php:297
msgid "Program failed or the project is down"
msgstr "程式出錯或者專案已停機"
-#: ../user/server_status.php:313
+#: ../user/server_status.php:298
msgid "Disabled:"
msgstr "已禁用:"
-#: ../user/server_status.php:314
+#: ../user/server_status.php:299
msgid "Program is disabled"
msgstr "程式已禁用"
-#: ../user/server_status.php:318
+#: ../user/server_status.php:303
msgid "Computing status"
msgstr "運算狀態"
-#: ../user/server_status.php:324
+#: ../user/server_status.php:309
msgid "The database server is not accessible"
msgstr "資料庫伺服器目前無法訪問"
-#: ../user/server_status.php:341
+#: ../user/server_status.php:326
msgid "Tasks ready to send"
msgstr "準備分發的任務"
-#: ../user/server_status.php:346 ../user/workunit.php:55
+#: ../user/server_status.php:331 ../user/workunit.php:55
msgid "Tasks in progress"
msgstr "任務處理中"
-#: ../user/server_status.php:351
+#: ../user/server_status.php:336
msgid "Workunits waiting for validation"
msgstr "等待驗證的任務"
-#: ../user/server_status.php:356
+#: ../user/server_status.php:341
msgid "Workunits waiting for assimilation"
msgstr "等待回收的任務"
-#: ../user/server_status.php:361
+#: ../user/server_status.php:346
msgid "Workunits waiting for file deletion"
msgstr "等待刪除的任務"
-#: ../user/server_status.php:366
+#: ../user/server_status.php:351
msgid "Tasks waiting for file deletion"
msgstr "等待刪除的任務"
-#: ../user/server_status.php:383
+#: ../user/server_status.php:367
msgid "Transitioner backlog (hours)"
msgstr "服務端事務積壓(小時)"
-#: ../user/server_status.php:390
+#: ../user/server_status.php:374
msgid "Users"
msgstr "用戶"
-#: ../user/server_status.php:393 ../user/server_status.php:411
+#: ../user/server_status.php:377 ../user/server_status.php:395
msgid "with recent credit"
msgstr "近期得到積分的"
-#: ../user/server_status.php:398 ../user/server_status.php:416
+#: ../user/server_status.php:382 ../user/server_status.php:400
msgid "with credit"
msgstr "得到積分的"
-#: ../user/server_status.php:403 ../user/server_status.php:421
+#: ../user/server_status.php:387 ../user/server_status.php:405
msgid "registered in past 24 hours"
msgstr "過去 24 小時內註冊的"
-#: ../user/server_status.php:427
+#: ../user/server_status.php:411
msgid "current GigaFLOPs"
msgstr "當前處理能力(GFLOPs)"
-#: ../user/server_status.php:436
+#: ../user/server_status.php:420
msgid "Tasks by application"
msgstr "按應用程式分類的任務"
-#: ../user/server_status.php:439 ../user/workunit.php:40
+#: ../user/server_status.php:423 ../user/workunit.php:40
msgid "application"
msgstr "應用程式"
-#: ../user/server_status.php:440
+#: ../user/server_status.php:424
msgid "unsent"
msgstr "未發送的"
-#: ../user/server_status.php:441
+#: ../user/server_status.php:425
msgid "in progress"
msgstr "運算中"
-#: ../user/server_status.php:442
+#: ../user/server_status.php:426
msgid "avg runtime of last 100 results in h (min-max)"
msgstr "最近 100 個運算結果的平均處理時間(單位:小時)"
-#: ../user/server_status.php:443
+#: ../user/server_status.php:427
msgid "users in last 24h"
msgstr "最近 24 小時的用戶"
@@ -5507,7 +5507,7 @@ msgstr "每個團隊都有一個%1創始人%2,他可以:"
#: ../user/team.php:33
msgid "access team members' email addresses"
-msgstr "訪問團隊成員的電子郵件地址"
+msgstr "造訪團隊成員的電子郵件地址"
#: ../user/team.php:34
msgid "edit the team's name and description"
@@ -5706,6 +5706,10 @@ msgstr "新的團隊創始人?"
msgid "Change founder"
msgstr "更改團隊創始人"
+#: ../user/team_change_founder_form.php:108
+msgid "There are no users to transfer team to."
+msgstr "目前沒有用戶變更團隊。"
+
#: ../user/team_create_action.php:29
msgid "You must choose a non-blank team name"
msgstr "你必須選擇一個非空的團隊名稱"
diff --git a/locale/zh_TW/BOINC-Setup.mo b/locale/zh_TW/BOINC-Setup.mo
index 5146a68..b947664 100644
Binary files a/locale/zh_TW/BOINC-Setup.mo and b/locale/zh_TW/BOINC-Setup.mo differ
diff --git a/locale/zh_TW/BOINC-Setup.po b/locale/zh_TW/BOINC-Setup.po
index 8aa6ed9..daba848 100644
--- a/locale/zh_TW/BOINC-Setup.po
+++ b/locale/zh_TW/BOINC-Setup.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-11-17 00:00-0800\n"
-"PO-Revision-Date: 2013-11-21 22:53+0000\n"
+"POT-Creation-Date: 2014-01-26 00:00-0800\n"
+"PO-Revision-Date: 2014-02-05 05:22+0000\n"
"Last-Translator: 宇謙 <df910105 at yahoo.com.tw>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
"Language: zh_TW\n"
@@ -19,7 +19,7 @@ msgstr ""
"X-Poedit-SearchPath-0: mac_installer\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: /Volumes/Cheer/BOINC_GIT/boinc_trunk\n"
-"X-POOTLE-MTIME: 1385074421.0\n"
+"X-POOTLE-MTIME: 1391577769.0\n"
"X-Poedit-KeywordsList: _\n"
#: Installer.cpp:124
@@ -27,11 +27,11 @@ msgstr ""
msgid "Sorry, this version of %s requires system 10.5 or higher."
msgstr "抱歉, %s 需要 10.5 或更高的系統版本。"
-#: PostInstall.cpp:130 PostInstall.cpp:1136
+#: PostInstall.cpp:130 PostInstall.cpp:1136 uninstall.cpp:1618
msgid "Yes"
msgstr "是"
-#: PostInstall.cpp:131 PostInstall.cpp:1137
+#: PostInstall.cpp:131 PostInstall.cpp:1137 uninstall.cpp:1619
msgid "No"
msgstr "否"
@@ -58,15 +58,15 @@ msgstr ""
msgid "Do you want to set %s as the screensaver for all %s users on this Mac?"
msgstr "是否將 %s 設定為這台 Mac 上所有 %s 用戶的螢幕保護程式?"
-#: uninstall.cpp:81
+#: uninstall.cpp:82
msgid "OK"
msgstr "確定"
-#: uninstall.cpp:131
+#: uninstall.cpp:136
msgid "Permission error after relaunch"
msgstr "重新啟動後權限錯誤"
-#: uninstall.cpp:136
+#: uninstall.cpp:141
msgid ""
"Removal may take several minutes.\n"
"Please be patient."
@@ -74,7 +74,7 @@ msgstr ""
"移除可能需要幾分鐘。\n"
"請耐心等候。"
-#: uninstall.cpp:151
+#: uninstall.cpp:156
#, c-format
msgid ""
"Are you sure you want to completely remove %s from your computer?\n"
@@ -85,21 +85,29 @@ msgstr ""
"\n"
"這將移除執行檔案,但不會影響 %s 的數據文件。"
-#: uninstall.cpp:158
+#: uninstall.cpp:163
#, c-format
msgid "Canceled: %s has not been touched."
msgstr "已取消:未對 %s 進行任何操作。"
-#: uninstall.cpp:169
+#: uninstall.cpp:174
#, c-format
msgid "An error occurred: error code %d"
msgstr "發生錯誤:錯誤代碼 %d"
-#: uninstall.cpp:225
+#: uninstall.cpp:230
msgid "name of user"
msgstr "使用者名稱"
-#: uninstall.cpp:262
+#: uninstall.cpp:272
+msgid ""
+"Do you also want to remove VirtualBox from your computer?\n"
+"(VirtualBox was installed along with BOINC.)"
+msgstr ""
+"請問您想順便從電腦移除VirtualBox?\n"
+"(VirtualBox曾隨著BOINC一起安裝。)"
+
+#: uninstall.cpp:312
#, c-format
msgid ""
"Removal completed.\n"
@@ -118,7 +126,7 @@ msgstr ""
"每個用戶的文件\n"
"\"%s\"。"
-#: uninstall.cpp:790
+#: uninstall.cpp:840
#, c-format
msgid ""
"Enter your administrator password to completely remove %s from you "
@@ -128,11 +136,11 @@ msgstr ""
"為了從您的電腦中完全移除 %s ,請輸入您的管理員密碼。\n"
"\n"
-#: uninstall.cpp:1549
+#: uninstall.cpp:1616
msgid "Cancel"
msgstr "取消"
-#: uninstall.cpp:1550
+#: uninstall.cpp:1617
msgid "Continue..."
msgstr "繼續..."
diff --git a/locale/zh_TW/BOINC-Web.mo b/locale/zh_TW/BOINC-Web.mo
index 08f52bd..b0f926a 100644
Binary files a/locale/zh_TW/BOINC-Web.mo and b/locale/zh_TW/BOINC-Web.mo differ
diff --git a/locale/zh_TW/BOINC-Web.po b/locale/zh_TW/BOINC-Web.po
index 3a34c90..6d472cd 100644
--- a/locale/zh_TW/BOINC-Web.po
+++ b/locale/zh_TW/BOINC-Web.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: BOINC translation team <boinc_loc at ssl.berkeley.edu>\n"
-"POT-Creation-Date: 2013-11-12 00:00 PST\n"
-"PO-Revision-Date: 2013-11-15 15:59+0000\n"
+"POT-Creation-Date: 2014-02-01 00:00 PST\n"
+"PO-Revision-Date: 2014-02-25 13:19+0000\n"
"Last-Translator: 宇謙 <df910105 at yahoo.com.tw>\n"
"Language-Team: \n"
"Language: zh_TW\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-BOINC-UTF8-Marker: 简体中文, 日本語\n"
"X-Poedit-SearchPath-0: doc\n"
"X-Poedit-Basepath: C:\\Src\\BOINCSVN\\trunk\\boinc\n"
-"X-POOTLE-MTIME: 1384531151.0\n"
+"X-POOTLE-MTIME: 1393334371.0\n"
"X-Poedit-KeywordsList: tra\n"
#: docutil.php:21
@@ -419,16 +419,16 @@ msgstr "想參加這些專案,您必須購買一個傳感器且與電腦連接
msgid "Cognitive science and artifical intelligence"
msgstr "科學認知和人工智慧"
-#: projects.inc:50 projects.inc:342 projects.inc:386 projects.inc:435
-#: projects.inc:442 projects.inc:489
+#: projects.inc:60 projects.inc:364 projects.inc:408 projects.inc:457
+#: projects.inc:464 projects.inc:511
msgid "Private"
msgstr "個人檔案"
-#: projects.inc:51
+#: projects.inc:61
msgid "Artificial intelligence"
msgstr "人工智慧"
-#: projects.inc:52
+#: projects.inc:62
msgid ""
"Parse and convert semantic nets for use in FreeHAL, an artificial "
"intelligence that uses semantic networks, stemmers, part of speech "
@@ -436,19 +436,19 @@ msgid ""
"conversations."
msgstr "解析和轉換用於 FreeHAL 的語義網,而FreeHAL 是一個利用語義網絡來模仿人類的交談行為的人工智慧。"
-#: projects.inc:58
+#: projects.inc:69
msgid "Biology and Medicine"
msgstr "生物和醫藥"
-#: projects.inc:71
+#: projects.inc:82
msgid "University College Dublin"
msgstr "都柏林大學"
-#: projects.inc:72
+#: projects.inc:83
msgid "Antimalarial drug discovery"
msgstr "發現抗瘧疾藥物"
-#: projects.inc:73
+#: projects.inc:84
msgid ""
"The parasite that causes malaria continues to evolve resistance to available "
"medication. We therefore urgently need to discover new drugs to replace "
@@ -459,15 +459,15 @@ msgstr ""
"造成瘧疾的寄生蟲持續對於抵抗藥物治療進化中。我們因此急需發掘新藥以代替現存的藥物。重要的是,這些藥物需要能夠標定寄生蟲體內\"新的\"蛋白質。FightMa"
"laria at Home專案就是以發現這些新的標靶為目標。"
-#: projects.inc:79
+#: projects.inc:90
msgid "University of Karlsruhe (Germany)"
msgstr "德國卡爾斯魯厄(Karlsruhe)大學"
-#: projects.inc:80
+#: projects.inc:91
msgid "Protein structure prediction"
msgstr "蛋白質結構預測"
-#: projects.inc:81
+#: projects.inc:92
msgid ""
"POEM at HOME uses a computational approach to predict the biologically active "
"structure of proteins, to understand the signal-processing mechanisms when "
@@ -478,15 +478,15 @@ msgstr ""
"POEM at HOME "
"通過計算的途徑來預測蛋白質的生物結構、理解蛋白質之間交互的信號傳遞機制、理解疾病相關的蛋白質變異,並在生物學重要的蛋白質的三維結構的基礎上開發新的藥物。"
-#: projects.inc:87
+#: projects.inc:98
msgid "University of Delaware"
msgstr "美國德拉瓦大學"
-#: projects.inc:88
+#: projects.inc:99
msgid "Study of protein - ligand interactions"
msgstr "研究蛋白質和配體間的相互作用"
-#: projects.inc:89
+#: projects.inc:100
msgid ""
"Docking at Home has both bioscience and computer science goals. The project "
"aims to further knowledge of the atomic details of protein-ligand "
@@ -495,15 +495,15 @@ msgid ""
msgstr ""
"Docking at Home 的研究目標既包括生物科學上的,也包括計算機科學上的。該專案試圖了解蛋白質配體交互過程中的原子尺度的細節,並以此來尋找新的藥物。"
-#: projects.inc:103
+#: projects.inc:114
msgid "Barcelona Biomedical Research Park (PRBB)"
msgstr "巴塞羅那生物醫藥研究區(PRBB)"
-#: projects.inc:104
+#: projects.inc:115
msgid "Molecular simulations of proteins"
msgstr "蛋白質分子結構模型"
-#: projects.inc:105
+#: projects.inc:116
msgid ""
"GPUGrid.net opens novel computational scenarios by the first full-atom "
"molecular dynamics code (CellMD) specially optimized to run on NVIDIA GPUs. "
@@ -511,31 +511,31 @@ msgid ""
"computational biology for biomedical research."
msgstr "GPUGrid.net 利用NVIDIA 的GPU 來進行全原子的分子動力學模擬。計算生物學的應用給生物醫藥學帶來了新的研究方向。"
-#: projects.inc:111
+#: projects.inc:122
msgid "Technion, Israel"
msgstr "以色列理工大學"
-#: projects.inc:112
+#: projects.inc:123
msgid "Genetic linkage analysis"
msgstr "遺傳分析"
-#: projects.inc:113
+#: projects.inc:124
msgid ""
"Superlink at Technion helps geneticists all over the world find disease-"
"provoking genes causing some types of diabetes, hypertension (high blood "
"pressure), cancer, schizophrenia and many others."
msgstr "Superlink at Technion 幫助全世界的遺傳學家來尋找會導致某些類型疾病的基因,例如糖尿病、高血壓、癌症、精神分裂...等等。"
-#: projects.inc:127
+#: projects.inc:138
msgid ""
"University of Maryland Center for Bioinformatics and Computational Biology"
msgstr "美國馬里蘭大學生物信息學和計算生物學中心"
-#: projects.inc:128
+#: projects.inc:139
msgid "Life science research"
msgstr "生命科學研究"
-#: projects.inc:129
+#: projects.inc:140
msgid ""
"The Lattice Project supplies computing power to scientists at the University "
"of Maryland studying evolutionary relationships based on DNA sequence data; "
@@ -545,15 +545,15 @@ msgstr ""
"The Lattice Project 為馬里蘭大學的科學家們提供計算資源,用於研究基於DNA "
"序列數據的進化關係,細菌、病毒蛋白質序列,還有自然界的生物多樣性。"
-#: projects.inc:135
+#: projects.inc:146
msgid "The Swiss Tropical Institute"
msgstr "瑞士熱帶研究所"
-#: projects.inc:136
+#: projects.inc:147
msgid "Epidemiology"
msgstr "流行疾病學"
-#: projects.inc:137
+#: projects.inc:148
msgid ""
"Simulation models of the transmission dynamics and health effects of malaria "
"are an important tool for malaria control. They can be used to determine "
@@ -566,15 +566,15 @@ msgstr ""
"模擬瘧疾的傳播動力學模型,用於對瘧疾的控制,包括如何才能對蚊帳、藥物和正在研發測試過程中的疫苗等進行最優化的分發。相關的建模過程非常耗費計算資源,除了需"
"要模擬相當大的人群分佈,還要考慮生物學和社會學方面對疾病傳播可能有影響的相關因素。"
-#: projects.inc:159
+#: projects.inc:170
msgid "University of Washington"
msgstr "美國華盛頓大學"
-#: projects.inc:160 projects.inc:168
+#: projects.inc:171 projects.inc:179
msgid "Biology"
msgstr "生物學"
-#: projects.inc:161
+#: projects.inc:172
msgid ""
"Determine the 3-dimensional shapes of proteins in research that may "
"ultimately lead to finding cures for some major human diseases. By running "
@@ -586,30 +586,30 @@ msgstr ""
"對蛋白質的三維結構進行預測,可能最終能幫助找到一些重大人類疾病的治療方法。通過運行Rosetta at home 你能夠幫助我們加速這個進程,並能擴展我們的研"
"究領域,而沒有你們的幫助,這都是不可能完成的。除些之外,你還能幫助我們設計新的蛋白質,用來對抗類似愛滋、天花、癌症和老年癡呆症等疾病。"
-#: projects.inc:167
+#: projects.inc:178
msgid "University of Vienna"
msgstr "維也納大學"
-#: projects.inc:169
+#: projects.inc:180
msgid ""
"Calculate similarities between proteins. SIMAP provides a public database of "
"the resulting data, which plays a key role in many bioinformatics research "
"projects."
msgstr "計算蛋白質結構間的相似性。 SIMAP 以公共數據庫的形式發布其研究結果,該資料庫對很多生物信息學研究項目有重要作用。"
-#: projects.inc:175
+#: projects.inc:186
msgid "Earth Sciences"
msgstr "地球科學"
-#: projects.inc:187
+#: projects.inc:198
msgid "Oxford University"
msgstr "英國牛津大學"
-#: projects.inc:188
+#: projects.inc:199
msgid "Climate study"
msgstr "氣候研究"
-#: projects.inc:189
+#: projects.inc:200
msgid ""
"Investigate the approximations that have to be made in state-of-the-art "
"climate models. By running the model thousands of times we hope to find out "
@@ -623,16 +623,25 @@ msgstr ""
"研究最新的氣候模型中的近似處理。通過將模型運行數千次,我們希望能研究模型對近似處理的反應,同時還要保證模型不能脫離於實際。這能夠幫助我們加深對模型的"
"理解,包括對二氧化碳、硫循環等的敏感程度。更進一步,這能夠幫助我們了解下一個世紀的氣候變化趨勢,包括各種不同的場景。"
-# 75%
-#: projects.inc:196
-msgid "Astronomy, Physics, and Chemistry"
-msgstr "天文,物理和化學"
+#: projects.inc:207
+msgid "Physical Science"
+msgstr "自然科學"
+
+#: projects.inc:213
+msgid "Mechanical engineering"
+msgstr "機械工程"
-#: projects.inc:202 projects.inc:241 projects.inc:249
+#: projects.inc:214
+msgid ""
+"Currently we are calculating the optimum design of a structure call the 52 "
+"bar truss"
+msgstr "現在我們正在對一個名為52 bar truss的結構進行優化設計。"
+
+#: projects.inc:224 projects.inc:263 projects.inc:271
msgid "Astronomy"
msgstr "天文學"
-#: projects.inc:203
+#: projects.inc:225
msgid ""
"We will combine the spectral coverage of GALEX, Pan-STARRS1, and WISE to "
"generate a multi-wavelength UV-optical-NIR galaxy atlas for the nearby "
@@ -644,15 +653,15 @@ msgstr ""
"我們將結合 GALEX、Pan-STARRS1 和 WISE 的光譜覆蓋範圍,來建立鄰近宇宙的多波長紫外線光近紅外星系圖譜。我們將在分散式模型上利用光譜"
"能量分佈擬合技術(SED)解析每個像素來測量物理參數(例如同恆星的表面密度、恆星形成的表面密度、衰減和一級恆星的形成歷史)。"
-#: projects.inc:225
+#: projects.inc:247
msgid "University of Texas at Austin"
msgstr "德克薩斯大學奧斯汀分校"
-#: projects.inc:226 projects.inc:257
+#: projects.inc:248 projects.inc:279
msgid "Chemistry"
msgstr "化學"
-#: projects.inc:227
+#: projects.inc:249
msgid ""
"A common problem in theoretical chemistry, condensed matter physics and "
"materials science is the calculation of the time evolution of an atomic "
@@ -669,33 +678,33 @@ msgstr ""
"這些系統的長時動力學過程進行計算。"
# 95%
-#: projects.inc:240
+#: projects.inc:262
msgid "University of Illinois at Urbana-Champaign"
msgstr "伊利諾伊大學厄巴納-香檳分校"
-#: projects.inc:242
+#: projects.inc:264
msgid ""
"The goal of Cosmology at Home is to search for the model that best describes "
"our Universe and to find the range of models that agree with the available "
"astronomical particle physics data."
msgstr "Cosmology at Home 的目標是搜索可以描述我們宇宙的最適合的模型,並研究能夠與天文觀測數據相符的模型範圍。"
-#: projects.inc:248
+#: projects.inc:270
msgid "Rensselaer Polytechnic Institute"
msgstr "倫斯勒理工學院"
-#: projects.inc:250
+#: projects.inc:272
msgid ""
"The goal of Milkyway at Home is to create a highly accurate three dimensional "
"model of the Milky Way galaxy using data gathered by the Sloan Digital Sky "
"Survey."
msgstr "Milkeyway at Home 使用Sloan 數字巡天的數據來對銀河系進行高精度的三維建模。"
-#: projects.inc:256
+#: projects.inc:278
msgid "Leiden University, The Netherlands"
msgstr "荷蘭萊頓大學"
-#: projects.inc:258
+#: projects.inc:280
msgid ""
"Surface science calculations using Classical Dynamics. Leiden Classical "
"allows volunteers, students and other scientist to submit their personal "
@@ -707,15 +716,15 @@ msgstr ""
"使用經典力學進行表面科學的計算。 Leiden Classical 允許志願者、學者和其它科研人員提供他們自己的計算任務,每個用戶都有他自己的經典力學任"
"務隊列。通過這種方式,學生們可以利用網格來對他們學習到的相關理論進行驗證。"
-#: projects.inc:272
+#: projects.inc:294
msgid "Univ. of Wisconsin - Milwaukee, Max Planck Institute"
msgstr "美國威斯康星大學密爾沃基分校,德國馬克斯普朗克研究所"
-#: projects.inc:273
+#: projects.inc:295
msgid "Astrophysics"
msgstr "天體物理學"
-#: projects.inc:274
+#: projects.inc:296
msgid ""
"Search for spinning neutron stars (also called pulsars) using data from the "
"LIGO and GEO gravitational wave detectors, and from the Arecibo radio "
@@ -726,15 +735,15 @@ msgstr ""
"分析LIGO 和GEO 引力波探測器以及阿雷西波觀測站採集到的數據,以尋找自旋中子星(也稱為脈衝星)。 Einstein at Home 是2005 "
"世界物理學年的推介專案,由美國物理學會(APS)和一些相關的國際組織發起。"
-#: projects.inc:288 projects.inc:296
+#: projects.inc:310 projects.inc:318
msgid "CERN (European Organization for Nuclear Research)"
msgstr "CERN(歐洲核子研究組織)"
-#: projects.inc:289 projects.inc:297
+#: projects.inc:311 projects.inc:319
msgid "Physics"
msgstr "物理學"
-#: projects.inc:290
+#: projects.inc:312
msgid ""
"The Large Hadron Collider (LHC) is a particle accelerator at CERN, the "
"European Organization for Nuclear Research, the world's largest particle "
@@ -745,22 +754,22 @@ msgstr ""
"大型強子對撞機(LHC)是CERN(歐洲核研究組織)的一個粒子加速器裝置,也是世界上最大的粒子物理實驗室。它是人類現有的用於研究基本粒子特性的最強大的實"
"驗裝置。 LHC at home 的作用主要是對加速器進行模擬,並幫助改進LHC 及其探測器的設計。"
-#: projects.inc:298
+#: projects.inc:320
msgid ""
"This project uses CERN-developed virtual machine technology for full-fledged "
"LHC event physics simulation on volunteer computers. Requires that you "
"install VirtualBox on your computer"
msgstr "這專案在志願者的電腦中使用CERN為了完備的LHC物理模擬試驗而開發的虛擬機器技術。您的電腦需要安裝VirtualBox。"
-#: projects.inc:304
+#: projects.inc:326
msgid "University of California, Berkeley"
msgstr "美國加州大學伯克利分校"
-#: projects.inc:305
+#: projects.inc:327
msgid "Astrophysics, astrobiology"
msgstr "天體物理學,天體生物學"
-#: projects.inc:306
+#: projects.inc:328
msgid ""
"SETI (Search for Extraterrestrial Intelligence) is a scientific area whose "
"goal is to detect intelligent life outside Earth. One approach, known as "
@@ -771,15 +780,15 @@ msgstr ""
"SETI (搜索外星智慧)的研究領域是探測地球之外的智慧生命。探測的途徑之一,也被稱之為射電SETI,使用射電望遠鏡來監聽太空中的窄波射電信號。因為依照"
"人類目前的認識,這些信號不會自然產生,因此可以作為將其地外技術文明存在的證據。"
-#: projects.inc:320
+#: projects.inc:342
msgid "Bielefeld University of Applied Sciences"
msgstr "比勒費爾德應用科技大學"
-#: projects.inc:321
+#: projects.inc:343
msgid "Chemical engineering and nanotechnology"
msgstr "化學工程與奈米技術"
-#: projects.inc:322
+#: projects.inc:344
msgid ""
"The study of molecular magnets and controlled nanoscale magnetism. These "
"magnetic molecules may be used to develop tiny magnetic switches, with "
@@ -787,30 +796,30 @@ msgid ""
"biotechnology."
msgstr "研究分子磁體和奈米尺度的磁力學。這些分子磁體可用於研發微型磁性開關,適用於醫藥(比如腫瘤化療)和生物技術領域。"
-#: projects.inc:329
+#: projects.inc:351
msgid "Multiple applications"
msgstr "多個應用程式"
-#: projects.inc:334
+#: projects.inc:356
msgid "Chinese Academy of Sciences"
msgstr "中國科學院"
-#: projects.inc:335
+#: projects.inc:357
msgid "Physics, biochemistry, and others"
msgstr "物理,生物化學和其他"
-#: projects.inc:336
+#: projects.inc:358
msgid ""
"The objective of CAS at home is to encourage and assist scientists in China to "
"adopt the technologies of volunteer computing and volunteer thinking for "
"their research."
msgstr "CAS at home 的目標是鼓勵和幫忙中國的科研人員採用志願運算技術以及相應的科研思維方式"
-#: projects.inc:343
+#: projects.inc:365
msgid "Mathematics, physics, evolution"
msgstr "數學,物理學,進化論"
-#: projects.inc:344
+#: projects.inc:366
msgid ""
"Yoyo at home is an adapter between BOINC and several existing volunteer "
"computing projects: ECM, Muon, Evolution at home, and distributed.net"
@@ -818,15 +827,15 @@ msgstr ""
"Yoyo at home 將一些傳統的志願計算專案,包括ECM、Muon、Evolution at home 和distributed.net "
"等,移植到了BOINC 平台。"
-#: projects.inc:349 projects.inc:505
+#: projects.inc:371 projects.inc:527
msgid "MTA-SZTAKI Laboratory of Parallel and Distributed Systems (Hungary)"
msgstr "匈牙利 MTA-SZTAKI 並行和分佈式系統實驗室"
-#: projects.inc:350
+#: projects.inc:372
msgid "European research projects"
msgstr "歐盟研究專案"
-#: projects.inc:351
+#: projects.inc:373
msgid ""
"The EDGeS at Home Beta project integrates volunteer computing into the service "
"grid network of Europe by allowing service grids to send workunits to be "
@@ -836,27 +845,27 @@ msgstr ""
"EDGes at Home Beta "
"專案將志願計算融入到歐洲運算服務網格的網路,允許服務網格將運算任務分發給專案的志願者們來處理。專案所涉及的科研領域包括數學、物理、生物等等。"
-#: projects.inc:357
+#: projects.inc:379
msgid "Spanish universities and research centers"
msgstr "西班牙的大學和研究中心"
-#: projects.inc:358
+#: projects.inc:380
msgid "Various Spanish research projects"
msgstr "西班牙各種的研究專案"
-#: projects.inc:359
+#: projects.inc:381
msgid "Research in physics, material science, and biomedicine"
msgstr "物理學、材料科學和生物醫藥學方面的研究"
-#: projects.inc:365
+#: projects.inc:387
msgid "IBM Corporate Citizenship"
msgstr "IBM企業公民"
-#: projects.inc:366
+#: projects.inc:388
msgid "Medical, environmental and other humanitarian research"
msgstr "醫療、環境和其他人道主義研究"
-#: projects.inc:367
+#: projects.inc:389
msgid ""
"To further critical non-profit research on some of humanity's most pressing "
"problems by creating the world's largest volunteer computing grid. Research "
@@ -865,50 +874,50 @@ msgid ""
msgstr ""
"透過建立世界上最大的志願者網格運算,進一步研究關鍵且非營利對於人類最緊迫的問題。研究包括愛滋病、癌症、熱帶和被忽視的各種疾病、太陽能、乾淨的水…等等。"
-#: projects.inc:373
+#: projects.inc:395
msgid "Mathematics, computing, and games"
msgstr "數學,計算和遊戲"
-#: projects.inc:379
+#: projects.inc:401
msgid "Computer Science"
msgstr "電腦科學"
-#: projects.inc:387
+#: projects.inc:409
msgid "Mathematics, Physics, Artificial Intelligence"
msgstr "數學,物理,人工智慧"
-#: projects.inc:388
+#: projects.inc:410
msgid "Simulation of quantum computing; Goldbach's conjecture."
msgstr "模擬量子計算;哥德巴赫猜想"
-#: projects.inc:428 projects.inc:436
+#: projects.inc:450 projects.inc:458
msgid "Cryptography"
msgstr "密碼學"
-#: projects.inc:437
+#: projects.inc:459
msgid ""
"Attempt to decode 3 original Enigma messages. The signals were intercepted "
"in the North Atlantic in 1942 and are believed to be unbroken."
msgstr "該專案試圖解密三條二戰期間的加密電報消息,這些消息於1942 年在北大西洋截獲而且一直被認為是不可破解的。"
-#: projects.inc:443 projects.inc:482 projects.inc:490 projects.inc:498
-#: projects.inc:506 projects.inc:546
+#: projects.inc:465 projects.inc:504 projects.inc:512 projects.inc:520
+#: projects.inc:528 projects.inc:568
msgid "Mathematics"
msgstr "數學"
-#: projects.inc:444
+#: projects.inc:466
msgid "Study the Collatz Conjecture, an unsolved conjecture in mathematics"
msgstr "研究考拉茲猜想(Collatz conjecture),一個尚未被證明的數學猜想。"
-#: projects.inc:449
+#: projects.inc:471
msgid "California State University Fullerton"
msgstr "加州大學富爾頓分校"
-#: projects.inc:450
+#: projects.inc:472
msgid "Factorization of large integers"
msgstr "大整數因子分解"
-#: projects.inc:451
+#: projects.inc:473
msgid ""
"NFS at Home is a research project that uses Internet-connected computers to do "
"the lattice sieving step in the Number Field Sieve factorization of large "
@@ -921,17 +930,17 @@ msgstr ""
"是一個利用通過網路互連的電腦來進行大整數數域篩選分解中的格篩步驟的研究專案。當你還是一個年輕的學生時,你應該就有了分解質因數的經歷,比如15=3*5 "
"或者35=5*7。 NFS at Home 正是這一經歷的延續,不過卻是分解有數百位數字長的大整數。"
-#: projects.inc:457
+#: projects.inc:479
msgid ""
"Vilnius Gediminas Technical University and Kaunas University of Technology "
"(Lithuania)"
msgstr "Vilnius Gediminas 理工大學和Kaunas 理工大學(立陶宛)"
-#: projects.inc:458
+#: projects.inc:480
msgid "Software testing"
msgstr "軟體測試"
-#: projects.inc:459
+#: projects.inc:481
msgid ""
"The aim of this project is to provide a powerful distributed computing "
"platform for scientists of Vilnius Gediminas Technical University (VGTU) as "
@@ -941,11 +950,11 @@ msgstr ""
"本專案的目的是為Vilnius Gediminas "
"理工大學(VGTU)和其它立陶宛的科研機構提供一個強大的分佈式計算平台。當前的應用主要涉及到基於蒙特卡羅的軟體測試研究。"
-#: projects.inc:481
+#: projects.inc:503
msgid "Mathematical Institute of Leiden University / Kennislink"
msgstr "萊頓(Leiden)大學數字學院(Kennislink)"
-#: projects.inc:483
+#: projects.inc:505
msgid ""
"Search for 'abc-triples': positive integers a,b,c such that a+b=c, a < b "
"< c, a,b,c have no common divisors and c > rad(abc), where rad(n) is the "
@@ -960,23 +969,23 @@ msgstr ""
"有關的常數C(e),對於所有滿足a+b=c,a 與b 互質的三元整數組(a,b,c) ,均成立c<=C(e)((rad(abc))^(1+e))。 "
"ABC 猜想是當前數論中最重要的未解決問題之一,如果它能夠被證明,其它不少未解決問題也能得到直接的證明。"
-#: projects.inc:491
+#: projects.inc:513
msgid ""
"Primegrid has multiple projects searching for different forms of very large "
"prime numbers, including searching for the largest known prime number."
msgstr "Primegrid 有許多子專案,用於尋找非常大且型態不同的質數,包括尋找已知的最大質數。"
-#: projects.inc:497
+#: projects.inc:519
msgid "Hochschule RheinMain University of Applied Sciences"
msgstr "萊茵曼應用技術大學"
-#: projects.inc:499
+#: projects.inc:521
msgid ""
"Search for counterexamples to two conjectures related to the identification "
"of prime numbers"
msgstr "尋找兩個有關質數識別的猜想的反例。"
-#: projects.inc:507
+#: projects.inc:529
msgid ""
"Find all the generalized binary number systems (in which bases are matrices "
"and digits are vectors) up to dimension 11."
@@ -991,6 +1000,10 @@ msgstr "評論"
msgid "News is available as an %sRSS feed%s"
msgstr "可以透過 %sRSS feed%s 來查看新聞"
+# 75%
+#~ msgid "Astronomy, Physics, and Chemistry"
+#~ msgstr "天文,物理和化學"
+
#~ msgid "Download BOINC + Virtualbox"
#~ msgstr "下載BOINC + Virtualbox"
diff --git a/m4/ax_check_glut.m4 b/m4/ax_check_glut.m4
index bc70cff..7c5280c 100644
--- a/m4/ax_check_glut.m4
+++ b/m4/ax_check_glut.m4
@@ -18,6 +18,12 @@ else
if test "X${no_x}" != "Xyes"; then
GLUT_LIBS="${X_PRE_LIBS} -lXmu -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"
fi
+ #
+ # If were running under windows assume we need GDI32 and WinMM
+ #
+ if echo $host_os | egrep '^mingw|^winnt' > /dev/null ; then
+ GLUT_LIBS="${GLUT_LIBS} -lgdi32 -lwinmm"
+ fi
AC_LANG_PUSH(C)
@@ -28,7 +34,7 @@ else
[ax_cv_check_glut_libglut="no"
ax_save_LIBS="${LIBS}"
LIBS=""
- ax_check_libs="-lglut32 -lglut"
+ ax_check_libs="-lglut32 -lglut -lfreeglut_static -lfreeglut"
for ax_lib in ${ax_check_libs}; do
if test X$ax_compiler_ms = Xyes; then
ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`
@@ -38,6 +44,7 @@ else
LIBS="-L${prefix}/lib ${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([[
+#define FREEGLUT_STATIC 1
# if HAVE_WINDOWS_H && (defined(_WIN32) || defined(CYGWIN_USE_WIN32))
# include <windows.h>
# endif
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
index 6d400ed..18e6af0 100644
--- a/m4/ax_pthread.m4
+++ b/m4/ax_pthread.m4
@@ -83,6 +83,44 @@
# exception to the GPL to apply to your modified version as well.
#serial 20
+#
+# AS_EXECUTABLE_P, AC_CHECK_PROGS, AC_CASE and AS_IF for 5.89
+# ---------------
+# Check whether a file is executable.
+m4_ifndef([AS_EXECUTABLE_P],
+[m4_defun([AS_EXECUTABLE_P],[
+test -f $1
+])])
+
+# AS_IF
+#----------------
+m4_ifndef([AS_IF],
+[m4_defun([AS_IF],[
+if $1 >/dev/null 2>&1; then
+ $2
+ test
+else
+ $3
+ test
+fi
+])]
+)
+
+# AC_CHECK_PROGS
+m4_ifndef([AC_CHECK_PROGS],
+AU_ALIAS([AC_CHECK_PROGS],[AC_PATH_PROGS])
+)
+
+# AS_CASE
+m4_ifndef([AS_CASE],
+[m4_defun([AS_CASE],[
+case $1 in
+ $2) $3
+ ;;
+ *) $4
+ ;;
+esac
+])])
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
AC_DEFUN([AX_PTHREAD], [
diff --git a/m4/ax_winsock.m4 b/m4/ax_winsock.m4
index fbe1621..0968f75 100644
--- a/m4/ax_winsock.m4
+++ b/m4/ax_winsock.m4
@@ -9,5 +9,5 @@ AC_DEFUN([AX_WINSOCK],[
ac_cv_header_winsock2_h="no"
ac_cv_header_winsock_h="no"
fi
- AC_CHECK_HEADERS([windows.h winsock2.h winsock.h sys/socket.h])
+ AC_CHECK_HEADERS([winsock2.h winsock.h windows.h sys/socket.h])
])
diff --git a/m4/boinc_platform.m4 b/m4/boinc_platform.m4
index f187df4..437fcb6 100644
--- a/m4/boinc_platform.m4
+++ b/m4/boinc_platform.m4
@@ -56,6 +56,13 @@ AC_DEFUN([BOINC_PLATFORM],[
i386-pc-os2)
boinc_platform="i686-pc-os2"
;;
+ i*86-*-mingw32)
+ boinc_platform="windows_intelx86"
+ ;;
+ x86_64-*-mingw32)
+ boinc_platform="windows_x86_64"
+ boinc_alt_platform="windows_intelx86"
+ ;;
esac
fi
AC_DEFINE_UNQUOTED([HOSTTYPE],"$boinc_platform",[Platform identification used to identify applications for this BOINC core client])
diff --git a/m4/sah_select_bitness.m4 b/m4/sah_select_bitness.m4
index f96a6bb..537d83d 100644
--- a/m4/sah_select_bitness.m4
+++ b/m4/sah_select_bitness.m4
@@ -6,14 +6,14 @@ AC_DEFUN([SAH_DEFAULT_BITNESS],[
${CC} ${CFLAGS} -c conftest.c >&5
COMPILER_MODEL_BITS=32
if test -f conftest.${OBJEXT} ; then
- if test -n "`file conftest.${OBJEXT} | grep -i 64-bit`"
+ if test -n "`objdump --file-headers conftest.${OBJEXT} | grep 'file format' | grep 64`" -o -n "`file conftest.${OBJEXT} | grep -i 64-bit`"
then
COMPILER_MODEL_BITS=64
- else
- if test -n "`file conftest.${OBJEXT} | grep -i 16-bit`"
- then
- COMPILER_MODEL_BITS=16
- fi
+# else
+# if test -n "`objdump --file-headers conftest.${OBJEXT} | grep 'file format' | grep 16`"
+# then
+# COMPILER_MODEL_BITS=16
+# fi
fi
fi
/bin/rm conftest.c
diff --git a/py/Boinc/boinc_db.py b/py/Boinc/boinc_db.py
index f6a60e7..c70d29e 100644
--- a/py/Boinc/boinc_db.py
+++ b/py/Boinc/boinc_db.py
@@ -50,11 +50,6 @@ ASSIGN_NONE = 0
ASSIGN_HOST = 1
ASSIGN_USER = 2
ASSIGN_TEAM = 3
-BATCH_STATE_INIT = 0
-BATCH_STATE_IN_PROGRESS = 1
-BATCH_STATE_COMPLETE = 2
-BATCH_STATE_ABORTED = 3
-BATCH_STATE_RETIRED = 4
GUI_RPC_PORT = 31416
RUN_MODE_ALWAYS = 1
RUN_MODE_AUTO = 2
@@ -119,3 +114,8 @@ RPC_REASON_TRICKLE_UP = 4
RPC_REASON_ACCT_MGR_REQ = 5
RPC_REASON_INIT = 6
RPC_REASON_PROJECT_REQ = 7
+BATCH_STATE_INIT = 0
+BATCH_STATE_IN_PROGRESS = 1
+BATCH_STATE_COMPLETE = 2
+BATCH_STATE_ABORTED = 3
+BATCH_STATE_RETIRED = 4
diff --git a/py/Boinc/setup_project.py b/py/Boinc/setup_project.py
index 3444523..9da06e0 100644
--- a/py/Boinc/setup_project.py
+++ b/py/Boinc/setup_project.py
@@ -316,12 +316,12 @@ def install_boinc_files(dest_dir, install_web_files, install_server_files):
# which is needed even for a server_only upgrade
install_glob(srcdir('html/ops/*.php'), dir('html/ops/'))
- install_glob(srcdir('html/ops/*.inc'), dir('html/ops/'))
if install_web_files:
install_glob(srcdir('html/inc/*.inc'), dir('html/inc/'))
install_glob(srcdir('html/inc/*.php'), dir('html/inc/'))
install_glob(srcdir('html/inc/*.dat'), dir('html/inc/'))
+ install_glob(srcdir('html/ops/*.css'), dir('html/ops/'))
install_glob(srcdir('html/ops/ffmail/sample*'), dir('html/ops/ffmail/'))
install_glob(srcdir('html/ops/mass_email/sample*'), dir('html/ops/mass_email/'))
install_glob(srcdir('html/ops/remind_email/sample*'), dir('html/ops/remind_email/'))
@@ -477,6 +477,7 @@ class Project:
config.daily_result_quota = 500
config.disable_account_creation = 0
config.show_results = 1
+ config.cache_md5_info = 1
config.sched_debug_level = 3
config.fuh_debug_level = 3
config.one_result_per_user_per_wu = 0
diff --git a/samples/condor/boinc_gahp.cpp b/samples/condor/boinc_gahp.cpp
index 840fb7a..552b153 100644
--- a/samples/condor/boinc_gahp.cpp
+++ b/samples/condor/boinc_gahp.cpp
@@ -45,10 +45,27 @@ char project_url[256];
char authenticator[256];
char response_prefix[256];
+// The following are used to implement "asynchronous mode",
+// in which we send "R" when a command has completed.
+// Synchronization is needed in case 2 commands complete around the same time.
+//
+bool wrote_r = false;
+bool async_mode = false;
+
+#define BPRINTF(fmt, ...) \
+ printf( "%s" fmt, response_prefix, ##__VA_ARGS__ ); \
+
bool debug_mode = false;
// if set, handle commands synchronously rather than
// handling them in separate threads
+struct SUBMIT_REQ {
+ char batch_name[256];
+ char app_name[256];
+ vector<JOB> jobs;
+ int batch_id;
+};
+
// represents a command.
//
struct COMMAND {
@@ -65,6 +82,8 @@ struct COMMAND {
vector<string> abort_job_names;
vector<string> batch_names;
char batch_name[256];
+ double lease_end_time;
+ double min_mod_time;
COMMAND(char* _in) {
in = _in;
@@ -80,6 +99,7 @@ struct COMMAND {
int parse_fetch_output(char*);
int parse_abort_jobs(char*);
int parse_retire_batch(char*);
+ int parse_set_lease(char*);
};
vector<COMMAND*> commands;
@@ -114,6 +134,9 @@ int process_input_files(SUBMIT_REQ& req, string& error_msg) {
unsigned int i, j;
int retval;
char buf[1024];
+ map<string, LOCAL_FILE> local_files;
+ // maps local path to info about file
+
// get the set of unique source paths
//
@@ -121,7 +144,7 @@ int process_input_files(SUBMIT_REQ& req, string& error_msg) {
for (i=0; i<req.jobs.size(); i++) {
JOB& job = req.jobs[i];
for (j=0; j<job.infiles.size(); j++) {
- INFILE infile = job.infiles[j];
+ INFILE& infile = job.infiles[j];
unique_paths.insert(infile.src_path);
}
}
@@ -135,17 +158,17 @@ int process_input_files(SUBMIT_REQ& req, string& error_msg) {
LOCAL_FILE lf;
retval = compute_md5(s, lf);
if (retval) return retval;
- req.local_files.insert(std::pair<string, LOCAL_FILE>(s, lf));
+ local_files.insert(std::pair<string, LOCAL_FILE>(s, lf));
iter++;
}
// ask the server which files it doesn't already have.
//
map<string, LOCAL_FILE>::iterator map_iter;
- map_iter = req.local_files.begin();
+ map_iter = local_files.begin();
vector<string> md5s, paths;
vector<int> absent_files;
- while (map_iter != req.local_files.end()) {
+ while (map_iter != local_files.end()) {
LOCAL_FILE lf = map_iter->second;
paths.push_back(map_iter->first);
md5s.push_back(lf.md5);
@@ -154,7 +177,6 @@ int process_input_files(SUBMIT_REQ& req, string& error_msg) {
retval = query_files(
project_url,
authenticator,
- paths,
md5s,
req.batch_id,
absent_files,
@@ -179,6 +201,19 @@ int process_input_files(SUBMIT_REQ& req, string& error_msg) {
error_msg
);
if (retval) return retval;
+
+ // fill in the physical file names in the submit request
+ //
+ for (unsigned int i=0; i<req.jobs.size(); i++) {
+ JOB& job = req.jobs[i];
+ for (unsigned int j=0; j<job.infiles.size(); j++) {
+ INFILE& infile = job.infiles[j];
+ map<string, LOCAL_FILE>::iterator iter = local_files.find(infile.src_path);
+ LOCAL_FILE& lf = iter->second;
+ sprintf(infile.physical_name, "jf_%s", lf.md5);
+ }
+ }
+
return 0;
}
@@ -200,7 +235,7 @@ int COMMAND::parse_submit(char* p) {
for (int j=0; j<ninfiles; j++) {
INFILE infile;
strcpy(infile.src_path, strtok_r(NULL, " ", &p));
- strcpy(infile.dst_filename, strtok_r(NULL, " ", &p));
+ strcpy(infile.logical_name, strtok_r(NULL, " ", &p));
job.infiles.push_back(infile);
}
submit_req.jobs.push_back(job);
@@ -229,8 +264,10 @@ void handle_submit(COMMAND& c) {
c.out = strdup(s.c_str());
return;
}
+ double expire_time = time(0) + 3600;
retval = create_batch(
- project_url, authenticator, req.batch_name, req.app_name, req.batch_id, error_msg
+ project_url, authenticator, req.batch_name, req.app_name, expire_time,
+ req.batch_id, error_msg
);
if (retval) {
sprintf(buf, "error\\ creating\\ batch:\\ %d\\ ", retval);
@@ -245,7 +282,11 @@ void handle_submit(COMMAND& c) {
c.out = strdup(s.c_str());
return;
}
- retval = submit_jobs(project_url, authenticator, req, error_msg);
+
+ retval = submit_jobs(
+ project_url, authenticator,
+ req.app_name, req.batch_id, req.jobs, error_msg
+ );
if (retval) {
sprintf(buf, "error\\ submitting\\ jobs:\\ %d\\ ", retval);
s = string(buf) + escape_str(error_msg);
@@ -256,6 +297,7 @@ void handle_submit(COMMAND& c) {
}
int COMMAND::parse_query_batches(char* p) {
+ min_mod_time = atof(strtok_r(NULL, " ", &p));
int n = atoi(strtok_r(NULL, " ", &p));
for (int i=0; i<n; i++) {
char* q = strtok_r(NULL, " ", &p);
@@ -264,25 +306,27 @@ int COMMAND::parse_query_batches(char* p) {
return 0;
}
-void handle_query_batches(COMMAND&c) {
- QUERY_BATCH_REPLY reply;
+void handle_query_batches(COMMAND& c) {
+ QUERY_BATCH_SET_REPLY reply;
char buf[256];
string error_msg, s;
- int retval = query_batches(
- project_url, authenticator, c.batch_names, reply, error_msg
+ int retval = query_batch_set(
+ project_url, authenticator, c.min_mod_time, c.batch_names, reply, error_msg
);
if (retval) {
sprintf(buf, "error\\ querying\\ batch:\\ %d\\ ", retval);
s = string(buf) + escape_str(error_msg);
} else {
s = string("NULL");
+ sprintf(buf, " %f", reply.server_time);
+ s += string(buf);
int i = 0;
for (unsigned int j=0; j<reply.batch_sizes.size(); j++) {
int n = reply.batch_sizes[j];
sprintf(buf, " %d", n);
s += string(buf);
for (int k=0; k<n; k++) {
- QUERY_BATCH_JOB &j = reply.jobs[i++];
+ JOB_STATUS &j = reply.jobs[i++];
sprintf(buf, " %s %s", j.job_name.c_str(), j.status.c_str());
s += string(buf);
}
@@ -385,7 +429,11 @@ void handle_fetch_output(COMMAND& c) {
// write stderr output to specified file
//
if (cjd.canonical_resultid || cjd.error_resultid) {
- sprintf(path, "%s/%s", req.dir, req.stderr_filename.c_str());
+ if (req.stderr_filename[0] == '/') {
+ sprintf(path, "%s", req.stderr_filename.c_str());
+ } else {
+ sprintf(path, "%s/%s", req.dir, req.stderr_filename.c_str());
+ }
FILE* f = fopen(path, "w");
if (!f) {
sprintf(buf, "can't\\ open\\ stderr\\ output\\ file\\ %s ", path);
@@ -399,7 +447,7 @@ void handle_fetch_output(COMMAND& c) {
if (zipped_output(td)) {
// the job's output file is a zip archive. Get it and unzip
//
- sprintf(path, "%s/temp.zip", req.dir);
+ sprintf(path, "%s/%s_output.zip", req.dir, req.job_name);
retval = get_output_file(
project_url, authenticator, req.job_name, 0, path, error_msg
);
@@ -407,10 +455,12 @@ void handle_fetch_output(COMMAND& c) {
sprintf(buf, "get_output_file()\\ returned\\ %d\\ ", retval);
s = string(buf) + escape_str(error_msg);
} else {
- sprintf(buf, "cd %s; unzip temp.zip");
+ sprintf(buf, "cd %s; unzip %s_output.zip", req.dir, req.job_name);
retval = system(buf);
if (retval) {
s = string("unzip\\ failed");
+ } else {
+ unlink(path);
}
}
} else if (req.fetch_all) {
@@ -515,6 +565,28 @@ void handle_retire_batch(COMMAND& c) {
c.out = strdup(s.c_str());
}
+int COMMAND::parse_set_lease(char* p) {
+ strcpy(batch_name, strtok_r(NULL, " ", &p));
+ lease_end_time = atof(strtok_r(NULL, " ", &p));
+ return 0;
+}
+
+void handle_set_lease(COMMAND& c) {
+ string error_msg;
+ int retval = set_expire_time(
+ project_url, authenticator, c.batch_name, c.lease_end_time, error_msg
+ );
+ string s;
+ char buf[256];
+ if (retval) {
+ sprintf(buf, "set_lease()\\ returned\\ %d\\ ", retval);
+ s = string(buf) + escape_str(error_msg);
+ } else {
+ s = "NULL";
+ }
+ c.out = strdup(s.c_str());
+}
+
void handle_ping(COMMAND& c) {
string error_msg, s;
char buf[256];
@@ -540,11 +612,20 @@ void* handle_command_aux(void* q) {
handle_abort_jobs(c);
} else if (!strcasecmp(c.cmd, "BOINC_RETIRE_BATCH")) {
handle_retire_batch(c);
+ } else if (!strcasecmp(c.cmd, "BOINC_SET_LEASE")) {
+ handle_set_lease(c);
} else if (!strcasecmp(c.cmd, "BOINC_PING")) {
handle_ping(c);
} else {
c.out = strdup("Unknown command");
}
+ flockfile(stdout);
+ if ( async_mode && !wrote_r ) {
+ BPRINTF("R\n");
+ fflush(stdout);
+ wrote_r = true;
+ }
+ funlockfile(stdout);
return NULL;
}
@@ -568,6 +649,8 @@ int COMMAND::parse_command() {
retval = parse_abort_jobs(p);
} else if (!strcasecmp(cmd, "BOINC_RETIRE_BATCH")) {
retval = parse_retire_batch(p);
+ } else if (!strcasecmp(cmd, "BOINC_SET_LEASE")) {
+ retval = parse_set_lease(p);
} else if (!strcasecmp(cmd, "BOINC_PING")) {
retval = 0;
} else {
@@ -576,8 +659,9 @@ int COMMAND::parse_command() {
return retval;
}
-void print_version() {
- printf("$GahpVersion: 1.0 %s BOINC\\ GAHP $\n", __DATE__);
+void print_version(bool startup) {
+ BPRINTF("%s$GahpVersion: 1.0 %s BOINC\\ GAHP $\n", startup ? "" : "S ",
+ __DATE__);
}
int n_results() {
@@ -598,56 +682,69 @@ int handle_command(char* p) {
char cmd[256];
int id;
+ cmd[0] = '\0';
sscanf(p, "%s", cmd);
if (!strcasecmp(cmd, "VERSION")) {
- printf("S ");
- print_version();
+ print_version(false);
} else if (!strcasecmp(cmd, "COMMANDS")) {
- printf("S ASYNC_MODE_OFF ASYNC_MODE_ON BOINC_ABORT_JOBS BOINC_FETCH_OUTPUT BOINC_PING BOINC_QUERY_BATCHES BOINC_RETIRE_BATCH BOINC_SELECT_PROJECT BOINC_SUBMIT COMMANDS QUIT RESULTS VERSION\n");
+ BPRINTF("S ASYNC_MODE_OFF ASYNC_MODE_ON BOINC_ABORT_JOBS BOINC_FETCH_OUTPUT BOINC_PING BOINC_QUERY_BATCHES BOINC_RETIRE_BATCH BOINC_SELECT_PROJECT BOINC_SET_LEASE BOINC_SUBMIT COMMANDS QUIT RESULTS VERSION\n");
} else if (!strcasecmp(cmd, "RESPONSE_PREFIX")) {
- printf("S\n");
+ flockfile(stdout);
+ BPRINTF("S\n");
strcpy(response_prefix, p+strlen("RESPONSE_PREFIX "));
+ funlockfile(stdout);
} else if (!strcasecmp(cmd, "ASYNC_MODE_ON")) {
- printf("S\n");
+ flockfile(stdout);
+ BPRINTF("S\n");
+ async_mode = true;
+ funlockfile(stdout);
} else if (!strcasecmp(cmd, "ASYNC_MODE_OFF")) {
- printf("S\n");
+ flockfile(stdout);
+ BPRINTF("S\n");
+ async_mode = false;
+ funlockfile(stdout);
} else if (!strcasecmp(cmd, "QUIT")) {
exit(0);
} else if (!strcasecmp(cmd, "RESULTS")) {
- printf("S %d\n", n_results());
+ flockfile(stdout);
+ int cnt = n_results();
+ BPRINTF("S %d\n", cnt);
vector<COMMAND*>::iterator i = commands.begin();
- while (i != commands.end()) {
+ int j = 0;
+ while (i != commands.end() && j < cnt) {
COMMAND *c2 = *i;
if (c2->out) {
- printf("%s%d %s\n", response_prefix, c2->id, c2->out);
- free(c2->out);
- free(c2->in);
- free(c2);
+ BPRINTF("%d %s\n", c2->id, c2->out);
+ delete c2;
i = commands.erase(i);
+ j++;
} else {
i++;
}
}
+ wrote_r = false;
+ funlockfile(stdout);
} else if (!strcasecmp(cmd, "BOINC_SELECT_PROJECT")) {
int n = sscanf(p, "%s %s %s", cmd, project_url, authenticator);
if (n ==3) {
- printf("S\n");
+ BPRINTF("S\n");
} else {
- printf("E\n");
+ BPRINTF("E\n");
}
} else {
// asynchronous commands go here
//
COMMAND *cp = new COMMAND(p);
+ p = NULL;
int retval = cp->parse_command();
if (retval) {
- printf("E\n");
+ BPRINTF("E\n");
delete cp;
return 0;
}
if (debug_mode) {
handle_command_aux(cp);
- printf("result: %s\n", cp->out);
+ BPRINTF("result: %s\n", cp->out);
delete cp;
} else {
printf("S\n");
@@ -655,7 +752,7 @@ int handle_command(char* p) {
pthread_t thread_handle;
pthread_attr_t thread_attrs;
pthread_attr_init(&thread_attrs);
- pthread_attr_setstacksize(&thread_attrs, 32768);
+ pthread_attr_setstacksize(&thread_attrs, 256*1024);
int retval = pthread_create(
&thread_handle, &thread_attrs, &handle_command_aux, cp
);
@@ -665,6 +762,7 @@ int handle_command(char* p) {
}
}
}
+ free(p);
return 0;
}
@@ -684,6 +782,9 @@ char* get_cmd() {
}
if (c == '\n') {
p[len] = 0;
+ if ( len > 0 && p[len-1] == '\r' ) {
+ p[len-1] = 0;
+ }
return p;
}
p[len++] = c;
@@ -718,14 +819,11 @@ void read_config() {
int main() {
read_config();
strcpy(response_prefix, "");
- print_version();
+ print_version(true);
fflush(stdout);
while (1) {
char* p = get_cmd();
if (p == NULL) break;
- if (strlen(response_prefix)) {
- printf("%s", response_prefix);
- }
handle_command(p);
fflush(stdout);
}
diff --git a/samples/condor/request_gen b/samples/condor/request_gen
index bfb19eb..1ab68cc 100755
--- a/samples/condor/request_gen
+++ b/samples/condor/request_gen
@@ -11,15 +11,17 @@
// stderr_out1, stderr_out2: stderr output of the 2 jobs
$t = time();
+$expire = $t + 86400;
$batch_name = "batch_$t";
$job_name_1 = "job1_$t";
$job_name_2 = "job2_$t";
echo "
BOINC_SUBMIT 1 $batch_name uppercase 2 $job_name_1 0 1 in1 in $job_name_2 0 1 in2 in 1
-BOINC_QUERY_BATCHES 2 1 $batch_name
+BOINC_QUERY_BATCHES 2 0 1 $batch_name
BOINC_ABORT_JOBS 6 $job_name_1 $job_name_2
BOINC_FETCH_OUTPUT 3 $job_name_1 . stderr_out1 ALL 1 out out1
BOINC_FETCH_OUTPUT 4 $job_name_2 . stderr_out2 ALL 1 out out2
BOINC_RETIRE_BATCH 5 $batch_name
+BOINC_SET_LEASE 6 $batch_name $expire
";
?>
diff --git a/samples/condor/request_gen2 b/samples/condor/request_gen2
new file mode 100755
index 0000000..c43a25c
--- /dev/null
+++ b/samples/condor/request_gen2
@@ -0,0 +1,25 @@
+#! /usr/bin/env php
+<?php
+
+// Generate GAHP commands for submitting/querying/fetching a batch.
+// Copy and paste these into a running BOINC GAHP
+//
+// Files in0 and in1 must exist already (these are input files)
+//
+// After fetching outputs, the following should exist:
+// outn_m: output file m of job n
+// stderr_out1, stderr_out2: stderr output of the 2 jobs
+
+$t = time();
+$batch_name = "batch_$t";
+$job_name_1 = "job1_$t";
+$job_name_2 = "job2_$t";
+echo "
+BOINC_SUBMIT 1 $batch_name uppercase_n 2 $job_name_1 0 2 in0 in0 in1 in1 $job_name_2 0 2 in0 in0 in1 in1
+BOINC_QUERY_BATCHES 2 1 $batch_name
+BOINC_ABORT_JOBS 6 $job_name_1 $job_name_2
+BOINC_FETCH_OUTPUT 3 $job_name_1 . stderr_out1 ALL 1 out0 out1_0 out1 out1_1
+BOINC_FETCH_OUTPUT 4 $job_name_2 . stderr_out2 ALL 1 out0 out2_0 out1 out2_1
+BOINC_RETIRE_BATCH 5 $batch_name
+";
+?>
diff --git a/samples/example_app/Makefile b/samples/example_app/Makefile
index 482d8c4..8163dab 100644
--- a/samples/example_app/Makefile
+++ b/samples/example_app/Makefile
@@ -38,7 +38,7 @@ else
LIBJPEG = -ljpeg
endif
-PROGS = uc2 \
+PROGS = uc2 ucn \
# uc2_graphics
# make this optional so compile doesn't break on systems without OpenGL
@@ -65,6 +65,11 @@ uc2: uc2.o libstdc++.a $(BOINC_API_DIR)/libboinc_api.a $(BOINC_LIB_DIR)/libboinc
$(BOINC_API_DIR)/libboinc_api.a \
$(BOINC_LIB_DIR)/libboinc.a
+ucn: ucn.o libstdc++.a $(BOINC_API_DIR)/libboinc_api.a $(BOINC_LIB_DIR)/libboinc.a
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -o ucn ucn.o libstdc++.a -pthread \
+ $(BOINC_API_DIR)/libboinc_api.a \
+ $(BOINC_LIB_DIR)/libboinc.a
+
uc2_graphics: uc2_graphics.o ttfont.o libstdc++.a $(BOINC_LIB_DIR)/libboinc.a $(BOINC_API_DIR)/libboinc_graphics2.a
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -o uc2_graphics uc2_graphics.o ttfont.o libstdc++.a -pthread \
$(BOINC_API_DIR)/libboinc_graphics2.a \
diff --git a/samples/example_app/uc2.cpp b/samples/example_app/uc2.cpp
index 47d80de..486bd1a 100644
--- a/samples/example_app/uc2.cpp
+++ b/samples/example_app/uc2.cpp
@@ -29,12 +29,14 @@
// read "in", convert to upper case, write to "out"
//
// command line options
-// --run_slow: sleep 1 second after each character
// --cpu_time N: use about N CPU seconds after copying files
+// --critical_section: run most of the time in a critical section
// --early_exit: exit(10) after 30 chars
// --early_crash: crash after 30 chars
+// --run_slow: sleep 1 second after each character
// --trickle_up: sent a trickle-up message
// --trickle_down: receive a trickle-up message
+// --network_usage: tell the client we used some network
//
#ifdef _WIN32
@@ -56,9 +58,9 @@
#include "boinc_api.h"
#include "mfile.h"
#include "graphics2.h"
+#include "uc2.h"
#ifdef APP_GRAPHICS
-#include "uc2.h"
UC_SHMEM* shmem;
#endif
@@ -75,6 +77,8 @@ bool early_sleep = false;
bool trickle_up = false;
bool trickle_down = false;
bool critical_section = false; // run most of the time in a critical section
+bool report_fraction_done = true;
+bool network_usage = false;
double cpu_time = 20, comp_result;
// do about .5 seconds of computing
@@ -149,12 +153,21 @@ int main(int argc, char **argv) {
if (strstr(argv[i], "early_sleep")) early_sleep = true;
if (strstr(argv[i], "run_slow")) run_slow = true;
if (strstr(argv[i], "critical_section")) critical_section = true;
+ if (strstr(argv[i], "network_usage")) network_usage = true;
if (strstr(argv[i], "cpu_time")) {
cpu_time = atof(argv[++i]);
}
if (strstr(argv[i], "trickle_up")) trickle_up = true;
if (strstr(argv[i], "trickle_down")) trickle_down = true;
}
+ retval = boinc_init();
+ if (retval) {
+ fprintf(stderr, "%s boinc_init returned %d\n",
+ boinc_msg_prefix(buf, sizeof(buf)), retval
+ );
+ exit(retval);
+ }
+
fprintf(stderr, "%s app started; CPU time %f, flags:%s%s%s%s%s%s%s\n",
boinc_msg_prefix(buf, sizeof(buf)),
cpu_time,
@@ -167,14 +180,6 @@ int main(int argc, char **argv) {
trickle_down?" trickle_down":""
);
- retval = boinc_init();
- if (retval) {
- fprintf(stderr, "%s boinc_init returned %d\n",
- boinc_msg_prefix(buf, sizeof(buf)), retval
- );
- exit(retval);
- }
-
// open the input file (resolve logical name first)
//
boinc_resolve_filename(INPUT_FILENAME, input_path, sizeof(input_path));
@@ -233,15 +238,20 @@ int main(int argc, char **argv) {
boinc_register_timer_callback(update_shmem);
#endif
+ if (network_usage) {
+ boinc_network_usage(5., 17.);
+ }
+
// main loop - read characters, convert to UC, write
//
for (i=0; ; i++) {
c = fgetc(infile);
-
if (c == EOF) break;
+
c = toupper(c);
out._putchar(c);
nchars++;
+
if (run_slow) {
boinc_sleep(1.);
}
@@ -269,9 +279,11 @@ int main(int argc, char **argv) {
boinc_checkpoint_completed();
}
- fd = nchars/fsize;
- if (cpu_time) fd /= 2;
- boinc_fraction_done(fd);
+ if (report_fraction_done) {
+ fd = nchars/fsize;
+ if (cpu_time) fd /= 2;
+ boinc_fraction_done(fd);
+ }
}
retval = out.flush();
@@ -304,8 +316,10 @@ int main(int argc, char **argv) {
for (i=0; ; i++) {
double e = dtime()-start;
if (e > cpu_time) break;
- fd = .5 + .5*(e/cpu_time);
- boinc_fraction_done(fd);
+ if (report_fraction_done) {
+ fd = .5 + .5*(e/cpu_time);
+ boinc_fraction_done(fd);
+ }
if (boinc_time_to_checkpoint()) {
retval = do_checkpoint(out, nchars);
@@ -346,6 +360,3 @@ int WINAPI WinMain(
return main(argc, argv);
}
#endif
-
-const char *BOINC_RCSID_33ac47a071 = "$Id: upper_case.cpp 20315 2010-01-29 15:50:47Z davea $";
-
diff --git a/samples/example_app/uc2.h b/samples/example_app/uc2.h
index d360617..2bc9d3c 100644
--- a/samples/example_app/uc2.h
+++ b/samples/example_app/uc2.h
@@ -27,3 +27,13 @@ struct UC_SHMEM {
// main program decrements it once/sec.
// If it's zero, don't bother updating shmem
};
+
+#ifdef _WIN32
+
+extern "C" {
+
+__declspec( dllimport ) char* uc2_dll_version();
+
+};
+
+#endif
diff --git a/samples/example_app/uc2_dll.cpp b/samples/example_app/uc2_dll.cpp
new file mode 100644
index 0000000..6fee901
--- /dev/null
+++ b/samples/example_app/uc2_dll.cpp
@@ -0,0 +1,62 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2008 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+#ifdef _WIN32
+#include "boinc_win.h"
+#else
+#include "config.h"
+#endif
+
+#ifdef _WIN32
+
+extern "C" {
+
+ __declspec( dllexport ) BOOL WINAPI DllMain(
+ HINSTANCE /*hinstDLL*/, // handle to DLL module
+ DWORD fdwReason, // reason for calling function
+ LPVOID /*lpReserved*/ // reserved
+ ){
+ // Perform actions based on the reason for calling.
+ switch( fdwReason )
+ {
+ case DLL_PROCESS_ATTACH:
+ // Initialize once for each new process.
+ // Return FALSE to fail DLL load.
+ break;
+
+ case DLL_THREAD_ATTACH:
+ // Do thread-specific initialization.
+ break;
+
+ case DLL_THREAD_DETACH:
+ // Do thread-specific cleanup.
+ break;
+
+ case DLL_PROCESS_DETACH:
+ // Perform any necessary cleanup.
+ break;
+ }
+ return TRUE; // Successful DLL_PROCESS_ATTACH.
+ }
+
+ __declspec( dllexport ) char* __cdecl uc2_dll_version() {
+ return "example app DLL v1.0";
+ }
+
+}
+
+#endif
\ No newline at end of file
diff --git a/samples/example_app/uc2_graphics.cpp b/samples/example_app/uc2_graphics.cpp
index 29441be..49eb7ca 100644
--- a/samples/example_app/uc2_graphics.cpp
+++ b/samples/example_app/uc2_graphics.cpp
@@ -15,7 +15,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-// Example graphics application, paired with uc2.C
+// Example graphics application, paired with uc2.cpp
// This demonstrates:
// - using shared memory to communicate with the worker app
// - reading XML preferences by which users can customize graphics
@@ -246,7 +246,7 @@ void app_graphics_init() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- ttf_load_fonts(".");
+ ttf_load_fonts(strlen(uc_aid.project_dir)?uc_aid.project_dir:".");
boinc_resolve_filename("logo.jpg", path, sizeof(path));
logo.load_image_file(path);
diff --git a/samples/example_app/ucn.cpp b/samples/example_app/ucn.cpp
new file mode 100644
index 0000000..8316eb8
--- /dev/null
+++ b/samples/example_app/ucn.cpp
@@ -0,0 +1,129 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// another BOINC test application;
+// converts one or more files to uppercase,
+// then uses some CPU time
+//
+// cmdline: in1 out1 ... inn outn
+//
+
+#include <stdio.h>
+
+#include "boinc_api.h"
+#include "filesys.h"
+#include "util.h"
+
+double cpu_time = 20, comp_result;
+
+// do about .5 seconds of computing
+// (note: I needed to add an arg to this;
+// otherwise the MS C++ compiler optimizes away
+// all but the first call to it!)
+//
+static double do_some_computing(int foo) {
+ double x = 3.14159*foo;
+ int i;
+ for (i=0; i<50000000; i++) {
+ x += 5.12313123;
+ x *= 0.5398394834;
+ }
+ return x;
+}
+
+int convert_file(char* in, char* out) {
+ char input_path[1024], output_path[1024];
+ char buf[256];
+
+ boinc_resolve_filename(in, input_path, sizeof(input_path));
+ FILE* infile = boinc_fopen(input_path, "r");
+ if (!infile) {
+ fprintf(stderr,
+ "%s Couldn't find input file, resolved name %s.\n",
+ boinc_msg_prefix(buf, sizeof(buf)), input_path
+ );
+ return -1;
+ }
+
+ boinc_resolve_filename(out, output_path, sizeof(output_path));
+ FILE* outfile = boinc_fopen(output_path, "w");
+ if (!outfile) {
+ fprintf(stderr,
+ "%s Couldn't find output file, resolved name %s.\n",
+ boinc_msg_prefix(buf, sizeof(buf)), output_path
+ );
+ return -1;
+ }
+
+ while (1) {
+ char c = fgetc(infile);
+ if (c == EOF) break;
+ c = toupper(c);
+ fputc(c, outfile);
+ }
+
+ fclose(infile);
+ fclose(outfile);
+ return 0;
+}
+
+int main(int argc, char **argv) {
+ char buf[256];
+ int retval = boinc_init();
+ if (retval) {
+ fprintf(stderr, "%s boinc_init returned %d\n",
+ boinc_msg_prefix(buf, sizeof(buf)), retval
+ );
+ exit(retval);
+ }
+
+ for (int i=1; i<argc; i++) {
+ if (!strcmp(argv[i], "--cpu_time")) {
+ cpu_time = atof(argv[++i]);
+ } else {
+ retval = convert_file(argv[i], argv[i+1]);
+ if (retval) exit(-1);
+ i++;
+ }
+ }
+
+ // burn up some CPU time if needed
+ //
+ if (cpu_time) {
+ double start = dtime();
+ for (int i=0; ; i++) {
+ double e = dtime()-start;
+ if (e > cpu_time) break;
+ comp_result = do_some_computing(i);
+ }
+ }
+ boinc_finish(0);
+}
+
+#ifdef _WIN32
+int WINAPI WinMain(
+ HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR Args, int WinMode
+) {
+ LPSTR command_line;
+ char* argv[100];
+ int argc;
+
+ command_line = GetCommandLine();
+ argc = parse_command_line(command_line, argv);
+ return main(argc, argv);
+}
+#endif
diff --git a/samples/nvcuda/cuda.cpp b/samples/nvcuda/cuda.cpp
index 7287006..2dc740c 100644
--- a/samples/nvcuda/cuda.cpp
+++ b/samples/nvcuda/cuda.cpp
@@ -1,6 +1,6 @@
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2013 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -17,7 +17,7 @@
//
// This program serves as both
// - An example BOINC-CUDA application, illustrating the use of the BOINC API
-// and CUDA API.
+// and CUDA API. [ SEE NOTE BELOW ]
// - A program for testing various features of BOINC.
//
// The program reads the input nxn matrix from the "input" file, inverts the
@@ -31,6 +31,17 @@
//
// See http://boinc.berkeley.edu/trac/wiki/GPUApp for any compiling issues
// Contributor: Tuan Le (tuanle86 at berkeley.edu)
+//
+// NOTE: As currently written, this sample is of limited usefulness, as it
+// is missing two important features:
+// * Code to determine the correct device assigned by BOINC. It needs to get
+// the device number from the gpu_opencl_dev_index field of init_data.xml
+// if it exists, else from the gpu_device_num field of init_data.xml if that
+// exists, else from the --device or -device argument passed by the client.
+// See api/boinc_opencl.cpp for code which does this.
+// * Code to select which NVIDIA GPU to use if there are more than one on the
+// system; it needs to call cudaSetDevice().
+//
#include "cuda.h"
#include "cuda_config.h"
@@ -50,6 +61,7 @@ int main(int argc, char** argv) {
REAL* h_idata;
MFILE out;
FILE* state, *infile;
+ double num=0;
generate_random_input_file(MATRIX_SIZE); //call this if you don't want to
//construct the input file manually
@@ -100,7 +112,8 @@ int main(int argc, char** argv) {
fscanf(state,"%d",&dimension);
cudaMallocHost((void **)&h_idata,dimension*dimension*sizeof(REAL));
for (int i=0;i<dimension*dimension;++i) {
- fscanf(state, "%f", &h_idata[i]);
+ fscanf(state, "%lf", &num);
+ h_idata[i] = num;
}
}
fclose(state);
diff --git a/samples/vboxmonitor/Makefile b/samples/vboxmonitor/Makefile
new file mode 100644
index 0000000..92b6d63
--- /dev/null
+++ b/samples/vboxmonitor/Makefile
@@ -0,0 +1,30 @@
+# This should work on Linux. Modify as needed for other platforms.
+
+# Change the following to match your installation
+BOINC_DIR = ../..
+BOINC_API_DIR = $(BOINC_DIR)/api
+BOINC_LIB_DIR = $(BOINC_DIR)/lib
+
+CXXFLAGS = -g \
+ -Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fno-common \
+ -I$(BOINC_DIR) \
+ -I$(BOINC_LIB_DIR) \
+ -I$(BOINC_API_DIR) \
+ -L$(BOINC_API_DIR) \
+ -L$(BOINC_LIB_DIR) \
+ -L.
+
+PROGS = vboxmonitor
+
+all: $(PROGS)
+
+libstdc++.a:
+ ln -s `g++ -print-file-name=libstdc++.a`
+
+clean: distclean
+
+distclean:
+ /bin/rm -f $(PROGS) *.o libstdc++.a
+
+vboxwrapper: vboxmonitor.o libstdc++.a $(BOINC_LIB_DIR)/libboinc.a $(BOINC_API_DIR)/libboinc_api.a
+ g++ $(CXXFLAGS) -o vboxmonitor vboxmonitor.o libstdc++.a -pthread -lboinc_api -lboinc
diff --git a/samples/vboxmonitor/vboxmonitor.cpp b/samples/vboxmonitor/vboxmonitor.cpp
new file mode 100644
index 0000000..78a4111
--- /dev/null
+++ b/samples/vboxmonitor/vboxmonitor.cpp
@@ -0,0 +1,75 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2010-2012 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// vboxmonitor [options] BOINC VirtualBox monitor
+// see: http://boinc.berkeley.edu/trac/wiki/VboxApps
+// Options:
+//
+//
+// Duplicate everything sent to stdin to the console and the VM Guest Log.
+//
+// You can see the VM Guest Log on the host machine by executing:
+// vboxmanage showvminfo <vm_name> --log 0
+//
+// As a matter of course, vboxwrapper dumps the last 16k of the guest log to
+// the stderr log which is uploaded to the project server in case of an error.
+//
+//
+
+#include <stdio.h>
+#include <sys/io.h>
+#include <errno.h>
+#include <iostream>
+#include <string>
+
+void guestlog(int c)
+{
+ asm volatile ("out %%al,%%dx\n" : : "a"(c), "d"(0x504));
+}
+
+int main() {
+ std::string buffer;
+
+ // root access required
+ if (iopl(3)) {
+ if (EPERM == errno) {
+ printf("vboxmonitor: this application requires root permissions.\n");
+ printf("vboxmonitor: NOTE: Use setuid to enable use by non-root accounts.\n\n");
+ }
+ return 1;
+ }
+
+ while (getline(std::cin,buffer)) {
+
+ // Write output to stdout as well as VirtualBox's Guest VM Log
+ for (size_t i = 0; i < buffer.size(); ++i) {
+ // Virtualbox
+ guestlog((int)buffer[i]);
+
+ // Console
+ putc((int)buffer[i], stdout);
+ }
+
+ // Force newlines so that the text looks good on the console and causes
+ // the guest additions to actually log the data
+ guestlog('\n');
+ putc('\n', stdout);
+
+ }
+
+ return 0;
+}
diff --git a/samples/vboxwrapper/vbox.cpp b/samples/vboxwrapper/vbox.cpp
index 53d168f..4be35c9 100644
--- a/samples/vboxwrapper/vbox.cpp
+++ b/samples/vboxwrapper/vbox.cpp
@@ -41,6 +41,7 @@ using std::string;
#if defined(_MSC_VER)
#define getcwd _getcwd
+#define stricmp _stricmp
#endif
#include "diagnostics.h"
@@ -57,10 +58,16 @@ using std::string;
#include "vboxwrapper.h"
#include "vbox.h"
+//#define NEW_EXECUTION_PATH 1
+
VBOX_VM::VBOX_VM() {
+ virtualbox_home_directory.clear();
+ virtualbox_install_directory.clear();
virtualbox_version.clear();
pFloppy = NULL;
+ vm_log.clear();
vm_master_name.clear();
+ vm_master_description.clear();
vm_name.clear();
vm_cpu_count.clear();
vm_disk_controller_type.clear();
@@ -74,6 +81,8 @@ VBOX_VM::VBOX_VM() {
suspended = false;
network_suspended = false;
online = false;
+ saving = false;
+ restoring = false;
crashed = false;
enable_cern_dataformat = false;
enable_shared_directory = false;
@@ -84,10 +93,11 @@ VBOX_VM::VBOX_VM() {
pf_guest_port = 0;
pf_host_port = 0;
headless = true;
-#ifndef _WIN32
vm_pid = 0;
-#else
+ vboxsvc_pid = 0;
+#ifdef _WIN32
vm_pid_handle = 0;
+ vboxsvc_pid_handle = 0;
#endif
// Initialize default values
@@ -105,15 +115,17 @@ VBOX_VM::~VBOX_VM() {
CloseHandle(vm_pid_handle);
vm_pid_handle = NULL;
}
+ if (vboxsvc_pid_handle) {
+ CloseHandle(vboxsvc_pid_handle);
+ vboxsvc_pid_handle = NULL;
+ }
#endif
}
int VBOX_VM::initialize() {
int rc = 0;
- string virtualbox_install_directory;
string old_path;
string new_path;
- string virtualbox_user_home;
string command;
string output;
APP_INIT_DATA aid;
@@ -143,6 +155,21 @@ int VBOX_VM::initialize() {
}
#endif
+ // Determine the VirtualBox home directory. Overwrite as needed.
+ //
+ if (getenv("VBOX_USER_HOME")) {
+ virtualbox_home_directory = getenv("VBOX_USER_HOME");
+ } else {
+ // If the override environment variable isn't specified then
+ // it is based of the current users HOME directory.
+#ifdef _WIN32
+ virtualbox_home_directory = getenv("USERPROFILE");
+#else
+ virtualbox_home_directory = getenv("HOME");
+#endif
+ virtualbox_home_directory += "/.VirtualBox";
+ }
+
// On *nix style systems, VirtualBox expects that there is a home directory specified
// by environment variable. When it doesn't exist it attempts to store logging information
// in root's home directory. Bad things happen if the process isn't owned by root.
@@ -158,51 +185,22 @@ int VBOX_VM::initialize() {
// Set the location in which the VirtualBox Configuration files can be
// stored for this instance.
if (aid.using_sandbox || force_sandbox) {
- virtualbox_user_home = aid.project_dir;
- virtualbox_user_home += "/../virtualbox";
+ virtualbox_home_directory = aid.project_dir;
+ virtualbox_home_directory += "/../virtualbox";
- if (!boinc_file_exists(virtualbox_user_home.c_str())) boinc_mkdir(virtualbox_user_home.c_str());
+ if (!boinc_file_exists(virtualbox_home_directory.c_str())) boinc_mkdir(virtualbox_home_directory.c_str());
#ifdef _WIN32
- if (!SetEnvironmentVariable("VBOX_USER_HOME", const_cast<char*>(virtualbox_user_home.c_str()))) {
+ if (!SetEnvironmentVariable("VBOX_USER_HOME", const_cast<char*>(virtualbox_home_directory.c_str()))) {
fprintf(
stderr,
"%s Failed to modify the search path.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
}
-
- // Launch VboxSVC.exe before going any further. if we don't, it'll be launched by
- // svchost.exe with its environment block which will not contain the reference
- // to VBOX_USER_HOME which is required for running in the BOINC account-based
- // sandbox.
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- string command;
-
- memset(&si, 0, sizeof(si));
- memset(&pi, 0, sizeof(pi));
-
- si.cb = sizeof(STARTUPINFO);
- si.dwFlags |= STARTF_FORCEOFFFEEDBACK | STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
-
- command = "\"" + virtualbox_install_directory + "\\VBoxSVC.exe\" -Embedding";
-
- if (!CreateProcess(NULL, (LPTSTR)command.c_str(), NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
- fprintf(
- stderr,
- "%s Creating VBoxSVC.exe failed! (%d).\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- GetLastError()
- );
- }
-
- if (pi.hThread) CloseHandle(pi.hThread);
- if (pi.hProcess) CloseHandle(pi.hProcess);
#else
// putenv does not copy its input buffer, so we must use setenv
- if (setenv("VBOX_USER_HOME", const_cast<char*>(virtualbox_user_home.c_str()), 1)) {
+ if (setenv("VBOX_USER_HOME", const_cast<char*>(virtualbox_home_directory.c_str()), 1)) {
fprintf(
stderr,
"%s Failed to modify the VBOX_USER_HOME path.\n",
@@ -226,488 +224,625 @@ int VBOX_VM::initialize() {
}
}
- virtualbox_version = "VirtualBox " + output;
+ virtualbox_version = output;
return rc;
}
-int VBOX_VM::run(double elapsed_time) {
- int retval;
-
- if (!is_registered()) {
- if (is_hdd_registered()) {
- // Handle the case where a previous instance of the same projects VM
- // was already initialized for the current slot directory but aborted
- // while the task was suspended and unloaded from memory.
- retval = deregister_stale_vm();
- if (retval) return retval;
- }
- retval = register_vm();
- if (retval) return retval;
- }
-
- // The user has requested that we exit after registering the VM, so return an
- // error to stop further processing.
- if (register_only) return ERR_FOPEN;
-
- // If we are restarting an already registered VM, then the vm_name variable
- // will be empty right now, so populate it with the master name so all of the
- // various other functions will work.
- vm_name = vm_master_name;
-
- // Check to see if the VM is already in a running state, if so, poweroff.
- poll(false);
- if (online) {
- poweroff();
- }
-
- // If our last checkpoint time is greater than 0, restore from the previously
- // saved snapshot
- if (elapsed_time) {
- restoresnapshot();
- }
-
- // Start the VM
- retval = start();
- if (retval) return retval;
-
- return 0;
-}
-
-int VBOX_VM::start() {
+void VBOX_VM::poll(bool log_state) {
+ char buf[256];
+ APP_INIT_DATA aid;
string command;
string output;
- double timeout;
- char buf[256];
- int retval;
-
- fprintf(
- stderr,
- "%s Starting VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "startvm \"" + vm_name + "\"";
- if (headless) {
- command += " --type headless";
- }
- retval = vbm_popen(command, output, "start VM");
- if (retval) return retval;
+ string::iterator iter;
+ string vmstate;
+ static string vmstate_old = "poweroff";
+ size_t vmstate_start;
+ size_t vmstate_end;
- // Wait for up to 5 minutes for the VM to switch states. A system
- // under load can take a while. Since the poll function can wait for up
- // to 45 seconds to execute a command we need to make this time based instead
- // of interation based.
- timeout = dtime() + 300;
- do {
- poll(false);
- if (online) break;
- boinc_sleep(1.0);
- } while (timeout >= dtime());
+ boinc_get_init_data_p(&aid);
- if (online) {
+ //
+ // Is our environment still sane?
+ //
+#ifdef _WIN32
+ if (aid.using_sandbox && vboxsvc_pid_handle && !process_exists(vboxsvc_pid_handle)) {
fprintf(
stderr,
- "%s Successfully started VM.\n",
+ "%s Status Report: vboxsvc.exe is no longer running.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- retval = BOINC_SUCCESS;
- } else {
+ }
+ if (vm_pid_handle && !process_exists(vm_pid_handle)) {
fprintf(
stderr,
- "%s VM did not start within 5 minutes, aborting job.\n",
+ "%s Status Report: virtualbox.exe/vboxheadless.exe is no longer running.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- retval = ERR_EXEC;
}
+#else
+ if (vm_pid && !process_exists(vm_pid)) {
+ fprintf(
+ stderr,
+ "%s Status Report: virtualbox/vboxheadless is no longer running.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ }
+#endif
- return retval;
-}
-
-int VBOX_VM::stop() {
- string command;
- string output;
- char buf[256];
- int retval = 0;
+ //
+ // What state is the VM in?
+ //
- fprintf(
- stderr,
- "%s Stopping VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- if (online) {
- command = "controlvm \"" + vm_name + "\" savestate";
- retval = vbm_popen(command, output, "stop VM", true, false);
+ command = "showvminfo \"" + vm_name + "\" ";
+ command += "--machinereadable ";
- poll(false);
+ if (vbm_popen(command, output, "VM state", false, false, 45, false) == 0) {
+ vmstate_start = output.find("VMState=\"");
+ if (vmstate_start != string::npos) {
+ vmstate_start += 9;
+ vmstate_end = output.find("\"", vmstate_start);
+ vmstate = output.substr(vmstate_start, vmstate_end - vmstate_start);
- if (!online) {
- fprintf(
- stderr,
- "%s Successfully stopped VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- retval = BOINC_SUCCESS;
- } else {
- fprintf(
- stderr,
- "%s VM did not stop when requested.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- retval = ERR_EXEC;
+ // VirtualBox Documentation suggests that that a VM is running when its
+ // machine state is between MachineState_FirstOnline and MachineState_LastOnline
+ // which as of this writing is 5 and 17.
+ //
+ // VboxManage's source shows more than that though:
+ // see: http://www.virtualbox.org/browser/trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
+ //
+ // So for now, go with what VboxManage is reporting.
+ //
+ if (vmstate == "running") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "paused") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = true;
+ crashed = false;
+ } else if (vmstate == "starting") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "stopping") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "saving") {
+ online = true;
+ saving = true;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "restoring") {
+ online = true;
+ saving = false;
+ restoring = true;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "livesnapshotting") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "deletingsnapshotlive") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "deletingsnapshotlivepaused") {
+ online = true;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ } else if (vmstate == "aborted") {
+ online = false;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = true;
+ } else if (vmstate == "gurumeditation") {
+ online = false;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = true;
+ } else {
+ online = false;
+ saving = false;
+ restoring = false;
+ suspended = false;
+ crashed = false;
+ if (log_state) {
+ fprintf(
+ stderr,
+ "%s VM is no longer is a running state. It is in '%s'.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ vmstate.c_str()
+ );
+ }
+ }
+ if (log_state && (vmstate_old != vmstate)) {
+ fprintf(
+ stderr,
+ "%s VM state change detected. (old = '%s', new = '%s')\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ vmstate_old.c_str(),
+ vmstate.c_str()
+ );
+ vmstate_old = vmstate;
+ }
}
}
- return retval;
+ //
+ // Grab a snapshot of the latest log file. Avoids multiple queries across several
+ // functions.
+ //
+ get_vm_log(vm_log);
}
-int VBOX_VM::poweroff() {
+int VBOX_VM::create_vm() {
string command;
string output;
+ string virtual_machine_slot_directory;
+ APP_INIT_DATA aid;
+ bool disable_acceleration = false;
char buf[256];
- int retval = 0;
+ int retval;
+
+ boinc_get_init_data_p(&aid);
+ get_slot_directory(virtual_machine_slot_directory);
+
+
+ // Reset VM name in case it was changed while deregistering a stale VM
+ //
+ vm_name = vm_master_name;
+
fprintf(
stderr,
- "%s Powering off VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
+ "%s Create VM. (%s, slot#%d) \n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ vm_name.c_str(),
+ aid.slot
);
- if (online) {
- command = "controlvm \"" + vm_name + "\" poweroff";
- retval = vbm_popen(command, output, "poweroff VM", true, false);
- poll(false);
-
- if (!online) {
- fprintf(
- stderr,
- "%s Successfully powered off VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- retval = BOINC_SUCCESS;
- } else {
- fprintf(
- stderr,
- "%s VM did not power off when requested.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- retval = ERR_EXEC;
- }
- }
- return retval;
-}
+ // Create and register the VM
+ //
+ command = "createvm ";
+ command += "--name \"" + vm_name + "\" ";
+ command += "--basefolder \"" + virtual_machine_slot_directory + "\" ";
+ command += "--ostype \"" + os_name + "\" ";
+ command += "--register";
+
+ retval = vbm_popen(command, output, "create");
+ if (retval) return retval;
-int VBOX_VM::pause() {
- string command;
- string output;
- int retval;
+ // Tweak the VM's Description
+ //
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--description \"" + vm_master_description + "\" ";
- command = "controlvm \"" + vm_name + "\" pause";
- retval = vbm_popen(command, output, "pause VM");
- if (retval) return retval;
- suspended = true;
- return 0;
-}
+ vbm_popen(command, output, "modifydescription", false, false);
-int VBOX_VM::resume() {
- string command;
- string output;
- int retval;
+ // Tweak the VM's CPU Count
+ //
+ fprintf(
+ stderr,
+ "%s Setting CPU Count for VM. (%s)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ vm_cpu_count.c_str()
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--cpus " + vm_cpu_count + " ";
- command = "controlvm \"" + vm_name + "\" resume";
- retval = vbm_popen(command, output, "resume VM");
+ retval = vbm_popen(command, output, "modifycpu");
if (retval) return retval;
- suspended = false;
- return 0;
-}
-int VBOX_VM::createsnapshot(double elapsed_time) {
- string command;
- string output;
- char buf[256];
- int retval;
+ // Tweak the VM's Memory Size
+ //
+ fprintf(
+ stderr,
+ "%s Setting Memory Size for VM. (%sMB)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ memory_size_mb.c_str()
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--memory " + memory_size_mb + " ";
+
+ retval = vbm_popen(command, output, "modifymem");
+ if (retval) return retval;
+ // Tweak the VM's Chipset Options
+ //
fprintf(
stderr,
- "%s Creating new snapshot for VM.\n",
+ "%s Setting Chipset Options for VM.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--acpi on ";
+ command += "--ioapic on ";
- // Pause VM - Try and avoid the live snapshot and trigger an online
- // snapshot instead.
- pause();
+ retval = vbm_popen(command, output, "modifychipset");
+ if (retval) return retval;
- // Create new snapshot
- sprintf(buf, "%d", (int)elapsed_time);
- command = "snapshot \"" + vm_name + "\" ";
- command += "take boinc_";
- command += buf;
- retval = vbm_popen(command, output, "create new snapshot", true, true, 0);
+ // Tweak the VM's Boot Options
+ //
+ fprintf(
+ stderr,
+ "%s Setting Boot Options for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--boot1 disk ";
+ command += "--boot2 none ";
+ command += "--boot3 none ";
+ command += "--boot4 none ";
+
+ retval = vbm_popen(command, output, "modifyboot");
if (retval) return retval;
- // Resume VM
- resume();
+ // Tweak the VM's Network Configuration
+ //
+ fprintf(
+ stderr,
+ "%s Setting Network Configuration for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--nic1 nat ";
+ command += "--natdnsproxy1 on ";
+ command += "--cableconnected1 off ";
- // Set the suspended flag back to false before deleting the stale
- // snapshot
- poll(false);
+ retval = vbm_popen(command, output, "modifynetwork");
+ if (retval) return retval;
- // Delete stale snapshot(s), if one exists
- cleanupsnapshots(false);
+ // Tweak the VM's USB Configuration
+ //
+ fprintf(
+ stderr,
+ "%s Disabling USB Support for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--usb off ";
+ vbm_popen(command, output, "modifyusb", false, false);
+
+ // Tweak the VM's COM Port Support
+ //
fprintf(
stderr,
- "%s Checkpoint completed.\n",
+ "%s Disabling COM Port Support for VM.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--uart1 off ";
+ command += "--uart2 off ";
- return 0;
-}
+ vbm_popen(command, output, "modifycom", false, false);
-int VBOX_VM::cleanupsnapshots(bool delete_active) {
- string command;
- string output;
- string line;
- string uuid;
- size_t eol_pos;
- size_t eol_prev_pos;
- size_t uuid_start;
- size_t uuid_end;
- char buf[256];
- int retval;
+ // Tweak the VM's LPT Port Support
+ //
+ fprintf(
+ stderr,
+ "%s Disabling LPT Port Support for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--lpt1 off ";
+ command += "--lpt2 off ";
+ vbm_popen(command, output, "modifylpt", false, false);
- // Enumerate snapshot(s)
- command = "snapshot \"" + vm_name + "\" ";
- command += "list ";
- retval = vbm_popen(command, output, "enumerate snapshot(s)");
- if (retval) return retval;
+ // Tweak the VM's Audio Support
+ //
+ fprintf(
+ stderr,
+ "%s Disabling Audio Support for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--audio none ";
- // Output should look a little like this:
- // Name: Snapshot 2 (UUID: 1751e9a6-49e7-4dcc-ab23-08428b665ddf)
- // Name: Snapshot 3 (UUID: 92fa8b35-873a-4197-9d54-7b6b746b2c58)
- // Name: Snapshot 4 (UUID: c049023a-5132-45d5-987d-a9cfadb09664) *
+ vbm_popen(command, output, "modifyaudio", false, false);
+
+ // Tweak the VM's Clipboard Support
//
- eol_prev_pos = 0;
- eol_pos = output.find("\n");
- while (eol_pos != string::npos) {
- line = output.substr(eol_prev_pos, eol_pos - eol_prev_pos);
+ fprintf(
+ stderr,
+ "%s Disabling Clipboard Support for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--clipboard disabled ";
- // This VM does not yet have any snapshots
- if (line.find("does not have any snapshots") != string::npos) break;
+ vbm_popen(command, output, "modifyclipboard", false, false);
- // The * signifies that it is the active snapshot and one we do not want to delete
- if (!delete_active && (line.find("*") != string::npos)) break;
+ // Tweak the VM's Drag & Drop Support
+ //
+ fprintf(
+ stderr,
+ "%s Disabling Drag and Drop Support for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--draganddrop disabled ";
- uuid_start = line.find("(UUID: ");
- if (uuid_start != string::npos) {
- // We can parse the virtual machine ID from the line
- uuid_start += 7;
- uuid_end = line.find(")", uuid_start);
- uuid = line.substr(uuid_start, uuid_end - uuid_start);
+ vbm_popen(command, output, "modifydragdrop", false, false);
+ // Check to see if the processor supports hardware acceleration for virtualization
+ // If it doesn't, disable the use of it in VirtualBox. Multi-core jobs require hardware
+ // acceleration and actually override this setting.
+ //
+ if (!strstr(aid.host_info.p_features, "vmx") && !strstr(aid.host_info.p_features, "svm")) {
+ fprintf(
+ stderr,
+ "%s Hardware acceleration CPU extensions not detected. Disabling VirtualBox hardware acceleration support.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ disable_acceleration = true;
+ }
+ if (strstr(aid.host_info.p_features, "hypervisor")) {
+ fprintf(
+ stderr,
+ "%s Running under Hypervisor. Disabling VirtualBox hardware acceleration support.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ disable_acceleration = true;
+ }
+ if (is_boinc_client_version_newer(aid, 7, 2, 16)) {
+ if (aid.vm_extensions_disabled) {
fprintf(
stderr,
- "%s Deleting stale snapshot.\n",
+ "%s Hardware acceleration failed with previous execution. Disabling VirtualBox hardware acceleration support.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
-
- // Delete stale snapshot, if one exists
- command = "snapshot \"" + vm_name + "\" ";
- command += "delete \"";
- command += uuid;
- command += "\" ";
-
- vbm_popen(command, output, "delete stale snapshot", true, false, 0);
+ disable_acceleration = true;
+ }
+ } else {
+ if (vm_cpu_count == "1") {
+ // Keep this around for older clients. Removing this for older clients might
+ // lead to a machine that will only return crashed VM reports.
+ vboxwrapper_msg_prefix(buf, sizeof(buf));
+ fprintf(
+ stderr,
+ "%s Legacy fallback configuration detected. Disabling VirtualBox hardware acceleration support.\n"
+ "%s NOTE: Upgrading to BOINC 7.2.16 or better may re-enable hardware acceleration.\n",
+ buf,
+ buf
+ );
+ disable_acceleration = true;
}
-
- eol_prev_pos = eol_pos + 1;
- eol_pos = output.find("\n", eol_prev_pos);
}
- return 0;
-}
+ // Only allow disabling of hardware acceleration on 32-bit VM types, 64-bit VM types require it.
+ //
+ if (os_name.find("_64") == std::string::npos) {
+ if (disable_acceleration) {
+ fprintf(
+ stderr,
+ "%s Disabling hardware acceleration support for virtualization.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--hwvirtex off ";
-int VBOX_VM::restoresnapshot() {
- string command;
- string output;
- char buf[256];
- int retval;
+ retval = vbm_popen(command, output, "VT-x/AMD-V support");
+ if (retval) return retval;
+ }
+ } else if (os_name.find("_64") != std::string::npos) {
+ if (disable_acceleration) {
+ fprintf(
+ stderr,
+ "%s ERROR: Invalid configuration. VM type requires acceleration but the current configuration cannot support it.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ return ERR_INVALID_PARAM;
+ }
+ }
+ // Add storage controller to VM
+ // See: http://www.virtualbox.org/manual/ch08.html#vboxmanage-storagectl
+ // See: http://www.virtualbox.org/manual/ch05.html#iocaching
+ //
fprintf(
stderr,
- "%s Restore from previously saved snapshot.\n",
+ "%s Adding storage controller to VM.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
+ command = "storagectl \"" + vm_name + "\" ";
+ command += "--name \"Hard Disk Controller\" ";
+ command += "--add \"" + vm_disk_controller_type + "\" ";
+ command += "--controller \"" + vm_disk_controller_model + "\" ";
+ command += "--hostiocache off ";
+ if ((vm_disk_controller_type == "sata") || (vm_disk_controller_type == "SATA")) {
+ command += "--sataportcount 1 ";
+ }
- command = "snapshot \"" + vm_name + "\" ";
- command += "restorecurrent ";
- retval = vbm_popen(command, output, "restore current snapshot");
+ retval = vbm_popen(command, output, "add storage controller (fixed disk)");
if (retval) return retval;
+ // Add storage controller for a floppy device if desired
+ //
+ if (enable_floppyio) {
+ command = "storagectl \"" + vm_name + "\" ";
+ command += "--name \"Floppy Controller\" ";
+ command += "--add floppy ";
+
+ retval = vbm_popen(command, output, "add storage controller (floppy)");
+ if (retval) return retval;
+ }
+
+ // Adding virtual hard drive to VM
+ //
fprintf(
stderr,
- "%s Restore completed.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
+ "%s Adding virtual disk drive to VM. (%s)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ image_filename.c_str()
);
+ command = "storageattach \"" + vm_name + "\" ";
+ command += "--storagectl \"Hard Disk Controller\" ";
+ command += "--port 0 ";
+ command += "--device 0 ";
+ command += "--type hdd ";
+ command += "--setuuid \"\" ";
+ command += "--medium \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
- return 0;
-}
-
-void VBOX_VM::cleanup() {
- poweroff();
- deregister_vm(true);
-
- // Give time enough for external processes to finish the cleanup process
- boinc_sleep(5.0);
-}
-
-void VBOX_VM::poll(bool log_state) {
- char buf[256];
- string command;
- string output;
- string vmstate;
- size_t vmstate_start;
- size_t vmstate_end;
-
- command = "showvminfo \"" + vm_name + "\" ";
- command += "--machinereadable ";
+ retval = vbm_popen(command, output, "storage attach (fixed disk)");
+ if (retval) return retval;
- if (vbm_popen(command, output, "VM state", false, false) == 0) {
- vmstate_start = output.find("VMState=\"");
- if (vmstate_start != string::npos) {
- vmstate_start += 9;
- vmstate_end = output.find("\"", vmstate_start);
- vmstate = output.substr(vmstate_start, vmstate_end - vmstate_start);
+ // Add network bandwidth throttle group
+ //
+ if (is_virtualbox_version_newer(4, 2, 0)) {
+ fprintf(
+ stderr,
+ "%s Adding network bandwidth throttle group to VM. (Defaulting to 1024GB)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "bandwidthctl \"" + vm_name + "\" ";
+ command += "add \"" + vm_name + "_net\" ";
+ command += "--type network ";
+ command += "--limit 1024G";
+ command += " ";
- // VirtualBox Documentation suggests that that a VM is running when its
- // machine state is between MachineState_FirstOnline and MachineState_LastOnline
- // which as of this writing is 5 and 17.
- //
- // VboxManage's source shows more than that though:
- // see: http://www.virtualbox.org/browser/trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
- //
- // So for now, go with what VboxManage is reporting.
- //
- if (vmstate == "running") {
- online = true;
- suspended = false;
- } else if (vmstate == "paused") {
- online = true;
- suspended = true;
- } else if (vmstate == "starting") {
- online = true;
- } else if (vmstate == "stopping") {
- online = true;
- } else if (vmstate == "saving") {
- online = true;
- } else if (vmstate == "restoring") {
- online = true;
- } else if (vmstate == "livesnapshotting") {
- online = true;
- } else if (vmstate == "deletingsnapshotlive") {
- online = true;
- } else if (vmstate == "deletingsnapshotlivepaused") {
- online = true;
- } else if (vmstate == "aborted") {
- online = false;
- crashed = true;
- } else if (vmstate == "gurumeditation") {
- online = false;
- crashed = true;
- } else {
- online = false;
- if (log_state) {
- fprintf(
- stderr,
- "%s VM is no longer is a running state. It is in '%s'.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vmstate.c_str()
- );
- }
- }
- }
+ retval = vbm_popen(command, output, "network throttle group (add)");
+ if (retval) return retval;
}
-}
-
-// Attempt to detect any condition that would prevent VirtualBox from running a VM properly, like:
-// 1. The DCOM service not being started on Windows
-// 2. Vboxmanage not being able to communicate with vboxsvc for some reason
-// 3. VirtualBox driver not loaded for the current Linux kernel.
-//
-// Luckly both of the above conditions can be detected by attempting to detect the host information
-// via vboxmanage and it is cross platform.
-//
-bool VBOX_VM::is_system_ready() {
- string command;
- string output;
- bool rc = true;
- command = "list hostinfo ";
- if (vbm_popen(command, output, "host info") == 0) {
+ // Adding virtual floppy disk drive to VM
+ //
+ if (enable_floppyio) {
- if (output.find("Processor count:") == string::npos) {
- rc = false;
+ // Put in place the FloppyIO abstraction
+ //
+ // NOTE: This creates the floppy.img file at runtime for use by the VM.
+ //
+ pFloppy = new FloppyIO(floppy_image_filename.c_str());
+ if (!pFloppy->ready()) {
+ fprintf(
+ stderr,
+ "%s Creating virtual floppy image failed.\n"
+ "%s Error Code '%d' Error Message '%s'\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ pFloppy->error,
+ pFloppy->errorStr.c_str()
+ );
+ return ERR_FWRITE;
}
- if (output.find("WARNING: The vboxdrv kernel module is not loaded.") != string::npos) {
- rc = false;
- }
+ fprintf(
+ stderr,
+ "%s Adding virtual floppy disk drive to VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "storageattach \"" + vm_name + "\" ";
+ command += "--storagectl \"Floppy Controller\" ";
+ command += "--port 0 ";
+ command += "--device 0 ";
+ command += "--medium \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
+
+ retval = vbm_popen(command, output, "storage attach (floppy disk)");
+ if (retval) return retval;
}
- return rc;
-}
+ // Enable the network adapter if a network connection is required.
+ //
+ if (enable_network) {
+ set_network_access(true);
-bool VBOX_VM::is_registered() {
- string command;
- string output;
+ // If the VM wants to open up a port through the VirtualBox virtual
+ // network firewall/nat do that here.
+ //
+ if (pf_guest_port) {
+ if (!pf_host_port) {
+ retval = get_port_forwarding_port();
+ if (retval) return retval;
+ }
- command = "showvminfo \"" + vm_master_name + "\" ";
- command += "--machinereadable ";
+ fprintf(
+ stderr,
+ "%s Enabling VM firewall rules.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
- if (vbm_popen(command, output, "registration", false, false) == 0) {
- if (output.find("VBOX_E_OBJECT_NOT_FOUND") == string::npos) {
- // Error message not found in text
- return true;
+ // Add new firewall rule
+ //
+ sprintf(buf, "vboxwrapper,tcp,127.0.0.1,%d,,%d", pf_host_port, pf_guest_port);
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--natpf1 \"" + string(buf) + "\" ";
+
+ retval = vbm_popen(command, output, "add updated port forwarding rule");
+ if(retval) return retval;
}
}
- return false;
-}
-
-bool VBOX_VM::is_hdd_registered() {
- string command;
- string output;
- string virtual_machine_root_dir;
- get_slot_directory(virtual_machine_root_dir);
+ // If the VM wants to enable remote desktop for the VM do it here
+ //
+ if (enable_remotedesktop) {
+ fprintf(
+ stderr,
+ "%s Enabling remote desktop for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ if (!is_extpack_installed()) {
+ fprintf(
+ stderr,
+ "%s Required extension pack not installed, remote desktop not enabled.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ } else {
+ retval = get_remote_desktop_port();
+ if (retval) return retval;
- command = "showhdinfo \"" + virtual_machine_root_dir + "/" + image_filename + "\" ";
+ sprintf(buf, "%d", rd_host_port);
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--vrde on ";
+ command += "--vrdeextpack default ";
+ command += "--vrdeauthlibrary default ";
+ command += "--vrdeauthtype null ";
+ command += "--vrdeport " + string(buf) + " ";
- if (vbm_popen(command, output, "hdd registration", false, false) == 0) {
- if ((output.find("VBOX_E_FILE_ERROR") == string::npos) &&
- (output.find("VBOX_E_OBJECT_NOT_FOUND") == string::npos) &&
- (output.find("does not match the value") == string::npos)
- ) {
- // Error message not found in text
- return true;
+ retval = vbm_popen(command, output, "remote desktop");
+ if(retval) return retval;
}
}
- return false;
-}
-
-bool VBOX_VM::is_extpack_installed() {
- string command;
- string output;
- command = "list extpacks";
+ // Enable the shared folder if a shared folder is specified.
+ //
+ if (enable_shared_directory) {
+ fprintf(
+ stderr,
+ "%s Enabling shared directory for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "sharedfolder add \"" + vm_name + "\" ";
+ command += "--name \"shared\" ";
+ command += "--hostpath \"" + virtual_machine_slot_directory + "/shared\"";
- if (vbm_popen(command, output, "extpack detection", false, false) == 0) {
- if ((output.find("Oracle VM VirtualBox Extension Pack") != string::npos) && (output.find("VBoxVRDP") != string::npos)) {
- return true;
- }
+ retval = vbm_popen(command, output, "enable shared dir");
+ if (retval) return retval;
}
- return false;
+
+ return 0;
}
int VBOX_VM::register_vm() {
@@ -729,497 +864,910 @@ int VBOX_VM::register_vm() {
fprintf(
stderr,
- "%s Registering VM. (%s) \n",
+ "%s Register VM. (%s, slot#%d) \n",
vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vm_name.c_str()
+ vm_name.c_str(),
+ aid.slot
);
- // Create and register the VM
+ // Register the VM
//
- command = "createvm ";
- command += "--name \"" + vm_name + "\" ";
- command += "--basefolder \"" + virtual_machine_slot_directory + "\" ";
- command += "--ostype \"" + os_name + "\" ";
- command += "--register";
+ command = "registervm ";
+ command += "\"" + virtual_machine_slot_directory + "/" + vm_name + "/" + vm_name + ".vbox\" ";
retval = vbm_popen(command, output, "register");
if (retval) return retval;
- // Tweak the VM's CPU Count
- //
+ return 0;
+}
+
+int VBOX_VM::deregister_vm(bool delete_media) {
+ string command;
+ string output;
+ string virtual_machine_slot_directory;
+ char buf[256];
+
+ get_slot_directory(virtual_machine_slot_directory);
+
fprintf(
stderr,
- "%s Setting CPU Count for VM. (%s)\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vm_cpu_count.c_str()
+ "%s Deregistering VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--cpus " + vm_cpu_count + " ";
- retval = vbm_popen(command, output, "modifycpu");
- if (retval) return retval;
- // Tweak the VM's Memory Size
+ // Cleanup any left-over snapshots
//
- fprintf(
- stderr,
- "%s Setting Memory Size for VM. (%sMB)\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- memory_size_mb.c_str()
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--memory " + memory_size_mb + " ";
-
- retval = vbm_popen(command, output, "modifymem");
- if (retval) return retval;
+ cleanupsnapshots(true);
- // Tweak the VM's Chipset Options
+ // Delete network bandwidth throttle group
//
- fprintf(
- stderr,
- "%s Setting Chipset Options for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--acpi on ";
- command += "--ioapic on ";
+ if (is_virtualbox_version_newer(4, 2, 0)) {
+ fprintf(
+ stderr,
+ "%s Removing network bandwidth throttle group from VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "bandwidthctl \"" + vm_name + "\" ";
+ command += "remove \"" + vm_name + "_net\" ";
- retval = vbm_popen(command, output, "modifychipset");
- if (retval) return retval;
+ vbm_popen(command, output, "network throttle group (remove)", false, false);
+ }
- // Tweak the VM's Boot Options
+ // Delete its storage controller(s)
//
fprintf(
stderr,
- "%s Setting Boot Options for VM.\n",
+ "%s Removing storage controller(s) from VM.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--boot1 disk ";
- command += "--boot2 none ";
- command += "--boot3 none ";
- command += "--boot4 none ";
+ command = "storagectl \"" + vm_name + "\" ";
+ command += "--name \"IDE Controller\" ";
+ command += "--remove ";
- retval = vbm_popen(command, output, "modifyboot");
- if (retval) return retval;
+ vbm_popen(command, output, "deregister storage controller (fixed disk)", false, false);
- // Tweak the VM's Network Configuration
- //
- fprintf(
- stderr,
- "%s Setting Network Configuration for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--nic1 nat ";
- command += "--natdnsproxy1 on ";
- command += "--cableconnected1 off ";
+ if (enable_floppyio) {
+ command = "storagectl \"" + vm_name + "\" ";
+ command += "--name \"Floppy Controller\" ";
+ command += "--remove ";
- retval = vbm_popen(command, output, "modifynetwork");
- if (retval) return retval;
+ vbm_popen(command, output, "deregister storage controller (floppy disk)", false, false);
+ }
- // Tweak the VM's USB Configuration
+ // Next, delete VM
//
fprintf(
stderr,
- "%s Disabling USB Support for VM.\n",
+ "%s Removing VM from VirtualBox.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--usb off ";
- command += "--usbcardreader off ";
+ command = "unregistervm \"" + vm_name + "\" ";
+ command += "--delete ";
- retval = vbm_popen(command, output, "modifyusb", false, false);
- if (retval) return retval;
+ vbm_popen(command, output, "delete VM", false, false);
- // Tweak the VM's COM Port Support
+ // Lastly delete medium(s) from Virtual Box Media Registry
//
fprintf(
stderr,
- "%s Disabling COM Port Support for VM.\n",
+ "%s Removing virtual disk drive from VirtualBox.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--uart1 off ";
- command += "--uart2 off ";
+ command = "closemedium disk \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
+ if (delete_media) {
+ command += "--delete ";
+ }
- retval = vbm_popen(command, output, "modifycom", false, false);
- if (retval) return retval;
+ vbm_popen(command, output, "remove virtual disk", false, false);
- // Tweak the VM's LPT Port Support
- //
- fprintf(
- stderr,
- "%s Disabling LPT Port Support for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--lpt1 off ";
- command += "--lpt2 off ";
+ if (enable_floppyio) {
+ fprintf(
+ stderr,
+ "%s Removing virtual floppy disk from VirtualBox.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "closemedium floppy \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
+ if (delete_media) {
+ command += "--delete ";
+ }
- retval = vbm_popen(command, output, "modifylpt", false, false);
- if (retval) return retval;
+ vbm_popen(command, output, "remove virtual floppy disk", false, false);
+ }
- // Tweak the VM's Audio Support
- //
- fprintf(
- stderr,
- "%s Disabling Audio Support for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--audio none ";
+ return 0;
+}
- retval = vbm_popen(command, output, "modifyaudio", false, false);
- if (retval) return retval;
+int VBOX_VM::deregister_stale_vm() {
+ string command;
+ string output;
+ string virtual_machine_slot_directory;
+ size_t uuid_start;
+ size_t uuid_end;
+ int retval;
- // Tweak the VM's Clipboard Support
+ get_slot_directory(virtual_machine_slot_directory);
+
+ // We need to determine what the name or uuid is of the previous VM which owns
+ // this virtual disk
//
- fprintf(
- stderr,
- "%s Disabling Clipboard Support for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--clipboard disabled ";
+ command = "showhdinfo \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
- retval = vbm_popen(command, output, "modifyclipboard", false, false);
+ retval = vbm_popen(command, output, "get HDD info");
if (retval) return retval;
- // Tweak the VM's Drag & Drop Support
+ // Output should look a little like this:
+ // UUID: c119acaf-636c-41f6-86c9-38e639a31339
+ // Accessible: yes
+ // Logical size: 10240 MBytes
+ // Current size on disk: 0 MBytes
+ // Type: normal (base)
+ // Storage format: VDI
+ // Format variant: dynamic default
+ // In use by VMs: test2 (UUID: 000ab2be-1254-4c6a-9fdc-1536a478f601)
+ // Location: C:\Users\romw\VirtualBox VMs\test2\test2.vdi
//
- fprintf(
- stderr,
- "%s Disabling Drag and Drop Support for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--draganddrop disabled ";
+ uuid_start = output.find("(UUID: ");
+ if (uuid_start != string::npos) {
+ // We can parse the virtual machine ID from the output
+ uuid_start += 7;
+ uuid_end = output.find(")", uuid_start);
+ vm_name = output.substr(uuid_start, uuid_end - uuid_start);
- retval = vbm_popen(command, output, "modifydragdrop", false, false);
- if (retval) return retval;
+ // Deregister stale VM by UUID
+ return deregister_vm(false);
+ } else {
+ // Did the user delete the VM in VirtualBox and not the medium? If so,
+ // just remove the medium.
+ command = "closemedium disk \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
+ vbm_popen(command, output, "remove virtual disk", false, false);
+ if (enable_floppyio) {
+ command = "closemedium floppy \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
+ vbm_popen(command, output, "remove virtual floppy disk", false, false);
+ }
+ }
+ return 0;
+}
- // Only perform hardware acceleration check on 32-bit VM types, 64-bit VM types require it.
- //
- if (os_name.find("_64") == std::string::npos) {
- // Check to see if the processor supports hardware acceleration for virtualization
- // If it doesn't, disable the use of it in VirtualBox. Multi-core jobs require hardware
- // acceleration and actually override this setting.
- //
- if ((vm_cpu_count == "1") ||
- (!strstr(aid.host_info.p_features, "vmx") && !strstr(aid.host_info.p_features, "svm"))) {
- fprintf(
- stderr,
- "%s Disabling hardware acceleration support for virtualization.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--hwvirtex off ";
+int VBOX_VM::run(bool restore_snapshot) {
+ int retval;
- retval = vbm_popen(command, output, "VT-x/AMD-V support");
+ retval = is_registered();
+ if (ERR_TIMEOUT == retval) {
+
+ return VBOXWRAPPER_ERR_RECOVERABLE;
+
+ } else if (ERR_NOT_FOUND == retval) {
+
+ if (is_vm_machine_configuration_available()) {
+ retval = register_vm();
+ if (retval) return retval;
+ } else {
+ if (is_hdd_registered()) {
+ // Handle the case where a previous instance of the same projects VM
+ // was already initialized for the current slot directory but aborted
+ // while the task was suspended and unloaded from memory.
+ retval = deregister_stale_vm();
+ if (retval) return retval;
+ }
+ retval = create_vm();
if (retval) return retval;
}
+
}
- // Add storage controller to VM
- //
- fprintf(
- stderr,
- "%s Adding storage controller to VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "storagectl \"" + vm_name + "\" ";
- command += "--name \"Hard Disk Controller\" ";
- command += "--add \"" + vm_disk_controller_type + "\" ";
- command += "--controller \"" + vm_disk_controller_model + "\" ";
+ // The user has requested that we exit after registering the VM, so return an
+ // error to stop further processing.
+ if (register_only) return ERR_FOPEN;
- retval = vbm_popen(command, output, "add storage controller (fixed disk)");
- if (retval) return retval;
+ // If we are restarting an already registered VM, then the vm_name variable
+ // will be empty right now, so populate it with the master name so all of the
+ // various other functions will work.
+ vm_name = vm_master_name;
- // Add storage controller for a floppy device if desired
- //
- if (enable_floppyio) {
- command = "storagectl \"" + vm_name + "\" ";
- command += "--name \"Floppy Controller\" ";
- command += "--add floppy ";
+ // Check to see if the VM is already in a running state, if so, poweroff.
+ poll(false);
+ if (online) {
+ retval = poweroff();
+ if (retval) return ERR_NOT_EXITED;
+ }
- retval = vbm_popen(command, output, "add storage controller (floppy)");
+ // If our last checkpoint time is greater than 0, restore from the previously
+ // saved snapshot
+ if (restore_snapshot) {
+ retval = restoresnapshot();
if (retval) return retval;
}
- // Adding virtual hard drive to VM
- //
- fprintf(
- stderr,
- "%s Adding virtual disk drive to VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "storageattach \"" + vm_name + "\" ";
- command += "--storagectl \"Hard Disk Controller\" ";
- command += "--port 0 ";
- command += "--device 0 ";
- command += "--type hdd ";
- command += "--setuuid \"\" ";
- command += "--medium \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
-
- retval = vbm_popen(command, output, "storage attach (fixed disk)");
+ // Start the VM
+ retval = start();
if (retval) return retval;
- // Adding virtual floppy disk drive to VM
- //
- if (enable_floppyio) {
+ return 0;
+}
- // Put in place the FloppyIO abstraction
- //
- // NOTE: This creates the floppy.img file at runtime for use by the VM.
- //
- pFloppy = new FloppyIO(floppy_image_filename.c_str());
- if (!pFloppy->ready()) {
- fprintf(
- stderr,
- "%s Creating virtual floppy image failed.\n"
- "%s Error Code '%d' Error Message '%s'\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- pFloppy->error,
- pFloppy->errorStr.c_str()
- );
- return ERR_FWRITE;
- }
+void VBOX_VM::cleanup() {
+ poweroff();
+ deregister_vm(true);
- fprintf(
- stderr,
- "%s Adding virtual floppy disk drive to VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "storageattach \"" + vm_name + "\" ";
- command += "--storagectl \"Floppy Controller\" ";
- command += "--port 0 ";
- command += "--device 0 ";
- command += "--medium \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
+ // Give time enough for external processes to finish the cleanup process
+ boinc_sleep(5.0);
+}
- retval = vbm_popen(command, output, "storage attach (floppy disk)");
- if (retval) return retval;
+int VBOX_VM::start() {
+ char buf[256];
+ int retval;
- }
+ fprintf(
+ stderr,
+ "%s Starting VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
- // Enable the network adapter if a network connection is required.
- //
- if (enable_network) {
- set_network_access(true);
+#ifdef NEW_EXECUTION_PATH
+ retval = launch_vboxvm();
+#else
+ string command;
+ string output;
+ int timeout = 0;
- // If the VM wants to open up a port through the VirtualBox virtual
- // network firewall/nat do that here.
- //
- if (pf_guest_port) {
- if (!pf_host_port) {
- retval = get_port_forwarding_port();
- if (retval) return retval;
- }
+ command = "startvm \"" + vm_name + "\"";
+ if (headless) {
+ command += " --type headless";
+ }
+ retval = vbm_popen(command, output, "start VM", true, false, 0);
- fprintf(
- stderr,
- "%s Enabling VM firewall rules.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
+ // Get the VM pid as soon as possible
+ while (!retval) {
+ boinc_sleep(1.0);
+ timeout += 1;
- // Add new firewall rule
- //
- sprintf(buf, "vboxwrapper,tcp,127.0.0.1,%d,,%d", pf_host_port, pf_guest_port);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--natpf1 \"" + string(buf) + "\" ";
+ get_vm_process_id();
- retval = vbm_popen(command, output, "add updated port forwarding rule");
- if(retval) return retval;
+#ifdef _WIN32
+ if (vm_pid && vm_pid_handle) break;
+#else
+ if (vm_pid) break;
+#endif
+
+ if (timeout > 45) {
+ retval = ERR_TIMEOUT;
+ break;
}
}
+#endif
- // If the VM wants to enable remote desktop for the VM do it here
- //
- if (enable_remotedesktop) {
+ if (BOINC_SUCCESS == retval) {
fprintf(
stderr,
- "%s Enabling remote desktop for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
+ "%s Successfully started VM. (PID = '%d')\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ vm_pid
);
- if (!is_extpack_installed()) {
- fprintf(
- stderr,
- "%s Required extension pack not installed, remote desktop not enabled.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- } else {
- retval = get_remote_desktop_port();
- if (retval) return retval;
-
- sprintf(buf, "%d", rd_host_port);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--vrde on ";
- command += "--vrdeextpack default ";
- command += "--vrdeauthlibrary default ";
- command += "--vrdeauthtype null ";
- command += "--vrdeport " + string(buf) + " ";
-
- retval = vbm_popen(command, output, "remote desktop");
- if(retval) return retval;
- }
- }
-
- // Enable the shared folder if a shared folder is specified.
- //
- if (enable_shared_directory) {
+ } else {
fprintf(
stderr,
- "%s Enabling shared directory for VM.\n",
+ "%s VM failed to start.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "sharedfolder add \"" + vm_name + "\" ";
- command += "--name \"shared\" ";
- command += "--hostpath \"" + virtual_machine_slot_directory + "/shared\"";
-
- retval = vbm_popen(command, output, "enable shared dir");
- if (retval) return retval;
}
- return 0;
+ return retval;
}
-int VBOX_VM::deregister_vm(bool delete_media) {
+int VBOX_VM::stop() {
string command;
string output;
- string virtual_machine_slot_directory;
+ double timeout;
char buf[256];
+ int retval = 0;
- get_slot_directory(virtual_machine_slot_directory);
-
- fprintf(
- stderr,
- "%s Deregistering VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
-
-
- // Cleanup any left-over snapshots
- //
- cleanupsnapshots(true);
-
- // Delete its storage controller(s)
- //
fprintf(
stderr,
- "%s Removing storage controller(s) from VM.\n",
+ "%s Stopping VM.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "storagectl \"" + vm_name + "\" ";
- command += "--name \"IDE Controller\" ";
- command += "--remove ";
-
- vbm_popen(command, output, "deregister storage controller (fixed disk)", false, false);
+ if (online) {
+ command = "controlvm \"" + vm_name + "\" savestate";
+ retval = vbm_popen(command, output, "stop VM", true, false);
- if (enable_floppyio) {
- command = "storagectl \"" + vm_name + "\" ";
- command += "--name \"Floppy Controller\" ";
- command += "--remove ";
+ // Wait for up to 5 minutes for the VM to switch states. A system
+ // under load can take a while. Since the poll function can wait for up
+ // to 45 seconds to execute a command we need to make this time based instead
+ // of iteration based.
+ if (!retval) {
+ timeout = dtime() + 300;
+ do {
+ poll(false);
+ if (!online && !saving) break;
+ boinc_sleep(1.0);
+ } while (timeout >= dtime());
+ }
- vbm_popen(command, output, "deregister storage controller (floppy disk)", false, false);
+ if (!online) {
+ fprintf(
+ stderr,
+ "%s Successfully stopped VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ retval = BOINC_SUCCESS;
+ } else {
+ fprintf(
+ stderr,
+ "%s VM did not stop when requested.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ retval = ERR_EXEC;
+ }
}
- // Next, delete VM
- //
- fprintf(
- stderr,
- "%s Removing VM from VirtualBox.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "unregistervm \"" + vm_name + "\" ";
- command += "--delete ";
+ return retval;
+}
- vbm_popen(command, output, "delete VM", false, false);
+int VBOX_VM::poweroff() {
+ string command;
+ string output;
+ double timeout;
+ char buf[256];
+ int retval = 0;
- // Lastly delete medium(s) from Virtual Box Media Registry
- //
fprintf(
stderr,
- "%s Removing virtual disk drive from VirtualBox.\n",
+ "%s Powering off VM.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- command = "closemedium disk \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
- if (delete_media) {
- command += "--delete ";
- }
-
- vbm_popen(command, output, "remove virtual disk", false, false);
+ if (online) {
+ command = "controlvm \"" + vm_name + "\" poweroff";
+ retval = vbm_popen(command, output, "poweroff VM", true, false);
- if (enable_floppyio) {
- fprintf(
- stderr,
- "%s Removing virtual floppy disk from VirtualBox.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "closemedium floppy \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
- if (delete_media) {
- command += "--delete ";
+ // Wait for up to 5 minutes for the VM to switch states. A system
+ // under load can take a while. Since the poll function can wait for up
+ // to 45 seconds to execute a command we need to make this time based instead
+ // of iteration based.
+ if (!retval) {
+ timeout = dtime() + 300;
+ do {
+ poll(false);
+ if (!online && !saving) break;
+ boinc_sleep(1.0);
+ } while (timeout >= dtime());
}
- vbm_popen(command, output, "remove virtual floppy disk", false, false);
+ if (!online) {
+ fprintf(
+ stderr,
+ "%s Successfully powered off VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ retval = BOINC_SUCCESS;
+ } else {
+ fprintf(
+ stderr,
+ "%s VM did not power off when requested.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ retval = ERR_EXEC;
+ }
}
- return 0;
+ return retval;
}
-int VBOX_VM::deregister_stale_vm() {
+int VBOX_VM::pause() {
string command;
string output;
- string virtual_machine_slot_directory;
- size_t uuid_start;
- size_t uuid_end;
int retval;
- get_slot_directory(virtual_machine_slot_directory);
-
- // We need to determine what the name or uuid is of the previous VM which owns
- // this virtual disk
+ // Restore the process priority back to the default process priority
+ // to speed up the last minute maintenance tasks before the VirtualBox
+ // VM goes to sleep
//
- command = "showhdinfo \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
+ reset_vm_process_priority();
- retval = vbm_popen(command, output, "get HDD info");
+ command = "controlvm \"" + vm_name + "\" pause";
+ retval = vbm_popen(command, output, "pause VM");
if (retval) return retval;
+ suspended = true;
+ return 0;
+}
- // Output should look a little like this:
- // UUID: c119acaf-636c-41f6-86c9-38e639a31339
- // Accessible: yes
- // Logical size: 10240 MBytes
- // Current size on disk: 0 MBytes
- // Type: normal (base)
- // Storage format: VDI
- // Format variant: dynamic default
- // In use by VMs: test2 (UUID: 000ab2be-1254-4c6a-9fdc-1536a478f601)
- // Location: C:\Users\romw\VirtualBox VMs\test2\test2.vdi
+int VBOX_VM::resume() {
+ string command;
+ string output;
+ int retval;
+
+ // Set the process priority back to the lowest level before resuming
+ // execution
//
- uuid_start = output.find("(UUID: ");
- if (uuid_start != string::npos) {
- // We can parse the virtual machine ID from the output
- uuid_start += 7;
- uuid_end = output.find(")", uuid_start);
- vm_name = output.substr(uuid_start, uuid_end - uuid_start);
+ lower_vm_process_priority();
+
+ command = "controlvm \"" + vm_name + "\" resume";
+ retval = vbm_popen(command, output, "resume VM");
+ if (retval) return retval;
+ suspended = false;
+ return 0;
+}
+
+int VBOX_VM::createsnapshot(double elapsed_time) {
+ string command;
+ string output;
+ char buf[256];
+ int retval;
+
+ fprintf(
+ stderr,
+ "%s Creating new snapshot for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+
+ // Pause VM - Try and avoid the live snapshot and trigger an online
+ // snapshot instead.
+ pause();
+
+ // Create new snapshot
+ sprintf(buf, "%d", (int)elapsed_time);
+ command = "snapshot \"" + vm_name + "\" ";
+ command += "take boinc_";
+ command += buf;
+ retval = vbm_popen(command, output, "create new snapshot", true, true, 0);
+ if (retval) return retval;
+
+ // Resume VM
+ resume();
+
+ // Set the suspended flag back to false before deleting the stale
+ // snapshot
+ poll(false);
+
+ // Delete stale snapshot(s), if one exists
+ retval = cleanupsnapshots(false);
+ if (retval) return retval;
+
+ fprintf(
+ stderr,
+ "%s Checkpoint completed.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+
+ return 0;
+}
+
+int VBOX_VM::cleanupsnapshots(bool delete_active) {
+ string command;
+ string output;
+ string snapshotlist;
+ string line;
+ string uuid;
+ size_t eol_pos;
+ size_t eol_prev_pos;
+ size_t uuid_start;
+ size_t uuid_end;
+ char buf[256];
+ int retval;
+
+
+ // Enumerate snapshot(s)
+ command = "snapshot \"" + vm_name + "\" ";
+ command += "list ";
+
+ // Only log the error if we are not attempting to deregister the VM.
+ // delete_active is only set to true when we are deregistering the VM.
+ retval = vbm_popen(command, snapshotlist, "enumerate snapshot(s)", !delete_active, false, 0);
+ if (retval) return retval;
+
+ // Output should look a little like this:
+ // Name: Snapshot 2 (UUID: 1751e9a6-49e7-4dcc-ab23-08428b665ddf)
+ // Name: Snapshot 3 (UUID: 92fa8b35-873a-4197-9d54-7b6b746b2c58)
+ // Name: Snapshot 4 (UUID: c049023a-5132-45d5-987d-a9cfadb09664) *
+ //
+ // Traverse the list from newest to oldest. Otherwise we end up with an error:
+ // VBoxManage.exe: error: Snapshot operation failed
+ // VBoxManage.exe: error: Hard disk 'C:\ProgramData\BOINC\slots\23\vm_image.vdi' has
+ // more than one child hard disk (2)
+ //
+
+ // Prepend a space and line feed to the output since we are going to traverse it backwards
+ snapshotlist = " \n" + snapshotlist;
+
+ eol_prev_pos = snapshotlist.rfind("\n");
+ eol_pos = snapshotlist.rfind("\n", eol_prev_pos - 1);
+ while (eol_pos != string::npos) {
+ line = snapshotlist.substr(eol_pos, eol_prev_pos - eol_pos);
+
+ // Find the previous line to use in the next iteration
+ eol_prev_pos = eol_pos;
+ eol_pos = snapshotlist.rfind("\n", eol_prev_pos - 1);
+
+ // This VM does not yet have any snapshots
+ if (line.find("does not have any snapshots") != string::npos) break;
+
+ // The * signifies that it is the active snapshot and one we do not want to delete
+ if (!delete_active && (line.rfind("*") != string::npos)) continue;
+
+ uuid_start = line.find("(UUID: ");
+ if (uuid_start != string::npos) {
+ // We can parse the virtual machine ID from the line
+ uuid_start += 7;
+ uuid_end = line.find(")", uuid_start);
+ uuid = line.substr(uuid_start, uuid_end - uuid_start);
+
+ fprintf(
+ stderr,
+ "%s Deleting stale snapshot.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+
+ // Delete stale snapshot, if one exists
+ command = "snapshot \"" + vm_name + "\" ";
+ command += "delete \"";
+ command += uuid;
+ command += "\" ";
+
+ // Only log the error if we are not attempting to deregister the VM.
+ // delete_active is only set to true when we are deregistering the VM.
+ retval = vbm_popen(command, output, "delete stale snapshot", !delete_active, false, 0);
+ if (retval) return retval;
+ }
+ }
+
+ return 0;
+}
+
+int VBOX_VM::restoresnapshot() {
+ string command;
+ string output;
+ char buf[256];
+ int retval = BOINC_SUCCESS;
+
+ fprintf(
+ stderr,
+ "%s Restore from previously saved snapshot.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+
+ command = "snapshot \"" + vm_name + "\" ";
+ command += "restorecurrent ";
+ retval = vbm_popen(command, output, "restore current snapshot", true, false, 0);
+ if (retval) return retval;
+
+ fprintf(
+ stderr,
+ "%s Restore completed.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+
+ return retval;
+}
+
+void VBOX_VM::dumphypervisorlogs(bool include_error_logs) {
+ string local_system_log;
+ string local_vm_log;
+ string local_guest_log;
+ string local_trace_log;
+ string prefiltered_guest_log;
+ string filtered_guest_log;
+ string line;
+ string::iterator iter;
+ size_t eol_pos;
+ size_t eol_prev_pos;
+ unsigned long vm_exit_code = 0;
+
+ get_system_log(local_system_log);
+ get_vm_log(local_vm_log);
+ get_trace_log(local_trace_log);
+ get_vm_log(prefiltered_guest_log, false);
+ get_vm_exit_code(vm_exit_code);
+
+ // Filter the guest log messages which are generated by applications running within
+ // the guest VM from other VM log messages.
+ eol_prev_pos = 0;
+ eol_pos = prefiltered_guest_log.find("\n");
+ while (eol_pos != string::npos) {
+ line = prefiltered_guest_log.substr(eol_prev_pos, eol_pos - eol_prev_pos);
+
+ if (line.find("Guest Log:") != string::npos) {
+ filtered_guest_log += line + "\n";
+ }
+
+ eol_prev_pos = eol_pos + 1;
+ eol_pos = prefiltered_guest_log.find("\n", eol_prev_pos);
+ }
+
+ // Take the last 16k
+ if (filtered_guest_log.size() >= 16384) {
+ local_guest_log = filtered_guest_log.substr(filtered_guest_log.size() - 16384, 16384);
+
+ // Look for the next whole line of text.
+ iter = local_guest_log.begin();
+ while (iter != local_guest_log.end()) {
+ if (*iter == '\n') {
+ local_guest_log.erase(iter);
+ break;
+ }
+ iter = local_guest_log.erase(iter);
+ }
+
+ } else {
+ local_guest_log = filtered_guest_log;
+ }
+
+ sanitize_output(local_guest_log);
+
+ if (include_error_logs) {
+ fprintf(
+ stderr,
+ "\n"
+ " Hypervisor System Log:\n\n"
+ "%s\n"
+ " VM Execution Log:\n\n"
+ "%s\n"
+ " VM Trace Log:\n\n"
+ "%s",
+ local_system_log.c_str(),
+ local_vm_log.c_str(),
+ local_trace_log.c_str()
+ );
+ }
+
+ fprintf(
+ stderr,
+ "\n"
+ " VM Guest Log:\n\n"
+ "%s",
+ local_guest_log.c_str()
+ );
+
+ if (vm_exit_code) {
+ fprintf(
+ stderr,
+ "\n"
+ " VM Exit Code: %d (0x%x)\n\n",
+ (unsigned int)vm_exit_code,
+ (unsigned int)vm_exit_code
+ );
+ }
+}
+
+void VBOX_VM::dumphypervisorstatusreports() {
+
+#ifdef _WIN32
+ char buf[256];
+ SIZE_T ulMinimumWorkingSetSize;
+ SIZE_T ulMaximumWorkingSetSize;
+
+ if (
+ GetProcessWorkingSetSize(
+ vboxsvc_pid_handle,
+ &ulMinimumWorkingSetSize,
+ &ulMaximumWorkingSetSize)
+ ) {
+ fprintf(
+ stderr,
+ "%s Status Report (VirtualBox VboxSvc.exe): Minimum WSS: '%dKB', Maximum WSS: '%dKB'\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ ulMinimumWorkingSetSize/1024,
+ ulMaximumWorkingSetSize/1024
+ );
+ }
+
+ if (
+ GetProcessWorkingSetSize(
+ vm_pid_handle,
+ &ulMinimumWorkingSetSize,
+ &ulMaximumWorkingSetSize)
+ ) {
+ fprintf(
+ stderr,
+ "%s Status Report (VirtualBox Vboxheadless.exe/VirtualBox.exe): Minimum WSS: '%dKB', Maximum WSS: '%dKB'\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ ulMinimumWorkingSetSize/1024,
+ ulMaximumWorkingSetSize/1024
+ );
+ }
+#endif
+}
+
+int VBOX_VM::is_registered() {
+ string command;
+ string output;
+ string needle;
+ char buf[256];
+ int retval;
+
+ command = "showvminfo \"" + vm_master_name + "\" ";
+ command += "--machinereadable ";
+
+ // Look for this string in the output
+ //
+ needle = "name=\"" + vm_master_name + "\"";
+
+ retval = vbm_popen(command, output, "registration detection", false, false);
+
+ // Handle explicit cases first
+ if (ERR_TIMEOUT == retval) {
+ return ERR_TIMEOUT;
+ }
+ if (output.find("VBOX_E_OBJECT_NOT_FOUND") != string::npos) {
+ return ERR_NOT_FOUND;
+ }
+ if (!retval && output.find(needle.c_str()) != string::npos) {
+ return BOINC_SUCCESS;
+ }
+
+ // Something unexpected has happened. Dump diagnostic output.
+ fprintf(
+ stderr,
+ "%s Error in registration for VM: %d\nArguments:\n%s\nOutput:\n%s\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ retval,
+ command.c_str(),
+ output.c_str()
+ );
+
+ return retval;
+}
+
+// Attempt to detect any condition that would prevent VirtualBox from running a VM properly, like:
+// 1. The DCOM service not being started on Windows
+// 2. Vboxmanage not being able to communicate with vboxsvc for some reason
+// 3. VirtualBox driver not loaded for the current Linux kernel.
+//
+// Luckly both of the above conditions can be detected by attempting to detect the host information
+// via vboxmanage and it is cross platform.
+//
+bool VBOX_VM::is_system_ready(std::string& message) {
+ string command;
+ string output;
+ char buf[256];
+ int retval;
+ bool rc = false;
+
+ command = "list hostinfo ";
+ retval = vbm_popen(command, output, "host info");
+ if (BOINC_SUCCESS == retval) {
+ rc = true;
+ }
+
+ if (output.size() == 0) {
+ fprintf(
+ stderr,
+ "%s WARNING: Communication with VM Hypervisor failed. (Possibly Out of Memory).\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ message = "Communication with VM Hypervisor failed. (Possibly Out of Memory).";
+ rc = false;
+ }
+
+ if (output.find("Processor count:") == string::npos) {
+ fprintf(
+ stderr,
+ "%s WARNING: Communication with VM Hypervisor failed.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ message = "Communication with VM Hypervisor failed.";
+ rc = false;
+ }
+
+ if (output.find("WARNING: The vboxdrv kernel module is not loaded.") != string::npos) {
+ vboxwrapper_msg_prefix(buf, sizeof(buf));
+ fprintf(
+ stderr,
+ "%s WARNING: The vboxdrv kernel module is not loaded.\n"
+ "%s WARNING: Please update/recompile VirtualBox kernel drivers.\n",
+ buf,
+ buf
+ );
+ message = "Please update/recompile VirtualBox kernel drivers.";
+ rc = false;
+ }
+
+ return rc;
+}
+
+bool VBOX_VM::is_vm_machine_configuration_available() {
+ string virtual_machine_slot_directory;
+ string vm_machine_configuration_file;
+ APP_INIT_DATA aid;
+
+ boinc_get_init_data_p(&aid);
+ get_slot_directory(virtual_machine_slot_directory);
+
+ vm_machine_configuration_file = virtual_machine_slot_directory + "/" + vm_master_name + "/" + vm_master_name + ".vbox";
+ if (boinc_file_exists(vm_machine_configuration_file.c_str())) {
+ return true;
+ }
+ return false;
+}
+
+bool VBOX_VM::is_hdd_registered() {
+ string command;
+ string output;
+ string virtual_machine_root_dir;
+
+ get_slot_directory(virtual_machine_root_dir);
+
+ command = "showhdinfo \"" + virtual_machine_root_dir + "/" + image_filename + "\" ";
+
+ if (vbm_popen(command, output, "hdd registration", false, false) == 0) {
+ if ((output.find("VBOX_E_FILE_ERROR") == string::npos) &&
+ (output.find("VBOX_E_OBJECT_NOT_FOUND") == string::npos) &&
+ (output.find("does not match the value") == string::npos)
+ ) {
+ // Error message not found in text
+ return true;
+ }
+ }
+ return false;
+}
+
+bool VBOX_VM::is_extpack_installed() {
+ string command;
+ string output;
+
+ command = "list extpacks";
- // Deregister stale VM by UUID
- return deregister_vm(false);
- } else {
- // Did the user delete the VM in VirtualBox and not the medium? If so,
- // just remove the medium.
- command = "closemedium disk \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
- vbm_popen(command, output, "remove virtual disk", false);
- if (enable_floppyio) {
- command = "closemedium floppy \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
- vbm_popen(command, output, "remove virtual floppy disk", false);
+ if (vbm_popen(command, output, "extpack detection", false, false) == 0) {
+ if ((output.find("Oracle VM VirtualBox Extension Pack") != string::npos) && (output.find("VBoxVRDP") != string::npos)) {
+ return true;
}
}
- return 0;
+ return false;
+}
+
+bool VBOX_VM::is_logged_failure_vm_extensions_disabled() {
+ if (vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != string::npos) return true;
+ if (vm_log.find("VERR_SVM_DISABLED") != string::npos) return true;
+
+ // VirtualBox 4.3.x or better
+ if (vm_log.find("VERR_VMX_MSR_VMXON_DISABLED") != string::npos) return true;
+ if (vm_log.find("VERR_VMX_MSR_SMX_VMXON_DISABLED") != string::npos) return true;
+
+ return false;
+}
+
+bool VBOX_VM::is_logged_failure_vm_extensions_in_use() {
+ if (vm_log.find("VERR_VMX_IN_VMX_ROOT_MODE") != string::npos) return true;
+ if (vm_log.find("VERR_SVM_IN_USE") != string::npos) return true;
+ return false;
+}
+
+bool VBOX_VM::is_logged_failure_vm_extensions_not_supported() {
+ if (vm_log.find("VERR_VMX_NO_VMX") != string::npos) return true;
+ if (vm_log.find("VERR_SVM_NO_SVM") != string::npos) return true;
+ return false;
+}
+
+bool VBOX_VM::is_logged_failure_host_out_of_memory() {
+ if (vm_log.find("VERR_EM_NO_MEMORY") != string::npos) return true;
+ if (vm_log.find("VERR_NO_MEMORY") != string::npos) return true;
+ return false;
+}
+
+bool VBOX_VM::is_logged_failure_guest_job_out_of_memory() {
+ if (vm_log.find("EXIT_OUT_OF_MEMORY") != string::npos) return true;
+ return false;
+}
+
+bool VBOX_VM::is_virtualbox_version_newer(int maj, int min, int rel) {
+ int vbox_major = 0, vbox_minor = 0, vbox_release = 0;
+ if (3 == sscanf(virtualbox_version.c_str(), "%d.%d.%d", &vbox_major, &vbox_minor, &vbox_release)) {
+ if (maj < vbox_major) return true;
+ if (maj > vbox_major) return false;
+ if (min < vbox_minor) return true;
+ if (min > vbox_minor) return false;
+ if (rel < vbox_release) return true;
+ }
+ return false;
+}
+
+bool VBOX_VM::is_virtualbox_error_recoverable(int retval) {
+ // See comments for VBOX_VM::vbm_popen about session lock issues.
+ if (VBOX_E_INVALID_OBJECT_STATE == (unsigned int)retval) return true;
+ return false;
}
-int VBOX_VM::get_install_directory(string& virtualbox_install_directory ) {
+int VBOX_VM::get_install_directory(string& install_directory ) {
#ifdef _WIN32
LONG lReturnValue;
HKEY hkSetupHive;
@@ -1259,18 +1807,18 @@ int VBOX_VM::get_install_directory(string& virtualbox_install_directory ) {
&dwSize
);
- virtualbox_install_directory = lpszRegistryValue;
+ install_directory = lpszRegistryValue;
}
}
if (hkSetupHive) RegCloseKey(hkSetupHive);
if (lpszRegistryValue) free(lpszRegistryValue);
- if (virtualbox_install_directory.empty()) {
+ if (install_directory.empty()) {
return 1;
}
return 0;
#else
- virtualbox_install_directory = "";
+ install_directory = "";
return 0;
#endif
}
@@ -1289,7 +1837,7 @@ int VBOX_VM::get_slot_directory(string& dir) {
return 0;
}
-int VBOX_VM::get_network_bytes_sent(double& sent) {
+int VBOX_VM::get_vm_network_bytes_sent(double& sent) {
string command;
string output;
string counter_value;
@@ -1324,7 +1872,7 @@ int VBOX_VM::get_network_bytes_sent(double& sent) {
return 0;
}
-int VBOX_VM::get_network_bytes_received(double& received) {
+int VBOX_VM::get_vm_network_bytes_received(double& received) {
string command;
string output;
string counter_value;
@@ -1360,34 +1908,148 @@ int VBOX_VM::get_network_bytes_received(double& received) {
return 0;
}
-int VBOX_VM::get_system_log(string& log) {
- string virtualbox_user_home;
- string slot_directory;
- string virtualbox_system_log_src;
- string virtualbox_system_log_dst;
- string::iterator iter;
- char buf[256];
- int retval = 0;
+int VBOX_VM::get_vm_process_id() {
+ string output;
+ string pid;
+ size_t pid_start;
+ size_t pid_end;
+ int retval;
+
+ retval = get_vm_log(output, false);
+ if (retval) return retval;
+
+ // Output should look like this:
+ // VirtualBox 4.1.0 r73009 win.amd64 (Jul 19 2011 13:05:53) release log
+ // 00:00:06.008 Log opened 2011-09-01T23:00:59.829170900Z
+ // 00:00:06.008 OS Product: Windows 7
+ // 00:00:06.009 OS Release: 6.1.7601
+ // 00:00:06.009 OS Service Pack: 1
+ // 00:00:06.015 Host RAM: 4094MB RAM, available: 876MB
+ // 00:00:06.015 Executable: C:\Program Files\Oracle\VirtualBox\VirtualBox.exe
+ // 00:00:06.015 Process ID: 6128
+ // 00:00:06.015 Package type: WINDOWS_64BITS_GENERIC
+ // 00:00:06.015 Installed Extension Packs:
+ // 00:00:06.015 None installed!
+ //
+ pid_start = output.find("Process ID: ");
+ if (pid_start == string::npos) {
+ return ERR_NOT_FOUND;
+ }
+ pid_start += 12;
+ pid_end = output.find("\n", pid_start);
+ pid = output.substr(pid_start, pid_end - pid_start);
+ if (pid.size() <= 0) {
+ return ERR_NOT_FOUND;
+ }
+
+ vm_pid = atol(pid.c_str());
- // Where is VirtualBox storing its configuration files?
- if (getenv("VBOX_USER_HOME")) {
- virtualbox_user_home = getenv("VBOX_USER_HOME");
- } else {
- // If the override environment variable isn't specified then
- // it is based of the current users HOME directory.
#ifdef _WIN32
- virtualbox_user_home = getenv("USERPROFILE");
+ vm_pid_handle = OpenProcess(
+ PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION,
+ FALSE,
+ vm_pid
+ );
+#endif
+
+ return 0;
+}
+
+int VBOX_VM::get_vm_exit_code(unsigned long& exit_code) {
+#ifndef _WIN32
+ int ec = 0;
+ waitpid(vm_pid, &ec, WNOHANG);
+ exit_code = ec;
#else
- virtualbox_user_home = getenv("HOME");
+ GetExitCodeProcess(vm_pid_handle, &exit_code);
#endif
- virtualbox_user_home += "/.VirtualBox";
+ return 0;
+}
+
+int VBOX_VM::get_port_forwarding_port() {
+ sockaddr_in addr;
+ BOINC_SOCKLEN_T addrsize;
+ int sock;
+ int retval;
+
+ addrsize = sizeof(sockaddr_in);
+
+ memset(&addr, 0, sizeof(sockaddr_in));
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(pf_host_port);
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ retval = boinc_socket(sock);
+ if (retval) return retval;
+
+ retval = bind(sock, (const sockaddr*)&addr, addrsize);
+ if (retval < 0) {
+ boinc_close_socket(sock);
+
+ // Lets see if we can get anything useable at this point
+ memset(&addr, 0, sizeof(sockaddr_in));
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(0);
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ retval = boinc_socket(sock);
+ if (retval) return retval;
+
+ retval = bind(sock, (const sockaddr*)&addr, addrsize);
+ if (retval < 0) {
+ boinc_close_socket(sock);
+ return ERR_BIND;
+ }
+ }
+
+ getsockname(sock, (sockaddr*)&addr, &addrsize);
+ pf_host_port = ntohs(addr.sin_port);
+
+ boinc_close_socket(sock);
+ return 0;
+}
+
+int VBOX_VM::get_remote_desktop_port() {
+ sockaddr_in addr;
+ BOINC_SOCKLEN_T addrsize;
+ int sock;
+ int retval;
+
+ addrsize = sizeof(sockaddr_in);
+
+ memset(&addr, 0, sizeof(sockaddr_in));
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(0);
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ retval = boinc_socket(sock);
+ if (retval) return retval;
+
+ retval = bind(sock, (const sockaddr*)&addr, addrsize);
+ if (retval < 0) {
+ boinc_close_socket(sock);
+ return ERR_BIND;
}
+ getsockname(sock, (sockaddr*)&addr, &addrsize);
+ rd_host_port = ntohs(addr.sin_port);
+
+ boinc_close_socket(sock);
+ return 0;
+}
+
+int VBOX_VM::get_system_log(string& log, bool tail_only) {
+ string slot_directory;
+ string virtualbox_system_log_src;
+ string virtualbox_system_log_dst;
+ string::iterator iter;
+ int retval = BOINC_SUCCESS;
+
// Where should we copy temp files to?
get_slot_directory(slot_directory);
// Locate and read log file
- virtualbox_system_log_src = virtualbox_user_home + "/VBoxSVC.log";
+ virtualbox_system_log_src = virtualbox_home_directory + "/VBoxSVC.log";
virtualbox_system_log_dst = slot_directory + "/VBoxSVC.log";
if (boinc_file_exists(virtualbox_system_log_src.c_str())) {
@@ -1395,374 +2057,637 @@ int VBOX_VM::get_system_log(string& log) {
// copy of the log file.
boinc_copy(virtualbox_system_log_src.c_str(), virtualbox_system_log_dst.c_str());
- // Keep only the last 16k if it is larger than that.
- read_file_string(virtualbox_system_log_dst.c_str(), log, 16384, true);
+ if (tail_only) {
+ // Keep only the last 8k if it is larger than that.
+ read_file_string(virtualbox_system_log_dst.c_str(), log, 8192, true);
+ } else {
+ read_file_string(virtualbox_system_log_dst.c_str(), log);
+ }
-#ifdef _WIN32
- // Remove \r from the log spew
- iter = log.begin();
- while (iter != log.end()) {
- if (*iter == '\r') {
- iter = log.erase(iter);
- } else {
- ++iter;
+ sanitize_output(log);
+
+ if (tail_only) {
+ if (log.size() >= 8000) {
+ // Look for the next whole line of text.
+ iter = log.begin();
+ while (iter != log.end()) {
+ if (*iter == '\n') {
+ log.erase(iter);
+ break;
+ }
+ iter = log.erase(iter);
+ }
}
}
-#endif
+ } else {
+ retval = ERR_NOT_FOUND;
+ }
+
+ return retval;
+}
+
+int VBOX_VM::get_vm_log(string& log, bool tail_only) {
+ string slot_directory;
+ string virtualbox_vm_log_src;
+ string virtualbox_vm_log_dst;
+ string::iterator iter;
+ int retval = BOINC_SUCCESS;
+
+ // Where should we copy temp files to?
+ get_slot_directory(slot_directory);
+
+ // Locate and read log file
+ virtualbox_vm_log_src = vm_master_name + "/Logs/VBox.log";
+ virtualbox_vm_log_dst = slot_directory + "/VBox.log";
+
+ if (boinc_file_exists(virtualbox_vm_log_src.c_str())) {
+ // Skip having to deal with various forms of file locks by just making a temp
+ // copy of the log file.
+ boinc_copy(virtualbox_vm_log_src.c_str(), virtualbox_vm_log_dst.c_str());
+
+ if (tail_only) {
+ // Keep only the last 8k if it is larger than that.
+ read_file_string(virtualbox_vm_log_dst.c_str(), log, 8192, true);
+ } else {
+ read_file_string(virtualbox_vm_log_dst.c_str(), log);
+ }
+
+ sanitize_output(log);
+
+ if (tail_only) {
+ if (log.size() >= 8000) {
+ // Look for the next whole line of text.
+ iter = log.begin();
+ while (iter != log.end()) {
+ if (*iter == '\n') {
+ log.erase(iter);
+ break;
+ }
+ iter = log.erase(iter);
+ }
+ }
+ }
+
+ } else {
+ retval = ERR_NOT_FOUND;
+ }
+
+ return retval;
+}
+
+int VBOX_VM::get_trace_log(string& log, bool tail_only) {
+ string slot_directory;
+ string vm_trace_log;
+ string::iterator iter;
+ int retval = BOINC_SUCCESS;
+
+ // Where should we copy temp files to?
+ get_slot_directory(slot_directory);
+
+ // Locate and read log file
+ vm_trace_log = slot_directory + "/" + TRACELOG_FILENAME;
+
+ if (boinc_file_exists(vm_trace_log.c_str())) {
+ if (tail_only) {
+ // Keep only the last 8k if it is larger than that.
+ read_file_string(vm_trace_log.c_str(), log, 8192, true);
+ } else {
+ read_file_string(vm_trace_log.c_str(), log);
+ }
+
+ sanitize_output(log);
+
+ if (tail_only) {
+ if (log.size() >= 8000) {
+ // Look for the next whole line of text.
+ iter = log.begin();
+ while (iter != log.end()) {
+ if (*iter == '\n') {
+ log.erase(iter);
+ break;
+ }
+ iter = log.erase(iter);
+ }
+ }
+ }
+
+ } else {
+ retval = ERR_NOT_FOUND;
+ }
+
+ return retval;
+}
+
+// Enable the network adapter if a network connection is required.
+// NOTE: Network access should never be allowed if the code running in a
+// shared directory or the VM image itself is NOT signed. Doing so
+// opens up the network behind the company firewall to attack.
+//
+// Imagine a doomsday scenario where a project has been compromised and
+// an unsigned executable/VM image has been tampered with. Volunteer
+// downloads compromised code and executes it on a company machine.
+// Now the compromised VM starts attacking other machines on the company
+// network. The company firewall cannot help because the attacking
+// machine is already behind the company firewall.
+//
+int VBOX_VM::set_network_access(bool enabled) {
+ string command;
+ string output;
+ char buf[256];
+ int retval;
+
+ network_suspended = !enabled;
+
+ if (enabled) {
+ fprintf(
+ stderr,
+ "%s Enabling network access for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--cableconnected1 on ";
- if (log.size() >= 16384) {
- // Look for the next whole line of text.
- iter = log.begin();
- while (iter != log.end()) {
- if (*iter == '\n') {
- log.erase(iter);
- break;
- }
- iter = log.erase(iter);
- }
- }
+ retval = vbm_popen(command, output, "enable network");
+ if (retval) return retval;
} else {
fprintf(
stderr,
- "%s Could not find the Hypervisor System Log at '%s'.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- virtualbox_system_log_src.c_str()
+ "%s Disabling network access for VM.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
);
- retval = ERR_NOT_FOUND;
- }
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--cableconnected1 off ";
- return retval;
+ retval = vbm_popen(command, output, "disable network");
+ if (retval) return retval;
+ }
+ return 0;
}
-int VBOX_VM::get_vm_log(string& log) {
+int VBOX_VM::set_cpu_usage(int percentage) {
string command;
string output;
- string::iterator iter;
+ char buf[256];
int retval;
- command = "showvminfo \"" + vm_name + "\" ";
- command += "--log 0 ";
+ // the arg to controlvm is percentage
+ //
+ fprintf(
+ stderr,
+ "%s Setting CPU throttle for VM. (%d%%)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ percentage
+ );
+ sprintf(buf, "%d", percentage);
+ command = "controlvm \"" + vm_name + "\" ";
+ command += "cpuexecutioncap ";
+ command += buf;
+ command += " ";
- retval = vbm_popen(command, output, "get vm log");
+ retval = vbm_popen(command, output, "CPU throttle");
if (retval) return retval;
+ return 0;
+}
- // Keep only the last 16k if it is larger than that.
- size_t size = output.size();
- if (size > 16384) {
- log = output.substr(size - 16384, size);
+int VBOX_VM::set_network_usage(int kilobytes) {
+ string command;
+ string output;
+ char buf[256];
+ int retval;
-#ifdef _WIN32
- // Remove \r from the log spew
- iter = log.begin();
- while (iter != log.end()) {
- if (*iter == '\r') {
- iter = log.erase(iter);
- } else {
- ++iter;
- }
- }
-#endif
+ // the argument to modifyvm is in KB
+ //
+ if (kilobytes == 0) {
+ fprintf(
+ stderr,
+ "%s Setting network throttle for VM. (1024GB)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ } else {
+ fprintf(
+ stderr,
+ "%s Setting network throttle for VM. (%dKB)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ kilobytes
+ );
+ }
- if (log.size() >= 16384) {
- // Look for the next whole line of text.
- iter = log.begin();
- while (iter != log.end()) {
- if (*iter == '\n') {
- log.erase(iter);
- break;
- }
- iter = log.erase(iter);
- }
+ if (is_virtualbox_version_newer(4, 2, 0)) {
+
+ // Update bandwidth group limits
+ //
+ if (kilobytes == 0) {
+ command = "bandwidthctl \"" + vm_name + "\" ";
+ command += "set \"" + vm_name + "_net\" ";
+ command += "--limit 1024G ";
+
+ retval = vbm_popen(command, output, "network throttle (set default value)");
+ if (retval) return retval;
+ } else {
+ sprintf(buf, "%d", kilobytes);
+ command = "bandwidthctl \"" + vm_name + "\" ";
+ command += "set \"" + vm_name + "_net\" ";
+ command += "--limit ";
+ command += buf;
+ command += "K ";
+
+ retval = vbm_popen(command, output, "network throttle (set)");
+ if (retval) return retval;
}
+
} else {
- log = output;
+
+ sprintf(buf, "%d", kilobytes);
+ command = "modifyvm \"" + vm_name + "\" ";
+ command += "--nicspeed1 ";
+ command += buf;
+ command += " ";
+
+ retval = vbm_popen(command, output, "network throttle");
+ if (retval) return retval;
+
}
return 0;
}
-int VBOX_VM::get_vm_exit_code(unsigned long& exit_code) {
-#ifndef _WIN32
- int ec = 0;
- waitpid(vm_pid, &ec, WNOHANG);
- exit_code = ec;
-#else
- GetExitCodeProcess(vm_pid_handle, &exit_code);
-#endif
- return 0;
+int VBOX_VM::read_floppy(std::string& data) {
+ if (enable_floppyio && pFloppy) {
+ data = pFloppy->receive();
+ return 0;
+ }
+ return 1;
}
-int VBOX_VM::get_vm_process_id(int& process_id) {
- string command;
- string output;
- string pid;
- size_t pid_start;
- size_t pid_end;
- int retval;
-
- command = "showvminfo \"" + vm_name + "\" ";
- command += "--log 0 ";
-
- retval = vbm_popen(command, output, "get process ID");
- if (retval) return retval;
+int VBOX_VM::write_floppy(std::string& data) {
+ if (enable_floppyio && pFloppy) {
+ pFloppy->send(data);
+ return 0;
+ }
+ return 1;
+}
- // Output should look like this:
- // VirtualBox 4.1.0 r73009 win.amd64 (Jul 19 2011 13:05:53) release log
- // 00:00:06.008 Log opened 2011-09-01T23:00:59.829170900Z
- // 00:00:06.008 OS Product: Windows 7
- // 00:00:06.009 OS Release: 6.1.7601
- // 00:00:06.009 OS Service Pack: 1
- // 00:00:06.015 Host RAM: 4094MB RAM, available: 876MB
- // 00:00:06.015 Executable: C:\Program Files\Oracle\VirtualBox\VirtualBox.exe
- // 00:00:06.015 Process ID: 6128
- // 00:00:06.015 Package type: WINDOWS_64BITS_GENERIC
- // 00:00:06.015 Installed Extension Packs:
- // 00:00:06.015 None installed!
- //
- pid_start = output.find("Process ID: ");
- if (pid_start == string::npos) {
- return ERR_NOT_FOUND;
+void VBOX_VM::lower_vm_process_priority() {
+ char buf[256];
+#ifdef _WIN32
+ if (vm_pid_handle) {
+ SetPriorityClass(vm_pid_handle, BELOW_NORMAL_PRIORITY_CLASS);
+ fprintf(
+ stderr,
+ "%s Lowering VM Process priority.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
}
- pid_start += 12;
- pid_end = output.find("\n", pid_start);
- pid = output.substr(pid_start, pid_end - pid_start);
- if (pid.size() <= 0) {
- return ERR_NOT_FOUND;
+#else
+ if (vm_pid) {
+ setpriority(PRIO_PROCESS, vm_pid, PROCESS_MEDIUM_PRIORITY);
+ fprintf(
+ stderr,
+ "%s Lowering VM Process priority.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
}
- process_id = atol(pid.c_str());
+#endif
+}
-#ifndef _WIN32
- vm_pid = process_id;
+void VBOX_VM::reset_vm_process_priority() {
+ char buf[256];
+#ifdef _WIN32
+ if (vm_pid_handle) {
+ SetPriorityClass(vm_pid_handle, NORMAL_PRIORITY_CLASS);
+ fprintf(
+ stderr,
+ "%s Restoring VM Process priority.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ }
#else
- vm_pid_handle = OpenProcess(
- PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION,
- FALSE,
- process_id
- );
+ if (vm_pid) {
+ setpriority(PRIO_PROCESS, vm_pid, PROCESS_NORMAL_PRIORITY);
+ fprintf(
+ stderr,
+ "%s Restoring VM Process priority.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ }
#endif
-
- return 0;
}
-int VBOX_VM::get_port_forwarding_port() {
- sockaddr_in addr;
- BOINC_SOCKLEN_T addrsize;
- int sock;
- int retval;
+// Launch VboxSVC.exe before going any further. if we don't, it'll be launched by
+// svchost.exe with its environment block which will not contain the reference
+// to VBOX_USER_HOME which is required for running in the BOINC account-based
+// sandbox on Windows.
+int VBOX_VM::launch_vboxsvc() {
+ APP_INIT_DATA aid;
+ PROC_MAP pm;
+ PROCINFO p;
+ string command;
+ int retval = ERR_EXEC;
- addrsize = sizeof(sockaddr_in);
+#ifdef _WIN32
+ char buf[256];
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ int pidVboxSvc = 0;
+ HANDLE hVboxSvc = NULL;
- memset(&addr, 0, sizeof(sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(pf_host_port);
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ memset(&si, 0, sizeof(si));
+ memset(&pi, 0, sizeof(pi));
- retval = boinc_socket(sock);
- if (retval) return retval;
-
- retval = bind(sock, (const sockaddr*)&addr, addrsize);
- if (retval < 0) {
- boinc_close_socket(sock);
+ boinc_get_init_data_p(&aid);
- // Lets see if we can get anything useable at this point
- memset(&addr, 0, sizeof(sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(0);
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ if (aid.using_sandbox) {
- retval = boinc_socket(sock);
- if (retval) return retval;
-
- retval = bind(sock, (const sockaddr*)&addr, addrsize);
- if (retval < 0) {
- boinc_close_socket(sock);
- return ERR_BIND;
- }
- }
+ if (!vboxsvc_pid_handle || !process_exists(vboxsvc_pid_handle)) {
- getsockname(sock, (sockaddr*)&addr, &addrsize);
- pf_host_port = ntohs(addr.sin_port);
+ if (vboxsvc_pid_handle) CloseHandle(vboxsvc_pid_handle);
- boinc_close_socket(sock);
- return 0;
-}
+ procinfo_setup(pm);
+ for (PROC_MAP::iterator i = pm.begin(); i != pm.end(); ++i) {
+ p = i->second;
-int VBOX_VM::get_remote_desktop_port() {
- sockaddr_in addr;
- BOINC_SOCKLEN_T addrsize;
- int sock;
- int retval;
+ // We are only looking for vboxsvc
+ if (0 != stricmp(p.command, "vboxsvc.exe")) continue;
- addrsize = sizeof(sockaddr_in);
+ // Store process id for later use
+ pidVboxSvc = p.id;
- memset(&addr, 0, sizeof(sockaddr_in));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(0);
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ // Is this the vboxsvc for the current user?
+ // Non-service install it would be the current username
+ // Service install it would be boinc_project
+ hVboxSvc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, p.id);
+ if (hVboxSvc) break;
+ }
+
+ if (pidVboxSvc && hVboxSvc) {
+
+ fprintf(
+ stderr,
+ "%s Status Report: Detected vboxsvc.exe. (PID = '%d')\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ pidVboxSvc
+ );
+ vboxsvc_pid = pidVboxSvc;
+ vboxsvc_pid_handle = hVboxSvc;
+ retval = BOINC_SUCCESS;
- retval = boinc_socket(sock);
- if (retval) return retval;
-
- retval = bind(sock, (const sockaddr*)&addr, addrsize);
- if (retval < 0) {
- boinc_close_socket(sock);
- return ERR_BIND;
- }
+ } else {
- getsockname(sock, (sockaddr*)&addr, &addrsize);
- rd_host_port = ntohs(addr.sin_port);
+ si.cb = sizeof(STARTUPINFO);
+ si.dwFlags |= STARTF_FORCEOFFFEEDBACK | STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_HIDE;
- boinc_close_socket(sock);
- return 0;
+ command = "\"VBoxSVC.exe\" --logrotate 1";
+
+ CreateProcess(NULL, (LPTSTR)command.c_str(), NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
+
+ if (pi.hThread) CloseHandle(pi.hThread);
+ if (pi.hProcess) {
+ fprintf(
+ stderr,
+ "%s Status Report: Launching vboxsvc.exe. (PID = '%d')\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ pi.dwProcessId
+ );
+ vboxsvc_pid = pi.dwProcessId;
+ vboxsvc_pid_handle = pi.hProcess;
+ retval = BOINC_SUCCESS;
+ } else {
+ fprintf(
+ stderr,
+ "%s Status Report: Launching vboxsvc.exe failed!.\n"
+ " Error: %s",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ windows_format_error_string(GetLastError(), buf, sizeof(buf))
+ );
+ }
+
+ vbm_trace(command, std::string(""), retval);
+ }
+ }
+ }
+#endif
+
+ return retval;
}
-// Enable the network adapter if a network connection is required.
-// NOTE: Network access should never be allowed if the code running in a
-// shared directory or the VM image itself is NOT signed. Doing so
-// opens up the network behind the company firewall to attack.
-//
-// Imagine a doomsday scenario where a project has been compromised and
-// an unsigned executable/VM image has been tampered with. Volunteer
-// downloads compromised code and executes it on a company machine.
-// Now the compromised VM starts attacking other machines on the company
-// network. The company firewall cannot help because the attacking
-// machine is already behind the company firewall.
-//
-int VBOX_VM::set_network_access(bool enabled) {
- string command;
- string output;
+// Launch the VM.
+int VBOX_VM::launch_vboxvm() {
char buf[256];
- int retval;
+ char cmdline[1024];
+ char* argv[5];
+ int argc;
+ std::string output;
+ int retval = ERR_EXEC;
- network_suspended = !enabled;
+ // Construct the command line parameters
+ //
+ if (headless) {
+ argv[0] = const_cast<char*>("VboxHeadless.exe");
+ } else {
+ argv[0] = const_cast<char*>("VirtualBox.exe");
+ }
+ argv[1] = const_cast<char*>("--startvm");
+ argv[2] = const_cast<char*>(vm_name.c_str());
+ if (headless) {
+ argv[3] = const_cast<char*>("--vrde config");
+ } else {
+ argv[3] = const_cast<char*>("--no-startvm-errormsgbox");
+ }
+ argv[4] = NULL;
+ argc = 4;
+
+ strcpy(cmdline, "");
+ for (int i=0; i<argc; i++) {
+ strcat(cmdline, argv[i]);
+ if (i<argc-1) {
+ strcat(cmdline, " ");
+ }
+ }
- if (enabled) {
- fprintf(
- stderr,
- "%s Enabling network access for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--cableconnected1 on ";
+#ifdef _WIN32
+ char error_msg[256];
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ SECURITY_ATTRIBUTES sa;
+ SECURITY_DESCRIPTOR sd;
+ HANDLE hReadPipe = NULL, hWritePipe = NULL;
+ void* pBuf = NULL;
+ DWORD dwCount = 0;
+ unsigned long ulExitCode = 0;
+ unsigned long ulExitTimeout = 0;
- retval = vbm_popen(command, output, "enable network");
- if (retval) return retval;
- } else {
+ memset(&si, 0, sizeof(si));
+ memset(&pi, 0, sizeof(pi));
+ memset(&sa, 0, sizeof(sa));
+ memset(&sd, 0, sizeof(sd));
+
+ InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
+ SetSecurityDescriptorDacl(&sd, true, NULL, false);
+
+ sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+ sa.bInheritHandle = TRUE;
+ sa.lpSecurityDescriptor = &sd;
+
+ if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, NULL)) {
fprintf(
stderr,
- "%s Disabling network access for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
+ "%s CreatePipe failed! (%d).\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ GetLastError()
);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--cableconnected1 off ";
-
- retval = vbm_popen(command, output, "disable network");
- if (retval) return retval;
+ goto CLEANUP;
}
- return 0;
-}
+ SetHandleInformation(hReadPipe, HANDLE_FLAG_INHERIT, 0);
-int VBOX_VM::set_cpu_usage(int percentage) {
- string command;
- string output;
- char buf[256];
- int retval;
+ si.cb = sizeof(STARTUPINFO);
+ si.dwFlags |= STARTF_FORCEOFFFEEDBACK | STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
+ si.wShowWindow = SW_HIDE;
+ si.hStdOutput = hWritePipe;
+ si.hStdError = hWritePipe;
+ si.hStdInput = NULL;
- // the arg to controlvm is percentage
- //
- fprintf(
- stderr,
- "%s Setting cpu throttle for VM. (%d%%)\n",
+ // Execute command
+ if (!CreateProcess(
+ NULL,
+ cmdline,
+ NULL,
+ NULL,
+ TRUE,
+ CREATE_NO_WINDOW,
+ NULL,
+ NULL,
+ &si,
+ &pi
+ )) {
vboxwrapper_msg_prefix(buf, sizeof(buf)),
- percentage
- );
- sprintf(buf, "%d", percentage);
- command = "controlvm \"" + vm_name + "\" ";
- command += "cpuexecutioncap ";
- command += buf;
- command += " ";
+ fprintf(
+ stderr,
+ "%s Status Report: Launching virtualbox.exe/vboxheadless.exe failed!.\n"
+ "%s Error: %s (%d)\n",
+ buf,
+ buf,
+ windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg)),
+ GetLastError()
+ );
+ goto CLEANUP;
+ }
- retval = vbm_popen(command, output, "CPU throttle");
- if (retval) return retval;
- return 0;
-}
+ while(1) {
+ GetExitCodeProcess(pi.hProcess, &ulExitCode);
-int VBOX_VM::set_network_usage(int kilobytes) {
- string command;
- string output;
- char buf[256];
- int retval;
+ // Copy stdout/stderr to output buffer, handle in the loop so that we can
+ // copy the pipe as it is populated and prevent the child process from blocking
+ // in case the output is bigger than pipe buffer.
+ PeekNamedPipe(hReadPipe, NULL, NULL, NULL, &dwCount, NULL);
+ if (dwCount) {
+ pBuf = malloc(dwCount+1);
+ memset(pBuf, 0, dwCount+1);
+ if (ReadFile(hReadPipe, pBuf, dwCount, &dwCount, NULL)) {
+ output += (char*)pBuf;
+ }
- // the argument to modifyvm is in Kbps
- //
- fprintf(
- stderr,
- "%s Setting network throttle for VM.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- sprintf(buf, "%d", kilobytes);
- command = "modifyvm \"" + vm_name + "\" ";
- command += "--nicspeed1 ";
- command += buf;
- command += " ";
+ free(pBuf);
+ }
- retval = vbm_popen(command, output, "network throttle");
- if (retval) return retval;
- return 0;
-}
+ if ((ulExitCode != STILL_ACTIVE) || (ulExitTimeout >= 1000)) break;
-int VBOX_VM::read_floppy(std::string& data) {
- if (enable_floppyio && pFloppy) {
- data = pFloppy->receive();
- return 0;
+ Sleep(250);
+ ulExitTimeout += 250;
}
- return 1;
-}
-int VBOX_VM::write_floppy(std::string& data) {
- if (enable_floppyio && pFloppy) {
- pFloppy->send(data);
- return 0;
+ if (ulExitCode != STILL_ACTIVE) {
+ sanitize_output(output);
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ fprintf(
+ stderr,
+ "%s Status Report: Virtualbox.exe/Vboxheadless.exe exited prematurely!.\n"
+ "%s Exit Code: %d\n"
+ "%s Output:\n"
+ "%s\n",
+ buf,
+ buf,
+ ulExitCode,
+ buf,
+ output.c_str()
+ );
}
- return 1;
-}
-void VBOX_VM::lower_vm_process_priority() {
-#ifndef _WIN32
- if (vm_pid) {
- setpriority(PRIO_PROCESS, vm_pid, PROCESS_IDLE_PRIORITY);
+ if (pi.hProcess && (ulExitCode == STILL_ACTIVE)) {
+ vm_pid = pi.dwProcessId;
+ vm_pid_handle = pi.hProcess;
+ retval = BOINC_SUCCESS;
}
+
+CLEANUP:
+ if (pi.hThread) CloseHandle(pi.hThread);
+ if (hReadPipe) CloseHandle(hReadPipe);
+ if (hWritePipe) CloseHandle(hWritePipe);
+
#else
- if (vm_pid_handle) {
- SetPriorityClass(vm_pid_handle, BELOW_NORMAL_PRIORITY_CLASS);
+ int pid = fork();
+ if (-1 == pid) {
+ output = strerror(errno);
+ fprintf(
+ stderr,
+ "%s Status Report: Launching virtualbox.exe/vboxheadless.exe failed!.\n"
+ " Error: %s",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ output.c_str()
+ );
+ retval = ERR_FORK;
+ } else if (0 == pid) {
+ if (-1 == execv(argv[0], argv)) {
+ _exit(errno);
+ }
+ } else {
+ vm_pid = pid;
+ retval = BOINC_SUCCESS;
}
#endif
+
+ string cmd_line = cmdline;
+ vbm_trace(cmd_line, output, retval);
+
+ return retval;
}
-void VBOX_VM::reset_vm_process_priority() {
-#ifndef _WIN32
- if (vm_pid) {
- setpriority(PRIO_PROCESS, vm_pid, PROCESS_MEDIUM_PRIORITY);
- }
-#else
- if (vm_pid_handle) {
- SetPriorityClass(vm_pid_handle, NORMAL_PRIORITY_CLASS);
+void VBOX_VM::sanitize_output(std::string& output) {
+#ifdef _WIN32
+ // Remove \r from the log spew
+ string::iterator iter = output.begin();
+ while (iter != output.end()) {
+ if (*iter == '\r') {
+ iter = output.erase(iter);
+ } else {
+ ++iter;
+ }
}
#endif
}
// If there are errors we can recover from, process them here.
//
-int VBOX_VM::vbm_popen(string& arguments, string& output, const char* item, bool log_error, bool retry_failures, unsigned int timeout) {
+int VBOX_VM::vbm_popen(string& command, string& output, const char* item, bool log_error, bool retry_failures, unsigned int timeout, bool log_trace) {
int retval = 0;
int retry_count = 0;
double sleep_interval = 1.0;
char buf[256];
string retry_notes;
+ // Initialize command line
+ command = "VBoxManage -q " + command;
+
do {
- retval = vbm_popen_raw(arguments, output, timeout);
+ retval = vbm_popen_raw(command, output, timeout);
+ sanitize_output(command);
+ sanitize_output(output);
+
+ if (log_trace) {
+ vbm_trace(command, output, retval);
+ }
+
if (retval) {
// VirtualBox designed the concept of sessions to prevent multiple applications using
@@ -1786,7 +2711,7 @@ int VBOX_VM::vbm_popen(string& arguments, string& output, const char* item, bool
//
// Error Code: VBOX_E_INVALID_OBJECT_STATE (0x80bb0007)
//
- if (0x80bb0007 == retval) {
+ if (VBOX_E_INVALID_OBJECT_STATE == (unsigned int)retval) {
if (retry_notes.find("Another VirtualBox management") == string::npos) {
retry_notes += "Another VirtualBox management application has locked the session for\n";
retry_notes += "this VM. BOINC cannot properly monitor this VM\n";
@@ -1796,9 +2721,34 @@ int VBOX_VM::vbm_popen(string& arguments, string& output, const char* item, bool
sleep_interval *= 2;
}
}
+
+ // VboxManage has to be able to communicate with vboxsvc in order to actually issue a
+ // command. In cases where we detect CO_E_SERVER_EXEC_FAILURE, we should just automatically
+ // try the command again. Vboxmanage wasn't even able to issue the desired command
+ // anyway.
+ //
+ // Experiments performed by jujube suggest changing the sleep interval to an exponential
+ // style backoff would increase our chances of success.
+ //
+ // Error Code: CO_E_SERVER_EXEC_FAILURE (0x80080005)
+ //
+ if (CO_E_SERVER_EXEC_FAILURE == (unsigned int)retval) {
+ if (retry_notes.find("Unable to communicate with VirtualBox") == string::npos) {
+ retry_notes += "Unable to communicate with VirtualBox. VirtualBox may need to\n";
+ retry_notes += "be reinstalled.\n\n";
+ }
+ if (retry_count) {
+ sleep_interval *= 2;
+ }
+ }
// Retry?
- if (!retry_failures) break;
+ if (!retry_failures &&
+ (VBOX_E_INVALID_OBJECT_STATE != (unsigned int)retval) &&
+ (CO_E_SERVER_EXEC_FAILURE != (unsigned int)retval)
+ ) {
+ break;
+ }
// Timeout?
if (retry_count >= 5) break;
@@ -1809,18 +2759,6 @@ int VBOX_VM::vbm_popen(string& arguments, string& output, const char* item, bool
}
while (retval);
-#ifdef _WIN32
- // Remove \r from the log spew
- string::iterator iter = output.begin();
- while (iter != output.end()) {
- if (*iter == '\r') {
- iter = output.erase(iter);
- } else {
- ++iter;
- }
- }
-#endif
-
// Add all relivent notes to the output string and log errors
//
if (retval && log_error) {
@@ -1830,11 +2768,11 @@ int VBOX_VM::vbm_popen(string& arguments, string& output, const char* item, bool
fprintf(
stderr,
- "%s Error in %s for VM: %d\nArguments:\n%s\nOutput:\n%s\n",
+ "%s Error in %s for VM: %d\nCommand:\n%s\nOutput:\n%s\n",
vboxwrapper_msg_prefix(buf, sizeof(buf)),
item,
retval,
- arguments.c_str(),
+ command.c_str(),
output.c_str()
);
}
@@ -1844,16 +2782,15 @@ int VBOX_VM::vbm_popen(string& arguments, string& output, const char* item, bool
// Execute the vbox manage application and copy the output to the buffer.
//
-int VBOX_VM::vbm_popen_raw(string& arguments, string& output, unsigned int timeout) {
+int VBOX_VM::vbm_popen_raw(string& command, string& output, unsigned int timeout) {
char buf[256];
- string command;
size_t errcode_start;
size_t errcode_end;
string errcode;
- int retval = 0;
+ int retval = BOINC_SUCCESS;
- // Initialize command line
- command = "VBoxManage -q " + arguments;
+ // Launch vboxsvc in case it was shutdown for being idle
+ launch_vboxsvc();
// Reset output buffer
output.clear();
@@ -1907,7 +2844,8 @@ int VBOX_VM::vbm_popen_raw(string& arguments, string& output, unsigned int timeo
NULL,
NULL,
TRUE,
- CREATE_NO_WINDOW, NULL,
+ CREATE_NO_WINDOW,
+ NULL,
NULL,
&si,
&pi
@@ -1948,7 +2886,14 @@ int VBOX_VM::vbm_popen_raw(string& arguments, string& output, unsigned int timeo
// Timeout?
if (ulExitTimeout >= (timeout * 1000)) {
- TerminateProcess(pi.hProcess, EXIT_FAILURE);
+ if (!TerminateProcess(pi.hProcess, EXIT_FAILURE)) {
+ fprintf(
+ stderr,
+ "%s TerminateProcess failed! (%d).\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ GetLastError()
+ );
+ }
ulExitCode = 0;
retval = ERR_TIMEOUT;
Sleep(1000);
@@ -1968,7 +2913,7 @@ CLEANUP:
// Determine the real error code by parsing the output
errcode_start = output.find("(0x");
- if (errcode_start) {
+ if (errcode_start != string::npos) {
errcode_start += 1;
errcode_end = output.find(")", errcode_start);
errcode = output.substr(errcode_start, errcode_end - errcode_start);
@@ -2009,18 +2954,48 @@ CLEANUP:
// Determine the real error code by parsing the output
errcode_start = output.find("(0x");
- if (errcode_start) {
+ if (errcode_start != string::npos) {
errcode_start += 1;
errcode_end = output.find(")", errcode_start);
errcode = output.substr(errcode_start, errcode_end - errcode_start);
sscanf(errcode.c_str(), "%x", &retval);
}
-
- retval = 0;
}
#endif
+ // Is this a RPC_S_SERVER_UNAVAILABLE returned by vboxmanage?
+ if (output.find("RPC_S_SERVER_UNAVAILABLE") != string::npos) {
+ retval = RPC_S_SERVER_UNAVAILABLE;
+ }
+
return retval;
}
+
+void VBOX_VM::vbm_replay(std::string& command) {
+ FILE* f = fopen(REPLAYLOG_FILENAME, "a");
+ if (f) {
+ fprintf(f, "%s\n", command.c_str());
+ fclose(f);
+ }
+}
+
+void VBOX_VM::vbm_trace(std::string& command, std::string& output, int retval) {
+ vbm_replay(command);
+
+ char buf[256];
+ FILE* f = fopen(TRACELOG_FILENAME, "a");
+ if (f) {
+ fprintf(
+ f,
+ "%s\nCommand: %s\nExit Code: %d\nOutput:\n%s\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ command.c_str(),
+ retval,
+ output.c_str()
+ );
+ fclose(f);
+ }
+}
+
diff --git a/samples/vboxwrapper/vbox.h b/samples/vboxwrapper/vbox.h
index 5e20fb3..7229b7a 100644
--- a/samples/vboxwrapper/vbox.h
+++ b/samples/vboxwrapper/vbox.h
@@ -21,6 +21,28 @@
#ifndef _VBOX_H_
#define _VBOX_H_
+// Known VirtualBox/COM error codes
+//
+#ifndef CO_E_SERVER_EXEC_FAILURE
+#define CO_E_SERVER_EXEC_FAILURE 0x80080005
+#endif
+#ifndef RPC_S_SERVER_UNAVAILABLE
+#define RPC_S_SERVER_UNAVAILABLE 0x800706ba
+#endif
+#ifndef VBOX_E_INVALID_OBJECT_STATE
+#define VBOX_E_INVALID_OBJECT_STATE 0x80bb0007
+#endif
+
+// Vboxwrapper errors
+//
+#define VBOXWRAPPER_ERR_RECOVERABLE -1000
+
+// Vboxwrapper diagnostics
+//
+#define REPLAYLOG_FILENAME "vbox_replay.txt"
+#define TRACELOG_FILENAME "vbox_trace.txt"
+
+
// raw floppy drive device
class FloppyIO;
@@ -29,14 +51,22 @@ struct VBOX_VM {
VBOX_VM();
~VBOX_VM();
+ // Virtualbox Home Directory
+ std::string virtualbox_home_directory;
+ // Virtualbox Install Directory
+ std::string virtualbox_install_directory;
// Virtualbox Version Information
std::string virtualbox_version;
// Floppy IO abstraction
FloppyIO* pFloppy;
- // unique master name for the VM
+ // last polled copy of the log file
+ std::string vm_log;
+ // unique name for the VM
std::string vm_master_name;
+ // unique description for the VM
+ std::string vm_master_description;
// unique name for the VM or UUID of a stale VM if deregistering a stale VM
std::string vm_name;
// required CPU core count
@@ -64,6 +94,9 @@ struct VBOX_VM {
bool network_suspended;
// is VM even online?
bool online;
+ // Is VM saving/restoring from checkpoint?
+ bool saving;
+ bool restoring;
// Has the VM crashed?
bool crashed;
// whether to use CERN specific data structures
@@ -88,6 +121,9 @@ struct VBOX_VM {
int rd_host_port;
// dynamically assigned
bool headless;
+
+ int vm_pid;
+ int vboxsvc_pid;
#ifdef _WIN32
// the handle to the process for the VM
// NOTE: we get a handle to the pid right after we parse it from the
@@ -96,13 +132,22 @@ struct VBOX_VM {
// handle to the process, the OS is free to reuse the pid for some other
// executable.
HANDLE vm_pid_handle;
-#else
- // the pid to the VM process
- int vm_pid;
+
+ // the handle to the vboxsvc process created by us in the sandbox'ed environment
+ HANDLE vboxsvc_pid_handle;
#endif
int initialize();
- int run(double elapsed_time);
+ void poll(bool log_state = true);
+
+ int create_vm();
+ int register_vm();
+ int deregister_vm(bool delete_media);
+ int deregister_stale_vm();
+
+ int run(bool restore_snapshot);
+ void cleanup();
+
int start();
int stop();
int poweroff();
@@ -111,28 +156,34 @@ struct VBOX_VM {
int createsnapshot(double elapsed_time);
int cleanupsnapshots(bool delete_active);
int restoresnapshot();
- void cleanup();
- void poll(bool log_state = true);
+ void dumphypervisorlogs(bool include_error_logs);
+ void dumphypervisorstatusreports();
- bool is_system_ready();
- bool is_registered();
+ int is_registered();
+ bool is_system_ready(std::string& message);
+ bool is_vm_machine_configuration_available();
bool is_hdd_registered();
bool is_extpack_installed();
-
- int register_vm();
- int deregister_vm(bool delete_media);
- int deregister_stale_vm();
+ bool is_logged_failure_vm_extensions_disabled();
+ bool is_logged_failure_vm_extensions_in_use();
+ bool is_logged_failure_vm_extensions_not_supported();
+ bool is_logged_failure_host_out_of_memory();
+ bool is_logged_failure_guest_job_out_of_memory();
+ bool is_virtualbox_version_newer(int maj, int min, int rel);
+ bool is_virtualbox_error_recoverable(int retval);
int get_install_directory(std::string& dir);
int get_slot_directory(std::string& dir);
- int get_network_bytes_sent(double& sent);
- int get_network_bytes_received(double& received);
- int get_system_log(std::string& log);
- int get_vm_log(std::string& log);
- int get_vm_exit_code(unsigned long& exit_code);
- int get_vm_process_id(int& process_id);
int get_port_forwarding_port();
int get_remote_desktop_port();
+ int get_vm_network_bytes_sent(double& sent);
+ int get_vm_network_bytes_received(double& received);
+ int get_vm_process_id();
+ int get_vm_exit_code(unsigned long& exit_code);
+
+ int get_system_log(std::string& log, bool tail_only = true);
+ int get_vm_log(std::string& log, bool tail_only = true);
+ int get_trace_log(std::string& log, bool tail_only = true);
int set_network_access(bool enabled);
int set_cpu_usage(int percentage);
@@ -144,12 +195,23 @@ struct VBOX_VM {
void lower_vm_process_priority();
void reset_vm_process_priority();
+ int launch_vboxsvc();
+ int launch_vboxvm();
+
+ void sanitize_output(std::string& output);
+
int vbm_popen(
- std::string& command, std::string& output, const char* item, bool log_error = true, bool retry_failures = true, unsigned int timeout = 45
+ std::string& command, std::string& output, const char* item, bool log_error = true, bool retry_failures = true, unsigned int timeout = 45, bool log_trace = true
);
int vbm_popen_raw(
std::string& command, std::string& output, unsigned int timeout
);
+ void vbm_replay(
+ std::string& command
+ );
+ void vbm_trace(
+ std::string& command, std::string& ouput, int retval
+ );
};
#endif
diff --git a/samples/vboxwrapper/vboxwrapper.cpp b/samples/vboxwrapper/vboxwrapper.cpp
index 83a6184..6d9aa98 100644
--- a/samples/vboxwrapper/vboxwrapper.cpp
+++ b/samples/vboxwrapper/vboxwrapper.cpp
@@ -15,17 +15,28 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-// vboxwrapper [options] BOINC VirtualBox wrapper
+// BOINC VirtualBox wrapper; lets you run apps in VMs
// see: http://boinc.berkeley.edu/trac/wiki/VboxApps
-// Options:
+//
+// usage: vboxwrapper [options]
+//
// --trickle X send a trickle message reporting elapsed time every X secs
// (use this for credit granting if your app does its
// own job management, like CernVM).
+// --nthreads N create a VM with N threads.
+// --vmimage file Use "file" as the VM image.
+// This lets you create an app version with several images,
+// and the app_plan function can decide which one to use
+// for the particular host.
+// --register_only Register the VM but don't run it.
+// Useful for debugging; see the wiki page
//
// Handles:
// - suspend/resume/quit/abort
// - reporting CPU time
-// - loss of heartbeat from core client
+// - loss of heartbeat from client
+// - checkpoint (using snapshots)
+// - a bunch of other stuff; see the wiki page
//
// Contributors:
// Andrew J. Younge (ajy4490 AT umiacs DOT umd DOT edu)
@@ -34,19 +45,6 @@
// Rom Walton
// David Anderson
-// To debug a VM within the BOINC/VboxWrapper framework:
-// 1. Launch BOINC with --exit_before_start
-// 2. When BOINC exits, launch the VboxWrapper with the register_only
-// 3. Set the VBOX_USER_HOME environment variable to the vbox directory
-// under the slot directory.
-// This changes where the VirtualBox applications look for the
-// root VirtualBox configuration files.
-// It may or may not apply to your installation of VirtualBox.
-// It depends on where your copy of VirtualBox came from
-// and what type of system it is installed on.
-// 4. Now Launch the VM using the VirtualBox UI.
-// You should now be able to interact with your VM.
-
#ifdef _WIN32
#include "boinc_win.h"
#include "win_util.h"
@@ -64,6 +62,7 @@
#include "boinc_api.h"
#include "diagnostics.h"
#include "filesys.h"
+#include "md5_file.h"
#include "parse.h"
#include "str_util.h"
#include "str_replace.h"
@@ -77,6 +76,15 @@ using std::vector;
using std::string;
+bool is_boinc_client_version_newer(APP_INIT_DATA& aid, int maj, int min, int rel) {
+ if (maj < aid.major_version) return true;
+ if (maj > aid.major_version) return false;
+ if (min < aid.minor_version) return true;
+ if (min > aid.minor_version) return false;
+ if (rel < aid.release) return true;
+ return false;
+}
+
char* vboxwrapper_msg_prefix(char* sbuf, int len) {
char buf[256];
struct tm tm;
@@ -249,7 +257,7 @@ void set_throttles(APP_INIT_DATA& aid, VBOX_VM& vm) {
}
}
if (x) {
- vm.set_network_usage(((int)x*8/1000));
+ vm.set_network_usage((int)(x/1024));
}
}
@@ -364,32 +372,29 @@ int main(int argc, char** argv) {
BOINC_OPTIONS boinc_options;
VBOX_VM vm;
APP_INIT_DATA aid;
+ double random_checkpoint_factor = 0;
double elapsed_time = 0;
double trickle_period = 0;
- double trickle_cpu_time = 0;
double fraction_done = 0;
double checkpoint_cpu_time = 0;
double last_status_report_time = 0;
- double stopwatch_time = 0;
+ double last_trickle_report_time = 0;
+ double stopwatch_starttime = 0;
double stopwatch_endtime = 0;
+ double stopwatch_elapsedtime = 0;
double sleep_time = 0;
double bytes_sent = 0;
double bytes_received = 0;
double ncpus = 0;
- bool report_vm_pid = false;
+ double timeout = 0.0;
bool report_net_usage = false;
- int vm_pid = 0;
+ double net_usage_timer = 600;
+ int vm_image = 0;
unsigned long vm_exit_code = 0;
- string vm_log;
- string system_log;
+ string message;
vector<string> copy_to_shared;
char buf[256];
- memset(&boinc_options, 0, sizeof(boinc_options));
- boinc_options.main_program = true;
- boinc_options.check_heartbeat = true;
- boinc_options.handle_process_control = true;
- boinc_init_options(&boinc_options);
for (int i=1; i<argc; i++) {
if (!strcmp(argv[i], "--trickle")) {
@@ -398,17 +403,67 @@ int main(int argc, char** argv) {
if (!strcmp(argv[i], "--nthreads")) {
ncpus = atof(argv[++i]);
}
+ if (!strcmp(argv[i], "--vmimage")) {
+ vm_image = atoi(argv[++i]);
+ }
if (!strcmp(argv[i], "--register_only")) {
vm.register_only = true;
}
}
+ memset(&boinc_options, 0, sizeof(boinc_options));
+ boinc_options.main_program = true;
+ boinc_options.check_heartbeat = true;
+ boinc_options.handle_process_control = true;
+ if (trickle_period > 0.0) {
+ boinc_options.handle_trickle_ups = true;
+ }
+ boinc_init_options(&boinc_options);
+
+ // Prepare environment for detecting system conditions
+ //
+ boinc_get_init_data_p(&aid);
+
+ // Log banner
+ //
fprintf(
stderr,
- "%s vboxwrapper: starting\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
+ "%s %s: starting\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ argv[0]
);
+ // Log important information
+ //
+
+ // Choose a random interleave value for checkpoint intervals to stagger disk I/O.
+ //
+ struct stat vm_image_stat;
+ if (-1 == stat(IMAGE_FILENAME_COMPLETE, &vm_image_stat)) {
+ srand((int)time(NULL));
+ } else {
+ srand((int)(vm_image_stat.st_mtime * time(NULL)));
+ }
+ random_checkpoint_factor = (double)(((int)(drand() * 100000.0)) % 600);
+ fprintf(
+ stderr,
+ "%s Feature: Checkpoint interval offset (%d seconds)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ (int)random_checkpoint_factor
+ );
+
+ // Display trickle value if specified
+ //
+ if (trickle_period > 0.0) {
+ fprintf(
+ stderr,
+ "%s Feature: Enabling trickle-ups (Interval: %f)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)), trickle_period
+ );
+ }
+
+ // Initialize system services
+ //
#if defined(_WIN32) && defined(USE_WINSOCK)
WSADATA wsdata;
retval = WSAStartup( MAKEWORD( 1, 1 ), &wsdata);
@@ -423,9 +478,18 @@ int main(int argc, char** argv) {
}
#endif
- // Prepare environment for detecting system conditions
- //
- boinc_get_init_data_p(&aid);
+ // Check for architecture incompatibilities
+ //
+#if defined(_WIN32) && defined(_M_IX86)
+ if (strstr(aid.host_info.os_version, "x64")) {
+ fprintf(
+ stderr,
+ "%s 64-bit version of BOINC is required, please upgrade. Rescheduling execution for a later date.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ boinc_temporary_exit(86400, "Architecture incompatibility detected.");
+ }
+#endif
// Initialize VM Hypervisor
//
@@ -433,7 +497,7 @@ int main(int argc, char** argv) {
if (retval) {
fprintf(
stderr,
- "%s couldn't detect VM Hypervisor, telling BOINC to reschedule execution for a later date.\n",
+ "%s Could not detect VM Hypervisor. Rescheduling execution for a later date.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
boinc_temporary_exit(86400, "Detection of VM Hypervisor failed.");
@@ -444,16 +508,64 @@ int main(int argc, char** argv) {
if (!vm.virtualbox_version.empty()) {
fprintf(
stderr,
- "%s Detected: %s\n",
+ "%s Detected: VirtualBox %s\n",
vboxwrapper_msg_prefix(buf, sizeof(buf)),
vm.virtualbox_version.c_str()
);
}
+ // Record if anonymous platform was used.
+ //
+ if (boinc_file_exists((std::string(aid.project_dir) + std::string("/app_info.xml")).c_str())) {
+ fprintf(
+ stderr,
+ "%s Detected: Anonymous Platform Enabled\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ }
+
+ // Record if the sandboxed configuration is going to be used.
+ //
+ if (aid.using_sandbox) {
+ fprintf(
+ stderr,
+ "%s Detected: Sandbox Configuration Enabled\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ }
+
+ // Record which mode VirtualBox should be started in.
+ //
+ if (aid.vbox_window) {
+ fprintf(
+ stderr,
+ "%s Detected: Headless Mode Disabled\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ vm.headless = false;
+ }
+
+ // Check for invalid confgiurations.
+ //
+ if (aid.using_sandbox && aid.vbox_window) {
+ vboxwrapper_msg_prefix(buf, sizeof(buf));
+ fprintf(
+ stderr,
+ "%s Invalid configuration detected.\n"
+ "%s NOTE: BOINC cannot be installed as a service and run VirtualBox in headfull mode at the same time.\n",
+ buf,
+ buf
+ );
+ boinc_temporary_exit(86400, "Incompatible confgiuration detected.");
+ }
+
// Check against known incompatible versions of VirtualBox.
// NOTE: Incompatible in this case means that VirtualBox 4.2.6 crashes during snapshot operations
+ // and 4.2.18 fails to restore from snapshots properly.
//
- if (vm.virtualbox_version.find("4.2.6") != std::string::npos) {
+ if ((vm.virtualbox_version.find("4.2.6") != std::string::npos) ||
+ (vm.virtualbox_version.find("4.2.18") != std::string::npos) ||
+ (vm.virtualbox_version.find("4.3.0") != std::string::npos) ) {
fprintf(
stderr,
"%s Incompatible version of VirtualBox detected. Please upgrade to a later version.\n",
@@ -466,23 +578,13 @@ int main(int argc, char** argv) {
// VirtualBox successfully. Sometimes the system is in a wierd state after a
// reboot and the system needs a little bit of time.
//
- if (!vm.is_system_ready()) {
+ if (!vm.is_system_ready(message)) {
fprintf(
stderr,
- "%s couldn't communicate with VM Hypervisor, telling BOINC to reschedule execution for a later date.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- boinc_temporary_exit(300, "Communication with VM Hypervisor failed.");
- }
-
- // Record if anonymous platform was used.
- //
- if (boinc_file_exists((std::string(aid.project_dir) + std::string("/app_info.xml")).c_str())) {
- fprintf(
- stderr,
- "%s Detected: Anonymous Platform Enabled\n",
+ "%s Could not communicate with VM Hypervisor. Rescheduling execution for a later date.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
+ boinc_temporary_exit(86400, message.c_str());
}
// Parse Job File
@@ -551,14 +653,27 @@ int main(int argc, char** argv) {
vm.image_filename = IMAGE_FILENAME_COMPLETE;
if (boinc_is_standalone()) {
vm.vm_master_name += "standalone";
+ vm.vm_master_description = "standalone";
if (vm.enable_floppyio) {
- sprintf(buf, "%s.%s", FLOPPY_IMAGE_FILENAME, FLOPPY_IMAGE_FILENAME_EXTENSION);
+ sprintf(buf, "%s.%s",
+ FLOPPY_IMAGE_FILENAME, FLOPPY_IMAGE_FILENAME_EXTENSION
+ );
vm.floppy_image_filename = buf;
}
} else {
- vm.vm_master_name += aid.result_name;
+ vm.vm_master_name += md5_string(std::string(aid.result_name)).substr(0, 16);
+ vm.vm_master_description = aid.result_name;
+ if (vm_image) {
+ sprintf(buf, "%s_%d.%s",
+ IMAGE_FILENAME, vm_image, IMAGE_FILENAME_EXTENSION
+ );
+ vm.image_filename = buf;
+ }
if (vm.enable_floppyio) {
- sprintf(buf, "%s_%d.%s", FLOPPY_IMAGE_FILENAME, aid.slot, FLOPPY_IMAGE_FILENAME_EXTENSION);
+ sprintf(buf, "%s_%d.%s",
+ FLOPPY_IMAGE_FILENAME, aid.slot,
+ FLOPPY_IMAGE_FILENAME_EXTENSION
+ );
vm.floppy_image_filename = buf;
}
}
@@ -588,95 +703,201 @@ int main(int argc, char** argv) {
return EXIT_TIME_LIMIT_EXCEEDED;
}
- retval = vm.run(elapsed_time);
+ retval = vm.run((elapsed_time > 0));
if (retval) {
- // All failure to start error are unrecoverable by default
- bool unrecoverable_error = true;
- char* temp_reason = (char*)"";
- int temp_delay = 300;
-
- // Get logs before cleanup
- vm.get_system_log(system_log);
- vm.get_vm_log(vm_log);
-
- // Attempt to cleanup the VM
- vm.cleanup();
- write_checkpoint(elapsed_time, vm);
-
- fprintf(
- stderr,
- "%s VM failed to start.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- if ((vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != string::npos) || (vm_log.find("VERR_SVM_DISABLED") != string::npos)) {
- fprintf(
- stderr,
- "%s NOTE: BOINC has detected that your processor supports hardware acceleration for virtual machines\n"
- " but the hypervisor failed to successfully launch with this feature enabled. This means that the\n"
- " hardware acceleration feature has been disabled in the computers BIOS. Please enable this\n"
- " feature in your BIOS.\n"
- " Intel Processors call it 'VT-x'\n"
- " AMD Processors call it 'AMD-V'\n"
+ // All 'failure to start' errors are unrecoverable by default
+ bool unrecoverable_error = true;
+ bool skip_cleanup = false;
+ bool dump_hypervisor_logs = false;
+ string error_reason;
+ const char* temp_reason = "";
+ int temp_delay = 86400;
+
+ if (VBOXWRAPPER_ERR_RECOVERABLE == retval) {
+ error_reason =
+ " BOINC will be notified that it needs to clean up the environment.\n"
+ " This is a temporary problem and so this job will be rescheduled for another time.\n";
+ unrecoverable_error = false;
+ temp_reason = "VM environment needed to be cleaned up.";
+ } else if (ERR_NOT_EXITED == retval) {
+ error_reason =
+ " NOTE: VM was already running.\n"
+ " BOINC will be notified that it needs to clean up the environment.\n"
+ " This might be a temporary problem and so this job will be rescheduled for another time.\n";
+ unrecoverable_error = false;
+ temp_reason = "VM environment needed to be cleaned up.";
+ } else if (ERR_INVALID_PARAM == retval) {
+ unrecoverable_error = false;
+ temp_reason = "Please upgrade BOINC to the latest version.";
+ temp_delay = 86400;
+ } else if (retval == (int)RPC_S_SERVER_UNAVAILABLE) {
+ error_reason =
+ " VboxSvc crashed while attempting to restore the current snapshot. This is a critical\n"
+ " operation and this job cannot be recovered.\n";
+ skip_cleanup = true;
+ retval = ERR_EXEC;
+ } else if (vm.is_logged_failure_vm_extensions_disabled()) {
+ error_reason =
+ " NOTE: BOINC has detected that your computer's processor supports hardware acceleration for\n"
+ " virtual machines but the hypervisor failed to successfully launch with this feature enabled.\n"
+ " This means that the hardware acceleration feature has been disabled in the computer's BIOS.\n"
+ " Please enable this feature in your computer's BIOS.\n"
+ " Intel calls it 'VT-x'\n"
+ " AMD calls it 'AMD-V'\n"
" More information can be found here: http://en.wikipedia.org/wiki/X86_virtualization\n"
- " Error Code: ERR_CPU_VM_EXTENSIONS_DISABLED\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- } else if ((vm_log.find("VERR_VMX_IN_VMX_ROOT_MODE") != string::npos) || (vm_log.find("VERR_SVM_IN_USE") != string::npos)) {
- fprintf(
- stderr,
- "%s NOTE: VirtualBox hypervisor reports that another hypervisor has locked the hardware acceleration\n"
- " for virtual machines feature in exclusive mode. You'll either need to reconfigure the other hypervisor\n"
- " to not use the feature exclusively or just let BOINC run this project in software emulation mode.\n"
- " Error Code: ERR_CPU_VM_EXTENSIONS_DISABLED\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- } else if ((vm_log.find("VERR_VMX_NO_VMX") != string::npos) || (vm_log.find("VERR_SVM_NO_SVM") != string::npos)) {
- fprintf(
- stderr,
- "%s NOTE: VirtualBox has reported an improperly configured virtual machine. It was configured to require\n"
+ " Error Code: ERR_CPU_VM_EXTENSIONS_DISABLED\n";
+ retval = ERR_EXEC;
+ } else if (vm.is_logged_failure_vm_extensions_not_supported()) {
+ error_reason =
+ " NOTE: VirtualBox has reported an improperly configured virtual machine. It was configured to require\n"
" hardware acceleration for virtual machines, but your processor does not support the required feature.\n"
- " Please report this issue to the project so that it can be addresssed.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
- } else if ((vm_log.find("VERR_EM_NO_MEMORY") != string::npos) || (vm_log.find("VERR_NO_MEMORY") != string::npos)) {
- fprintf(
- stderr,
- "%s NOTE: VirtualBox has failed to allocate enough memory to start the configured virtual machine.\n"
- " This might be a temporary problem and so this job will be rescheduled for another time.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
- );
+ " Please report this issue to the project so that it can be addresssed.\n";
+ } else if (vm.is_logged_failure_vm_extensions_in_use()) {
+ error_reason =
+ " NOTE: VirtualBox hypervisor reports that another hypervisor has locked the hardware acceleration\n"
+ " for virtual machines feature in exclusive mode.\n";
unrecoverable_error = false;
- temp_reason = (char*)"VM Hypervisor was unable to allocate enough memory to start VM.";
+ temp_reason = "Forign VM Hypervisor locked hardware acceleration features.";
+ temp_delay = 86400;
+ } else if (vm.is_logged_failure_host_out_of_memory()) {
+ error_reason =
+ " NOTE: VirtualBox has failed to allocate enough memory to start the configured virtual machine.\n"
+ " This might be a temporary problem and so this job will be rescheduled for another time.\n";
+ unrecoverable_error = false;
+ temp_reason = "VM Hypervisor was unable to allocate enough memory to start VM.";
+ } else if (vm.is_virtualbox_error_recoverable(retval)) {
+ error_reason =
+ " NOTE: VM session lock error encountered.\n"
+ " BOINC will be notified that it needs to clean up the environment.\n"
+ " This might be a temporary problem and so this job will be rescheduled for another time.\n";
+ unrecoverable_error = false;
+ temp_reason = "VM environment needed to be cleaned up.";
} else {
- fprintf(
- stderr,
- "%s Hypervisor System Log:\n\n"
- "%s\n"
- "%s VM Execution Log:\n\n"
- "%s\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- system_log.c_str(),
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vm_log.c_str()
- );
+ dump_hypervisor_logs = true;
}
if (unrecoverable_error) {
+ // Attempt to cleanup the VM and exit.
+ if (!skip_cleanup) {
+ vm.cleanup();
+ }
+ write_checkpoint(elapsed_time, vm);
+
+ if (error_reason.size()) {
+ fprintf(
+ stderr,
+ "%s\n"
+ "%s",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ error_reason.c_str()
+ );
+ }
+
+ if (dump_hypervisor_logs) {
+ vm.dumphypervisorlogs(true);
+ }
+
boinc_finish(retval);
} else {
+ // if the VM is already running notify BOINC about the process ID so it can
+ // clean up the environment. We should be safe to run after that.
+ //
+ if (vm.vm_pid) {
+ retval = boinc_report_app_status_aux(
+ elapsed_time,
+ checkpoint_cpu_time,
+ fraction_done,
+ vm.vm_pid,
+ bytes_sent,
+ bytes_received
+ );
+ }
+
+ // Give the BOINC API time to report the pid to BOINC.
+ //
+ boinc_sleep(5.0);
+
+ if (error_reason.size()) {
+ fprintf(
+ stderr,
+ "%s\n"
+ "%s",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ error_reason.c_str()
+ );
+ }
+
+ // Exit and let BOINC clean up the rest.
+ //
boinc_temporary_exit(temp_delay, temp_reason);
}
}
+ // Report the VM pid to BOINC so BOINC can deal with it when needed.
+ //
+ vboxwrapper_msg_prefix(buf, sizeof(buf));
+ fprintf(
+ stderr,
+ "%s Reporting VM Process ID to BOINC.\n",
+ buf
+ );
+ retval = boinc_report_app_status_aux(
+ elapsed_time,
+ checkpoint_cpu_time,
+ fraction_done,
+ vm.vm_pid,
+ bytes_sent,
+ bytes_received
+ );
+
+ // Wait for up to 5 minutes for the VM to switch states.
+ // A system under load can take a while.
+ // Since the poll function can wait for up to 60 seconds
+ // to execute a command we need to make this time based instead
+ // of iteration based.
+ //
+ timeout = dtime() + 300;
+ do {
+ vm.poll(false);
+ if (vm.online && !vm.restoring) break;
+ boinc_sleep(1.0);
+ } while (timeout >= dtime());
+
+ // Lower the VM process priority after it has successfully brought itself online.
+ //
+ vm.lower_vm_process_priority();
+
+ // Log our current state
+ vm.poll(true);
+
+ // Did we timeout?
+ if (timeout <= dtime()) {
+ vboxwrapper_msg_prefix(buf, sizeof(buf));
+ fprintf(
+ stderr,
+ "%s NOTE: VM failed to enter an online state within the timeout period.\n"
+ "%s This might be a temporary problem and so this job will be rescheduled for another time.\n",
+ buf,
+ buf
+ );
+ vm.reset_vm_process_priority();
+ vm.poweroff();
+ boinc_temporary_exit(86400,
+ "VM Hypervisor failed to enter an online state in a timely fashion."
+ );
+ }
+
set_floppy_image(aid, vm);
set_port_forwarding_info(aid, vm);
set_remote_desktop_info(aid, vm);
- set_throttles(aid, vm);
write_checkpoint(elapsed_time, vm);
+ // Force throttling on our first pass through the loop
+ boinc_status.reread_init_data_file = true;
+
while (1) {
// Begin stopwatch timer
- stopwatch_time = dtime();
+ stopwatch_starttime = dtime();
// Discover the VM's current state
vm.poll();
@@ -684,48 +905,38 @@ int main(int argc, char** argv) {
if (boinc_status.no_heartbeat || boinc_status.quit_request) {
vm.reset_vm_process_priority();
vm.poweroff();
- boinc_temporary_exit(300);
+ boinc_temporary_exit(86400);
}
if (boinc_status.abort_request) {
vm.reset_vm_process_priority();
vm.cleanup();
+ vm.dumphypervisorlogs(true);
boinc_finish(EXIT_ABORTED_BY_CLIENT);
}
if (!vm.online) {
- if (vm.crashed || (elapsed_time < vm.job_duration)) {
- vm.get_system_log(system_log);
- vm.get_vm_log(vm_log);
- vm.get_vm_exit_code(vm_exit_code);
- }
-
// Is this a type of event we can recover from?
- if ((vm_log.find("VERR_EM_NO_MEMORY") != std::string::npos) || (vm_log.find("VERR_NO_MEMORY") != std::string::npos)) {
+ if (vm.is_logged_failure_host_out_of_memory()) {
+ vboxwrapper_msg_prefix(buf, sizeof(buf));
fprintf(
stderr,
"%s NOTE: VirtualBox has failed to allocate enough memory to continue.\n"
- " This might be a temporary problem and so this job will be rescheduled for another time.\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf))
+ "%s This might be a temporary problem and so this job will be rescheduled for another time.\n",
+ buf,
+ buf
);
vm.reset_vm_process_priority();
vm.poweroff();
- boinc_temporary_exit(300, "VM Hypervisor was unable to allocate enough memory.");
+ boinc_temporary_exit(86400, "VM Hypervisor was unable to allocate enough memory.");
} else {
vm.cleanup();
if (vm.crashed || (elapsed_time < vm.job_duration)) {
fprintf(
stderr,
- "%s VM Premature Shutdown Detected.\n"
- " Hypervisor System Log:\n\n"
- "%s\n"
- " VM Execution Log:\n\n"
- "%s\n"
- " VM Exit Code: %d (0x%x)\n\n",
- vboxwrapper_msg_prefix(buf, sizeof(buf)),
- system_log.c_str(),
- vm_log.c_str(),
- (unsigned int)vm_exit_code,
- (unsigned int)vm_exit_code
+ "%s VM Premature Shutdown Detected.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
);
+ vm.dumphypervisorlogs(true);
+ vm.get_vm_exit_code(vm_exit_code);
if (vm_exit_code) {
boinc_finish(vm_exit_code);
} else {
@@ -737,31 +948,61 @@ int main(int argc, char** argv) {
"%s Virtual machine exited.\n",
vboxwrapper_msg_prefix(buf, sizeof(buf))
);
+ vm.dumphypervisorlogs(false);
boinc_finish(0);
}
}
+ } else {
+ // Check to see if the guest VM has any log messages that indicate that we need need
+ // to take action.
+ if (vm.is_logged_failure_guest_job_out_of_memory()) {
+ fprintf(
+ stderr,
+ "%s ERROR: VM reports there is not enough memory to finish the task.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ vm.reset_vm_process_priority();
+ vm.dumphypervisorlogs(true);
+ vm.poweroff();
+ boinc_finish(EXIT_OUT_OF_MEMORY);
+ }
}
if (boinc_status.suspended) {
if (!vm.suspended) {
- vm.pause();
+ retval = vm.pause();
+ if (retval && vm.is_virtualbox_error_recoverable(retval)) {
+ fprintf(
+ stderr,
+ "%s ERROR: VM task failed to pause, rescheduling task for a later time.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ vm.poweroff();
+ boinc_temporary_exit(86400, "VM job unmanageable, restarting later.");
+ }
}
} else {
if (vm.suspended) {
- vm.resume();
- }
-
- if (!vm_pid) {
- vm.get_vm_process_id(vm_pid);
- if (vm_pid) {
- vm.lower_vm_process_priority();
- report_vm_pid = true;
- }
+ retval = vm.resume();
+ if (retval && vm.is_virtualbox_error_recoverable(retval)) {
+ fprintf(
+ stderr,
+ "%s ERROR: VM task failed to resume, rescheduling task for a later time.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ vm.poweroff();
+ boinc_temporary_exit(86400, "VM job unmanageable, restarting later.");
+ }
}
if (boinc_time_to_checkpoint()) {
// Only peform a VM checkpoint every ten minutes or so.
//
- if (elapsed_time >= checkpoint_cpu_time + 600.0) {
+ if (elapsed_time >= checkpoint_cpu_time + random_checkpoint_factor + 600.0) {
+ // Basic interleave factor is only needed once.
+ if (random_checkpoint_factor > 0) {
+ random_checkpoint_factor = 0.0;
+ }
+
// Basic bookkeeping
if (vm.job_duration) {
fraction_done = elapsed_time / vm.job_duration;
@@ -774,29 +1015,61 @@ int main(int argc, char** argv) {
if ((elapsed_time - last_status_report_time) >= 6000.0) {
last_status_report_time = elapsed_time;
- if (aid.global_prefs.daily_xfer_limit_mb) {
+ if (vm.job_duration) {
fprintf(
stderr,
- "%s Status Report: Job Duration: '%f', Elapsed Time: '%f', Network Bytes Sent (Total): '%f', Network Bytes Received (Total): '%f'\n",
+ "%s Status Report: Job Duration: '%f'\n",
vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vm.job_duration,
- elapsed_time,
- bytes_sent,
- bytes_received
+ vm.job_duration
);
- } else {
+ }
+ if (elapsed_time) {
fprintf(
stderr,
- "%s Status Report: Job Duration: '%f', Elapsed Time: '%f'\n",
+ "%s Status Report: Elapsed Time: '%f'\n",
vboxwrapper_msg_prefix(buf, sizeof(buf)),
- vm.job_duration,
elapsed_time
);
}
+ if (aid.global_prefs.daily_xfer_limit_mb) {
+ if (vm.job_duration) {
+ fprintf(
+ stderr,
+ "%s Status Report: Network Bytes Sent (Total): '%f'\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ bytes_sent
+ );
+ }
+ if (elapsed_time) {
+ fprintf(
+ stderr,
+ "%s Status Report: Network Bytes Received (Total): '%f'\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ bytes_received
+ );
+ }
+ }
+
+ vm.dumphypervisorstatusreports();
}
// Checkpoint
- if (!vm.createsnapshot(elapsed_time)) {
+ retval = vm.createsnapshot(elapsed_time);
+ if (retval) {
+ // Let BOINC clean-up the environment which should release any file/mutex locks and then attempt
+ // to resume from a previous snapshot.
+ //
+ fprintf(
+ stderr,
+ "%s ERROR: Checkpoint maintenance failed, rescheduling task for a later time. (%d)\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ retval
+ );
+ vm.poweroff();
+ boinc_temporary_exit(86400, "VM job unmanageable, restarting later.");
+ } else {
+ // tell BOINC we've successfully created a checkpoint.
+ //
checkpoint_cpu_time = elapsed_time;
write_checkpoint(checkpoint_cpu_time, vm);
boinc_report_app_status(
@@ -809,27 +1082,28 @@ int main(int argc, char** argv) {
}
}
- if (report_vm_pid || report_net_usage) {
- retval = boinc_report_app_status_aux(
- elapsed_time,
- checkpoint_cpu_time,
- fraction_done,
- vm_pid,
- bytes_sent,
- bytes_received
- );
- if (!retval) {
- report_vm_pid = false;
- report_net_usage = false;
- }
- }
-
if (trickle_period) {
- trickle_cpu_time += POLL_PERIOD;
- if (trickle_cpu_time >= trickle_period) {
- sprintf(buf, "<cpu_time>%f</cpu_time>", trickle_cpu_time);
- boinc_send_trickle_up(const_cast<char*>("cpu_time"), buf);
- trickle_cpu_time = 0;
+ if ((elapsed_time - last_trickle_report_time) >= trickle_period) {
+ fprintf(
+ stderr,
+ "%s Status Report: Trickle-Up Event.\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf))
+ );
+ last_trickle_report_time = elapsed_time;
+ sprintf(buf,
+ "<cpu_time>%f</cpu_time>", last_trickle_report_time
+ );
+ retval = boinc_send_trickle_up(
+ const_cast<char*>("cpu_time"), buf
+ );
+ if (retval) {
+ fprintf(
+ stderr,
+ "%s Sending Trickle-Up Event failed (%d).\n",
+ vboxwrapper_msg_prefix(buf, sizeof(buf)),
+ retval
+ );
+ }
}
}
@@ -867,6 +1141,7 @@ int main(int argc, char** argv) {
boinc_finish(0);
}
}
+
if (vm.enable_network) {
if (boinc_status.network_suspended) {
if (!vm.network_suspended) {
@@ -881,7 +1156,6 @@ int main(int argc, char** argv) {
// report network usage every 10 min so the client can enforce quota
//
- static double net_usage_timer=600;
if (aid.global_prefs.daily_xfer_limit_mb
&& vm.enable_network
&& !vm.suspended
@@ -890,12 +1164,12 @@ int main(int argc, char** argv) {
if (net_usage_timer <= 0) {
net_usage_timer = 600;
double sent, received;
- retval = vm.get_network_bytes_sent(sent);
+ retval = vm.get_vm_network_bytes_sent(sent);
if (!retval && (sent != bytes_sent)) {
bytes_sent = sent;
report_net_usage = true;
}
- retval = vm.get_network_bytes_received(received);
+ retval = vm.get_vm_network_bytes_received(received);
if (!retval && (received != bytes_received)) {
bytes_received = received;
report_net_usage = true;
@@ -903,21 +1177,46 @@ int main(int argc, char** argv) {
}
}
+ if (report_net_usage) {
+ retval = boinc_report_app_status_aux(
+ elapsed_time,
+ checkpoint_cpu_time,
+ fraction_done,
+ vm.vm_pid,
+ bytes_sent,
+ bytes_received
+ );
+ if (!retval) {
+ report_net_usage = false;
+ }
+ }
+
stopwatch_endtime = dtime();
+ stopwatch_elapsedtime = stopwatch_endtime - stopwatch_starttime;
+
+ // user may have changed system clock, so do sanity checks
+ //
+ if (stopwatch_elapsedtime < 0) {
+ stopwatch_elapsedtime = 0;
+ }
+ if (stopwatch_elapsedtime > 60) {
+ stopwatch_elapsedtime = 0;
+ }
// Sleep for the remainder of the polling period
- sleep_time = POLL_PERIOD - (stopwatch_endtime - stopwatch_time);
+ //
+ sleep_time = POLL_PERIOD - stopwatch_elapsedtime;
if (sleep_time > 0) {
boinc_sleep(sleep_time);
}
- // Calculate the elapsed time after all potiential commands have been executed
- // and base it off of wall clock time instead of a fixed interval.
- if (!boinc_status.suspended) {
+ // if VM is running, increment elapsed time
+ //
+ if (!boinc_status.suspended && !vm.suspended) {
if (sleep_time > 0) {
elapsed_time += POLL_PERIOD;
} else {
- elapsed_time += stopwatch_endtime - stopwatch_time;
+ elapsed_time += stopwatch_elapsedtime;
}
}
}
diff --git a/samples/vboxwrapper/vboxwrapper.h b/samples/vboxwrapper/vboxwrapper.h
index 2883be6..b90a39d 100644
--- a/samples/vboxwrapper/vboxwrapper.h
+++ b/samples/vboxwrapper/vboxwrapper.h
@@ -32,6 +32,7 @@
#define REMOTEDESKTOP_FILENAME "vbox_remote_desktop.xml"
#define POLL_PERIOD 1.0
+extern bool is_boinc_client_version_newer(APP_INIT_DATA& aid, int maj, int min, int rel);
extern char* vboxwrapper_msg_prefix(char*, int);
#endif
diff --git a/samples/wrapper/Makefile b/samples/wrapper/Makefile
index bccc0f7..01cf8fc 100644
--- a/samples/wrapper/Makefile
+++ b/samples/wrapper/Makefile
@@ -5,6 +5,7 @@ BOINC_DIR = ../..
BOINC_API_DIR = $(BOINC_DIR)/api
BOINC_LIB_DIR = $(BOINC_DIR)/lib
BOINC_ZIP_DIR = $(BOINC_DIR)/zip
+PTHREAD = -pthread
CXXFLAGS += -g -O0 \
-Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -fno-common \
@@ -22,7 +23,7 @@ PROGS = wrapper
all: $(PROGS)
libstdc++.a:
- ln -s `g++ -print-file-name=libstdc++.a`
+ ln -s `$(CXX) -print-file-name=libstdc++.a`
clean: distclean
@@ -37,4 +38,4 @@ REGEXP_OBJS = \
regexp_report.o
wrapper: wrapper.o libstdc++.a $(BOINC_LIB_DIR)/libboinc.a $(BOINC_API_DIR)/libboinc_api.a $(REGEXP_OBJS)
- g++ $(CXXFLAGS) $(CPPFLAGS) -o wrapper wrapper.o $(REGEXP_OBJS) libstdc++.a -pthread -lboinc_api -lboinc -lboinc_zip
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o wrapper wrapper.o $(REGEXP_OBJS) libstdc++.a $(PTHREAD) -lboinc_api -lboinc -lboinc_zip
diff --git a/samples/wrapper/Makefile_android b/samples/wrapper/Makefile_android
deleted file mode 100644
index e67eacf..0000000
--- a/samples/wrapper/Makefile_android
+++ /dev/null
@@ -1,18 +0,0 @@
-# This should work on Linux. Modify as needed for other platforms.
-
-PROGS = wrapper
-
-all: $(PROGS)
-
-clean:
- rm $(PROGS) *.o
-
-REGEXP_OBJS = \
- regexp.o \
- regsub.o \
- regerror.o \
- regexp_memory.o \
- regexp_report.o
-
-wrapper: wrapper.o $(BOINC_LIB_DIR)/libboinc.a $(BOINC_API_DIR)/libboinc_api.a $(REGEXP_OBJS)
- $(CXX) $(CXXFLAGS) $(LDFLAGS) -o wrapper wrapper.o $(REGEXP_OBJS) -lboinc_api -lboinc -lboinc_zip $(STDCPPTC)
diff --git a/samples/wrapper/build_android.sh b/samples/wrapper/build_android.sh
deleted file mode 100755
index e0e11eb..0000000
--- a/samples/wrapper/build_android.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#/bin/sh
-#script to compile Wrapper for Android
-
-export ANDROIDTC="$HOME/android-tc"
-export TCBINARIES="$ANDROIDTC/bin"
-export TCINCLUDES="$ANDROIDTC/arm-linux-androideabi"
-export TCSYSROOT="$ANDROIDTC/sysroot"
-export STDCPPTC="$TCINCLUDES/lib/libstdc++.a"
-export BOINC_DIR="../.."
-export BOINC_API_DIR="$BOINC_DIR/api"
-export BOINC_LIB_DIR="$BOINC_DIR/lib"
-export BOINC_ZIP_DIR="$BOINC_DIR/zip"
-
-export PATH="$PATH:$TCBINARIES:$TCINCLUDES/bin"
-export CC=arm-linux-androideabi-gcc
-export CXX=arm-linux-androideabi-g++
-export LD=arm-linux-androideabi-ld
-export CFLAGS="--sysroot=$TCSYSROOT -DANDROID -DDECLARE_TIMEZONE -Wall -I$TCINCLUDES/include -O3 -fomit-frame-pointer -I$TCINCLUDES/include -I$BOINC_DIR -I$BOINC_LIB_DIR -I$BOINC_API_DIR -I$BOINC_ZIP_DIR"
-export CXXFLAGS="--sysroot=$TCSYSROOT -DANDROID -Wall -funroll-loops -fexceptions -O3 -fomit-frame-pointer -I$TCINCLUDES/include -I$BOINC_DIR -I$BOINC_LIB_DIR -I$BOINC_API_DIR -I$BOINC_ZIP_DIR"
-export LDFLAGS="-L$TCSYSROOT/usr/lib -L$TCINCLUDES/lib -L$BOINC_DIR -L$BOINC_LIB_DIR -L$BOINC_API_DIR -L$BOINC_ZIP_DIR -llog"
-export GDB_CFLAGS="--sysroot=$TCSYSROOT -Wall -g -I$TCINCLUDES/include"
-
-# Prepare android toolchain and environment
-../../android/build_androidtc.sh
-
-make -f Makefile_android
diff --git a/samples/wrapper/job.xml b/samples/wrapper/job.xml
index 39a9ca4..3aecbb6 100644
--- a/samples/wrapper/job.xml
+++ b/samples/wrapper/job.xml
@@ -5,6 +5,5 @@
<stdin_filename>stdin_file</stdin_filename>
<stdout_filename>stdout_file</stdout_filename>
<stderr_filename>stderr_file</stderr_filename>
- <time_limit>5</time_limit>
</task>
</job_desc>
diff --git a/samples/wrapper/wrapper.cpp b/samples/wrapper/wrapper.cpp
index c23d06c..f80a042 100644
--- a/samples/wrapper/wrapper.cpp
+++ b/samples/wrapper/wrapper.cpp
@@ -620,7 +620,12 @@ int TASK::run(int argct, char** argvt) {
slash_to_backslash(app_path);
memset(&process_info, 0, sizeof(process_info));
memset(&startup_info, 0, sizeof(startup_info));
- command = string("\"") + app_path + string("\" ") + command_line;
+
+ if (ends_with((string)app_path, ".bat") || ends_with((string)app_path, ".cmd")) {
+ command = string("cmd.exe /c \"") + app_path + string("\" ") + command_line;
+ } else {
+ command = string("\"") + app_path + string("\" ") + command_line;
+ }
// pass std handles to app
//
@@ -628,25 +633,28 @@ int TASK::run(int argct, char** argvt) {
if (stdout_filename != "") {
boinc_resolve_filename_s(stdout_filename.c_str(), stdout_path);
startup_info.hStdOutput = win_fopen(stdout_path.c_str(), "a");
- if (!startup_info.hStdOutput) {
- fprintf(stderr, "Error: startup_info.hStdOutput is NULL\n");
- }
+ } else {
+ startup_info.hStdOutput = (HANDLE)_get_osfhandle(_fileno(stderr));
}
if (stdin_filename != "") {
boinc_resolve_filename_s(stdin_filename.c_str(), stdin_path);
startup_info.hStdInput = win_fopen(stdin_path.c_str(), "r");
- if (!startup_info.hStdInput) {
- fprintf(stderr, "Error: startup_info.hStdInput is NULL\n");
- }
}
if (stderr_filename != "") {
boinc_resolve_filename_s(stderr_filename.c_str(), stderr_path);
startup_info.hStdError = win_fopen(stderr_path.c_str(), "a");
- if (!startup_info.hStdError) {
- fprintf(stderr, "Error: startup_info.hStdError is NULL\n");
- }
} else {
- startup_info.hStdError = win_fopen(STDERR_FILE, "a");
+ startup_info.hStdError = (HANDLE)_get_osfhandle(_fileno(stderr));
+ }
+
+ if (startup_info.hStdOutput == INVALID_HANDLE_VALUE) {
+ fprintf(stderr, "Error: startup_info.hStdOutput is invalid\n");
+ }
+ if ((stdin_filename != "") && (startup_info.hStdInput == INVALID_HANDLE_VALUE)) {
+ fprintf(stderr, "Error: startup_info.hStdInput is invalid\n");
+ }
+ if (startup_info.hStdError == INVALID_HANDLE_VALUE) {
+ fprintf(stderr, "Error: startup_info.hStdError is invalid\n");
}
// setup environment vars if needed
@@ -658,41 +666,23 @@ int TASK::run(int argct, char** argvt) {
}
BOOL success;
- if (ends_with((string)app_path, ".bat")) {
- char cmd[1024];
- sprintf(cmd, "cmd.exe /c %s", command.c_str());
- success = CreateProcess(
- "cmd.exe",
- (LPSTR)cmd,
- NULL,
- NULL,
- TRUE, // bInheritHandles
- CREATE_NO_WINDOW|IDLE_PRIORITY_CLASS,
- (LPVOID) env_vars,
- exec_dir.empty()?NULL:exec_dir.c_str(),
- &startup_info,
- &process_info
- );
- } else {
- success = CreateProcess(
- app_path,
- (LPSTR)command.c_str(),
- NULL,
- NULL,
- TRUE, // bInheritHandles
- CREATE_NO_WINDOW|IDLE_PRIORITY_CLASS,
- (LPVOID) env_vars,
- exec_dir.empty()?NULL:exec_dir.c_str(),
- &startup_info,
- &process_info
- );
- }
+ success = CreateProcess(
+ NULL,
+ (LPSTR)command.c_str(),
+ NULL,
+ NULL,
+ TRUE, // bInheritHandles
+ CREATE_NO_WINDOW|IDLE_PRIORITY_CLASS,
+ (LPVOID) env_vars,
+ exec_dir.empty()?NULL:exec_dir.c_str(),
+ &startup_info,
+ &process_info
+ );
if (!success) {
char error_msg[1024];
windows_format_error_string(GetLastError(), error_msg, sizeof(error_msg));
fprintf(stderr, "can't run app: %s\n", error_msg);
- fprintf(stderr, "Error: app_path is '%s'\n", app_path);
fprintf(stderr, "Error: command is '%s'\n", command.c_str());
fprintf(stderr, "Error: exec_dir is '%s'\n", exec_dir.c_str());
@@ -811,12 +801,10 @@ bool TASK::poll(int& status) {
if (exit_code != STILL_ACTIVE) {
status = exit_code;
final_cpu_time = current_cpu_time;
-#ifdef DEBUG
- fprintf(stderr, "%s process exited; current CPU %f final CPU %f\n",
- boinc_message_prefix(buf, sizeof(buf)),
- current_cpu_time, final_cpu_time
+ fprintf(stderr, "%s %s exited; CPU time %f\n",
+ boinc_msg_prefix(buf, sizeof(buf)),
+ application.c_str(), final_cpu_time
);
-#endif
return true;
}
}
@@ -829,12 +817,10 @@ bool TASK::poll(int& status) {
getrusage(RUSAGE_CHILDREN, &ru);
final_cpu_time = (float)ru.ru_utime.tv_sec + ((float)ru.ru_utime.tv_usec)/1e+6;
final_cpu_time -= start_rusage;
-#ifdef DEBUG
- fprintf(stderr, "%s process exited; current CPU %f final CPU %f\n",
- boinc_message_prefix(buf, sizeof(buf)),
- current_cpu_time, final_cpu_time
+ fprintf(stderr, "%s %s exited; CPU time %f\n",
+ boinc_msg_prefix(buf, sizeof(buf)),
+ application.c_str(), final_cpu_time
);
-#endif
if (final_cpu_time < current_cpu_time) {
final_cpu_time = current_cpu_time;
}
@@ -877,6 +863,10 @@ void TASK::resume() {
// so it shouldn't be called too frequently.
//
double TASK::cpu_time() {
+#ifndef ANDROID
+ // the Android GUI doesn't show CPU time,
+ // and process_tree_cpu_time() crashes sometimes
+ //
double x = process_tree_cpu_time(pid);
// if the process has exited, the above could return zero.
// So update carefully.
@@ -884,6 +874,7 @@ double TASK::cpu_time() {
if (x > current_cpu_time) {
current_cpu_time = x;
}
+#endif
return current_cpu_time;
}
@@ -1136,4 +1127,5 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR Args, int WinMode
argc = parse_command_line(command_line, argv);
return main(argc, argv);
}
+
#endif
diff --git a/sched/Makefile.am b/sched/Makefile.am
index 30bb9be..020994b 100644
--- a/sched/Makefile.am
+++ b/sched/Makefile.am
@@ -113,12 +113,14 @@ schedshare_PROGRAMS = \
sample_assimilator \
sample_dummy_assimilator \
sample_bitwise_validator \
+ sample_substr_validator \
sample_trivial_validator \
sample_work_generator \
single_job_assimilator \
- size_regulator \
+ size_regulator \
transitioner \
trickle_credit \
+ trickle_deadline \
trickle_echo \
update_stats
@@ -129,11 +131,10 @@ schedcgi_PROGRAMS= \
schedshare_DATA = \
db_dump_spec.xml \
assimilator.py \
- pymw_assimilator.py \
- transitioner_catchup.php
+ pymw_assimilator.py
# scripts that 'make install' should put in bindir
-schedshare_SCRIPTS = start stop status
+schedshare_SCRIPTS = start stop status transitioner_catchup.php
noinst_HEADERS = \
assimilate_handler.h \
@@ -218,6 +219,10 @@ sample_bitwise_validator_SOURCES = $(VALIDATOR_SOURCES) \
sample_bitwise_validator.cpp
sample_bitwise_validator_LDADD = $(SERVERLIBS)
+sample_substr_validator_SOURCES = $(VALIDATOR_SOURCES) \
+ sample_substr_validator.cpp
+sample_substr_validator_LDADD = $(SERVERLIBS)
+
sample_trivial_validator_SOURCES = $(VALIDATOR_SOURCES) \
sample_trivial_validator.cpp
sample_trivial_validator_LDADD = $(SERVERLIBS)
@@ -250,6 +255,9 @@ db_purge_LDADD = $(SERVERLIBS)
trickle_credit_SOURCES = trickle_credit.cpp trickle_handler.cpp
trickle_credit_LDADD = $(SERVERLIBS)
+trickle_deadline_SOURCES = trickle_deadline.cpp trickle_handler.cpp
+trickle_deadline_LDADD = $(SERVERLIBS)
+
trickle_echo_SOURCES = trickle_echo.cpp trickle_handler.cpp
trickle_echo_LDADD = $(SERVERLIBS)
diff --git a/sched/credit.cpp b/sched/credit.cpp
index be4b80b..93c554e 100644
--- a/sched/credit.cpp
+++ b/sched/credit.cpp
@@ -255,7 +255,7 @@ int update_av_scales(SCHED_SHMEM *ssp) {
return retval;
}
avr = av; // update shared mem array
- if (app_plan_uses_gpu(av.plan_class)) {
+ if (plan_class_to_proc_type(av.plan_class) != PROC_TYPE_CPU) {
if (config.debug_credit) {
log_messages.printf(MSG_NORMAL,
"add to gpu totals: (%d %s) %g %g\n",
@@ -394,13 +394,13 @@ int hav_lookup(DB_HOST_APP_VERSION &hav, int hostid, int gen_avid) {
return 0;
}
-DB_APP_VERSION *av_lookup(int id, vector<DB_APP_VERSION>& app_versions) {
+DB_APP_VERSION_VAL *av_lookup(int id, vector<DB_APP_VERSION_VAL>& app_versions) {
for (unsigned int i=0; i<app_versions.size(); i++) {
if (app_versions[i].id == id) {
return &app_versions[i];
}
}
- DB_APP_VERSION av;
+ DB_APP_VERSION_VAL av;
int retval = av.lookup_id(id);
if (retval) {
return NULL;
@@ -440,13 +440,12 @@ inline bool is_pfc_sane(double x, WORKUNIT &wu, DB_APP &app) {
//
int get_pfc(
RESULT &r, WORKUNIT &wu, DB_APP &app, // in
- vector<DB_APP_VERSION>&app_versions, // in/out
+ vector<DB_APP_VERSION_VAL>&app_versions, // in/out
DB_HOST_APP_VERSION &hav, // in/out
double &pfc, // out
int &mode // out
){
- DB_APP_VERSION *avp=0;
- int retval;
+ DB_APP_VERSION_VAL *avp=0;
mode = PFC_MODE_APPROX;
@@ -489,7 +488,7 @@ int get_pfc(
return 0;
}
- int gavid = generalized_app_version_id(r.app_version_id, r.appid);
+ //int gavid = generalized_app_version_id(r.app_version_id, r.appid);
// transition case: there's no host_app_version record
//
@@ -593,19 +592,25 @@ int get_pfc(
double tmp_scale = (avp && (r.app_version_id>1) && avp->pfc_scale) ? (avp->pfc_scale) : 1.0;
if (raw_pfc*tmp_scale > wu.rsc_fpops_bound) {
- char query[256], clause[256];
+ // This sanity check should be unnecessary becuase we have a maximum
+ // credit grant limit. With anonymous GPU apps the sanity check often fails
+ // because anonymous GPU scales are often of order 0.01. That prevents
+ // PFC averages from being updated. So I've removed the return
+ // statement.
+ //char query[256], clause[256];
pfc = wu_estimated_pfc(wu, app);
if (config.debug_credit) {
log_messages.printf(MSG_NORMAL,
- "[credit] [RESULT#%u] sanity check failed: %.2f>%.2f, return %.2f\n",
+ "[credit] [RESULT#%u] WARNING: sanity check failed: %.2f>%.2f, return %.2f\n",
r.id, raw_pfc*tmp_scale*COBBLESTONE_SCALE,
wu.rsc_fpops_bound*COBBLESTONE_SCALE, pfc*COBBLESTONE_SCALE
);
}
- sprintf(query, "consecutive_valid=0");
- sprintf(clause, "host_id=%d and app_version_id=%d", r.hostid, gavid);
- retval = hav.update_fields_noid(query, clause);
- return retval;
+// This was a bad idea because it prevents HAV.pfc from being updated.
+// sprintf(query, "consecutive_valid=0");
+// sprintf(clause, "host_id=%d and app_version_id=%d", r.hostid, gavid);
+// retval = hav.update_fields_noid(query, clause);
+// return retval;
}
if (r.app_version_id < 0) {
@@ -873,7 +878,7 @@ int assign_credit_set(
WORKUNIT &wu,
vector<RESULT>& results,
DB_APP &app,
- vector<DB_APP_VERSION>& app_versions,
+ vector<DB_APP_VERSION_VAL>& app_versions,
vector<DB_HOST_APP_VERSION>& host_app_versions,
double max_granted_credit,
double &credit
@@ -973,13 +978,13 @@ int assign_credit_set(
// carefully write any app_version records that have changed;
// done at the end of every validator scan.
//
-int write_modified_app_versions(vector<DB_APP_VERSION>& app_versions) {
+int write_modified_app_versions(vector<DB_APP_VERSION_VAL>& app_versions) {
unsigned int i, j;
int retval = 0;
double now = dtime();
for (i=0; i<app_versions.size(); i++) {
- DB_APP_VERSION &av = app_versions[i];
+ DB_APP_VERSION_VAL &av = app_versions[i];
if (av.pfc_samples.empty() && av.credit_samples.empty()) {
continue;
}
diff --git a/sched/credit.h b/sched/credit.h
index 16c4d54..623eb46 100644
--- a/sched/credit.h
+++ b/sched/credit.h
@@ -35,6 +35,14 @@
#define AV_AVG_WEIGHT .001
#define AV_AVG_LIMIT 10
+// variant of DB_APP_VERSION used by the validator
+//
+struct DB_APP_VERSION_VAL : DB_APP_VERSION {
+ std::vector<double>pfc_samples;
+ std::vector<double>credit_samples;
+ std::vector<double>credit_times;
+};
+
extern double fpops_to_credit(double fpops);
// credit that should be granted for a given number of
// floating-point ops
@@ -43,7 +51,7 @@ extern int grant_credit(DB_HOST& host, double start_time, double credit);
extern int update_av_scales(struct SCHED_SHMEM*);
extern int assign_credit_set(
- WORKUNIT&, std::vector<RESULT>&, DB_APP&, std::vector<DB_APP_VERSION>&,
+ WORKUNIT&, std::vector<RESULT>&, DB_APP&, std::vector<DB_APP_VERSION_VAL>&,
std::vector<DB_HOST_APP_VERSION>&,
double max_granted_credit, double& credit
);
@@ -53,5 +61,5 @@ extern void got_error(DB_HOST_APP_VERSION&);
extern int hav_lookup(DB_HOST_APP_VERSION& hav, int hostid, int avid);
extern int write_modified_app_versions(
- std::vector<DB_APP_VERSION>& app_versions
+ std::vector<DB_APP_VERSION_VAL>& app_versions
);
diff --git a/sched/db_purge.cpp b/sched/db_purge.cpp
index e3672f8..3ef5173 100644
--- a/sched/db_purge.cpp
+++ b/sched/db_purge.cpp
@@ -567,6 +567,14 @@ bool do_pass() {
);
exit(6);
}
+ if (config.enable_assignment) {
+ DB_ASSIGNMENT asg;
+ sprintf(buf, "where workunitid=%d", wu.id);
+ retval = asg.lookup(buf);
+ if (!retval) {
+ asg.delete_from_db();
+ }
+ }
}
log_messages.printf(MSG_DEBUG,
"Purged workunit [%d] from database\n", wu.id
diff --git a/sched/feeder.cpp b/sched/feeder.cpp
index 0b79774..2bd61c2 100644
--- a/sched/feeder.cpp
+++ b/sched/feeder.cpp
@@ -107,14 +107,15 @@
#include <vector>
using std::vector;
-#include "version.h"
#include "boinc_db.h"
-#include "shmem.h"
#include "error_numbers.h"
-#include "synch.h"
-#include "util.h"
+#include "filesys.h"
+#include "shmem.h"
#include "str_util.h"
#include "svn_version.h"
+#include "synch.h"
+#include "util.h"
+#include "version.h"
#include "credit.h"
#include "sched_config.h"
diff --git a/sched/file_deleter.cpp b/sched/file_deleter.cpp
index 209fc7f..1d8cdc2 100644
--- a/sched/file_deleter.cpp
+++ b/sched/file_deleter.cpp
@@ -123,7 +123,8 @@ int get_file_path(
int wu_delete_files(WORKUNIT& wu) {
char* p;
- char filename[256], pathname[256], buf[BLOB_SIZE];
+ char filename[256], path[MAXPATHLEN], buf[BLOB_SIZE];
+ char path_gz[MAXPATHLEN], path_md5[MAXPATHLEN];
bool no_delete=false;
int count_deleted = 0, retval, mthd_retval = 0;
@@ -144,7 +145,7 @@ int wu_delete_files(WORKUNIT& wu) {
if (!no_delete) {
retval = get_file_path(
filename, config.download_dir, config.uldl_dir_fanout,
- pathname
+ path
);
if (retval == ERR_OPENDIR) {
log_messages.printf(MSG_CRITICAL,
@@ -161,7 +162,7 @@ int wu_delete_files(WORKUNIT& wu) {
log_messages.printf(MSG_NORMAL,
"[WU#%u] deleting %s\n", wu.id, filename
);
- retval = unlink(pathname);
+ retval = unlink(path);
if (retval) {
log_messages.printf(MSG_CRITICAL,
"[WU#%u] unlink %s failed: %s\n",
@@ -171,17 +172,28 @@ int wu_delete_files(WORKUNIT& wu) {
} else {
count_deleted++;
}
+
+ // delete the gzipped version of the file
+ //
+ sprintf(path_gz, "%s.gz", path);
+ retval = unlink(path_gz);
+ if (!retval) {
+ log_messages.printf(MSG_NORMAL,
+ "[WU#%u] deleted %s.gz\n", wu.id, filename
+ );
+ }
+
// delete the cached MD5 file if needed
//
if (config.cache_md5_info) {
- strcat(pathname,".md5");
+ sprintf(path_md5, "%s.md5", path);
log_messages.printf(MSG_NORMAL,
- "[WU#%u] deleting %s\n", wu.id, filename
+ "[WU#%u] deleting %s.md5\n", wu.id, filename
);
- retval = unlink(pathname);
+ retval = unlink(path_md5);
if (retval) {
log_messages.printf(MSG_CRITICAL,
- "[WU#%u] unlink %s failed: %s\n",
+ "[WU#%u] unlink %s.md5 failed: %s\n",
wu.id, filename, boincerror(retval)
);
}
diff --git a/sched/file_upload_handler.cpp b/sched/file_upload_handler.cpp
index 3d42d38..89dcbde 100644
--- a/sched/file_upload_handler.cpp
+++ b/sched/file_upload_handler.cpp
@@ -38,18 +38,17 @@
#endif
#include "crypt.h"
-#include "parse.h"
-#include "util.h"
#include "error_numbers.h"
+#include "filesys.h"
+#include "parse.h"
#include "str_replace.h"
#include "str_util.h"
-#include "filesys.h"
#include "svn_version.h"
+#include "util.h"
#include "sched_config.h"
-#include "sched_util.h"
-
#include "sched_msgs.h"
+#include "sched_util.h"
using std::string;
diff --git a/sched/get_file.cpp b/sched/get_file.cpp
index e84f44b..a3c4fd0 100644
--- a/sched/get_file.cpp
+++ b/sched/get_file.cpp
@@ -37,6 +37,7 @@
#include <time.h>
#include "backend_lib.h"
+#include "filesys.h"
#include "str_replace.h"
#include "sched_config.h"
diff --git a/sched/handle_request.cpp b/sched/handle_request.cpp
index 1babd19..69c1dac 100644
--- a/sched/handle_request.cpp
+++ b/sched/handle_request.cpp
@@ -38,14 +38,14 @@
#include <errno.h>
#include <sys/stat.h>
-#include "boinc_db.h"
#include "backend_lib.h"
+#include "boinc_db.h"
#include "error_numbers.h"
+#include "filesys.h"
#include "parse.h"
-#include "str_util.h"
#include "str_replace.h"
+#include "str_util.h"
#include "util.h"
-#include "filesys.h"
#include "sched_vda.h"
@@ -393,8 +393,8 @@ lookup_user_and_make_new_host:
//
if (strlen(g_request->host.host_cpid)) {
if (find_host_by_cpid(user, g_request->host.host_cpid, host)) {
- log_messages.printf(MSG_CRITICAL,
- "[HOST#%d] [USER#%d] User has another host with same CPID.\n",
+ log_messages.printf(MSG_NORMAL,
+ "[HOST#%d] [USER#%d] No host ID in request, but host with matching CPID found.\n",
host.id, host.userid
);
if ((g_request->allow_multiple_clients != 1)
@@ -1187,6 +1187,17 @@ void process_request(char* code_sign_key) {
log_request();
+#if 0
+ // if you need to debug a problem w/ a particular host or user,
+ // edit the following
+ //
+ if (g_reply->user.id == XX || g_reply.host.id == YY) {
+ config.sched_debug_level = 3;
+ config.debug_send = true;
+ ...
+ }
+#endif
+
// is host blacklisted?
//
if (g_reply->host._max_results_day == -1) {
diff --git a/sched/make_work.cpp b/sched/make_work.cpp
index b8d84c3..ba98949 100644
--- a/sched/make_work.cpp
+++ b/sched/make_work.cpp
@@ -41,17 +41,18 @@
using std::vector;
using std::string;
+#include "backend_lib.h"
#include "boinc_db.h"
#include "crypt.h"
-#include "util.h"
-#include "backend_lib.h"
-#include "sched_config.h"
+#include "filesys.h"
#include "parse.h"
-#include "sched_util.h"
+#include "sched_config.h"
#include "sched_msgs.h"
+#include "sched_util.h"
#include "str_replace.h"
#include "str_util.h"
#include "svn_version.h"
+#include "util.h"
#define LOCKFILE "make_work.out"
#define PIDFILE "make_work.pid"
@@ -254,8 +255,8 @@ void make_work(vector<string> &wu_names) {
"Reached max_wus = %d\n", max_wus
);
exit(0);
- total_wus++;
}
+ total_wus++;
make_new_wu(wu, wu.xml_doc, start_time);
new_wu_id = wu.id;
results_needed -= wu.target_nresults;
diff --git a/sched/plan_class_spec.cpp b/sched/plan_class_spec.cpp
index 456787f..4db09b1 100644
--- a/sched/plan_class_spec.cpp
+++ b/sched/plan_class_spec.cpp
@@ -186,6 +186,19 @@ bool PLAN_CLASS_SPEC::check(SCHEDULER_REQUEST& sreq, HOST_USAGE& hu) {
return false;
}
+ if (vm_accel_required) {
+ if ((!strstr(sreq.host.p_features, "vmx") && !strstr(sreq.host.p_features, "svm"))
+ || sreq.host.p_vm_extensions_disabled
+ ) {
+ if (config.debug_version_select) {
+ log_messages.printf(MSG_NORMAL,
+ "[version] plan_class_spec: missing VM HW acceleration\n"
+ );
+ }
+ return false;
+ }
+ }
+
// host must have VM acceleration in order to run multi-core jobs
//
if (max_threads > 1) {
@@ -717,6 +730,7 @@ int PLAN_CLASS_SPEC::parse(XML_PARSER& xp) {
if (xp.parse_int("min_vbox_version", min_vbox_version)) continue;
if (xp.parse_int("max_vbox_version", max_vbox_version)) continue;
+ if (xp.parse_bool("vm_accel_required", vm_accel_required)) continue;
}
return ERR_XML_PARSE;
}
@@ -790,6 +804,7 @@ PLAN_CLASS_SPEC::PLAN_CLASS_SPEC() {
min_vbox_version = 0;
max_vbox_version = 0;
+ vm_accel_required = false;
}
#ifdef PLAN_CLASS_TEST
@@ -804,7 +819,7 @@ int main() {
PLAN_CLASS_SPECS pcs;
int retval = pcs.parse_file("plan_class_spec.xml.sample");
if (retval) {
- printf("parse_file: %d\n");
+ printf("parse_file: %d\n", retval);
exit(1);
}
@@ -812,7 +827,7 @@ int main() {
HOST_USAGE hu;
- strcpy(sreq.host.p_features, "sse3");
+ strcpy(sreq.host.p_features, "pni");
sreq.host.p_fpops =5e9;
g_wreq->effective_ncpus = 4;
if (1) {
diff --git a/sched/plan_class_spec.h b/sched/plan_class_spec.h
index 40d8d59..9082269 100644
--- a/sched/plan_class_spec.h
+++ b/sched/plan_class_spec.h
@@ -90,6 +90,7 @@ struct PLAN_CLASS_SPEC {
//
int min_vbox_version;
int max_vbox_version;
+ bool vm_accel_required;
int parse(XML_PARSER&);
bool check(SCHEDULER_REQUEST& sreq, HOST_USAGE& hu);
diff --git a/sched/plan_class_spec.xml.sample b/sched/plan_class_spec.xml.sample
index a5a8337..9827988 100644
--- a/sched/plan_class_spec.xml.sample
+++ b/sched/plan_class_spec.xml.sample
@@ -69,7 +69,7 @@
</plan_class>
<plan_class>
<name> sse3 </name>
- <cpu_feature> sse3 </cpu_feature>
+ <cpu_feature> pni </cpu_feature>
<projected_flops_scale> 1.1 </projected_flops_scale>
</plan_class>
<plan_class>
diff --git a/sched/sample_bitwise_validator.cpp b/sched/sample_bitwise_validator.cpp
index acb3322..f3c1b94 100644
--- a/sched/sample_bitwise_validator.cpp
+++ b/sched/sample_bitwise_validator.cpp
@@ -1,6 +1,6 @@
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -20,17 +20,28 @@
// This is useful only if either
// 1) your application does no floating-point math, or
// 2) you use homogeneous redundancy
+//
+// if the --is_gzip option is used, all files are assumed to be gzipped.
+// In this case, the 10-byte gzip header is skipped
+// (it has stuff like a timestamp and OS code that can differ
+// even if the archive contents are the same)
#include "config.h"
#include "util.h"
#include "sched_util.h"
#include "sched_msgs.h"
#include "validate_util.h"
+#include "validate_util2.h"
+#include "validator.h"
#include "md5_file.h"
using std::string;
using std::vector;
+bool first = true;
+bool is_gzip = false;
+ // if true, files are gzipped; skip header when comparing
+
struct FILE_CKSUM_LIST {
vector<string> files; // list of MD5s of files
~FILE_CKSUM_LIST(){}
@@ -44,6 +55,14 @@ bool files_match(FILE_CKSUM_LIST& f1, FILE_CKSUM_LIST& f2) {
return true;
}
+void parse_cmdline() {
+ for (int i=1; i<g_argc; i++) {
+ if (!strcmp(g_argv[i], "--is_gzip")) {
+ is_gzip = true;
+ }
+ }
+}
+
int init_result(RESULT& result, void*& data) {
int retval;
FILE_CKSUM_LIST* fcl = new FILE_CKSUM_LIST;
@@ -51,6 +70,11 @@ int init_result(RESULT& result, void*& data) {
char md5_buf[MD5_LEN];
double nbytes;
+ if (first) {
+ parse_cmdline();
+ first = false;
+ }
+
retval = get_output_file_infos(result, files);
if (retval) {
log_messages.printf(MSG_CRITICAL,
@@ -63,15 +87,15 @@ int init_result(RESULT& result, void*& data) {
for (unsigned int i=0; i<files.size(); i++) {
OUTPUT_FILE_INFO& fi = files[i];
if (fi.no_validate) continue;
- retval = md5_file(fi.path.c_str(), md5_buf, nbytes);
+ retval = md5_file(fi.path.c_str(), md5_buf, nbytes, is_gzip);
if (retval) {
- if (fi.optional) {
+ if (fi.optional && retval == ERR_FOPEN) {
strcpy(md5_buf, "");
// indicate file is missing; not the same as md5("")
} else {
log_messages.printf(MSG_CRITICAL,
- "[RESULT#%u %s] Couldn't open %s\n",
- result.id, result.name, fi.path.c_str()
+ "[RESULT#%u %s] md5_file() failed for %s: %s\n",
+ result.id, result.name, fi.path.c_str(), boincerror(retval)
);
return retval;
}
diff --git a/sched/sample_substr_validator.cpp b/sched/sample_substr_validator.cpp
new file mode 100644
index 0000000..dff553c
--- /dev/null
+++ b/sched/sample_substr_validator.cpp
@@ -0,0 +1,64 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2014 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// A sample validator that accepts results whose stderr output
+// contains a given string.
+// Usage:
+// sample_substr_validator --stderr_string xxx [other options]
+
+#include "sched_msgs.h"
+#include "validate_util2.h"
+#include "validator.h"
+
+bool first = true;
+char* stderr_string;
+
+void parse_cmdline() {
+ for (int i=1; i<g_argc; i++) {
+ if (!strcmp(g_argv[i], "--stderr_string")) {
+ stderr_string = g_argv[++i];
+ return;
+ }
+ }
+ log_messages.printf(MSG_CRITICAL,
+ "--stderr_string missing from command line\n"
+ );
+ exit(1);
+}
+
+int init_result(RESULT& r, void*&) {
+ if (first) {
+ parse_cmdline();
+ first = false;
+ }
+ if (strstr(r.stderr_out, stderr_string)) {
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
+int compare_results(RESULT&, void*, RESULT const&, void*, bool& match) {
+ match = true;
+ return 0;
+}
+
+int cleanup_result(RESULT const&, void*) {
+ return 0;
+}
+
+const char *BOINC_RCSID_f3a7a34795 = "$Id$";
diff --git a/sched/sample_trivial_validator.cpp b/sched/sample_trivial_validator.cpp
index 92ff335..85913e4 100644
--- a/sched/sample_trivial_validator.cpp
+++ b/sched/sample_trivial_validator.cpp
@@ -17,11 +17,7 @@
// A sample validator that accepts all results
-#include <cstdlib>
-#include "config.h"
-#include "validate_util.h"
-
-using std::vector;
+#include "validate_util2.h"
int init_result(RESULT&, void*&) {
return 0;
diff --git a/sched/sample_work_generator.cpp b/sched/sample_work_generator.cpp
index ea36225..a9ff371 100644
--- a/sched/sample_work_generator.cpp
+++ b/sched/sample_work_generator.cpp
@@ -40,18 +40,19 @@
#include <string>
#include <cstring>
+#include "backend_lib.h"
#include "boinc_db.h"
#include "error_numbers.h"
-#include "backend_lib.h"
+#include "filesys.h"
#include "parse.h"
#include "str_replace.h"
-#include "util.h"
+#include "str_util.h"
#include "svn_version.h"
+#include "util.h"
#include "sched_config.h"
#include "sched_util.h"
#include "sched_msgs.h"
-#include "str_util.h"
#define CUSHION 10
// maintain at least this many unsent results
@@ -149,10 +150,23 @@ void main_loop() {
exit(retval);
}
}
- // Now sleep for a few seconds to let the transitioner
- // create instances for the jobs we just created.
- // Otherwise we could end up creating an excess of jobs.
- daemon_sleep(5);
+ // Wait for the transitioner to create instances
+ // of the jobs we just created.
+ // Otherwise we'll create too many jobs.
+ //
+ double now = dtime();
+ while (1) {
+ daemon_sleep(5);
+ double x;
+ retval = min_transition_time(x);
+ if (retval) {
+ log_messages.printf(MSG_CRITICAL,
+ "min_transition_time failed: %s\n", boincerror(retval)
+ );
+ exit(retval);
+ }
+ if (x > now) break;
+ }
}
}
}
diff --git a/sched/sched_array.cpp b/sched/sched_array.cpp
index c7344c9..7dd70f8 100644
--- a/sched/sched_array.cpp
+++ b/sched/sched_array.cpp
@@ -442,7 +442,7 @@ void send_work_old() {
}
-// try to send a job for the given app
+// try to send a job for the given app; used for non-compute-intensive apps
//
int send_job_for_app(APP& app) {
int retval = 0;
@@ -452,7 +452,9 @@ int send_job_for_app(APP& app) {
lock_sema();
for (int i=0; i<ssp->max_wu_results; i++) {
WU_RESULT& wu_result = ssp->wu_results[i];
- if (wu_result.state != WR_STATE_PRESENT) continue;
+ if (wu_result.state != WR_STATE_PRESENT && wu_result.state != g_pid) {
+ continue;
+ }
WORKUNIT wu = wu_result.workunit;
if (wu.appid != app.id) continue;
if (!quick_check(wu_result, wu, bavp, &app, retval)) {
diff --git a/sched/sched_assign.cpp b/sched/sched_assign.cpp
index 1b1f907..894ddfe 100644
--- a/sched/sched_assign.cpp
+++ b/sched/sched_assign.cpp
@@ -29,10 +29,11 @@
#include <sys/param.h>
#include <unistd.h>
+#include "backend_lib.h"
#include "boinc_db.h"
#include "crypt.h"
-#include "backend_lib.h"
#include "error_numbers.h"
+#include "filesys.h"
#include "sched_main.h"
#include "sched_msgs.h"
@@ -72,6 +73,13 @@ static int send_assigned_job(ASSIGNMENT& asg) {
return retval;
}
+ if (app_not_selected(wu)) {
+ log_messages.printf(MSG_CRITICAL,
+ "Assigned WU %s is for app not selected by user\n", wu.name
+ );
+ return -1;
+ }
+
bavp = get_app_version(wu, false, false);
if (!bavp) {
log_messages.printf(MSG_CRITICAL,
@@ -105,10 +113,10 @@ static int send_assigned_job(ASSIGNMENT& asg) {
return 0;
}
-// Send this host any "multi" assigned jobs.
+// Send this host any broadcase jobs.
// Return true iff we sent anything
//
-bool send_assigned_jobs_multi() {
+bool send_broadcast_jobs() {
DB_RESULT result;
int retval;
char buf[256];
@@ -119,7 +127,7 @@ bool send_assigned_jobs_multi() {
if (config.debug_assignment) {
log_messages.printf(MSG_NORMAL,
- "[assign] processing multi assignment type %d\n",
+ "[assign] processing broadcast type %d\n",
asg.target_type
);
}
@@ -161,22 +169,37 @@ bool send_assigned_jobs_multi() {
return sent_something;
}
-// send non-multi assigned jobs
+// Send targeted jobs of a given type.
+// NOTE: there may be an atomicity problem in the following.
+// Ideally it should be in a transaction.
//
-bool send_assigned_jobs() {
+bool send_jobs(int assign_type) {
DB_ASSIGNMENT asg;
DB_RESULT result;
DB_WORKUNIT wu;
- bool sent_something = false;
int retval;
+ bool sent_something = false;
+ char query[256], buf[256];
- // for now, only look for user assignments
- //
- char buf[256];
- sprintf(buf, "where target_type=%d and target_id=%d and multi=0",
- ASSIGN_USER, g_reply->user.id
- );
- while (!asg.enumerate(buf)) {
+ switch (assign_type) {
+ case ASSIGN_USER:
+ sprintf(query, "where target_type=%d and target_id=%d and multi=0",
+ ASSIGN_USER, g_reply->user.id
+ );
+ break;
+ case ASSIGN_HOST:
+ sprintf(query, "where target_type=%d and target_id=%d and multi=0",
+ ASSIGN_HOST, g_reply->host.id
+ );
+ break;
+ case ASSIGN_TEAM:
+ sprintf(query, "where target_type=%d and target_id=%d and multi=0",
+ ASSIGN_TEAM, g_reply->team.id
+ );
+ break;
+ }
+
+ while (!asg.enumerate(query)) {
if (!work_needed(false)) continue;
// if the WU doesn't exist, delete the assignment record.
@@ -186,6 +209,7 @@ bool send_assigned_jobs() {
asg.delete_from_db();
continue;
}
+
// don't send if WU is validation pending or completed,
// or has transition pending
//
@@ -193,7 +217,7 @@ bool send_assigned_jobs() {
if (wu.canonical_resultid) continue;
if (wu.transition_time < time(0)) continue;
- // don't send if we already sent one to this host
+ // don't send if we already sent an instance to this host
//
sprintf(buf, "where workunitid=%d and hostid=%d",
asg.workunitid,
@@ -202,21 +226,20 @@ bool send_assigned_jobs() {
retval = result.lookup(buf);
if (retval != ERR_DB_NOT_FOUND) continue;
- // don't send if there's already one in progress to this user
- //
- sprintf(buf,
- "where workunitid=%d and userid=%d and server_state=%d",
- asg.workunitid,
- g_reply->user.id,
- RESULT_SERVER_STATE_IN_PROGRESS
- );
- retval = result.lookup(buf);
- if (retval != ERR_DB_NOT_FOUND) continue;
-
// OK, send the job
//
+ if (config.debug_send) {
+ log_messages.printf(MSG_NORMAL,
+ "sending targeted job: %s\n", wu.name
+ );
+ }
retval = send_assigned_job(asg);
- if (retval) continue;
+ if (retval) {
+ log_messages.printf(MSG_NORMAL,
+ "failed to send targeted job: %s\n", boincerror(retval)
+ );
+ continue;
+ }
sent_something = true;
@@ -233,3 +256,16 @@ bool send_assigned_jobs() {
}
return sent_something;
}
+
+// send targeted jobs
+//
+bool send_targeted_jobs() {
+ bool sent_something = false;
+ if (config.debug_send) {
+ log_messages.printf(MSG_NORMAL, "checking for targeted jobs\n");
+ }
+ sent_something |= send_jobs(ASSIGN_USER);
+ sent_something |= send_jobs(ASSIGN_HOST);
+ sent_something |= send_jobs(ASSIGN_TEAM);
+ return sent_something;
+}
diff --git a/sched/sched_assign.h b/sched/sched_assign.h
index ed61507..47f9f81 100644
--- a/sched/sched_assign.h
+++ b/sched/sched_assign.h
@@ -15,5 +15,5 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-extern bool send_assigned_jobs();
-extern bool send_assigned_jobs_multi();
+extern bool send_targeted_jobs();
+extern bool send_broadcast_jobs();
diff --git a/sched/sched_config.cpp b/sched/sched_config.cpp
index fcf696a..6a826f3 100644
--- a/sched/sched_config.cpp
+++ b/sched/sched_config.cpp
@@ -25,11 +25,11 @@
#include <string>
#include <unistd.h>
-#include "parse.h"
#include "error_numbers.h"
#include "filesys.h"
-#include "str_util.h"
+#include "parse.h"
#include "str_replace.h"
+#include "str_util.h"
#include "sched_msgs.h"
#include "sched_util.h"
@@ -231,13 +231,15 @@ int SCHED_CONFIG::parse(FILE* f) {
if (xp.parse_bool("matchmaker", matchmaker)) continue;
if (xp.parse_int("max_ncpus", max_ncpus)) continue;
if (xp.parse_int("max_wus_in_progress", itemp)) {
- max_jobs_in_progress.project_limits.cpu.base_limit = itemp;
- max_jobs_in_progress.project_limits.cpu.per_proc = true;
+ max_jobs_in_progress.project_limits.proc_type_limits[PROC_TYPE_CPU].base_limit = itemp;
+ max_jobs_in_progress.project_limits.proc_type_limits[PROC_TYPE_CPU].per_proc = true;
continue;
}
if (xp.parse_int("max_wus_in_progress_gpu", itemp)) {
- max_jobs_in_progress.project_limits.gpu.base_limit = itemp;
- max_jobs_in_progress.project_limits.gpu.per_proc = true;
+ for (int i=1; i<NPROC_TYPES; i++) {
+ max_jobs_in_progress.project_limits.proc_type_limits[i].base_limit = itemp;
+ max_jobs_in_progress.project_limits.proc_type_limits[i].per_proc = true;
+ }
continue;
}
if (xp.parse_int("max_results_accepted", max_results_accepted)) continue;
diff --git a/sched/sched_customize.cpp b/sched/sched_customize.cpp
index 84c1d27..c540640 100644
--- a/sched/sched_customize.cpp
+++ b/sched/sched_customize.cpp
@@ -220,6 +220,14 @@ static inline bool app_plan_mt(SCHEDULER_REQUEST&, HOST_USAGE& hu) {
return true;
}
+bool app_plan_opencl_cpu_intel(SCHEDULER_REQUEST& sreq, HOST_USAGE& hu) {
+ OPENCL_CPU_PROP ocp;
+ if (!sreq.host.get_opencl_cpu_prop("intel", ocp)) {
+ return false;
+ }
+ return app_plan_mt(sreq, hu);
+}
+
static bool ati_check(COPROC_ATI& c, HOST_USAGE& hu,
int min_driver_version,
bool need_amd_libs,
@@ -664,15 +672,16 @@ static inline bool app_plan_nci(SCHEDULER_REQUEST&, HOST_USAGE& hu) {
// the following is for an app version that requires a processor with SSE3,
// and will run 10% faster than the non-SSE3 version
+// NOTE: clients return "pni" instead of "sse3"
//
static inline bool app_plan_sse3(
SCHEDULER_REQUEST& sreq, HOST_USAGE& hu
) {
downcase_string(sreq.host.p_features);
- if (!strstr(sreq.host.p_features, "sse3")) {
+ if (!strstr(sreq.host.p_features, "pni")) {
// Pre-6.x clients report CPU features in p_model
//
- if (!strstr(sreq.host.p_model, "sse3")) {
+ if (!strstr(sreq.host.p_model, "pni")) {
//add_no_work_message("Your CPU lacks SSE3");
return false;
}
@@ -867,7 +876,7 @@ static inline bool app_plan_opencl(
}
}
-// handles vbox_[32|64][_mt]
+// handles vbox[32|64][_[mt]|[hwaccel]]
// "mt" is tailored to the needs of CERN:
// use 1 or 2 CPUs
@@ -896,6 +905,20 @@ static inline bool app_plan_vbox(
return false;
}
+ // host must have VM acceleration in order to run hwaccel jobs
+ //
+ if (strstr(plan_class, "hwaccel")) {
+ if ((!strstr(sreq.host.p_features, "vmx") && !strstr(sreq.host.p_features, "svm"))
+ || sreq.host.p_vm_extensions_disabled
+ ) {
+ add_no_work_message(
+ "VirtualBox jobs require hardware acceleration support. Your "
+ "processor does not support the required instruction set."
+ );
+ return false;
+ }
+ }
+
// host must have VM acceleration in order to run multi-core jobs
//
if (strstr(plan_class, "mt")) {
@@ -969,11 +992,6 @@ bool app_plan(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu) {
safe_strcat(buf, "/plan_class_spec.xml");
int retval = plan_class_specs.parse_file(buf);
if (retval == ERR_FOPEN) {
- if (config.debug_version_select) {
- log_messages.printf(MSG_NORMAL,
- "[version] Couldn't open plan class spec file '%s'\n", buf
- );
- }
have_plan_class_spec = false;
} else if (retval) {
log_messages.printf(MSG_CRITICAL,
@@ -1010,6 +1028,8 @@ bool app_plan(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu) {
return app_plan_sse3(sreq, hu);
} else if (strstr(plan_class, "vbox")) {
return app_plan_vbox(sreq, plan_class, hu);
+ } else if (strstr(plan_class, "opencl_cpu_intel")) {
+ return app_plan_opencl_cpu_intel(sreq, hu);
}
log_messages.printf(MSG_CRITICAL,
"Unknown plan class: %s\n", plan_class
@@ -1017,112 +1037,6 @@ bool app_plan(SCHEDULER_REQUEST& sreq, char* plan_class, HOST_USAGE& hu) {
return false;
}
-#ifndef NEW_SCORE
-// compute a "score" for sending this job to this host.
-// Return false if the WU is infeasible.
-// Otherwise set est_time and disk_usage.
-//
-bool JOB::get_score() {
- WORKUNIT wu;
- int retval;
-
- WU_RESULT& wu_result = ssp->wu_results[index];
- wu = wu_result.workunit;
- app = ssp->lookup_app(wu.appid);
- if (app->non_cpu_intensive) return false;
-
- score = 0;
-
- // Find the best app version to use.
- //
- bavp = get_app_version(wu, true, false);
- if (!bavp) return false;
-
- retval = wu_is_infeasible_fast(
- wu, wu_result.res_server_state, wu_result.res_priority,
- wu_result.res_report_deadline,
- *app, *bavp
- );
- if (retval) {
- if (config.debug_send) {
- log_messages.printf(MSG_NORMAL,
- "[send] [HOST#%d] [WU#%d %s] WU is infeasible: %s\n",
- g_reply->host.id, wu.id, wu.name, infeasible_string(retval)
- );
- }
- return false;
- }
-
- score = 1;
-
-#if 0
- // example: for CUDA app, wu.batch is the minimum number of processors.
- // add min/actual to score
- // (this favors sending jobs that need lots of procs to GPUs that have them)
- // IF YOU USE THIS, USE THE PART IN wu_is_infeasible_custom() ALSO
- //
- if (!strcmp(app->name, "foobar") && bavp->host_usage.ncudas) {
- int n = g_request->coproc_cuda->prop.multiProcessorCount;
- score += ((double)wu.batch)/n;
- }
-#endif
-
- // check if user has selected apps,
- // and send beta work to beta users
- //
- if (app->beta && !config.distinct_beta_apps) {
- if (g_wreq->allow_beta_work) {
- score += 1;
- } else {
- return false;
- }
- } else {
- if (app_not_selected(wu)) {
- if (!g_wreq->allow_non_preferred_apps) {
- return false;
- } else {
- // Allow work to be sent, but it will not get a bump in its score
- }
- } else {
- score += 1;
- }
- }
-
- // if job needs to get done fast, send to fast/reliable host
- //
- if (bavp->reliable && (wu_result.need_reliable)) {
- score += 1;
- }
-
- // if job already committed to an HR class,
- // try to send to host in that class
- //
- if (wu_result.infeasible_count) {
- score += 1;
- }
-
- // Favor jobs that will run fast
- //
- score += bavp->host_usage.projected_flops/1e9;
-
- // match large jobs to fast hosts
- //
- if (config.job_size_matching) {
- double host_stdev = (capped_host_fpops() - ssp->perf_info.host_fpops_mean)/ ssp->perf_info.host_fpops_stddev;
- double diff = host_stdev - wu_result.fpops_size;
- score -= diff*diff;
- }
-
- // TODO: If user has selected some apps but will accept jobs from others,
- // try to send them jobs from the selected apps
- //
-
- est_time = estimate_duration(wu, *bavp);
- disk_usage = wu.rsc_disk_bound;
- return true;
-}
-#endif
-
void handle_file_xfer_results() {
for (unsigned int i=0; i<g_request->file_xfer_results.size(); i++) {
RESULT& r = g_request->file_xfer_results[i];
diff --git a/sched/sched_files.cpp b/sched/sched_files.cpp
index 4a7c636..1c85410 100644
--- a/sched/sched_files.cpp
+++ b/sched/sched_files.cpp
@@ -55,6 +55,7 @@ int init_file_delete_regex() {
file_delete_regex_string.push_back(string(buf));
}
}
+ fclose(f);
return 0;
}
@@ -64,7 +65,7 @@ int do_file_delete_regex() {
bool found = false;
for (unsigned int j=0; j<file_delete_regex.size(); j++) {
regex_t& re = file_delete_regex[j];
- if (regexec(&re, fi.name, 0, NULL, 0)) {
+ if (!regexec(&re, fi.name, 0, NULL, 0)) {
g_reply->file_deletes.push_back(fi);
if (config.debug_client_files) {
log_messages.printf(MSG_NORMAL,
diff --git a/sched/sched_limit.cpp b/sched/sched_limit.cpp
index 80cf819..7bf6b80 100644
--- a/sched/sched_limit.cpp
+++ b/sched/sched_limit.cpp
@@ -55,11 +55,14 @@ int JOB_LIMIT::parse(XML_PARSER& xp, const char* end_tag) {
continue;
}
if (xp.match_tag("cpu_limit")) {
- cpu.parse(xp, "/cpu_limit");
+ proc_type_limits[0].parse(xp, "/cpu_limit");
continue;
}
if (xp.match_tag("gpu_limit")) {
- gpu.parse(xp, "/gpu_limit");
+ proc_type_limits[1].parse(xp, "/gpu_limit");
+ for (int i=2; i<NPROC_TYPES; i++) {
+ proc_type_limits[i] = proc_type_limits[1];
+ }
continue;
}
}
diff --git a/sched/sched_limit.h b/sched/sched_limit.h
index aec6267..77c866e 100644
--- a/sched/sched_limit.h
+++ b/sched/sched_limit.h
@@ -72,38 +72,34 @@ struct RSC_JOB_LIMIT {
struct JOB_LIMIT {
char app_name[256];
RSC_JOB_LIMIT total;
- RSC_JOB_LIMIT cpu;
- RSC_JOB_LIMIT gpu;
+ RSC_JOB_LIMIT proc_type_limits[NPROC_TYPES];
int parse(XML_PARSER&, const char* end_tag);
- inline void reset(int ncpus, int ngpus) {
+ inline void reset(int ninstances[]) {
total.reset(1);
- cpu.reset(ncpus);
- gpu.reset(ngpus);
+ for (int i=0; i<NPROC_TYPES; i++) {
+ proc_type_limits[i].reset(ninstances[i]);
+ }
}
- inline bool exceeded(bool is_gpu) {
+ inline bool exceeded(int proc_type) {
if (total.exceeded()) return true;
- if (is_gpu) {
- if (gpu.exceeded()) return true;
- } else {
- if (cpu.exceeded()) return true;
- }
+ if (proc_type_limits[proc_type].exceeded()) return true;
return false;
}
- inline void register_job(bool is_gpu) {
+ inline void register_job(int proc_type) {
total.register_job();
- if (is_gpu) {
- gpu.register_job();
- } else {
- cpu.register_job();
- }
+ proc_type_limits[proc_type].register_job();
}
inline bool any_limit() {
- return total.any_limit() || cpu.any_limit() || gpu.any_limit();
+ if (total.any_limit()) return true;
+ for (int i=0; i<NPROC_TYPES; i++) {
+ if (proc_type_limits[i].any_limit()) return true;
+ }
+ return false;
}
void print_log();
@@ -118,10 +114,10 @@ struct JOB_LIMITS {
// called at start of each request
//
- inline void reset(int ncpus, int ngpus) {
- project_limits.reset(ncpus, ngpus);
+ inline void reset(int ninstances[]) {
+ project_limits.reset(ninstances);
for (unsigned int i=0; i<app_limits.size(); i++) {
- app_limits[i].reset(ncpus, ngpus);
+ app_limits[i].reset(ninstances);
}
}
@@ -135,23 +131,23 @@ struct JOB_LIMITS {
return NULL;
}
- inline bool exceeded(APP* app, bool is_gpu) {
- if (project_limits.exceeded(is_gpu)) return true;
+ inline bool exceeded(APP* app, int proc_type) {
+ if (project_limits.exceeded(proc_type)) return true;
if (app) {
JOB_LIMIT* jlp = lookup_app(app->name);
if (jlp) {
- if (jlp->exceeded(is_gpu)) return true;
+ if (jlp->exceeded(proc_type)) return true;
}
}
return false;
}
- inline void register_job(APP* app, bool is_gpu) {
- project_limits.register_job(is_gpu);
+ inline void register_job(APP* app, int proc_type) {
+ project_limits.register_job(proc_type);
if (app) {
JOB_LIMIT* jlp = lookup_app(app->name);
if (jlp) {
- jlp->register_job(is_gpu);
+ jlp->register_job(proc_type);
}
}
}
diff --git a/sched/sched_locality.cpp b/sched/sched_locality.cpp
index f8ead08..e4e60ae 100644
--- a/sched/sched_locality.cpp
+++ b/sched/sched_locality.cpp
@@ -32,8 +32,8 @@
#include "boinc_db.h"
#include "error_numbers.h"
-#include "str_util.h"
#include "filesys.h"
+#include "str_util.h"
#include "sched_check.h"
#include "sched_config.h"
diff --git a/sched/sched_main.cpp b/sched/sched_main.cpp
index 4ebc2b5..16a4944 100644
--- a/sched/sched_main.cpp
+++ b/sched/sched_main.cpp
@@ -681,8 +681,8 @@ void RSC_JOB_LIMIT::print_log(const char* rsc_name) {
void JOB_LIMIT::print_log() {
if (total.any_limit()) total.print_log("total");
- if (cpu.any_limit()) cpu.print_log("CPU");
- if (gpu.any_limit()) gpu.print_log("GPU");
+ if (proc_type_limits[0].any_limit()) proc_type_limits[0].print_log("CPU");
+ if (proc_type_limits[1].any_limit()) proc_type_limits[1].print_log("GPU");
}
void JOB_LIMITS::print_log() {
diff --git a/sched/sched_result.cpp b/sched/sched_result.cpp
index 7f91ef2..b85b187 100644
--- a/sched/sched_result.cpp
+++ b/sched/sched_result.cpp
@@ -125,7 +125,8 @@ int handle_results() {
// which srip appears as an lval. These are:
// hostid, teamid, received_time, client_state, cpu_time, exit_status,
// app_version_num, claimed_credit, server_state, stderr_out,
- // xml_doc_out, outcome, validate_state, elapsed_time
+ // xml_doc_out, outcome, validate_state, elapsed_time,
+ // and peak_*
//
retval = result_handler.enumerate();
if (retval) {
@@ -295,6 +296,9 @@ int handle_results() {
srip->client_state = rp->client_state;
srip->cpu_time = rp->cpu_time;
srip->elapsed_time = rp->elapsed_time;
+ srip->peak_working_set_size = rp->peak_working_set_size;
+ srip->peak_swap_size = rp->peak_swap_size;
+ srip->peak_disk_usage = rp->peak_disk_usage;
// Some buggy clients sporadically report very low elapsed time
// but actual CPU time.
@@ -337,6 +341,17 @@ int handle_results() {
}
}
+ // check for impossible CPU time
+ //
+ if (srip->cpu_time > srip->elapsed_time*g_reply->host.p_ncpus) {
+ log_messages.printf(MSG_NORMAL,
+ "[HOST#%d] [RESULT#%u] [WU#%u] impossible CPU time: %f > %f * %d\n",
+ srip->hostid, srip->id, srip->workunitid,
+ srip->cpu_time, srip->elapsed_time, g_reply->host.p_ncpus
+ );
+ srip->cpu_time = srip->elapsed_time*g_reply->host.p_ncpus;
+ }
+
srip->exit_status = rp->exit_status;
srip->app_version_num = rp->app_version_num;
srip->server_state = RESULT_SERVER_STATE_OVER;
@@ -391,7 +406,8 @@ int handle_results() {
"[HOST#%d] [RESULT#%u] [WU#%u] can't update result: %s\n",
g_reply->host.id, sri.id, sri.workunitid, boinc_db.error_string()
);
- } else {
+ }
+ if (retval == 0 || retval == ERR_DB_NOT_FOUND) {
g_reply->result_acks.push_back(std::string(sri.name));
}
}
diff --git a/sched/sched_score.cpp b/sched/sched_score.cpp
index 07b2025..d89cd42 100644
--- a/sched/sched_score.cpp
+++ b/sched/sched_score.cpp
@@ -15,7 +15,12 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-// Matchmaker scheduling code
+// job dispatch using a score-based approach:
+// - scan the job array, assigning a score to each job and building a list
+// (the score reflect a variety of factors).
+// - sort the list
+// - send jobs in order of decreasing score until request is satisfied
+// - do the above separately for each resource type
#include <algorithm>
@@ -35,8 +40,8 @@
#include "sched_score.h"
-#ifdef NEW_SCORE
-
+// given the host's estimated speed, determine its size class
+//
static int get_size_class(APP& app, double es) {
for (int i=0; i<app.n_size_classes-1; i++) {
if (es < app.size_class_quantiles[i]) return i;
@@ -62,6 +67,12 @@ bool JOB::get_score(WU_RESULT& wu_result) {
if (g_wreq->allow_beta_work) {
score += 1;
} else {
+ if (config.debug_send) {
+ log_messages.printf(MSG_NORMAL,
+ "[send] can't send job %d for beta app to non-beta user\n",
+ wu_result.workunit.id
+ );
+ }
return false;
}
}
@@ -94,7 +105,7 @@ bool JOB::get_score(WU_RESULT& wu_result) {
}
if (app->n_size_classes > 1) {
- double effective_speed = bavp->host_usage.projected_flops * g_reply->host.on_frac * g_reply->host.active_frac;
+ double effective_speed = bavp->host_usage.projected_flops * available_frac(*bavp);
int target_size = get_size_class(*app, effective_speed);
if (config.debug_send) {
log_messages.printf(MSG_NORMAL,
@@ -112,7 +123,7 @@ bool JOB::get_score(WU_RESULT& wu_result) {
}
if (config.debug_send) {
log_messages.printf(MSG_NORMAL,
- "[send]: job score %f\n", score
+ "[send]: score %f for result %d\n", score, wu_result.resultid
);
}
@@ -149,6 +160,12 @@ static void restore_others(int rt) {
void send_work_score_type(int rt) {
vector<JOB> jobs;
+ if (config.debug_send) {
+ log_messages.printf(MSG_NORMAL,
+ "[send] scanning for %s jobs\n", proc_type_name(rt)
+ );
+ }
+
clear_others(rt);
int nscan = config.mm_max_slots;
@@ -216,7 +233,8 @@ void send_work_score_type(int rt) {
wu_result.state = g_pid;
// It passed fast checks.
- // Release sema and to slow checks
+ // Release sema and do slow checks
+ //
unlock_sema();
sema_locked = false;
@@ -273,289 +291,3 @@ void send_work_score() {
}
}
}
-#else
-// reread result from DB, make sure it's still unsent
-// TODO: from here to add_result_to_reply()
-// (which updates the DB record) should be a transaction
-//
-int read_sendable_result(SCHED_DB_RESULT& result) {
- int retval = result.lookup_id(result.id);
- if (retval) {
- log_messages.printf(MSG_CRITICAL,
- "[RESULT#%u] result.lookup_id() failed %s\n",
- result.id, boincerror(retval)
- );
- return ERR_NOT_FOUND;
- }
- if (result.server_state != RESULT_SERVER_STATE_UNSENT) {
- log_messages.printf(MSG_NORMAL,
- "[RESULT#%u] expected to be unsent; instead, state is %d\n",
- result.id, result.server_state
- );
- return ERR_BAD_RESULT_STATE;
- }
- return 0;
-}
-
-// TODO: use slow_check()
-//
-bool wu_is_infeasible_slow(
- WU_RESULT& wu_result, SCHEDULER_REQUEST&, SCHEDULER_REPLY&
-) {
- char buf[256];
- int retval;
- int n;
- SCHED_DB_RESULT result;
-
- // Don't send if we've already sent a result of this WU to this user.
- //
- if (config.one_result_per_user_per_wu) {
- sprintf(buf,
- "where workunitid=%d and userid=%d",
- wu_result.workunit.id, g_reply->user.id
- );
- retval = result.count(n, buf);
- if (retval) {
- log_messages.printf(MSG_CRITICAL,
- "send_work: can't get result count (%s)\n", boincerror(retval)
- );
- return true;
- } else {
- if (n>0) {
- if (config.debug_send) {
- log_messages.printf(MSG_NORMAL,
- "[send] send_work: user %d already has %d result(s) for WU %d\n",
- g_reply->user.id, n, wu_result.workunit.id
- );
- }
- return true;
- }
- }
- } else if (config.one_result_per_host_per_wu) {
- // Don't send if we've already sent a result
- // of this WU to this host.
- // We only have to check this
- // if we don't send one result per user.
- //
- sprintf(buf,
- "where workunitid=%d and hostid=%d",
- wu_result.workunit.id, g_reply->host.id
- );
- retval = result.count(n, buf);
- if (retval) {
- log_messages.printf(MSG_CRITICAL,
- "send_work: can't get result count (%s)\n", boincerror(retval)
- );
- return true;
- } else {
- if (n>0) {
- if (config.debug_send) {
- log_messages.printf(MSG_NORMAL,
- "[send] send_work: host %d already has %d result(s) for WU %d\n",
- g_reply->host.id, n, wu_result.workunit.id
- );
- }
- return true;
- }
- }
- }
-
- APP* app = ssp->lookup_app(wu_result.workunit.appid);
- WORKUNIT wu = wu_result.workunit;
- if (app_hr_type(*app)) {
- if (already_sent_to_different_hr_class(wu, *app)) {
- if (config.debug_send) {
- log_messages.printf(MSG_NORMAL,
- "[send] [HOST#%d] [WU#%u %s] WU is infeasible (assigned to different platform)\n",
- g_reply->host.id, wu.id, wu.name
- );
- }
- // Mark the workunit as infeasible.
- // This ensures that jobs already assigned to a platform
- // are processed first.
- //
- wu_result.infeasible_count++;
- return true;
- }
- }
- return false;
-}
-
-double JOB_SET::lowest_score() {
- if (jobs.empty()) return 0;
- return jobs.back().score;
-}
-
-// add the given job, and remove lowest-score jobs that
-// - are in excess of work request
-// - are in excess of per-request or per-day limits
-// - cause the disk limit to be exceeded
-//
-void JOB_SET::add_job(JOB& job) {
- while (!jobs.empty()) {
- JOB& worst_job = jobs.back();
- if (est_time + job.est_time - worst_job.est_time > work_req) {
- est_time -= worst_job.est_time;
- disk_usage -= worst_job.disk_usage;
- jobs.pop_back();
- ssp->wu_results[worst_job.index].state = WR_STATE_PRESENT;
- } else {
- break;
- }
- }
- while (!jobs.empty()) {
- JOB& worst_job = jobs.back();
- if (disk_usage + job.disk_usage > disk_limit) {
- est_time -= worst_job.est_time;
- disk_usage -= worst_job.disk_usage;
- jobs.pop_back();
- ssp->wu_results[worst_job.index].state = WR_STATE_PRESENT;
- } else {
- break;
- }
- }
-
- if ((int)jobs.size() == max_jobs) {
- JOB& worst_job = jobs.back();
- jobs.pop_back();
- ssp->wu_results[worst_job.index].state = WR_STATE_PRESENT;
- }
-
- std::list<JOB>::iterator i = jobs.begin();
- while (i != jobs.end()) {
- if (i->score < job.score) {
- jobs.insert(i, job);
- break;
- }
- i++;
- }
- if (i == jobs.end()) {
- jobs.push_back(job);
- }
- est_time += job.est_time;
- disk_usage += job.disk_usage;
- if (config.debug_send) {
- log_messages.printf(MSG_NORMAL,
- "[send] added job to set. est_time %.2f disk_usage %.2fGB\n",
- est_time, disk_usage/GIGA
- );
- }
-}
-
-// return the disk usage of jobs above the given score
-//
-double JOB_SET::higher_score_disk_usage(double v) {
- double sum = 0;
- std::list<JOB>::iterator i = jobs.begin();
- while (i != jobs.end()) {
- if (i->score < v) break;
- sum += i->disk_usage;
- i++;
- }
- return sum;
-}
-
-void JOB_SET::send() {
- WORKUNIT wu;
- SCHED_DB_RESULT result;
- int retval;
-
- std::list<JOB>::iterator i = jobs.begin();
- while (i != jobs.end()) {
- JOB& job = *(i++);
- WU_RESULT wu_result = ssp->wu_results[job.index];
- ssp->wu_results[job.index].state = WR_STATE_EMPTY;
- wu = wu_result.workunit;
- result.id = wu_result.resultid;
- retval = read_sendable_result(result);
- if (!retval) {
- add_result_to_reply(result, wu, job.bavp, false);
- }
- }
-}
-
-void send_work_score() {
- int i, slots_locked=0, slots_nonempty=0;
- JOB_SET jobs;
- int min_slots = config.mm_min_slots;
- if (!min_slots) min_slots = ssp->max_wu_results/2;
- int max_slots = config.mm_max_slots;
- if (!max_slots) max_slots = ssp->max_wu_results;
- int max_locked = 10;
-
- lock_sema();
- i = rand() % ssp->max_wu_results;
-
- // scan through the job cache, maintaining a JOB_SET of jobs
- // that we can send to this client, ordered by score.
- //
- for (int slots_scanned=0; slots_scanned<max_slots; slots_scanned++) {
- i = (i+1) % ssp->max_wu_results;
- WU_RESULT& wu_result = ssp->wu_results[i];
- switch (wu_result.state) {
- case WR_STATE_EMPTY:
- continue;
- case WR_STATE_PRESENT:
- slots_nonempty++;
- break;
- default:
- slots_nonempty++;
- if (wu_result.state == g_pid) break;
- slots_locked++;
- continue;
- }
-
- JOB job;
- job.index = i;
-
- // get score for this job, and skip it if it fails quick check.
- // NOTE: the EDF check done in get_score()
- // includes only in-progress jobs.
- //
- if (!job.get_score()) {
- continue;
- }
- if (config.debug_send) {
- log_messages.printf(MSG_NORMAL,
- "[send] score for %s: %f\n", wu_result.workunit.name, job.score
- );
- }
-
- if (job.score > jobs.lowest_score() || !jobs.request_satisfied()) {
- ssp->wu_results[i].state = g_pid;
- unlock_sema();
- if (wu_is_infeasible_slow(wu_result, *g_request, *g_reply)) {
- // if we can't use this job, put it back in pool
- //
- lock_sema();
- ssp->wu_results[i].state = WR_STATE_PRESENT;
- continue;
- }
- lock_sema();
- jobs.add_job(job);
- }
-
- if (jobs.request_satisfied() && slots_scanned>=min_slots) break;
- }
-
- if (slots_nonempty) {
- g_wreq->no_jobs_available = false;
- } else {
- log_messages.printf(MSG_CRITICAL,
- "Job cache is empty - check feeder\n"
- );
- }
-
- // TODO: trim jobs from tail of list until we pass the EDF check
- //
- jobs.send();
- unlock_sema();
- if (slots_locked > max_locked) {
- log_messages.printf(MSG_CRITICAL,
- "Found too many locked slots (%d>%d) - increase array size\n",
- slots_locked, max_locked
- );
- }
-}
-
-#endif
diff --git a/sched/sched_score.h b/sched/sched_score.h
index d569ea8..6452890 100644
--- a/sched/sched_score.h
+++ b/sched/sched_score.h
@@ -15,9 +15,8 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-#define NEW_SCORE
+// job dispatch using a score-based approach. See sched_scure.cpp
-#ifdef NEW_SCORE
struct JOB {
int index;
int result_id;
@@ -28,43 +27,4 @@ struct JOB {
bool get_score(WU_RESULT&);
};
-#else
-#include <list>
-
-struct JOB {
- int index;
- double score;
- double est_time;
- double disk_usage;
- APP* app;
- BEST_APP_VERSION* bavp;
-
- bool get_score();
-};
-
-struct JOB_SET {
- double work_req;
- double est_time;
- double disk_usage;
- double disk_limit;
- int max_jobs;
- std::list<JOB> jobs; // sorted high to low
-
- JOB_SET() {
- work_req = g_request->work_req_seconds;
- est_time = 0;
- disk_usage = 0;
- disk_limit = g_wreq->disk_available;
- max_jobs = g_wreq->max_jobs_per_rpc;
- }
- void add_job(JOB&);
- double higher_score_disk_usage(double);
- double lowest_score();
- inline bool request_satisfied() {
- return est_time >= work_req;
- }
- void send();
-};
-
-#endif
extern void send_work_score();
diff --git a/sched/sched_send.cpp b/sched/sched_send.cpp
index 821ba7f..cbf0386 100644
--- a/sched/sched_send.cpp
+++ b/sched/sched_send.cpp
@@ -130,7 +130,11 @@ const double MAX_REQ_SECS = (28*SECONDS_IN_DAY);
// # jobs per RPC
// # jobs in progress
//
-void WORK_REQ::get_job_limits() {
+void WORK_REQ_BASE::get_job_limits() {
+ int ninstances[NPROC_TYPES];
+ int i;
+
+ memset(ninstances, 0, sizeof(ninstances));
int n;
n = g_reply->host.p_ncpus;
if (g_request->global_prefs.max_ncpus_pct && g_request->global_prefs.max_ncpus_pct < 100) {
@@ -139,16 +143,24 @@ void WORK_REQ::get_job_limits() {
if (n > config.max_ncpus) n = config.max_ncpus;
if (n < 1) n = 1;
if (n > MAX_CPUS) n = MAX_CPUS;
+ ninstances[PROC_TYPE_CPU] = n;
effective_ncpus = n;
- n = g_request->coprocs.ndevs();
- if (n > MAX_GPUS) n = MAX_GPUS;
- effective_ngpus = n;
+ effective_ngpus = 0;
+ for (i=1; i<g_request->coprocs.n_rsc; i++) {
+ COPROC& cp = g_request->coprocs.coprocs[i];
+ int proc_type = coproc_type_name_to_num(cp.type);
+ if (!proc_type) continue;
+ n = cp.count;
+ if (n > MAX_GPUS) n = MAX_GPUS;
+ ninstances[proc_type] = n;
+ effective_ngpus += n;
+ }
int mult = effective_ncpus + config.gpu_multiplier * effective_ngpus;
if (config.non_cpu_intensive) {
mult = 1;
- effective_ncpus = 1;
+ ninstances[0] = 1;
if (effective_ngpus) effective_ngpus = 1;
}
@@ -164,7 +176,7 @@ void WORK_REQ::get_job_limits() {
effective_ncpus, effective_ngpus
);
}
- config.max_jobs_in_progress.reset(effective_ncpus, effective_ngpus);
+ config.max_jobs_in_progress.reset(ninstances);
}
const char* find_user_friendly_name(int appid) {
@@ -409,28 +421,46 @@ static double estimate_duration_unscaled(WORKUNIT& wu, BEST_APP_VERSION& bav) {
return rsc_fpops_est/bav.host_usage.projected_flops;
}
-static inline void get_running_frac() {
- double rf;
- if (g_request->core_client_version<=41900) {
- rf = g_reply->host.on_frac;
- } else {
- rf = g_reply->host.active_frac * g_reply->host.on_frac;
- }
-
- // clamp running_frac to a reasonable range
- //
- if (rf > 1) {
+// Compute cpu_available_frac and gpu_available_frac.
+// These are based on client-supplied data, so do sanity checks
+//
+#define FRAC_MIN 0.1
+static inline void clamp_frac(double& frac, const char* name) {
+ if (frac > 1) {
if (config.debug_send) {
- log_messages.printf(MSG_NORMAL, "[send] running_frac=%f; setting to 1\n", rf);
+ log_messages.printf(MSG_NORMAL,
+ "[send] %s=%f; setting to 1\n", name, frac
+ );
}
- rf = 1;
- } else if (rf < .1) {
+ frac = 1;
+ } else if (frac < FRAC_MIN) {
if (config.debug_send) {
- log_messages.printf(MSG_NORMAL, "[send] running_frac=%f; setting to 0.1\n", rf);
+ log_messages.printf(MSG_NORMAL,
+ "[send] %s=%f; setting to %f\n", name, frac, FRAC_MIN
+ );
}
- rf = .1;
+ frac = .01;
+ }
+}
+
+static inline void get_available_fracs() {
+ if (g_request->core_client_version<=41900) {
+ g_wreq->cpu_available_frac = g_reply->host.on_frac;
+ g_wreq->gpu_available_frac = g_reply->host.on_frac; // irrelevant
+ } else {
+ g_wreq->cpu_available_frac = g_reply->host.active_frac * g_reply->host.on_frac;
+ g_wreq->gpu_available_frac = g_reply->host.gpu_active_frac * g_reply->host.on_frac;
+ }
+ clamp_frac(g_wreq->cpu_available_frac, "CPU available fraction");
+ clamp_frac(g_wreq->gpu_available_frac, "GPU available fraction");
+}
+
+double available_frac(BEST_APP_VERSION& bav) {
+ if (bav.host_usage.uses_gpu()) {
+ return g_wreq->gpu_available_frac;
+ } else {
+ return g_wreq->cpu_available_frac;
}
- g_wreq->running_frac = rf;
}
// estimate the amount of real time to complete this WU,
@@ -440,7 +470,7 @@ static inline void get_running_frac() {
//
double estimate_duration(WORKUNIT& wu, BEST_APP_VERSION& bav) {
double edu = estimate_duration_unscaled(wu, bav);
- double ed = edu/g_wreq->running_frac;
+ double ed = edu/available_frac(bav);
if (config.debug_send) {
log_messages.printf(MSG_NORMAL,
"[send] est. duration for WU %d: unscaled %.2f scaled %.2f\n",
@@ -757,36 +787,21 @@ bool work_needed(bool locality_sched) {
//
bool some_type_allowed = false;
- // check GPU limit
- //
- if (config.max_jobs_in_progress.exceeded(NULL, true)) {
- if (config.debug_quota) {
- log_messages.printf(MSG_NORMAL,
- "[quota] reached limit on GPU jobs in progress\n"
- );
- config.max_jobs_in_progress.print_log();
- }
- g_wreq->clear_gpu_req();
- if (g_wreq->effective_ngpus) {
- g_wreq->max_jobs_on_host_gpu_exceeded = true;
- }
- } else {
- some_type_allowed = true;
- }
-
- // check CPU limit
- //
- if (config.max_jobs_in_progress.exceeded(NULL, false)) {
- if (config.debug_quota) {
- log_messages.printf(MSG_NORMAL,
- "[quota] reached limit on CPU jobs in progress\n"
- );
- config.max_jobs_in_progress.print_log();
+ for (int i=0; i<NPROC_TYPES; i++) {
+ if (!have_apps(i)) continue;
+ if (config.max_jobs_in_progress.exceeded(NULL, i)) {
+ if (config.debug_quota) {
+ log_messages.printf(MSG_NORMAL,
+ "[quota] reached limit on %s jobs in progress\n",
+ proc_type_name(i)
+ );
+ config.max_jobs_in_progress.print_log();
+ }
+ g_wreq->clear_req(i);
+ g_wreq->max_jobs_on_host_proc_type_exceeded[i] = true;
+ } else {
+ some_type_allowed = true;
}
- g_wreq->clear_cpu_req();
- g_wreq->max_jobs_on_host_cpu_exceeded = true;
- } else {
- some_type_allowed = true;
}
if (!some_type_allowed) {
@@ -991,7 +1006,7 @@ int add_result_to_reply(
}
update_estimated_delay(*bavp, est_dur);
g_wreq->njobs_sent++;
- config.max_jobs_in_progress.register_job(app, bavp->host_usage.uses_gpu());
+ config.max_jobs_in_progress.register_job(app, bavp->host_usage.proc_type);
if (!resent_result) {
DB_HOST_APP_VERSION* havp = bavp->host_app_version();
if (havp) {
@@ -1322,10 +1337,7 @@ static void send_user_messages() {
}
g_reply->set_delay(DELAY_NO_WORK_CACHE);
}
- if (g_wreq->max_jobs_on_host_exceeded
- || g_wreq->max_jobs_on_host_cpu_exceeded
- || g_wreq->max_jobs_on_host_gpu_exceeded
- ) {
+ if (g_wreq->max_jobs_exceeded()) {
sprintf(buf, "This computer has reached a limit on tasks in progress");
g_reply->insert_message(buf, "low");
g_reply->set_delay(DELAY_NO_WORK_CACHE);
@@ -1376,7 +1388,7 @@ void send_work_setup() {
g_wreq->disk_available = max_allowable_disk();
get_mem_sizes();
- get_running_frac();
+ get_available_fracs();
g_wreq->get_job_limits();
// do sanity checking on GPU scheduling parameters
@@ -1402,7 +1414,7 @@ void send_work_setup() {
for (i=0; i<g_request->other_results.size(); i++) {
OTHER_RESULT& r = g_request->other_results[i];
APP* app = NULL;
- bool uses_gpu = false;
+ int proc_type = PROC_TYPE_CPU;
bool have_cav = false;
if (r.app_version >= 0
&& r.app_version < (int)g_request->client_app_versions.size()
@@ -1411,15 +1423,15 @@ void send_work_setup() {
app = cav.app;
if (app) {
have_cav = true;
- uses_gpu = cav.host_usage.uses_gpu();
+ proc_type = cav.host_usage.proc_type;
}
}
if (!have_cav) {
- if (r.have_plan_class && app_plan_uses_gpu(r.plan_class)) {
- uses_gpu = true;
+ if (r.have_plan_class) {
+ proc_type = plan_class_to_proc_type(r.plan_class);
}
}
- config.max_jobs_in_progress.register_job(app, uses_gpu);
+ config.max_jobs_in_progress.register_job(app, proc_type);
}
// print details of request to log
@@ -1464,9 +1476,10 @@ void send_work_setup() {
(int)g_request->global_prefs.work_buf_min()
);
log_messages.printf(MSG_NORMAL,
- "[send] active_frac %f on_frac %f\n",
+ "[send] on_frac %f active_frac %f gpu_active_frac %f\n",
+ g_reply->host.on_frac,
g_reply->host.active_frac,
- g_reply->host.on_frac
+ g_reply->host.gpu_active_frac
);
if (g_wreq->anonymous_platform) {
log_messages.printf(MSG_NORMAL,
@@ -1573,7 +1586,7 @@ void send_work() {
}
if (config.enable_assignment) {
- if (send_assigned_jobs()) {
+ if (send_targeted_jobs()) {
if (config.debug_assignment) {
log_messages.printf(MSG_NORMAL,
"[assign] [HOST#%d] sent assigned jobs\n", g_reply->host.id
@@ -1584,7 +1597,7 @@ void send_work() {
}
if (config.enable_assignment_multi) {
- if (send_assigned_jobs_multi()) {
+ if (send_broadcast_jobs()) {
if (config.debug_assignment) {
log_messages.printf(MSG_NORMAL,
"[assign] [HOST#%d] sent assigned jobs\n", g_reply->host.id
@@ -1608,8 +1621,7 @@ void send_work() {
}
if (!work_needed(false)) {
- send_user_messages();
- return;
+ goto done;
}
if (config.locality_scheduler_fraction > 0) {
diff --git a/sched/sched_shmem.cpp b/sched/sched_shmem.cpp
index caeb5f7..84409a4 100644
--- a/sched/sched_shmem.cpp
+++ b/sched/sched_shmem.cpp
@@ -31,6 +31,7 @@ using std::vector;
#include "boinc_db.h"
#include "error_numbers.h"
+#include "filesys.h"
#ifdef _USING_FCGI_
#include "boinc_fcgi.h"
@@ -145,6 +146,7 @@ int SCHED_SHMEM::scan_tables() {
log_messages.printf(MSG_CRITICAL,
"Size census file for app %s is too short\n", app.name
);
+ fclose(f);
return ERR_XML_PARSE; // whatever
}
app.size_class_quantiles[i] = atof(buf);
diff --git a/sched/sched_timezone.cpp b/sched/sched_timezone.cpp
index b2c843e..79bf19f 100644
--- a/sched/sched_timezone.cpp
+++ b/sched/sched_timezone.cpp
@@ -24,6 +24,7 @@
#include <cstdio>
#include <cstring>
+#include "filesys.h"
#include "parse.h"
#include "sched_types.h"
diff --git a/sched/sched_types.cpp b/sched/sched_types.cpp
index f79eb6b..decdc94 100644
--- a/sched/sched_types.cpp
+++ b/sched/sched_types.cpp
@@ -93,14 +93,15 @@ int CLIENT_APP_VERSION::parse(XML_PARSER& xp) {
COPROC_REQ coproc_req;
int retval = coproc_req.parse(xp);
if (!retval) {
- host_usage.gpu_usage = coproc_req.count;
- if (!strcmp(coproc_req.type, "CUDA") || !strcmp(coproc_req.type, "NVIDIA")) {
- host_usage.proc_type = PROC_TYPE_NVIDIA_GPU;
- } else if (!strcmp(coproc_req.type, "ATI")) {
- host_usage.proc_type = PROC_TYPE_AMD_GPU;
- } else if (!strcmp(coproc_req.type, "INTEL")) {
- host_usage.proc_type = PROC_TYPE_INTEL_GPU;
+ int rt = coproc_type_name_to_num(coproc_req.type);
+ if (!rt) {
+ log_messages.printf(MSG_NORMAL,
+ "UNKNOWN COPROC TYPE %s\n", coproc_req.type
+ );
+ continue;
}
+ host_usage.proc_type = rt;
+ host_usage.gpu_usage = coproc_req.count;
}
continue;
}
@@ -598,7 +599,7 @@ int MSG_FROM_HOST_DESC::parse(XML_PARSER& xp) {
}
SCHEDULER_REPLY::SCHEDULER_REPLY() {
- memset(&wreq, 0, sizeof(wreq));
+ wreq.clear();
memset(&disk_limits, 0, sizeof(disk_limits));
request_delay = 0;
hostid = 0;
@@ -1025,9 +1026,11 @@ int APP::write(FILE* fout) {
" <name>%s</name>\n"
" <user_friendly_name>%s</user_friendly_name>\n"
" <non_cpu_intensive>%d</non_cpu_intensive>\n"
+ " <fraction_done_exact>%d</fraction_done_exact>\n"
"</app>\n",
name, user_friendly_name,
- non_cpu_intensive?1:0
+ non_cpu_intensive?1:0,
+ fraction_done_exact?1:0
);
return 0;
}
@@ -1146,8 +1149,36 @@ int SCHED_DB_RESULT::parse_from_client(XML_PARSER& xp) {
}
if (xp.parse_str("name", name, sizeof(name))) continue;
if (xp.parse_int("state", client_state)) continue;
- if (xp.parse_double("final_cpu_time", cpu_time)) continue;
- if (xp.parse_double("final_elapsed_time", elapsed_time)) continue;
+ if (xp.parse_double("final_cpu_time", cpu_time)) {
+ if (!boinc_is_finite(cpu_time)) {
+ cpu_time = 0;
+ }
+ continue;
+ }
+ if (xp.parse_double("final_elapsed_time", elapsed_time)) {
+ if (!boinc_is_finite(elapsed_time)) {
+ elapsed_time = 0;
+ }
+ continue;
+ }
+ if (xp.parse_double("final_peak_working_set_size", peak_working_set_size)) {
+ if (!boinc_is_finite(peak_working_set_size)) {
+ peak_working_set_size = 0;
+ }
+ continue;
+ }
+ if (xp.parse_double("final_peak_swap_size", peak_swap_size)) {
+ if (!boinc_is_finite(peak_swap_size)) {
+ peak_swap_size = 0;
+ }
+ continue;
+ }
+ if (xp.parse_double("final_peak_disk_usage", peak_disk_usage)) {
+ if (!boinc_is_finite(peak_disk_usage)) {
+ peak_disk_usage = 0;
+ }
+ continue;
+ }
if (xp.parse_int("exit_status", exit_status)) continue;
if (xp.parse_int("app_version_num", app_version_num)) continue;
if (xp.match_tag("file_info")) {
@@ -1217,6 +1248,11 @@ int HOST::parse(XML_PARSER& xp) {
if (xp.parse_str("p_features", p_features, sizeof(p_features))) continue;
if (xp.parse_str("virtualbox_version", virtualbox_version, sizeof(virtualbox_version))) continue;
if (xp.parse_bool("p_vm_extensions_disabled", p_vm_extensions_disabled)) continue;
+ if (xp.match_tag("opencl_cpu_prop")) {
+ int retval = opencl_cpu_prop[num_opencl_cpu_platforms].parse(xp);
+ if (!retval) num_opencl_cpu_platforms++;
+ continue;
+ }
// parse deprecated fields to avoid error messages
//
@@ -1231,7 +1267,7 @@ int HOST::parse(XML_PARSER& xp) {
if (xp.parse_string("accelerators", stemp)) continue;
#if 1
- // not sure where these fields belong in the above categories
+ // deprecated items
//
if (xp.parse_string("cpu_caps", stemp)) continue;
if (xp.parse_string("cache_l1", stemp)) continue;
@@ -1338,6 +1374,7 @@ void GLOBAL_PREFS::defaults() {
void GUI_URLS::init() {
text = 0;
read_file_malloc(config.project_path("gui_urls.xml"), text);
+ if (text) text = lf_terminate(text);
}
void GUI_URLS::get_gui_urls(USER& user, HOST& host, TEAM& team, char* buf, int len) {
@@ -1379,6 +1416,7 @@ void GUI_URLS::get_gui_urls(USER& user, HOST& host, TEAM& team, char* buf, int l
void PROJECT_FILES::init() {
text = 0;
read_file_malloc(config.project_path("project_files.xml"), text);
+ if (text) text = lf_terminate(text);
}
void get_weak_auth(USER& user, char* buf) {
@@ -1460,4 +1498,14 @@ double capped_host_fpops() {
return x;
}
+bool HOST::get_opencl_cpu_prop(const char* platform, OPENCL_CPU_PROP& ocp) {
+ for (int i=0; i<num_opencl_cpu_platforms; i++) {
+ OPENCL_CPU_PROP& p = opencl_cpu_prop[i];
+ if (strcmp(p.platform_vendor, platform)) continue;
+ ocp = p;
+ return true;
+ }
+ return false;
+}
+
const char *BOINC_RCSID_ea659117b3 = "$Id$";
diff --git a/sched/sched_types.h b/sched/sched_types.h
index 26b3541..6dee1aa 100644
--- a/sched/sched_types.h
+++ b/sched/sched_types.h
@@ -348,7 +348,7 @@ struct DISK_LIMITS {
// summary of a client's request for work, and our response to it
// Note: this is zeroed out in SCHEDULER_REPLY constructor
//
-struct WORK_REQ {
+struct WORK_REQ_BASE {
bool anonymous_platform;
// the following defined if anonymous platform
@@ -377,12 +377,12 @@ struct WORK_REQ {
bool dont_use_proc_type[NPROC_TYPES];
bool allow_non_preferred_apps;
bool allow_beta_work;
- std::vector<APP_INFO> preferred_apps;
bool has_reliable_version;
// whether the host has a reliable app version
int effective_ncpus;
+ // # of usable CPUs on host, taking prefs into account
int effective_ngpus;
// 6.7+ clients send separate requests for different resource types:
@@ -394,15 +394,9 @@ struct WORK_REQ {
inline bool need_proc_type(int t) {
return (req_secs[t]>0) || (req_instances[t]>0);
}
- inline void clear_cpu_req() {
- req_secs[PROC_TYPE_CPU] = 0;
- req_instances[PROC_TYPE_CPU] = 0;
- }
- inline void clear_gpu_req() {
- for (int i=1; i<NPROC_TYPES; i++) {
- req_secs[i] = 0;
- req_instances[i] = 0;
- }
+ inline void clear_req(int proc_type) {
+ req_secs[proc_type] = 0;
+ req_instances[proc_type] = 0;
}
// older clients send send a single number, the requested duration of jobs
@@ -415,7 +409,8 @@ struct WORK_REQ {
double disk_available;
double ram, usable_ram;
- double running_frac;
+ double cpu_available_frac;
+ double gpu_available_frac;
int njobs_sent;
// The following keep track of the "easiest" job that was rejected
@@ -447,11 +442,6 @@ struct WORK_REQ {
RESOURCE speed;
RESOURCE bandwidth;
- std::vector<USER_MESSAGE> no_work_messages;
- std::vector<BEST_APP_VERSION*> best_app_versions;
- std::vector<DB_HOST_APP_VERSION> host_app_versions;
- std::vector<DB_HOST_APP_VERSION> host_app_versions_orig;
-
// various reasons for not sending jobs (used to explain why)
//
bool no_allowed_apps_available;
@@ -459,13 +449,33 @@ struct WORK_REQ {
bool hr_reject_perm;
bool outdated_client;
bool max_jobs_on_host_exceeded;
- bool max_jobs_on_host_cpu_exceeded;
- bool max_jobs_on_host_gpu_exceeded;
+ bool max_jobs_on_host_proc_type_exceeded[NPROC_TYPES];
bool no_jobs_available; // project has no work right now
int max_jobs_per_rpc;
- void add_no_work_message(const char*);
void get_job_limits();
+ bool max_jobs_exceeded() {
+ if (max_jobs_on_host_exceeded) return true;
+ for (int i=0; i<NPROC_TYPES; i++) {
+ if (max_jobs_on_host_proc_type_exceeded[i]) return true;
+ }
+ return false;
+ }
+ void clear() {
+ memset(this, 0, sizeof(WORK_REQ_BASE));
+ }
+
+};
+
+struct WORK_REQ : public WORK_REQ_BASE {
+ std::vector<APP_INFO> preferred_apps;
+ std::vector<USER_MESSAGE> no_work_messages;
+ std::vector<BEST_APP_VERSION*> best_app_versions;
+ std::vector<DB_HOST_APP_VERSION> host_app_versions;
+ std::vector<DB_HOST_APP_VERSION> host_app_versions_orig;
+
+ void add_no_work_message(const char*);
+
~WORK_REQ() {}
};
@@ -539,4 +549,5 @@ inline bool is_64b_platform(const char* name) {
return (strstr(name, "64") != NULL);
}
+extern double available_frac(BEST_APP_VERSION&);
#endif
diff --git a/sched/sched_util.cpp b/sched/sched_util.cpp
index ad98e54..309b21b 100644
--- a/sched/sched_util.cpp
+++ b/sched/sched_util.cpp
@@ -26,14 +26,14 @@
#include <sys/types.h>
#include <fcntl.h>
+#include "error_numbers.h"
#include "filesys.h"
#include "md5_file.h"
-#include "error_numbers.h"
+#include "util.h"
+#include "sched_config.h"
#include "sched_msgs.h"
#include "sched_util.h"
-#include "sched_config.h"
-#include "util.h"
#ifdef _USING_FCGI_
#include "boinc_fcgi.h"
@@ -273,17 +273,18 @@ int count_workunits(int& n, const char* query) {
return workunit.count(n, query);
}
-int count_unsent_results(int& n, int appid) {
- char buf[256];
+int count_unsent_results(int& n, int appid, int size_class) {
+ char query[1024], buf[256];
+ sprintf(query, "where server_state<=%d", RESULT_SERVER_STATE_UNSENT);
if (appid) {
- sprintf(buf, "where server_state<=%d and appid=%d ",
- RESULT_SERVER_STATE_UNSENT, appid
- );
- } else {
- sprintf(buf, "where server_state<=%d", RESULT_SERVER_STATE_UNSENT);
+ sprintf(buf, " and appid=%d", appid);
+ strcat(query, buf);
}
- return count_results(buf, n);
-
+ if (size_class >= 0) {
+ sprintf(buf, " and size_class=%d", size_class);
+ strcat(query, buf);
+ }
+ return count_results(query, n);
}
bool is_arg(const char* x, const char* y) {
@@ -299,20 +300,20 @@ bool is_arg(const char* x, const char* y) {
// to enforce limits on in-progress jobs
// for GPUs and CPUs (see handle_request.cpp)
//
-bool app_plan_uses_gpu(const char* plan_class) {
+int plan_class_to_proc_type(const char* plan_class) {
if (strstr(plan_class, "cuda")) {
- return true;
+ return PROC_TYPE_NVIDIA_GPU;
}
if (strstr(plan_class, "nvidia")) {
- return true;
+ return PROC_TYPE_NVIDIA_GPU;
}
if (strstr(plan_class, "ati")) {
- return true;
+ return PROC_TYPE_AMD_GPU;
}
if (strstr(plan_class, "intel_gpu")) {
- return true;
+ return PROC_TYPE_INTEL_GPU;
}
- return false;
+ return PROC_TYPE_CPU;
}
// Arrange that further results for this workunit
@@ -360,6 +361,13 @@ int restrict_wu_to_user(WORKUNIT& _wu, int userid) {
return retval;
}
+// return the min transition time.
+// This lets you check if the transitioner is backed up.
+//
+int min_transition_time(double& x) {
+ return boinc_db.get_double("select min(transition_time) from workunit", x);
+}
+
#ifdef GCL_SIMULATOR
void simulator_signal_handler(int signum) {
diff --git a/sched/sched_util.h b/sched/sched_util.h
index 82fcd36..28b4f0d 100644
--- a/sched/sched_util.h
+++ b/sched/sched_util.h
@@ -72,7 +72,7 @@ struct PERF_INFO {
extern int mylockf(int fd);
extern int count_workunits(int&, const char* query);
-extern int count_unsent_results(int&, int appid);
+extern int count_unsent_results(int&, int appid, int size_class=-1);
// Return a value for host_app_version.app_version_id.
// if the app version is anonymous platform,
@@ -90,10 +90,12 @@ inline int generalized_app_version_id(int avid, int appid) {
//
extern bool is_arg(const char*, const char*);
-extern bool app_plan_uses_gpu(const char* plan_class);
+extern int plan_class_to_proc_type(const char* plan_class);
extern int restrict_wu_to_user(WORKUNIT& wu, int userid);
+extern int min_transition_time(double&);
+
#ifdef GCL_SIMULATOR
extern void simulator_signal_handler(int signum);
extern void continue_simulation(const char *daemonname);
diff --git a/sched/sched_version.cpp b/sched/sched_version.cpp
index af57ccd..cd66e9e 100644
--- a/sched/sched_version.cpp
+++ b/sched/sched_version.cpp
@@ -584,8 +584,8 @@ BEST_APP_VERSION* get_app_version(
// app and resource type, fall through and find another version
//
if (config.max_jobs_in_progress.exceeded(
- app, bavp->host_usage.uses_gpu())
- ) {
+ app, bavp->host_usage.proc_type
+ )) {
if (config.debug_version_select) {
app_version_desc(*bavp, buf);
log_messages.printf(MSG_NORMAL,
@@ -742,7 +742,7 @@ BEST_APP_VERSION* get_app_version(
// skip versions for which we're at the jobs-in-progress limit
//
- if (config.max_jobs_in_progress.exceeded(app, host_usage.uses_gpu())) {
+ if (config.max_jobs_in_progress.exceeded(app, host_usage.proc_type)) {
if (config.debug_version_select) {
log_messages.printf(MSG_NORMAL,
"[version] [AV#%d] jobs in progress limit exceeded\n",
diff --git a/sched/single_job_assimilator.cpp b/sched/single_job_assimilator.cpp
index 33a86b3..f2e03569 100644
--- a/sched/single_job_assimilator.cpp
+++ b/sched/single_job_assimilator.cpp
@@ -32,9 +32,9 @@
#include "str_replace.h"
#include "sched_msgs.h"
-#include "validate_util.h"
#include "sched_config.h"
#include "sched_util.h"
+#include "validate_util.h"
using std::vector;
using std::string;
diff --git a/sched/target_batch.cpp b/sched/target_batch.cpp
index 059bc3e..03392e1 100644
--- a/sched/target_batch.cpp
+++ b/sched/target_batch.cpp
@@ -129,10 +129,8 @@ int main(int argc, char *argv[])
}
}
- char batch_str[256];
int batch;
- if (sscanf(query_str, "batch=%256s", &batch_str) == 1){
- batch = atoi(batch_str);
+ if (sscanf(query_str, "batch=%d", &batch) == 1){
printf ("Targetting batch id: %d\n\n", batch);
} else {
printf ("Bad argument format. Should be \"batch=[id]\"\n");
diff --git a/sched/transitioner.cpp b/sched/transitioner.cpp
index ca875b5..afea870 100644
--- a/sched/transitioner.cpp
+++ b/sched/transitioner.cpp
@@ -37,13 +37,14 @@
#include <sys/time.h>
#include <sys/param.h>
-#include "boinc_db.h"
-#include "util.h"
#include "backend_lib.h"
+#include "boinc_db.h"
#include "common_defs.h"
#include "error_numbers.h"
+#include "filesys.h"
#include "str_util.h"
#include "svn_version.h"
+#include "util.h"
#include "sched_config.h"
#include "credit.h"
diff --git a/sched/trickle_deadline.cpp b/sched/trickle_deadline.cpp
new file mode 100644
index 0000000..c86937b
--- /dev/null
+++ b/sched/trickle_deadline.cpp
@@ -0,0 +1,139 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// The following is a deadline trickle handler.
+// It extends the deadline of the result the app sends us.
+// This prevents duplicating the job when the original deadline is reached.
+// Note: there is no effect on the client;
+// currently there's no mechanism for sending the new deadline to the client.
+
+// trickle message format:
+//
+// <result_name>x</result_name>
+// <cpu_time>x</cpu_time>
+//
+// Required cmdline arg:
+//
+// --extension_period X add X seconds to the current deadline
+// --extension_timeframe X extend only if deadline is within the next X seconds
+//
+
+#include "util.h"
+#include "sched_msgs.h"
+#include "trickle_handler.h"
+
+double extension_period = 0;
+double extension_timeframe = 0;
+
+int handle_trickle_init(int argc, char** argv) {
+ for (int i=1; i<argc; i++) {
+ if (!strcmp(argv[i], "--extension_period")) {
+ extension_period = atof(argv[++i]);
+ } else if (!strcmp(argv[i], "--extension_timeframe")) {
+ extension_timeframe = atof(argv[++i]);
+ } else {
+ log_messages.printf(MSG_CRITICAL, "unknown arg %s\n", argv[i]);
+ return ERR_XML_PARSE;
+ }
+ }
+ if (!extension_period) {
+ log_messages.printf(MSG_CRITICAL, "missing --extension_period arg\n");
+ return ERR_NULL;
+ }
+ if (!extension_timeframe) {
+ log_messages.printf(MSG_CRITICAL, "missing --extension_timeframe arg\n");
+ return ERR_NULL;
+ }
+
+ log_messages.printf(MSG_NORMAL,
+ "extension_period: %f sec\n", extension_period
+ );
+ log_messages.printf(MSG_NORMAL,
+ "extension_timeframe: %f sec\n", extension_timeframe
+ );
+
+ return 0;
+}
+
+int handle_trickle(MSG_FROM_HOST& mfh) {
+ char task_name[256];
+ char buf[256];
+ int cpu_time = 0; // not needed but parsed to limit unexpected tag warnings
+
+ //printf("got trickle-up \n%s\n\n", mfh.xml);
+
+ MIOFILE mf;
+
+ mf.init_buf_read(mfh.xml);
+ XML_PARSER xp(&mf);
+
+ while (!xp.get_tag()) {
+ if (xp.parse_int("cpu_time", cpu_time)) break;
+ if (xp.parse_str("result_name", task_name, 256)) break;
+ log_messages.printf(MSG_NORMAL,
+ "[HOST#%u] unexpected tag: %s\n",
+ mfh.hostid, xp.parsed_tag
+ );
+ }
+ if (strlen(task_name) == 0) {
+ log_messages.printf(MSG_NORMAL,
+ "[HOST#%u] unexpected empty result_name attribute\n",
+ mfh.hostid
+ );
+ return ERR_XML_PARSE;
+ }
+
+ DB_RESULT task;
+ sprintf(buf, " where name='%s' and hostid=%u", task_name, mfh.hostid);
+ int retval = task.lookup(buf);
+ if (retval) {
+ log_messages.printf(MSG_CRITICAL,
+ "[HOST#%u] error while looking for result_name: %s\n",
+ mfh.hostid, task_name
+ );
+ return retval;
+ }
+
+ // sanity checks - customize as needed
+ //
+ if (task.report_deadline < dtime()) {
+ log_messages.printf(MSG_NORMAL,
+ "[RESULT#%u][HOST#%u] report deadline is in the past\n",
+ task.id, mfh.hostid
+ );
+ // don't do anything for now (could reactivate the result here)
+ return 0;
+ }
+ if ((task.report_deadline - extension_timeframe) > dtime()) {
+ log_messages.printf(MSG_DEBUG,
+ "[RESULT#%u][HOST#%u] report deadline is too far in the future\n",
+ task.id, mfh.hostid
+ );
+ // don't do anything
+ return 0;
+ }
+ // extend the deadline
+ //
+ task.report_deadline += extension_period;
+ retval = task.update();
+ if (retval) return retval;
+ log_messages.printf(MSG_DEBUG,
+ "[RESULT#%u][HOST#%u] report deadline extended to %d\n",
+ task.id, mfh.hostid, task.report_deadline
+ );
+ return 0;
+}
diff --git a/sched/trickle_handler.cpp b/sched/trickle_handler.cpp
index c365e48..6b76105 100644
--- a/sched/trickle_handler.cpp
+++ b/sched/trickle_handler.cpp
@@ -67,9 +67,12 @@ bool do_trickle_scan() {
}
retval = handle_trickle(mfh);
if (!retval) {
- mfh.handled = true;
- mfh.update();
+ log_messages.printf(MSG_CRITICAL,
+ "handle_trickle(): %s", boincerror(retval)
+ );
}
+ mfh.handled = true;
+ mfh.update();
found = true;
}
return found;
@@ -168,7 +171,7 @@ int main(int argc, char** argv) {
}
argv[j] = 0;
- retval = handle_trickle_init(argc, argv);
+ retval = handle_trickle_init(j, argv);
if (retval) exit(1);
log_messages.printf(MSG_NORMAL, "Starting trickle handler\n");
diff --git a/sched/validate_util.cpp b/sched/validate_util.cpp
index 9797b3f..1794f05 100644
--- a/sched/validate_util.cpp
+++ b/sched/validate_util.cpp
@@ -23,8 +23,6 @@
#include <cstring>
#include "config.h"
-
-
#include "error_numbers.h"
#include "filesys.h"
#include "parse.h"
diff --git a/sched/validator.cpp b/sched/validator.cpp
index 147f1d3..ed77393 100644
--- a/sched/validator.cpp
+++ b/sched/validator.cpp
@@ -101,9 +101,11 @@ bool credit_from_wu = false;
bool credit_from_runtime = false;
double max_runtime = 0;
bool no_credit = false;
+int g_argc;
+char **g_argv;
WORKUNIT* g_wup;
-vector<DB_APP_VERSION> app_versions;
+vector<DB_APP_VERSION_VAL> app_versions;
// cache of app_versions; the PFC statistics of these are
// updated in memory, and periodically flushed to the DB
@@ -782,14 +784,11 @@ int main(int argc, char** argv) {
} else if (is_arg(argv[i], "no_credit")) {
no_credit = true;
} else {
- fprintf(stderr,
- "Invalid option '%s'\nTry `%s --help` for more information\n",
- argv[i], argv[0]
- );
- log_messages.printf(MSG_CRITICAL, "unrecognized arg: %s\n", argv[i]);
- exit(1);
+ //log_messages.printf(MSG_CRITICAL, "unrecognized arg: %s\n", argv[i]);
}
}
+ g_argc = argc;
+ g_argv = argv;
if (app_name[0] == 0) {
log_messages.printf(MSG_CRITICAL,
diff --git a/sched/validator.h b/sched/validator.h
index 90e0187..1c4fa9e 100644
--- a/sched/validator.h
+++ b/sched/validator.h
@@ -19,11 +19,11 @@
extern double max_granted_credit;
// the --max_granted_credit cmdline arg, or 0
-extern double max_claimed_credit;
- // the --max_claimed_credit cmdline arg, or 0
-extern bool grant_claimed_credit;
- // the --grant_claimed_credit cmdline arg, or false
extern WORKUNIT* g_wup;
// A pointer to the WU currently being processed;
- // you can use this in your init_result() etc. functions
+ // you can access this in your init_result() etc. functions
+ // (which are passed RESULT but not WORKUNIT)
+
+extern int g_argc;
+extern char** g_argv;
diff --git a/sched/wu_check.cpp b/sched/wu_check.cpp
index 7de20fe..07a32d9 100644
--- a/sched/wu_check.cpp
+++ b/sched/wu_check.cpp
@@ -33,6 +33,7 @@
#include "svn_version.h"
#include "error_numbers.h"
+#include "filesys.h"
#include "parse.h"
#include "util.h"
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 47bf81d..1b9817a 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -5,7 +5,13 @@ scheddir = $(prefix)/lib/boinc-server-maker/sched
toolsdir = $(prefix)/lib/boinc-server-maker/tools
toolbindir = $(prefix)/lib/boinc-server-maker/tools
-toolbin_PROGRAMS = create_work sign_executable dir_hier_path dir_hier_move cancel_jobs
+toolbin_PROGRAMS = \
+ cancel_jobs \
+ create_work \
+ dir_hier_move \
+ dir_hier_path \
+ remote_submit_test \
+ sign_executable
dist_toolbin_SCRIPTS = \
boinc_submit \
@@ -31,7 +37,9 @@ dist_tools_SCRIPTS = \
manage_privileges \
run_in_ops \
stage_file \
- watch_tcp \
+ watch_tcp
+
+dist_tools_DATA = \
project.xml
AM_CXXFLAGS += $(MYSQL_CFLAGS)
@@ -51,3 +59,6 @@ dir_hier_move_LDADD = $(SERVERLIBS)
sign_executable_SOURCES = sign_executable.cpp
sign_executable_LDADD = $(SERVERLIBS)
+
+remote_submit_test_SOURCES = remote_submit_test.cpp ../lib/remote_submit.cpp
+remote_submit_test_LDADD = $(SERVERLIBS) -lcurl
diff --git a/tools/backend_lib.cpp b/tools/backend_lib.cpp
index 2ccf99a..562fdc9 100644
--- a/tools/backend_lib.cpp
+++ b/tools/backend_lib.cpp
@@ -34,15 +34,15 @@
#include "boinc_db.h"
+#include "common_defs.h"
#include "crypt.h"
#include "error_numbers.h"
+#include "filesys.h"
#include "md5_file.h"
#include "parse.h"
-#include "str_util.h"
-#include "str_replace.h"
-#include "common_defs.h"
-#include "filesys.h"
#include "sched_util.h"
+#include "str_replace.h"
+#include "str_util.h"
#include "util.h"
#include "process_input_template.h"
@@ -231,7 +231,37 @@ int create_work(
int ninfiles,
SCHED_CONFIG& config_loc,
const char* command_line,
- const char* additional_xml
+ const char* additional_xml,
+ char* query_string
+) {
+ vector<INFILE_DESC> infile_specs(ninfiles);
+ for (int i=0; i<ninfiles; i++) {
+ infile_specs[i].is_remote = false;
+ strcpy(infile_specs[i].name, infiles[i]);
+ }
+ return create_work2(
+ wu,
+ _wu_template,
+ result_template_filename,
+ result_template_filepath,
+ infile_specs,
+ config_loc,
+ command_line,
+ additional_xml,
+ query_string
+ );
+}
+
+int create_work2(
+ DB_WORKUNIT& wu,
+ const char* _wu_template,
+ const char* result_template_filename,
+ const char* result_template_filepath,
+ vector<INFILE_DESC> &infiles,
+ SCHED_CONFIG& config_loc,
+ const char* command_line,
+ const char* additional_xml,
+ char* query_string
) {
int retval;
char _result_template[BLOB_SIZE];
@@ -248,7 +278,7 @@ int create_work(
safe_strcpy(wu_template, _wu_template);
wu.create_time = time(0);
retval = process_input_template(
- wu, wu_template, infiles, ninfiles, config_loc, command_line, additional_xml
+ wu, wu_template, infiles, config_loc, command_line, additional_xml
);
if (retval) {
fprintf(stderr, "process_input_template(): %s\n", boincerror(retval));
@@ -321,7 +351,9 @@ int create_work(
} else {
wu.transition_time = time(0);
}
- if (wu.id) {
+ if (query_string) {
+ wu.db_print_values(query_string);
+ } else if (wu.id) {
retval = wu.update();
if (retval) {
fprintf(stderr,
diff --git a/tools/backend_lib.h b/tools/backend_lib.h
index e90f156..f57d6b9 100644
--- a/tools/backend_lib.h
+++ b/tools/backend_lib.h
@@ -24,6 +24,22 @@
#include "sched_config.h"
#include "boinc_db.h"
+// describes an input file, possibly remote
+//
+struct INFILE_DESC {
+ bool is_remote;
+
+ // the following defined if remote (physical name is jf_MD5)
+ //
+ double nbytes;
+ char md5[64];
+ char url[1024]; // make this a vector to support multiple URLs
+
+ // the following defined if not remote
+ //
+ char name[1024]; // physical name
+};
+
extern int add_signatures(char*, R_RSA_PRIVATE_KEY&);
extern int remove_signatures(char*);
@@ -68,7 +84,20 @@ extern int create_work(
int ninfiles,
SCHED_CONFIG&,
const char* command_line = NULL,
- const char* additional_xml = NULL
+ const char* additional_xml = NULL,
+ char* query_string = 0
+);
+
+extern int create_work2(
+ DB_WORKUNIT& wu,
+ const char* wu_template,
+ const char* result_template_filename,
+ const char* result_template_filepath,
+ vector<INFILE_DESC>&,
+ SCHED_CONFIG&,
+ const char* command_line = NULL,
+ const char* additional_xml = NULL,
+ char* query_string = 0
);
extern int stage_file(const char*, bool);
diff --git a/tools/compare_pot b/tools/compare_pot
new file mode 100755
index 0000000..9146c41
--- /dev/null
+++ b/tools/compare_pot
@@ -0,0 +1,38 @@
+#! /usr/bin/env php
+<?php
+
+// compare_pot file1 file2 [--email email_addr ...]
+//
+// compare two .pot files, ignoring comments and creation time.
+// If they differ, send email to the given addresses
+
+function strip_comments($x) {
+ $y = "";
+ foreach ($x as $l) {
+ if (substr($l, 0, 1) == '#') continue;
+ if (strstr($l, "POT-Creation-Date")) continue;
+ $y .= $l;
+ }
+ return $y;
+}
+
+function pot_same($f1, $f2) {
+ $c1 = strip_comments(file($f1));
+ $c2 = strip_comments(file($f2));
+ return ($c1 == $c2);
+}
+
+if ($argc < 3) die("Usage\n");
+if (pot_same($argv[1], $argv[2])) {
+ echo "files match\n";
+} else {
+ echo "files don't match\n";
+ for ($i=3; $i<$argc; $i++) {
+ mail($argv[$i],
+ $argv[1]." updated",
+ $argv[1]." was updated. Please review, copy to boinc/locale/templates, and commit"
+ );
+ }
+}
+
+?>
diff --git a/tools/create_work.cpp b/tools/create_work.cpp
index 4e27bdf..fc3a127 100644
--- a/tools/create_work.cpp
+++ b/tools/create_work.cpp
@@ -1,6 +1,6 @@
// This file is part of BOINC.
// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
+// Copyright (C) 2014 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
@@ -15,11 +15,9 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-// Create a workunit.
-// Input files must be in the download dir.
-// See the docs for a description of WU and result template files
-// This program must be run in the project's root directory
-//
+// Create workunit(s).
+// see http://boinc.berkeley.edu/trac/wiki/JobSubmission
+
#include "config.h"
#include <cstdio>
@@ -30,14 +28,19 @@
#include <sys/param.h>
#include <unistd.h>
-#include "backend_lib.h"
#include "boinc_db.h"
#include "common_defs.h"
#include "crypt.h"
+#include "filesys.h"
#include "sched_config.h"
#include "str_replace.h"
+#include "str_util.h"
#include "util.h"
+#include "backend_lib.h"
+
+using std::string;
+
void usage() {
fprintf(stderr,
"usage: create_work [options] infile1 infile2 ...\n"
@@ -64,6 +67,7 @@ void usage() {
" [ --rsc_fpops_bound x ]\n"
" [ --rsc_memory_bound x ]\n"
" [ --size_class n ]\n"
+ " [ --stdin ]\n"
" [ --target_host ID ]\n"
" [ --target_nresults n ]\n"
" [ --target_team ID ]\n"
@@ -75,7 +79,7 @@ void usage() {
exit(1);
}
-bool arg(const char** argv, int i, const char* name) {
+bool arg(char** argv, int i, const char* name) {
char buf[256];
sprintf(buf, "-%s", name);
if (!strcmp(argv[i], buf)) return true;
@@ -84,139 +88,191 @@ bool arg(const char** argv, int i, const char* name) {
return false;
}
-int main(int argc, const char** argv) {
- DB_APP app;
+struct JOB_DESC {
DB_WORKUNIT wu;
- int retval;
char wu_template[BLOB_SIZE];
- char wu_template_file[256], result_template_file[256], result_template_path[MAXPATHLEN];
- const char* command_line=NULL;
- const char** infiles = NULL;
- int i, ninfiles;
+ char result_template_file[256], result_template_path[MAXPATHLEN];
+ vector <INFILE_DESC> infiles;
+ char* command_line;
+ char additional_xml[256];
+ bool assign_flag;
+ bool assign_multi;
+ int assign_id;
+ int assign_type;
+
+ JOB_DESC() {
+ wu.clear();
+ command_line = NULL;
+ assign_flag = false;
+ assign_multi = false;
+ strcpy(result_template_file, "");
+ strcpy(additional_xml, "");
+ assign_id = 0;
+ assign_type = ASSIGN_NONE;
+
+ // defaults (in case they're not in WU template)
+ //
+ wu.id = 0;
+ wu.min_quorum = 2;
+ wu.target_nresults = 2;
+ wu.max_error_results = 3;
+ wu.max_total_results = 10;
+ wu.max_success_results = 6;
+ wu.rsc_fpops_est = 3600e9;
+ wu.rsc_fpops_bound = 86400e9;
+ wu.rsc_memory_bound = 5e8;
+ wu.rsc_disk_bound = 1e9;
+ wu.rsc_bandwidth_bound = 0.0;
+ wu.delay_bound = 7*86400;
+
+ }
+ void create();
+ void parse_cmdline(int, char**);
+};
+
+// parse additional job-specific info when using --stdin
+//
+void JOB_DESC::parse_cmdline(int argc, char** argv) {
+ for (int i=0; i<argc; i++) {
+ if (arg(argv, i, (char*)"command_line")) {
+ command_line = argv[++i];
+ } else if (arg(argv, i, (char*)"wu_name")) {
+ strcpy(wu.name, argv[++i]);
+ } else if (arg(argv, i, (char*)"remote_file")) {
+ INFILE_DESC id;
+ id.is_remote = true;
+ strcpy(id.url, argv[++i]);
+ id.nbytes = atof(argv[++i]);
+ strcpy(id.md5, argv[++i]);
+ infiles.push_back(id);
+ } else {
+ if (!strncmp("-", argv[i], 1)) {
+ fprintf(stderr, "create_work: bad stdin argument '%s'\n", argv[i]);
+ exit(1);
+ }
+ INFILE_DESC id;
+ id.is_remote = false;
+ strcpy(id.name, argv[i]);
+ infiles.push_back(id);
+ }
+ }
+}
+
+int main(int argc, char** argv) {
+ DB_APP app;
+ int retval;
+ char wu_template_file[256];
+ int i;
char download_dir[256], db_name[256], db_passwd[256];
char db_user[256],db_host[256];
- char buf[256];
- char additional_xml[256];
+ char buf[4096];
+ JOB_DESC jd;
bool show_wu_name = true;
- bool assign_flag = false;
- bool assign_multi = false;
- int assign_id = 0;
- int assign_type = ASSIGN_NONE;
+ bool use_stdin = false;
strcpy(wu_template_file, "");
- strcpy(result_template_file, "");
strcpy(app.name, "");
strcpy(db_passwd, "");
- strcpy(additional_xml, "");
const char* config_dir = 0;
i = 1;
- ninfiles = 0;
- wu.clear();
-
- // defaults (in case they're not in WU template)
-
- wu.id = 0;
- wu.min_quorum = 2;
- wu.target_nresults = 2;
- wu.max_error_results = 3;
- wu.max_total_results = 10;
- wu.max_success_results = 6;
- wu.rsc_fpops_est = 3600e9;
- wu.rsc_fpops_bound = 86400e9;
- wu.rsc_memory_bound = 5e8;
- wu.rsc_disk_bound = 1e9;
- wu.rsc_bandwidth_bound = 0.0;
- wu.delay_bound = 7*86400;
while (i < argc) {
if (arg(argv, i, "appname")) {
safe_strcpy(app.name, argv[++i]);
- } else if (arg(argv, i, "batch")) {
- wu.batch = atoi(argv[++i]);
} else if (arg(argv, i, "d")) {
int dl = atoi(argv[++i]);
log_messages.set_debug_level(dl);
if (dl ==4) g_print_queries = true;
} else if (arg(argv, i, "wu_name")) {
show_wu_name = false;
- safe_strcpy(wu.name, argv[++i]);
+ safe_strcpy(jd.wu.name, argv[++i]);
} else if (arg(argv, i, "wu_template")) {
safe_strcpy(wu_template_file, argv[++i]);
} else if (arg(argv, i, "result_template")) {
- safe_strcpy(result_template_file, argv[++i]);
+ safe_strcpy(jd.result_template_file, argv[++i]);
} else if (arg(argv, i, "config_dir")) {
config_dir = argv[++i];
} else if (arg(argv, i, "batch")) {
- wu.batch = atoi(argv[++i]);
+ jd.wu.batch = atoi(argv[++i]);
} else if (arg(argv, i, "priority")) {
- wu.priority = atoi(argv[++i]);
+ jd.wu.priority = atoi(argv[++i]);
} else if (arg(argv, i, "rsc_fpops_est")) {
- wu.rsc_fpops_est = atof(argv[++i]);
+ jd.wu.rsc_fpops_est = atof(argv[++i]);
} else if (arg(argv, i, "rsc_fpops_bound")) {
- wu.rsc_fpops_bound = atof(argv[++i]);
+ jd.wu.rsc_fpops_bound = atof(argv[++i]);
} else if (arg(argv, i, "rsc_memory_bound")) {
- wu.rsc_memory_bound = atof(argv[++i]);
+ jd.wu.rsc_memory_bound = atof(argv[++i]);
} else if (arg(argv, i, "size_class")) {
- wu.size_class = atoi(argv[++i]);
+ jd.wu.size_class = atoi(argv[++i]);
} else if (arg(argv, i, "rsc_disk_bound")) {
- wu.rsc_disk_bound = atof(argv[++i]);
+ jd.wu.rsc_disk_bound = atof(argv[++i]);
} else if (arg(argv, i, "delay_bound")) {
- wu.delay_bound = atoi(argv[++i]);
+ jd.wu.delay_bound = atoi(argv[++i]);
} else if (arg(argv, i, "min_quorum")) {
- wu.min_quorum = atoi(argv[++i]);
+ jd.wu.min_quorum = atoi(argv[++i]);
} else if (arg(argv, i, "target_nresults")) {
- wu.target_nresults = atoi(argv[++i]);
+ jd.wu.target_nresults = atoi(argv[++i]);
} else if (arg(argv, i, "max_error_results")) {
- wu.max_error_results = atoi(argv[++i]);
+ jd.wu.max_error_results = atoi(argv[++i]);
} else if (arg(argv, i, "max_total_results")) {
- wu.max_total_results = atoi(argv[++i]);
+ jd.wu.max_total_results = atoi(argv[++i]);
} else if (arg(argv, i, "max_success_results")) {
- wu.max_success_results = atoi(argv[++i]);
+ jd.wu.max_success_results = atoi(argv[++i]);
} else if (arg(argv, i, "opaque")) {
- wu.opaque = atoi(argv[++i]);
+ jd.wu.opaque = atoi(argv[++i]);
} else if (arg(argv, i, "command_line")) {
- command_line= argv[++i];
+ jd.command_line= argv[++i];
} else if (arg(argv, i, "additional_xml")) {
- strcpy(additional_xml, argv[++i]);
+ strcpy(jd.additional_xml, argv[++i]);
} else if (arg(argv, i, "wu_id")) {
- wu.id = atoi(argv[++i]);
+ jd.wu.id = atoi(argv[++i]);
} else if (arg(argv, i, "broadcast")) {
- assign_multi = true;
- assign_flag = true;
- assign_type = ASSIGN_NONE;
+ jd.assign_multi = true;
+ jd.assign_flag = true;
+ jd.assign_type = ASSIGN_NONE;
} else if (arg(argv, i, "broadcast_user")) {
- assign_flag = true;
- assign_type = ASSIGN_USER;
- assign_multi = true;
- assign_id = atoi(argv[++i]);
+ jd.assign_flag = true;
+ jd.assign_type = ASSIGN_USER;
+ jd.assign_multi = true;
+ jd.assign_id = atoi(argv[++i]);
} else if (arg(argv, i, "broadcast_team")) {
- assign_flag = true;
- assign_type = ASSIGN_TEAM;
- assign_multi = true;
- assign_id = atoi(argv[++i]);
+ jd.assign_flag = true;
+ jd.assign_type = ASSIGN_TEAM;
+ jd.assign_multi = true;
+ jd.assign_id = atoi(argv[++i]);
} else if (arg(argv, i, "target_host")) {
- assign_flag = true;
- assign_type = ASSIGN_HOST;
- assign_id = atoi(argv[++i]);
+ jd.assign_flag = true;
+ jd.assign_type = ASSIGN_HOST;
+ jd.assign_id = atoi(argv[++i]);
} else if (arg(argv, i, "target_user")) {
- assign_flag = true;
- assign_type = ASSIGN_USER;
- assign_id = atoi(argv[++i]);
+ jd.assign_flag = true;
+ jd.assign_type = ASSIGN_USER;
+ jd.assign_id = atoi(argv[++i]);
} else if (arg(argv, i, "target_team")) {
- assign_flag = true;
- assign_type = ASSIGN_TEAM;
- assign_id = atoi(argv[++i]);
+ jd.assign_flag = true;
+ jd.assign_type = ASSIGN_TEAM;
+ jd.assign_id = atoi(argv[++i]);
} else if (arg(argv, i, "help")) {
usage();
exit(0);
+ } else if (arg(argv, i, "stdin")) {
+ use_stdin = true;
+ } else if (arg(argv, i, (char*)"remote_file")) {
+ INFILE_DESC id;
+ id.is_remote = true;
+ strcpy(id.url, argv[++i]);
+ id.nbytes = atof(argv[++i]);
+ strcpy(id.md5, argv[++i]);
+ jd.infiles.push_back(id);
} else {
if (!strncmp("-", argv[i], 1)) {
fprintf(stderr, "create_work: bad argument '%s'\n", argv[i]);
exit(1);
}
- infiles = argv+i;
- ninfiles = argc - i;
- break;
+ INFILE_DESC id;
+ id.is_remote = false;
+ strcpy(id.name, argv[i]);
+ jd.infiles.push_back(id);
}
i++;
}
@@ -224,14 +280,14 @@ int main(int argc, const char** argv) {
if (!strlen(app.name)) {
usage();
}
- if (!strlen(wu.name)) {
- sprintf(wu.name, "%s_%d_%f", app.name, getpid(), dtime());
+ if (!strlen(jd.wu.name)) {
+ sprintf(jd.wu.name, "%s_%d_%f", app.name, getpid(), dtime());
}
if (!strlen(wu_template_file)) {
sprintf(wu_template_file, "templates/%s_in", app.name);
}
- if (!strlen(result_template_file)) {
- sprintf(result_template_file, "templates/%s_out", app.name);
+ if (!strlen(jd.result_template_file)) {
+ sprintf(jd.result_template_file, "templates/%s_out", app.name);
}
retval = config.parse_file(config_dir);
@@ -253,6 +309,7 @@ int main(int argc, const char** argv) {
);
exit(1);
}
+ boinc_db.set_isolation_level(READ_UNCOMMITTED);
sprintf(buf, "where name='%s'", app.name);
retval = app.lookup(buf);
if (retval) {
@@ -260,7 +317,9 @@ int main(int argc, const char** argv) {
exit(1);
}
- retval = read_filename(wu_template_file, wu_template, sizeof(wu_template));
+ retval = read_filename(
+ wu_template_file, jd.wu_template, sizeof(jd.wu_template)
+ );
if (retval) {
fprintf(stderr,
"create_work: can't open input template %s\n", wu_template_file
@@ -268,17 +327,106 @@ int main(int argc, const char** argv) {
exit(1);
}
- wu.appid = app.id;
+ jd.wu.appid = app.id;
+
+ strcpy(jd.result_template_path, "./");
+ strcat(jd.result_template_path, jd.result_template_file);
+ if (use_stdin) {
+ if (jd.assign_flag) {
+ // if we're doing assignment we can't use the bulk-query method;
+ // create the jobs one at a time.
+ //
+ int _argc;
+ char* _argv[100];
+ for (int j=0; ; j++) {
+ char* p = fgets(buf, sizeof(buf), stdin);
+ if (p == NULL) break;
+ JOB_DESC jd2 = jd;
+ strcpy(jd2.wu.name, "");
+ _argc = parse_command_line(buf, _argv);
+ jd2.parse_cmdline(_argc, _argv);
+ if (!strlen(jd2.wu.name)) {
+ sprintf(jd2.wu.name, "%s_%d", jd.wu.name, j);
+ }
+ jd2.create();
+ }
+ } else {
+ string values;
+ DB_WORKUNIT wu;
+ int _argc;
+ char* _argv[100], value_buf[MAX_QUERY_LEN];
+ for (int j=0; ; j++) {
+ char* p = fgets(buf, sizeof(buf), stdin);
+ if (p == NULL) break;
+ JOB_DESC jd2 = jd;
+ strcpy(jd2.wu.name, "");
+ _argc = parse_command_line(buf, _argv);
+ jd2.parse_cmdline(_argc, _argv);
+ if (!strlen(jd2.wu.name)) {
+ sprintf(jd2.wu.name, "%s_%d", jd.wu.name, j);
+ }
+ retval = create_work2(
+ jd2.wu,
+ jd2.wu_template,
+ jd2.result_template_file,
+ jd2.result_template_path,
+ jd2.infiles,
+ config,
+ jd2.command_line,
+ jd2.additional_xml,
+ value_buf
+ );
+ if (retval) {
+ fprintf(stderr, "create_work() failed: %d\n", retval);
+ exit(1);
+ }
+ if (values.size()) {
+ values += ",";
+ values += value_buf;
+ } else {
+ values = value_buf;
+ }
+ // MySQL can handles queries at least 1 MB
+ //
+ int n = strlen(value_buf);
+ if (values.size() + 2*n > 1000000) {
+ retval = wu.insert_batch(values);
+ if (retval) {
+ fprintf(stderr,
+ "wu.insert_batch() failed: %d\n", retval
+ );
+ exit(1);
+ }
+ values.clear();
+ }
+ }
+ if (values.size()) {
+ retval = wu.insert_batch(values);
+ if (retval) {
+ fprintf(stderr,
+ "wu.insert_batch() failed: %d\n", retval
+ );
+ exit(1);
+ }
+ }
+ }
+ } else {
+ jd.create();
+ if (show_wu_name) {
+ printf("workunit name: %s\n", jd.wu.name);
+ }
+ }
+ boinc_db.close();
+}
- strcpy(result_template_path, "./");
- strcat(result_template_path, result_template_file);
- retval = create_work(
+void JOB_DESC::create() {
+ char buf[256];
+ int retval = create_work2(
wu,
wu_template,
result_template_file,
result_template_path,
- const_cast<const char **>(infiles),
- ninfiles,
+ infiles,
config,
command_line,
additional_xml
@@ -286,10 +434,6 @@ int main(int argc, const char** argv) {
if (retval) {
fprintf(stderr, "create_work: %s\n", boincerror(retval));
exit(1);
- } else {
- if (show_wu_name) {
- printf("workunit name: %s\n", wu.name);
- }
}
if (assign_flag) {
DB_ASSIGNMENT assignment;
@@ -315,7 +459,6 @@ int main(int argc, const char** argv) {
exit(1);
}
}
- boinc_db.close();
}
const char *BOINC_RCSID_3865dbbf46 = "$Id$";
diff --git a/tools/dir_hier_move.cpp b/tools/dir_hier_move.cpp
index 334d16d..046be20 100644
--- a/tools/dir_hier_move.cpp
+++ b/tools/dir_hier_move.cpp
@@ -28,8 +28,8 @@
#include "error_numbers.h"
#include "filesys.h"
-#include "util.h"
#include "sched_util.h"
+#include "util.h"
const char *usage =
"\nUsage: dir_hier_move <src_dir> <dst_dir> <fanout>\n"
diff --git a/tools/dir_hier_path.cpp b/tools/dir_hier_path.cpp
index 30d4d30..2132f98 100644
--- a/tools/dir_hier_path.cpp
+++ b/tools/dir_hier_path.cpp
@@ -25,11 +25,12 @@
#include <cstdio>
#include <sys/param.h>
+#include "filesys.h"
+#include "str_util.h"
#include "util.h"
+
#include "sched_config.h"
#include "sched_util.h"
-#include "str_util.h"
-
const char *usage =
"\nUsage: dir_hier_path <filename>\n"
diff --git a/tools/make_project b/tools/make_project
index 99449ed..357f7ea 100755
--- a/tools/make_project
+++ b/tools/make_project
@@ -242,19 +242,19 @@ t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
t.output = 'db_dump.out'
t.cmd = 'db_dump -d 2 --dump_spec ../db_dump_spec.xml'
-t.disabled = 1
+t.disabled = 0
t = project.config.tasks.make_node_and_append("task")
t.period = '1 days'
t.output = 'update_uotd.out'
t.cmd = 'run_in_ops ./update_uotd.php'
-t.disabled = 1
+t.disabled = 0
t = project.config.tasks.make_node_and_append("task")
t.period = '1 hour'
t.output = 'update_forum_activities.out'
t.cmd = 'run_in_ops ./update_forum_activities.php'
-t.disabled = 1
+t.disabled = 0
t = project.config.tasks.make_node_and_append("task")
t.period = '1 days'
@@ -266,7 +266,7 @@ t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
t.output = 'update_profile_pages.out'
t.cmd = 'run_in_ops ./update_profile_pages.php'
-t.disabled = 1
+t.disabled = 0
t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
@@ -278,7 +278,13 @@ t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'
t.output = 'notify.out'
t.cmd = 'run_in_ops ./notify.php'
-t.disabled = 1
+t.disabled = 0
+
+t = project.config.tasks.make_node_and_append("task")
+t.period = '24 hours'
+t.output = 'badge_assign.out'
+t.cmd = 'run_in_ops ./badge_assign.php'
+t.disabled = 0
project.config.write()
diff --git a/tools/process_input_template.cpp b/tools/process_input_template.cpp
index 92efac9..d9f3958 100644
--- a/tools/process_input_template.cpp
+++ b/tools/process_input_template.cpp
@@ -31,6 +31,7 @@
#include "process_input_template.h"
using std::string;
+using std::vector;
// look for file named FILENAME.md5 containing md5sum and length.
// If found, and newer mod time than file,
@@ -77,9 +78,10 @@ static bool got_md5_info(
int n = fscanf(fp, "%s %lf%c", md5data, nbytes, &endline);
int c = fgetc(fp);
fclose(fp);
- if (n != 3) return false;
- if (endline !='\n') return false;
- if (c != EOF) return false;
+ if ((n != 3) || (endline !='\n') || (c != EOF)) {
+ fprintf(stderr, "bad MD5 cache file %s; remove it and stage file again\n", md5name);
+ return false;
+ }
// if this is one of our cached md5 files, but it's OLDER than the
// data file which it supposedly corresponds to, delete it.
@@ -136,22 +138,34 @@ static void write_md5_info(
static bool input_file_found[1024];
+// generate a <file_info> element for workunit XML doc,
+// based on the input template and list of files
+//
+// Inputs:
+// xp: parser for input template
+// ninfiles, infiles: list of physical filenames
+//
+// Output:
+// out: the <file_info> element for the WU XML doc
+
static int process_file_info(
- XML_PARSER& xp, string& out, int ninfiles, const char** infiles,
+ XML_PARSER& xp, string& out, vector<INFILE_DESC> infiles,
SCHED_CONFIG& config_loc
) {
vector<string> urls;
- bool generated_locally = false;
+ bool gzip = false;
int retval, file_number = -1;
- double nbytes, nbytesdef = -1;
+ double nbytes, nbytesdef = -1, gzipped_nbytes;
string md5str, urlstr, tmpstr;
- char buf[BLOB_SIZE], path[MAXPATHLEN], top_download_path[MAXPATHLEN], md5[33], url[256];
+ char buf[BLOB_SIZE], path[MAXPATHLEN], top_download_path[MAXPATHLEN];
+ char gzip_path[MAXPATHLEN];
+ char md5[33], url[256], gzipped_url[256], buf2[256];
out += "<file_info>\n";
while (!xp.get_tag()) {
if (xp.parse_int("number", file_number)) {
continue;
- } else if (xp.parse_bool("generated_locally", generated_locally)) {
+ } else if (xp.parse_bool("gzip", gzip)) {
continue;
} else if (xp.parse_string("url", urlstr)) {
urls.push_back(urlstr);
@@ -160,6 +174,8 @@ static int process_file_info(
continue;
} else if (xp.parse_double("nbytes", nbytesdef)) {
continue;
+ } else if (xp.parse_double("gzipped_nbytes", gzipped_nbytes)) {
+ continue;
} else if (xp.match_tag("/file_info")) {
if (nbytesdef != -1 || md5str != "" || urlstr != "") {
if (nbytesdef == -1 || md5str == "" || urlstr == "") {
@@ -168,12 +184,16 @@ static int process_file_info(
);
return ERR_XML_PARSE;
}
+ if (gzip && !gzipped_nbytes) {
+ fprintf(stderr, "Must specify gzipped_nbytes\n");
+ return ERR_XML_PARSE;
+ }
}
if (file_number < 0) {
fprintf(stderr, "No file number found\n");
return ERR_XML_PARSE;
}
- if (file_number >= ninfiles) {
+ if (file_number >= (int)infiles.size()) {
fprintf(stderr,
"Too few input files given; need at least %d\n",
file_number+1
@@ -187,18 +207,54 @@ static int process_file_info(
return ERR_XML_PARSE;
}
input_file_found[file_number] = true;
- if (generated_locally) {
+ INFILE_DESC& infile = infiles[file_number];
+
+ if (nbytesdef > 0) {
+ // here if the file was specified in the input template;
+ // i.e it's already staged, possibly remotely
+ //
+ urlstr = "";
+ for (unsigned int i=0; i<urls.size(); i++) {
+ urlstr += " <url>" + urls.at(i) + string(infile.name) + "</url>\n";
+ if (gzip) {
+ urlstr += " <gzipped_url>" + urls.at(i) + string(infile.name) + ".gz</gzipped_url>\n";
+ }
+ }
sprintf(buf,
" <name>%s</name>\n"
- " <generated_locally/>\n"
+ "%s"
+ " <md5_cksum>%s</md5_cksum>\n"
+ " <nbytes>%.0f</nbytes>\n",
+ infile.name,
+ urlstr.c_str(),
+ md5str.c_str(),
+ nbytesdef
+ );
+ if (gzip) {
+ sprintf(buf2, " <gzipped_nbytes>%.0f</gzipped_nbytes>\n",
+ gzipped_nbytes
+ );
+ strcat(buf, buf2);
+ }
+ strcat(buf, "</file_info>\n");
+ } else if (infile.is_remote) {
+ sprintf(buf,
+ " <name>jf_%s</name>\n"
+ " <url>%s</url>\n"
+ " <md5_cksum>%s</md5_cksum>\n"
+ " <nbytes>%.0f</nbytes>\n"
"</file_info>\n",
- infiles[file_number]
+ infile.md5,
+ infile.url,
+ infile.md5,
+ infile.nbytes
);
- } else if (nbytesdef == -1) {
- // here if nybtes was not supplied; stage the file
+ } else {
+ // here if file is local; we need to find its size and MD5;
+ // stage the file if needed
//
dir_hier_path(
- infiles[file_number], config_loc.download_dir,
+ infile.name, config_loc.download_dir,
config_loc.uldl_dir_fanout, path, true
);
@@ -207,8 +263,7 @@ static int process_file_info(
//
if (!boinc_file_exists(path)) {
sprintf(top_download_path,
- "%s/%s",config_loc.download_dir,
- infiles[file_number]
+ "%s/%s",config_loc.download_dir, infile.name
);
boinc_copy(top_download_path, path);
}
@@ -227,43 +282,48 @@ static int process_file_info(
}
dir_hier_url(
- infiles[file_number], config_loc.download_url,
+ infile.name, config_loc.download_url,
config_loc.uldl_dir_fanout, url
);
+
+ if (gzip) {
+ sprintf(gzip_path, "%s.gz", path);
+ retval = file_size(gzip_path, gzipped_nbytes);
+ if (retval) {
+ fprintf(stderr,
+ "process_input_template: missing gzip file %s\n",
+ gzip_path
+ );
+ return ERR_FILE_MISSING;
+ }
+ sprintf(gzipped_url,
+ " <gzipped_url>%s.gz</gzipped_url>\n"
+ " <gzipped_nbytes>%.0f</gzipped_nbytes>\n",
+ url, gzipped_nbytes
+ );
+ } else {
+ strcpy(gzipped_url, "");
+ }
+
sprintf(buf,
" <name>%s</name>\n"
" <url>%s</url>\n"
+ "%s"
" <md5_cksum>%s</md5_cksum>\n"
" <nbytes>%.0f</nbytes>\n"
"</file_info>\n",
- infiles[file_number],
+ infile.name,
url,
+ gzipped_url,
md5,
nbytes
);
- } else {
- // here if nbytes etc. was supplied,
- // i.e the file is already staged, possibly remotely
- //
- urlstr = "";
- for (unsigned int i=0; i<urls.size(); i++) {
- urlstr += " <url>" + urls.at(i) + string(infiles[file_number]) + "</url>\n";
- }
- sprintf(buf,
- " <name>%s</name>\n"
- "%s"
- " <md5_cksum>%s</md5_cksum>\n"
- " <nbytes>%.0f</nbytes>\n"
- "</file_info>\n",
- infiles[file_number],
- urlstr.c_str(),
- md5str.c_str(),
- nbytesdef
- );
}
out += buf;
break;
} else {
+ // copy any other elements from input template to XML doc
+ //
retval = xp.copy_element(tmpstr);
if (retval) return retval;
out += tmpstr;
@@ -275,7 +335,7 @@ static int process_file_info(
static int process_workunit(
XML_PARSER& xp, WORKUNIT& wu, string& out,
- const char** infiles,
+ vector<INFILE_DESC> &infiles,
const char* command_line,
const char* additional_xml
) {
@@ -304,9 +364,16 @@ static int process_workunit(
bool found_file_number = false, found_open_name = false;
while (!xp.get_tag()) {
if (xp.parse_int("file_number", file_number)) {
- sprintf(buf, " <file_name>%s</file_name>\n",
- infiles[file_number]
- );
+ INFILE_DESC& id = infiles[file_number];
+ if (id.is_remote) {
+ sprintf(buf, " <file_name>jf_%s</file_name>\n",
+ infiles[file_number].md5
+ );
+ } else {
+ sprintf(buf, " <file_name>%s</file_name>\n",
+ infiles[file_number].name
+ );
+ }
out += buf;
found_file_number = true;
continue;
@@ -338,7 +405,7 @@ static int process_workunit(
}
} else if (xp.parse_string("command_line", cmdline)) {
if (command_line) {
- fprintf(stderr, "Can't specify command line twice");
+ fprintf(stderr, "Can't specify command line twice\n");
return ERR_XML_PARSE;
}
out += "<command_line>\n";
@@ -387,8 +454,7 @@ static int process_workunit(
int process_input_template(
WORKUNIT& wu,
char* tmplate,
- const char** infiles,
- int ninfiles,
+ vector<INFILE_DESC> &infiles,
SCHED_CONFIG& config_loc,
const char* command_line,
const char* additional_xml
@@ -411,7 +477,7 @@ int process_input_template(
if (xp.match_tag("input_template")) continue;
if (xp.match_tag("/input_template")) continue;
if (xp.match_tag("file_info")) {
- retval = process_file_info(xp, out, ninfiles, infiles, config_loc);
+ retval = process_file_info(xp, out, infiles, config_loc);
if (retval) return retval;
nfiles_parsed++;
} else if (xp.match_tag("workunit")) {
@@ -426,10 +492,10 @@ int process_input_template(
fprintf(stderr, "process_input_template: bad WU template - no <workunit>\n");
return ERR_XML_PARSE;
}
- if (nfiles_parsed != ninfiles) {
+ if (nfiles_parsed != (int)infiles.size()) {
fprintf(stderr,
"process_input_template: %d input files listed, but template has %d\n",
- ninfiles, nfiles_parsed
+ (int)infiles.size(), nfiles_parsed
);
return ERR_XML_PARSE;
}
diff --git a/tools/process_input_template.h b/tools/process_input_template.h
index 61ae24b..a9bb377 100644
--- a/tools/process_input_template.h
+++ b/tools/process_input_template.h
@@ -18,14 +18,16 @@
#ifndef _PROCESS_INPUT_TEMPLATE_
#define _PROCESS_INPUT_TEMPLATE_
+#include <vector>
+
#include "boinc_db.h"
#include "sched_config.h"
+#include "backend_lib.h"
extern int process_input_template(
WORKUNIT& wu,
char* tmplate,
- const char** infiles,
- int ninfiles,
+ std::vector<INFILE_DESC> &infiles,
SCHED_CONFIG& config_loc,
const char* command_line,
const char* additional_xml
diff --git a/tools/process_result_template.cpp b/tools/process_result_template.cpp
index b292b7d..dd2f801 100644
--- a/tools/process_result_template.cpp
+++ b/tools/process_result_template.cpp
@@ -37,7 +37,7 @@
// Add a signature at the end of every <file_info> element,
//
int add_signatures(char* xml, R_RSA_PRIVATE_KEY& key) {
- char* p = xml, *q1, *q2, buf[BLOB_SIZE], buf2[BLOB_SIZE];;
+ char* p = xml, *q1, *q2, buf[BLOB_SIZE], buf2[BLOB_SIZE];
char signature_hex[BLOB_SIZE];
char signature_xml[BLOB_SIZE];
char signed_xml[1024];
diff --git a/tools/remote_submit b/tools/remote_submit
index 638f566..393e565 100755
--- a/tools/remote_submit
+++ b/tools/remote_submit
@@ -6,12 +6,13 @@
require_once("submit.inc");
-define("PROJECT", "http://casathome.ihep.ac.cn");
+define("PROJECT", "http://casathome.ihep.ac.cn/");
define("APP_NAME", "uppercase");
+define("LOCAL_DIR", "");
function usage() {
global $argv;
- die("
+ echo "
Usage:
$argv[0] submit sequence_file (submit 1 job, print batch ID)
$argv[0] query batch_id (get the status of a specific batch)
@@ -20,11 +21,12 @@ $argv[0] query all (get the status of all batches)
$argv[0] get_output batch_id (show URL of output file)
$argv[0] abort batch_id (abort a batch)
$argv[0] retire batch_id (retire a batch)
-\n");
+";
+ exit(1);
}
function get_auth() {
- return trim(file_get_contents("auth"));
+ return trim(file_get_contents(LOCAL_DIR."auth"));
}
function handle_submit() {
@@ -44,6 +46,7 @@ function handle_submit() {
list($id, $errmsg) = boinc_submit_batch($req);
if ($errmsg) {
echo "Error: $errmsg\n";
+ exit(1);
} else {
echo "batch ID: $id\n";
}
@@ -97,7 +100,7 @@ function handle_query() {
list($batches, $errmsg) = boinc_query_batches($req);
if ($errmsg) {
echo "Error: $errmsg\n";
- return;
+ exit(1);
}
if ($argv[2] == 'all') {
foreach ($batches as $batch) {
@@ -142,6 +145,7 @@ function handle_abort() {
$errmsg = boinc_abort_batch($req);
if ($errmsg) {
echo "Error: $errmsg\n";
+ exit(1);
} else {
echo "Batch aborted\n";
}
@@ -156,6 +160,7 @@ function handle_retire() {
$errmsg = boinc_retire_batch($req);
if ($errmsg) {
echo "Error: $errmsg\n";
+ exit(1);
} else {
echo "Batch retired\n";
}
diff --git a/tools/remote_submit_test.cpp b/tools/remote_submit_test.cpp
new file mode 100644
index 0000000..9bf213b
--- /dev/null
+++ b/tools/remote_submit_test.cpp
@@ -0,0 +1,62 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2013 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
+
+// test program for (some) remote job submission functions
+
+#include "remote_submit.h"
+
+const char* project_url = "http://isaac.ssl.berkeley.edu/test/";
+const char* authenticator = "157f96a018b0b2f2b466e2ce3c7f54db";
+
+void test_query_batches() {
+ string error_msg;
+ vector<BATCH_STATUS> batches;
+ int retval = query_batches(
+ project_url, authenticator, batches, error_msg
+ );
+ if (retval) {
+ printf("Error: %d (%s)\n", retval, error_msg.c_str());
+ return;
+ }
+ for (unsigned int i=0; i<batches.size(); i++) {
+ BATCH_STATUS& bs = batches[i];
+ bs.print();
+ }
+}
+
+void test_query_batch() {
+ string error_msg;
+ vector<JOB_STATE> jobs;
+ int batch_id = 207;
+ const char* batch_name = "";
+ int retval = query_batch(
+ project_url, authenticator, batch_id, batch_name, jobs, error_msg
+ );
+ if (retval) {
+ printf("Error: %d (%s)\n", retval, error_msg.c_str());
+ return;
+ }
+ for (unsigned int i=0; i<jobs.size(); i++) {
+ JOB_STATE& js = jobs[i];
+ js.print();
+ }
+}
+
+int main(int, char**) {
+ //test_query_batches();
+ test_query_batch();
+}
diff --git a/tools/stage_file b/tools/stage_file
index 19bf045..a1f0410 100755
--- a/tools/stage_file
+++ b/tools/stage_file
@@ -85,12 +85,15 @@ $dl_md5_path = "$dl_path.md5";
// compute the file's MD5
//
$md5 = md5_file($path);
+$file_size = filesize($path);
// if file is already in download dir, make sure it's the same
//
if (file_exists($dl_path)) {
if (file_exists($dl_md5_path)) {
- $dl_md5 = trim(file_get_contents($dl_md5_path));
+ $x = file_get_contents($dl_md5_path);
+ $x = explode(" ", $x);
+ $dl_md5 = $x[0];
} else {
$dl_md5 = md5_file($dl_path);
}
@@ -115,7 +118,8 @@ Please use a different file name.
// make MD5 file if needed
//
if (!file_exists($dl_md5_path)) {
- file_put_contents($dl_md5_path, $md5);
+ $x = $md5." ".$file_size."\n";
+ file_put_contents($dl_md5_path, $x);
}
// make gzipped version if needed
diff --git a/tools/update_versions b/tools/update_versions
index 86a89c8..f983727 100755
--- a/tools/update_versions
+++ b/tools/update_versions
@@ -389,6 +389,7 @@ function convert_simplexml($x) {
$v->files = $fds;
$v->dont_throttle = get_bool($x, "dont_throttle");
$v->needs_network = get_bool($x, "needs_network");
+ $v->is_wrapper = get_bool($x, "is_wrapper");
$v->file_prefix = (string)$x->file_prefix;
return $v;
}
@@ -413,6 +414,7 @@ function process_version($a, $v, $p) {
$vers->files = array();
$vers->dont_throttle = false;
$vers->needs_network = false;
+ $vers->is_wrapper = false;
$vers->file_prefix = false;
}
@@ -450,6 +452,9 @@ function process_version($a, $v, $p) {
if ($vers->needs_network) {
$xml .= " <needs_network/>\n";
}
+ if ($vers->is_wrapper) {
+ $xml .= " <is_wrapper/>\n";
+ }
if ($vers->file_prefix != "") {
$xml .= " <file_prefix>$vers->file_prefix</file_prefix>\n";
}
diff --git a/xcompile/xcompile.MinGW32_on_cygwin.sh b/xcompile/xcompile.MinGW32_on_cygwin.sh
new file mode 100755
index 0000000..d74ccf1
--- /dev/null
+++ b/xcompile/xcompile.MinGW32_on_cygwin.sh
@@ -0,0 +1,200 @@
+#! /bin/sh
+case $1 in
+ --help) echo Usage:
+ echo "$0 \<target_host_triplet\> (default i686-\*-mingw32)"
+ echo " Expects to find build root in /usr/\<target_host_triplet\>/sys-root/mingw"
+ ;;
+ i686*mingw32|x86_64*mingw32)
+ export TARGET_HOST=$1
+ ;;
+esac
+for target_host in ${TARGET_HOST} i686-w64-mingw32 i686-pc-mingw32 x86_64-w64-mingw32 x86_64-pc-mingw32 none ; do
+ if test ${target_host} = none ; then
+ echo Cross compiling environment not found in /usr
+ exit 1
+ fi
+ echo Checking for cross compiling environment in /usr/${target_host}
+ if test -d /usr/${target_host}; then
+ export TARGET_HOST=${target_host}
+ break
+ fi
+done
+
+case $TARGET_HOST in
+ i686*) openssl_cross=mingw
+ ;;
+ x86_64*) openssl_cross=mingw64
+ ;;
+esac
+
+build_manager=no
+build_client=no
+build_libs=yes
+build_server=no
+
+export XCOMPILE_ROOT="/usr/${TARGET_HOST}/sys-root/mingw"
+guess=`../config.guess`
+export BUILD_HOST=`../config.sub ${guess}`
+export PATH="/usr/${TARGET_HOST}/bin:${XCOMPILE_ROOT}/bin:${PATH}"
+
+export CC=`which ${TARGET_HOST}-gcc`
+export CXX=`which ${TARGET_HOST}-g++`
+export AR=`which ${TARGET_HOST}-ar`
+export LD=`which ${TARGET_HOST}-ld`
+export RANLIB=`which ${TARGET_HOST}-ranlib`
+export WINDRES=`which ${TARGET_HOST}-windres`
+export CPPFLAGS="-D_WIN32_WINDOWS=0x0410 -DMINGW_WIN32 -I${XCOMPILE_ROOT}/include"
+export CFLAGS="${CPPFLAGS}"
+export CXXFLAGS="-gstabs -g3 -fpermissive"
+export LDFLAGS="-L/usr/${TARGET_HOST}/lib -L${XCOMPILE_ROOT}/lib"
+export CURL_CONFIG="${XCOMPILE_ROOT}/bin/curl-config"
+export WX_CONFIG_PATH="${XCOMPILE_ROOT}/bin/wx-config"
+pkgsearchpath="dummy"
+for dir in `find /usr/${TARGET_HOST} -name pkgconfig` ; do
+ pkgsearchpath="${pkgsearchpath}:${dir}"
+done
+for dir in `find /usr/lib -name pkgconfig` ; do
+ pkgsearchpath="${pkgsearchpath}:${dir}"
+done
+for dir in `find /usr/share -name pkgconfig` ; do
+ pkgsearchpath="${pkgsearchpath}:${dir}"
+done
+export PKG_CONFIG_PATH=`echo ${pkgsearchpath} | sed 's/dummy://'`
+
+if ! ( test -e ../configure && find .. -name configure -mtime -1 ) ; then
+ cd ..
+ ./_autosetup
+ cd xcompile
+fi
+
+if test $build_manager != no -o $build_libs != no ; then
+ if ! test -f ${XCOMPILE_ROOT}/lib/libjpeg.a ; then
+ jpegver=9a
+ wget http://ijg.org/files/jpegsrc.v${jpegver}.tar.gz
+ tar zxf jpegsrc.v${jpegver}.tar.gz
+ /bin/rm jpegsrc.v${jpegver}.tar.gz
+ cd jpeg-${jpegver}
+ ./configure --prefix=${XCOMPILE_ROOT}/ --disable-shared --host=$TARGET_HOST --build=$BUILD_HOST
+ make -j 4 all
+ make install
+ cd ..
+ rm -rf jpeg-${jpegver}
+ fi
+
+# if ! test -f ${XCOMPILE_ROOT}/lib/libbmp.a ; then
+# svn checkout svn://svn.code.sf.net/p/libbmp/svn/trunk libbmp
+# cd libbmp
+# sed -e 's/ gcc/'${TARGET_HOST}'-gcc/' -e 's/ g++/'${TARGET_HOST}'-g++/' -e 's/ar/'${TARGET_HOST}'-ar/' Makefile > Makefile.mingw
+# make -f Makefile.mingw libbmp.a bmp_go
+# cp bmp.h ${XCOMPILE_ROOT}/include
+# cp libbmp.a ${XCOMPILE_ROOT}/lib
+# cd ..
+# rm -rf libbmp
+# fi
+fi
+
+if test $build_client != no -o $build_manager != no -o $build_libs != no ; then
+ if ! test -f ${XCOMPILE_ROOT}/lib/libssl.a ; then
+ opensslver=1.0.1g
+ wget http://www.openssl.org/source/openssl-${opensslver}.tar.gz
+ tar zxf openssl-${opensslver}.tar.gz
+ /bin/rm openssl-${opensslver}.tar.gz
+ cd openssl-${opensslver}
+ ./Configure --prefix=${XCOMPILE_ROOT}/ ${CFLAGS} ${LDFLAGS} no-shared zlib $openssl_cross
+ make -j 4 all
+ make install
+ cd ..
+ rm -rf openssl-${opensslver}
+ fi
+fi
+
+if test $build_client != no -o $build_manager != no ; then
+ if ! test -f ${XCOMPILE_ROOT}/lib/libcurl.a ; then
+ curlver=7.36.0
+ wget http://curl.haxx.se/download/curl-${curlver}.tar.bz2
+ tar jxf curl-${curlver}.tar.bz2
+ /bin/rm curl-${curlver}.tar.bz2
+ cd curl-${curlver}
+ ./configure --prefix=${XCOMPILE_ROOT} --enable-static --disable-shared --host=$TARGET_HOST --build=$BUILD_HOST --with-zlib=${XCOMPILE_ROOT}
+ make -j 4 all
+ make install
+ cd ..
+ rm -rf curl-${curlver}
+ fi
+fi
+
+if test $build_manager != no ; then
+ if ! test -f ${XCOMPILE_ROOT}/lib/libwxbase30u.a ; then
+ z7=`which 7z`
+ if test "x${z7}" = x ; then
+ echo you must install 7z in the path in order to install wxwidgets
+ exit 1
+ fi
+ wxver=3.0.0
+ gccver=481
+ filename=wxMSW-${wxver}_gcc${gccver}TDM_Dev.7z
+ mkdir wxdist
+ cd wxdist
+ wget http://sourceforge.net/projects/wxwindows/files/3.0.0/binaries/$filename/download
+ mv download $filename
+ 7z x $filename
+ rm $filename
+ rsync lib/gcc${gccver}TDM_dll/*.a ${XCOMPILE_ROOT}/lib
+ rsync lib/gcc${gccver}TDM_dll/*.dll ${XCOMPILE_ROOT}/bin
+ filename=wxWidgets-${wxver}_headers.7z
+ wget http://sourceforge.net/projects/wxwindows/files/3.0.0/$filename/download
+ mv download $filename
+ 7z x $filename
+ rm $filename
+ rsync -va include/wx ${XCOMPILE_ROOT}/include
+ rsync -va lib/gcc${gccver}TDM_dll/mswu/wx ${XCOMPILE_ROOT}/include
+ cd ..
+ rm -rf wxdist
+ fi
+fi
+
+if test $build_manager != no -o $build_libs != no ; then
+ if ! test -f ${XCOMPILE_ROOT}/include/GL/glut.h -a -f ${XCOMPILE_ROOT}/lib/libfreeglut_static.a ; then
+ svn co http://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut freeglut
+ cd freeglut
+ mkdir build
+ cd build
+ /usr/bin/cmake -D GNU_HOST=${TARGET_HOST} \
+ -D CMAKE_TOOLCHAIN_FILE=mingw_cross_toolchain.cmake \
+ -D CMAKE_INSTALL_PREFIX=${XCOMPILE_ROOT}\
+ -D FREEGLUT_BUILD_STATIC_LIBS=ON \
+ -D FREEGLUT_BUILD_SHARED_LIBS=OFF \
+ -D FREEGLUT_BUILD_DEMOS=OFF \
+ ..
+ make -j 4 all
+ make install
+ cd ../..
+ /bin/rm -rf freeglut
+ fi
+fi
+
+enables="--enable-static --disable-shared"
+if test $build_client != no ; then
+ enables="${enables} --enable-client"
+else
+ enables="${enables} --disable-client"
+fi
+if test $build_server != no ; then
+ enables="${enables} --enable-server"
+else
+ enables="${enables} --disable-server"
+fi
+if test $build_libs != no ; then
+ enables="${enables} --enable-libraries"
+else
+ enables="${enables} --disable-libraries"
+fi
+if test $build_manager != no ; then
+ enables="${enables} --enable-manager"
+else
+ enables="${enables} --disable-manager"
+fi
+
+../configure -C --host=$TARGET_HOST --build=$BUILD_HOST ${enables} --with-libcurl=${XCOMPILE_ROOT} --with-ssl=${XCOMPILE_ROOT} --with-winsock --prefix=${XCOMPILE_ROOT}
+make -j 4 all
+exit 0
diff --git a/zip/Makefile.am b/zip/Makefile.am
index 1dba66e..0054b43 100644
--- a/zip/Makefile.am
+++ b/zip/Makefile.am
@@ -4,10 +4,15 @@
include ../Makefile.incl
-SUBDIRS = zip unzip
+SUBDIRS = zip unzip
-AM_CFLAGS += -I$(top_srcdir)/zip -I$(top_srcdir) -I$(top_srcdir)/zip/zip -I$(top_srcdir)/zip/unzip -I$(top_srcdir)/lib -DUNIX -DDLL -DUSE_ZIPMAIN -DNO_OFF_T -DNO_CRYPT -DNO_LCHOWN -DNO_LCHMOD -DIZ_PWLEN=80 -Dinflate=inflate_boinc -Ddeflate=deflate_boinc -Dget_crc_table=get_crc_table_boinc -Dlongest_match=longest_match_boinc -Dinflate_codes=inflate_codes_boinc -Dcrc32=crc32_boinc
-AM_CXXFLAGS += -I$(top_srcdir)/zip -I$(top_srcdir) -I$(top_srcdir)/zip/zip -I$(top_srcdir)/zip/unzip -I$(top_srcdir)/lib -DUNIX -DDLL -DUSE_ZIPMAIN -DNO_OFF_T -DNO_CRYPT -DNO_LCHOWN -DNO_LCHMOD -DIZ_PWLEN=80 -Dinflate=inflate_boinc -Ddeflate=deflate_boinc -Dget_crc_table=get_crc_table_boinc -Dlongest_match=longest_match_boinc -Dinflate_codes=inflate_codes_boinc -Dcrc32=crc32_boinc
+AM_CFLAGS += -I$(top_srcdir) -I$(top_srcdir)/zip/zip -I$(top_srcdir)/zip/unzip -I$(top_srcdir)/lib -DUNIX -DDLL -DUSE_ZIPMAIN -DNO_OFF_T -DNO_CRYPT -DNO_LCHOWN -DNO_LCHMOD -DIZ_PWLEN=80 -Dinflate=inflate_boinc -Ddeflate=deflate_boinc -Dget_crc_table=get_crc_table_boinc -Dlongest_match=longest_match_boinc -Dinflate_codes=inflate_codes_boinc -Dcrc32=crc32_boinc
+AM_CXXFLAGS += -I$(top_srcdir) -I$(top_srcdir)/zip/zip -I$(top_srcdir)/zip/unzip -I$(top_srcdir)/lib -DUNIX -DDLL -DUSE_ZIPMAIN -DNO_OFF_T -DNO_CRYPT -DNO_LCHOWN -DNO_LCHMOD -DIZ_PWLEN=80 -Dinflate=inflate_boinc -Ddeflate=deflate_boinc -Dget_crc_table=get_crc_table_boinc -Dlongest_match=longest_match_boinc -Dinflate_codes=inflate_codes_boinc -Dcrc32=crc32_boinc
+
+if OS_WIN32
+AM_CFLAGS += -DFORCE_WIN32_OVER_UNIX
+AM_CXXFLAGS += -DFORCE_WIN32_OVER_UNIX
+endif
if INSTALL_HEADERS
pkginclude_HEADERS = boinc_zip.h
@@ -15,34 +20,44 @@ endif
libboinc_zip_sources = \
boinc_zip.cpp \
-./unzip/api.c \
-./unzip/apihelp.c \
-./unzip/crc32.c \
-./unzip/explode.c \
-./unzip/extract.c \
-./unzip/fileio.c \
-./unzip/globals.c \
-./unzip/inflate.c \
-./unzip/list.c \
-./unzip/match.c \
-./unzip/process.c \
-./unzip/ttyio.c \
-./unzip/unix/unix.c \
-./unzip/unreduce.c \
-./unzip/unshrink.c \
-./unzip/unzip.c \
-./unzip/zipinfo.c \
-./zip/deflate.c \
-./zip/trees.c \
-./zip/util.c \
-./zip/z_fileio.c \
-./zip/z_globals.c \
-./zip/zip.c \
-./zip/zipfile.c \
-./zip/zipup.c \
-./zip/unix/z_unix.c
+ ./unzip/api.c \
+ ./unzip/apihelp.c \
+ ./unzip/crc32.c \
+ ./unzip/explode.c \
+ ./unzip/extract.c \
+ ./unzip/fileio.c \
+ ./unzip/globals.c \
+ ./unzip/inflate.c \
+ ./unzip/list.c \
+ ./unzip/match.c \
+ ./unzip/process.c \
+ ./unzip/ttyio.c \
+ ./unzip/unreduce.c \
+ ./unzip/unshrink.c \
+ ./unzip/unzip.c \
+ ./unzip/zipinfo.c \
+ ./zip/deflate.c \
+ ./zip/trees.c \
+ ./zip/util.c \
+ ./zip/z_fileio.c \
+ ./zip/z_globals.c \
+ ./zip/zip.c \
+ ./zip/zipfile.c \
+ ./zip/zipup.c
-if ENABLE_LIBRARIES
+if OS_WIN32
+libboinc_zip_sources += \
+ ./unzip/win32/nt.c \
+ ./unzip/win32/win32.c \
+ ./zip/win32/win32_boinc.c \
+ ./zip/win32/win32i64.c \
+ ./zip/win32/z_nt.c \
+ ./zip/win32/win32zip.c
+else
+libboinc_zip_sources += \
+ ./unzip/unix/unix.c \
+ ./zip/unix/z_unix.c
+endif
lib_LTLIBRARIES = libboinc_zip.la
libboinc_zip_la_SOURCES = $(libboinc_zip_sources)
@@ -58,15 +73,11 @@ LIBBOINC_ZIP_STATIC=libboinc_zip.${LIBEXT}
endif
-if BUILD_STATIC_LIBS
all_local = $(LIBBOINC_ZIP_STATIC)
-endif
-
all-local: $(all_local)
$(LIBBOINC_ZIP_STATIC): libboinc_zip.la
rm -f $(LIBBOINC_ZIP_STATIC)
$(LN) .libs/$(LIBBOINC_ZIP_STATIC) .
-endif
diff --git a/zip/aclocal.m4 b/zip/aclocal.m4
deleted file mode 100644
index 759224f..0000000
--- a/zip/aclocal.m4
+++ /dev/null
@@ -1,948 +0,0 @@
-# generated automatically by aclocal 1.8.5 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-# Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-# -*- Autoconf -*-
-# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
-# Generated from amversion.in; do not edit by hand.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION so it can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
- [AM_AUTOMAKE_VERSION([1.8.5])])
-
-# AM_AUX_DIR_EXPAND
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory. The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run. This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-# fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-# fails if $ac_aux_dir is absolute,
-# fails when called from a subdirectory in a VPATH build with
-# a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir. In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-# MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH. The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 6
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
-if $2; then
- $1_TRUE=
- $1_FALSE='#'
-else
- $1_TRUE='#'
- $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
- AC_MSG_ERROR([conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.])
-fi])])
-
-# serial 7 -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
-# Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery. Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
- [$1], CXX, [depcc="$CXX" am_compiler_list=],
- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
- [depcc="$$1" am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
- [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir conftest.dir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" conftest.dir
- cd conftest.dir
- # We will build objects and dependencies in a subdirectory because
- # it helps to detect inapplicable dependency modes. For instance
- # both Tru64's cc and ICC support -MD to output dependencies as a
- # side effect of compilation, but ICC will put the dependencies in
- # the current directory while Tru64 will put them in the object
- # directory.
- mkdir sub
-
- am_cv_$1_dependencies_compiler_type=none
- if test "$am_compiler_list" = ""; then
- am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
- fi
- for depmode in $am_compiler_list; do
- # Setup a source with many dependencies, because some compilers
- # like to wrap large dependency lists on column 80 (with \), and
- # we should not choose a depcomp mode which is confused by this.
- #
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- : > sub/conftest.c
- for i in 1 2 3 4 5 6; do
- echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
- done
- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
- case $depmode in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode=$depmode \
- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
- >/dev/null 2>conftest.err &&
- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
- # or remarks (even with -Werror). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
- # The diagnosis changed in icc 8.0:
- # icc: Command line remark: option '-MP' not supported
- if (grep 'ignoring option' conftest.err ||
- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
- am_cv_$1_dependencies_compiler_type=$depmode
- break
- fi
- fi
- done
-
- cd ..
- rm -rf conftest.dir
-else
- am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
- test "x$enable_dependency_tracking" != xno \
- && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[ --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
- am_depcomp="$ac_aux_dir/depcomp"
- AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])
-])
-
-# Generate code to set up dependency tracking. -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-#serial 2
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
- # Strip MF so we end up with the name of the file.
- mf=`echo "$mf" | sed -e 's/:.*$//'`
- # Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
- # some people rename them; so instead we look at the file content.
- # Grep'ing the first line is not enough: some people post-process
- # each Makefile.in and add a new line on top of each file to say so.
- # So let's grep whole file.
- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
- dirpart=`AS_DIRNAME("$mf")`
- else
- continue
- fi
- grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
- # Extract the definition of DEP_FILES from the Makefile without
- # running `make'.
- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
- test -z "$DEPDIR" && continue
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
- test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
- # We invoke sed twice because it is the simplest approach to
- # changing $(DEPDIR) to its actual value in the expansion.
- for file in `sed -n '
- /^DEP_FILES = .*\\\\$/ {
- s/^DEP_FILES = //
- :loop
- s/\\\\$//
- p
- n
- /\\\\$/ b loop
- p
- }
- /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
- # Make sure the directory exists.
- test -f "$dirpart/$file" && continue
- fdir=`AS_DIRNAME(["$file"])`
- AS_MKDIR_P([$dirpart/$fdir])
- # echo "creating $dirpart/$file"
- echo '# dummy' > "$dirpart/$file"
- done
-done
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
- [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake. -*- Autoconf -*-
-
-# This macro actually does too much some checks are only needed if
-# your package does certain things. But this isn't really a big deal.
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-# Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 11
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out. PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition. After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.58])dnl
-dnl Autoconf wants to disallow AM_ names. We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
- test -f $srcdir/config.status; then
- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
- if (cygpath --version) >/dev/null 2>/dev/null; then
- CYGPATH_W='cygpath -w'
- else
- CYGPATH_W=echo
- fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_MISSING_PROG(AMTAR, tar)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
- [_AM_DEPENDENCIES(CC)],
- [define([AC_PROG_CC],
- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [_AM_DEPENDENCIES(CXX)],
- [define([AC_PROG_CXX],
- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-])
-])
-
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated. The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
- case $_am_header in
- $1 | $1:* )
- break ;;
- * )
- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
- esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# -*- Autoconf -*-
-# Copyright (C) 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 1
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot. For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Add --enable-maintainer-mode option to configure.
-# From Jim Meyering
-
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
-# Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 3
-
-AC_DEFUN([AM_MAINTAINER_MODE],
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
- dnl maintainer-mode is disabled by default
- AC_ARG_ENABLE(maintainer-mode,
-[ --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer],
- USE_MAINTAINER_MODE=$enableval,
- USE_MAINTAINER_MODE=no)
- AC_MSG_RESULT([$USE_MAINTAINER_MODE])
- AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
- MAINT=$MAINTAINER_MODE_TRUE
- AC_SUBST(MAINT)dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
-# Check to see how 'make' treats includes. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 2
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
- @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
- am__include=include
- am__quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- am__include=.include
- am__quote="\""
- _am_result=BSD
- fi
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# -*- Autoconf -*-
-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 3
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
- am_missing_run="$MISSING --run "
-else
- am_missing_run=
- AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-
-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-# created by `make install' are always world readable, even if the
-# installer happens to have an overly restrictive umask (e.g. 077).
-# This was a mistake. There are at least two reasons why we must not
-# use `-m 0755':
-# - it causes special bits like SGID to be ignored,
-# - it may be too restrictive (some setups expect 775 directories).
-#
-# Do not use -m 0755 and let people choose whatever they expect by
-# setting umask.
-#
-# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-# Some implementations (such as Solaris 8's) are not thread-safe: if a
-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-# concurrently, both version can detect that a/ is missing, but only
-# one can create it and the other will error out. Consequently we
-# restrict ourselves to GNU make (using the --version option ensures
-# this.)
-AC_DEFUN([AM_PROG_MKDIR_P],
-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- # Keeping the `.' argument allows $(mkdir_p) to be used without
- # argument. Indeed, we sometimes output rules like
- # $(mkdir_p) $(somedir)
- # where $(somedir) is conditionally defined.
- # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
- # expensive solution, as it forces Make to start a sub-shell.)
- mkdir_p='mkdir -p -- .'
-else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- for d in ./-p ./--version;
- do
- test -d $d && rmdir $d
- done
- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
- if test -f "$ac_aux_dir/mkinstalldirs"; then
- mkdir_p='$(mkinstalldirs)'
- else
- mkdir_p='$(install_sh) -d'
- fi
-fi
-AC_SUBST([mkdir_p])])
-
-# Helper functions for option handling. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 2
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# ------------------------------
-# Set option NAME. Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-#
-# Check to make sure that the build environment is sane.
-#
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# serial 3
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments. Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t $srcdir/configure conftest.file`
- fi
- rm -f conftest.file
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
- test "$[2]" = conftest.file
- )
-then
- # Ok.
- :
-else
- AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# AM_PROG_INSTALL_STRIP
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# One issue with vendor `install' (even GNU) is that you can't
-# specify the program used to strip binaries. This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-if test "$cross_compiling" != no; then
- AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
diff --git a/zip/zip/unix/z_unix.c b/zip/zip/unix/z_unix.c
index f4d655d..11f2be4 100644
--- a/zip/zip/unix/z_unix.c
+++ b/zip/zip/unix/z_unix.c
@@ -757,7 +757,7 @@ void version_local()
struct utsname u;
char os_name[40];
# else
-# if defined(__NETBSD__))
+# if defined(__NETBSD__)
static ZCONST char *netbsd[] = { "_ALPHA", "", "A", "B" };
char os_name[40];
# endif /* __NETBSD__ */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-boinc/boinc.git
More information about the pkg-boinc-commits
mailing list