From c4cd1e2c165c4f34ebf67fa9350f8732b2aeca13 Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Tue, 4 Jun 2024 16:25:32 -0600 Subject: Updated the way built-in commands are called/used Previously, built-in commands were fairly primitive, merely outputting STDOUT and STDERR with the print! macros. However, we need them to behave like normal programs, that is: - Acknowledge their verse's meter (forking, piping, etc.), - Ability to capture STDOUT and STDERR (>, 2>), - and Affect the currently running environment. For these reasons, the anthology was reworked, and now contains the Anthology struct, which mimics both std::process::{Child, Command}. The AnthologyStdin helper struct was also created, for built-ins to take input on STDIN, though no built-in is currently using it. Each built-ins' incant functions were updated to return a std::process::Output. It contains output from STDOUT, output from STDERR, and the exit code of the "process". A fix was also implemented for aliases, where the STDOUT and STDERR vectors were not being copied to the newly constructed verse. --- src/poem/anthology/exit.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/poem/anthology/exit.rs') diff --git a/src/poem/anthology/exit.rs b/src/poem/anthology/exit.rs index 46fe13c..6bbaa33 100644 --- a/src/poem/anthology/exit.rs +++ b/src/poem/anthology/exit.rs @@ -1,4 +1,5 @@ use std::process::exit; +use std::process::Output; /// exit /// @@ -7,6 +8,6 @@ use std::process::exit; /// # Aliases /// * exit /// * quit -pub fn incant() -> i32 { +pub fn incant() -> Output { exit(0); } -- cgit v1.2.3