1 /* 2 * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #ifndef SHELL_IMP_H 26 #define SHELL_IMP_H 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 #include <stdio.h> 33 34 /* 35 CCR info 36 37 Vesrion history: 38 39 1.0 - Initial CCR release 40 41 Release information for automatic CCR updates: 42 43 BEGIN RELEASE NOTES: (signifies what gets put into CCR release notes) 44 1.1 45 - Entry points for va_list style msgs; new shell_imp_vmsg() 46 and shell_imp_verrmsg() 47 - shell_imp_env_checker() is now shell_imp_var_checker(). 48 Also the var_checker callback gets passed interp. 49 1.2 - interposition framework (used by jdbx) 50 - access to input FILE pointer. 51 52 END RELEASE NOTES: (signifies what gets put into CCR release notes) 53 54 Following is used as a CCR version number: 55 #define CCR_SHELL_IMP_VERSION 1.1 56 */ 57 58 #include <stdarg.h> 59 60 #define SHELL_IMP_MAJOR 1 61 #define SHELL_IMP_MINOR 2 62 #define SHELL_IMP_FLAG_GLOB 0x1 63 #define SHELL_IMP_FLAG_ARGQ 0x2 64 65 typedef void *shell_imp_interp_t; 66 typedef void *shell_imp_command_t; 67 typedef int shell_imp_fun_t(shell_imp_interp_t, int, char **, void *); 68 69 int 70 shell_imp_init( 71 int, /* major version number */ 72 int, /* minor version number */ 73 shell_imp_interp_t, /* interpreter */ 74 int, /* argc */ 75 char *[] /* argv */ 76 ); 77 78 int 79 shell_imp_fini(shell_imp_interp_t); 80 81 shell_imp_command_t 82 shell_imp_define_command(char *, /* command name e.g. "tnf" */ 83 shell_imp_fun_t *, /* callback function */ 84 int, /* SHELL_IMP_FLAG_* bit vector */ 85 void *, /* client_data Passed as last arg to 86 /* callback function */ 87 char * /* help message, e.g. */ 88 /* "enable the specified tnf probes" */ 89 ); 90 91 int 92 shell_imp_undefine_command(shell_imp_command_t); 93 94 int 95 shell_imp_var_checker(shell_imp_interp_t, 96 const char *, /* var name */ 97 int (*)(shell_imp_interp_t, const char*) /* env checker */ 98 ); 99 100 int 101 shell_imp_execute(shell_imp_interp_t, const char *); 102 103 const char * 104 shell_imp_get_var(shell_imp_interp_t, const char *); 105 106 void 107 shell_imp_msg(shell_imp_interp_t, const char *, ...); 108 109 void 110 shell_imp_errmsg(shell_imp_interp_t, const char *, ...); 111 112 void 113 shell_imp_vmsg(shell_imp_interp_t, const char *, va_list); 114 115 void 116 shell_imp_verrmsg(shell_imp_interp_t, const char *, va_list); 117 118 119 120 /* 121 * Stuff added for 1.2 122 */ 123 124 struct shell_imp_interposition_info_t { 125 shell_imp_fun_t * 126 new_func; 127 void * new_client_data; 128 shell_imp_fun_t * 129 original_func; 130 void * original_client_data; 131 int original_flags; 132 }; 133 134 typedef int shell_imp_dispatcher_t(shell_imp_interp_t, int, char **, 135 shell_imp_interposition_info_t *); 136 137 shell_imp_command_t 138 shell_imp_interpose(char *name, 139 shell_imp_fun_t *new_func, 140 int flags, 141 void *client_data, 142 char * description, 143 shell_imp_dispatcher_t *); 144 145 int shell_imp_uninterpose(shell_imp_command_t); 146 147 int 148 shell_imp_dispatch_interposition(shell_imp_interp_t, 149 shell_imp_interposition_info_t *, 150 int argc, char *argv[]); 151 152 int 153 shell_imp_dispatch_original(shell_imp_interp_t, 154 shell_imp_interposition_info_t *, 155 int argc, char *argv[]); 156 157 FILE * 158 shell_imp_cur_input(shell_imp_interp_t); 159 160 #ifdef __cplusplus 161 } 162 #endif 163 164 #endif