beattie@netxcom.UUCP (Brian Beattie) (05/29/87)
Below are the diffs for the the tty.c I am currently using on my
Tandy 1000. The things I have changed are:
1). Scan table. (f11 does mined search back, f12 does mined search
forward).
2). Caps lock and num lock now work.
3). I use the scrolling code previously posted.
4). I use (ALT)f1 etc. instead of f1 to dump process table.
----------- cut here -------------
*** tty.c.old Tue May 19 12:40:08 1987
--- tty.c Fri May 29 06:20:15 1987
***************
*** 62,67
#define TAB_SIZE 8 /* distance between tabs */
#define TAB_MASK 07 /* mask for tty_column when tabbing */
#define MAX_OVERRUN 16 /* size of overrun input buffer */
#define ERASE_CHAR '\b' /* default erase character */
#define KILL_CHAR (char) 025 /* default kill character */
--- 62,68 -----
#define TAB_SIZE 8 /* distance between tabs */
#define TAB_MASK 07 /* mask for tty_column when tabbing */
#define MAX_OVERRUN 16 /* size of overrun input buffer */
+ #define T1000 1 /* Tandy 1000 */
#define ERASE_CHAR '\b' /* default erase character */
#define KILL_CHAR (char) 025 /* default kill character */
***************
*** 154,165
/* Scan codes to ASCII for unshifted keys */
PRIVATE char unsh[] = {
! 0,033,'1','2','3','4','5','6', '7','8','9','0','-','=','\b','\t',
! 'q','w','e','r','t','y','u','i', 'o','p','[',']',015,0202,'a','s',
! 'd','f','g','h','j','k','l',';', 047,0140,0200,0134,'z','x','c','v',
! 'b','n','m',',','.','/',0201,'*', 0203,' ',0204,0241,0242,0243,0244,0245,
! 0246,0247,0250,0251,0252,0205,0210,0267, 0270,0271,0211,0264,0265,0266,0214
! ,0261, 0262,0263,'0',0177
};
/* Scan codes to ASCII for shifted keys */
--- 155,172 -----
/* Scan codes to ASCII for unshifted keys */
PRIVATE char unsh[] = {
! /* 00 */ 0,033,'1','2','3','4','5','6',
! /* 08 */ '7','8','9','0','-','=','\b','\t',
! /* 10 */ 'q','w','e','r','t','y','u','i',
! /* 18 */ 'o','p','[',']',015,0202,'a','s',
! /* 20 */ 'd','f','g','h','j','k','l',';',
! /* 28 */ 047,0270,0200,0264,'z','x','c','v',
! /* 30 */ 'b','n','m',',','.','/',0201,'*',
! /* 38 */ 0203,' ',0204,0241,0242,0243,0244,0245,
! /* 40 */ 0246,0247,0250,0251,0252,0205,0210,0134,
! /* 48 */ 0176,0271,0262,0174,'5','6',0266,0261,
! /* 50 */ 0140,0263,'0',0177,03,'+','.',012,0267,
! /* 58 */ 0211,0214
};
/* Scan codes to ASCII for shifted keys */
***************
*** 164,175
/* Scan codes to ASCII for shifted keys */
PRIVATE char sh[] = {
! 0,033,'!','@','#','$','%','^', '&','*','(',')','_','+','\b','\t',
! 'Q','W','E','R','T','Y','U','I', 'O','P','{','}',015,0202,'A','S',
! 'D','F','G','H','J','K','L',':', 042,'~',0200,'|','Z','X','C','V',
! 'B','N','M','<','>','?',0201,'*', 0203,' ',0204,0221,0222,0223,0224,0225,
! 0226,0227,0230,0231,0232,0204,0213,'7', '8','9',0211,'4','5','6',0214,'1',
! '2','3','0',177
};
--- 171,188 -----
/* Scan codes to ASCII for shifted keys */
PRIVATE char sh[] = {
! /* 00 */ 0,033,'!','@','#','$','%','^',
! /* 08 */ '&','*','(',')','_','+','\b','\t',
! /* 10 */ 'Q','W','E','R','T','Y','U','I',
! /* 18 */ 'O','P','{','}',012,0202,'A','S',
! /* 20 */ 'D','F','G','H','J','K','L',':',
! /* 28 */ 042,0270,0200,0264,'Z','X','C','V',
! /* 30 */ 'B','N','M','<','>','?',0201,'*',
! /* 38 */ 0203,' ',0204,0221,0222,0223,0224,0225,
! /* 40 */ 0226,0227,0230,0231,0232,0204,0210,'7',
! /* 48 */ '8','9',0262,'4','5','6',0266,'1',
! /* 50 */ '2','3','0','-',03,'+','.',012,0267,
! /* 58 */ 0211,0214
};
***************
*** 281,287
* in_char *
*===========================================================================*/
PRIVATE in_char(line, ch)
! int line; /* line number on which char arrived */
char ch; /* scan code for character that arrived */
{
/* A character has just been typed in. Process, save, and echo it. */
--- 294,300 -----
* in_char *
*===========================================================================*/
PRIVATE in_char(line, ch)
! int line; /* line number on which char arrived */
char ch; /* scan code for character that arrived */
{
/* A character has just been typed in. Process, save, and echo it. */
***************
*** 291,298
char make_break();
tp = &tty_struct[line]; /* set 'tp' to point to proper struct */
/* Function keys are temporarily being used for debug dumps. */
! if (alt && ch >= F1 && ch <= F10) {
! /* Check for function keys F1, F2, ... F10 */
func_key(ch); /* process function key */
return;
}
--- 304,310 -----
char make_break();
tp = &tty_struct[line]; /* set 'tp' to point to proper struct */
/* Function keys are temporarily being used for debug dumps. */
! if (alt && ch >= F1 && ch <= F10) { /* Check for function keys F1, F2, ... F10 */
func_key(ch); /* process function key */
return;
}
***************
*** 371,377
}
/* Check for and process CTRL-S (terminal stop). */
! if (ch == tp->tty_xoff || ch == HOLD) {
tp->tty_inhibited = STOPPED;
return;
}
--- 383,389 -----
}
/* Check for and process CTRL-S (terminal stop). */
! if (ch == tp->tty_xoff) {
tp->tty_inhibited = STOPPED;
return;
}
***************
*** 377,383
}
/* Check for and process CTRL-Q (terminal start). */
! if (ch == tp->tty_xon || ch == HOLD) {
tp->tty_inhibited = RUNNING;
(*tp->tty_devstart)(tp); /* resume output */
return;
--- 389,395 -----
}
/* Check for and process CTRL-Q (terminal start). */
! if (ch == tp->tty_xon) {
tp->tty_inhibited = RUNNING;
(*tp->tty_devstart)(tp); /* resume output */
return;
***************
*** 415,421
/* Standard IBM keyboard. */
code = (shift1 || shift2 ? sh[c] : unsh[c]);
if (capslock && code >= 'a' && code <= 'z')
! code sh[c];
if (control && c < TOP_ROW) code = sh[c]; /* CTRL-(top row) */
if (c > 70 && numlock) code = sh[c]; /* numlock depressed */
} else {
--- 427,433 -----
/* Standard IBM keyboard. */
code = (shift1 || shift2 ? sh[c] : unsh[c]);
if (capslock && code >= 'a' && code <= 'z')
! code -= 32; /* capitalize alpha */
if (control && c < TOP_ROW) code = sh[c]; /* CTRL-(top row) */
if (c > 70 && numlock) code = sh[c]; /* numlock depressed */
} else {
***************
*** 420,428
if (c > 70 && numlock) code = sh[c]; /* numlock depressed */
} else {
/* (Olivetti M24 or AT&T 6300) with Olivetti-style keyboard. */
! code = (shift1 || shift2 ? m24[c] : unm24[c]);
! if (capslock && code >= 'a' && code <= 'z')
! code sh[c];
if (control && c < TOP_ROW) code = sh[c]; /* CTRL-(top row) */
if (c > 70 && numlock) code = m24[c]; /* numlock depressed */
}
--- 432,438 -----
if (c > 70 && numlock) code = sh[c]; /* numlock depressed */
} else {
/* (Olivetti M24 or AT&T 6300) with Olivetti-style keyboard. */
! code = (shift1 || shift2 || capslock ? m24[c] : unm24[c]);
if (control && c < TOP_ROW) code = sh[c]; /* CTRL-(top row) */
if (c > 70 && numlock) code = m24[c]; /* numlock depressed */
}
***************
*** 445,451
#ifdef T1000
case 4: capslock = make; break; /* caps lock */
case 5: numlock = make; break; /* num lock */
- case 6: return(HOLD); /* scroll lock */
#else
case 4: if (make) capslock = 1 - capslock; break; /* caps lock */
case 5: if (make) numlock = 1 - numlock; break; /* num lock */
--- 455,460 -----
#ifdef T1000
case 4: capslock = make; break; /* caps lock */
case 5: numlock = make; break; /* num lock */
#else
case 4: if (make) capslock = 1 - capslock; break; /* caps lock */
case 5: if (make) numlock = 1 - numlock; break; /* num lock */
***************
*** 846,852
k = code - 0200; /* codes > 0200 mean key release */
if (k > 0) {
/* A key has been released. */
! if (k != 29 && k != 42 && k != 54 && k != 56 && k != 69) {
port_out(INT_CTL, ENABLE); /* re-enable interrupts */
return; /* don't call tty_task() */
}
--- 855,862 -----
k = code - 0200; /* codes > 0200 mean key release */
if (k > 0) {
/* A key has been released. */
! if (k != 29 && k != 42 && k != 54 && k != 56 && k !=58 &&
! k != 69) {
port_out(INT_CTL, ENABLE); /* re-enable interrupts */
return; /* don't call tty_task() */
}
***************
*** 1021,1030
register struct tty_struct *tp; /* pointer to tty struct */
int dir; /* GO_FORWARD or GO_BACKWARD */
{
- int amount, offset;
-
- amount = (dir == GO_FORWARD ? 2 * LINE_WIDTH : -2 * LINE_WIDTH);
- tp->tty_org = (tp->tty_org + amount) & vid_mask;
if (dir == GO_FORWARD)
offset = (tp->tty_org + 2 * (SCR_LINES - 1) * LINE_WIDTH) & vid_mask;
else
--- 1031,1036 -----
register struct tty_struct *tp; /* pointer to tty struct */
int dir; /* GO_FORWARD or GO_BACKWARD */
{
if (dir == GO_FORWARD)
{
scr_up(vid_base);
***************
*** 1026,1038
amount = (dir == GO_FORWARD ? 2 * LINE_WIDTH : -2 * LINE_WIDTH);
tp->tty_org = (tp->tty_org + amount) & vid_mask;
if (dir == GO_FORWARD)
! offset = (tp->tty_org + 2 * (SCR_LINES - 1) * LINE_WIDTH) & vid_mask;
! else
! offset = tp->tty_org;
!
! /* Blank the new line at top or bottom. */
! vid_copy(NIL_PTR, vid_base, offset, LINE_WIDTH);
! set_6845(VID_ORG, tp->tty_org >> 1); /* 6845 thinks in words */
}
--- 1032,1045 -----
int dir; /* GO_FORWARD or GO_BACKWARD */
{
if (dir == GO_FORWARD)
! {
! scr_up(vid_base);
! vid_copy(NIL_PTR, vid_base, tp->tty_org+2*(SCR_LINES-1)*LINE_WIDTH,
! LINE_WIDTH);
! } else {
! scr_dn(vid_base);
! vid_copy(NIL_PTR, vid_base, tp->tty_org, LINE_WIDTH);
! }
}
--
-----------------------------------------------------------------------
Brian Beattie | Phone: (703)749-2365
NetExpress Communications, Inc. | uucp: seismo!sundc!netxcom!beattie
1953 Gallows Road, Suite 300 |
Vienna,VA 22180 |