1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 | /**
* Copyright (c) 2006-2024 by Altair Engineering, Inc.
* All rights reserved.
*
* Altair Engineering, Inc. makes this software available as part of the Vision
* tool platform. As long as you are a licensee of the Vision tool platform
* you may make copies of the software and modify it to be used within the
* Vision tool platform, but you must include all of this notice on any copy.
* Redistribution without written permission to any third party, with or
* without modification, is not permitted.
* Altair Engineering, Inc. does not warrant that this software is error free
* or fit for any purpose. Altair Engineering, Inc. disclaims any liability for
* all claims, expenses, losses, damages and costs any user may incur as a
* result of using, copying or modifying the software.
* ============================================================================
* @c-code
* C-Code Skeleton
* @section
* C Level Examples
* @description
* Skeleton that can be used to create a shared object that can be loaded
* into the *Vision tools to register new Tcl Object Commands.
* @files
* zdb/skeleton.c
* @tag
* zdb gui
*/
#include <tcl.h>
static int testCmd(ClientData, Tcl_Interp*, int, Tcl_Obj* CONST objv[]);
/* ===========================================================================
* Declare prototypes.
* ===========================================================================
*/
int Test_Init(Tcl_Interp* interp);
/* ===========================================================================
* Init Function - Create command "testcmd"
* ===========================================================================
*/
int Test_Init(Tcl_Interp* interp) {
if (Tcl_PkgRequire(interp, "Tcl", "8.6", 0) == NULL) {
return TCL_ERROR;
}
if (Tcl_PkgProvide(interp, "Test", "1.0") != TCL_OK) {
return TCL_ERROR;
}
Tcl_CreateObjCommand(interp, "testcmd", &testCmd, NULL, NULL);
return TCL_OK;
}
/* ==================================================================
* MASTER COMMAND
*
* COMMAND: testcmd foo|bar
* 0 1
* ==================================================================
*/
static int testCmd(ClientData data, Tcl_Interp* interp, int objc,
Tcl_Obj* CONST objv[])
{
static CONST84 char* subCmds[] = {"foo", "bar", NULL};
int index;
(void) data; /* Pacify 'unused variable' warning. */
if (objc < 2) {
Tcl_WrongNumArgs(interp, 1, objv, "foo|bar ...");
return TCL_ERROR;
}
if (Tcl_GetIndexFromObj(interp, objv[1], subCmds,
"option", TCL_EXACT, &index) == TCL_ERROR) {
return TCL_ERROR;
}
switch (index) {
case 0: /* foo */
/* Do something */
break;
case 1: { /* bar */
/* Do something */
break;
}
default: /* bad option */
return TCL_ERROR;
}
return TCL_OK;
}
|