|
| 1 | +use std::ffi::{CStr, CString}; |
| 2 | + |
| 3 | +fn main() { |
| 4 | + // readline |
| 5 | + let mut var1 = String::new(); |
| 6 | + std::io::stdin() |
| 7 | + .read_line(&mut var1) |
| 8 | + .expect("Failed to read line"); |
| 9 | + let mut var2 = String::new(); |
| 10 | + std::io::stdin() |
| 11 | + .read_line(&mut var2) |
| 12 | + .expect("Failed to read line"); |
| 13 | + let var1 = var1.trim(); |
| 14 | + let var2 = var2.trim(); |
| 15 | + println!("var1: {}", var1); |
| 16 | + println!("var2: {}", var2); |
| 17 | + let var1 = CString::new(var1).unwrap(); |
| 18 | + let var2 = CString::new(var2).unwrap(); |
| 19 | + let var2 = if var2.is_empty() { |
| 20 | + std::ptr::null() |
| 21 | + } else { |
| 22 | + var2.as_ptr() |
| 23 | + }; |
| 24 | + unsafe { |
| 25 | + let interp = tcl_sys::Tcl_CreateInterp(); |
| 26 | + tcl_sys::Tcl_Init(interp); |
| 27 | + let out = tcl_sys::Tcl_GetVar(interp, var1.as_ptr() as _, tcl_sys::TCL_LEAVE_ERR_MSG as _); |
| 28 | + if out.is_null() { |
| 29 | + let err_obj = tcl_sys::Tcl_GetObjResult(interp); |
| 30 | + let err_msg = tcl_sys::Tcl_GetString(err_obj); |
| 31 | + let err = CStr::from_ptr(err_msg as _); |
| 32 | + println!("Variable not found: {err:?}"); |
| 33 | + } else { |
| 34 | + println!("Variable found"); |
| 35 | + let converted_string = CStr::from_ptr(out as _); |
| 36 | + println!("{converted_string:?}"); |
| 37 | + } |
| 38 | + let res = tcl_sys::Tcl_GetVar2Ex(interp, var1.as_ptr() as _, var2 as _, tcl_sys::TCL_LEAVE_ERR_MSG as _); |
| 39 | + if res.is_null() { |
| 40 | + let err_obj = tcl_sys::Tcl_GetObjResult(interp); |
| 41 | + let err_msg = tcl_sys::Tcl_GetString(err_obj); |
| 42 | + let err = CStr::from_ptr(err_msg as _); |
| 43 | + println!("Variable not found: {err:?}"); |
| 44 | + } else { |
| 45 | + println!("Variable found"); |
| 46 | + let string = tcl_sys::Tcl_GetString(res); |
| 47 | + let converted_string = CStr::from_ptr(string as _); |
| 48 | + println!("{converted_string:?}"); |
| 49 | + } |
| 50 | + } |
| 51 | +} |
0 commit comments