Skip to content
358 changes: 116 additions & 242 deletions docs/po/de.po

Large diffs are not rendered by default.

534 changes: 251 additions & 283 deletions docs/po/es.po

Large diffs are not rendered by default.

9 changes: 4 additions & 5 deletions docs/po/ka.po
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: emc-developers@lists.sourceforge.net\n"
"POT-Creation-Date: 2026-01-29 16:34+0000\n"
"PO-Revision-Date: 2026-01-02 16:42+0000\n"
"PO-Revision-Date: 2026-01-31 14:15+0000\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: none\n"
"Language: ka\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: Weblate 5.15.1\n"
"X-Generator: Weblate 5.16-dev\n"

#. vim: set syntax=asciidoc:
#. type: Attribute :lang:
Expand Down Expand Up @@ -56892,10 +56892,9 @@ msgstr ""
#. type: Index entry
#: src/getting-started/getting-linuxcnc.adoc:228
#: src/getting-started/getting-linuxcnc.adoc:235
#, fuzzy, no-wrap
#| msgid "LinuxCNC"
#, no-wrap
msgid "Updates to LinuxCNC"
msgstr "LinuxCNC"
msgstr "LinuxCNC-ის განახლებები"

#. type: Plain text
#: src/getting-started/getting-linuxcnc.adoc:235
Expand Down
31 changes: 10 additions & 21 deletions docs/po/zh_CN.po
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: emc-developers@lists.sourceforge.net\n"
"POT-Creation-Date: 2026-01-29 16:34+0000\n"
"PO-Revision-Date: 2026-01-21 23:15+0000\n"
"Last-Translator: BeginsDuang <enious@outlook.com>\n"
"PO-Revision-Date: 2026-01-31 14:15+0000\n"
"Last-Translator: Tron Lee <472734894@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
Expand Down Expand Up @@ -128178,10 +128178,9 @@ msgstr ""

#. type: Title ==
#: src/hal/intro.adoc:97
#, fuzzy, no-wrap
#| msgid "Configuration"
#, no-wrap
msgid "Communication"
msgstr "配置"
msgstr "通信"

#. type: Plain text
#: src/hal/intro.adoc:100
Expand Down Expand Up @@ -147613,10 +147612,8 @@ msgstr ""

#. type: Plain text
#: src/man/man1/halrmt.1.adoc:203
#, fuzzy
#| msgid "Start QCAD"
msgid "Start"
msgstr "启动QCAD"
msgstr "启动"

#. type: Plain text
#: src/man/man1/halrmt.1.adoc:205
Expand Down Expand Up @@ -212777,10 +212774,9 @@ msgstr ""

#. type: Title ==
#: README.adoc:22
#, fuzzy, no-wrap
#| msgid "Notes on LinuxCNC documentation:"
#, no-wrap
msgid "Notes on LinuxCNC documentation"
msgstr "关于 ‎‎LinuxCNC‎‎ 文档的说明:"
msgstr "关于 ‎‎LinuxCNC‎‎ 文档的说明"

#. type: Plain text
#: README.adoc:27
Expand Down Expand Up @@ -212852,23 +212848,16 @@ msgstr ""

#. type: Plain text
#: README.adoc:57
#, fuzzy
#| msgid ""
#| "Once exported, the arrowheads lose their relationship with the line they "
#| "are on, and need to be moved and/or rotated manually if the line is "
#| "moved. I believe that even if they were imported back into EasyCad, the "
#| "line/arrow connection would remain broken. New lines with arrowheads can "
#| "be created in Qcad with the 'leader' dimension tool."
msgid ""
"Once exported, the arrowheads lose their relationship with the line they are "
"on, and need to be moved and/or rotated manually if the line is moved. I "
"believe that even if they were imported back into EasyCad, the line/arrow "
"connection would remain broken. New lines with arrowheads can be created in "
"QCAD with the 'leader' dimension tool."
msgstr ""
"导出后,箭头将失去与所在行的关系,如果移动了线,则需要手动移动和/或旋转箭头。"
"我相信,即使将它们导入回EasyCad,线/箭头连接也会断开。可以使用“引线”尺寸工具"
"在 Qcad 中创建带有箭头的新线。 "
" 一旦导出,箭头就会失去与它们所在线条的关系,如果线条被移动,就需要手动移动"
"和/或旋转箭头。我认为,即使它们被重新导入到EasyCad中,线条/箭头的连接也会保持"
"断开状态。在QCAD中,可以使用“引线”尺寸工具创建带有箭头的新线条。"

#. type: Plain text
#: README.adoc:64
Expand Down
24 changes: 24 additions & 0 deletions src/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,30 @@ if test "x" = "x$BOOST_PYTHON_LIB"; then
DEPFOUND=false
fi

