Subversion Repositories HelenOS

Rev

Rev 3742 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3742 Rev 3745
Line 217... Line 217...
217
 *
217
 *
218
 *
218
 *
219
 */
219
 */
220
static void screen_scroll(void)
220
static void screen_scroll(void)
221
{
221
{
222
    if (ylogo > 0)
222
    if (ylogo > 0) {
223
        logo_hide();
223
        logo_hide();
-
 
224
        return;
-
 
225
    }
224
   
226
   
225
    unsigned int row;
227
    unsigned int row;
226
   
228
   
227
    for (row = 0; row < rows; row++) {
229
    for (row = 0; row < rows; row++) {
228
        unsigned int y = ROW2Y(row);
230
        unsigned int y = ROW2Y(row);
Line 230... Line 232...
230
       
232
       
231
        for (yd = 0; yd < FONT_SCANLINES; yd++) {
233
        for (yd = 0; yd < FONT_SCANLINES; yd++) {
232
            unsigned int x;
234
            unsigned int x;
233
            unsigned int col;
235
            unsigned int col;
234
           
236
           
235
            for (col = 0, x = 0; col < cols; col++, x += FONT_WIDTH) {
237
            for (col = 0, x = 0; col < cols; col++,
-
 
238
                x += FONT_WIDTH) {
236
                uint8_t glyph;
239
                uint8_t glyph;
237
               
240
               
238
                if (row < rows - 1) {
241
                if (row < rows - 1) {
-
 
242
                    if (backbuf[BB_POS(col, row)] ==
239
                    if (backbuf[BB_POS(col, row)] == backbuf[BB_POS(col, row + 1)])
243
                        backbuf[BB_POS(col, row + 1)])
240
                        continue;
244
                        continue;
241
                   
245
                   
242
                    glyph = backbuf[BB_POS(col, row + 1)];
246
                    glyph = backbuf[BB_POS(col, row + 1)];
243
                } else
247
                } else
244
                    glyph = 0;
248
                    glyph = 0;
245
               
249
               
246
                memcpy(&fb_addr[FB_POS(x, y + yd)],
250
                memcpy(&fb_addr[FB_POS(x, y + yd)],
247
                    &glyphs[GLYPH_POS(glyph, yd)], glyphscanline);
251
                    &glyphs[GLYPH_POS(glyph, yd)],
-
 
252
                    glyphscanline);
248
            }
253
            }
249
        }
254
        }
250
    }
255
    }
251
   
256
   
252
    memcpy(backbuf, backbuf + cols, cols * (rows - 1));
257
    memcpy(backbuf, backbuf + cols, cols * (rows - 1));
Line 291... Line 296...
291
            position--;
296
            position--;
292
        break;
297
        break;
293
    case '\t':
298
    case '\t':
294
        cursor_remove();
299
        cursor_remove();
295
        do {
300
        do {
296
            glyph_draw((uint8_t) ' ', position % cols, position / cols);
301
            glyph_draw((uint8_t) ' ', position % cols,
-
 
302
                position / cols);
297
            position++;
303
            position++;
298
        } while ((position % 8) && (position < cols * rows));
304
        } while ((position % 8) && (position < cols * rows));
299
        break;
305
        break;
300
    default:
306
    default:
301
        glyph_draw((uint8_t) ch, position % cols, position / cols);
307
        glyph_draw((uint8_t) ch, position % cols, position / cols);
Line 333... Line 339...
333
        unsigned int y;
339
        unsigned int y;
334
       
340
       
335
        for (y = 0; y < FONT_SCANLINES; y++) {
341
        for (y = 0; y < FONT_SCANLINES; y++) {
336
            unsigned int x;
342
            unsigned int x;
337
           
343
           
338
            for (x = 0; x < FONT_WIDTH; x++)
344
            for (x = 0; x < FONT_WIDTH; x++) {
339
                rgb_conv(&glyphs[GLYPH_POS(glyph, y) + x * pixelbytes],
345
                void *dst = &glyphs[GLYPH_POS(glyph, y) +
-
 
346
                    x * pixelbytes];
-
 
347
                uint32_t rgb = (fb_font[ROW2Y(glyph) + y] &
340
                    (fb_font[ROW2Y(glyph) + y] & (1 << (7 - x))) ? FG_COLOR : BG_COLOR);
348
                    (1 << (7 - x))) ? FG_COLOR : BG_COLOR;
-
 
349
                rgb_conv(dst, rgb);
-
 
350
            }
341
        }
351
        }
342
    }
352
    }
