Hi!
I posted rather big patch to this list, but got no reply. Does it mean
that it was silently applied, or silently discarded, or silently lost
by mail?
I believe everything in here is Right Think (tm), with possible
exception of turning arrows from ^[[.. into ^f, ^b, ^p, ^n. As
termcaps are not too working, yet, it seemed to me like least-force
solution - ignore hunk @@ -113,26 +124,29 @@ from isr.c if you want.
                                                        Pavel
Anyway, here it is:
diff -ur vsta.old/src/os/dbg/dbgmain.c /c/vsta/src/os/dbg/dbgmain.c
--- vsta.old/src/os/dbg/dbgmain.c	Sun Oct  8 21:49:46 1995
+++ /c/vsta/src/os/dbg/dbgmain.c	Mon Oct 27 20:05:34 1997
@@ -8,7 +8,7 @@
 extern void dump_phys(), dump_virt(), dump_procs(), dump_pset(),
         dump_instr(), trace(), trapframe(), dump_vas(), dump_port(),
         dump_pview(), dump_thread(), dump_ref(), reboot(), memleaks(),
-	dump_sysmsg(), dump_core();
+	dump_sysmsg(), dump_core(), help();
 extern void dbg_inport(), dbg_outport();
 static void quit(), calc(), set(), set_mem();
 extern int get_num();
@@ -46,6 +46,7 @@
         "trace", trace,
         "vas", dump_vas,
         "writemem", set_mem,
+	"?", help,
         0, 0
 };
 
@@ -137,6 +138,20 @@
         x = get_num(str);
         printf("%s 0x%x %d\n", symloc(x), x, x);
 }
+/*
+ * help()
+ *	List all commands
+ */
+static void
+help(void)
+{
+	int x;
+	
+	printf( "Available commands: " );
+	for (x = 0; cmdtab[x].c_name; ++x)
+		printf( "%s ", cmdtab[x].c_name );
+	printf( "\n" );
+}
 
 /*
  * do_cmd()
@@ -161,7 +176,7 @@
                 }
         }
         if (matches == 0) {
-		printf("No such command\n");
+		printf("No such command (type ? for help)\n");
                 return;
         }
         if (matches > 1) {
diff -ur vsta.old/src/os/kern/proc.c /c/vsta/src/os/kern/proc.c
--- vsta.old/src/os/kern/proc.c	Mon Apr  8 18:31:30 1996
+++ /c/vsta/src/os/kern/proc.c	Mon Oct 27 13:29:40 1997
@@ -26,7 +26,8 @@
 extern lock_t runq_lock;
 
-ulong npid_free = (ulong)-1;	/* # PIDs free in pool */
+ulong npid_free = (ulong)-2;	/* # PIDs free in pool */
-ulong pid_nextfree = 0L;	/* Next free PID number */
+ulong pid_nextfree = 1L;	/* Next free PID number */
+				/* We got to use 1 or process #0 is unkillable */
 struct proc *allprocs = 0;	/* List of all procs */
 sema_t pid_sema;		/* Mutex for PID pool and proc lists */
 
diff -ur vsta.old/src/srv/mach/cons2/isr.c /c/vsta/src/srv/mach/cons2/isr.c
--- vsta.old/src/srv/mach/cons2/isr.c	Tue Jan 30 08:32:36 1996
+++ /c/vsta/src/srv/mach/cons2/isr.c	Tue Oct 28 20:30:12 1997
@@ -12,6 +12,9 @@
         capstoggle = 0,	/* For toggling effect of CAPS */
         numtoggle = 0,	/*  ...NUM lock */
         isE0 = 0;	/* Prefix for extended keys (FN1, etc.) */
