Changeset e8a9dc3 in mainline


Ignore:
Timestamp:
2005-12-10T16:37:20Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e5fcf00
Parents:
f7f6f25
Message:

Added support for backspace

  • printing '\b' should move the cursor one char to the left
  • backspace key should return '\b' to application
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • arch/ia32/src/drivers/ega.c

    rf7f6f25 re8a9dc3  
    100100
    101101        switch (ch) {
    102             case '\n':
     102        case '\n':
    103103                ega_cursor = (ega_cursor + ROW) - ega_cursor % ROW;
    104104                break;
    105             case '\t':
     105        case '\t':
    106106                ega_cursor = (ega_cursor + 8) - ega_cursor % 8;
    107107                break;
    108             default:
     108        case '\b':
     109                if (ega_cursor % ROW)
     110                        ega_cursor--;
     111                break;
     112        default:
    109113                ega_display_char(ch);
    110114                ega_cursor++;
  • arch/ia32/src/drivers/i8042.c

    rf7f6f25 re8a9dc3  
    8282        SPECIAL, /* 0x01 - Esc */
    8383        '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=',
    84         SPECIAL, /* 0x0e - Backspace */
     84        '\b', /* 0x0e - Backspace */
    8585        '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
    8686        SPECIAL, /* 0x1d - LCtrl */
  • arch/mips32/src/drivers/arc.c

    rf7f6f25 re8a9dc3  
    210210        if (ch == '\r')
    211211                ch = '\n';
    212 
     212        if (ch == 0x7f)
     213                ch = '\b';
     214       
    213215        chardev_push_character(&console, ch);
    214216}
  • arch/mips32/src/drivers/msim.c

    rf7f6f25 re8a9dc3  
    6262}
    6363
     64#include <print.h>
    6465/** Process keyboard interrupt. */
    6566static void msim_interrupt(int n, void *stack)
     
    7071        if (ch =='\r')
    7172                ch = '\n';
     73        if (ch == 0x7f)
     74                ch = '\b';
    7275        chardev_push_character(&console, ch);
    7376}
  • generic/src/console/chardev.c

    rf7f6f25 re8a9dc3  
    6363        }
    6464
    65         putchar(ch);
    6665        chardev->buffer[chardev->index++] = ch;
    6766        chardev->index = chardev->index % CHARDEV_BUFLEN; /* index modulo size of buffer */
  • generic/src/console/console.c

    rf7f6f25 re8a9dc3  
    4040chardev_t *stdout = NULL;
    4141
     42/** Get character from character device.
     43 *
     44 * @param chardev Character device.
     45 *
     46 * @return Character read.
     47 */
     48static __u8 _getc(chardev_t *chardev)
     49{
     50        __u8 ch;
     51        ipl_t ipl;
     52
     53        waitq_sleep(&chardev->wq);
     54        ipl = interrupts_disable();
     55        spinlock_lock(&chardev->lock);
     56        ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN];
     57        chardev->counter--;
     58        spinlock_unlock(&chardev->lock);
     59        interrupts_restore(ipl);
     60
     61        chardev->op->resume(chardev);
     62
     63        return ch;
     64}
     65
    4266/** Get string from character device.
    4367 *
     
    5781
    5882        while (index < buflen) {
    59                 ch = getc(chardev);
     83                ch = _getc(chardev);
     84                if (ch == '\b') {
     85                        if (index > 0) {
     86                                index--;
     87                                /* Space backspace, space */
     88                                putchar('\b');
     89                                putchar(' ');
     90                                putchar('\b');
     91                        }
     92                        continue;
     93                }
     94                putchar(ch);
     95
    6096                if (ch == '\n') { /* end of string => write 0, return */
    6197                        buf[index] = '\0';
     
    67103}
    68104
    69 /** Get character from character device.
    70  *
    71  * @param chardev Character device.
    72  *
    73  * @return Character read.
    74  */
     105/** Get character from device & echo it to screen */
    75106__u8 getc(chardev_t *chardev)
    76107{
    77108        __u8 ch;
    78         ipl_t ipl;
    79109
    80         waitq_sleep(&chardev->wq);
    81         ipl = interrupts_disable();
    82         spinlock_lock(&chardev->lock);
    83         ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN];
    84         chardev->counter--;
    85         spinlock_unlock(&chardev->lock);
    86         interrupts_restore(ipl);
    87 
    88         chardev->op->resume(chardev);
    89 
     110        ch = _getc(chardev);
     111        putchar(ch);
    90112        return ch;
    91113}
Note: See TracChangeset for help on using the changeset viewer.