343
   
353
   
344
    /* Prerender background scanline */
354
    /* Prerender background scanline */
345
    unsigned int x;
355
    unsigned int x;
Line 360... Line 370...
360
        for (y = 0; y < LOGO_HEIGHT; y++) {
370
        for (y = 0; y < LOGO_HEIGHT; y++) {
361
            unsigned int x;
371
            unsigned int x;
362
           
372
           
363
            for (x = 0; x < xres; x++)
373
            for (x = 0; x < xres; x++)
364
                rgb_conv(&fb_addr[FB_POS(x, y)],
374
                rgb_conv(&fb_addr[FB_POS(x, y)],
-
 
375
                    (x < LOGO_WIDTH) ?
365
                    (x < LOGO_WIDTH) ? fb_logo[y * LOGO_WIDTH + x] : LOGO_COLOR);
376
                    fb_logo[y * LOGO_WIDTH + x] :
-
 
377
                    LOGO_COLOR);
366
        }
378
        }
367
    }
379
    }
368
   
380
   
369
    unsigned int row;
381
    unsigned int row;
370
   
382
   
Line 374... Line 386...
374
       
386
       
375
        for (yd = 0; yd < FONT_SCANLINES; yd++) {
387
        for (yd = 0; yd < FONT_SCANLINES; yd++) {
376
            unsigned int x;
388
            unsigned int x;
377
            unsigned int col;
389
            unsigned int col;
378
           
390
           
379
            for (col = 0, x = 0; col < cols; col++, x += FONT_WIDTH)
391
            for (col = 0, x = 0; col < cols;
-
 
392
                col++, x += FONT_WIDTH) {
380
                memcpy(&fb_addr[FB_POS(x, y + yd)],
393
                void *d = &fb_addr[FB_POS(x, y + yd)];
381
                &glyphs[GLYPH_POS(backbuf[BB_POS(col, row)], yd)],
394
                void *s = &glyphs[GLYPH_POS(backbuf[BB_POS(col,
-
 
395
                    row)], yd)];
382
                glyphscanline);
396
                memcpy(d, s, glyphscanline);
-
 
397
            }
383
        }
398
        }
384
    }
399
    }
385
   
400
   
386
    if (COL2X(cols) < xres) {
401
    if (COL2X(cols) < xres) {
387
        unsigned int y;
402
        unsigned int y;
Line 389... Line 404...
389
       
404
       
390
        for (y = ylogo; y < yres; y++)
405
        for (y = ylogo; y < yres; y++)
391
            memcpy(&fb_addr[FB_POS(COL2X(cols), y)], bgscan, size);
406
            memcpy(&fb_addr[FB_POS(COL2X(cols), y)], bgscan, size);
392
    }
407
    }
393
   
408
   
394
    if (ROW2Y(rowtrim) < yres) {
409
    if (ROW2Y(rowtrim) + ylogo < yres) {
395
        unsigned int y;
410
        unsigned int y;
396
       
411
       
397
        for (y = ROW2Y(rowtrim); y < yres; y++)
412
        for (y = ROW2Y(rowtrim) + ylogo; y < yres; y++)
398
            memcpy(&fb_addr[FB_POS(0, y)], bgscan, bgscanbytes);
413
            memcpy(&fb_addr[FB_POS(0, y)], bgscan, bgscanbytes);
399
    }
414
    }
400
}
415
}
401
 
416
 
402
 
417