+	
+#define C( x ) x & 0x1f	/* Turn key into ctrl-one */
+#define M( x ) x | 0x80 /* Turn key into meta key, do not use for 0 */
 
 /* Map scan codes to ASCII, one table for normal, one for shifted */
 static char normal[] = {
@@ -82,11 +85,19 @@
 #endif
 
         /*
+	 * Meta keys are badly needed - if Alt is pressed,
+	 * it sends ESC before actual character.
+	 */
+
+	if (alt || (ch&0x80))
+		kbd_enqueue(s, 033);
+		
+	/*
          * Hand off straight data now.  The keyboard always enters
          * data for the virtual screen currently being displayed
          * on the hardware screen.
          */
-	kbd_enqueue(s, ch);
+	kbd_enqueue(s, ch&0x7f);
 }
 
 /*
@@ -113,26 +124,29 @@
 static int
 cursor_key(struct screen *s, uchar c)
 {
-	char *cp;
+	char buf[5];
+	char *cp = buf;
+	cp[0] = ' ';
+	cp[1] = 0;
 
         switch (c) {
         case 72:	/* up */
-		cp = "\033OA";
+		cp[0] = C('p');
                 break;
         case 80:	/* down */
-		cp = "\033OB";
+		cp[0] = C('n');
                 break;
         case 77:	/* right */
-		cp = "\033OC";
+		cp[0] = C('f');
                 break;
         case 75:	/* left */
-		cp = "\033OD";
+		cp[0] = C('b');
                 break;
         case 73:	/* pg up */
-		cp = "\033[5~";
+		cp = "\033v";
                 break;
         case 81:	/* pg down */
-		cp = "\033[6~";
+		cp[0] = C('v');
                 break;
         case 82:	/* insert */
                 cp = "\033[2~";
@@ -172,46 +186,11 @@
 {
         char *p;
 
-	switch (c) {
-	case 59:	/* F1 */
-		p = "\033OP";
-		break;
-	case 60:	/* F2 */
-		p = "\033OQ";
-		break;
-	case 61:	/* F3 */
-		p = "\033OR";
-		break;
-	case 62:	/* F4 */
-		p = "\033OS";
-		break;
-	case 63:	/* F5 */
-		p = "\033OT";
-		break;
-	case 64:	/* F6 */
-		p = "\033OU";
-		break;
-	case 65:	/* F7 */
-		p = "\033OV";
-		break;
-	case 66:	/* F8 */
-		p = "\033OW";
-		break;
-	case 67:	/* F9 */
-		p = "\033OX";
-		break;
-	case 68:	/* F10 */
-	case 87:	/* F11 */
-	case 88:	/* F12 */
-		p = 0;
-		break;
-	default:
-		return 0;
-	}
-	if (p) {
-		enqueue_string(s, p);
-	}
-	return(1);
+	if ((c<59) || (c>68)) return 0;
+	p = "\033Q?";
+	p[2] = 'P'+c-59;
+	enqueue_string(s, p);
+	return 1;
 }
 
 /*
diff -ur vsta.old/src/srv/mach/wd/wd.c /c/vsta/src/srv/mach/wd/wd.c
--- vsta.old/src/srv/mach/wd/wd.c	Thu Oct 12 07:09:46 1995
+++ /c/vsta/src/srv/mach/wd/wd.c	Wed Oct 29 21:37:52 1997
@@ -376,10 +376,13 @@
          * For laptops with power management, our inportb() here can
          * cause the disk to wake up; the controller can then flag
          * a busy disk until the spinup is complete.  Give it 5 seconds.
+	 *
+	 * I feel that 5 seconds is not enough. (My drive takes about
+	 * 6, my other drive is even slower).
          */
         cyl = 0;
         while (inportb(base + WD_STATUS) & WDS_BUSY) {
-		if (++cyl > 50) {
+		if (++cyl > 150) {
                         ASSERT(0, "wd_start: busy");
                 }
                 __msleep(100);
-- I'm really pavel@atrey.karlin.mff.cuni.cz. Pavel Look at http://atrey.karlin.mff.cuni.cz/~pavel/ ;-).Received on Thu Nov 13 23:55:31 1997
This archive was generated by hypermail 2.1.8 : Thu Sep 22 2005 - 15:12:43 PDT