X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Fvterm.c;h=fc89b3a4fb3443ae43a13025845953a48a518fe1;hb=084ec29bd3b93d4974378e29b701b61b2c884cec;hp=b26113089478810a1f501c6d9d7d84afe95e1ea9;hpb=142cba687f6eede6de63efbb25d2fc811f2fe1d1;p=tpg%2Facess2.git diff --git a/Kernel/drv/vterm.c b/Kernel/drv/vterm.c index b2611308..fc89b3a4 100644 --- a/Kernel/drv/vterm.c +++ b/Kernel/drv/vterm.c @@ -419,6 +419,7 @@ int VT_Root_IOCtl(tVFS_Node *Node, int Id, void *Data) Uint64 VT_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) { int pos = 0; + int avail; tVTerm *term = &gVT_Terminals[ Node->Inode ]; Mutex_Acquire( &term->ReadingLock ); @@ -428,49 +429,41 @@ Uint64 VT_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) { // Text Mode (UTF-8) case TERM_MODE_TEXT: - while(pos < Length) - { - int avail_bytes; - VFS_SelectNode(Node, VFS_SELECT_READ, NULL); - avail_bytes = term->InputRead - term->InputWrite; + VFS_SelectNode(Node, VFS_SELECT_READ, NULL); - if(avail_bytes < 0) - avail_bytes += MAX_INPUT_CHARS8; - if(avail_bytes > Length - pos) - avail_bytes = Length - pos; - - while( avail_bytes -- ) - { - ((char*)Buffer)[pos] = term->InputBuffer[term->InputRead]; - pos ++; - term->InputRead ++; - term->InputRead %= MAX_INPUT_CHARS8; - } + avail = term->InputWrite - term->InputRead; + if(avail < 0) + avail += MAX_INPUT_CHARS8; + if(avail > Length - pos) + avail = Length - pos; + + while( avail -- ) + { + ((char*)Buffer)[pos] = term->InputBuffer[term->InputRead]; + pos ++; + term->InputRead ++; + term->InputRead %= MAX_INPUT_CHARS8; } break; //case TERM_MODE_FB: // Other - UCS-4 default: - while(pos < Length) - { - int avail; - VFS_SelectNode(Node, VFS_SELECT_READ, NULL); + VFS_SelectNode(Node, VFS_SELECT_READ, NULL); - avail = term->InputRead - term->InputWrite; - if(avail < 0) - avail += MAX_INPUT_CHARS32; - if(avail > Length - pos) - avail = Length/4 - pos; - - - while( avail -- ) - { - ((Uint32*)Buffer)[pos] = ((Uint32*)term->InputBuffer)[term->InputRead]; - pos ++; - term->InputRead ++; - term->InputRead %= MAX_INPUT_CHARS32; - } + avail = term->InputWrite - term->InputRead; + if(avail < 0) + avail += MAX_INPUT_CHARS32; + if(avail > Length - pos) + avail = Length/4 - pos; + + + while( avail -- ) + { + ((Uint32*)Buffer)[pos] = ((Uint32*)term->InputBuffer)[term->InputRead]; + pos ++; + term->InputRead ++; + term->InputRead %= MAX_INPUT_CHARS32; } pos *= 4; break;