Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 587 → Rev 588

/kernel/trunk/generic/src/console/console.c
39,6 → 39,30
chardev_t *stdin = NULL;
chardev_t *stdout = NULL;
 
/** Get character from character device.
*
* @param chardev Character device.
*
* @return Character read.
*/
static __u8 _getc(chardev_t *chardev)
{
__u8 ch;
ipl_t ipl;
 
waitq_sleep(&chardev->wq);
ipl = interrupts_disable();
spinlock_lock(&chardev->lock);
ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN];
chardev->counter--;
spinlock_unlock(&chardev->lock);
interrupts_restore(ipl);
 
chardev->op->resume(chardev);
 
return ch;
}
 
/** Get string from character device.
*
* Read characters from character device until first occurrence
56,7 → 80,19
char ch;
 
while (index < buflen) {
ch = getc(chardev);
ch = _getc(chardev);
if (ch == '\b') {
if (index > 0) {
index--;
/* Space backspace, space */
putchar('\b');
putchar(' ');
putchar('\b');
}
continue;
}
putchar(ch);
 
if (ch == '\n') { /* end of string => write 0, return */
buf[index] = '\0';
return (count_t) index;
66,27 → 102,13
return (count_t) index;
}
 
/** Get character from character device.
*
* @param chardev Character device.
*
* @return Character read.
*/
/** Get character from device & echo it to screen */
__u8 getc(chardev_t *chardev)
{
__u8 ch;
ipl_t ipl;
 
waitq_sleep(&chardev->wq);
ipl = interrupts_disable();
spinlock_lock(&chardev->lock);
ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN];
chardev->counter--;
spinlock_unlock(&chardev->lock);
interrupts_restore(ipl);
 
chardev->op->resume(chardev);
 
ch = _getc(chardev);
putchar(ch);
return ch;
}
 
/kernel/trunk/generic/src/console/chardev.c
62,7 → 62,6
chardev->op->suspend(chardev);
}
 
putchar(ch);
chardev->buffer[chardev->index++] = ch;
chardev->index = chardev->index % CHARDEV_BUFLEN; /* index modulo size of buffer */
waitq_wakeup(&chardev->wq, WAKEUP_FIRST);
/kernel/trunk/arch/mips32/src/drivers/arc.c
209,7 → 209,9
}
if (ch == '\r')
ch = '\n';
 
if (ch == 0x7f)
ch = '\b';
chardev_push_character(&console, ch);
}
 
/kernel/trunk/arch/mips32/src/drivers/msim.c
61,6 → 61,7
cp0_mask_int(MSIM_KBD_IRQ);
}
 
#include <print.h>
/** Process keyboard interrupt. */
static void msim_interrupt(int n, void *stack)
{
69,6 → 70,8
ch = *((char *) MSIM_KBD_ADDRESS);
if (ch =='\r')
ch = '\n';
if (ch == 0x7f)
ch = '\b';
chardev_push_character(&console, ch);
}
 
/kernel/trunk/arch/ia32/src/drivers/i8042.c
81,7 → 81,7
SPECIAL, /* 0x00 */
SPECIAL, /* 0x01 - Esc */
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=',
SPECIAL, /* 0x0e - Backspace */
'\b', /* 0x0e - Backspace */
'\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
SPECIAL, /* 0x1d - LCtrl */
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'',
/kernel/trunk/arch/ia32/src/drivers/ega.c
99,13 → 99,17
spinlock_lock(&egalock);
 
switch (ch) {
case '\n':
case '\n':
ega_cursor = (ega_cursor + ROW) - ega_cursor % ROW;
break;
case '\t':
case '\t':
ega_cursor = (ega_cursor + 8) - ega_cursor % 8;
break;
default:
case '\b':
if (ega_cursor % ROW)
ega_cursor--;
break;
default:
ega_display_char(ch);
ega_cursor++;
break;