From cf1ff9a96e6577b7960879d145b1da9343938c8e Mon Sep 17 00:00:00 2001 From: vxclutch Date: Sun, 3 May 2026 12:24:22 -0400 Subject: [PATCH] idek --- include/tcpl/tcpl.h | 26 ++++++++++++++++----- lib/print.c | 34 +++++++++++++++++++++++++--- lib/print.h | 22 ++++++++++++++++-- src/main.c | 13 +++++++---- t/basic | 7 ++++++ t/lib.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 143 insertions(+), 14 deletions(-) create mode 100755 t/basic mode change 100644 => 100755 t/lib.sh diff --git a/include/tcpl/tcpl.h b/include/tcpl/tcpl.h index f599c99..3d92f08 100644 --- a/include/tcpl/tcpl.h +++ b/include/tcpl/tcpl.h @@ -1,10 +1,26 @@ +/* tcpl.h: global header for the tcpl project. + Copyright (C) vxclutch 2026 + +Written by vxclutch + +This file is part of tcpl + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. */ #ifndef TCPL_TCPL_H #define TCPL_TCPL_H -/* - * This is a header file to be included into every source file that comprises - * this project. - * Do #include - */ +/* This is a header file to be included into every source file that comprises +this project. +Do #include */ #define unused (void) diff --git a/lib/print.c b/lib/print.c index 0ed141c..993faf3 100644 --- a/lib/print.c +++ b/lib/print.c @@ -1,10 +1,38 @@ +/* print.c: print functions for tcpl. + Copyright (C) vxclutch 2026 + +Written by vxclutch + +This file is part of tcpl + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. */ + #include "print.h" #include +#include #include -char *arg0 = ""; +char* arg0 = ""; -int tcpl_print(char* s) +int tcpl_print(char* fmt, ...) { - return printf("%s: %s\n", arg0, s); + va_list ap; + va_start(ap, fmt); + + printf("%s: ", arg0); + int ln = vprintf(fmt, ap); + putc('\n', stdout); + + va_end(ap); + return ln; } diff --git a/lib/print.h b/lib/print.h index f5ca3bd..faeb83f 100644 --- a/lib/print.h +++ b/lib/print.h @@ -1,10 +1,28 @@ +/* print.h: print functions for tcpl. + Copyright (C) vxclutch 2026 + +Written by vxclutch + +This file is part of tcpl + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. */ #ifndef TCPL_PRINT_H #define TCPL_PRINT_H /* * Define the print functions for this project */ -extern char *arg0; -int tcpl_print(char* s); +extern char* arg0; +int tcpl_print(char* fmt, ...); #endif diff --git a/src/main.c b/src/main.c index 7056db2..4b579ea 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,5 @@ /* main.c: defines the entry point for tcpl. - Copyright (C) vxclutch + Copyright (C) vxclutch 2026 Written by vxclutch @@ -22,9 +22,14 @@ PERFORMANCE OF THIS SOFTWARE. */ int main(int argc, char** argv) { - unused argc; - arg0 = basename(argv[0]); - tcpl_print("Hello, World!"); + + if (argc < 2) + tcpl_print("Hello, World!"); + else { + for (int i = 1; i < argc; ++i) { + tcpl_print("Hello, %s!", argv[i]); + } + } return 0; } diff --git a/t/basic b/t/basic new file mode 100755 index 0000000..5c4e312 --- /dev/null +++ b/t/basic @@ -0,0 +1,7 @@ +#!/bin/sh + +. t/lib.sh + +check "" "tcpl: Hello, World!" +check "foo" "tcpl: Hello, foo!" +check "oo" "tcpl: Hello, foo!" diff --git a/t/lib.sh b/t/lib.sh old mode 100644 new mode 100755 index e69de29..80611a0 --- a/t/lib.sh +++ b/t/lib.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +scriptversion="1" +me=$(basename "$0") +version="$me/vxc v$scriptversion +Copyright (C) 2026 vxc. +This is free software; you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law." + +usage="Usage: $me [OPTION]... +Does a thing + +Options: +--help print this help and exit +--version output version information" + +while [ $# -gt 0 ]; do + case $1 in + --help) echo "$usage"; exit 0 ;; + --version) echo "$version"; exit 0 ;; + -*) echo "$me: Unknown option '$1'." >&2; exit 1 ;; + *) break ;; + esac + shift +done + +width=$(tput cols 2>/dev/null || echo 80) + +INFO="\e[0;34m" +RESET="\e[0m" +OK="\e[0;32m" +BAD="\e[0;31m" + +good() { + printf "%$((${width}))s\r%s...\n" "$(echo -e "$INFO[ ${OK}ok $INFO]$RESET")" "$1" +} + +fail() { + printf "%$((${width}))s\r%s...\n" "$(echo -e "$INFO[${BAD}fail$INFO]$RESET")" "$1" +} + +make -s + +check() { + expected=$2 + output=$(./tcpl $1) || { fail "$1 (execution failed)"; return 1; } + + if [ "$output" = "$expected" ]; then + good "./tcpl $1" + return 0 + else + fail "./tcpl $1: unexpected: $output; wanted: $expected" + return 1 + fi +}