From 496922036f8d0d644f4e220ffaefe7f45d4f4a2e Mon Sep 17 00:00:00 2001 From: bubnikv Date: Mon, 15 Apr 2019 16:14:19 +0200 Subject: [PATCH] Harmonized the application naming. --- src/libslic3r/Utils.hpp | 2 +- src/libslic3r/libslic3r_version.h.in | 3 ++- src/platform/msw/slic3r.rc.in | 8 ++++---- src/slic3r.cpp | 2 +- src/slic3r/GUI/AboutDialog.cpp | 2 +- src/slic3r/GUI/BackgroundSlicingProcess.cpp | 3 ++- src/slic3r/GUI/ConfigWizard.cpp | 11 +++++++---- src/slic3r/GUI/GUI_App.cpp | 14 ++++++-------- src/slic3r/GUI/KBShortcutsDialog.cpp | 2 +- src/slic3r/GUI/MainFrame.cpp | 2 +- src/slic3r/GUI/Preferences.cpp | 2 +- src/slic3r/GUI/SysInfoDialog.cpp | 6 +++--- src/slic3r/GUI/UpdateDialogs.cpp | 16 ++++++++-------- src/slic3r/Utils/Http.cpp | 2 +- src/slic3r/Utils/PresetUpdater.cpp | 4 ++-- version.inc | 3 ++- xs/xsp/XS.xsp | 2 +- 17 files changed, 44 insertions(+), 40 deletions(-) diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index dfd72b7a9..21ec3d307 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -88,7 +88,7 @@ std::string string_printf(const char *format, ...); extern std::string timestamp_str(); // Standard "generated by Slic3r version xxx timestamp xxx" header string, // to be placed at the top of Slic3r generated files. -inline std::string header_slic3r_generated() { return std::string("generated by " SLIC3R_FORK_NAME " " SLIC3R_VERSION " " ) + timestamp_str(); } +inline std::string header_slic3r_generated() { return std::string("generated by " SLIC3R_APP_NAME " " SLIC3R_VERSION " " ) + timestamp_str(); } // getpid platform wrapper extern unsigned get_current_pid(); diff --git a/src/libslic3r/libslic3r_version.h.in b/src/libslic3r/libslic3r_version.h.in index 2259b2302..7c4a4b294 100644 --- a/src/libslic3r/libslic3r_version.h.in +++ b/src/libslic3r/libslic3r_version.h.in @@ -1,7 +1,8 @@ #ifndef __SLIC3R_VERSION_H #define __SLIC3R_VERSION_H -#define SLIC3R_FORK_NAME "@SLIC3R_FORK_NAME@" +#define SLIC3R_APP_NAME "@SLIC3R_APP_NAME@" +#define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@" #define SLIC3R_VERSION "@SLIC3R_VERSION@" #define SLIC3R_BUILD "@SLIC3R_BUILD@" diff --git a/src/platform/msw/slic3r.rc.in b/src/platform/msw/slic3r.rc.in index 493f9f752..970683e58 100644 --- a/src/platform/msw/slic3r.rc.in +++ b/src/platform/msw/slic3r.rc.in @@ -7,12 +7,12 @@ PRODUCTVERSION @SLIC3R_RC_VERSION@ BLOCK "040904E4" { VALUE "CompanyName", "Prusa Research" - VALUE "FileDescription", "Slic3r Prusa Edition" + VALUE "FileDescription", "@SLIC3R_APP_NAME@" VALUE "FileVersion", "@SLIC3R_BUILD_ID@" - VALUE "ProductName", "Slic3r Prusa Edition" + VALUE "ProductName", "@SLIC3R_APP_NAME@" VALUE "ProductVersion", "@SLIC3R_BUILD_ID@" - VALUE "InternalName", "Slic3r Prusa Edition" - VALUE "LegalCopyright", "Copyright \251 2011-2017 Alessandro Ranelucci, \251 2016 Prusa Research" + VALUE "InternalName", "@SLIC3R_APP_NAME@" + VALUE "LegalCopyright", "Copyright \251 2011-2019 Alessandro Ranelucci, \251 2016-2019 Prusa Research" VALUE "OriginalFilename", "slic3r.exe" } } diff --git a/src/slic3r.cpp b/src/slic3r.cpp index ff87b3f6d..c3e69a189 100644 --- a/src/slic3r.cpp +++ b/src/slic3r.cpp @@ -568,7 +568,7 @@ bool CLI::setup(int argc, char **argv) void CLI::print_help(bool include_print_options, PrinterTechnology printer_technology) const { boost::nowide::cout - << "Slic3r Prusa Edition " << SLIC3R_BUILD + << SLIC3R_APP_NAME << " " << SLIC3R_BUILD #ifdef SLIC3R_GUI << " (with GUI support)" #else /* SLIC3R_GUI */ diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index af3b65530..770f25141 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -50,7 +50,7 @@ AboutDialog::AboutDialog() // title { - wxStaticText* title = new wxStaticText(this, wxID_ANY, "Slic3r Prusa Edition", wxDefaultPosition, wxDefaultSize); + wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_APP_NAME, wxDefaultPosition, wxDefaultSize); wxFont title_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); title_font.SetWeight(wxFONTWEIGHT_BOLD); title_font.SetFamily(wxFONTFAMILY_ROMAN); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index c6a73864d..e5135ef43 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -16,6 +16,7 @@ #include "libslic3r/Utils.hpp" #include "libslic3r/GCode/PostProcessor.hpp" #include "libslic3r/GCode/PreviewData.hpp" +#include "libslic3r/libslic3r.h" #include #include @@ -390,7 +391,7 @@ void BackgroundSlicingProcess::prepare_upload() // Generate a unique temp path to which the gcode/zip file is copied/exported boost::filesystem::path source_path = boost::filesystem::temp_directory_path() - / boost::filesystem::unique_path(".Slic3rPE.upload.%%%%-%%%%-%%%%-%%%%"); + / boost::filesystem::unique_path("." SLIC3R_APP_KEY ".upload.%%%%-%%%%-%%%%-%%%%"); if (m_print == m_fff_print) { m_print->set_status(95, "Running post-processing scripts"); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 449c50ad2..7da420e76 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -281,13 +281,14 @@ void ConfigWizardPage::append_spacer(int space) // Wizard pages PageWelcome::PageWelcome(ConfigWizard *parent) - : ConfigWizardPage(parent, wxString::Format(_(L("Welcome to the Slic3r %s")), ConfigWizard::name()), _(L("Welcome"))) + : ConfigWizardPage(parent, wxString::Format(_(L("Welcome to the %s %s")), SLIC3R_APP_NAME, ConfigWizard::name()), _(L("Welcome"))) , cbox_reset(nullptr) { if (wizard_p()->run_reason == ConfigWizard::RR_DATA_EMPTY) { wxString::Format(_(L("Run %s")), ConfigWizard::name()); append_text(wxString::Format( - _(L("Hello, welcome to Slic3r Prusa Edition! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")), + _(L("Hello, welcome to %s! This %s helps you with the initial configuration; just a few settings and you will be ready to print.")), + SLIC3R_APP_NAME, ConfigWizard::name()) ); } else { @@ -398,7 +399,9 @@ PageUpdate::PageUpdate(ConfigWizard *parent) auto *box_slic3r = new wxCheckBox(this, wxID_ANY, _(L("Check for application updates"))); box_slic3r->SetValue(app_config->get("version_check") == "1"); append(box_slic3r); - append_text(_(L("If enabled, Slic3r checks for new versions of Slic3r PE online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."))); + append_text(wxString::Format(_(L("If enabled, Slic3r checks for new versions of %s online. When a new version becomes available, " + "a notification is displayed at the next application startup (never during program usage). " + "This is only a notification mechanisms, no automatic installation is done.")), SLIC3R_APP_NAME)); append_spacer(VERTICAL_SPACING); @@ -420,7 +423,7 @@ PageUpdate::PageUpdate(ConfigWizard *parent) PageVendors::PageVendors(ConfigWizard *parent) : ConfigWizardPage(parent, _(L("Other Vendors")), _(L("Other Vendors"))) { - append_text(_(L("Pick another vendor supported by Slic3r PE:"))); + append_text(wxString::Format(_(L("Pick another vendor supported by %s:")), SLIC3R_APP_NAME)); auto boldfont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); boldfont.SetWeight(wxFONTWEIGHT_BOLD); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 049447e96..b529b2916 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -149,8 +149,8 @@ bool GUI_App::on_init_inner() wxCHECK_MSG(wxDirExists(resources_dir), false, wxString::Format("Resources path does not exist or is not a directory: %s", resources_dir)); - SetAppName("Slic3rPE-beta"); - SetAppDisplayName("Slic3r Prusa Edition"); + SetAppName(SLIC3R_APP_KEY "-beta"); + SetAppDisplayName(SLIC3R_APP_NAME); // Enable this to get the default Win32 COMCTRL32 behavior of static boxes. // wxSystemOptions::SetOption("msw.staticbox.optimized-paint", 0); @@ -370,7 +370,7 @@ void GUI_App::recreate_GUI() topwindow->Destroy(); } - dlg.Update(80, _(L("Loading of a current presets")) + dots); + dlg.Update(80, _(L("Loading of current presets")) + dots); m_printhost_job_queue.reset(new PrintHostJobQueue(mainframe->printhost_queue_dlg())); @@ -502,7 +502,7 @@ bool GUI_App::select_language( wxArrayString & names, m_wxLocale = new wxLocale; m_wxLocale->Init(identifiers[index]); m_wxLocale->AddCatalogLookupPathPrefix(from_u8(localization_dir())); - m_wxLocale->AddCatalog(/*GetAppName()*/"Slic3rPE"); + m_wxLocale->AddCatalog("Slic3rPE"); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. wxSetlocale(LC_NUMERIC, "C"); Preset::update_suffix_modified(); @@ -531,7 +531,7 @@ bool GUI_App::load_language() m_wxLocale = new wxLocale; m_wxLocale->Init(identifiers[i]); m_wxLocale->AddCatalogLookupPathPrefix(from_u8(localization_dir())); - m_wxLocale->AddCatalog(/*GetAppName()*/"Slic3rPE"); + m_wxLocale->AddCatalog("Slic3rPE"); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. wxSetlocale(LC_NUMERIC, "C"); Preset::update_suffix_modified(); @@ -575,9 +575,7 @@ void GUI_App::get_installed_languages(wxArrayString & names, wxArrayLong & ident if (langinfo != NULL) { auto full_file_name = dir.GetName() + wxFileName::GetPathSeparator() + - filename + wxFileName::GetPathSeparator() + - /*GetAppName()*/"Slic3rPE" + - wxT(".mo"); + filename + wxFileName::GetPathSeparator() + "Slic3rPE" + wxT(".mo"); if (wxFileExists(full_file_name)) { names.Add(langinfo->Description); diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index c7fbe8231..fb84c2d27 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -10,7 +10,7 @@ namespace Slic3r { namespace GUI { KBShortcutsDialog::KBShortcutsDialog() - : wxDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - Keyboard Shortcuts")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) + : wxDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("Keyboard Shortcuts")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index e867d2d57..223c85b6c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -483,7 +483,7 @@ void MainFrame::init_menubar() [this](wxCommandEvent&) { wxGetApp().system_info(); }); append_menu_item(helpMenu, wxID_ANY, _(L("Show &Configuration Folder")), _(L("Show user configuration folder (datadir)")), [this](wxCommandEvent&) { Slic3r::GUI::desktop_open_datadir_folder(); }); - append_menu_item(helpMenu, wxID_ANY, _(L("Report an I&ssue")), _(L("Report an issue on the Slic3r Prusa Edition")), + append_menu_item(helpMenu, wxID_ANY, _(L("Report an I&ssue")), wxString::Format(_(L("Report an issue on %s")), SLIC3R_APP_NAME), [this](wxCommandEvent&) { wxLaunchDefaultBrowser("http://github.com/prusa3d/slic3r/issues/new"); }); append_menu_item(helpMenu, wxID_ANY, _(L("&About Slic3r")), _(L("Show about dialog")), [this](wxCommandEvent&) { Slic3r::GUI::about(); }); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 8ffff1a41..8bc747db5 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -58,7 +58,7 @@ void PreferencesDialog::build() // Please keep in sync with ConfigWizard def.label = L("Check for application updates"); def.type = coBool; - def.tooltip = L("If enabled, Slic3r checks for new versions of Slic3r PE online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."); + def.tooltip = L("If enabled, Slic3r checks for new versions of " SLIC3R_APP_NAME " online. When a new version becomes available a notification is displayed at the next application startup (never during program usage). This is only a notification mechanisms, no automatic installation is done."); def.default_value = new ConfigOptionBool(app_config->get("version_check") == "1"); option = Option (def, "version_check"); m_optgroup->append_single_option_line(option); diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp index 052656974..2746c643e 100644 --- a/src/slic3r/GUI/SysInfoDialog.cpp +++ b/src/slic3r/GUI/SysInfoDialog.cpp @@ -22,7 +22,7 @@ std::string get_main_info(bool format_as_html) std::string line_end = format_as_html ? "
" : "\n"; if (!format_as_html) - out << b_start << SLIC3R_FORK_NAME << b_end << line_end; + out << b_start << SLIC3R_APP_NAME << b_end << line_end; out << b_start << "Version: " << b_end << SLIC3R_VERSION << line_end; out << b_start << "Build: " << b_end << SLIC3R_BUILD << line_end; out << line_end; @@ -41,7 +41,7 @@ std::string get_main_info(bool format_as_html) } SysInfoDialog::SysInfoDialog() - : wxDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - System Information")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) + : wxDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _(L("System Information")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { wxColour bgr_clr = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); SetBackgroundColour(bgr_clr); @@ -60,7 +60,7 @@ SysInfoDialog::SysInfoDialog() // title { - wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_FORK_NAME, wxDefaultPosition, wxDefaultSize); + wxStaticText* title = new wxStaticText(this, wxID_ANY, SLIC3R_APP_NAME, wxDefaultPosition, wxDefaultSize); wxFont title_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); title_font.SetWeight(wxFONTWEIGHT_BOLD); title_font.SetFamily(wxFONTFAMILY_ROMAN); diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index dccdf3ecd..d3638c1f5 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -27,7 +27,7 @@ static const std::string CONFIG_UPDATE_WIKI_URL("https://github.com/prusa3d/Slic // MsgUpdateSlic3r MsgUpdateSlic3r::MsgUpdateSlic3r(const Semver &ver_current, const Semver &ver_online) : - MsgDialog(nullptr, _(L("Update available")), _(L("New version of Slic3r PE is available"))), + MsgDialog(nullptr, _(L("Update available")), wxString::Format(_(L("New version of % is available")), SLIC3R_APP_NAME)), ver_current(ver_current), ver_online(ver_online) { @@ -113,17 +113,17 @@ MsgDataIncompatible::MsgDataIncompatible(const std::unordered_mapSetBitmap(create_scaled_bitmap(this, "Slic3r_192px_grayscale.png", 192)); - auto *text = new wxStaticText(this, wxID_ANY, _(L( - "This version of Slic3r PE is not compatible with currently installed configuration bundles.\n" - "This probably happened as a result of running an older Slic3r PE after using a newer one.\n\n" + auto *text = new wxStaticText(this, wxID_ANY, wxString::Format(_(L( + "This version of %s is not compatible with currently installed configuration bundles.\n" + "This probably happened as a result of running an older %s after using a newer one.\n\n" "You may either exit Slic3r and try again with a newer version, or you may re-run the initial configuration. " "Doing so will create a backup snapshot of the existing configuration before installing files compatible with this Slic3r.\n" - ))); + )), SLIC3R_APP_NAME, SLIC3R_APP_NAME)); text->Wrap(CONTENT_WIDTH * wxGetApp().em_unit()); content_sizer->Add(text); - auto *text2 = new wxStaticText(this, wxID_ANY, wxString::Format(_(L("This Slic3r PE version: %s")), SLIC3R_VERSION)); + auto *text2 = new wxStaticText(this, wxID_ANY, wxString::Format(_(L("This %s version: %s")), SLIC3R_APP_NAME, SLIC3R_VERSION)); text2->Wrap(CONTENT_WIDTH * wxGetApp().em_unit()); content_sizer->Add(text2); content_sizer->AddSpacer(VERT_SPACING); @@ -168,7 +168,7 @@ MsgDataLegacy::MsgDataLegacy() : { auto *text = new wxStaticText(this, wxID_ANY, wxString::Format( _(L( - "Slic3r PE now uses an updated configuration structure.\n\n" + "%s now uses an updated configuration structure.\n\n" "So called 'System presets' have been introduced, which hold the built-in default settings for various " "printers. These System presets cannot be modified, instead, users now may create their " @@ -178,7 +178,7 @@ MsgDataLegacy::MsgDataLegacy() : "Please proceed with the %s that follows to set up the new presets " "and to choose whether to enable automatic preset updates." )), - ConfigWizard::name() + SLIC3R_APP_NAME, ConfigWizard::name() )); text->Wrap(CONTENT_WIDTH * wxGetApp().em_unit()); content_sizer->Add(text); diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index 02bbc087e..801c5cf40 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -88,7 +88,7 @@ Http::priv::priv(const std::string &url) set_timeout_connect(DEFAULT_TIMEOUT_CONNECT); ::curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // curl makes a copy internally - ::curl_easy_setopt(curl, CURLOPT_USERAGENT, SLIC3R_FORK_NAME "/" SLIC3R_VERSION); + ::curl_easy_setopt(curl, CURLOPT_USERAGENT, SLIC3R_APP_NAME "/" SLIC3R_VERSION); ::curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &error_buffer.front()); } diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 6924f86de..1128df29c 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -208,7 +208,7 @@ void PresetUpdater::priv::sync_version() const { if (! enabled_version_check) { return; } - BOOST_LOG_TRIVIAL(info) << boost::format("Downloading Slic3rPE online version from: `%1%`") % version_check_url; + BOOST_LOG_TRIVIAL(info) << boost::format("Downloading %1% online version from: `%2%`") % SLIC3R_APP_NAME % version_check_url; Http::get(version_check_url) .size_limit(SLIC3R_VERSION_BODY_MAX) @@ -224,7 +224,7 @@ void PresetUpdater::priv::sync_version() const }) .on_complete([&](std::string body, unsigned /* http_status */) { boost::trim(body); - BOOST_LOG_TRIVIAL(info) << boost::format("Got Slic3rPE online version: `%1%`. Sending to GUI thread...") % body; + BOOST_LOG_TRIVIAL(info) << boost::format("Got %1% online version: `%2%`. Sending to GUI thread...") % SLIC3R_APP_NAME % body; wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); evt->SetString(GUI::from_u8(body)); diff --git a/version.inc b/version.inc index 6a3f00e00..cbb2d1ab0 100644 --- a/version.inc +++ b/version.inc @@ -1,7 +1,8 @@ # Included by CMakeLists, edited by the build script # (the version numbers are generated by the build script from the git current label) -set(SLIC3R_FORK_NAME "Slic3r Prusa Edition") +set(SLIC3R_APP_NAME "Slic3r Prusa Edition") +set(SLIC3R_APP_KEY "Slic3rPE") set(SLIC3R_VERSION "1.42.0-beta2") set(SLIC3R_BUILD "${SLIC3R_VERSION}+UNKNOWN") set(SLIC3R_BUILD_ID "${SLIC3R_BUILD_ID}") diff --git a/xs/xsp/XS.xsp b/xs/xsp/XS.xsp index 04969a7f9..e6f252ca8 100644 --- a/xs/xsp/XS.xsp +++ b/xs/xsp/XS.xsp @@ -32,7 +32,7 @@ DEBUG_OUT_PATH_PREFIX() SV* FORK_NAME() CODE: - RETVAL = newSVpv(SLIC3R_FORK_NAME, 0); + RETVAL = newSVpv(SLIC3R_APP_NAME, 0); OUTPUT: RETVAL void