diff --git a/include/commandLine.h b/include/commandLine.h index 8cb98f5..db865aa 100644 --- a/include/commandLine.h +++ b/include/commandLine.h @@ -394,6 +394,11 @@ struct CommandLine */ inline int lua_setOption(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setOption:\n Arguments:\n name [string],\n value\n Set option name to value.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 2) { @@ -502,6 +507,11 @@ struct CommandLine */ inline int lua_getOption(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("getOption:\n Arguments:\n name [string]\n Get the value of option name.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 1) { diff --git a/include/console.h b/include/console.h index b6382dc..40df1cb 100644 --- a/include/console.h +++ b/include/console.h @@ -106,6 +106,11 @@ int dispatchCommandLine(lua_State * lua) */ int lua_startRecord(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("startRecord:\n Arguments: none\n Start video recording.\n"); + return 0; + }; LuaExtraSpace * extraSpace = *static_cast(lua_getextraspace(lua)); if (!extraSpace->visualisationState->recording) { @@ -122,6 +127,11 @@ int lua_startRecord(lua_State * lua) */ int lua_stopRecord(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("stopRecord:\n Arguments: none\n Stop video recording.\n"); + return 0; + }; LuaExtraSpace * extraSpace = *static_cast(lua_getextraspace(lua)); if (extraSpace->visualisationState->recording) { @@ -138,6 +148,11 @@ int lua_stopRecord(lua_State * lua) */ int lua_play(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("play:\n Arguments: none\n Play the trajectory.\n"); + return 0; + }; LuaExtraSpace * extraSpace = *static_cast(lua_getextraspace(lua)); extraSpace->options->play.value = true; return 0; @@ -151,6 +166,11 @@ int lua_play(lua_State * lua) */ int lua_exit(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("exit:\n Arguments: none\n Quit sfoav.\n"); + return 0; + }; LuaExtraSpace * extraSpace = *static_cast(lua_getextraspace(lua)); *(extraSpace->exit) = true; return 0; @@ -164,6 +184,11 @@ int lua_exit(lua_State * lua) */ int lua_pause(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("pause:\n Arguments: none\n Pause the trajectory.\n"); + return 0; + }; LuaExtraSpace * extraSpace = *static_cast(lua_getextraspace(lua)); extraSpace->options->play.value = false; return 0; @@ -207,6 +232,25 @@ class Console end use(sfoav))"; runString(init); + + const char * help = R"( + function help(func) + if func == sfoav or func == nil then + for k,v in pairs(sfoav) do + v("help") + print("\n") + end + return + end + for k,v in pairs(sfoav) do + if v == func then + func("help") + print("\n") + return + end + end + end)"; + runString(help); } ~Console(){ lua_close(lua); } diff --git a/include/consoleWindow.h b/include/consoleWindow.h index 5b5ebb5..0ae4c31 100644 --- a/include/consoleWindow.h +++ b/include/consoleWindow.h @@ -73,7 +73,6 @@ This is free software, and you are welcome to redistribute it under certain cond memset(InputBuf, 0, sizeof(InputBuf)); HistoryPos = -1; - Commands.push_back("HELP"); Commands.push_back("HISTORY"); Commands.push_back("CLEAR"); AutoScroll = true; @@ -166,7 +165,8 @@ This is free software, and you are welcome to redistribute it under certain cond focussed = ImGui::IsWindowFocused(); - ImGui::TextWrapped("Enter 'HELP' for help."); + ImGui::TextWrapped("Enter 'help()' for a list of functions."); + ImGui::TextWrapped("For help with each function: 'help(zoomCamera)'."); if (ImGui::SmallButton("Clear")) { clearLog(); } @@ -260,14 +260,6 @@ This is free software, and you are welcome to redistribute it under certain cond { clearLog(); } - else if (Stricmp(command_line, "HELP") == 0) - { - addLog("Commands:"); - for (int i = 0; i < Commands.Size; i++) - { - addLog("- %s", Commands[i]); - } - } else if (Stricmp(command_line, "HISTORY") == 0) { int first = History.Size - 10; diff --git a/include/luaBindings/camera.h b/include/luaBindings/camera.h index 1afa101..5577321 100644 --- a/include/luaBindings/camera.h +++ b/include/luaBindings/camera.h @@ -11,6 +11,11 @@ */ inline int Camera::lua_cameraPosition(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("cameraPosition:\n Arguments:\n spherical [bool, optional]\n Get the position of the camera.\n By default in cartesian form.\n"); + return 0; + }; int args = lua_gettop(lua); bool spherical = false; if (args == 1) @@ -41,6 +46,11 @@ inline int Camera::lua_cameraPosition(lua_State * lua) */ inline int Camera::lua_setCameraPosition(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setCameraPosition:\n Arguments:\n x [number],\b y [number],\n z[number]\n Set the position of the camera.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 3) { @@ -68,6 +78,11 @@ inline int Camera::lua_setCameraPosition(lua_State * lua) */ inline int Camera::lua_rotateCamera(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("rotateCamera:\n Arguments:\n phi [number]\n Rotate the camera by phi radians.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 1) { @@ -93,6 +108,11 @@ inline int Camera::lua_rotateCamera(lua_State * lua) */ inline int Camera::lua_zoomCamera(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("zoomCamera:\n Arguments:\n r [number]\n Zoom the camera.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 1) { @@ -118,6 +138,11 @@ inline int Camera::lua_zoomCamera(lua_State * lua) */ inline int Camera::lua_inclineCamera(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("inclineCamera:\n Arguments:\n theta [number]\n Incline the camera by theta radians.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 1) { @@ -143,6 +168,11 @@ inline int Camera::lua_inclineCamera(lua_State * lua) */ inline int Camera::lua_setCameraFieldOfView(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setCameraFieldOfView:\n Arguments:\n fov [number]\n Set the camera's fov in degrees.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 1) { @@ -160,7 +190,7 @@ inline int Camera::lua_setCameraFieldOfView(lua_State * lua) } /** - * @brief Set the field of view. + * @brief Get the field of view. * * @remark Lua arguments are: * @param lua the Lua context. @@ -168,6 +198,11 @@ inline int Camera::lua_setCameraFieldOfView(lua_State * lua) */ inline int Camera::lua_getCameraFieldOfView(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("getCameraFieldOfView:\n Arguments: none\n Get the camera's fov in degrees.\n"); + return 0; + }; lua_pushnumber(lua, fieldOfView); return 1; } diff --git a/include/luaBindings/visualisationState/atoms.h b/include/luaBindings/visualisationState/atoms.h index 862a94f..0021d94 100644 --- a/include/luaBindings/visualisationState/atoms.h +++ b/include/luaBindings/visualisationState/atoms.h @@ -24,6 +24,11 @@ inline int VisualisationState::lua_setAtomColour(lua_State * lua) { int args = lua_gettop(lua); + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setAtomColour:\n Arguments:\n i [number]\n r [number]\n g [nummber]\n b [number]\n a [number]\n Set atom i's colour.\n"); + return 0; + }; if (args < 4 || args > 5) { const std::string msg = "setAtomColour expects an atom index and RGB or RGBA arguments.\n"; @@ -72,6 +77,11 @@ inline int VisualisationState::lua_setAtomColour(lua_State * lua) inline int VisualisationState::lua_getAtomColour(lua_State * lua) { int args = lua_gettop(lua); + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setAtomColour:\n Arguments: none\n Get atom i's colour.\n"); + return 0; + }; if (args != 1) { const std::string msg = "getAtomColour expects an atom index as argument.\n"; @@ -114,6 +124,11 @@ inline int VisualisationState::lua_getAtomColour(lua_State * lua) */ inline int VisualisationState::lua_atomCount(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("atomCount:\n Arguments: none\n Get number of atoms.\n"); + return 0; + }; lua_pushinteger(lua, atomCount); return 1; } @@ -131,6 +146,11 @@ inline int VisualisationState::lua_atomCount(lua_State * lua) inline int VisualisationState::lua_getAtomsNeighbours(lua_State * lua) { int args = lua_gettop(lua); + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setAtomColour:\n Arguments:\n i [number]\n cutoff [number]\n Get atom i's neighbours within cutoff.\n"); + return 0; + }; if (args < 2) { const std::string msg = "getAtomsNeighbours expects an atom index and cutoff distance as argument.\n"; @@ -187,6 +207,11 @@ inline int VisualisationState::lua_getAtomsNeighbours(lua_State * lua) inline int VisualisationState::lua_getAtom(lua_State * lua) { int args = lua_gettop(lua); + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("getAtom:\n Arguments: \n i [number]\n Get atom i's state.\n"); + return 0; + }; if (args != 1) { const std::string msg = "getAtom expects an atom index as argument.\n"; @@ -264,6 +289,11 @@ inline int VisualisationState::lua_getAtom(lua_State * lua) inline int VisualisationState::lua_getAtomsBonds(lua_State * lua) { int args = lua_gettop(lua); + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("getAtomsBonds:\n Arguments:\n i [number]\n Get atom i's bonds.\n"); + return 0; + }; if (args != 1) { const std::string msg = "getAtomsBonds expects an atom index as argument.\n"; diff --git a/include/luaBindings/visualisationState/bonds.h b/include/luaBindings/visualisationState/bonds.h index 462da24..b108b3d 100644 --- a/include/luaBindings/visualisationState/bonds.h +++ b/include/luaBindings/visualisationState/bonds.h @@ -12,6 +12,11 @@ */ inline int VisualisationState::lua_bond(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("bond:\n Arguments:\n i [number]\n j [number]\n Bond i and j.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 2) { @@ -56,6 +61,11 @@ inline int VisualisationState::lua_bond(lua_State * lua) */ inline int VisualisationState::lua_unbond(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("unbond:\n Arguments:\n i [number]\n j [number]\n Unbond i and j.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 2) { diff --git a/include/luaBindings/visualisationState/utils.h b/include/luaBindings/visualisationState/utils.h index e721754..037df00 100644 --- a/include/luaBindings/visualisationState/utils.h +++ b/include/luaBindings/visualisationState/utils.h @@ -11,6 +11,11 @@ */ inline int VisualisationState::lua_setText(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("setText:\n Arguments:\n message [string]\n Set the info message.\n"); + return 0; + }; int args = lua_gettop(lua); if (args != 1) { @@ -35,6 +40,11 @@ inline int VisualisationState::lua_setText(lua_State * lua) */ inline int VisualisationState::lua_getFrame(lua_State * lua) { + if (lua_gettop(lua) >= 1 && lua_isstring(lua, 1) && std::string(lua_tostring(lua, 1)) == "help") + { + lua_writestring("getFrame:\n Arguments: none\n Get the current frame number."); + return 0; + }; lua_pushinteger(lua, frame); return 1; } diff --git a/include/vendored/lua/src/lauxlib.h b/include/vendored/lua/src/lauxlib.h index 7fa1a12..cf75d26 100644 --- a/include/vendored/lua/src/lauxlib.h +++ b/include/vendored/lua/src/lauxlib.h @@ -258,7 +258,7 @@ typedef struct luaL_Stream { /* print a string */ #if !defined(lua_writestring) -#define lua_writestring(s,l) (std::cout << s) +#define lua_writestring(s) (std::cout << s) #endif /* print a newline and flush the output */ diff --git a/include/vendored/lua/src/lbaselib.cpp b/include/vendored/lua/src/lbaselib.cpp index 9b5d8c9..09ac950 100644 --- a/include/vendored/lua/src/lbaselib.cpp +++ b/include/vendored/lua/src/lbaselib.cpp @@ -27,8 +27,8 @@ static int luaB_print (lua_State *L) { size_t l; const char *s = luaL_tolstring(L, i, &l); /* convert it to string */ if (i > 1) /* not the first element? */ - lua_writestring("\t", 1); /* add a tab before it */ - lua_writestring(s, l); /* print it */ + lua_writestring("\t"); /* add a tab before it */ + lua_writestring(s); /* print it */ lua_pop(L, 1); /* pop result */ } lua_writeline();