aboutsummaryrefslogtreecommitdiff
path: root/jim-win32.c
diff options
context:
space:
mode:
authorantirez <antirez>2005-02-27 16:39:11 +0000
committerantirez <antirez>2005-02-27 16:39:11 +0000
commitba67c1dc4e964e555617f05d4acc0ee77f4ff7fc (patch)
tree3fff2333a7871112655c481167265b19ccc4112f /jim-win32.c
parent11c5afffc196a37782e54517ce7edd2eebee99af (diff)
downloadjimtcl-ba67c1dc4e964e555617f05d4acc0ee77f4ff7fc.zip
jimtcl-ba67c1dc4e964e555617f05d4acc0ee77f4ff7fc.tar.gz
jimtcl-ba67c1dc4e964e555617f05d4acc0ee77f4ff7fc.tar.bz2
win32 test extensiona added (thanks to Pat Thoyts)
Diffstat (limited to 'jim-win32.c')
-rw-r--r--jim-win32.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/jim-win32.c b/jim-win32.c
new file mode 100644
index 0000000..d69ebe9
--- /dev/null
+++ b/jim-win32.c
@@ -0,0 +1,42 @@
+#define STRICT
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <shellapi.h>
+#pragma comment(lib, "shell32")
+
+#define JIM_EXTENSION
+#include "jim.h"
+
+__declspec(dllexport) int Jim_OnLoad(Jim_Interp *interp);
+
+/* shellexec verb file args */
+static int
+Win32_ShellExecute(Jim_Interp *interp, int objc, Jim_Obj **objv)
+{
+ int r;
+ char *verb, *file, *parm = NULL;
+ char cwd[MAX_PATH + 1];
+
+ if (objc < 3 || objc > 4) {
+ Jim_WrongNumArgs(interp, 1, objv,
+ "shellexecute verb path ?parameters?");
+ return JIM_ERR;
+ }
+ verb = Jim_GetString(objv[1], NULL);
+ file = Jim_GetString(objv[2], NULL);
+ GetCurrentDirectoryA(MAX_PATH + 1, cwd);
+ if (objc == 4)
+ parm = Jim_GetString(objv[3], NULL);
+ r = (int)ShellExecuteA(NULL, verb, file, parm, cwd, SW_SHOWNORMAL);
+ if (r < 33)
+ Jim_SetResultString(interp, "failed.", -1);
+ return (r < 33) ? JIM_ERR : JIM_OK;
+}
+
+int
+Jim_OnLoad(Jim_Interp *interp)
+{
+ Jim_InitExtension(interp, "1.0");
+ Jim_CreateCommand(interp, "win32.shellexecute", Win32_ShellExecute, 3, 4, NULL);
+ return JIM_OK;
+}