@@ -15,6 +15,16 @@ impl Interp {
1515 Interp ( NonNull :: new ( interp) . unwrap ( ) )
1616 }
1717
18+ pub unsafe fn as_ptr ( & self ) -> * mut tcl_sys:: Tcl_Interp {
19+ self . 0 . as_ptr ( )
20+ }
21+
22+ pub fn init ( & mut self ) -> i32 {
23+ unsafe {
24+ tcl_sys:: Tcl_Init ( self . 0 . as_ptr ( ) ) as i32
25+ }
26+ }
27+
1828 pub fn create_slave ( & mut self , name : & str , is_safe : i32 ) -> Self {
1929 let name = std:: ffi:: CString :: new ( name) . unwrap ( ) ;
2030 let interp = unsafe {
@@ -36,26 +46,44 @@ impl Interp {
3646 }
3747
3848 pub unsafe fn get_obj_result ( & self ) -> Obj {
39- Obj :: from_raw ( tcl_sys:: Tcl_GetObjResult ( self . 0 . as_ptr ( ) ) )
49+ unsafe {
50+ Obj :: from_raw ( tcl_sys:: Tcl_GetObjResult ( self . 0 . as_ptr ( ) ) )
51+ }
52+ }
53+
54+ 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 ( )
4060 }
4161
4262 pub unsafe fn eval ( & self , script : & str ) -> i32 {
4363 let script = std:: ffi:: CString :: new ( script) . unwrap ( ) ;
44- tcl_sys:: Tcl_Eval ( self . 0 . as_ptr ( ) , script. as_ptr ( ) ) as i32
64+ unsafe {
65+ tcl_sys:: Tcl_Eval ( self . 0 . as_ptr ( ) , script. as_ptr ( ) ) as i32
66+ }
4567 }
4668
4769 pub unsafe fn eval_ex ( & self , script : & str , num_bytes : i32 , flags : i32 ) -> i32 {
4870 let script = std:: ffi:: CString :: new ( script) . unwrap ( ) ;
49- tcl_sys:: Tcl_EvalEx ( self . 0 . as_ptr ( ) , script. as_ptr ( ) , num_bytes, flags) as i32
71+ unsafe {
72+ tcl_sys:: Tcl_EvalEx ( self . 0 . as_ptr ( ) , script. as_ptr ( ) , num_bytes, flags) as i32
73+ }
5074 }
5175
5276 pub unsafe fn eval_obj ( & self , obj : Obj ) -> i32 {
53- tcl_sys:: Tcl_EvalObj ( self . 0 . as_ptr ( ) , obj. 0 . as_ptr ( ) ) as i32
77+ unsafe {
78+ tcl_sys:: Tcl_EvalObj ( self . 0 . as_ptr ( ) , obj. 0 . as_ptr ( ) ) as i32
79+ }
5480 }
5581
5682 pub unsafe fn eval_file ( & self , filename : & str ) -> i32 {
5783 let filename = std:: ffi:: CString :: new ( filename) . unwrap ( ) ;
58- tcl_sys:: Tcl_EvalFile ( self . 0 . as_ptr ( ) , filename. as_ptr ( ) ) as i32
84+ unsafe {
85+ tcl_sys:: Tcl_EvalFile ( self . 0 . as_ptr ( ) , filename. as_ptr ( ) ) as i32
86+ }
5987 }
6088}
6189
0 commit comments