00001 #ifndef oc2iv_h
00002 #define oc2iv_h
00003
00004 #include <string.h>
00005 #include <stdio.h>
00006
00007 extern "C" {
00008
00009 #include "hocdec.h"
00010 extern int hoc_obj_run(const char*, Object*);
00011 extern int hoc_argtype(int);
00012 extern boolean hoc_is_double_arg(int);
00013 extern boolean hoc_is_pdouble_arg(int);
00014 extern boolean hoc_is_str_arg(int);
00015 extern boolean hoc_is_object_arg(int);
00016 extern char* gargstr(int);
00017 extern char** hoc_pgargstr(int);
00018 extern double* getarg(int);
00019 extern double* hoc_pgetarg(int);
00020 extern Object** hoc_objgetarg(int);
00021 extern Object* hoc_name2obj(const char* name, int index);
00022 extern int ifarg(int);
00023 extern char** hoc_temp_charptr();
00024 extern void hoc_assign_str(char** pstr, const char* buf);
00025 extern double chkarg(int, double low, double high);
00026 extern double hoc_call_func(Symbol*, int narg);
00027 extern double hoc_call_objfunc(Symbol*, int narg, Object*);
00028 extern double hoc_ac_;
00029 extern double hoc_epsilon;
00030 extern void hoc_ret();
00031 extern void ret(double);
00032 extern void hoc_pushx(double);
00033 extern void hoc_pushstr(char**);
00034 extern void hoc_pushobj(Object**);
00035 extern void hoc_push_object(Object*);
00036 extern void hoc_pushpx(double*);
00037 extern double hoc_xpop();
00038 extern double* hoc_pxpop();
00039 extern void hoc_execerror(const char*, const char*);
00040 extern void hoc_warning(const char*, const char*);
00041 extern double* hoc_val_pointer(const char*);
00042 extern Symbol* hoc_lookup(const char*);
00043 extern Symbol* hoc_table_lookup(const char*, Symlist*);
00044 extern Symbol* hoc_install(const char*, int, double, Symlist**);
00045 extern Objectdata* hoc_objectdata;
00046 extern int hoc_total_array_data(Symbol*, Objectdata*);
00047 extern char* hoc_araystr(Symbol*, int, Objectdata*);
00048 extern char* hoc_object_name(Object*);
00049 extern char* hoc_object_pathname(Object*);
00050 extern const char* expand_env_var(const char*);
00051 extern void check_obj_type(Object*, const char*);
00052 extern boolean is_obj_type(Object*, const char*);
00053 extern void hoc_obj_ref(Object*);
00054 extern void hoc_obj_unref(Object*);
00055 extern void hoc_dec_refcount(Object**);
00056 extern Object** hoc_temp_objvar(Symbol* template_symbol, void* cpp_object);
00057 extern Object** hoc_temp_objptr(Object*);
00058 extern void hoc_new_object_asgn(Object** obp, Symbol* template_symbol, void* cpp_object);
00059 extern void hoc_audit_command(const char*);
00060 extern HocSymExtension* hoc_var_extra(const char*);
00061 extern double check_domain_limits(float*, double);
00062 extern Object* hoc_obj_get(int i);
00063 extern void hoc_obj_set(int i, Object*);
00064 extern void nrn_hoc_lock();
00065 extern void nrn_hoc_unlock();
00066 }
00067
00068
00069 #define CChar const char
00070 extern void hoc_ivpanel(CChar*, boolean h = false);
00071 extern void hoc_ivpanelmap(int scroll = -1);
00072 extern void hoc_ivbutton(CChar* name, CChar* action, Object* pyact = 0);
00073 extern void hoc_ivradiobutton(CChar* name, CChar* action, boolean activate = false, Object* pyact = 0);
00074 extern void hoc_ivmenu(CChar*, boolean add2menubar = false);
00075 extern void hoc_ivvarmenu(CChar*, CChar*, boolean add2menubar = false, Object* pyvar = nil);
00076 extern void hoc_ivvalue(CChar* name, CChar* variable, boolean deflt=false, Object* pyvar = 0);
00077 extern void hoc_ivfixedvalue(CChar* name, CChar* variable,
00078 boolean deflt=false, boolean usepointer=false);
00079 extern void hoc_ivvalue_keep_updated(CChar* name, CChar* variable, Object* pyvar = 0);
00080 extern void hoc_ivpvalue(CChar* name, double*, boolean deflt=false, HocSymExtension* extra=nil);
00081 extern void hoc_ivvaluerun(CChar* name, CChar* variable, CChar* action,
00082 boolean deflt=false, boolean canrun=false, boolean usepointer=false, Object* pyvar = 0, Object* pyact = 0);
00083 extern void hoc_ivpvaluerun(CChar* name, double*, CChar* action,
00084 boolean deflt=false, boolean canrun=false, HocSymExtension* extra=nil);
00085
00086 extern void hoc_ivlabel(CChar*);
00087 extern void hoc_ivvarlabel(char**, Object* pyvar = 0);
00088 extern void hoc_ivstatebutton(double*, CChar* name, CChar* action, int style, Object* pyvar = 0, Object* pyact = 0);
00089 extern void hoc_ivslider(double*, float low=0, float high=100,
00090 float resolution=1, int steps=10,
00091 const char* send_cmd=nil, boolean vert=false, boolean slow = false, Object* pyvar = 0, Object* pyact = 0);
00092
00093 inline double* object_pval(Symbol* sym, Objectdata* od) {
00094 return od[sym->u.oboff].pval;
00095 }
00096 inline char* object_str(Symbol* sym, Objectdata* od) {
00097 return *od[sym->u.oboff].ppstr;
00098 }
00099 inline char** object_pstr(Symbol* sym, Objectdata* od) {
00100 return od[sym->u.oboff].ppstr;
00101 }
00102 inline Object** object_pobj(Symbol* sym, Objectdata* od) {
00103 return od[sym->u.oboff].pobj;
00104 }
00105 inline hoc_Item** object_psecitm(Symbol* sym, Objectdata* od) {
00106 return od[sym->u.oboff].psecitm;
00107 }
00108
00109 class Oc2IV {
00110 public:
00111 static char** object_pstr(const char* symname, Object* = nil);
00112 static char* object_str(const char* symname, Object* = nil);
00113 };
00114
00115 class Symlist;
00116
00117 #ifndef OCMATRIX
00118
00119 class ParseTopLevel {
00120 public:
00121 ParseTopLevel();
00122 virtual ~ParseTopLevel();
00123 void save();
00124 void restore();
00125 private:
00126 Objectdata* obdsav_;
00127 Object* obsav_;
00128 Symlist* symsav_;
00129 boolean restored_;
00130 };
00131 #endif
00132
00133 #endif