// progtest.cc // Test routines for demonstrating that Nachos can load // a user program and execute it. // // Also, routines for testing the Console hardware device. // // Copyright (c) 1992-1993 The Regents of the University of California. // All rights reserved. See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions. #include "console.h" #include "synch.h" // Data structures needed for the console test. Threads making // I/O requests wait on a Semaphore to delay until the I/O completes. static Console *console; static Semaphore *readAvail; static Semaphore *writeDone; //---------------------------------------------------------------------- // ConsoleInterruptHandlers // Wake up the thread that requested the I/O. //---------------------------------------------------------------------- static void ReadAvail(int arg) { readAvail->V(); } static void WriteDone(int arg) { writeDone->V(); } //---------------------------------------------------------------------- // ConsoleTest // Test the console by echoing characters typed at the input onto // the output. Stop when the user types a 'q'. //---------------------------------------------------------------------- void ConsoleTest (char *in, char *out) { char ch; console = new Console(in, out, ReadAvail, WriteDone, 0); readAvail = new Semaphore("read avail", 0); writeDone = new Semaphore("write done", 0); for (;;) { readAvail->P(); // wait for character to arrive ch = console->GetChar(); console->PutChar(ch); // echo it! writeDone->P() ; // wait for write to finish if (ch == 'q') return; // if q, quit } }