// vim: set noet ts=4 sw=4: #include "appl.h" #include "../../syscall/stub.h" #include "../../arch/core.h" #include "../../arch/system.h" #include "../../debug/output.h" #include "../../device/textstream.h" #include "../../interrupt/guard.h" #include "../../sync/semaphore.h" #include "../../thread/scheduler.h" extern Semaphore koutsem; extern TextStream kout; extern Application apps[]; void Application::action() { // NOLINT // Thread 1 may be an auxiliary thread sys_test(1,2,3,4,5); unsigned id = 0; while (&apps[id++] != this); for (unsigned i = 0;; ++i) { //// Make sure that we can use kout exclusively due to the hardware cursor //// otherwise we'd get a word jumble //koutsem.p(Guard::enter().vault()); //kout.setPos(0U, id); //kout << i; //kout.flush(); //koutsem.v(Guard::enter().vault()); //// XXX: Doing this (the first time) in TASK 16 breaks all scheduling //if (i == 10000) { // if (id % 2 == 1) { // Guard::enter().vault().scheduler.kill(&apps[id - 1]); // } //} //Guard::enter().vault().scheduler.resume(); //if (id > 1) { // Guarded g = Guard::enter(); // g.vault().bellringer.sleep(g.vault(), id * id * 10); //} } }