00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <stdlib.h>
00022 #include <string.h>
00023 #include "c_compiler.h"
00024 #include "tcl.h"
00025 #include "TclCommands.h"
00026 #include "tcl_commands.h"
00027 #include "config.h"
00028 #include "utilities.h"
00029 #include "CUDAKernels.h"
00030 #include "WKFThreads.h"
00031 #include "vmd.h"
00032 #if defined(VMDCOLVARS)
00033 #include "colvarproxy_vmd.h"
00034 #endif
00035
00036
00037 class VMDApp;
00038
00039 #define SIMPLE_TCL_OPT(string,result) \
00040 if (!strcmp(argv[1], string)) { \
00041 Tcl_AppendResult(interp, result, NULL); \
00042 return TCL_OK; \
00043 }
00044
00045 static int vmdinfo_tcl(ClientData, Tcl_Interp *interp,
00046 int argc, const char *argv[]) {
00047 VMDApp *app = (VMDApp *)Tcl_GetAssocData(interp, "VMDApp", NULL);
00048
00049 if (argc == 2) {
00050 SIMPLE_TCL_OPT("version", VMDVERSION);
00051 SIMPLE_TCL_OPT("versionmsg", VERSION_MSG);
00052 SIMPLE_TCL_OPT("authors", VMD_AUTHORS);
00053 SIMPLE_TCL_OPT("arch", VMD_ARCH);
00054 SIMPLE_TCL_OPT("options", VMD_OPTIONS);
00055 SIMPLE_TCL_OPT("www", VMD_HOMEPAGE);
00056 SIMPLE_TCL_OPT("wwwhelp", VMD_HELPPAGE);
00057
00058
00059 if (!strcmp(argv[1], "compilers")) {
00060 const char *ccversion = c_compiler_std();
00061
00062 #if (__cplusplus >= 202002L)
00063 const char *cxxversion = "C++ 2020";
00064 #elif (__cplusplus >= 201703L)
00065 const char *cxxversion = "C++ 2017";
00066 #elif (__cplusplus >= 201402L)
00067 const char *cxxversion = "C++ 2014";
00068 #elif (__cplusplus >= 201103L)
00069 const char *cxxversion = "C++ 2011";
00070 #elif (__cplusplus >= 199711L)
00071 const char *cxxversion = "C++ 2003";
00072 #else
00073 const char *cxxversion = "C++ 1998";
00074 #endif
00075
00076 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00077 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(ccversion, strlen(ccversion)));
00078 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(cxxversion, strlen(cxxversion)));
00079 Tcl_SetObjResult(interp, tcl_result);
00080 return TCL_OK;
00081 }
00082
00083
00084
00085 if (!strcmp(argv[1], "freemem")) {
00086 long vmdcorefree = vmd_get_avail_physmem_mb();
00087 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00088 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(vmdcorefree));
00089 Tcl_SetObjResult(interp, tcl_result);
00090 return TCL_OK;
00091 }
00092
00093
00094
00095 if (!strcmp(argv[1], "numcpus")) {
00096 #if defined(VMDTHREADS)
00097 int numcpus = wkf_thread_numprocessors();
00098 #else
00099 int numcpus = 1;
00100 #endif
00101 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00102 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(numcpus));
00103 Tcl_SetObjResult(interp, tcl_result);
00104 return TCL_OK;
00105 }
00106
00107
00108
00109 if (!strcmp(argv[1], "cpuaffinity")) {
00110 int numcpus = -1;
00111 int *cpuaffinitylist = NULL;
00112
00113 #if defined(VMDTHREADS)
00114 cpuaffinitylist = wkf_cpu_affinitylist(&numcpus);
00115 #endif
00116 if (numcpus > 0 && cpuaffinitylist != NULL) {
00117 int i;
00118 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00119 for (i=0; i<numcpus; i++)
00120 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(cpuaffinitylist[i]));
00121 Tcl_SetObjResult(interp, tcl_result);
00122 return TCL_OK;
00123 }
00124
00125 if (cpuaffinitylist != NULL)
00126 free(cpuaffinitylist);
00127
00128 Tcl_AppendResult(interp, "CPU affinity query unavailable on this platform", NULL);
00129 return TCL_ERROR;
00130 }
00131
00132
00133
00134 if (!strcmp(argv[1], "numcudadevices")) {
00135 int numdevices;
00136 #if defined(VMDCUDA)
00137 vmd_cuda_num_devices(&numdevices);
00138 #else
00139 numdevices = 0;
00140 #endif
00141 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00142 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(numdevices));
00143 Tcl_SetObjResult(interp, tcl_result);
00144 return TCL_OK;
00145 }
00146
00147
00148 if (!strcmp(argv[1], "dispdev")) {
00149 const char *disp = VMDgetDisplayTypeName();
00150 Tcl_AppendResult(interp, disp, NULL);
00151 return TCL_OK;
00152 }
00153
00154
00155 if (!strcmp(argv[1], "nodename")) {
00156 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00157 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewStringObj(app->par_name(), strlen(app->par_name())));
00158 Tcl_SetObjResult(interp, tcl_result);
00159 return TCL_OK;
00160 }
00161
00162
00163 if (!strcmp(argv[1], "noderank")) {
00164 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00165 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(app->par_rank()));
00166 Tcl_SetObjResult(interp, tcl_result);
00167 return TCL_OK;
00168 }
00169
00170
00171 if (!strcmp(argv[1], "nodecount")) {
00172 Tcl_Obj *tcl_result = Tcl_NewListObj(0, NULL);
00173 Tcl_ListObjAppendElement(interp, tcl_result, Tcl_NewIntObj(app->par_size()));
00174 Tcl_SetObjResult(interp, tcl_result);
00175 return TCL_OK;
00176 }
00177 }
00178
00179 Tcl_AppendResult(interp,
00180 "vmdinfo: version | versionmsg | authors | arch | \n"
00181 "freemem | numcpus | cpuaffinity | numcudadevices | \n"
00182 "dispdev | nodename | noderank | nodecount | \n"
00183 "options | www | wwwhelp", NULL);
00184 return TCL_ERROR;
00185 }
00186
00187
00188 int Vmd_Init(Tcl_Interp *interp) {
00189 VMDApp *app = (VMDApp *)Tcl_GetAssocData(interp, "VMDApp", NULL);
00190
00191
00192
00193
00194 Tcl_CreateCommand(interp, "animate", text_cmd_animate,
00195 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00196
00197 Tcl_CreateCommand(interp, "axes", text_cmd_axes,
00198 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00199
00200 Tcl_CreateCommand(interp, "color", text_cmd_color,
00201 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00202
00203 Tcl_CreateCommand(interp, "display", text_cmd_display,
00204 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00205
00206 Tcl_CreateCommand(interp, "imd", text_cmd_imd,
00207 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00208
00209 Tcl_CreateCommand(interp, "light", text_cmd_light,
00210 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00211
00212 #ifdef VMDPYTHON
00213 Tcl_CreateCommand(interp, "gopython", text_cmd_gopython,
00214 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00215 #endif
00216
00217 Tcl_CreateCommand(interp, "material", text_cmd_material,
00218 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00219
00220 Tcl_CreateCommand(interp, "mobile", text_cmd_mobile,
00221 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00222
00223 Tcl_CreateCommand(interp, "mol", text_cmd_mol,
00224 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00225
00226 Tcl_CreateCommand(interp, "molecule", text_cmd_mol,
00227 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00228
00229 Tcl_CreateCommand(interp, "mouse", text_cmd_mouse,
00230 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00231
00232 Tcl_CreateCommand(interp, "parallel", text_cmd_parallel,
00233 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00234
00235 Tcl_CreateCommand(interp, "plugin", text_cmd_plugin,
00236 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00237
00238 Tcl_CreateCommand(interp, "pointlight", text_cmd_point_light,
00239 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00240
00241 Tcl_CreateCommand(interp, "profile", text_cmd_profile,
00242 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00243
00244 Tcl_CreateCommand(interp, "render", text_cmd_render,
00245 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00246
00247 Tcl_CreateCommand(interp, "rock", text_cmd_rock,
00248 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00249
00250 Tcl_CreateCommand(interp, "rotate", text_cmd_rotate,
00251 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00252
00253 Tcl_CreateCommand(interp, "rotmat", text_cmd_rotmat,
00254 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00255
00256 Tcl_CreateCommand(interp, "sleep", text_cmd_sleep,
00257 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00258
00259 Tcl_CreateCommand(interp, "spaceball", text_cmd_spaceball,
00260 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00261
00262 Tcl_CreateCommand(interp, "stage", text_cmd_stage,
00263 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00264
00265 #if defined(VMDTK) && !defined(_MSC_VER)
00266 Tcl_CreateCommand(interp, "tkrender", text_cmd_tkrender,
00267 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00268 #endif
00269
00270 Tcl_CreateCommand(interp, "tool", text_cmd_tool,
00271 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00272
00273 Tcl_CreateCommand(interp, "translate", text_cmd_translate,
00274 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00275
00276 Tcl_CreateCommand(interp, "user", text_cmd_user,
00277 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00278
00279 Tcl_CreateCommand(interp, "vmd_label", text_cmd_label,
00280 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00281
00282 Tcl_CreateCommand(interp, "vmd_menu", text_cmd_menu,
00283 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00284
00285 Tcl_CreateCommand(interp, "vmd_scale", text_cmd_scale,
00286 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00287
00288 Tcl_CreateCommand(interp, "videostream", text_cmd_videostream,
00289 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00290
00291 Tcl_CreateCommand(interp, "vmdbench", text_cmd_vmdbench,
00292 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00293
00294 Tcl_CreateCommand(interp, "vmdcollab", text_cmd_collab,
00295 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00296
00297 Tcl_CreateCommand(interp, "vmdinfo", vmdinfo_tcl,
00298 (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL);
00299
00300
00301
00302
00303
00304 #if defined(VMDCOLVARS)
00305 Tcl_CreateObjCommand(interp, "colvars", tcl_colvars, (ClientData) app, (Tcl_CmdDeleteProc*) NULL);
00306 Tcl_CreateObjCommand(interp, "cv", tcl_colvars, (ClientData) app, (Tcl_CmdDeleteProc*) NULL);
00307 Tcl_PkgProvide (interp, "colvars", COLVARS_VERSION);
00308 #endif
00309
00310 #if 0
00311 Tcl_CreateObjCommand(interp, "fastpbc", obj_fastpbc,
00312 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00313 #endif
00314
00315 Tcl_CreateObjCommand(interp, "graphlayout", obj_graphlayout,
00316 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00317
00318 Tcl_CreateObjCommand(interp, "gettimestep", cmd_gettimestep,
00319 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00320
00321 Tcl_CreateObjCommand(interp, "mdffi", obj_mdff_cc,
00322 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00323
00324 Tcl_CreateObjCommand(interp, "voltool", obj_voltool,
00325 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00326
00327 Tcl_CreateObjCommand(interp, "measure", obj_measure,
00328 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00329
00330 Tcl_CreateObjCommand(interp, "rawtimestep", cmd_rawtimestep,
00331 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00332
00333 Tcl_CreateObjCommand(interp, "segmentation", obj_segmentation,
00334 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00335
00336 #if defined(VMDTKCON)
00337 Tcl_CreateObjCommand(interp,"vmdcon", tcl_vmdcon,
00338 (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL);
00339 #endif
00340
00341 #if 0
00342 Tcl_CreateObjCommand(interp, "volgradient", obj_volgradient,
00343 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00344 #endif
00345
00346 Tcl_CreateObjCommand(interp, "volmap", obj_volmap,
00347 (ClientData) app, (Tcl_CmdDeleteProc *) NULL);
00348
00349 return TCL_OK;
00350 }
00351