git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Kernel - Fixing vterm bug with 32-bit input, slight fix to keymap
[tpg/acess2.git]
/
Kernel
/
drv
/
vterm.c
diff --git
a/Kernel/drv/vterm.c
b/Kernel/drv/vterm.c
index
4fd0616
..
57ce082
100644
(file)
--- a/
Kernel/drv/vterm.c
+++ b/
Kernel/drv/vterm.c
@@
-482,7
+482,7
@@
Uint64 VT_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
((char*)Buffer)[pos] = term->InputBuffer[term->InputRead];
pos ++;
term->InputRead ++;
((char*)Buffer)[pos] = term->InputBuffer[term->InputRead];
pos ++;
term->InputRead ++;
- while(term->InputRead > MAX_INPUT_CHARS8)
+ while(term->InputRead >
=
MAX_INPUT_CHARS8)
term->InputRead -= MAX_INPUT_CHARS8;
}
break;
term->InputRead -= MAX_INPUT_CHARS8;
}
break;
@@
-495,8
+495,9
@@
Uint64 VT_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
avail = term->InputWrite - term->InputRead;
if(avail < 0)
avail += MAX_INPUT_CHARS32;
avail = term->InputWrite - term->InputRead;
if(avail < 0)
avail += MAX_INPUT_CHARS32;
+ Length /= 4;
if(avail > Length - pos)
if(avail > Length - pos)
- avail = Length
/4
- pos;
+ avail = Length - pos;
codepoint_in = (void*)term->InputBuffer;
codepoint_buf = Buffer;
codepoint_in = (void*)term->InputBuffer;
codepoint_buf = Buffer;
@@
-506,7
+507,7
@@
Uint64 VT_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
codepoint_buf[pos] = codepoint_in[term->InputRead];
pos ++;
term->InputRead ++;
codepoint_buf[pos] = codepoint_in[term->InputRead];
pos ++;
term->InputRead ++;
- while(term->InputRead > MAX_INPUT_CHARS32)
+ while(term->InputRead >
=
MAX_INPUT_CHARS32)
term->InputRead -= MAX_INPUT_CHARS32;
}
pos *= 4;
term->InputRead -= MAX_INPUT_CHARS32;
}
pos *= 4;
@@
-1053,13
+1054,26
@@
void VT_KBCallBack(Uint32 Codepoint)
{
// Encode the raw key event
Uint32 *raw_in = (void*)term->InputBuffer;
{
// Encode the raw key event
Uint32 *raw_in = (void*)term->InputBuffer;
+
+ #if 0
+ // Drop new keys
+ if( term->InputWrite == term->InputRead )
+ return ;
+ #endif
+
raw_in[ term->InputWrite ] = Codepoint;
term->InputWrite ++;
raw_in[ term->InputWrite ] = Codepoint;
term->InputWrite ++;
- term->InputWrite %= MAX_INPUT_CHARS32;
+ if(term->InputWrite >= MAX_INPUT_CHARS32)
+ term->InputWrite -= MAX_INPUT_CHARS32;
+
+ #if 1
+ // TODO: Should old or new be dropped?
if(term->InputRead == term->InputWrite) {
term->InputRead ++;
if(term->InputRead == term->InputWrite) {
term->InputRead ++;
- term->InputRead %= MAX_INPUT_CHARS32;
+ if( term->InputRead >= MAX_INPUT_CHARS32 )
+ term->InputRead -= MAX_INPUT_CHARS32;
}
}
+ #endif
}
VFS_MarkAvaliable(&term->Node, 1);
}
VFS_MarkAvaliable(&term->Node, 1);
@@
-1324,6
+1338,9
@@
int VT_int_ParseEscape(tVTerm *Term, char *Buffer)
if(argc != 1) break;
switch(args[0])
{
if(argc != 1) break;
switch(args[0])
{
+ case 25:
+ Term->Flags &= ~VT_FLAG_HIDECSR;
+ break;
case 1047:
VT_int_ToggleAltBuffer(Term, 1);
break;
case 1047:
VT_int_ToggleAltBuffer(Term, 1);
break;
@@
-1333,6
+1350,9
@@
int VT_int_ParseEscape(tVTerm *Term, char *Buffer)
if(argc != 1) break;
switch(args[0])
{
if(argc != 1) break;
switch(args[0])
{
+ case 25:
+ Term->Flags |= VT_FLAG_HIDECSR;
+ break;
case 1047:
VT_int_ToggleAltBuffer(Term, 0);
break;
case 1047:
VT_int_ToggleAltBuffer(Term, 0);
break;
UCC
git Repository :: git.ucc.asn.au