#include /** ** User function Q: exit, write, bogus ** ** Reports itself, then tries to execute a bogus system call ** ** Invoked as: userQ x ** where x is the ID character */ USERMAIN( main ) { char ch = 'q'; // default character to print char buf[128]; // process the command-line arguments switch( argc ) { case 2: ch = argv[1][0]; break; default: sprint( buf, "userQ: 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 write( CHAN_SIO, &ch, 1 ); // try something weird bogus(); // should not have come back here! sprint( buf, "!!!!! %c returned from bogus syscall!?!?!\n", ch ); cwrites( buf ); exit( 1 ); return( 42 ); // shut the compiler up! }