1 /* 2 * gretl -- Gnu Regression, Econometrics and Time-series Library 3 * Copyright (C) 2001 Allin Cottrell and Riccardo "Jack" Lucchetti 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 #ifndef GRETL_FUNC_H 21 #define GRETL_FUNC_H 22 23 #include "usermat.h" 24 25 typedef enum { 26 FN_NEEDS_DATA, /* needs some (any) sort of dataset */ 27 FN_NEEDS_TS, /* function requires time-series data */ 28 FN_NEEDS_QM, /* function requires quarterly or monthly data */ 29 FN_NEEDS_PANEL, /* function requires panel data */ 30 FN_NODATA_OK /* function does not require a dataset */ 31 } DataReq; 32 33 typedef enum { 34 UFUN_ROLE_NONE, 35 UFUN_BUNDLE_PRINT, 36 UFUN_BUNDLE_PLOT, 37 UFUN_BUNDLE_TEST, 38 UFUN_BUNDLE_FCAST, 39 UFUN_BUNDLE_EXTRA, 40 UFUN_GUI_MAIN, 41 UFUN_GUI_PRECHECK, 42 UFUN_LIST_MAKER, 43 UFUN_ROLE_MAX 44 } UfunRole; 45 46 typedef enum { 47 UFUN_PRIVATE = 1 << 0, 48 UFUN_PLUGIN = 1 << 1, 49 UFUN_NOPRINT = 1 << 2, 50 UFUN_MENU_ONLY = 1 << 3, 51 UFUN_USES_SET = 1 << 4 52 } UfunAttrs; 53 54 #define NEEDS_TS "needs-time-series-data" 55 #define NEEDS_QM "needs-qm-data" 56 #define NEEDS_PANEL "needs-panel-data" 57 #define NO_DATA_OK "no-data-ok" 58 59 #define FN_NAMELEN 32 60 61 #define ok_function_return_type(r) (r == GRETL_TYPE_DOUBLE || \ 62 r == GRETL_TYPE_SERIES || \ 63 r == GRETL_TYPE_MATRIX || \ 64 r == GRETL_TYPE_LIST || \ 65 r == GRETL_TYPE_STRING || \ 66 r == GRETL_TYPE_BUNDLE || \ 67 r == GRETL_TYPE_STRINGS || \ 68 r == GRETL_TYPE_MATRICES || \ 69 r == GRETL_TYPE_BUNDLES || \ 70 r == GRETL_TYPE_LISTS || \ 71 r == GRETL_TYPE_ARRAYS || \ 72 r == GRETL_TYPE_VOID || \ 73 r == GRETL_TYPE_NUMERIC) 74 75 typedef struct ufunc_ ufunc; 76 typedef struct fncall_ fncall; 77 typedef struct fnpkg_ fnpkg; 78 79 int n_user_functions (void); 80 81 int n_free_functions (void); 82 83 ufunc *get_user_function_by_name (const char *name); 84 85 const ufunc *get_user_function_by_index (int idx); 86 87 fncall *fncall_new (ufunc *fun, int preserve); 88 89 void fncall_destroy (fncall *call); 90 91 GretlType fncall_get_return_type (fncall *fc); 92 93 fncall *get_pkg_function_call (const char *funcname, 94 const char *pkgname, 95 const char *pkgpath); 96 97 int fn_n_params (const ufunc *fun); 98 99 int fn_param_type (const ufunc *fun, int i); 100 101 const char *fn_param_name (const ufunc *fun, int i); 102 103 const char *fn_param_descrip (const ufunc *fun, int i); 104 105 const char **fn_param_value_labels (const ufunc *fun, int i, 106 int *n); 107 108 int fn_param_has_default (const ufunc *fun, int i); 109 110 double fn_param_default (const ufunc *fun, int i); 111 112 double fn_param_minval (const ufunc *fun, int i); 113 114 double fn_param_maxval (const ufunc *fun, int i); 115 116 double fn_param_step (const ufunc *fun, int i); 117 118 int fn_param_optional (const ufunc *fun, int i); 119 120 int fn_param_uses_xlist (const ufunc *fun, int i); 121 122 int fn_param_uses_mylist (const ufunc *fun, int i); 123 124 int user_func_get_return_type (const ufunc *fun); 125 126 int user_func_is_noprint (const ufunc *fun); 127 128 int user_func_is_menu_only (const ufunc *fun); 129 130 const char *user_function_name_by_index (int i); 131 132 int user_function_index_by_name (const char *name, 133 fnpkg *pkg); 134 135 int user_function_set_debug (const char *name, int debug); 136 137 void function_names_init (void); 138 139 const char *next_available_function_name (fnpkg *pkg, 140 int *idxp); 141 142 int gretl_compiling_function (void); 143 144 int gretl_compiling_python (const char *line); 145 146 int gretl_function_depth (void); 147 148 int gretl_function_recursing (void); 149 150 void current_function_info (char const **funcname, 151 char const **pkgname); 152 153 fnpkg *get_active_function_package (gretlopt opt); 154 155 fnpkg *gretl_function_get_package (const ufunc *fun); 156 157 int gretl_start_compiling_function (const char *line, 158 const DATASET *dset, 159 PRN *prn); 160 161 int gretl_function_append_line (ExecState *s); 162 163 int gretl_is_public_user_function (const char *name); 164 165 int gretl_function_exec (fncall *call, int rtype, DATASET *dset, 166 void *ret, char **descrip, PRN *prn); 167 168 int attach_loop_to_function (void *ptr); 169 170 int detach_loop_from_function (void *ptr); 171 172 int set_function_should_return (const char *line); 173 174 int current_function_size (void); 175 176 char *gretl_func_get_arg_name (const char *argvar, int *err); 177 178 int object_is_const (const char *name, int vnum); 179 180 int object_is_function_arg (const char *name); 181 182 void allow_full_data_access (int s); 183 184 int series_is_accessible_in_function (int ID, const DATASET *dset); 185 186 const char *series_get_list_parent (int ID); 187 188 void sample_range_get_extrema (const DATASET *dset, int *t1, int *t2); 189 190 void extend_function_sample_range (int addobs); 191 192 int function_return_type_from_string (const char *s); 193 194 int gretl_function_print_code (ufunc *u, int tabwidth, PRN *prn); 195 196 char **gretl_function_retrieve_code (ufunc *u, int *nlines); 197 198 int print_function_package_sample (const char *fname, int tabwidth, 199 PRN *prn); 200 201 void set_current_function_package (fnpkg *pkg); 202 203 fnpkg *function_package_new (const char *fname, 204 char **pubnames, int n_pub, 205 char **privnames, int n_priv, 206 int *err); 207 208 int function_package_connect_funcs (fnpkg *pkg, 209 char **pubnames, int n_pub, 210 char **privnames, int n_priv); 211 212 int function_package_set_properties (fnpkg *pkg, ...); 213 214 int function_package_get_properties (fnpkg *pkg, ...); 215 216 const char *function_package_get_string (fnpkg *pkg, 217 const char *id); 218 219 int function_package_set_data_files (fnpkg *pkg, char **S, int n); 220 221 char **function_package_get_data_files (fnpkg *pkg, int *n); 222 223 int function_package_set_depends (fnpkg *pkg, char **S, int n); 224 225 char **function_package_get_depends (fnpkg *pkg, int *n); 226 227 const char *function_package_get_name (fnpkg *pkg); 228 229 double function_package_get_version (fnpkg *pkg); 230 231 int function_package_write_file (fnpkg *pkg); 232 233 int create_and_write_function_package (const char *fname, 234 gretlopt opt, 235 PRN *prn); 236 237 int function_set_package_role (const char *name, fnpkg *pkg, 238 const char *attr, PRN *prn); 239 240 int function_ok_for_package_role (const char *name, 241 int role); 242 243 const char *package_role_get_key (int flag); 244 245 int check_function_needs (const DATASET *dset, DataReq dreq, 246 int minver); 247 248 int package_version_ok (int minver, char *reqstr); 249 250 int write_loaded_functions_file (const char *fname, int mpicall); 251 252 int read_session_functions_file (const char *fname); 253 254 fnpkg *get_function_package_by_name (const char *pkgname); 255 256 fnpkg *get_function_package_by_filename (const char *fname, int *err); 257 258 const char *get_function_package_path_by_name (const char *pkgname); 259 260 char **package_peek_dependencies (const char *fname, int *ndeps); 261 262 int include_gfn (const char *fname, gretlopt opt, PRN *prn); 263 264 int function_package_is_loaded (const char *fname, 265 const char **version); 266 267 int gfn_is_loaded (const char *gfnname); 268 269 void function_package_unload_by_filename (const char *fname); 270 271 void function_package_unload_full_by_filename (const char *fname); 272 273 int delete_function_package (const char *gfnname); 274 275 int uninstall_function_package (const char *package, gretlopt opt, 276 PRN *prn); 277 278 int print_function_package_info (const char *fname, int gui_mode, 279 PRN *prn); 280 281 int bundle_function_package_info (const char *fname, gretl_bundle *b); 282 283 int print_function_package_code (const char *fname, int tabwidth, 284 PRN *prn); 285 286 int print_function_package_help (const char *fname, PRN *prn); 287 288 ufunc *get_function_from_package (const char *funname, fnpkg *pkg); 289 290 int get_function_file_header (const char *fname, char **pdesc, 291 char **pver, char **pdate, 292 char **pauthor, int *pdfdoc); 293 294 double gfn_file_get_version (const char *fname); 295 296 int user_function_help (const char *fnname, gretlopt opt, PRN *prn); 297 298 int function_package_has_PDF_doc (fnpkg *pkg, char **pdfname); 299 300 int function_package_has_gui_help (fnpkg *pkg); 301 302 void function_package_set_editor (fnpkg *pkg, void *editor); 303 304 void *function_package_get_editor (fnpkg *pkg); 305 306 int package_has_menu_attachment (const char *fname, 307 char **pkgname, 308 char **attach, 309 char **label); 310 311 int package_needs_zipping (const char *fname, 312 int *pdfdoc, 313 char ***datafiles, 314 int *n_files); 315 316 void gretl_functions_cleanup (void); 317 318 int push_function_arg (fncall *fc, const char *name, 319 void *uvar, GretlType type, 320 void *value); 321 322 int push_anon_function_arg (fncall *fc, GretlType type, 323 void *value); 324 325 int push_function_args (fncall *fc, ...); 326 327 void adjust_indent (const char *line, int *this_indent, 328 int *next_indent); 329 330 #endif /* GRETL_FUNC_H */ 331