xref: /Universal-ctags/dsl/optscript.h (revision 8cfef1a879a18aa3d2417e7a8fa3303e056b2db7)
1d8f6b0edSMasatake YAMATO /*
2d8f6b0edSMasatake YAMATO *   Copyright (c) 2020, Masatake YAMATO
3d8f6b0edSMasatake YAMATO *   Copyright (c) 2020, Red Hat, Inc.
4d8f6b0edSMasatake YAMATO *
5d8f6b0edSMasatake YAMATO *   This source code is released for free distribution under the terms of the
6d8f6b0edSMasatake YAMATO *   GNU General Public License version 2 or (at your option) any later version.
7d8f6b0edSMasatake YAMATO */
8d8f6b0edSMasatake YAMATO 
9d8f6b0edSMasatake YAMATO #ifndef OPTSCRIPT_H
10d8f6b0edSMasatake YAMATO #define OPTSCRIPT_H
11d8f6b0edSMasatake YAMATO 
12d8f6b0edSMasatake YAMATO #include "general.h"
13d8f6b0edSMasatake YAMATO 
14d8f6b0edSMasatake YAMATO #include "es.h"
15d8f6b0edSMasatake YAMATO #include "mio.h"
16d8f6b0edSMasatake YAMATO #include "ptrarray.h"
17d8f6b0edSMasatake YAMATO 
18d8f6b0edSMasatake YAMATO typedef struct sOptVM OptVM;
19d8f6b0edSMasatake YAMATO typedef EsObject* (* OptOperatorFn) (OptVM *, EsObject *);
20d8f6b0edSMasatake YAMATO 
21d8f6b0edSMasatake YAMATO struct OptHelpExtender {
22d8f6b0edSMasatake YAMATO 	void        (* add)          (ptrArray *, void *);
23d8f6b0edSMasatake YAMATO 	const char* (* get_help_str) (EsObject *, void *);
24d8f6b0edSMasatake YAMATO };
25d8f6b0edSMasatake YAMATO 
26d8f6b0edSMasatake YAMATO int       opt_init (void);
27d8f6b0edSMasatake YAMATO 
28d8f6b0edSMasatake YAMATO OptVM    *opt_vm_new          (MIO *in, MIO *out, MIO *err);
29d8f6b0edSMasatake YAMATO void      opt_vm_delete       (OptVM *vm);
30d8f6b0edSMasatake YAMATO 
31d8f6b0edSMasatake YAMATO EsObject *opt_vm_read         (OptVM *vm, MIO *in);
32d8f6b0edSMasatake YAMATO EsObject *opt_vm_eval         (OptVM *vm, EsObject *obj);
33d8f6b0edSMasatake YAMATO void      opt_vm_report_error (OptVM *vm, EsObject *eobj, MIO *err);
34d8f6b0edSMasatake YAMATO 
35d8f6b0edSMasatake YAMATO void     *opt_vm_set_app_data (OptVM *vm, void *app_data);
36d8f6b0edSMasatake YAMATO void     *opt_vm_get_app_data (OptVM *vm);
37d8f6b0edSMasatake YAMATO 
38d8f6b0edSMasatake YAMATO char     *opt_vm_set_prompt   (OptVM *vm, char *prompt);
39d8f6b0edSMasatake YAMATO void      opt_vm_print_prompt (OptVM *vm);
40d8f6b0edSMasatake YAMATO 
41d8f6b0edSMasatake YAMATO int       opt_vm_help         (OptVM *vm, MIO *out,
42d8f6b0edSMasatake YAMATO 							   struct OptHelpExtender *extop, void *data);
43d8f6b0edSMasatake YAMATO 
44d8f6b0edSMasatake YAMATO void      opt_vm_clear       (OptVM *vm);
45d8f6b0edSMasatake YAMATO void      opt_vm_dstack_push (OptVM *vm, EsObject *dict);
46d8f6b0edSMasatake YAMATO void      opt_vm_dstack_pop  (OptVM *vm);
47d8f6b0edSMasatake YAMATO 
48d8f6b0edSMasatake YAMATO EsObject*  opt_vm_ostack_top  (OptVM *vm);
49d8f6b0edSMasatake YAMATO EsObject*  opt_vm_ostack_peek  (OptVM *vm, int index_from_top);
50d8f6b0edSMasatake YAMATO EsObject*  opt_vm_ostack_pop  (OptVM *vm);
51d8f6b0edSMasatake YAMATO void       opt_vm_ostack_push (OptVM *vm, EsObject *obj);
52d8f6b0edSMasatake YAMATO unsigned int opt_vm_ostack_count (OptVM *vm);
53d8f6b0edSMasatake YAMATO 
54d8f6b0edSMasatake YAMATO EsObject *opt_dict_new       (unsigned int size);
55d8f6b0edSMasatake YAMATO bool      opt_dict_known_and_get_cstr (EsObject *dict, const char* name, EsObject **val);
56d8f6b0edSMasatake YAMATO bool      opt_dict_foreach   (EsObject *dict, bool (* fn) (EsObject *, EsObject *, void*), void *data);
57d8f6b0edSMasatake YAMATO void      opt_dict_def       (EsObject *dict, EsObject *sym, EsObject *val);
58d8f6b0edSMasatake YAMATO bool      opt_dict_undef     (EsObject *dict, EsObject *sym);
59d8f6b0edSMasatake YAMATO void      opt_dict_clear     (EsObject *dict);
60d8f6b0edSMasatake YAMATO 
61d8f6b0edSMasatake YAMATO EsObject *opt_array_new      (void);
62d8f6b0edSMasatake YAMATO EsObject *opt_array_get      (const EsObject *array, unsigned int index);
63d8f6b0edSMasatake YAMATO void      opt_array_put      (EsObject *array, unsigned int index, EsObject *obj);
64*8cfef1a8SMasatake YAMATO void      opt_array_add      (EsObject *array, EsObject *elt);
65*8cfef1a8SMasatake YAMATO 
66d8f6b0edSMasatake YAMATO unsigned int opt_array_length(const EsObject *array);
67d8f6b0edSMasatake YAMATO 
68d8f6b0edSMasatake YAMATO EsObject *opt_operator_new   (OptOperatorFn op, const char *name, int arity, const char *help_str);
69d8f6b0edSMasatake YAMATO 
70d8f6b0edSMasatake YAMATO EsObject *opt_string_new_from_cstr (const char *cstr);
71d8f6b0edSMasatake YAMATO const char* opt_string_get_cstr (const EsObject *str);
72d8f6b0edSMasatake YAMATO 
73d8f6b0edSMasatake YAMATO EsObject *opt_name_new_from_cstr (const char *cstr);
74d8f6b0edSMasatake YAMATO const char* opt_name_get_cstr (const EsObject *name);
75d8f6b0edSMasatake YAMATO 
76d8f6b0edSMasatake YAMATO extern EsObject *OPT_ERR_TYPECHECK;
77d8f6b0edSMasatake YAMATO extern EsObject *OPT_ERR_QUIT;
78d8f6b0edSMasatake YAMATO extern EsObject *OPT_ERR_RANGECHECK;
79d8f6b0edSMasatake YAMATO extern EsObject *OPT_ERR_UNDERFLOW;
80d8f6b0edSMasatake YAMATO 
81d8f6b0edSMasatake YAMATO extern int OPT_TYPE_ARRAY;
82d8f6b0edSMasatake YAMATO extern int OPT_TYPE_DICT;
83d8f6b0edSMasatake YAMATO extern int OPT_TYPE_OPERATOR;
84d8f6b0edSMasatake YAMATO extern int OPT_TYPE_STRING;
85d8f6b0edSMasatake YAMATO extern int OPT_TYPE_NAME;
86d8f6b0edSMasatake YAMATO extern int OPT_TYPE_MARK;
87d8f6b0edSMasatake YAMATO 
88d8f6b0edSMasatake YAMATO #endif
89