# Test for a "maybe uninitialized" in the python::boost library in
# extract<std::string> when compiled with g++ 15.2.[01] and maybe others.
# The test needs to have -O2 and -Wall enabled to expose the probem.
AC_LANG_PUSH([C++])
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$PYTHON_CPPFLAGS $BOOST_CPPFLAGS $CPPFLAGS -O2 -Wall -Werror"
AC_CACHE_CHECK(whether $CXX has a "maybe uninitialized" false positive, ax_cv_cxx_boost_maybe_uninit,
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <boost/python/extract.hpp>
std::string func(boost::python::object& o) {
return boost::python::extract<std::string>(o);
}
int main() { return 0; }
]])],
[ax_cv_cxx_boost_maybe_uninit=no],
[ax_cv_cxx_boost_maybe_uninit=yes])
]
)
CPPFLAGS="$CPPFLAGS_SAVED"
if test x$ax_cv_cxx_boost_maybe_uninit = xyes; then
CPPFLAGS="$CPPFLAGS -Wno-maybe-uninitialized"
fi
AC_LANG_POP([C++])

AC_MSG_CHECKING([whether to build documentation])
AC_ARG_ENABLE(build-documentation,
AS_HELP_STRING(
Expand Down
5 changes: 2 additions & 3 deletions src/emc/ini/emcIniFile.hh
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,9 @@ public:
return(IniFile::Find(result,
tag, section, num));
}
const char * Find(const char *tag, const char *section=NULL,
std::optional<std::string> Find(const char *tag, const char *section=NULL,
int num = 1){
return(IniFile::Find(tag, section, num)
.value_or(nullptr));
return(IniFile::Find(tag, section, num));
}

private:
Expand Down
6 changes: 3 additions & 3 deletions src/emc/ini/inijoint.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ extern value_inihal_data old_inihal_data;
static int loadJoint(int joint, EmcIniFile *jointIniFile)
{
char jointString[16];
const char *inistring;
EmcJointType jointType;
double units;
double backlash;
Expand Down Expand Up @@ -234,8 +233,9 @@ static int loadJoint(int joint, EmcIniFile *jointIniFile)

comp_file_type = 0; // default
jointIniFile->Find(&comp_file_type, "COMP_FILE_TYPE", jointString);
if (NULL != (inistring = jointIniFile->Find("COMP_FILE", jointString))) {
if (0 != emcJointLoadComp(joint, inistring, comp_file_type)) {
auto comp_file = jointIniFile->Find("COMP_FILE", jointString);
if (comp_file) {
if (0 != emcJointLoadComp(joint, comp_file->c_str(), comp_file_type)) {
return -1;
}
}
Expand Down
28 changes: 14 additions & 14 deletions src/emc/ini/initraj.cc
Original file line number Diff line number Diff line change
Expand Up @@ -109,33 +109,33 @@ static int loadTraj(EmcIniFile *trajInifile)

try{
int axismask = 0;
const char *coord = trajInifile->Find("COORDINATES", "TRAJ");
auto coord = trajInifile->Find("COORDINATES", "TRAJ");
if(coord) {
if(strchr(coord, 'x') || strchr(coord, 'X')) {
if(coord->find_first_of("xX") != std::string::npos) {
axismask |= 1;
}
if(strchr(coord, 'y') || strchr(coord, 'Y')) {
if(coord->find_first_of("yY") != std::string::npos) {
axismask |= 2;
}
if(strchr(coord, 'z') || strchr(coord, 'Z')) {
if(coord->find_first_of("zZ") != std::string::npos) {
axismask |= 4;
}
if(strchr(coord, 'a') || strchr(coord, 'A')) {
if(coord->find_first_of("aA") != std::string::npos) {
axismask |= 8;
}
if(strchr(coord, 'b') || strchr(coord, 'B')) {
if(coord->find_first_of("bB") != std::string::npos) {
axismask |= 16;
}
if(strchr(coord, 'c') || strchr(coord, 'C')) {
if(coord->find_first_of("cC") != std::string::npos) {
axismask |= 32;
}
if(strchr(coord, 'u') || strchr(coord, 'U')) {
if(coord->find_first_of("uU") != std::string::npos) {
axismask |= 64;
}
if(strchr(coord, 'v') || strchr(coord, 'V')) {
if(coord->find_first_of("vV") != std::string::npos) {
axismask |= 128;
}
if(strchr(coord, 'w') || strchr(coord, 'W')) {
if(coord->find_first_of("wW") != std::string::npos) {
axismask |= 256;
}
} else {
Expand Down Expand Up @@ -295,22 +295,22 @@ static int loadTraj(EmcIniFile *trajInifile)
return -1;
}
try{
const char *inistring;
unsigned char coordinateMark[6] = { 1, 1, 1, 0, 0, 0 };
int t;
int len;
char homes[LINELEN];
char home[LINELEN];
EmcPose homePose = { {0.0, 0.0, 0.0}, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
double d;
if (NULL != (inistring = trajInifile->Find("HOME", "TRAJ"))) {
auto inistring = trajInifile->Find("HOME", "TRAJ");
if (inistring) {
// [TRAJ]HOME is important for genhexkins.c kinetmaticsForward()
// and probably other non-identity kins that solve the forward
// kinematics with an iterative algorithm when the homePose
// is not all zeros

// found it, now interpret it according to coordinateMark[]
rtapi_strxcpy(homes, inistring);
rtapi_strxcpy(homes, inistring->c_str());
len = 0;
for (t = 0; t < 6; t++) {
if (!coordinateMark[t]) {
Expand Down Expand Up @@ -354,7 +354,7 @@ static int loadTraj(EmcIniFile *trajInifile)
} else {
// badly formatted entry
rcs_print("invalid INI file value for [TRAJ] HOME: %s\n",
inistring);
inistring->c_str());
return -1;
}
} // end of for-loop on coordinateMark[]
Expand Down
25 changes: 12 additions & 13 deletions src/emc/pythonplugin/python_plugin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,6 @@ int PythonPlugin::configure(const char *iniFilename,
const char *section)
{
IniFile inifile;
std::optional<const char*> inistring;

if (section == NULL) {
logPP(1, "no section");
Expand All @@ -360,16 +359,16 @@ int PythonPlugin::configure(const char *iniFilename,

char real_path[PATH_MAX];
char expandinistring[PATH_MAX];
if ((inistring = inifile.Find("TOPLEVEL", section))) {
if (inifile.TildeExpansion(*inistring,expandinistring,sizeof(expandinistring))) {
if (auto inistring = inifile.Find("TOPLEVEL", section)) {
if (inifile.TildeExpansion(inistring->c_str(),expandinistring,sizeof(expandinistring))) {
logPP(-1, "TildeExpansion failed '%s'", toplevel);
status = PLUGIN_BAD_PATH;
return status;
}
toplevel = strstore(expandinistring);

if ((inistring = inifile.Find("RELOAD_ON_CHANGE", section)))
reload_on_change = (atoi(*inistring) > 0);
if (auto reload_str = inifile.Find("RELOAD_ON_CHANGE", section))
reload_on_change = (atoi(reload_str->c_str()) > 0);

if (realpath(toplevel, real_path) == NULL) {
logPP(-1, "can\'t resolve path to '%s'", toplevel);
Expand All @@ -394,16 +393,16 @@ int PythonPlugin::configure(const char *iniFilename,
abs_path = strstore(real_path);
}

if ((inistring = inifile.Find("LOG_LEVEL", section)))
log_level = atoi(*inistring);
if (auto inistring = inifile.Find("LOG_LEVEL", section))
log_level = atoi(inistring->c_str());
else log_level = 0;

char pycmd[PATH_MAX + 64];
int n = 1;
int lineno;
while ((inistring = inifile.Find("PATH_PREPEND", "PYTHON",
n, &lineno))) {
if (inifile.TildeExpansion(*inistring,expandinistring,sizeof(expandinistring))) {
while (auto inistring = inifile.Find("PATH_PREPEND", "PYTHON",
n, &lineno)) {
if (inifile.TildeExpansion(inistring->c_str(),expandinistring,sizeof(expandinistring))) {
logPP(-1, "TildeExpansion failed '%s'", toplevel);
status = PLUGIN_EXCEPTION_DURING_PATH_PREPEND;
return status;
Expand All @@ -420,9 +419,9 @@ int PythonPlugin::configure(const char *iniFilename,
n++;
}
n = 1;
while ((inistring = inifile.Find("PATH_APPEND", "PYTHON",
n, &lineno))) {
if (inifile.TildeExpansion(*inistring,expandinistring,sizeof(expandinistring))) {
while (auto inistring = inifile.Find("PATH_APPEND", "PYTHON",
n, &lineno)) {
if (inifile.TildeExpansion(inistring->c_str(),expandinistring,sizeof(expandinistring))) {
logPP(-1, "TildeExpansion failed '%s'", toplevel);
status = PLUGIN_EXCEPTION_DURING_PATH_APPEND;
return status;
Expand Down
5 changes: 2 additions & 3 deletions src/emc/rs274ngc/interp_namedparams.cc
Original file line number Diff line number Diff line change
Expand Up @@ -964,7 +964,6 @@ double Interp::inicheck()
{
IniFile inifile;
const char *filename;
std::optional<const char*> inistring;
double result = -1.0;

if ((filename = getenv("INI_FILE_NAME")) == NULL) {
Expand All @@ -976,8 +975,8 @@ double Interp::inicheck()
return -1.0;
}

if ((inistring = inifile.Find("LINEAR_UNITS", "TRAJ"))) {
if (!strcmp(*inistring, "inch")) {
if (auto inistring = inifile.Find("LINEAR_UNITS", "TRAJ")) {
if (*inistring == "inch") {
result = 0.0;
} else {
result = 1.0;
Expand Down
Loading
Loading