From 6af21e6a4f2251e71353562d5df7f376fdffc270 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 25 Mar 2025 17:36:52 -0400 Subject: initial checkout from wrc --- user/progX.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 user/progX.c (limited to 'user/progX.c') diff --git a/user/progX.c b/user/progX.c new file mode 100644 index 0000000..ed356b9 --- /dev/null +++ b/user/progX.c @@ -0,0 +1,48 @@ +#include + +/** +** User function X: exit, write, getpid +** +** Prints its PID at start and exit, iterates printing its character +** N times, and exits with a status of 12. +** +** Invoked as: userX x n +** where x is the ID character +** n is the iteration count +*/ + +USERMAIN( main ) { + int count = 20; // iteration count + char ch = 'x'; // default character to print + char buf[128]; + + // process the command-line arguments + switch( argc ) { + case 3: count = str2int( argv[2], 10 ); + // FALL THROUGH + case 2: ch = argv[1][0]; + break; + default: + sprint( buf, "userX: argc %d, args: ", argc ); + cwrites( buf ); + for( int i = 0; i <= argc; ++i ) { + sprint( buf, " %s", argv[argc] ? argv[argc] : "(null)" ); + cwrites( buf ); + } + cwrites( "\n" ); + } + + // announce our presence + int pid = getpid(); + sprint( buf, " %c[%d]", ch, pid ); + swrites( buf ); + + for( int i = 0; i < count ; ++i ) { + swrites( buf ); + DELAY(STD); + } + + exit( 12 ); + + return( 42 ); // shut the compiler up! +} -- cgit v1.2.3-freya