From 291bbe6287297fa6f41738f758b158f4eaafd784 Mon Sep 17 00:00:00 2001 From: justuser-31 Date: Fri, 14 Feb 2025 17:30:45 +0300 Subject: [PATCH] up --- demo.sh | 11 ++++++ rtracker | Bin 0 -> 19056 bytes rtracker.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test | 0 4 files changed, 123 insertions(+) create mode 100755 demo.sh create mode 100755 rtracker create mode 100644 rtracker.c create mode 100644 test diff --git a/demo.sh b/demo.sh new file mode 100755 index 0000000..3b8398c --- /dev/null +++ b/demo.sh @@ -0,0 +1,11 @@ +#!/bin/bash +shopt -s expand_aliases + +alias rt="./rtracker" + +rt Testing sleep... \ + % sleep 3 +rt Hello world? \ + %o echo Hello world +rt Producing some error \ + % rm not_exist diff --git a/rtracker b/rtracker new file mode 100755 index 0000000000000000000000000000000000000000..002bcbd6742cdd82d01f55c82f200f5f1d971cfc GIT binary patch literal 19056 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 literal 0 HcmV?d00001 diff --git a/rtracker.c b/rtracker.c new file mode 100644 index 0000000..09cf928 --- /dev/null +++ b/rtracker.c @@ -0,0 +1,112 @@ +#include +#include +#include +#include +#include + +#include "c_cross_pack/libs/threads.h" + +char comment[1000] = ""; +char command[10000] = ""; + +// Out of command execution +char out[1000][100]; +int out_i = 0; + +bool runCommand(char* command) { + FILE *fp; + char path[1024]; + int status; + + // Combine stdout and stderr using 2>&1 + char fullCommand[1024]; + snprintf(fullCommand, sizeof(fullCommand), "%s 2>&1", command); + + /* Open the command for reading. */ + fp = popen(fullCommand, "r"); + if (fp == NULL) { + printf("Failed to run command\n"); + return false; + } + + /* Read the output a line at a time and store it in the out array */ + while (fgets(path, sizeof(path), fp) != NULL) { + strncpy(out[out_i], path, 100); + out[out_i][99] = '\0'; // Ensure null termination + out_i++; + if (out_i >= 1000) { + break; // Prevent overflow + } + } + + /* Close */ + status = pclose(fp); + + /* Check the return status of the command */ + if (WIFEXITED(status)) { + int exit_status = WEXITSTATUS(status); + if (exit_status != 0) { + return false; // Command failed + } + } else { + return false; // Command did not exit normally + } + + return true; +} + +void* loadAnim() { + char anim[] = {'-', '\\', '|', '/'}; + while (true) { + for (size_t i = 0; i < sizeof(anim)/sizeof(anim[0]); i++) { + printf("\r[\033[1;33m%c\033[1;0m] %s", anim[i], comment); + fflush(stdout); + usleep(100 * 1000); // 100 ms + } + } +} + +void getOut() { + for (int i = 0; i <= out_i; i++) { + printf("%s", out[i]); + } +} + +int main(int argc, char **argv) { + bool isCommand = false; + bool forceOut = false; + for(int i = 1; i < argc; i++) { + if (isCommand == false) { + if (strcmp(argv[i], "%o") == 0) { + isCommand = true; + forceOut = true; + } else if (strcmp(argv[i], "%") == 0) { + isCommand = true; + } else { + strcat(comment, argv[i]); + strcat(comment, " "); + } + } else { + strcat(command, argv[i]); + strcat(command, " "); + } + } + + void* thread_handle; + start_thread(&thread_handle, loadAnim); + if (runCommand(command)) { + kill_thread(thread_handle); + printf("\r[\033[1;32m🗸\033[1;0m] %s\n", comment); + if (forceOut == true) { + getOut(); + } + } else { + kill_thread(thread_handle); + printf("\r[\033[1;31m𐄂\033[1;0m] %s\n", comment); + // Get out of failed command + getOut(); + return 1; + } + + return 0; +} diff --git a/test b/test new file mode 100644 index 0000000..e69de29