@@ -25,6 +25,12 @@ impl Interp {
2525 }
2626 }
2727
28+ // pub fn app_init(&mut self) -> i32 {
29+ // unsafe {
30+ // tcl_sys::Tcl_AppInit(self.0.as_ptr()) as i32
31+ // }
32+ // }
33+
2834 pub fn create_slave ( & mut self , name : & str , is_safe : i32 ) -> Self {
2935 let name = std:: ffi:: CString :: new ( name) . unwrap ( ) ;
3036 let interp = unsafe {
@@ -52,11 +58,19 @@ impl Interp {
5258 }
5359
5460 pub unsafe fn get_string_result ( & self ) -> String {
55- let result = self . get_obj_result ( ) ;
56- let result_ptr = tcl_sys:: Tcl_GetString ( result. 0 . as_ptr ( ) ) ;
57- let _ = tcl_sys:: Tcl_GetStringResult ( self . 0 . as_ptr ( ) ) ;
58- let result_str = std:: ffi:: CStr :: from_ptr ( result_ptr) ;
59- result_str. to_string_lossy ( ) . into_owned ( )
61+ unsafe {
62+ let result = self . get_obj_result ( ) ;
63+ let result_ptr = tcl_sys:: Tcl_GetString ( result. 0 . as_ptr ( ) ) ;
64+ let _ = tcl_sys:: Tcl_GetStringResult ( self . 0 . as_ptr ( ) ) ;
65+ let result_str = std:: ffi:: CStr :: from_ptr ( result_ptr) ;
66+ result_str. to_string_lossy ( ) . into_owned ( )
67+ }
68+ }
69+
70+ pub unsafe fn reset_result ( & self ) {
71+ unsafe {
72+ tcl_sys:: Tcl_ResetResult ( self . 0 . as_ptr ( ) ) ;
73+ }
6074 }
6175
6276 pub unsafe fn eval ( & self , script : & str ) -> i32 {
@@ -85,6 +99,97 @@ impl Interp {
8599 tcl_sys:: Tcl_EvalFile ( self . 0 . as_ptr ( ) , filename. as_ptr ( ) ) as i32
86100 }
87101 }
102+
103+ pub unsafe fn expr_string ( & self , expr : & str ) -> i32 {
104+ let expr = std:: ffi:: CString :: new ( expr) . unwrap ( ) ;
105+ unsafe {
106+ tcl_sys:: Tcl_ExprString ( self . 0 . as_ptr ( ) , expr. as_ptr ( ) ) as i32
107+ }
108+ }
109+
110+ pub unsafe fn expr_obj ( & self , obj : Obj ) -> i32 {
111+ todo ! ( )
112+ }
113+
114+ pub fn expr_long ( & self , expr : & str ) -> Option < i64 > {
115+ todo ! ( )
116+ }
117+
118+ pub fn expr_double ( & self , expr : & str ) -> Option < f64 > {
119+ let expr = std:: ffi:: CString :: new ( expr) . unwrap ( ) ;
120+ let mut value: f64 = 0.0 ;
121+ let result = unsafe {
122+ tcl_sys:: Tcl_ExprDouble ( self . 0 . as_ptr ( ) , expr. as_ptr ( ) , & mut value)
123+ } ;
124+ if result == 0 {
125+ Some ( value)
126+ } else {
127+ None
128+ }
129+ }
130+
131+ pub fn get_var ( & self , name : & str , flags : i32 ) -> Option < String > {
132+ let name = std:: ffi:: CString :: new ( name) . unwrap ( ) ;
133+ let text = unsafe {
134+ tcl_sys:: Tcl_GetVar ( self . 0 . as_ptr ( ) , name. as_ptr ( ) , flags)
135+ } ;
136+ if text. is_null ( ) {
137+ None
138+ } else {
139+ Some ( unsafe { std:: ffi:: CStr :: from_ptr ( text) } . to_string_lossy ( ) . into_owned ( ) )
140+ }
141+ }
142+
143+ pub fn get_var2 ( & self , name1 : & str , name2 : & str , flags : i32 ) -> Option < String > {
144+ let name1 = std:: ffi:: CString :: new ( name1) . unwrap ( ) ;
145+ let name2 = std:: ffi:: CString :: new ( name2) . unwrap ( ) ;
146+ let text = unsafe {
147+ tcl_sys:: Tcl_GetVar2 ( self . 0 . as_ptr ( ) , name1. as_ptr ( ) , name2. as_ptr ( ) , flags)
148+ } ;
149+ if text. is_null ( ) {
150+ None
151+ } else {
152+ Some ( unsafe { std:: ffi:: CStr :: from_ptr ( text) } . to_string_lossy ( ) . into_owned ( ) )
153+ }
154+ }
155+
156+ pub fn get_var2_obj ( & self , name1 : & str , name2 : & str , flags : i32 ) -> Option < Obj > {
157+ let name1 = std:: ffi:: CString :: new ( name1) . unwrap ( ) ;
158+ let name2 = std:: ffi:: CString :: new ( name2) . unwrap ( ) ;
159+ let obj = unsafe {
160+ tcl_sys:: Tcl_GetVar2Ex ( self . 0 . as_ptr ( ) , name1. as_ptr ( ) , name2. as_ptr ( ) , flags)
161+ } ;
162+ if obj. is_null ( ) {
163+ None
164+ } else {
165+ Some ( unsafe { Obj :: from_raw ( obj) } )
166+ }
167+ }
168+
169+ pub fn set_var ( & mut self , name : & str , value : & str , flags : i32 ) -> i32 {
170+ let name = std:: ffi:: CString :: new ( name) . unwrap ( ) ;
171+ let value = std:: ffi:: CString :: new ( value) . unwrap ( ) ;
172+ unsafe {
173+ tcl_sys:: Tcl_SetVar ( self . 0 . as_ptr ( ) , name. as_ptr ( ) , value. as_ptr ( ) , flags) as i32
174+ }
175+ }
176+
177+ pub fn set_var2 ( & mut self , name1 : & str , name2 : & str , value : & str , flags : i32 ) -> i32 {
178+ let name1 = std:: ffi:: CString :: new ( name1) . unwrap ( ) ;
179+ let name2 = std:: ffi:: CString :: new ( name2) . unwrap ( ) ;
180+ let value = std:: ffi:: CString :: new ( value) . unwrap ( ) ;
181+ unsafe {
182+ tcl_sys:: Tcl_SetVar2 ( self . 0 . as_ptr ( ) , name1. as_ptr ( ) , name2. as_ptr ( ) , value. as_ptr ( ) , flags) as i32
183+ }
184+ }
185+
186+ pub fn set_var2_obj ( & mut self , name1 : & str , name2 : & str , obj : Obj , flags : i32 ) -> i32 {
187+ let name1 = std:: ffi:: CString :: new ( name1) . unwrap ( ) ;
188+ let name2 = std:: ffi:: CString :: new ( name2) . unwrap ( ) ;
189+ unsafe {
190+ tcl_sys:: Tcl_SetVar2Ex ( self . 0 . as_ptr ( ) , name1. as_ptr ( ) , name2. as_ptr ( ) , obj. 0 . as_ptr ( ) , flags) as i32
191+ }
192+ }
88193}
89194
90195impl Drop for Interp {
0 commit comments