hannam@elec.uq.oz (Andrew Hannam) (10/20/88)
I have lost news feed for about the last month and so Ive missed a lot of comments on my new tty driver. From the ones I have caught and read here is a short (??) answer ... (+ some improvments, fixes & comments) 1/ Yes, it really does work on EGA cards properly ! 2/ Yes, it is a lot of recompiling. I have included below a fix that allows it to be compatable with the old ioctl definitions (and the new). This should save a lot of recompiling. The speed and bit count fields are still different however, so any program that uses these will still need to be redefined. Just compile the 3 tty driver files with OLD_IOCTL defined. Note: any new programs can be compiled without OLD_IOCTL as the tty driver should recognize both - eventually this define can hopefully be removed and only the new ioctl method used. 3/ I am heavily opposed to software scroll - it makes life on XTs unbearable. It steals too many CPU cycles. Please remove this altogether even if you can't accept my tty driver as simply being a better driver. It also removes heaps of code from the tty driver to not support software scroll. 4/ Another area of concern in the V1.3 driver is that it is does expansion seperately for the console and the rs232 lines. This is unnecessary repetition. The rs232 driver sometimes even does this expansion in the Interrupt handler ! Not a good idea at all. 5/ There are still the bugs in V1.3 as listed in my original release. Having seen a couple of diffs by Charles Hendrick to the V1.3c driver (although Ive not seen the driver itself) it would appear that they still exist in V1.3c. Why the V1.3 driver is still being supported with all of its problems (mainly due to implementation philosophy) is beyond me. 6/ Besides the advantage of being smaller, my tty driver offers many advantages: a) It support EGA without software scrolling or becoming too device dependant, b) It supports a large ANSI set - atleast as large as Charles H's. c) It has switchable Line Wrap ("ESC [ 4 h" turns it on "ESC [ 4 l" turns it off). This is better than making it compile time dependant. d) Function Key and Arrow Key Macros (programmable only at compile time at present). e) It has rs232 flow control (I hope V1.3c has this). f) Addition of extra Keyboard formats is much simpler than in the original tty drivers. g) Both rs232 and console code is faster h) It fixes the bugs in the V1.3 driver as listed in my initial release. 7/ I prefer the method suggested by Charles Hendrick of doing a softcopy of the screen when it exceeds the screen length rather than the method I have used here. Think about the case where say vi starts half-way accross the screen boundary - every write has to be written twice to screen memory as opposed to once for his method. As he stated - they both generate the same amount of screen writing under normal circumstances. Perhaps a later version of this code will fix it - the degradation in performance this way is unnoticable so I think I'll leave it at present though. 8/ A Couple of people have mentioned to me that they have had trouble with buffer.h and its reliance on non-portable expansion techneques. If I recieve enough mail in about the next 2 weeks over it, I will rewrite it specifically for this tty driver and repost it. Buffer.h was stripped from other code I have written and hence is very general purpose (provided your pre-processor handles it). Its replacement (if necessary) will not be. In the mean time - the non-portable sections are seldom used and hence can be expanded by hand. Anyone who is using this new tty driver or is going to ... Please mail and tell me (so I can gauge support or otherwise for it) and mention any problems you have had with it. Below is: 1/ A termcap entry (which may have bugs) for my tty driver, 2/ A set of diffs to tty2.c to remove some console driver bugs in the ANSI emulation code, and 3/ The diffs to tty1.c and sgtty.h that give compatability with the old ioctl format. **************************** Cut Here *********************************** echo x - termcap.minix sed 's/^X//' >termcap.minix <<'*-*-END-of-termcap.minix-*-*' Xmi|minix|vt100-min| MINIX console (NEW):\ X :am:bs:bw:mi:ms:xo:km:co#80:li#25:\ X :is=\E[7h\E[4l\E[m:bl=^G:\ X :cd=\E[J:ce=\E[K:cl=\E[H\E[J:\ X :le=^H:ri=^L:up=^K:do=^J:\ X :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:DO=\E[%dB:\ X :ho=\E[H:cm=\E[%i%d;%dH:sf=\ED:sr=\EM:\ X :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\ X :sc=\E7:rc=\E8:\ X :md=\E[1m:mb=\E[5m:mh=\E[4m:mr=\E[7m:me=\E[m:\ X :al=\E[L:AL=\E[%dL:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\ X :im=\E[4h:ei=\E[4l:\ X :kd=\E[B:kr=\E[C:kl=\E[D:ku=\E[A:\ X :kF=\E[T:kR=\E[S:kh=\E[H:kN=\E[U:kP=\E[V:kI=\E[Y:kD=\177:\ X :K1=\E[H:K2=\E[V:K3=\E[G:K4=\E[Y:K5=\E[U:\ X :k#10:k0=\EOS:k1=\EOT:k2=\EOU:k3=\EOV:k4=\EOW:\ X :k5=\EOP:k6=\EOQ:k7=\EOR:k8=\EOX:k9=\EOY:\ X :l0=f1:l1=f2:l2=f3:l3=f4:l4=f5:l5=f6:l6=f7:l7=f8:l8=f9:l9=f10 *-*-END-of-termcap.minix-*-* echo x - tty2.c.diff sed 's/^X//' >tty2.c.diff <<'*-*-END-of-tty2.c.diff-*-*' X763,765c763,766 X< /* This char is not printable but the column has been incremented */ X< /* fix this by decrementing it */ X< tty_struct[CON1].tty_column--; X--- X> /* This char is not printable but the column may have been incremented */ X> /* fix this by decrementing it */ X> if (c >= ' ') X> tty_struct[CON1].tty_column--; X978c979 X< case '@': /* Insert Chars */ X--- X> case '@': /* Insert Blank Chars */ X1000c1001 X< + tty_struct[CON1].tty_column; X--- X> + tty_struct[CON1].tty_column*2; *-*-END-of-tty2.c.diff-*-* echo x - tty1.c.diff sed 's/^X//' >tty1.c.diff <<'*-*-END-of-tty1.c.diff-*-*' X6a7 X> * 20/10/88 - Added support for old V1.3 ioctls through define OLD_IOCTL X740a742 X> * The define OLD_IOCTL gives compatability with both old & new ioctl formats. X750c752,757 X< if (r&IOC_IN) { X--- X> #ifdef OLD_IOCTL X> r &= ~( IOC_IN | IOC_OUT | IOC_VOID ); /* Accept old or new ioctls */ X> m_ptr->TTY_REQUEST = r; X> #else X> if (r&IOC_IN) { X> #endif X793a801 X> #ifndef OLD_IOCTL X802a811 X> #endif X833a843 X> #ifndef OLD_IOCTL X842a853 X> #endif *-*-END-of-tty1.c.diff-*-* echo x - sgtty.h.diff sed 's/^X//' >sgtty.h.diff <<'*-*-END-of-sgtty.h.diff-*-*' X7a8 X> * 20/10/88 - Added Compatability with old V1.3 ioctls by define OLD_IOCTL. X32,35c33,44 X< #define _IOWR(x,y,t) (IOC_OUT | IOC_IN | ('x'<<8) | y) X< #define _IOR(x,y,t) (IOC_OUT | ('x'<<8) | y) X< #define _IOW(x,y,t) (IOC_IN | ('x'<<8) | y) X< #define _IO(x,y) (IOC_VOID | ('x'<<8) | y) X--- X> X> #ifdef OLD_IOCTL X> # define _IOWR(x,y,t) (('x'<<8)|y) X> # define _IOR(x,y,t) (('x'<<8)|y) X> # define _IOW(x,y,t) (('x'<<8)|y) X> # define _IO(x,y,t) (('x'<<8)|y) X> #else X> # define _IOWR(x,y,t) (IOC_OUT | IOC_IN | ('x'<<8) | y) X> # define _IOR(x,y,t) (IOC_OUT | ('x'<<8) | y) X> # define _IOW(x,y,t) (IOC_IN | ('x'<<8) | y) X> # define _IO(x,y) (IOC_VOID | ('x'<<8) | y) X> #endif *-*-END-of-sgtty.h.diff-*-* exit