From 38a04660edcb595429a7a207fcffc903d846542a Mon Sep 17 00:00:00 2001 From: Ren Kararou Date: Thu, 18 May 2023 15:00:56 -0400 Subject: The Initial Commit --- usr/src/mei/echo/Cargo.toml | 12 ++++++ usr/src/mei/echo/src/main.rs | 90 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 usr/src/mei/echo/Cargo.toml create mode 100644 usr/src/mei/echo/src/main.rs (limited to 'usr/src/mei/echo') diff --git a/usr/src/mei/echo/Cargo.toml b/usr/src/mei/echo/Cargo.toml new file mode 100644 index 0000000..0b34ec5 --- /dev/null +++ b/usr/src/mei/echo/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "echo" +version = "0.1.0" +edition = "2021" + +[[bin]] +name = "echo" +path = "src/main.rs" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/usr/src/mei/echo/src/main.rs b/usr/src/mei/echo/src/main.rs new file mode 100644 index 0000000..ad5eee9 --- /dev/null +++ b/usr/src/mei/echo/src/main.rs @@ -0,0 +1,90 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2023 Ren Kararou All rights reserved. + * Use is subject to license terms. + */ + +use std::env; + +fn main() { + let print: String = env::args().skip(1).collect::>().join(" "); + // This does not currently mimic functionality of illumos echo + if print.is_empty() { + println!(""); + } else { + println!("{print}"); + } + + // This mimics illumos echo functionality, or it should + /* + let mut esc: bool = false; + let mut is_num: bool = false; + let mut oct: String = "".to_string(); + let mut oc: u8 = 0; + + for c in print.chars() { + if !esc { + if c == '\\' { + esc = true; + } else { + print!("{c}"); + } + } else { + match c { + // "unknown character escape" wtf rust these are valid. + //'a' => print!("\a"), + //'b' => print!("\b"), + //'c' => print!("\c"), + //'f' => print!("\f"), + 'n' => print!("\n"), + 'r' => print!("\r"), + 't' => print!("\t"), + //'v' => print!("\v"), + '\\' => print!("\\"), + '0' => is_num = true, + _ => print!("\\{c}"), + } + if is_num { + if oc < 3 { + oct.push(c); + oc = oc + 1; + } + if oc == 2 { + match u32::from_str_radix(oct.as_str(), 8) { + Ok(chr) => print!("{}", chr), + Err(_) => print!("\\0{}", oct), + } + is_num = false; + oct = "".to_string(); + oc = 0; + esc = false; + } + } else { + esc = false; + } + } + } + print!("\n"); + */ +} -- cgit 1.4.1-2-gfad0