Subversion Repositories HelenOS-historic

Rev

Rev 1501 | Rev 1509 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1501 Rev 1505
Line 38... Line 38...
38
#include <ipc/ipc.h>
38
#include <ipc/ipc.h>
39
#include <ipc/ns.h>
39
#include <ipc/ns.h>
40
#include <ipc/services.h>
40
#include <ipc/services.h>
41
#include <kernel/errno.h>
41
#include <kernel/errno.h>
42
#include <async.h>
42
#include <async.h>
-
 
43
 
43
#include "font-8x16.h"
44
#include "font-8x16.h"
44
#include "helenos.xbm"
45
#include "helenos.xbm"
45
#include "fb.h"
46
#include "fb.h"
-
 
47
#include "main.h"
-
 
48
#include "../console/screenbuffer.h"
46
 
49
 
47
#define DEFAULT_BGCOLOR                0x000080
50
#define DEFAULT_BGCOLOR                0x000080
48
#define DEFAULT_FGCOLOR                0xffff00
51
#define DEFAULT_FGCOLOR                0xffff00
49
 
52
 
50
/***************************************************************/
53
/***************************************************************/
Line 456... Line 459...
456
            vport->cur_row--;
459
            vport->cur_row--;
457
    }
460
    }
458
    cursor_print(vp);
461
    cursor_print(vp);
459
}
462
}
460
 
463
 
-
 
464
static void draw_text_data(int vp, keyfield_t *data)
-
 
465
{
-
 
466
    viewport_t *vport = &viewports[vp];
-
 
467
    int i;
-
 
468
    char c;
-
 
469
 
-
 
470
    clear_port(vp);
-
 
471
    for (i=0; i < vport->cols * vport->rows; i++) {
-
 
472
        if (data[i].character == ' ') /* TODO: && data[i].style==vport->style */
-
 
473
            continue;
-
 
474
        draw_char(vp, data[i].character, i/vport->rows, i % vport->cols);
-
 
475
    }
-
 
476
    cursor_print(vp);
-
 
477
}
-
 
478
 
-
 
479
 
461
/** Function for handling connections to FB
480
/** Function for handling connections to FB
462
 *
481
 *
463
 */
482
 */
464
static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall)
483
static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall)
465
{
484
{
Line 467... Line 486...
467
    ipc_call_t call;
486
    ipc_call_t call;
468
    int retval;
487
    int retval;
469
    int i;
488
    int i;
470
    unsigned int row,col;
489
    unsigned int row,col;
471
    char c;
490
    char c;
-
 
491
    keyfield_t *interbuffer = NULL;
-
 
492
    size_t intersize = 0;
472
 
493
 
473
    int vp = 0;
494
    int vp = 0;
474
    viewport_t *vport = &viewports[0];
495
    viewport_t *vport = &viewports[0];
475
 
496
 
476
    if (client_connected) {
497
    if (client_connected) {
Line 492... Line 513...
492
            /* cleanup other viewports */
513
            /* cleanup other viewports */
493
            for (i=1; i < MAX_VIEWPORTS; i++)
514
            for (i=1; i < MAX_VIEWPORTS; i++)
494
                vport->initialized = 0;
515
                vport->initialized = 0;
495
            ipc_answer_fast(callid,0,0,0);
516
            ipc_answer_fast(callid,0,0,0);
496
            return; /* Exit thread */
517
            return; /* Exit thread */
-
 
518
        case IPC_M_AS_AREA_SEND:
-
 
519
            /* We accept one area for data interchange */
-
 
520
            intersize = IPC_GET_ARG2(call);
-
 
521
            receive_comm_area(callid,&call,(void **)&interbuffer,
-
 
522
                      sizeof(*interbuffer)*viewports[0].cols*viewports[0].rows);
-
 
523
            continue;
-
 
524
 
-
 
525
        case FB_DRAW_TEXT_DATA:
-
 
526
            if (!interbuffer) {
-
 
527
                retval = EINVAL;
-
 
528
                break;
-
 
529
            }
-
 
530
            if (intersize < vport->cols*vport->rows*sizeof(*interbuffer)) {
-
 
531
                retval = EINVAL;
-
 
532
                break;
-
 
533
            }
-
 
534
            draw_text_data(vp, interbuffer);
-
 
535
            retval = 0;
-
 
536
            break;
497
        case FB_PUTCHAR:
537
        case FB_PUTCHAR:
498
            c = IPC_GET_ARG1(call);
538
            c = IPC_GET_ARG1(call);
499
            row = IPC_GET_ARG2(call);
539
            row = IPC_GET_ARG2(call);
500
            col = IPC_GET_ARG3(call);
540
            col = IPC_GET_ARG3(call);
501
            if (row >= vport->rows || col >= vport->cols) {
541
            if (row >= vport->rows || col >= vport->cols) {