Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/fb/fb.c

    r39e1b9a rde96d3b  
    121121        /** Current backbuffer position */
    122122        unsigned int position;
    123 
    124         /** Partial character between writes */
    125         mbstate_t mbstate;
    126123} fb_instance_t;
    127124
    128 static void fb_write(outdev_t *, const char *, size_t);
     125static void fb_putuchar(outdev_t *, char32_t);
    129126static void fb_redraw(outdev_t *);
    130127static void fb_scroll_up(outdev_t *);
     
    132129
    133130static outdev_operations_t fbdev_ops = {
    134         .write = fb_write,
     131        .write = fb_putuchar,
    135132        .redraw = fb_redraw,
    136133        .scroll_up = fb_scroll_up,
     
    421418 *
    422419 */
    423 static void _putuchar(fb_instance_t *instance, char32_t ch)
    424 {
     420static void fb_putuchar(outdev_t *dev, char32_t ch)
     421{
     422        fb_instance_t *instance = (fb_instance_t *) dev->data;
     423        spinlock_lock(&instance->lock);
     424
    425425        switch (ch) {
    426426        case '\n':
     427                cursor_remove(instance);
    427428                instance->position += instance->cols;
    428429                instance->position -= instance->position % instance->cols;
    429430                break;
    430431        case '\r':
     432                cursor_remove(instance);
    431433                instance->position -= instance->position % instance->cols;
    432434                break;
    433435        case '\b':
     436                cursor_remove(instance);
    434437                if (instance->position % instance->cols)
    435438                        instance->position--;
    436439                break;
    437440        case '\t':
     441                cursor_remove(instance);
    438442                do {
    439443                        glyph_draw(instance, fb_font_glyph(' '),
     
    455459                screen_scroll(instance);
    456460        }
    457 }
    458 
    459 static void fb_write(outdev_t *dev, const char *s, size_t n)
    460 {
    461         fb_instance_t *instance = (fb_instance_t *) dev->data;
    462 
    463         spinlock_lock(&instance->lock);
    464         cursor_remove(instance);
    465 
    466         size_t offset = 0;
    467         char32_t ch;
    468 
    469         while ((ch = str_decode_r(s, &offset, n, U_SPECIAL, &instance->mbstate)))
    470                 _putuchar(instance, ch);
    471461
    472462        cursor_put(instance);
     463
    473464        spinlock_unlock(&instance->lock);
    474465}
Note: See TracChangeset for help on using the changeset viewer.