diff -ruN kozos20/i386-stub.c kozos21/i386-stub.c --- kozos20/i386-stub.c Sat Nov 24 09:58:09 2007 +++ kozos21/i386-stub.c Sat Nov 24 11:35:14 2007 @@ -1015,6 +1015,69 @@ ptr = intNToHex(ptr, (int)gen_thread->id, 4); } break; + case 'P': + { + int mode; + unsigned int threadid[2]; + kz_thread *thp; + +#define TAG_THREADID 1 +#define TAG_EXISTS 2 +#define TAG_DISPLAY 4 +#define TAG_THREADNAME 8 +#define TAG_MOREDISPLAY 16 + mode = hexToIntN(&ptr, 4); + threadid[0] = hexToIntN(&ptr, 4); + threadid[1] = hexToIntN(&ptr, 4); + thp = (kz_thread *)threadid[1]; + + ptr = remcomOutBuffer; + *ptr++ = 'Q'; + *ptr++ = 'P'; + ptr = intNToHex(ptr, mode, 4); + ptr = intNToHex(ptr, threadid[0], 4); + ptr = intNToHex(ptr, threadid[1], 4); + + if (mode & TAG_THREADID) { + ptr = intNToHex(ptr, TAG_THREADID, 4); /* mode */ + ptr = intNToHex(ptr, 16, 1); /* length */ + ptr = intNToHex(ptr, threadid[0], 4); + ptr = intNToHex(ptr, threadid[1], 4); + } + if (mode & TAG_EXISTS) { + ptr = intNToHex(ptr, TAG_EXISTS, 4); /* mode */ + ptr = intNToHex(ptr, 1, 1); /* length */ + *ptr++ = '1'; + } + if (mode & TAG_DISPLAY) { + ptr = intNToHex(ptr, TAG_DISPLAY, 4); /* mode */ + ptr = intNToHex(ptr, 3, 1); /* length */ + { + kz_thread *thp2; + strcpy(ptr, "SLP"); + for (thp2 = readyque[thp->pri]; thp2; thp2 = thp2->next) { + if (thp == thp2) { + strcpy(ptr, "RUN"); + break; + } + } + ptr += strlen(ptr); + } + } + if (mode & TAG_THREADNAME) { + ptr = intNToHex(ptr, TAG_THREADNAME, 4); /* mode */ + ptr = intNToHex(ptr, strlen(thp->name), 1); /* length */ + strcpy(ptr, thp->name); + ptr += strlen(thp->name); + } + if (mode & TAG_MOREDISPLAY) { + ptr = intNToHex(ptr, TAG_MOREDISPLAY, 4); /* mode */ + ptr = intNToHex(ptr, 2, 1); /* length */ + ptr = intNToHex(ptr, thp->pri, 1); + } + *ptr = '\0'; + } + break; default: break; } diff -ruN kozos20/thread.h kozos21/thread.h --- kozos20/thread.h Sat Nov 24 09:58:09 2007 +++ kozos21/thread.h Sat Nov 24 11:26:13 2007 @@ -40,6 +40,7 @@ } kz_thread; extern kz_thread threads[THREAD_NUM]; +extern kz_thread *readyque[PRI_NUM]; extern kz_thread *current; extern sigset_t block;